[{"data":1,"prerenderedAt":173578},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker-zhi-tong":3,"wiki-doc-nav":772},{"id":4,"title":5,"body":6,"description":16,"extension":766,"meta":767,"navigation":398,"path":768,"seo":769,"stem":770,"__hash__":771},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":8,"toc":760},"minimark",[9,13,17,22,29,36,39,82,87,96,99,104,108,116,121,129,134,137,142,147,250,255,276,281,302,307,325,329,334,363,368,419,424,468,477,494,499,515,520,534,537,540,543,546,576,579,584,588,591,594,600,603,606,609,678,685,690,693,711,715,718,735,738,741,756],[10,11,5],"h1",{"id":12},"_3docker直通",[14,15,16],"p",{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[18,19,21],"h3",{"id":20},"_31usb直通","3.1.USB直通",[14,23,24],{},[25,26],"img",{"alt":27,"src":28},"","\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[30,31,32],"ol",{},[33,34,35],"li",{},"方法一(不是很推荐新手)：",[14,37,38],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[40,41,45],"pre",{"className":42,"code":43,"language":44,"meta":27,"style":27},"language-bash shiki shiki-themes github-light github-dark","ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n","bash",[46,47,48,61,68],"code",{"__ignoreMap":27},[49,50,53,57],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"sScJk","ls",[49,58,60],{"class":59},"sZZnC"," \u002Fdev\n",[49,62,64],{"class":51,"line":63},2,[49,65,67],{"class":66},"sJ8bj","#例如\n",[49,69,71,75,79],{"class":51,"line":70},3,[49,72,74],{"class":73},"sVt8B","--device",[49,76,78],{"class":77},"szBVR","=",[49,80,81],{"class":59},"\u002Fdev\u002Ftty_USB0\n",[30,83,84],{"start":63},[33,85,86],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[40,88,90],{"className":42,"code":89,"language":44,"meta":27,"style":27},"--privileged\n",[46,91,92],{"__ignoreMap":27},[49,93,94],{"class":51,"line":52},[49,95,89],{"class":55},[14,97,98],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,100,101],{},[25,102],{"alt":27,"src":103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[18,105,107],{"id":106},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,109,110,111,115],{},"NVIDIA Container Toolkit使用户 ",[112,113,114],"strong",{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,117,118],{},[25,119],{"alt":27,"src":120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,122,123],{},[124,125,126],"a",{"href":126,"rel":127},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[128],"nofollow",[130,131,133],"h4",{"id":132},"_321安装","3.2.1.安装",[14,135,136],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[138,139,141],"h5",{"id":140},"_3211ubuntu","3.2.1.1.Ubuntu",[30,143,144],{},[33,145,146],{},"配置存储库 并更新",[40,148,150],{"className":42,"code":149,"language":44,"meta":27,"style":27},"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",[46,151,152,185,205,217,231,239],{"__ignoreMap":27},[49,153,154,157,161,164,167,170,173,176,179,182],{"class":51,"line":52},[49,155,156],{"class":55},"curl",[49,158,160],{"class":159},"sj4cs"," -fsSL",[49,162,163],{"class":59}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[49,165,166],{"class":77}," |",[49,168,169],{"class":55}," sudo",[49,171,172],{"class":59}," gpg",[49,174,175],{"class":159}," --dearmor",[49,177,178],{"class":159}," -o",[49,180,181],{"class":59}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[49,183,184],{"class":159}," \\\n",[49,186,187,190,192,195,198,201,203],{"class":51,"line":63},[49,188,189],{"class":73},"  && ",[49,191,156],{"class":55},[49,193,194],{"class":159}," -s",[49,196,197],{"class":159}," -L",[49,199,200],{"class":59}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[49,202,166],{"class":77},[49,204,184],{"class":159},[49,206,207,210,213,215],{"class":51,"line":70},[49,208,209],{"class":55},"    sed",[49,211,212],{"class":59}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[49,214,166],{"class":77},[49,216,184],{"class":159},[49,218,220,223,226,229],{"class":51,"line":219},4,[49,221,222],{"class":55},"    sudo",[49,224,225],{"class":59}," tee",[49,227,228],{"class":59}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[49,230,184],{"class":159},[49,232,234,236],{"class":51,"line":233},5,[49,235,189],{"class":73},[49,237,238],{"class":159},"\\\n",[49,240,242,244,247],{"class":51,"line":241},6,[49,243,222],{"class":55},[49,245,246],{"class":59}," apt-get",[49,248,249],{"class":59}," update\n",[30,251,252],{"start":63},[33,253,254],{},"安装nvidia-docker2",[40,256,258],{"className":42,"code":257,"language":44,"meta":27,"style":27},"sudo apt-get install -y nvidia-docker2\n",[46,259,260],{"__ignoreMap":27},[49,261,262,265,267,270,273],{"class":51,"line":52},[49,263,264],{"class":55},"sudo",[49,266,246],{"class":59},[49,268,269],{"class":59}," install",[49,271,272],{"class":159}," -y",[49,274,275],{"class":59}," nvidia-docker2\n",[30,277,278],{"start":70},[33,279,280],{},"使用nvidia-ctk命令配置container runtime",[40,282,284],{"className":42,"code":283,"language":44,"meta":27,"style":27},"sudo nvidia-ctk runtime configure --runtime=docker\n",[46,285,286],{"__ignoreMap":27},[49,287,288,290,293,296,299],{"class":51,"line":52},[49,289,264],{"class":55},[49,291,292],{"class":59}," nvidia-ctk",[49,294,295],{"class":59}," runtime",[49,297,298],{"class":59}," configure",[49,300,301],{"class":159}," --runtime=docker\n",[30,303,304],{"start":219},[33,305,306],{},"重启docker服务:",[40,308,310],{"className":42,"code":309,"language":44,"meta":27,"style":27},"sudo systemctl restart docker\n",[46,311,312],{"__ignoreMap":27},[49,313,314,316,319,322],{"class":51,"line":52},[49,315,264],{"class":55},[49,317,318],{"class":59}," systemctl",[49,320,321],{"class":59}," restart",[49,323,324],{"class":59}," docker\n",[138,326,328],{"id":327},"_3212fedora","3.2.1.2.Fedora",[30,330,331],{},[33,332,333],{},"配置存储库",[40,335,337],{"className":42,"code":336,"language":44,"meta":27,"style":27},"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",[46,338,339,354],{"__ignoreMap":27},[49,340,341,343,345,347,350,352],{"class":51,"line":52},[49,342,156],{"class":55},[49,344,194],{"class":159},[49,346,197],{"class":159},[49,348,349],{"class":59}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[49,351,166],{"class":77},[49,353,184],{"class":159},[49,355,356,358,360],{"class":51,"line":63},[49,357,264],{"class":55},[49,359,225],{"class":59},[49,361,362],{"class":59}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[30,364,365],{"start":63},[33,366,367],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[40,369,371],{"className":42,"code":370,"language":44,"meta":27,"style":27},"# 如果是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",[46,372,373,378,394,400,405],{"__ignoreMap":27},[49,374,375],{"class":51,"line":52},[49,376,377],{"class":66},"# 如果是RHEL或者Rocky（DNF4）\n",[49,379,380,382,385,388,391],{"class":51,"line":63},[49,381,264],{"class":55},[49,383,384],{"class":59}," dnf",[49,386,387],{"class":59}," config-manager",[49,389,390],{"class":159}," --add-repo",[49,392,393],{"class":59}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[49,395,396],{"class":51,"line":70},[49,397,399],{"emptyLinePlaceholder":398},true,"\n",[49,401,402],{"class":51,"line":219},[49,403,404],{"class":66},"# 如果是Feodra41+（DNF5）\n",[49,406,407,409,411,413,416],{"class":51,"line":233},[49,408,264],{"class":55},[49,410,384],{"class":59},[49,412,387],{"class":59},[49,414,415],{"class":59}," addrepo",[49,417,418],{"class":159}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[30,420,421],{"start":70},[33,422,423],{},"安装NVIDIA Container Toolki包",[40,425,427],{"className":42,"code":426,"language":44,"meta":27,"style":27},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[46,428,429,434,447,451,456],{"__ignoreMap":27},[49,430,431],{"class":51,"line":52},[49,432,433],{"class":66},"# 如果是RHEL或者Rocky\n",[49,435,436,438,440,442,444],{"class":51,"line":63},[49,437,264],{"class":55},[49,439,384],{"class":59},[49,441,269],{"class":59},[49,443,272],{"class":159},[49,445,446],{"class":59}," nvidia-container-toolkit\n",[49,448,449],{"class":51,"line":70},[49,450,399],{"emptyLinePlaceholder":398},[49,452,453],{"class":51,"line":219},[49,454,455],{"class":66},"# 如果是Fedora\n",[49,457,458,460,462,464,466],{"class":51,"line":233},[49,459,264],{"class":55},[49,461,384],{"class":59},[49,463,269],{"class":59},[49,465,272],{"class":159},[49,467,446],{"class":59},[30,469,470],{"start":219},[33,471,472,473,476],{},"安装nvidia-docker2 ： 在Fedora上使用",[46,474,475],{},"dnf","进行安装",[40,478,480],{"className":42,"code":479,"language":44,"meta":27,"style":27},"sudo dnf install -y nvidia-docker2\n",[46,481,482],{"__ignoreMap":27},[49,483,484,486,488,490,492],{"class":51,"line":52},[49,485,264],{"class":55},[49,487,384],{"class":59},[49,489,269],{"class":59},[49,491,272],{"class":159},[49,493,275],{"class":59},[30,495,496],{"start":233},[33,497,498],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[40,500,501],{"className":42,"code":283,"language":44,"meta":27,"style":27},[46,502,503],{"__ignoreMap":27},[49,504,505,507,509,511,513],{"class":51,"line":52},[49,506,264],{"class":55},[49,508,292],{"class":59},[49,510,295],{"class":59},[49,512,298],{"class":59},[49,514,301],{"class":159},[30,516,517],{"start":241},[33,518,519],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[40,521,522],{"className":42,"code":309,"language":44,"meta":27,"style":27},[46,523,524],{"__ignoreMap":27},[49,525,526,528,530,532],{"class":51,"line":52},[49,527,264],{"class":55},[49,529,318],{"class":59},[49,531,321],{"class":59},[49,533,324],{"class":59},[14,535,536],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,538,539],{},"方法：",[14,541,542],{},"1️⃣nvidia-smi",[14,544,545],{},"2️⃣运行nvidia cuda 容器进行测试",[40,547,549],{"className":42,"code":548,"language":44,"meta":27,"style":27},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[46,550,551],{"__ignoreMap":27},[49,552,553,555,558,561,564,567,570,573],{"class":51,"line":52},[49,554,264],{"class":55},[49,556,557],{"class":59}," docker",[49,559,560],{"class":59}," run",[49,562,563],{"class":159}," --rm",[49,565,566],{"class":159}," --gpus",[49,568,569],{"class":59}," all",[49,571,572],{"class":59}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[49,574,575],{"class":59}," nvidia-smi\n",[14,577,578],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,580,581],{},[25,582],{"alt":27,"src":583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[18,585,587],{"id":586},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,589,590],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,592,593],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,595,596],{},[124,597,598],{"href":598,"rel":599},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[128],[14,601,602],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,604,605],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,607,608],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[610,611,612,632],"table",{},[613,614,615],"thead",{},[616,617,618,623,626,629],"tr",{},[619,620,622],"th",{"align":621},"left","镜像类型",[619,624,625],{"align":621},"适用场景",[619,627,628],{"align":621},"示例标签",[619,630,631],{"align":621},"大小",[633,634,635,650,664],"tbody",{},[616,636,637,641,644,647],{},[638,639,640],"td",{"align":621},"base",[638,642,643],{"align":621},"仅需 CUDA 运行时库",[638,645,646],{"align":621},"12.4.0-base-ubuntu22.04",[638,648,649],{"align":621},"~240MB",[616,651,652,655,658,661],{},[638,653,654],{"align":621},"runtime",[638,656,657],{"align":621},"部署编译后的应用（含数学库）",[638,659,660],{"align":621},"12.4.0-runtime-ubuntu22.04",[638,662,663],{"align":621},"~2GB",[616,665,666,669,672,675],{},[638,667,668],{"align":621},"devel",[638,670,671],{"align":621},"开发环境（含编译工具）",[638,673,674],{"align":621},"12.4.0-devel-ubuntu22.04",[638,676,677],{"align":621},"~3GB",[14,679,680,681,684],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[46,682,683],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,686,687],{},[25,688],{"alt":27,"src":689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,691,692],{},"在dockerfile里就可以开头这么写：",[40,694,696],{"className":42,"code":695,"language":44,"meta":27,"style":27},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[46,697,698,703],{"__ignoreMap":27},[49,699,700],{"class":51,"line":52},[49,701,702],{"class":66},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[49,704,705,708],{"class":51,"line":63},[49,706,707],{"class":55},"FROM",[49,709,710],{"class":59}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[18,712,714],{"id":713},"_34配置以太网","3.4.配置以太网",[14,716,717],{},"指定网络模式",[40,719,721],{"className":42,"code":720,"language":44,"meta":27,"style":27},"--net=host \\\n",[46,722,723],{"__ignoreMap":27},[49,724,725,728,730,733],{"class":51,"line":52},[49,726,727],{"class":73},"--net",[49,729,78],{"class":77},[49,731,732],{"class":59},"host",[49,734,184],{"class":55},[14,736,737],{},"启动参数里加上这行即可。具体在下方",[14,739,740],{},"--net选项：指定网络模式，该选项有以下参数可选：",[742,743,744,747,750,753],"ul",{},[33,745,746],{},"--net=bridge:默认选项，表示连接到默认的网桥",[33,748,749],{},"--net=host:容器使用宿主机的网络",[33,751,752],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[33,754,755],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[757,758,759],"style",{},"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":27,"searchDepth":63,"depth":63,"links":761},[762,763,764,765],{"id":20,"depth":70,"text":21},{"id":106,"depth":70,"text":107},{"id":586,"depth":70,"text":587},{"id":713,"depth":70,"text":714},"md",{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":5,"description":16},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",[773,5859,6967,8387,11376,12727,14216,15305,24066,24079,24673,24699,24823,25064,25129,25147,25160,25207,25330,25498,25697,25876,26081,26217,26312,26349,26362,26672,27400,27963,27984,29004,30635,30786,30799,30811,31112,50924,50939,50956,50989,53861,77209,93354,93375,93488,93609,94379,95042,95403,95441,95547,95647,95690,95716,95777,97431,97532,97557,98048,98548,99628,99911,100653,101155,101167,103183,104847,106350,108048,109965,111884,113906,117376,117808,118271,119020,121964,122312,122334,122690,125997,126009,126412,126435,126582,126749,126954,127255,127812,128469,130400,131998,132647,134141,135572,136807,138501,140253,142663,142779,143714,143925,144810,146045,146273,146286,147441,149853,152221,155542,158019,159663,161440,163453,166505,168685,171212,173406],{"id":774,"title":775,"body":776,"description":27,"extension":766,"meta":5854,"navigation":398,"path":5855,"seo":5856,"stem":5857,"__hash__":5858},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":777,"toc":5826},[778,781,786,789,793,804,808,812,815,818,821,824,827,855,859,862,865,868,871,921,925,943,945,959,962,970,973,1828,1835,1851,1855,1942,1946,1952,2041,2045,2083,2087,2151,2155,2159,2165,2176,2180,2185,2189,2194,2198,2203,2207,2211,2216,2486,2491,2629,2634,2890,2893,2901,2905,2910,3013,3016,3321,3330,3431,3434,3437,3440,3443,3703,3708,3848,3851,4030,4033,4161,4164,4316,4320,4325,4328,4339,4347,4350,4457,4461,4465,4470,4520,4525,4530,4554,4559,4612,4615,4620,4797,4802,5087,5092,5489,5493,5498,5555,5560,5568,5571,5711,5714,5823],[10,779,775],{"id":780},"_1基础入门",[782,783,785],"h2",{"id":784},"_11注释","1.1注释",[14,787,788],{},"\u002F\u002F或者\u002F* *\u002F",[782,790,792],{"id":791},"_12命名","1.2命名",[30,794,795,798,801],{},[33,796,797],{},"字母数字下划线",[33,799,800],{},"开头必须是字母或_",[33,802,803],{},"不能使用关键词",[782,805,807],{"id":806},"_13数据类型","1.3数据类型",[18,809,811],{"id":810},"_131整形","1.3.1整形",[14,813,814],{},"short 短整形 2",[14,816,817],{},"int 整形 4",[14,819,820],{},"long 长整形 win4 linux32位4 linux64位8",[14,822,823],{},"long long 长长整形 8",[14,825,826],{},"利用sizeof可以求数据类型占用的内存空间大小",[40,828,832],{"className":829,"code":830,"language":831,"meta":27,"style":27},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[46,833,834,848],{"__ignoreMap":27},[49,835,836,839,842,845],{"class":51,"line":52},[49,837,838],{"class":77},"sizeof",[49,840,841],{"class":73},"(",[49,843,844],{"class":77},"int",[49,846,847],{"class":73},")\n",[49,849,850,852],{"class":51,"line":63},[49,851,838],{"class":77},[49,853,854],{"class":73},"(num)\n",[18,856,858],{"id":857},"_132浮点型","1.3.2浮点型",[14,860,861],{},"float 单精度 4节 7位有效数字",[14,863,864],{},"double 双精度 8节 15-16有效数字",[14,866,867],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,869,870],{},"注意点：",[40,872,874],{"className":829,"code":873,"language":831,"meta":27,"style":27},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[46,875,876,898],{"__ignoreMap":27},[49,877,878,881,884,886,889,892,895],{"class":51,"line":52},[49,879,880],{"class":77},"float",[49,882,883],{"class":73}," f1",[49,885,78],{"class":77},[49,887,888],{"class":159},"3.14",[49,890,891],{"class":77},"f",[49,893,894],{"class":73},";",[49,896,897],{"class":66}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[49,899,900,902,905,907,910,913,916,918],{"class":51,"line":63},[49,901,880],{"class":77},[49,903,904],{"class":73}," f2",[49,906,78],{"class":77},[49,908,909],{"class":159},"3",[49,911,912],{"class":77},"e",[49,914,915],{"class":159},"2",[49,917,894],{"class":73},[49,919,920],{"class":66}," \u002F\u002F科学记数法\n",[18,922,924],{"id":923},"_133字符型","1.3.3字符型",[40,926,928],{"className":829,"code":927,"language":831,"meta":27,"style":27},"char ch='a'\n",[46,929,930],{"__ignoreMap":27},[49,931,932,935,938,940],{"class":51,"line":52},[49,933,934],{"class":77},"char",[49,936,937],{"class":73}," ch",[49,939,78],{"class":77},[49,941,942],{"class":59},"'a'\n",[14,944,870],{},[30,946,947,950,953,956],{},[33,948,949],{},"在显示字符型变量时，只能单引号，双引号x",[33,951,952],{},"单引号内只能一个字符，不能字符串",[33,954,955],{},"c和c++字符型变量只占用一个字符",[33,957,958],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,960,961],{},"ASCII码大致由以下两部分组成：",[30,963,964,967],{},[33,965,966],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[33,968,969],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,971,972],{},"ASCII码表格：",[610,974,975,1015],{},[613,976,977],{},[616,978,979,985,990,994,999,1003,1007,1011],{},[619,980,981,984],{},[112,982,983],{},"ASCII","值",[619,986,987],{},[112,988,989],{},"控制字符",[619,991,992,984],{},[112,993,983],{},[619,995,996],{},[112,997,998],{},"字符",[619,1000,1001,984],{},[112,1002,983],{},[619,1004,1005],{},[112,1006,998],{},[619,1008,1009,984],{},[112,1010,983],{},[619,1012,1013],{},[112,1014,998],{},[633,1016,1017,1043,1068,1093,1118,1144,1169,1194,1220,1245,1271,1297,1323,1348,1374,1400,1426,1450,1475,1500,1525,1550,1575,1600,1625,1650,1675,1701,1726,1751,1776,1802],{},[616,1018,1019,1022,1025,1028,1031,1034,1037,1040],{},[638,1020,1021],{},"0",[638,1023,1024],{},"NUT",[638,1026,1027],{},"32",[638,1029,1030],{},"(space)",[638,1032,1033],{},"64",[638,1035,1036],{},"@",[638,1038,1039],{},"96",[638,1041,1042],{},"、",[616,1044,1045,1048,1051,1054,1057,1060,1063,1066],{},[638,1046,1047],{},"1",[638,1049,1050],{},"SOH",[638,1052,1053],{},"33",[638,1055,1056],{},"!",[638,1058,1059],{},"65",[638,1061,1062],{},"A",[638,1064,1065],{},"97",[638,1067,124],{},[616,1069,1070,1072,1075,1078,1081,1084,1087,1090],{},[638,1071,915],{},[638,1073,1074],{},"STX",[638,1076,1077],{},"34",[638,1079,1080],{},"\"",[638,1082,1083],{},"66",[638,1085,1086],{},"B",[638,1088,1089],{},"98",[638,1091,1092],{},"b",[616,1094,1095,1097,1100,1103,1106,1109,1112,1115],{},[638,1096,909],{},[638,1098,1099],{},"ETX",[638,1101,1102],{},"35",[638,1104,1105],{},"#",[638,1107,1108],{},"67",[638,1110,1111],{},"C",[638,1113,1114],{},"99",[638,1116,1117],{},"c",[616,1119,1120,1123,1126,1129,1132,1135,1138,1141],{},[638,1121,1122],{},"4",[638,1124,1125],{},"EOT",[638,1127,1128],{},"36",[638,1130,1131],{},"$",[638,1133,1134],{},"68",[638,1136,1137],{},"D",[638,1139,1140],{},"100",[638,1142,1143],{},"d",[616,1145,1146,1149,1152,1155,1158,1161,1164,1167],{},[638,1147,1148],{},"5",[638,1150,1151],{},"ENQ",[638,1153,1154],{},"37",[638,1156,1157],{},"%",[638,1159,1160],{},"69",[638,1162,1163],{},"E",[638,1165,1166],{},"101",[638,1168,912],{},[616,1170,1171,1174,1177,1180,1183,1186,1189,1192],{},[638,1172,1173],{},"6",[638,1175,1176],{},"ACK",[638,1178,1179],{},"38",[638,1181,1182],{},"&",[638,1184,1185],{},"70",[638,1187,1188],{},"F",[638,1190,1191],{},"102",[638,1193,891],{},[616,1195,1196,1199,1202,1205,1208,1211,1214,1217],{},[638,1197,1198],{},"7",[638,1200,1201],{},"BEL",[638,1203,1204],{},"39",[638,1206,1207],{},",",[638,1209,1210],{},"71",[638,1212,1213],{},"G",[638,1215,1216],{},"103",[638,1218,1219],{},"g",[616,1221,1222,1225,1228,1231,1233,1236,1239,1242],{},[638,1223,1224],{},"8",[638,1226,1227],{},"BS",[638,1229,1230],{},"40",[638,1232,841],{},[638,1234,1235],{},"72",[638,1237,1238],{},"H",[638,1240,1241],{},"104",[638,1243,1244],{},"h",[616,1246,1247,1250,1253,1256,1259,1262,1265,1268],{},[638,1248,1249],{},"9",[638,1251,1252],{},"HT",[638,1254,1255],{},"41",[638,1257,1258],{},")",[638,1260,1261],{},"73",[638,1263,1264],{},"I",[638,1266,1267],{},"105",[638,1269,1270],{},"i",[616,1272,1273,1276,1279,1282,1285,1288,1291,1294],{},[638,1274,1275],{},"10",[638,1277,1278],{},"LF",[638,1280,1281],{},"42",[638,1283,1284],{},"*",[638,1286,1287],{},"74",[638,1289,1290],{},"J",[638,1292,1293],{},"106",[638,1295,1296],{},"j",[616,1298,1299,1302,1305,1308,1311,1314,1317,1320],{},[638,1300,1301],{},"11",[638,1303,1304],{},"VT",[638,1306,1307],{},"43",[638,1309,1310],{},"+",[638,1312,1313],{},"75",[638,1315,1316],{},"K",[638,1318,1319],{},"107",[638,1321,1322],{},"k",[616,1324,1325,1328,1331,1334,1336,1339,1342,1345],{},[638,1326,1327],{},"12",[638,1329,1330],{},"FF",[638,1332,1333],{},"44",[638,1335,1207],{},[638,1337,1338],{},"76",[638,1340,1341],{},"L",[638,1343,1344],{},"108",[638,1346,1347],{},"l",[616,1349,1350,1353,1356,1359,1362,1365,1368,1371],{},[638,1351,1352],{},"13",[638,1354,1355],{},"CR",[638,1357,1358],{},"45",[638,1360,1361],{},"-",[638,1363,1364],{},"77",[638,1366,1367],{},"M",[638,1369,1370],{},"109",[638,1372,1373],{},"m",[616,1375,1376,1379,1382,1385,1388,1391,1394,1397],{},[638,1377,1378],{},"14",[638,1380,1381],{},"SO",[638,1383,1384],{},"46",[638,1386,1387],{},".",[638,1389,1390],{},"78",[638,1392,1393],{},"N",[638,1395,1396],{},"110",[638,1398,1399],{},"n",[616,1401,1402,1405,1408,1411,1414,1417,1420,1423],{},[638,1403,1404],{},"15",[638,1406,1407],{},"SI",[638,1409,1410],{},"47",[638,1412,1413],{},"\u002F",[638,1415,1416],{},"79",[638,1418,1419],{},"O",[638,1421,1422],{},"111",[638,1424,1425],{},"o",[616,1427,1428,1431,1434,1437,1439,1442,1445,1448],{},[638,1429,1430],{},"16",[638,1432,1433],{},"DLE",[638,1435,1436],{},"48",[638,1438,1021],{},[638,1440,1441],{},"80",[638,1443,1444],{},"P",[638,1446,1447],{},"112",[638,1449,14],{},[616,1451,1452,1455,1458,1461,1463,1466,1469,1472],{},[638,1453,1454],{},"17",[638,1456,1457],{},"DCI",[638,1459,1460],{},"49",[638,1462,1047],{},[638,1464,1465],{},"81",[638,1467,1468],{},"Q",[638,1470,1471],{},"113",[638,1473,1474],{},"q",[616,1476,1477,1480,1483,1486,1488,1491,1494,1497],{},[638,1478,1479],{},"18",[638,1481,1482],{},"DC2",[638,1484,1485],{},"50",[638,1487,915],{},[638,1489,1490],{},"82",[638,1492,1493],{},"R",[638,1495,1496],{},"114",[638,1498,1499],{},"r",[616,1501,1502,1505,1508,1511,1513,1516,1519,1522],{},[638,1503,1504],{},"19",[638,1506,1507],{},"DC3",[638,1509,1510],{},"51",[638,1512,909],{},[638,1514,1515],{},"83",[638,1517,1518],{},"S",[638,1520,1521],{},"115",[638,1523,1524],{},"s",[616,1526,1527,1530,1533,1536,1538,1541,1544,1547],{},[638,1528,1529],{},"20",[638,1531,1532],{},"DC4",[638,1534,1535],{},"52",[638,1537,1122],{},[638,1539,1540],{},"84",[638,1542,1543],{},"T",[638,1545,1546],{},"116",[638,1548,1549],{},"t",[616,1551,1552,1555,1558,1561,1563,1566,1569,1572],{},[638,1553,1554],{},"21",[638,1556,1557],{},"NAK",[638,1559,1560],{},"53",[638,1562,1148],{},[638,1564,1565],{},"85",[638,1567,1568],{},"U",[638,1570,1571],{},"117",[638,1573,1574],{},"u",[616,1576,1577,1580,1583,1586,1588,1591,1594,1597],{},[638,1578,1579],{},"22",[638,1581,1582],{},"SYN",[638,1584,1585],{},"54",[638,1587,1173],{},[638,1589,1590],{},"86",[638,1592,1593],{},"V",[638,1595,1596],{},"118",[638,1598,1599],{},"v",[616,1601,1602,1605,1608,1611,1613,1616,1619,1622],{},[638,1603,1604],{},"23",[638,1606,1607],{},"TB",[638,1609,1610],{},"55",[638,1612,1198],{},[638,1614,1615],{},"87",[638,1617,1618],{},"W",[638,1620,1621],{},"119",[638,1623,1624],{},"w",[616,1626,1627,1630,1633,1636,1638,1641,1644,1647],{},[638,1628,1629],{},"24",[638,1631,1632],{},"CAN",[638,1634,1635],{},"56",[638,1637,1224],{},[638,1639,1640],{},"88",[638,1642,1643],{},"X",[638,1645,1646],{},"120",[638,1648,1649],{},"x",[616,1651,1652,1655,1658,1661,1663,1666,1669,1672],{},[638,1653,1654],{},"25",[638,1656,1657],{},"EM",[638,1659,1660],{},"57",[638,1662,1249],{},[638,1664,1665],{},"89",[638,1667,1668],{},"Y",[638,1670,1671],{},"121",[638,1673,1674],{},"y",[616,1676,1677,1680,1683,1686,1689,1692,1695,1698],{},[638,1678,1679],{},"26",[638,1681,1682],{},"SUB",[638,1684,1685],{},"58",[638,1687,1688],{},":",[638,1690,1691],{},"90",[638,1693,1694],{},"Z",[638,1696,1697],{},"122",[638,1699,1700],{},"z",[616,1702,1703,1706,1709,1712,1714,1717,1720,1723],{},[638,1704,1705],{},"27",[638,1707,1708],{},"ESC",[638,1710,1711],{},"59",[638,1713,894],{},[638,1715,1716],{},"91",[638,1718,1719],{},"[",[638,1721,1722],{},"123",[638,1724,1725],{},"{",[616,1727,1728,1731,1734,1737,1740,1743,1745,1748],{},[638,1729,1730],{},"28",[638,1732,1733],{},"FS",[638,1735,1736],{},"60",[638,1738,1739],{},"\u003C",[638,1741,1742],{},"92",[638,1744,1413],{},[638,1746,1747],{},"124",[638,1749,1750],{},"|",[616,1752,1753,1756,1759,1762,1764,1767,1770,1773],{},[638,1754,1755],{},"29",[638,1757,1758],{},"GS",[638,1760,1761],{},"61",[638,1763,78],{},[638,1765,1766],{},"93",[638,1768,1769],{},"]",[638,1771,1772],{},"125",[638,1774,1775],{},"}",[616,1777,1778,1781,1784,1787,1790,1793,1796,1799],{},[638,1779,1780],{},"30",[638,1782,1783],{},"RS",[638,1785,1786],{},"62",[638,1788,1789],{},">",[638,1791,1792],{},"94",[638,1794,1795],{},"^",[638,1797,1798],{},"126",[638,1800,1801],{},"`",[616,1803,1804,1807,1810,1813,1816,1819,1822,1825],{},[638,1805,1806],{},"31",[638,1808,1809],{},"US",[638,1811,1812],{},"63",[638,1814,1815],{},"?",[638,1817,1818],{},"95",[638,1820,1821],{},"_",[638,1823,1824],{},"127",[638,1826,1827],{},"DEL",[14,1829,1830,1831,1834],{},"ASCII 码大致由以下",[112,1832,1833],{},"两部分组","成：",[742,1836,1837,1844],{},[33,1838,1839,1840,1843],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[112,1841,1842],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[33,1845,1846,1847,1850],{},"ASCII 打印字符：数字 ",[112,1848,1849],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[18,1852,1854],{"id":1853},"_134转义字符","1.3.4转义字符",[40,1856,1858],{"className":829,"code":1857,"language":831,"meta":27,"style":27},"\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",[46,1859,1860,1865,1881,1895,1900,1913,1918],{"__ignoreMap":27},[49,1861,1862],{"class":51,"line":52},[49,1863,1864],{"class":66},"\u002F\u002F换行符\n",[49,1866,1867,1870,1873,1876,1878],{"class":51,"line":63},[49,1868,1869],{"class":73},"cout ",[49,1871,1872],{"class":77},"\u003C\u003C",[49,1874,1875],{"class":59},"\"hello world\u002Fn\"",[49,1877,894],{"class":73},[49,1879,1880],{"class":66}," \u002F\u002F就等同于如下：\n",[49,1882,1883,1885,1887,1890,1892],{"class":51,"line":70},[49,1884,1869],{"class":73},[49,1886,1872],{"class":77},[49,1888,1889],{"class":59},"\"hello world\"",[49,1891,1872],{"class":77},[49,1893,1894],{"class":73},"endl;\n",[49,1896,1897],{"class":51,"line":219},[49,1898,1899],{"class":66},"\u002F\u002F反斜杠\n",[49,1901,1902,1904,1906,1909,1911],{"class":51,"line":233},[49,1903,1869],{"class":73},[49,1905,1872],{"class":77},[49,1907,1908],{"class":59},"\"\u002F\u002F\"",[49,1910,1872],{"class":77},[49,1912,1894],{"class":73},[49,1914,1915],{"class":51,"line":241},[49,1916,1917],{"class":66},"\u002F\u002F水平制表符\n",[49,1919,1921,1923,1925,1928,1931,1934,1936,1939],{"class":51,"line":1920},7,[49,1922,1869],{"class":73},[49,1924,1872],{"class":77},[49,1926,1927],{"class":59},"\"aaaa",[49,1929,1930],{"class":159},"\\t",[49,1932,1933],{"class":59},"helloworld\"",[49,1935,1872],{"class":77},[49,1937,1938],{"class":73},"endl;",[49,1940,1941],{"class":66}," \u002F\u002F输出窗口时有对齐效果\n",[18,1943,1945],{"id":1944},"_135字符串型","1.3.5字符串型",[14,1947,1948,1949,1951],{},"char 变量名",[49,1950],{},"=\"字符串值\"",[40,1953,1955],{"className":829,"code":1954,"language":831,"meta":27,"style":27},"\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",[46,1956,1957,1962,1967,1972,1977,1991,2004,2009,2015,2027],{"__ignoreMap":27},[49,1958,1959],{"class":51,"line":52},[49,1960,1961],{"class":66},"\u002F\u002Fc风格字符串\n",[49,1963,1964],{"class":51,"line":63},[49,1965,1966],{"class":66},"\u002F\u002F注意事项：\n",[49,1968,1969],{"class":51,"line":70},[49,1970,1971],{"class":66},"\u002F\u002F1.char字符串名[]\n",[49,1973,1974],{"class":51,"line":219},[49,1975,1976],{"class":66},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[49,1978,1979,1981,1984,1986,1988],{"class":51,"line":233},[49,1980,934],{"class":77},[49,1982,1983],{"class":73}," str[]",[49,1985,78],{"class":77},[49,1987,1889],{"class":59},[49,1989,1990],{"class":73},";\n",[49,1992,1993,1995,1997,2000,2002],{"class":51,"line":241},[49,1994,1869],{"class":73},[49,1996,1872],{"class":77},[49,1998,1999],{"class":73},"str",[49,2001,1872],{"class":77},[49,2003,1894],{"class":73},[49,2005,2006],{"class":51,"line":1920},[49,2007,2008],{"class":66},"\u002F\u002Fc++风格字符串\n",[49,2010,2012],{"class":51,"line":2011},8,[49,2013,2014],{"class":66},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[49,2016,2018,2021,2023,2025],{"class":51,"line":2017},9,[49,2019,2020],{"class":73},"string str2",[49,2022,78],{"class":77},[49,2024,1889],{"class":59},[49,2026,1990],{"class":73},[49,2028,2030,2032,2034,2037,2039],{"class":51,"line":2029},10,[49,2031,1869],{"class":73},[49,2033,1872],{"class":77},[49,2035,2036],{"class":73},"str2",[49,2038,1872],{"class":77},[49,2040,1894],{"class":73},[18,2042,2044],{"id":2043},"_136布尔类型bool","1.3.6布尔类型bool",[40,2046,2048],{"className":829,"code":2047,"language":831,"meta":27,"style":27},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[46,2049,2050,2065],{"__ignoreMap":27},[49,2051,2052,2055,2058,2060,2063],{"class":51,"line":52},[49,2053,2054],{"class":77},"bool",[49,2056,2057],{"class":73}," flag",[49,2059,78],{"class":77},[49,2061,2062],{"class":159},"true",[49,2064,1990],{"class":73},[49,2066,2067,2070,2073,2076,2078,2080],{"class":51,"line":63},[49,2068,2069],{"class":73},"cout",[49,2071,2072],{"class":77},"\u003C\u003Csizeof",[49,2074,2075],{"class":73},"(flag)",[49,2077,1872],{"class":77},[49,2079,1938],{"class":73},[49,2081,2082],{"class":66}," \u002F\u002F查看布尔占内存空间\n",[782,2084,2086],{"id":2085},"_14键盘输入cin","1.4键盘输入cin",[40,2088,2090],{"className":829,"code":2089,"language":831,"meta":27,"style":27},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[46,2091,2092,2105,2122,2133],{"__ignoreMap":27},[49,2093,2094,2096,2099,2101,2103],{"class":51,"line":52},[49,2095,844],{"class":77},[49,2097,2098],{"class":73}," a",[49,2100,78],{"class":77},[49,2102,1021],{"class":159},[49,2104,1990],{"class":73},[49,2106,2107,2109,2111,2114,2116,2118,2120],{"class":51,"line":63},[49,2108,2069],{"class":73},[49,2110,1872],{"class":77},[49,2112,2113],{"class":59},"\"请给整型变量a赋值\"",[49,2115,1872],{"class":77},[49,2117,124],{"class":73},[49,2119,1872],{"class":77},[49,2121,1894],{"class":73},[49,2123,2124,2127,2130],{"class":51,"line":70},[49,2125,2126],{"class":73},"cin ",[49,2128,2129],{"class":77},">>",[49,2131,2132],{"class":73}," a;\n",[49,2134,2135,2137,2139,2142,2145,2147,2149],{"class":51,"line":219},[49,2136,1869],{"class":73},[49,2138,1872],{"class":77},[49,2140,2141],{"class":59}," \"整型变量a=\"",[49,2143,2144],{"class":77}," \u003C\u003C",[49,2146,124],{"class":73},[49,2148,1872],{"class":77},[49,2150,1894],{"class":73},[782,2152,2154],{"id":2153},"_15运算符","1.5运算符",[18,2156,2158],{"id":2157},"_151算术运算符","1.5.1算术运算符",[14,2160,2161,2164],{},[25,2162],{"alt":27,"src":2163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[30,2166,2167,2170,2173],{},[33,2168,2169],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[33,2171,2172],{},"两个小数不可以做取模运算",[33,2174,2175],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[18,2177,2179],{"id":2178},"_152赋值运算符","1.5.2赋值运算符",[14,2181,2182],{},[25,2183],{"alt":27,"src":2184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[18,2186,2188],{"id":2187},"_153比较运算符","1.5.3比较运算符",[14,2190,2191],{},[25,2192],{"alt":27,"src":2193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[18,2195,2197],{"id":2196},"_154逻辑运算符","1.5.4逻辑运算符",[14,2199,2200],{},[25,2201],{"alt":27,"src":2202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[782,2204,2206],{"id":2205},"_16程序流程结构","1.6程序流程结构",[18,2208,2210],{"id":2209},"_161选择结构","1.6.1选择结构",[30,2212,2213],{},[33,2214,2215],{},"if语句\n单行、多行、多条件if语句",[40,2217,2219],{"className":829,"code":2218,"language":831,"meta":27,"style":27},"\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",[46,2220,2221,2226,2241,2246,2260,2265,2270,2279,2292,2296,2309,2314,2320,2325,2339,2344,2350,2371,2376,2390,2395,2424,2429,2446,2451,2456,2461,2475,2480],{"__ignoreMap":27},[49,2222,2223],{"class":51,"line":52},[49,2224,2225],{"class":66},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[49,2227,2228,2231,2234,2236,2239],{"class":51,"line":63},[49,2229,2230],{"class":77},"if",[49,2232,2233],{"class":73},"(score",[49,2235,1789],{"class":77},[49,2237,2238],{"class":159},"600",[49,2240,847],{"class":73},[49,2242,2243],{"class":51,"line":70},[49,2244,2245],{"class":73},"{\n",[49,2247,2248,2251,2253,2256,2258],{"class":51,"line":219},[49,2249,2250],{"class":73},"    cout",[49,2252,1872],{"class":77},[49,2254,2255],{"class":59},"'这是单行if语句'",[49,2257,1872],{"class":77},[49,2259,1894],{"class":73},[49,2261,2262],{"class":51,"line":233},[49,2263,2264],{"class":73},"}\n",[49,2266,2267],{"class":51,"line":241},[49,2268,2269],{"class":66},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[49,2271,2272,2274,2276],{"class":51,"line":1920},[49,2273,2126],{"class":73},[49,2275,2129],{"class":77},[49,2277,2278],{"class":73}," score\n",[49,2280,2281,2283,2285,2288,2290],{"class":51,"line":2011},[49,2282,2230],{"class":77},[49,2284,2233],{"class":73},[49,2286,2287],{"class":77},"\u003C=",[49,2289,2238],{"class":159},[49,2291,847],{"class":73},[49,2293,2294],{"class":51,"line":2017},[49,2295,2245],{"class":73},[49,2297,2298,2300,2302,2305,2307],{"class":51,"line":2029},[49,2299,2250],{"class":73},[49,2301,2129],{"class":77},[49,2303,2304],{"class":59},"\"小于等于600\"",[49,2306,1872],{"class":77},[49,2308,1894],{"class":73},[49,2310,2312],{"class":51,"line":2311},11,[49,2313,2264],{"class":73},[49,2315,2317],{"class":51,"line":2316},12,[49,2318,2319],{"class":77},"else\n",[49,2321,2323],{"class":51,"line":2322},13,[49,2324,2245],{"class":73},[49,2326,2328,2330,2332,2335,2337],{"class":51,"line":2327},14,[49,2329,2250],{"class":73},[49,2331,2129],{"class":77},[49,2333,2334],{"class":59},"\"大于600\"",[49,2336,2129],{"class":77},[49,2338,1894],{"class":73},[49,2340,2342],{"class":51,"line":2341},15,[49,2343,2264],{"class":73},[49,2345,2347],{"class":51,"line":2346},16,[49,2348,2349],{"class":66},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[49,2351,2353,2355,2358,2360,2362,2365,2367,2369],{"class":51,"line":2352},17,[49,2354,2230],{"class":77},[49,2356,2357],{"class":73}," (",[49,2359,1021],{"class":159},[49,2361,1739],{"class":77},[49,2363,2364],{"class":73},"num",[49,2366,1739],{"class":77},[49,2368,1140],{"class":159},[49,2370,847],{"class":73},[49,2372,2374],{"class":51,"line":2373},18,[49,2375,2245],{"class":73},[49,2377,2379,2381,2383,2386,2388],{"class":51,"line":2378},19,[49,2380,2250],{"class":73},[49,2382,1872],{"class":77},[49,2384,2385],{"class":59},"\"小于100\"",[49,2387,1872],{"class":77},[49,2389,1894],{"class":73},[49,2391,2393],{"class":51,"line":2392},20,[49,2394,2264],{"class":73},[49,2396,2398,2401,2404,2407,2410,2412,2415,2417,2419,2422],{"class":51,"line":2397},21,[49,2399,2400],{"class":77},"else",[49,2402,2403],{"class":77}," if",[49,2405,2406],{"class":73}," (nmu",[49,2408,2409],{"class":77},">=",[49,2411,1140],{"class":159},[49,2413,2414],{"class":77},"&&",[49,2416,2364],{"class":73},[49,2418,1739],{"class":77},[49,2420,2421],{"class":159},"200",[49,2423,847],{"class":73},[49,2425,2427],{"class":51,"line":2426},22,[49,2428,2245],{"class":73},[49,2430,2432,2434,2436,2439,2441,2443],{"class":51,"line":2431},23,[49,2433,2250],{"class":73},[49,2435,1872],{"class":77},[49,2437,2438],{"class":59},"\"不小于100且小于200\"",[49,2440,1872],{"class":77},[49,2442,1938],{"class":73},[49,2444,2445],{"class":66}," \u002F\u002F可以无限else if,python中是elif：\n",[49,2447,2449],{"class":51,"line":2448},24,[49,2450,2264],{"class":73},[49,2452,2454],{"class":51,"line":2453},25,[49,2455,2319],{"class":77},[49,2457,2459],{"class":51,"line":2458},26,[49,2460,2245],{"class":73},[49,2462,2464,2466,2468,2471,2473],{"class":51,"line":2463},27,[49,2465,2250],{"class":73},[49,2467,1872],{"class":77},[49,2469,2470],{"class":59},"\"不小于200\"",[49,2472,1872],{"class":77},[49,2474,1894],{"class":73},[49,2476,2478],{"class":51,"line":2477},28,[49,2479,2264],{"class":73},[49,2481,2483],{"class":51,"line":2482},29,[49,2484,2485],{"class":66},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[30,2487,2488],{"start":63},[33,2489,2490],{},"三目运算符",[40,2492,2494],{"className":829,"code":2493,"language":831,"meta":27,"style":27},"\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",[46,2495,2496,2501,2506,2532,2554,2571,2576,2599,2614],{"__ignoreMap":27},[49,2497,2498],{"class":51,"line":52},[49,2499,2500],{"class":66},"\u002F\u002F创建三个变量a,b,c\n",[49,2502,2503],{"class":51,"line":63},[49,2504,2505],{"class":66},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[49,2507,2508,2510,2512,2514,2516,2519,2521,2523,2526,2528,2530],{"class":51,"line":70},[49,2509,844],{"class":77},[49,2511,2098],{"class":73},[49,2513,78],{"class":77},[49,2515,1529],{"class":159},[49,2517,2518],{"class":73},",b",[49,2520,78],{"class":77},[49,2522,1275],{"class":159},[49,2524,2525],{"class":73},",c",[49,2527,78],{"class":77},[49,2529,1021],{"class":159},[49,2531,1990],{"class":73},[49,2533,2534,2536,2538,2541,2543,2545,2547,2549,2551],{"class":51,"line":219},[49,2535,1117],{"class":73},[49,2537,78],{"class":77},[49,2539,2540],{"class":73},"(a",[49,2542,1789],{"class":77},[49,2544,1092],{"class":73},[49,2546,1815],{"class":77},[49,2548,124],{"class":73},[49,2550,1688],{"class":77},[49,2552,2553],{"class":73},"b)\n",[49,2555,2556,2558,2560,2563,2565,2567,2569],{"class":51,"line":233},[49,2557,2069],{"class":73},[49,2559,1872],{"class":77},[49,2561,2562],{"class":59},"\"c=\"",[49,2564,1872],{"class":77},[49,2566,1117],{"class":73},[49,2568,1872],{"class":77},[49,2570,1894],{"class":73},[49,2572,2573],{"class":51,"line":241},[49,2574,2575],{"class":66},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[49,2577,2578,2580,2582,2584,2586,2588,2590,2593,2595,2597],{"class":51,"line":1920},[49,2579,2540],{"class":73},[49,2581,1789],{"class":77},[49,2583,1092],{"class":73},[49,2585,1815],{"class":77},[49,2587,124],{"class":73},[49,2589,1688],{"class":77},[49,2591,2592],{"class":73},"b)",[49,2594,78],{"class":77},[49,2596,1140],{"class":159},[49,2598,1990],{"class":73},[49,2600,2601,2603,2605,2607,2609,2611],{"class":51,"line":2011},[49,2602,2069],{"class":73},[49,2604,1872],{"class":77},[49,2606,124],{"class":73},[49,2608,1872],{"class":77},[49,2610,1938],{"class":73},[49,2612,2613],{"class":66}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[49,2615,2616,2618,2620,2622,2624,2626],{"class":51,"line":2017},[49,2617,2069],{"class":73},[49,2619,1872],{"class":77},[49,2621,1092],{"class":73},[49,2623,1872],{"class":77},[49,2625,1938],{"class":73},[49,2627,2628],{"class":66}," \u002F\u002F10   a>b,b还是原值\n",[30,2630,2631],{"start":70},[33,2632,2633],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[40,2635,2637],{"className":829,"code":2636,"language":831,"meta":27,"style":27},"\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",[46,2638,2639,2644,2652,2665,2675,2679,2693,2706,2716,2724,2729,2754,2775,2797,2818,2840,2861,2881,2886],{"__ignoreMap":27},[49,2640,2641],{"class":51,"line":52},[49,2642,2643],{"class":66},"\u002F\u002F案例-电影打分\n",[49,2645,2646,2649],{"class":51,"line":63},[49,2647,2648],{"class":77},"#include",[49,2650,2651],{"class":59},"\u003Ciostream>\n",[49,2653,2654,2657,2660,2663],{"class":51,"line":70},[49,2655,2656],{"class":77},"using",[49,2658,2659],{"class":77}," namespace",[49,2661,2662],{"class":55}," std",[49,2664,1990],{"class":73},[49,2666,2667,2669,2672],{"class":51,"line":219},[49,2668,844],{"class":77},[49,2670,2671],{"class":55}," main",[49,2673,2674],{"class":73},"()\n",[49,2676,2677],{"class":51,"line":233},[49,2678,2245],{"class":73},[49,2680,2681,2684,2687,2689,2691],{"class":51,"line":241},[49,2682,2683],{"class":77},"    int",[49,2685,2686],{"class":73}," score",[49,2688,78],{"class":77},[49,2690,1021],{"class":159},[49,2692,1990],{"class":73},[49,2694,2695,2697,2699,2702,2704],{"class":51,"line":1920},[49,2696,2250],{"class":73},[49,2698,1872],{"class":77},[49,2700,2701],{"class":59},"\"电影打分：\"",[49,2703,1872],{"class":77},[49,2705,1894],{"class":73},[49,2707,2708,2711,2713],{"class":51,"line":2011},[49,2709,2710],{"class":73},"    cin",[49,2712,2129],{"class":77},[49,2714,2715],{"class":73},"score;\n",[49,2717,2718,2721],{"class":51,"line":2017},[49,2719,2720],{"class":77},"    switch",[49,2722,2723],{"class":73},"(score)\n",[49,2725,2726],{"class":51,"line":2029},[49,2727,2728],{"class":73},"    {\n",[49,2730,2731,2734,2737,2740,2742,2745,2747,2749,2752],{"class":51,"line":2311},[49,2732,2733],{"class":77},"        case",[49,2735,2736],{"class":159}," 10",[49,2738,2739],{"class":73},":cout",[49,2741,1872],{"class":77},[49,2743,2744],{"class":59},"\"经典\"",[49,2746,1872],{"class":77},[49,2748,1938],{"class":73},[49,2750,2751],{"class":77},"break",[49,2753,1990],{"class":73},[49,2755,2756,2758,2761,2763,2765,2767,2769,2771,2773],{"class":51,"line":2316},[49,2757,2733],{"class":77},[49,2759,2760],{"class":159}," 9",[49,2762,2739],{"class":73},[49,2764,1872],{"class":77},[49,2766,2744],{"class":59},[49,2768,1872],{"class":77},[49,2770,1938],{"class":73},[49,2772,2751],{"class":77},[49,2774,1990],{"class":73},[49,2776,2777,2779,2782,2784,2786,2789,2791,2793,2795],{"class":51,"line":2322},[49,2778,2733],{"class":77},[49,2780,2781],{"class":159}," 8",[49,2783,2739],{"class":73},[49,2785,1872],{"class":77},[49,2787,2788],{"class":59},"\"非常好\"",[49,2790,1872],{"class":77},[49,2792,1938],{"class":73},[49,2794,2751],{"class":77},[49,2796,1990],{"class":73},[49,2798,2799,2801,2804,2806,2808,2810,2812,2814,2816],{"class":51,"line":2327},[49,2800,2733],{"class":77},[49,2802,2803],{"class":159}," 7",[49,2805,2739],{"class":73},[49,2807,1872],{"class":77},[49,2809,2788],{"class":59},[49,2811,1872],{"class":77},[49,2813,1938],{"class":73},[49,2815,2751],{"class":77},[49,2817,1990],{"class":73},[49,2819,2820,2822,2825,2827,2829,2832,2834,2836,2838],{"class":51,"line":2341},[49,2821,2733],{"class":77},[49,2823,2824],{"class":159}," 6",[49,2826,2739],{"class":73},[49,2828,1872],{"class":77},[49,2830,2831],{"class":59},"\"一般\"",[49,2833,1872],{"class":77},[49,2835,1938],{"class":73},[49,2837,2751],{"class":77},[49,2839,1990],{"class":73},[49,2841,2842,2844,2847,2849,2851,2853,2855,2857,2859],{"class":51,"line":2346},[49,2843,2733],{"class":77},[49,2845,2846],{"class":159}," 5",[49,2848,2739],{"class":73},[49,2850,1872],{"class":77},[49,2852,2831],{"class":59},[49,2854,1872],{"class":77},[49,2856,1938],{"class":73},[49,2858,2751],{"class":77},[49,2860,1990],{"class":73},[49,2862,2863,2866,2868,2870,2873,2875,2877,2879],{"class":51,"line":2352},[49,2864,2865],{"class":77},"        default",[49,2867,2739],{"class":73},[49,2869,1872],{"class":77},[49,2871,2872],{"class":59},"\"烂片\"",[49,2874,1872],{"class":77},[49,2876,1938],{"class":73},[49,2878,2751],{"class":77},[49,2880,1990],{"class":73},[49,2882,2883],{"class":51,"line":2373},[49,2884,2885],{"class":73},"    }\n",[49,2887,2888],{"class":51,"line":2378},[49,2889,2264],{"class":73},[14,2891,2892],{},"if和switch区别：",[742,2894,2895,2898],{},[33,2896,2897],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[33,2899,2900],{},"switch优点：结构清晰，执行效率高",[18,2902,2904],{"id":2903},"_162循环结构","1.6.2循环结构",[30,2906,2907],{},[33,2908,2909],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[40,2911,2913],{"className":829,"code":2912,"language":831,"meta":27,"style":27},"\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",[46,2914,2915,2920,2928,2932,2945,2959,2963,2983,2993,2997,3009],{"__ignoreMap":27},[49,2916,2917],{"class":51,"line":52},[49,2918,2919],{"class":66},"\u002F\u002F打印0-9数字\n",[49,2921,2922,2924,2926],{"class":51,"line":63},[49,2923,844],{"class":77},[49,2925,2671],{"class":55},[49,2927,2674],{"class":73},[49,2929,2930],{"class":51,"line":70},[49,2931,2245],{"class":73},[49,2933,2934,2936,2939,2941,2943],{"class":51,"line":219},[49,2935,2683],{"class":77},[49,2937,2938],{"class":73}," num",[49,2940,78],{"class":77},[49,2942,1021],{"class":159},[49,2944,1990],{"class":73},[49,2946,2947,2950,2953,2955,2957],{"class":51,"line":233},[49,2948,2949],{"class":77},"    while",[49,2951,2952],{"class":73},"(num",[49,2954,1739],{"class":77},[49,2956,1275],{"class":159},[49,2958,847],{"class":73},[49,2960,2961],{"class":51,"line":241},[49,2962,2728],{"class":73},[49,2964,2965,2968,2971,2973,2975,2977,2980],{"class":51,"line":1920},[49,2966,2967],{"class":55},"       std",[49,2969,2970],{"class":73},"::cout",[49,2972,1872],{"class":77},[49,2974,2364],{"class":73},[49,2976,1872],{"class":77},[49,2978,2979],{"class":55},"std",[49,2981,2982],{"class":73},"::endl;\n",[49,2984,2985,2988,2991],{"class":51,"line":2011},[49,2986,2987],{"class":73},"        num",[49,2989,2990],{"class":77},"++",[49,2992,1990],{"class":73},[49,2994,2995],{"class":51,"line":2017},[49,2996,2885],{"class":73},[49,2998,2999,3002,3004,3007],{"class":51,"line":2029},[49,3000,3001],{"class":55},"    system",[49,3003,841],{"class":73},[49,3005,3006],{"class":59},"\"pause\"",[49,3008,847],{"class":73},[49,3010,3011],{"class":51,"line":2311},[49,3012,2264],{"class":73},[14,3014,3015],{},"注意：写好循环条件，避免死循环情况",[40,3017,3019],{"className":829,"code":3018,"language":831,"meta":27,"style":27},"\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",[46,3020,3021,3026,3033,3040,3050,3058,3062,3067,3094,3098,3103,3111,3138,3143,3148,3161,3171,3175,3185,3190,3203,3208,3222,3227,3242,3246,3259,3263,3268,3272,3286,3294,3299,3305,3311,3316],{"__ignoreMap":27},[49,3022,3023],{"class":51,"line":52},[49,3024,3025],{"class":66},"\u002F\u002F循环结构-猜数字\n",[49,3027,3028,3030],{"class":51,"line":63},[49,3029,2648],{"class":77},[49,3031,3032],{"class":59}," \u003Ciostream>\n",[49,3034,3035,3037],{"class":51,"line":70},[49,3036,2648],{"class":77},[49,3038,3039],{"class":59}," \u003Cctime>\n",[49,3041,3042,3044,3046,3048],{"class":51,"line":219},[49,3043,2656],{"class":77},[49,3045,2659],{"class":77},[49,3047,2662],{"class":55},[49,3049,1990],{"class":73},[49,3051,3052,3054,3056],{"class":51,"line":233},[49,3053,844],{"class":77},[49,3055,2671],{"class":55},[49,3057,2674],{"class":73},[49,3059,3060],{"class":51,"line":241},[49,3061,2245],{"class":73},[49,3063,3064],{"class":51,"line":1920},[49,3065,3066],{"class":66},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[49,3068,3069,3072,3075,3078,3081,3083,3086,3088,3091],{"class":51,"line":2011},[49,3070,3071],{"class":55},"    srand",[49,3073,3074],{"class":73},"((",[49,3076,3077],{"class":77},"unsigned",[49,3079,3080],{"class":77}," int",[49,3082,1258],{"class":73},[49,3084,3085],{"class":55},"time",[49,3087,841],{"class":73},[49,3089,3090],{"class":159},"NULL",[49,3092,3093],{"class":73},"));\n",[49,3095,3096],{"class":51,"line":2017},[49,3097,399],{"emptyLinePlaceholder":398},[49,3099,3100],{"class":51,"line":2029},[49,3101,3102],{"class":66},"    \u002F\u002F1.系统生成随机数\n",[49,3104,3105,3108],{"class":51,"line":2311},[49,3106,3107],{"class":66},"    \u002F\u002Frand()%100",[49,3109,3110],{"class":66}," \u002F\u002F生成0-99的随机数\n",[49,3112,3113,3115,3117,3119,3122,3125,3127,3129,3131,3133,3135],{"class":51,"line":2316},[49,3114,2683],{"class":77},[49,3116,2938],{"class":73},[49,3118,78],{"class":77},[49,3120,3121],{"class":55},"rand",[49,3123,3124],{"class":73},"()",[49,3126,1157],{"class":77},[49,3128,1140],{"class":159},[49,3130,1310],{"class":77},[49,3132,1047],{"class":159},[49,3134,894],{"class":73},[49,3136,3137],{"class":66}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[49,3139,3140],{"class":51,"line":2322},[49,3141,3142],{"class":66},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[49,3144,3145],{"class":51,"line":2327},[49,3146,3147],{"class":66},"    \u002F\u002F2.玩家猜测\n",[49,3149,3150,3152,3155,3157,3159],{"class":51,"line":2341},[49,3151,2683],{"class":77},[49,3153,3154],{"class":73}," val",[49,3156,78],{"class":77},[49,3158,1021],{"class":159},[49,3160,1990],{"class":73},[49,3162,3163,3165,3167,3169],{"class":51,"line":2346},[49,3164,2949],{"class":77},[49,3166,2357],{"class":73},[49,3168,1047],{"class":159},[49,3170,847],{"class":73},[49,3172,3173],{"class":51,"line":2352},[49,3174,2728],{"class":73},[49,3176,3177,3180,3182],{"class":51,"line":2373},[49,3178,3179],{"class":73},"        cin",[49,3181,2129],{"class":77},[49,3183,3184],{"class":73},"val;\n",[49,3186,3187],{"class":51,"line":2378},[49,3188,3189],{"class":66},"        \u002F\u002F3.判断玩家猜测\n",[49,3191,3192,3195,3198,3200],{"class":51,"line":2392},[49,3193,3194],{"class":77},"        if",[49,3196,3197],{"class":73},"(val",[49,3199,1739],{"class":77},[49,3201,3202],{"class":73},"num) \n",[49,3204,3205],{"class":51,"line":2397},[49,3206,3207],{"class":73},"        {\n",[49,3209,3210,3213,3215,3218,3220],{"class":51,"line":2426},[49,3211,3212],{"class":73},"            cout",[49,3214,1872],{"class":77},[49,3216,3217],{"class":59},"\"猜小了！\"",[49,3219,1872],{"class":77},[49,3221,1894],{"class":73},[49,3223,3224],{"class":51,"line":2431},[49,3225,3226],{"class":73},"        }\n",[49,3228,3229,3232,3234,3237,3239],{"class":51,"line":2448},[49,3230,3231],{"class":77},"        else",[49,3233,2403],{"class":77},[49,3235,3236],{"class":73}," (val",[49,3238,1789],{"class":77},[49,3240,3241],{"class":73},"num)\n",[49,3243,3244],{"class":51,"line":2453},[49,3245,3207],{"class":73},[49,3247,3248,3250,3252,3255,3257],{"class":51,"line":2458},[49,3249,3212],{"class":73},[49,3251,1872],{"class":77},[49,3253,3254],{"class":59},"\"猜大了！\"",[49,3256,1872],{"class":77},[49,3258,1894],{"class":73},[49,3260,3261],{"class":51,"line":2463},[49,3262,3226],{"class":73},[49,3264,3265],{"class":51,"line":2477},[49,3266,3267],{"class":77},"        else\n",[49,3269,3270],{"class":51,"line":2482},[49,3271,3207],{"class":73},[49,3273,3275,3277,3279,3282,3284],{"class":51,"line":3274},30,[49,3276,3212],{"class":73},[49,3278,1872],{"class":77},[49,3280,3281],{"class":59},"\"猜对了！\"",[49,3283,1872],{"class":77},[49,3285,1894],{"class":73},[49,3287,3289,3292],{"class":51,"line":3288},31,[49,3290,3291],{"class":77},"            break",[49,3293,1990],{"class":73},[49,3295,3297],{"class":51,"line":3296},32,[49,3298,3226],{"class":73},[49,3300,3302],{"class":51,"line":3301},33,[49,3303,3304],{"class":66},"        \u002F\u002F猜对 退出游戏\n",[49,3306,3308],{"class":51,"line":3307},34,[49,3309,3310],{"class":66},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[49,3312,3314],{"class":51,"line":3313},35,[49,3315,2885],{"class":73},[49,3317,3319],{"class":51,"line":3318},36,[49,3320,2264],{"class":73},[30,3322,3323],{"start":63},[33,3324,3325,3326,3329],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[112,3327,3328],{},"do...while会先执行一次循环语句","，在判断循环语句",[40,3331,3333],{"className":829,"code":3332,"language":831,"meta":27,"style":27},"\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",[46,3334,3335,3340,3348,3352,3364,3372,3376,3393,3400,3404,3417,3427],{"__ignoreMap":27},[49,3336,3337],{"class":51,"line":52},[49,3338,3339],{"class":66},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[49,3341,3342,3344,3346],{"class":51,"line":63},[49,3343,844],{"class":77},[49,3345,2671],{"class":55},[49,3347,2674],{"class":73},[49,3349,3350],{"class":51,"line":70},[49,3351,2245],{"class":73},[49,3353,3354,3356,3358,3360,3362],{"class":51,"line":219},[49,3355,2683],{"class":77},[49,3357,2938],{"class":73},[49,3359,78],{"class":77},[49,3361,1021],{"class":159},[49,3363,1990],{"class":73},[49,3365,3366,3369],{"class":51,"line":233},[49,3367,3368],{"class":77},"    do",[49,3370,3371],{"class":73}," \n",[49,3373,3374],{"class":51,"line":241},[49,3375,2728],{"class":73},[49,3377,3378,3381,3383,3385,3387,3389,3391],{"class":51,"line":1920},[49,3379,3380],{"class":55},"        std",[49,3382,2970],{"class":73},[49,3384,1872],{"class":77},[49,3386,2364],{"class":73},[49,3388,1872],{"class":77},[49,3390,2979],{"class":55},[49,3392,2982],{"class":73},[49,3394,3395,3397],{"class":51,"line":2011},[49,3396,2987],{"class":73},[49,3398,3399],{"class":77},"++\n",[49,3401,3402],{"class":51,"line":2017},[49,3403,2885],{"class":73},[49,3405,3406,3408,3410,3412,3414],{"class":51,"line":2029},[49,3407,2949],{"class":77},[49,3409,2952],{"class":73},[49,3411,1739],{"class":77},[49,3413,1275],{"class":159},[49,3415,3416],{"class":73},");\n",[49,3418,3419,3421,3423,3425],{"class":51,"line":2311},[49,3420,3001],{"class":55},[49,3422,841],{"class":73},[49,3424,3006],{"class":59},[49,3426,3416],{"class":73},[49,3428,3429],{"class":51,"line":2316},[49,3430,2264],{"class":73},[14,3432,3433],{},"案例-水仙花数",[14,3435,3436],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,3438,3439],{},"例如：1^3+5^3+3^3=153",[14,3441,3442],{},"请用do...while语句，求出所有3位数的水仙花数",[40,3444,3446],{"className":829,"code":3445,"language":831,"meta":27,"style":27},"#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",[46,3447,3448,3454,3464,3472,3476,3481,3493,3499,3503,3508,3524,3540,3556,3571,3590,3605,3653,3657,3669,3673,3681,3685,3699],{"__ignoreMap":27},[49,3449,3450,3452],{"class":51,"line":52},[49,3451,2648],{"class":77},[49,3453,3032],{"class":59},[49,3455,3456,3458,3460,3462],{"class":51,"line":63},[49,3457,2656],{"class":77},[49,3459,2659],{"class":77},[49,3461,2662],{"class":55},[49,3463,1990],{"class":73},[49,3465,3466,3468,3470],{"class":51,"line":70},[49,3467,844],{"class":77},[49,3469,2671],{"class":55},[49,3471,2674],{"class":73},[49,3473,3474],{"class":51,"line":219},[49,3475,2245],{"class":73},[49,3477,3478],{"class":51,"line":233},[49,3479,3480],{"class":66},"    \u002F\u002F1.先打印所有三位数字\n",[49,3482,3483,3485,3487,3489,3491],{"class":51,"line":241},[49,3484,2683],{"class":77},[49,3486,2938],{"class":73},[49,3488,78],{"class":77},[49,3490,1140],{"class":159},[49,3492,1990],{"class":73},[49,3494,3495,3497],{"class":51,"line":1920},[49,3496,3368],{"class":77},[49,3498,3371],{"class":73},[49,3500,3501],{"class":51,"line":2011},[49,3502,2728],{"class":73},[49,3504,3505],{"class":51,"line":2017},[49,3506,3507],{"class":66},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[49,3509,3510,3513,3515,3517,3519,3521],{"class":51,"line":2029},[49,3511,3512],{"class":77},"        int",[49,3514,2098],{"class":73},[49,3516,78],{"class":77},[49,3518,1021],{"class":159},[49,3520,894],{"class":73},[49,3522,3523],{"class":66}," \u002F\u002F个位\n",[49,3525,3526,3528,3531,3533,3535,3537],{"class":51,"line":2311},[49,3527,3512],{"class":77},[49,3529,3530],{"class":73}," b",[49,3532,78],{"class":77},[49,3534,1021],{"class":159},[49,3536,894],{"class":73},[49,3538,3539],{"class":66}," \u002F\u002F十位\n",[49,3541,3542,3544,3547,3549,3551,3553],{"class":51,"line":2316},[49,3543,3512],{"class":77},[49,3545,3546],{"class":73}," c",[49,3548,78],{"class":77},[49,3550,1021],{"class":159},[49,3552,894],{"class":73},[49,3554,3555],{"class":66}," \u002F\u002F百位\n",[49,3557,3558,3561,3563,3565,3567,3569],{"class":51,"line":2322},[49,3559,3560],{"class":73},"        a",[49,3562,78],{"class":77},[49,3564,2364],{"class":73},[49,3566,1157],{"class":77},[49,3568,1275],{"class":159},[49,3570,1990],{"class":73},[49,3572,3573,3576,3578,3580,3582,3584,3586,3588],{"class":51,"line":2327},[49,3574,3575],{"class":73},"        b",[49,3577,78],{"class":77},[49,3579,2364],{"class":73},[49,3581,1413],{"class":77},[49,3583,1275],{"class":159},[49,3585,1157],{"class":77},[49,3587,1275],{"class":159},[49,3589,1990],{"class":73},[49,3591,3592,3595,3597,3599,3601,3603],{"class":51,"line":2341},[49,3593,3594],{"class":73},"        c",[49,3596,78],{"class":77},[49,3598,2364],{"class":73},[49,3600,1413],{"class":77},[49,3602,1140],{"class":159},[49,3604,1990],{"class":73},[49,3606,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629,3631,3633,3635,3637,3639,3641,3644,3647,3650],{"class":51,"line":2346},[49,3608,3194],{"class":77},[49,3610,2540],{"class":73},[49,3612,1284],{"class":77},[49,3614,124],{"class":73},[49,3616,1284],{"class":77},[49,3618,124],{"class":73},[49,3620,1310],{"class":77},[49,3622,1092],{"class":73},[49,3624,1284],{"class":77},[49,3626,1092],{"class":73},[49,3628,1284],{"class":77},[49,3630,1092],{"class":73},[49,3632,1310],{"class":77},[49,3634,1117],{"class":73},[49,3636,1284],{"class":77},[49,3638,1117],{"class":73},[49,3640,1284],{"class":77},[49,3642,3643],{"class":73},"c ",[49,3645,3646],{"class":77},"==",[49,3648,3649],{"class":73}," num)",[49,3651,3652],{"class":66}," \u002F\u002F如果是水仙花数，才打印\n",[49,3654,3655],{"class":51,"line":2352},[49,3656,3207],{"class":73},[49,3658,3659,3661,3663,3665,3667],{"class":51,"line":2373},[49,3660,3212],{"class":73},[49,3662,1872],{"class":77},[49,3664,2364],{"class":73},[49,3666,1872],{"class":77},[49,3668,1894],{"class":73},[49,3670,3671],{"class":51,"line":2378},[49,3672,3226],{"class":73},[49,3674,3675,3677,3679],{"class":51,"line":2392},[49,3676,2987],{"class":73},[49,3678,2990],{"class":77},[49,3680,1990],{"class":73},[49,3682,3683],{"class":51,"line":2397},[49,3684,2885],{"class":73},[49,3686,3687,3689,3692,3694,3697],{"class":51,"line":2426},[49,3688,2949],{"class":77},[49,3690,3691],{"class":73}," (num ",[49,3693,1739],{"class":77},[49,3695,3696],{"class":159}," 1000",[49,3698,3416],{"class":73},[49,3700,3701],{"class":51,"line":2431},[49,3702,2264],{"class":73},[30,3704,3705],{"start":70},[33,3706,3707],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[40,3709,3711],{"className":829,"code":3710,"language":831,"meta":27,"style":27},"\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",[46,3712,3713,3718,3747,3751,3763,3767,3772,3783,3790,3794,3808,3812,3819,3823,3835,3844],{"__ignoreMap":27},[49,3714,3715],{"class":51,"line":52},[49,3716,3717],{"class":66},"\u002F\u002F从数字0-9打印\n",[49,3719,3720,3723,3725,3727,3730,3732,3734,3737,3739,3741,3743,3745],{"class":51,"line":63},[49,3721,3722],{"class":77},"for",[49,3724,841],{"class":73},[49,3726,844],{"class":77},[49,3728,3729],{"class":73}," i",[49,3731,78],{"class":77},[49,3733,1021],{"class":159},[49,3735,3736],{"class":73},";i",[49,3738,1739],{"class":77},[49,3740,1275],{"class":159},[49,3742,3736],{"class":73},[49,3744,2990],{"class":77},[49,3746,847],{"class":73},[49,3748,3749],{"class":51,"line":70},[49,3750,2245],{"class":73},[49,3752,3753,3755,3757,3759,3761],{"class":51,"line":219},[49,3754,2250],{"class":73},[49,3756,1872],{"class":77},[49,3758,1270],{"class":73},[49,3760,1872],{"class":77},[49,3762,1894],{"class":73},[49,3764,3765],{"class":51,"line":233},[49,3766,2264],{"class":73},[49,3768,3769],{"class":51,"line":241},[49,3770,3771],{"class":66},"\u002F\u002F上式可以进行拆分\n",[49,3773,3774,3776,3778,3780],{"class":51,"line":1920},[49,3775,844],{"class":77},[49,3777,3729],{"class":73},[49,3779,78],{"class":77},[49,3781,3782],{"class":159},"0\n",[49,3784,3785,3787],{"class":51,"line":2011},[49,3786,3722],{"class":77},[49,3788,3789],{"class":73},"(;;;)\n",[49,3791,3792],{"class":51,"line":2017},[49,3793,2245],{"class":73},[49,3795,3796,3799,3802,3804,3806],{"class":51,"line":2029},[49,3797,3798],{"class":77},"    if",[49,3800,3801],{"class":73},"(i",[49,3803,2409],{"class":77},[49,3805,1275],{"class":159},[49,3807,847],{"class":73},[49,3809,3810],{"class":51,"line":2311},[49,3811,2728],{"class":73},[49,3813,3814,3817],{"class":51,"line":2316},[49,3815,3816],{"class":77},"        break",[49,3818,1990],{"class":73},[49,3820,3821],{"class":51,"line":2322},[49,3822,2885],{"class":73},[49,3824,3825,3827,3829,3831,3833],{"class":51,"line":2327},[49,3826,2250],{"class":73},[49,3828,1872],{"class":77},[49,3830,1270],{"class":73},[49,3832,1872],{"class":77},[49,3834,1894],{"class":73},[49,3836,3837,3840,3842],{"class":51,"line":2341},[49,3838,3839],{"class":73},"    i",[49,3841,2990],{"class":77},[49,3843,1990],{"class":73},[49,3845,3846],{"class":51,"line":2346},[49,3847,2264],{"class":73},[14,3849,3850],{},"小练习",[40,3852,3854],{"className":829,"code":3853,"language":831,"meta":27,"style":27},"#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",[46,3855,3856,3862,3872,3880,3884,3889,3894,3922,3926,3931,3936,3977,3981,3994,3998,4002,4006,4018,4022,4026],{"__ignoreMap":27},[49,3857,3858,3860],{"class":51,"line":52},[49,3859,2648],{"class":77},[49,3861,2651],{"class":59},[49,3863,3864,3866,3868,3870],{"class":51,"line":63},[49,3865,2656],{"class":77},[49,3867,2659],{"class":77},[49,3869,2662],{"class":55},[49,3871,1990],{"class":73},[49,3873,3874,3876,3878],{"class":51,"line":70},[49,3875,844],{"class":77},[49,3877,2671],{"class":55},[49,3879,2674],{"class":73},[49,3881,3882],{"class":51,"line":219},[49,3883,2245],{"class":73},[49,3885,3886],{"class":51,"line":233},[49,3887,3888],{"class":66},"    \u002F\u002F敲桌子案例\n",[49,3890,3891],{"class":51,"line":241},[49,3892,3893],{"class":66},"    \u002F\u002F1.先输出1-100的数字\n",[49,3895,3896,3899,3901,3903,3905,3907,3909,3912,3914,3916,3918,3920],{"class":51,"line":1920},[49,3897,3898],{"class":77},"    for",[49,3900,841],{"class":73},[49,3902,844],{"class":77},[49,3904,3729],{"class":73},[49,3906,78],{"class":77},[49,3908,1047],{"class":159},[49,3910,3911],{"class":73},"; i",[49,3913,2287],{"class":77},[49,3915,1140],{"class":159},[49,3917,3911],{"class":73},[49,3919,2990],{"class":77},[49,3921,847],{"class":73},[49,3923,3924],{"class":51,"line":2011},[49,3925,2728],{"class":73},[49,3927,3928],{"class":51,"line":2017},[49,3929,3930],{"class":66},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[49,3932,3933],{"class":51,"line":2029},[49,3934,3935],{"class":66},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[49,3937,3938,3940,3942,3944,3946,3948,3950,3953,3955,3957,3959,3961,3963,3965,3967,3969,3971,3973,3975],{"class":51,"line":2311},[49,3939,3194],{"class":77},[49,3941,3801],{"class":73},[49,3943,1157],{"class":77},[49,3945,1198],{"class":159},[49,3947,3646],{"class":77},[49,3949,1021],{"class":159},[49,3951,3952],{"class":77}," ||",[49,3954,3729],{"class":73},[49,3956,1157],{"class":77},[49,3958,1275],{"class":159},[49,3960,3646],{"class":77},[49,3962,1198],{"class":159},[49,3964,3952],{"class":77},[49,3966,3729],{"class":73},[49,3968,1413],{"class":77},[49,3970,1275],{"class":159},[49,3972,3646],{"class":77},[49,3974,1198],{"class":159},[49,3976,847],{"class":73},[49,3978,3979],{"class":51,"line":2316},[49,3980,3207],{"class":73},[49,3982,3983,3985,3987,3990,3992],{"class":51,"line":2322},[49,3984,3212],{"class":73},[49,3986,1872],{"class":77},[49,3988,3989],{"class":59},"\"敲桌子\"",[49,3991,1872],{"class":77},[49,3993,1894],{"class":73},[49,3995,3996],{"class":51,"line":2327},[49,3997,3226],{"class":73},[49,3999,4000],{"class":51,"line":2341},[49,4001,3267],{"class":77},[49,4003,4004],{"class":51,"line":2346},[49,4005,3207],{"class":73},[49,4007,4008,4010,4012,4014,4016],{"class":51,"line":2352},[49,4009,3212],{"class":73},[49,4011,1872],{"class":77},[49,4013,1270],{"class":73},[49,4015,1872],{"class":77},[49,4017,1894],{"class":73},[49,4019,4020],{"class":51,"line":2373},[49,4021,3226],{"class":73},[49,4023,4024],{"class":51,"line":2378},[49,4025,2885],{"class":73},[49,4027,4028],{"class":51,"line":2392},[49,4029,2264],{"class":73},[14,4031,4032],{},"嵌套实现星图",[40,4034,4036],{"className":829,"code":4035,"language":831,"meta":27,"style":27},"#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",[46,4037,4038,4044,4054,4062,4066,4092,4096,4125,4129,4140,4144,4153,4157],{"__ignoreMap":27},[49,4039,4040,4042],{"class":51,"line":52},[49,4041,2648],{"class":77},[49,4043,2651],{"class":59},[49,4045,4046,4048,4050,4052],{"class":51,"line":63},[49,4047,2656],{"class":77},[49,4049,2659],{"class":77},[49,4051,2662],{"class":55},[49,4053,1990],{"class":73},[49,4055,4056,4058,4060],{"class":51,"line":70},[49,4057,844],{"class":77},[49,4059,2671],{"class":55},[49,4061,2674],{"class":73},[49,4063,4064],{"class":51,"line":219},[49,4065,2245],{"class":73},[49,4067,4068,4070,4072,4074,4076,4078,4080,4082,4084,4086,4088,4090],{"class":51,"line":233},[49,4069,3898],{"class":77},[49,4071,2357],{"class":73},[49,4073,844],{"class":77},[49,4075,3729],{"class":73},[49,4077,78],{"class":77},[49,4079,1021],{"class":159},[49,4081,3736],{"class":73},[49,4083,1739],{"class":77},[49,4085,1275],{"class":159},[49,4087,3736],{"class":73},[49,4089,2990],{"class":77},[49,4091,847],{"class":73},[49,4093,4094],{"class":51,"line":241},[49,4095,2728],{"class":73},[49,4097,4098,4101,4103,4105,4108,4110,4112,4115,4117,4119,4121,4123],{"class":51,"line":1920},[49,4099,4100],{"class":77},"        for",[49,4102,2357],{"class":73},[49,4104,844],{"class":77},[49,4106,4107],{"class":73}," j",[49,4109,78],{"class":77},[49,4111,1021],{"class":159},[49,4113,4114],{"class":73},";j",[49,4116,1739],{"class":77},[49,4118,1275],{"class":159},[49,4120,4114],{"class":73},[49,4122,2990],{"class":77},[49,4124,847],{"class":73},[49,4126,4127],{"class":51,"line":2011},[49,4128,3207],{"class":73},[49,4130,4131,4133,4135,4138],{"class":51,"line":2017},[49,4132,3212],{"class":73},[49,4134,1872],{"class":77},[49,4136,4137],{"class":59},"\"*\"",[49,4139,1990],{"class":73},[49,4141,4142],{"class":51,"line":2029},[49,4143,3226],{"class":73},[49,4145,4146,4149,4151],{"class":51,"line":2311},[49,4147,4148],{"class":73},"        cout",[49,4150,1872],{"class":77},[49,4152,1894],{"class":73},[49,4154,4155],{"class":51,"line":2316},[49,4156,2885],{"class":73},[49,4158,4159],{"class":51,"line":2322},[49,4160,2264],{"class":73},[14,4162,4163],{},"乘法口诀表",[40,4165,4167],{"className":829,"code":4166,"language":831,"meta":27,"style":27},"#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",[46,4168,4169,4175,4185,4193,4197,4223,4227,4252,4256,4296,4300,4308,4312],{"__ignoreMap":27},[49,4170,4171,4173],{"class":51,"line":52},[49,4172,2648],{"class":77},[49,4174,3032],{"class":59},[49,4176,4177,4179,4181,4183],{"class":51,"line":63},[49,4178,2656],{"class":77},[49,4180,2659],{"class":77},[49,4182,2662],{"class":55},[49,4184,1990],{"class":73},[49,4186,4187,4189,4191],{"class":51,"line":70},[49,4188,844],{"class":77},[49,4190,2671],{"class":55},[49,4192,2674],{"class":73},[49,4194,4195],{"class":51,"line":219},[49,4196,2245],{"class":73},[49,4198,4199,4201,4203,4205,4207,4209,4211,4213,4215,4217,4219,4221],{"class":51,"line":233},[49,4200,3898],{"class":77},[49,4202,841],{"class":73},[49,4204,844],{"class":77},[49,4206,3729],{"class":73},[49,4208,78],{"class":77},[49,4210,1047],{"class":159},[49,4212,3736],{"class":73},[49,4214,1739],{"class":77},[49,4216,1275],{"class":159},[49,4218,3736],{"class":73},[49,4220,2990],{"class":77},[49,4222,847],{"class":73},[49,4224,4225],{"class":51,"line":241},[49,4226,2728],{"class":73},[49,4228,4229,4231,4233,4235,4237,4239,4241,4243,4245,4248,4250],{"class":51,"line":1920},[49,4230,4100],{"class":77},[49,4232,841],{"class":73},[49,4234,844],{"class":77},[49,4236,4107],{"class":73},[49,4238,78],{"class":77},[49,4240,1047],{"class":159},[49,4242,4114],{"class":73},[49,4244,2287],{"class":77},[49,4246,4247],{"class":73},"i;j",[49,4249,2990],{"class":77},[49,4251,847],{"class":73},[49,4253,4254],{"class":51,"line":2011},[49,4255,3207],{"class":73},[49,4257,4258,4260,4262,4264,4266,4268,4270,4272,4274,4277,4279,4281,4283,4285,4287,4290,4292,4294],{"class":51,"line":2017},[49,4259,3212],{"class":73},[49,4261,1872],{"class":77},[49,4263,1296],{"class":73},[49,4265,1872],{"class":77},[49,4267,4137],{"class":59},[49,4269,1872],{"class":77},[49,4271,1270],{"class":73},[49,4273,1872],{"class":77},[49,4275,4276],{"class":59},"\"=\"",[49,4278,1872],{"class":77},[49,4280,1270],{"class":73},[49,4282,1284],{"class":77},[49,4284,1296],{"class":73},[49,4286,1872],{"class":77},[49,4288,4289],{"class":59},"'",[49,4291,1930],{"class":159},[49,4293,4289],{"class":59},[49,4295,1990],{"class":73},[49,4297,4298],{"class":51,"line":2029},[49,4299,3226],{"class":73},[49,4301,4302,4304,4306],{"class":51,"line":2311},[49,4303,4148],{"class":73},[49,4305,1872],{"class":77},[49,4307,1894],{"class":73},[49,4309,4310],{"class":51,"line":2316},[49,4311,2885],{"class":73},[49,4313,4314],{"class":51,"line":2322},[49,4315,2264],{"class":73},[18,4317,4319],{"id":4318},"_163跳出语句","1.6.3跳出语句",[30,4321,4322],{},[33,4323,4324],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,4326,4327],{},"break使用时机：",[742,4329,4330,4333,4336],{},[33,4331,4332],{},"出现在switch条件语句中，作用是终止case并跳出switch",[33,4334,4335],{},"出现在循环结构中，作用是跳出当前的循环结构",[33,4337,4338],{},"出现在嵌套循环中，跳出最近的内层循环语句",[30,4340,4341,4344],{"start":63},[33,4342,4343],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[33,4345,4346],{},"goto语句\n语法：goto 标记;",[14,4348,4349],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[40,4351,4353],{"className":829,"code":4352,"language":831,"meta":27,"style":27},"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",[46,4354,4355,4363,4367,4380,4390,4403,4416,4429,4437,4453],{"__ignoreMap":27},[49,4356,4357,4359,4361],{"class":51,"line":52},[49,4358,844],{"class":77},[49,4360,2671],{"class":55},[49,4362,2674],{"class":73},[49,4364,4365],{"class":51,"line":63},[49,4366,2245],{"class":73},[49,4368,4369,4371,4373,4376,4378],{"class":51,"line":70},[49,4370,2250],{"class":73},[49,4372,1872],{"class":77},[49,4374,4375],{"class":59},"\"1\"",[49,4377,1872],{"class":77},[49,4379,1894],{"class":73},[49,4381,4382,4385,4388],{"class":51,"line":219},[49,4383,4384],{"class":77},"    goto",[49,4386,4387],{"class":55}," FLAG",[49,4389,1990],{"class":73},[49,4391,4392,4394,4396,4399,4401],{"class":51,"line":233},[49,4393,2250],{"class":73},[49,4395,1872],{"class":77},[49,4397,4398],{"class":59},"\"2\"",[49,4400,1872],{"class":77},[49,4402,1894],{"class":73},[49,4404,4405,4407,4409,4412,4414],{"class":51,"line":241},[49,4406,2250],{"class":73},[49,4408,1872],{"class":77},[49,4410,4411],{"class":59},"\"3\"",[49,4413,1872],{"class":77},[49,4415,1894],{"class":73},[49,4417,4418,4420,4422,4425,4427],{"class":51,"line":1920},[49,4419,2250],{"class":73},[49,4421,1872],{"class":77},[49,4423,4424],{"class":59},"\"4\"",[49,4426,1872],{"class":77},[49,4428,1894],{"class":73},[49,4430,4431,4434],{"class":51,"line":2011},[49,4432,4433],{"class":55},"    FLAG",[49,4435,4436],{"class":73},":\n",[49,4438,4439,4441,4443,4446,4448,4450],{"class":51,"line":2017},[49,4440,2250],{"class":73},[49,4442,1872],{"class":77},[49,4444,4445],{"class":59},"\"5\"",[49,4447,1872],{"class":77},[49,4449,1938],{"class":73},[49,4451,4452],{"class":66},"\u002F\u002F跳过了2,3,4,直接到5\n",[49,4454,4455],{"class":51,"line":2029},[49,4456,2264],{"class":73},[782,4458,4460],{"id":4459},"_17数组","1.7数组",[18,4462,4464],{"id":4463},"_171一维数组","1.7.1一维数组",[30,4466,4467],{},[33,4468,4469],{},"一维数组定义方式",[610,4471,4472,4482],{},[613,4473,4474],{},[616,4475,4476,4479],{},[619,4477,4478],{},"方式",[619,4480,4481],{},"注意事项",[633,4483,4484,4498,4508],{},[616,4485,4486,4492],{},[638,4487,4488,4489,894],{},"数据类型 数组名",[49,4490,4491],{},"数组长度",[638,4493,4494,4495,4497],{},"这种方式是先定义再arr",[49,4496,1270],{},"赋值",[616,4499,4500,4505],{},[638,4501,4488,4502,4504],{},[49,4503,4491],{},"={值1,值2....};",[638,4506,4507],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[616,4509,4510,4514],{},[638,4511,4488,4512,4504],{},[49,4513],{},[638,4515,4516,4517,4519],{},"int arr",[49,4518],{},";这是不正确的，按照这样的方式定义必须有初始长度",[30,4521,4522],{"start":63},[33,4523,4524],{},"一维数组数组名\n用途：",[742,4526,4527],{},[33,4528,4529],{},"1.可以统计整个数组在内存中的长度：",[40,4531,4533],{"className":829,"code":4532,"language":831,"meta":27,"style":27},"sizeof(arr);\nsizeof(arr[0]);\n",[46,4534,4535,4542],{"__ignoreMap":27},[49,4536,4537,4539],{"class":51,"line":52},[49,4538,838],{"class":77},[49,4540,4541],{"class":73},"(arr);\n",[49,4543,4544,4546,4549,4551],{"class":51,"line":63},[49,4545,838],{"class":77},[49,4547,4548],{"class":73},"(arr[",[49,4550,1021],{"class":159},[49,4552,4553],{"class":73},"]);\n",[742,4555,4556],{},[33,4557,4558],{},"2.可以获取数组在内存中的首地址:",[40,4560,4562],{"className":829,"code":4561,"language":831,"meta":27,"style":27},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[46,4563,4564,4569,4582,4587],{"__ignoreMap":27},[49,4565,4566],{"class":51,"line":52},[49,4567,4568],{"class":66},"\u002F\u002F查看16进制的首地址\n",[49,4570,4571,4573,4575,4578,4580],{"class":51,"line":63},[49,4572,2069],{"class":73},[49,4574,1872],{"class":77},[49,4576,4577],{"class":73},"arr",[49,4579,1872],{"class":77},[49,4581,1894],{"class":73},[49,4583,4584],{"class":51,"line":70},[49,4585,4586],{"class":66},"\u002F\u002F看10进制数\n",[49,4588,4589,4591,4593,4595,4597,4599,4601,4604,4606,4608,4610],{"class":51,"line":219},[49,4590,2069],{"class":73},[49,4592,1872],{"class":77},[49,4594,841],{"class":73},[49,4596,844],{"class":77},[49,4598,1258],{"class":73},[49,4600,1182],{"class":77},[49,4602,4603],{"class":73},"arr[",[49,4605,1021],{"class":159},[49,4607,1769],{"class":73},[49,4609,1872],{"class":77},[49,4611,1894],{"class":73},[14,4613,4614],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[742,4616,4617],{},[33,4618,4619],{},"1️⃣五只小猪称体重",[40,4621,4623],{"className":829,"code":4622,"language":831,"meta":27,"style":27},"#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",[46,4624,4625,4631,4641,4649,4653,4693,4706,4732,4736,4748,4752,4762,4766,4770,4783,4793],{"__ignoreMap":27},[49,4626,4627,4629],{"class":51,"line":52},[49,4628,2648],{"class":77},[49,4630,2651],{"class":59},[49,4632,4633,4635,4637,4639],{"class":51,"line":63},[49,4634,2656],{"class":77},[49,4636,2659],{"class":77},[49,4638,2662],{"class":55},[49,4640,1990],{"class":73},[49,4642,4643,4645,4647],{"class":51,"line":70},[49,4644,844],{"class":77},[49,4646,2671],{"class":55},[49,4648,2674],{"class":73},[49,4650,4651],{"class":51,"line":219},[49,4652,2245],{"class":73},[49,4654,4655,4657,4660,4662,4664,4666,4668,4671,4673,4676,4678,4680,4682,4685,4687,4690],{"class":51,"line":233},[49,4656,2683],{"class":77},[49,4658,4659],{"class":73}," arr[",[49,4661,1148],{"class":159},[49,4663,1769],{"class":73},[49,4665,78],{"class":77},[49,4667,1725],{"class":73},[49,4669,4670],{"class":159},"300",[49,4672,1207],{"class":73},[49,4674,4675],{"class":159},"350",[49,4677,1207],{"class":73},[49,4679,2421],{"class":159},[49,4681,1207],{"class":73},[49,4683,4684],{"class":159},"400",[49,4686,1207],{"class":73},[49,4688,4689],{"class":159},"250",[49,4691,4692],{"class":73},"};\n",[49,4694,4695,4697,4700,4702,4704],{"class":51,"line":241},[49,4696,2683],{"class":77},[49,4698,4699],{"class":73}," tmp",[49,4701,78],{"class":77},[49,4703,1021],{"class":159},[49,4705,1990],{"class":73},[49,4707,4708,4710,4712,4714,4716,4718,4720,4722,4724,4726,4728,4730],{"class":51,"line":1920},[49,4709,3898],{"class":77},[49,4711,2357],{"class":73},[49,4713,844],{"class":77},[49,4715,3729],{"class":73},[49,4717,78],{"class":77},[49,4719,1021],{"class":159},[49,4721,3736],{"class":73},[49,4723,1739],{"class":77},[49,4725,1148],{"class":159},[49,4727,3736],{"class":73},[49,4729,2990],{"class":77},[49,4731,847],{"class":73},[49,4733,4734],{"class":51,"line":2011},[49,4735,2728],{"class":73},[49,4737,4738,4740,4743,4745],{"class":51,"line":2017},[49,4739,3194],{"class":77},[49,4741,4742],{"class":73},"(tmp",[49,4744,1739],{"class":77},[49,4746,4747],{"class":73},"arr[i])\n",[49,4749,4750],{"class":51,"line":2029},[49,4751,3207],{"class":73},[49,4753,4754,4757,4759],{"class":51,"line":2311},[49,4755,4756],{"class":73},"            tmp",[49,4758,78],{"class":77},[49,4760,4761],{"class":73},"arr[i];\n",[49,4763,4764],{"class":51,"line":2316},[49,4765,3226],{"class":73},[49,4767,4768],{"class":51,"line":2322},[49,4769,2885],{"class":73},[49,4771,4772,4774,4776,4779,4781],{"class":51,"line":2327},[49,4773,2250],{"class":73},[49,4775,1872],{"class":77},[49,4777,4778],{"class":73},"tmp",[49,4780,1872],{"class":77},[49,4782,1894],{"class":73},[49,4784,4785,4788,4791],{"class":51,"line":2341},[49,4786,4787],{"class":77},"    return",[49,4789,4790],{"class":159}," 0",[49,4792,1990],{"class":73},[49,4794,4795],{"class":51,"line":2346},[49,4796,2264],{"class":73},[742,4798,4799],{},[33,4800,4801],{},"2️⃣数组元素逆置",[40,4803,4805],{"className":829,"code":4804,"language":831,"meta":27,"style":27},"\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",[46,4806,4807,4812,4818,4828,4836,4840,4875,4891,4923,4936,4941,4946,4958,4968,4978,4983,4992,5002,5007,5012,5039,5043,5059,5063,5074,5083],{"__ignoreMap":27},[49,4808,4809],{"class":51,"line":52},[49,4810,4811],{"class":66},"\u002F\u002F元素逆置\n",[49,4813,4814,4816],{"class":51,"line":63},[49,4815,2648],{"class":77},[49,4817,2651],{"class":59},[49,4819,4820,4822,4824,4826],{"class":51,"line":70},[49,4821,2656],{"class":77},[49,4823,2659],{"class":77},[49,4825,2662],{"class":55},[49,4827,1990],{"class":73},[49,4829,4830,4832,4834],{"class":51,"line":219},[49,4831,844],{"class":77},[49,4833,2671],{"class":55},[49,4835,2674],{"class":73},[49,4837,4838],{"class":51,"line":233},[49,4839,2245],{"class":73},[49,4841,4842,4845,4847,4849,4851,4853,4855,4857,4859,4861,4863,4865,4867,4869,4871,4873],{"class":51,"line":241},[49,4843,4844],{"class":77},"   int",[49,4846,4659],{"class":73},[49,4848,1148],{"class":159},[49,4850,1769],{"class":73},[49,4852,78],{"class":77},[49,4854,1725],{"class":73},[49,4856,1047],{"class":159},[49,4858,1207],{"class":73},[49,4860,915],{"class":159},[49,4862,1207],{"class":73},[49,4864,909],{"class":159},[49,4866,1207],{"class":73},[49,4868,1122],{"class":159},[49,4870,1207],{"class":73},[49,4872,1148],{"class":159},[49,4874,4692],{"class":73},[49,4876,4877,4879,4882,4884,4886,4888],{"class":51,"line":1920},[49,4878,4844],{"class":77},[49,4880,4881],{"class":73}," start",[49,4883,78],{"class":77},[49,4885,1021],{"class":159},[49,4887,894],{"class":73},[49,4889,4890],{"class":66},"\u002F\u002F起始下标\n",[49,4892,4893,4895,4898,4901,4904,4907,4909,4911,4914,4916,4918,4920],{"class":51,"line":2011},[49,4894,4844],{"class":77},[49,4896,4897],{"class":73}," end",[49,4899,4900],{"class":77},"=sizeof",[49,4902,4903],{"class":73},"(arr)",[49,4905,4906],{"class":77},"\u002Fsizeof",[49,4908,4548],{"class":73},[49,4910,1021],{"class":159},[49,4912,4913],{"class":73},"])",[49,4915,1361],{"class":77},[49,4917,1047],{"class":159},[49,4919,894],{"class":73},[49,4921,4922],{"class":66},"\u002F\u002F结束下标\n",[49,4924,4925,4928,4931,4933],{"class":51,"line":2017},[49,4926,4927],{"class":77},"   while",[49,4929,4930],{"class":73}," (start",[49,4932,1739],{"class":77},[49,4934,4935],{"class":73},"end)\n",[49,4937,4938],{"class":51,"line":2029},[49,4939,4940],{"class":73},"   {\n",[49,4942,4943],{"class":51,"line":2311},[49,4944,4945],{"class":66},"    \u002F\u002F实现元素互换代码\n",[49,4947,4948,4950,4953,4955],{"class":51,"line":2316},[49,4949,2683],{"class":77},[49,4951,4952],{"class":73}," temp",[49,4954,78],{"class":77},[49,4956,4957],{"class":73},"arr[start];\n",[49,4959,4960,4963,4965],{"class":51,"line":2322},[49,4961,4962],{"class":73},"    arr[start]",[49,4964,78],{"class":77},[49,4966,4967],{"class":73},"arr[end];\n",[49,4969,4970,4973,4975],{"class":51,"line":2327},[49,4971,4972],{"class":73},"    arr[end]",[49,4974,78],{"class":77},[49,4976,4977],{"class":73},"temp;\n",[49,4979,4980],{"class":51,"line":2341},[49,4981,4982],{"class":66},"    \u002F\u002F下标更新\n",[49,4984,4985,4988,4990],{"class":51,"line":2346},[49,4986,4987],{"class":73},"    start",[49,4989,2990],{"class":77},[49,4991,1990],{"class":73},[49,4993,4994,4997,5000],{"class":51,"line":2352},[49,4995,4996],{"class":73},"    end",[49,4998,4999],{"class":77},"--",[49,5001,1990],{"class":73},[49,5003,5004],{"class":51,"line":2373},[49,5005,5006],{"class":73},"   }\n",[49,5008,5009],{"class":51,"line":2378},[49,5010,5011],{"class":66},"   \u002F\u002F输出逆置后的数组\n",[49,5013,5014,5017,5019,5021,5023,5025,5027,5029,5031,5033,5035,5037],{"class":51,"line":2392},[49,5015,5016],{"class":77},"   for",[49,5018,2357],{"class":73},[49,5020,844],{"class":77},[49,5022,3729],{"class":73},[49,5024,78],{"class":77},[49,5026,1021],{"class":159},[49,5028,3736],{"class":73},[49,5030,1739],{"class":77},[49,5032,1148],{"class":159},[49,5034,3736],{"class":73},[49,5036,2990],{"class":77},[49,5038,847],{"class":73},[49,5040,5041],{"class":51,"line":2397},[49,5042,4940],{"class":73},[49,5044,5045,5047,5049,5052,5054,5057],{"class":51,"line":2426},[49,5046,2250],{"class":73},[49,5048,1872],{"class":77},[49,5050,5051],{"class":73},"arr[i]",[49,5053,1872],{"class":77},[49,5055,5056],{"class":59},"\" \"",[49,5058,1990],{"class":73},[49,5060,5061],{"class":51,"line":2431},[49,5062,5006],{"class":73},[49,5064,5065,5068,5070,5072],{"class":51,"line":2448},[49,5066,5067],{"class":55},"   system",[49,5069,841],{"class":73},[49,5071,3006],{"class":59},[49,5073,3416],{"class":73},[49,5075,5076,5079,5081],{"class":51,"line":2453},[49,5077,5078],{"class":77},"   return",[49,5080,4790],{"class":159},[49,5082,1990],{"class":73},[49,5084,5085],{"class":51,"line":2458},[49,5086,2264],{"class":73},[742,5088,5089],{},[33,5090,5091],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[40,5093,5095],{"className":829,"code":5094,"language":831,"meta":27,"style":27},"\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",[46,5096,5097,5102,5108,5118,5126,5130,5182,5195,5221,5225,5239,5243,5248,5253,5283,5287,5292,5326,5330,5335,5355,5360,5372,5388,5403,5408,5412,5416,5429,5455,5459,5473,5477,5485],{"__ignoreMap":27},[49,5098,5099],{"class":51,"line":52},[49,5100,5101],{"class":66},"\u002F\u002F冒泡排序,升序\n",[49,5103,5104,5106],{"class":51,"line":63},[49,5105,2648],{"class":77},[49,5107,2651],{"class":59},[49,5109,5110,5112,5114,5116],{"class":51,"line":70},[49,5111,2656],{"class":77},[49,5113,2659],{"class":77},[49,5115,2662],{"class":55},[49,5117,1990],{"class":73},[49,5119,5120,5122,5124],{"class":51,"line":219},[49,5121,844],{"class":77},[49,5123,2671],{"class":55},[49,5125,2674],{"class":73},[49,5127,5128],{"class":51,"line":233},[49,5129,2245],{"class":73},[49,5131,5132,5134,5136,5138,5141,5143,5146,5148,5150,5152,5154,5156,5158,5160,5162,5164,5166,5168,5170,5172,5174,5176,5178,5180],{"class":51,"line":241},[49,5133,2683],{"class":77},[49,5135,4659],{"class":73},[49,5137,1249],{"class":159},[49,5139,5140],{"class":73},"] ",[49,5142,78],{"class":77},[49,5144,5145],{"class":73}," {",[49,5147,1122],{"class":159},[49,5149,1207],{"class":73},[49,5151,915],{"class":159},[49,5153,1207],{"class":73},[49,5155,1224],{"class":159},[49,5157,1207],{"class":73},[49,5159,1021],{"class":159},[49,5161,1207],{"class":73},[49,5163,1148],{"class":159},[49,5165,1207],{"class":73},[49,5167,1198],{"class":159},[49,5169,1207],{"class":73},[49,5171,1047],{"class":159},[49,5173,1207],{"class":73},[49,5175,909],{"class":159},[49,5177,1207],{"class":73},[49,5179,1249],{"class":159},[49,5181,4692],{"class":73},[49,5183,5184,5186,5188,5191,5193],{"class":51,"line":1920},[49,5185,2250],{"class":73},[49,5187,1872],{"class":77},[49,5189,5190],{"class":59},"\"排序前：\"",[49,5192,1872],{"class":77},[49,5194,1894],{"class":73},[49,5196,5197,5199,5201,5203,5205,5207,5209,5211,5213,5215,5217,5219],{"class":51,"line":2011},[49,5198,3898],{"class":77},[49,5200,2357],{"class":73},[49,5202,844],{"class":77},[49,5204,3729],{"class":73},[49,5206,78],{"class":77},[49,5208,1021],{"class":159},[49,5210,3736],{"class":73},[49,5212,1739],{"class":77},[49,5214,1249],{"class":159},[49,5216,3736],{"class":73},[49,5218,2990],{"class":77},[49,5220,847],{"class":73},[49,5222,5223],{"class":51,"line":2017},[49,5224,2728],{"class":73},[49,5226,5227,5229,5231,5233,5235,5237],{"class":51,"line":2029},[49,5228,4148],{"class":73},[49,5230,1872],{"class":77},[49,5232,5051],{"class":73},[49,5234,1872],{"class":77},[49,5236,5056],{"class":59},[49,5238,1990],{"class":73},[49,5240,5241],{"class":51,"line":2311},[49,5242,2885],{"class":73},[49,5244,5245],{"class":51,"line":2316},[49,5246,5247],{"class":66},"    \u002F\u002F开始冒泡排序\n",[49,5249,5250],{"class":51,"line":2322},[49,5251,5252],{"class":66},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[49,5254,5255,5257,5259,5261,5263,5265,5267,5269,5271,5273,5275,5277,5279,5281],{"class":51,"line":2327},[49,5256,3898],{"class":77},[49,5258,2357],{"class":73},[49,5260,844],{"class":77},[49,5262,3729],{"class":73},[49,5264,78],{"class":77},[49,5266,1021],{"class":159},[49,5268,3736],{"class":73},[49,5270,1739],{"class":77},[49,5272,1249],{"class":159},[49,5274,1361],{"class":77},[49,5276,1047],{"class":159},[49,5278,3736],{"class":73},[49,5280,2990],{"class":77},[49,5282,847],{"class":73},[49,5284,5285],{"class":51,"line":2341},[49,5286,2728],{"class":73},[49,5288,5289],{"class":51,"line":2346},[49,5290,5291],{"class":66},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[49,5293,5294,5296,5298,5300,5302,5304,5306,5308,5310,5312,5314,5316,5318,5320,5322,5324],{"class":51,"line":2352},[49,5295,4100],{"class":77},[49,5297,2357],{"class":73},[49,5299,844],{"class":77},[49,5301,4107],{"class":73},[49,5303,78],{"class":77},[49,5305,1021],{"class":159},[49,5307,4114],{"class":73},[49,5309,1739],{"class":77},[49,5311,1249],{"class":159},[49,5313,1361],{"class":77},[49,5315,1270],{"class":73},[49,5317,1361],{"class":77},[49,5319,1047],{"class":159},[49,5321,4114],{"class":73},[49,5323,2990],{"class":77},[49,5325,847],{"class":73},[49,5327,5328],{"class":51,"line":2373},[49,5329,3207],{"class":73},[49,5331,5332],{"class":51,"line":2378},[49,5333,5334],{"class":66},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[49,5336,5337,5340,5343,5345,5348,5350,5352],{"class":51,"line":2392},[49,5338,5339],{"class":77},"            if",[49,5341,5342],{"class":73},"(arr[j]",[49,5344,1789],{"class":77},[49,5346,5347],{"class":73},"arr[j",[49,5349,1310],{"class":77},[49,5351,1047],{"class":159},[49,5353,5354],{"class":73},"])\n",[49,5356,5357],{"class":51,"line":2397},[49,5358,5359],{"class":73},"            {\n",[49,5361,5362,5365,5367,5369],{"class":51,"line":2426},[49,5363,5364],{"class":77},"                int",[49,5366,4952],{"class":73},[49,5368,78],{"class":77},[49,5370,5371],{"class":73},"arr[j];\n",[49,5373,5374,5377,5379,5381,5383,5385],{"class":51,"line":2431},[49,5375,5376],{"class":73},"                arr[j]",[49,5378,78],{"class":77},[49,5380,5347],{"class":73},[49,5382,1310],{"class":77},[49,5384,1047],{"class":159},[49,5386,5387],{"class":73},"];\n",[49,5389,5390,5393,5395,5397,5399,5401],{"class":51,"line":2448},[49,5391,5392],{"class":73},"                arr[j",[49,5394,1310],{"class":77},[49,5396,1047],{"class":159},[49,5398,1769],{"class":73},[49,5400,78],{"class":77},[49,5402,4977],{"class":73},[49,5404,5405],{"class":51,"line":2453},[49,5406,5407],{"class":73},"            }\n",[49,5409,5410],{"class":51,"line":2458},[49,5411,3226],{"class":73},[49,5413,5414],{"class":51,"line":2463},[49,5415,2885],{"class":73},[49,5417,5418,5420,5422,5425,5427],{"class":51,"line":2477},[49,5419,2250],{"class":73},[49,5421,1872],{"class":77},[49,5423,5424],{"class":59},"\"排序后：\"",[49,5426,1872],{"class":77},[49,5428,1894],{"class":73},[49,5430,5431,5433,5435,5437,5439,5441,5443,5445,5447,5449,5451,5453],{"class":51,"line":2482},[49,5432,3898],{"class":77},[49,5434,2357],{"class":73},[49,5436,844],{"class":77},[49,5438,3729],{"class":73},[49,5440,78],{"class":77},[49,5442,1021],{"class":159},[49,5444,3736],{"class":73},[49,5446,1739],{"class":77},[49,5448,1249],{"class":159},[49,5450,3736],{"class":73},[49,5452,2990],{"class":77},[49,5454,847],{"class":73},[49,5456,5457],{"class":51,"line":3274},[49,5458,2728],{"class":73},[49,5460,5461,5463,5465,5467,5469,5471],{"class":51,"line":3288},[49,5462,4148],{"class":73},[49,5464,1872],{"class":77},[49,5466,5051],{"class":73},[49,5468,1872],{"class":77},[49,5470,5056],{"class":59},[49,5472,1990],{"class":73},[49,5474,5475],{"class":51,"line":3296},[49,5476,2885],{"class":73},[49,5478,5479,5481,5483],{"class":51,"line":3301},[49,5480,4787],{"class":77},[49,5482,4790],{"class":159},[49,5484,1990],{"class":73},[49,5486,5487],{"class":51,"line":3307},[49,5488,2264],{"class":73},[18,5490,5492],{"id":5491},"_172二维数组","1.7.2二维数组",[30,5494,5495],{},[33,5496,5497],{},"二维数组的四种定义方式",[610,5499,5500,5509],{},[613,5501,5502],{},[616,5503,5504,5507],{},[619,5505,5506],{},"序号",[619,5508,4478],{},[633,5510,5511,5521,5530,5539,5548],{},[616,5512,5513,5515],{},[638,5514,1047],{},[638,5516,5517,5518,894],{},"数据类型 数组名[行数]",[49,5519,5520],{},"列数",[616,5522,5523,5525],{},[638,5524,915],{},[638,5526,5517,5527,5529],{},[49,5528,5520],{},"={ {数据1,数据2}，{数据3，数据4}... }",[616,5531,5532,5534],{},[638,5533,909],{},[638,5535,5517,5536,5538],{},[49,5537,5520],{},"={数据1,数据2,数据3...}",[616,5540,5541,5543],{},[638,5542,1122],{},[638,5544,5545,5546,5538],{},"数据类型 数组名[]",[49,5547,5520],{},[616,5549,5550,5553],{},[638,5551,5552],{},"注意：不能只省略列数",[638,5554],{},[30,5556,5557],{"start":63},[33,5558,5559],{},"二维数组数组名",[742,5561,5562,5565],{},[33,5563,5564],{},"1.查看二维数组所占内存空间",[33,5566,5567],{},"2.获取二维数组首地址",[14,5569,5570],{},"已知二维数组，求二维数组的行数与列数",[40,5572,5574],{"className":829,"code":5573,"language":831,"meta":27,"style":27},"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",[46,5575,5576,5584,5588,5606,5610,5628,5644,5649,5674,5707],{"__ignoreMap":27},[49,5577,5578,5580,5582],{"class":51,"line":52},[49,5579,844],{"class":77},[49,5581,2671],{"class":55},[49,5583,2674],{"class":73},[49,5585,5586],{"class":51,"line":63},[49,5587,2245],{"class":73},[49,5589,5590,5592,5594,5596,5599,5601,5603],{"class":51,"line":70},[49,5591,2683],{"class":77},[49,5593,4659],{"class":73},[49,5595,915],{"class":159},[49,5597,5598],{"class":73},"][",[49,5600,909],{"class":159},[49,5602,1769],{"class":73},[49,5604,5605],{"class":77},"=\n",[49,5607,5608],{"class":51,"line":219},[49,5609,2728],{"class":73},[49,5611,5612,5615,5617,5619,5621,5623,5625],{"class":51,"line":233},[49,5613,5614],{"class":73},"        {",[49,5616,1047],{"class":159},[49,5618,1207],{"class":73},[49,5620,915],{"class":159},[49,5622,1207],{"class":73},[49,5624,909],{"class":159},[49,5626,5627],{"class":73},"},\n",[49,5629,5630,5632,5634,5636,5638,5640,5642],{"class":51,"line":241},[49,5631,5614],{"class":73},[49,5633,1122],{"class":159},[49,5635,1207],{"class":73},[49,5637,1148],{"class":159},[49,5639,1207],{"class":73},[49,5641,1173],{"class":159},[49,5643,2264],{"class":73},[49,5645,5646],{"class":51,"line":1920},[49,5647,5648],{"class":73},"    };\n",[49,5650,5651,5653,5655,5658,5660,5662,5664,5666,5668,5670,5672],{"class":51,"line":2011},[49,5652,2250],{"class":73},[49,5654,1872],{"class":77},[49,5656,5657],{"class":59},"\"二维数组的行数\"",[49,5659,2072],{"class":77},[49,5661,4903],{"class":73},[49,5663,4906],{"class":77},[49,5665,4548],{"class":73},[49,5667,1021],{"class":159},[49,5669,4913],{"class":73},[49,5671,1872],{"class":77},[49,5673,1894],{"class":73},[49,5675,5676,5678,5680,5683,5685,5687,5689,5691,5693,5695,5697,5699,5701,5703,5705],{"class":51,"line":2017},[49,5677,2250],{"class":73},[49,5679,1872],{"class":77},[49,5681,5682],{"class":59},"\"二维数组的列数\"",[49,5684,2072],{"class":77},[49,5686,4548],{"class":73},[49,5688,1021],{"class":159},[49,5690,4913],{"class":73},[49,5692,4906],{"class":77},[49,5694,4548],{"class":73},[49,5696,1021],{"class":159},[49,5698,5598],{"class":73},[49,5700,1021],{"class":159},[49,5702,4913],{"class":73},[49,5704,1872],{"class":77},[49,5706,1894],{"class":73},[49,5708,5709],{"class":51,"line":2029},[49,5710,2264],{"class":73},[14,5712,5713],{},"查看二维数组首地址",[40,5715,5717],{"className":829,"code":5716,"language":831,"meta":27,"style":27},"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",[46,5718,5719,5736,5762,5787],{"__ignoreMap":27},[49,5720,5721,5723,5725,5728,5730,5732,5734],{"class":51,"line":52},[49,5722,2069],{"class":73},[49,5724,1872],{"class":77},[49,5726,5727],{"class":59},"\"二维数组首地址：\"",[49,5729,1872],{"class":77},[49,5731,4577],{"class":73},[49,5733,1872],{"class":77},[49,5735,1894],{"class":73},[49,5737,5738,5740,5742,5745,5747,5749,5751,5754,5756,5758,5760],{"class":51,"line":63},[49,5739,2069],{"class":73},[49,5741,1872],{"class":77},[49,5743,5744],{"class":59},"\"二维数组第一行的首地址：\"",[49,5746,1872],{"class":77},[49,5748,841],{"class":73},[49,5750,844],{"class":77},[49,5752,5753],{"class":73},")arr[",[49,5755,1021],{"class":159},[49,5757,1769],{"class":73},[49,5759,1872],{"class":77},[49,5761,1894],{"class":73},[49,5763,5764,5766,5768,5771,5773,5775,5777,5779,5781,5783,5785],{"class":51,"line":70},[49,5765,2069],{"class":73},[49,5767,1872],{"class":77},[49,5769,5770],{"class":59},"\"二维数组第二行的首地址：\"",[49,5772,1872],{"class":77},[49,5774,841],{"class":73},[49,5776,844],{"class":77},[49,5778,5753],{"class":73},[49,5780,1047],{"class":159},[49,5782,1769],{"class":73},[49,5784,1872],{"class":77},[49,5786,1894],{"class":73},[49,5788,5789,5791,5793,5796,5798,5800,5802,5804,5806,5808,5810,5812,5814,5816,5818,5820],{"class":51,"line":219},[49,5790,2069],{"class":73},[49,5792,1872],{"class":77},[49,5794,5795],{"class":59},"\"二维数组第一个元素的首地址:\"",[49,5797,1872],{"class":77},[49,5799,841],{"class":73},[49,5801,844],{"class":77},[49,5803,1258],{"class":73},[49,5805,1182],{"class":77},[49,5807,4603],{"class":73},[49,5809,1021],{"class":159},[49,5811,5598],{"class":73},[49,5813,1021],{"class":159},[49,5815,1769],{"class":73},[49,5817,1872],{"class":77},[49,5819,1938],{"class":73},[49,5821,5822],{"class":66},"\u002F\u002F对于数，要加取址符\n",[757,5824,5825],{},"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":27,"searchDepth":63,"depth":63,"links":5827},[5828,5829,5830,5838,5839,5845,5850],{"id":784,"depth":63,"text":785},{"id":791,"depth":63,"text":792},{"id":806,"depth":63,"text":807,"children":5831},[5832,5833,5834,5835,5836,5837],{"id":810,"depth":70,"text":811},{"id":857,"depth":70,"text":858},{"id":923,"depth":70,"text":924},{"id":1853,"depth":70,"text":1854},{"id":1944,"depth":70,"text":1945},{"id":2043,"depth":70,"text":2044},{"id":2085,"depth":63,"text":2086},{"id":2153,"depth":63,"text":2154,"children":5840},[5841,5842,5843,5844],{"id":2157,"depth":70,"text":2158},{"id":2178,"depth":70,"text":2179},{"id":2187,"depth":70,"text":2188},{"id":2196,"depth":70,"text":2197},{"id":2205,"depth":63,"text":2206,"children":5846},[5847,5848,5849],{"id":2209,"depth":70,"text":2210},{"id":2903,"depth":70,"text":2904},{"id":4318,"depth":70,"text":4319},{"id":4459,"depth":63,"text":4460,"children":5851},[5852,5853],{"id":4463,"depth":70,"text":4464},{"id":5491,"depth":70,"text":5492},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":775,"description":27},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5860,"title":5861,"body":5862,"description":27,"extension":766,"meta":6962,"navigation":398,"path":6963,"seo":6964,"stem":6965,"__hash__":6966},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5863,"toc":6954},[5864,5867,5871,5879,5887,5890,5956,5960,5963,6039,6043,6046,6049,6052,6265,6269,6274,6338,6343,6410,6415,6506,6509,6614,6618,6621,6627,6771,6775,6778,6792,6795,6840,6843,6951],[10,5865,5861],{"id":5866},"_2函数",[782,5868,5870],{"id":5869},"_21函数概述","2.1函数概述",[30,5872,5873,5876],{},[33,5874,5875],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[33,5877,5878],{},"语法：",[40,5880,5885],{"className":5881,"code":5883,"language":5884,"meta":27},[5882],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[46,5886,5883],{"__ignoreMap":27},[14,5888,5889],{},"小案例",[40,5891,5893],{"className":829,"code":5892,"language":831,"meta":27,"style":27},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[46,5894,5895,5900,5924,5928,5945,5952],{"__ignoreMap":27},[49,5896,5897],{"class":51,"line":52},[49,5898,5899],{"class":66},"\u002F\u002Fnum1,num2形参\n",[49,5901,5902,5904,5907,5909,5911,5915,5917,5919,5922],{"class":51,"line":63},[49,5903,844],{"class":77},[49,5905,5906],{"class":55}," add",[49,5908,841],{"class":73},[49,5910,844],{"class":77},[49,5912,5914],{"class":5913},"s4XuR"," num1",[49,5916,1207],{"class":73},[49,5918,844],{"class":77},[49,5920,5921],{"class":5913}," num2",[49,5923,847],{"class":73},[49,5925,5926],{"class":51,"line":70},[49,5927,2245],{"class":73},[49,5929,5930,5932,5935,5937,5940,5942],{"class":51,"line":219},[49,5931,2683],{"class":77},[49,5933,5934],{"class":73}," sum",[49,5936,78],{"class":77},[49,5938,5939],{"class":73},"num1",[49,5941,1310],{"class":77},[49,5943,5944],{"class":73},"num2;\n",[49,5946,5947,5949],{"class":51,"line":233},[49,5948,4787],{"class":77},[49,5950,5951],{"class":73}," sum;\n",[49,5953,5954],{"class":51,"line":241},[49,5955,2264],{"class":73},[782,5957,5959],{"id":5958},"_22函数调用","2.2函数调用",[14,5961,5962],{},"调用刚刚写的求和函数",[40,5964,5966],{"className":829,"code":5965,"language":831,"meta":27,"style":27},"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",[46,5967,5968,5976,5980,5985,5997,6009,6018,6023,6035],{"__ignoreMap":27},[49,5969,5970,5972,5974],{"class":51,"line":52},[49,5971,844],{"class":77},[49,5973,2671],{"class":55},[49,5975,2674],{"class":73},[49,5977,5978],{"class":51,"line":63},[49,5979,2245],{"class":73},[49,5981,5982],{"class":51,"line":70},[49,5983,5984],{"class":66},"    \u002F\u002Fa,b实参\n",[49,5986,5987,5989,5991,5993,5995],{"class":51,"line":219},[49,5988,2683],{"class":77},[49,5990,2098],{"class":73},[49,5992,78],{"class":77},[49,5994,1021],{"class":159},[49,5996,1990],{"class":73},[49,5998,5999,6001,6003,6005,6007],{"class":51,"line":233},[49,6000,2683],{"class":77},[49,6002,3530],{"class":73},[49,6004,78],{"class":77},[49,6006,1021],{"class":159},[49,6008,1990],{"class":73},[49,6010,6011,6013,6015],{"class":51,"line":241},[49,6012,2710],{"class":73},[49,6014,2129],{"class":77},[49,6016,6017],{"class":73},"a,b;\n",[49,6019,6020],{"class":51,"line":1920},[49,6021,6022],{"class":66},"    \u002F\u002F调用函数时，实参值传给了形参\n",[49,6024,6025,6027,6029,6032],{"class":51,"line":2011},[49,6026,2250],{"class":73},[49,6028,1872],{"class":77},[49,6030,6031],{"class":55},"add",[49,6033,6034],{"class":73},"(a,b);\n",[49,6036,6037],{"class":51,"line":2017},[49,6038,2264],{"class":73},[782,6040,6042],{"id":6041},"_23值传递","2.3值传递",[14,6044,6045],{},"值传递就是函数调用时实参将数值传给形参",[14,6047,6048],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,6050,6051],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[40,6053,6055],{"className":829,"code":6054,"language":831,"meta":27,"style":27},"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",[46,6056,6057,6079,6083,6096,6113,6131,6142,6151,6160,6173,6189,6205,6214,6218,6226,6230,6242,6254,6261],{"__ignoreMap":27},[49,6058,6059,6062,6065,6067,6069,6071,6073,6075,6077],{"class":51,"line":52},[49,6060,6061],{"class":77},"void",[49,6063,6064],{"class":55}," swap",[49,6066,841],{"class":73},[49,6068,844],{"class":77},[49,6070,5914],{"class":5913},[49,6072,1207],{"class":73},[49,6074,844],{"class":77},[49,6076,5921],{"class":5913},[49,6078,847],{"class":73},[49,6080,6081],{"class":51,"line":63},[49,6082,2245],{"class":73},[49,6084,6085,6087,6089,6092,6094],{"class":51,"line":70},[49,6086,2250],{"class":73},[49,6088,1872],{"class":77},[49,6090,6091],{"class":59},"\"交换前：\"",[49,6093,1872],{"class":77},[49,6095,1894],{"class":73},[49,6097,6098,6100,6102,6105,6107,6109,6111],{"class":51,"line":219},[49,6099,2250],{"class":73},[49,6101,1872],{"class":77},[49,6103,6104],{"class":59},"\"num1=\"",[49,6106,1872],{"class":77},[49,6108,5939],{"class":73},[49,6110,1872],{"class":77},[49,6112,1894],{"class":73},[49,6114,6115,6117,6119,6122,6124,6127,6129],{"class":51,"line":233},[49,6116,2250],{"class":73},[49,6118,1872],{"class":77},[49,6120,6121],{"class":59},"\"num2=\"",[49,6123,1872],{"class":77},[49,6125,6126],{"class":73},"num2",[49,6128,1872],{"class":77},[49,6130,1894],{"class":73},[49,6132,6133,6135,6137,6139],{"class":51,"line":241},[49,6134,2683],{"class":77},[49,6136,4952],{"class":73},[49,6138,78],{"class":77},[49,6140,6141],{"class":73},"num1;\n",[49,6143,6144,6147,6149],{"class":51,"line":1920},[49,6145,6146],{"class":73},"    num1",[49,6148,78],{"class":77},[49,6150,5944],{"class":73},[49,6152,6153,6156,6158],{"class":51,"line":2011},[49,6154,6155],{"class":73},"    num2",[49,6157,78],{"class":77},[49,6159,4977],{"class":73},[49,6161,6162,6164,6166,6169,6171],{"class":51,"line":2017},[49,6163,2250],{"class":73},[49,6165,1872],{"class":77},[49,6167,6168],{"class":59},"\"交换后：\"",[49,6170,1872],{"class":77},[49,6172,1894],{"class":73},[49,6174,6175,6177,6179,6181,6183,6185,6187],{"class":51,"line":2029},[49,6176,2250],{"class":73},[49,6178,1872],{"class":77},[49,6180,6104],{"class":59},[49,6182,1872],{"class":77},[49,6184,5939],{"class":73},[49,6186,1872],{"class":77},[49,6188,1894],{"class":73},[49,6190,6191,6193,6195,6197,6199,6201,6203],{"class":51,"line":2311},[49,6192,2250],{"class":73},[49,6194,1872],{"class":77},[49,6196,6121],{"class":59},[49,6198,1872],{"class":77},[49,6200,6126],{"class":73},[49,6202,1872],{"class":77},[49,6204,1894],{"class":73},[49,6206,6207,6209,6211],{"class":51,"line":2316},[49,6208,4787],{"class":77},[49,6210,894],{"class":73},[49,6212,6213],{"class":66},"\u002F\u002F或者不写\n",[49,6215,6216],{"class":51,"line":2322},[49,6217,2264],{"class":73},[49,6219,6220,6222,6224],{"class":51,"line":2327},[49,6221,844],{"class":77},[49,6223,2671],{"class":55},[49,6225,2674],{"class":73},[49,6227,6228],{"class":51,"line":2341},[49,6229,2245],{"class":73},[49,6231,6232,6234,6236,6238,6240],{"class":51,"line":2346},[49,6233,2683],{"class":77},[49,6235,2098],{"class":73},[49,6237,78],{"class":77},[49,6239,1275],{"class":159},[49,6241,1990],{"class":73},[49,6243,6244,6246,6248,6250,6252],{"class":51,"line":2352},[49,6245,2683],{"class":77},[49,6247,3530],{"class":73},[49,6249,78],{"class":77},[49,6251,1529],{"class":159},[49,6253,1990],{"class":73},[49,6255,6256,6259],{"class":51,"line":2373},[49,6257,6258],{"class":55},"    swap",[49,6260,6034],{"class":73},[49,6262,6263],{"class":51,"line":2378},[49,6264,2264],{"class":73},[782,6266,6268],{"id":6267},"_24函数的常见形式","2.4函数的常见形式",[30,6270,6271],{},[33,6272,6273],{},"无参无返",[40,6275,6277],{"className":829,"code":6276,"language":831,"meta":27,"style":27},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[46,6278,6279,6288,6292,6305,6309,6317,6321,6326,6334],{"__ignoreMap":27},[49,6280,6281,6283,6286],{"class":51,"line":52},[49,6282,6061],{"class":77},[49,6284,6285],{"class":55}," test01",[49,6287,2674],{"class":73},[49,6289,6290],{"class":51,"line":63},[49,6291,2245],{"class":73},[49,6293,6294,6296,6298,6301,6303],{"class":51,"line":70},[49,6295,2250],{"class":73},[49,6297,1872],{"class":77},[49,6299,6300],{"class":59},"\"你好\"",[49,6302,1872],{"class":77},[49,6304,1894],{"class":73},[49,6306,6307],{"class":51,"line":219},[49,6308,2264],{"class":73},[49,6310,6311,6313,6315],{"class":51,"line":233},[49,6312,844],{"class":77},[49,6314,2671],{"class":55},[49,6316,2674],{"class":73},[49,6318,6319],{"class":51,"line":241},[49,6320,2245],{"class":73},[49,6322,6323],{"class":51,"line":1920},[49,6324,6325],{"class":66},"    \u002F\u002F函数调用\n",[49,6327,6328,6331],{"class":51,"line":2011},[49,6329,6330],{"class":55},"    test01",[49,6332,6333],{"class":73},"();\n",[49,6335,6336],{"class":51,"line":2017},[49,6337,2264],{"class":73},[30,6339,6340],{"start":63},[33,6341,6342],{},"有参无返",[40,6344,6346],{"className":829,"code":6345,"language":831,"meta":27,"style":27},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[46,6347,6348,6363,6367,6379,6383,6391,6395,6406],{"__ignoreMap":27},[49,6349,6350,6352,6355,6357,6359,6361],{"class":51,"line":52},[49,6351,6061],{"class":77},[49,6353,6354],{"class":55}," test02",[49,6356,841],{"class":73},[49,6358,844],{"class":77},[49,6360,2098],{"class":5913},[49,6362,847],{"class":73},[49,6364,6365],{"class":51,"line":63},[49,6366,2245],{"class":73},[49,6368,6369,6371,6373,6375,6377],{"class":51,"line":70},[49,6370,2250],{"class":73},[49,6372,1872],{"class":77},[49,6374,6300],{"class":59},[49,6376,1872],{"class":77},[49,6378,1894],{"class":73},[49,6380,6381],{"class":51,"line":219},[49,6382,2264],{"class":73},[49,6384,6385,6387,6389],{"class":51,"line":233},[49,6386,844],{"class":77},[49,6388,2671],{"class":55},[49,6390,2674],{"class":73},[49,6392,6393],{"class":51,"line":241},[49,6394,2245],{"class":73},[49,6396,6397,6400,6402,6404],{"class":51,"line":1920},[49,6398,6399],{"class":55},"    test02",[49,6401,841],{"class":73},[49,6403,1140],{"class":159},[49,6405,3416],{"class":73},[49,6407,6408],{"class":51,"line":2011},[49,6409,2264],{"class":73},[30,6411,6412],{"start":70},[33,6413,6414],{},"无参有返",[40,6416,6418],{"className":829,"code":6417,"language":831,"meta":27,"style":27},"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",[46,6419,6420,6429,6433,6445,6454,6458,6466,6470,6483,6502],{"__ignoreMap":27},[49,6421,6422,6424,6427],{"class":51,"line":52},[49,6423,844],{"class":77},[49,6425,6426],{"class":55}," test03",[49,6428,2674],{"class":73},[49,6430,6431],{"class":51,"line":63},[49,6432,2245],{"class":73},[49,6434,6435,6437,6439,6441,6443],{"class":51,"line":70},[49,6436,2250],{"class":73},[49,6438,1872],{"class":77},[49,6440,6300],{"class":59},[49,6442,1872],{"class":77},[49,6444,1894],{"class":73},[49,6446,6447,6449,6452],{"class":51,"line":219},[49,6448,4787],{"class":77},[49,6450,6451],{"class":159}," 100",[49,6453,1990],{"class":73},[49,6455,6456],{"class":51,"line":233},[49,6457,2264],{"class":73},[49,6459,6460,6462,6464],{"class":51,"line":241},[49,6461,844],{"class":77},[49,6463,2671],{"class":55},[49,6465,2674],{"class":73},[49,6467,6468],{"class":51,"line":1920},[49,6469,2245],{"class":73},[49,6471,6472,6474,6476,6478,6481],{"class":51,"line":2011},[49,6473,2683],{"class":77},[49,6475,5914],{"class":73},[49,6477,78],{"class":77},[49,6479,6480],{"class":55},"test03",[49,6482,6333],{"class":73},[49,6484,6485,6487,6489,6491,6493,6495,6497,6499],{"class":51,"line":2017},[49,6486,2250],{"class":73},[49,6488,1872],{"class":77},[49,6490,6104],{"class":59},[49,6492,1872],{"class":77},[49,6494,5939],{"class":73},[49,6496,1872],{"class":77},[49,6498,1938],{"class":73},[49,6500,6501],{"class":66}," \u002F\u002F100\n",[49,6503,6504],{"class":51,"line":2029},[49,6505,2264],{"class":73},[14,6507,6508],{},"4.有参有返",[40,6510,6512],{"className":829,"code":6511,"language":831,"meta":27,"style":27},"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",[46,6513,6514,6529,6533,6546,6552,6556,6565,6569,6581,6595,6610],{"__ignoreMap":27},[49,6515,6516,6518,6521,6523,6525,6527],{"class":51,"line":52},[49,6517,844],{"class":77},[49,6519,6520],{"class":55}," test04",[49,6522,841],{"class":73},[49,6524,844],{"class":77},[49,6526,2098],{"class":5913},[49,6528,847],{"class":73},[49,6530,6531],{"class":51,"line":63},[49,6532,2245],{"class":73},[49,6534,6535,6537,6539,6542,6544],{"class":51,"line":70},[49,6536,2250],{"class":73},[49,6538,1872],{"class":77},[49,6540,6541],{"class":59},"\"hello\"",[49,6543,1872],{"class":77},[49,6545,1894],{"class":73},[49,6547,6548,6550],{"class":51,"line":219},[49,6549,4787],{"class":77},[49,6551,2132],{"class":73},[49,6553,6554],{"class":51,"line":233},[49,6555,2264],{"class":73},[49,6557,6558,6560,6563],{"class":51,"line":241},[49,6559,844],{"class":77},[49,6561,6562],{"class":55}," mian",[49,6564,2674],{"class":73},[49,6566,6567],{"class":51,"line":1920},[49,6568,2245],{"class":73},[49,6570,6571,6573,6575,6577,6579],{"class":51,"line":2011},[49,6572,2683],{"class":77},[49,6574,3530],{"class":73},[49,6576,78],{"class":77},[49,6578,1047],{"class":159},[49,6580,1990],{"class":73},[49,6582,6583,6585,6587,6589,6592],{"class":51,"line":2017},[49,6584,2683],{"class":77},[49,6586,3546],{"class":73},[49,6588,78],{"class":77},[49,6590,6591],{"class":55},"test04",[49,6593,6594],{"class":73},"(b);\n",[49,6596,6597,6599,6601,6603,6605,6607],{"class":51,"line":2029},[49,6598,2250],{"class":73},[49,6600,1872],{"class":77},[49,6602,1117],{"class":73},[49,6604,1872],{"class":77},[49,6606,1938],{"class":73},[49,6608,6609],{"class":66}," \u002F\u002F1\n",[49,6611,6612],{"class":51,"line":2311},[49,6613,2264],{"class":73},[782,6615,6617],{"id":6616},"_25函数的声明","2.5函数的声明",[14,6619,6620],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,6622,6623,6624],{},"函数的",[112,6625,6626],{},"声明可以多次，但是函数的定义只能有一次",[40,6628,6630],{"className":829,"code":6629,"language":831,"meta":27,"style":27},"\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",[46,6631,6632,6637,6642,6667,6676,6680,6692,6704,6720,6724,6744,6748,6767],{"__ignoreMap":27},[49,6633,6634],{"class":51,"line":52},[49,6635,6636],{"class":66},"\u002F\u002F函数声明\n",[49,6638,6639],{"class":51,"line":63},[49,6640,6641],{"class":66},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[49,6643,6644,6646,6649,6651,6653,6655,6657,6659,6661,6664],{"class":51,"line":70},[49,6645,844],{"class":77},[49,6647,6648],{"class":55}," max",[49,6650,841],{"class":73},[49,6652,844],{"class":77},[49,6654,2098],{"class":5913},[49,6656,1207],{"class":73},[49,6658,844],{"class":77},[49,6660,3530],{"class":5913},[49,6662,6663],{"class":73},");",[49,6665,6666],{"class":66},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[49,6668,6669,6671,6673],{"class":51,"line":219},[49,6670,844],{"class":77},[49,6672,2671],{"class":55},[49,6674,6675],{"class":73},"() \n",[49,6677,6678],{"class":51,"line":233},[49,6679,2245],{"class":73},[49,6681,6682,6684,6686,6688,6690],{"class":51,"line":241},[49,6683,2683],{"class":77},[49,6685,2098],{"class":73},[49,6687,78],{"class":77},[49,6689,1275],{"class":159},[49,6691,1990],{"class":73},[49,6693,6694,6696,6698,6700,6702],{"class":51,"line":1920},[49,6695,2683],{"class":77},[49,6697,3530],{"class":73},[49,6699,78],{"class":77},[49,6701,1529],{"class":159},[49,6703,1990],{"class":73},[49,6705,6706,6708,6710,6713,6716,6718],{"class":51,"line":2011},[49,6707,2250],{"class":73},[49,6709,1872],{"class":77},[49,6711,6712],{"class":55},"max",[49,6714,6715],{"class":73},"(a,b)",[49,6717,1872],{"class":77},[49,6719,1894],{"class":73},[49,6721,6722],{"class":51,"line":2017},[49,6723,2264],{"class":73},[49,6725,6726,6728,6730,6732,6734,6736,6738,6740,6742],{"class":51,"line":2029},[49,6727,844],{"class":77},[49,6729,6648],{"class":55},[49,6731,841],{"class":73},[49,6733,844],{"class":77},[49,6735,2098],{"class":5913},[49,6737,1207],{"class":73},[49,6739,844],{"class":77},[49,6741,3530],{"class":5913},[49,6743,847],{"class":73},[49,6745,6746],{"class":51,"line":2311},[49,6747,2245],{"class":73},[49,6749,6750,6752,6754,6756,6758,6760,6762,6764],{"class":51,"line":2316},[49,6751,4787],{"class":77},[49,6753,2098],{"class":73},[49,6755,1789],{"class":77},[49,6757,1092],{"class":73},[49,6759,1815],{"class":77},[49,6761,124],{"class":73},[49,6763,1688],{"class":77},[49,6765,6766],{"class":73},"b;\n",[49,6768,6769],{"class":51,"line":2322},[49,6770,2264],{"class":73},[782,6772,6774],{"id":6773},"_26函数的分文件编写","2.6函数的分文件编写",[14,6776,6777],{},"4个步骤：",[742,6779,6780,6783,6786,6789],{},[33,6781,6782],{},"1.创建后缀名为.h的头文件",[33,6784,6785],{},"2.创建后缀名为.cpp的源文件",[33,6787,6788],{},"3.在头文件中写函数的定义",[33,6790,6791],{},"4.在源文件中写函数的定义\n示例：",[14,6793,6794],{},"头文件：swap.h",[40,6796,6798],{"className":829,"code":6797,"language":831,"meta":27,"style":27},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[46,6799,6800,6806,6816,6820],{"__ignoreMap":27},[49,6801,6802,6804],{"class":51,"line":52},[49,6803,2648],{"class":77},[49,6805,2651],{"class":59},[49,6807,6808,6810,6812,6814],{"class":51,"line":63},[49,6809,2656],{"class":77},[49,6811,2659],{"class":77},[49,6813,2662],{"class":55},[49,6815,1990],{"class":73},[49,6817,6818],{"class":51,"line":70},[49,6819,6636],{"class":66},[49,6821,6822,6824,6826,6828,6830,6832,6834,6836,6838],{"class":51,"line":219},[49,6823,6061],{"class":77},[49,6825,6064],{"class":55},[49,6827,841],{"class":73},[49,6829,844],{"class":77},[49,6831,2098],{"class":5913},[49,6833,1207],{"class":73},[49,6835,844],{"class":77},[49,6837,3530],{"class":5913},[49,6839,3416],{"class":73},[14,6841,6842],{},"源文件：swap.cpp",[40,6844,6846],{"className":829,"code":6845,"language":831,"meta":27,"style":27},"#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",[46,6847,6848,6855,6860,6880,6884,6895,6904,6913,6930,6947],{"__ignoreMap":27},[49,6849,6850,6852],{"class":51,"line":52},[49,6851,2648],{"class":77},[49,6853,6854],{"class":59}," \"swap.h\"\n",[49,6856,6857],{"class":51,"line":63},[49,6858,6859],{"class":66},"\u002F\u002F函数的定义\n",[49,6861,6862,6864,6866,6868,6870,6872,6874,6876,6878],{"class":51,"line":70},[49,6863,6061],{"class":77},[49,6865,6064],{"class":55},[49,6867,841],{"class":73},[49,6869,844],{"class":77},[49,6871,2098],{"class":5913},[49,6873,1207],{"class":73},[49,6875,844],{"class":77},[49,6877,3530],{"class":5913},[49,6879,847],{"class":73},[49,6881,6882],{"class":51,"line":219},[49,6883,2245],{"class":73},[49,6885,6886,6888,6890,6892],{"class":51,"line":233},[49,6887,2683],{"class":77},[49,6889,4952],{"class":73},[49,6891,78],{"class":77},[49,6893,6894],{"class":73},"a;\n",[49,6896,6897,6900,6902],{"class":51,"line":241},[49,6898,6899],{"class":73},"    a",[49,6901,78],{"class":77},[49,6903,6766],{"class":73},[49,6905,6906,6909,6911],{"class":51,"line":1920},[49,6907,6908],{"class":73},"    b",[49,6910,78],{"class":77},[49,6912,4977],{"class":73},[49,6914,6915,6917,6919,6922,6924,6926,6928],{"class":51,"line":2011},[49,6916,2250],{"class":73},[49,6918,1872],{"class":77},[49,6920,6921],{"class":59},"\"a=\"",[49,6923,1872],{"class":77},[49,6925,124],{"class":73},[49,6927,1872],{"class":77},[49,6929,1894],{"class":73},[49,6931,6932,6934,6936,6939,6941,6943,6945],{"class":51,"line":2017},[49,6933,2250],{"class":73},[49,6935,1872],{"class":77},[49,6937,6938],{"class":59},"\"b=\"",[49,6940,1872],{"class":77},[49,6942,1092],{"class":73},[49,6944,1872],{"class":77},[49,6946,1894],{"class":73},[49,6948,6949],{"class":51,"line":2029},[49,6950,2264],{"class":73},[757,6952,6953],{},"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":27,"searchDepth":63,"depth":63,"links":6955},[6956,6957,6958,6959,6960,6961],{"id":5869,"depth":63,"text":5870},{"id":5958,"depth":63,"text":5959},{"id":6041,"depth":63,"text":6042},{"id":6267,"depth":63,"text":6268},{"id":6616,"depth":63,"text":6617},{"id":6773,"depth":63,"text":6774},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5861,"description":27},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6968,"title":6969,"body":6970,"description":6977,"extension":766,"meta":8382,"navigation":398,"path":8383,"seo":8384,"stem":8385,"__hash__":8386},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6971,"toc":8372},[6972,6975,6978,6982,7144,7148,7151,7154,7157,7160,7300,7304,7307,7310,7313,7378,7382,7387,7454,7457,7461,7464,7475,7480,7500,7503,7508,7527,7530,7534,7553,7556,7560,7795,7799,7802,7805,7808,7970,7973,7977,7980,7986,8369],[10,6973,6969],{"id":6974},"_3指针",[14,6976,6977],{},"通过指针保存一个地址，指针就是个地址",[782,6979,6981],{"id":6980},"_31定义指针","3.1定义指针",[40,6983,6985],{"className":829,"code":6984,"language":831,"meta":27,"style":27},"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",[46,6986,6987,6995,6999,7004,7016,7021,7029,7039,7057,7077,7081,7086,7091,7096,7110,7126,7140],{"__ignoreMap":27},[49,6988,6989,6991,6993],{"class":51,"line":52},[49,6990,844],{"class":77},[49,6992,2671],{"class":55},[49,6994,2674],{"class":73},[49,6996,6997],{"class":51,"line":63},[49,6998,2245],{"class":73},[49,7000,7001],{"class":51,"line":70},[49,7002,7003],{"class":66},"    \u002F\u002F1.定义指针\n",[49,7005,7006,7008,7010,7012,7014],{"class":51,"line":219},[49,7007,2683],{"class":77},[49,7009,2098],{"class":73},[49,7011,78],{"class":77},[49,7013,1275],{"class":159},[49,7015,1990],{"class":73},[49,7017,7018],{"class":51,"line":233},[49,7019,7020],{"class":66},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[49,7022,7023,7026],{"class":51,"line":241},[49,7024,7025],{"class":77},"    int*",[49,7027,7028],{"class":73},"p;\n",[49,7030,7031,7034,7037],{"class":51,"line":1920},[49,7032,7033],{"class":73},"    p",[49,7035,7036],{"class":77},"=&",[49,7038,6894],{"class":73},[49,7040,7041,7043,7045,7048,7051,7053,7055],{"class":51,"line":2011},[49,7042,2250],{"class":73},[49,7044,1872],{"class":77},[49,7046,7047],{"class":59},"\"a的地址为：\"",[49,7049,7050],{"class":77},"\u003C\u003C&",[49,7052,124],{"class":73},[49,7054,1872],{"class":77},[49,7056,1894],{"class":73},[49,7058,7059,7061,7063,7066,7068,7070,7072,7074],{"class":51,"line":2017},[49,7060,2250],{"class":73},[49,7062,1872],{"class":77},[49,7064,7065],{"class":59},"\"指针p为：\"",[49,7067,1872],{"class":77},[49,7069,14],{"class":73},[49,7071,1872],{"class":77},[49,7073,1938],{"class":73},[49,7075,7076],{"class":66},"\u002F\u002F指针p表示的就是a的地址\n",[49,7078,7079],{"class":51,"line":2029},[49,7080,399],{"emptyLinePlaceholder":398},[49,7082,7083],{"class":51,"line":2311},[49,7084,7085],{"class":66},"    \u002F\u002F2.使用指针\n",[49,7087,7088],{"class":51,"line":2316},[49,7089,7090],{"class":66},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[49,7092,7093],{"class":51,"line":2322},[49,7094,7095],{"class":66},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[49,7097,7098,7101,7103,7105,7108],{"class":51,"line":2327},[49,7099,7100],{"class":77},"    *",[49,7102,14],{"class":73},[49,7104,78],{"class":77},[49,7106,7107],{"class":159},"1000",[49,7109,1990],{"class":73},[49,7111,7112,7114,7117,7119,7121,7123],{"class":51,"line":2341},[49,7113,2250],{"class":73},[49,7115,7116],{"class":77},"\u003C\u003C*",[49,7118,14],{"class":73},[49,7120,1872],{"class":77},[49,7122,1938],{"class":73},[49,7124,7125],{"class":66},"\u002F\u002F1000\n",[49,7127,7128,7130,7132,7134,7136,7138],{"class":51,"line":2346},[49,7129,2250],{"class":73},[49,7131,1872],{"class":77},[49,7133,124],{"class":73},[49,7135,1872],{"class":77},[49,7137,1938],{"class":73},[49,7139,7125],{"class":66},[49,7141,7142],{"class":51,"line":2352},[49,7143,2264],{"class":73},[782,7145,7147],{"id":7146},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,7149,7150],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,7152,7153],{},"在32位操作系统下：占用4个字节空间",[14,7155,7156],{},"在64位操作系统下：占用8个字节空间",[14,7158,7159],{},"上方是不管啥数据类型的",[40,7161,7163],{"className":829,"code":7162,"language":831,"meta":27,"style":27},"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",[46,7164,7165,7173,7177,7182,7194,7199,7204,7209,7222,7244,7270,7296],{"__ignoreMap":27},[49,7166,7167,7169,7171],{"class":51,"line":52},[49,7168,844],{"class":77},[49,7170,2671],{"class":55},[49,7172,2674],{"class":73},[49,7174,7175],{"class":51,"line":63},[49,7176,2245],{"class":73},[49,7178,7179],{"class":51,"line":70},[49,7180,7181],{"class":66},"    \u002F\u002F指针所占内存空间\n",[49,7183,7184,7186,7188,7190,7192],{"class":51,"line":219},[49,7185,2683],{"class":77},[49,7187,2098],{"class":73},[49,7189,78],{"class":77},[49,7191,1275],{"class":159},[49,7193,1990],{"class":73},[49,7195,7196],{"class":51,"line":233},[49,7197,7198],{"class":66},"    \u002F\u002Fint *p;\n",[49,7200,7201],{"class":51,"line":241},[49,7202,7203],{"class":66},"    \u002F\u002Fp=&a;\n",[49,7205,7206],{"class":51,"line":1920},[49,7207,7208],{"class":66},"    \u002F\u002F上述可以写为以下：\n",[49,7210,7211,7213,7216,7218,7220],{"class":51,"line":2011},[49,7212,2683],{"class":77},[49,7214,7215],{"class":77}," *",[49,7217,14],{"class":73},[49,7219,7036],{"class":77},[49,7221,6894],{"class":73},[49,7223,7224,7227,7229,7232,7234,7237,7239,7241],{"class":51,"line":2017},[49,7225,7226],{"class":73},"    cout ",[49,7228,1872],{"class":77},[49,7230,7231],{"class":59},"\"sizeof(int *)\"",[49,7233,2072],{"class":77},[49,7235,7236],{"class":73},"(p)",[49,7238,1872],{"class":77},[49,7240,1938],{"class":73},[49,7242,7243],{"class":66},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[49,7245,7246,7248,7250,7252,7254,7256,7258,7260,7262,7264,7267],{"class":51,"line":2029},[49,7247,7226],{"class":73},[49,7249,1872],{"class":77},[49,7251,7231],{"class":59},[49,7253,2072],{"class":77},[49,7255,841],{"class":73},[49,7257,844],{"class":77},[49,7259,7215],{"class":77},[49,7261,1258],{"class":73},[49,7263,1872],{"class":77},[49,7265,7266],{"class":73},"endl",[49,7268,7269],{"class":66},"  \u002F\u002F4字节(32位的话)\n",[49,7271,7272,7274,7276,7279,7281,7283,7285,7287,7289,7291,7293],{"class":51,"line":2311},[49,7273,7226],{"class":73},[49,7275,1872],{"class":77},[49,7277,7278],{"class":59},"\"sizeof(char *)\"",[49,7280,2072],{"class":77},[49,7282,841],{"class":73},[49,7284,934],{"class":77},[49,7286,7215],{"class":77},[49,7288,1258],{"class":73},[49,7290,1872],{"class":77},[49,7292,1938],{"class":73},[49,7294,7295],{"class":66}," \u002F\u002F4字节(32位的话)\n",[49,7297,7298],{"class":51,"line":2316},[49,7299,2264],{"class":73},[782,7301,7303],{"id":7302},"_33空指针","3.3空指针",[14,7305,7306],{},"空指针：指针变量指向内存中编号为0的空间",[14,7308,7309],{},"用途：初始化指针变量",[14,7311,7312],{},"注意：空指针指向的内存是不可以访问的",[40,7314,7316],{"className":829,"code":7315,"language":831,"meta":27,"style":27},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[46,7317,7318,7326,7330,7335,7349,7354,7369,7374],{"__ignoreMap":27},[49,7319,7320,7322,7324],{"class":51,"line":52},[49,7321,844],{"class":77},[49,7323,2671],{"class":55},[49,7325,2674],{"class":73},[49,7327,7328],{"class":51,"line":63},[49,7329,2245],{"class":73},[49,7331,7332],{"class":51,"line":70},[49,7333,7334],{"class":66},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[49,7336,7337,7339,7341,7343,7345,7347],{"class":51,"line":219},[49,7338,2683],{"class":77},[49,7340,7215],{"class":77},[49,7342,14],{"class":73},[49,7344,78],{"class":77},[49,7346,3090],{"class":159},[49,7348,1990],{"class":73},[49,7350,7351],{"class":51,"line":233},[49,7352,7353],{"class":66},"    \u002F\u002F2.空指针不能进行访问\n",[49,7355,7356,7358,7360,7362,7364,7366],{"class":51,"line":241},[49,7357,7100],{"class":77},[49,7359,14],{"class":73},[49,7361,78],{"class":77},[49,7363,1140],{"class":159},[49,7365,894],{"class":73},[49,7367,7368],{"class":66},"\u002F\u002F直接报错，压根不能访问\n",[49,7370,7371],{"class":51,"line":1920},[49,7372,7373],{"class":66},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[49,7375,7376],{"class":51,"line":2011},[49,7377,2264],{"class":73},[782,7379,7381],{"id":7380},"_34野指针","3.4野指针",[14,7383,7384],{},[112,7385,7386],{},"指针变量指向非法的内存空间",[40,7388,7390],{"className":829,"code":7389,"language":831,"meta":27,"style":27},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[46,7391,7392,7400,7404,7433,7438,7450],{"__ignoreMap":27},[49,7393,7394,7396,7398],{"class":51,"line":52},[49,7395,844],{"class":77},[49,7397,2671],{"class":55},[49,7399,2674],{"class":73},[49,7401,7402],{"class":51,"line":63},[49,7403,2245],{"class":73},[49,7405,7406,7408,7410,7412,7414,7416,7418,7420,7422,7425,7428,7430],{"class":51,"line":70},[49,7407,2683],{"class":77},[49,7409,7215],{"class":77},[49,7411,14],{"class":73},[49,7413,78],{"class":77},[49,7415,841],{"class":73},[49,7417,844],{"class":77},[49,7419,7215],{"class":77},[49,7421,1258],{"class":73},[49,7423,7424],{"class":77},"0x",[49,7426,7427],{"class":159},"1100",[49,7429,894],{"class":73},[49,7431,7432],{"class":66}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[49,7434,7435],{"class":51,"line":219},[49,7436,7437],{"class":66},"    \u002F\u002F访问野指针报错\n",[49,7439,7440,7442,7444,7446,7448],{"class":51,"line":233},[49,7441,2250],{"class":73},[49,7443,7116],{"class":77},[49,7445,14],{"class":73},[49,7447,1872],{"class":77},[49,7449,1894],{"class":73},[49,7451,7452],{"class":51,"line":241},[49,7453,2264],{"class":73},[14,7455,7456],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[782,7458,7460],{"id":7459},"_35const修饰指针","3.5const修饰指针",[14,7462,7463],{},"三种情况：",[742,7465,7466,7469,7472],{},[33,7467,7468],{},"const修饰指针 常量指针",[33,7470,7471],{},"const修饰常量 指针常量",[33,7473,7474],{},"const即修饰指针，又修饰常量",[30,7476,7477],{},[33,7478,7479],{},"常量指针",[40,7481,7483],{"className":829,"code":7482,"language":831,"meta":27,"style":27},"const int *p=&a;\n",[46,7484,7485],{"__ignoreMap":27},[49,7486,7487,7490,7492,7494,7496,7498],{"class":51,"line":52},[49,7488,7489],{"class":77},"const",[49,7491,3080],{"class":77},[49,7493,7215],{"class":77},[49,7495,14],{"class":73},[49,7497,7036],{"class":77},[49,7499,6894],{"class":73},[14,7501,7502],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[30,7504,7505],{"start":63},[33,7506,7507],{},"指针常量",[40,7509,7511],{"className":829,"code":7510,"language":831,"meta":27,"style":27},"int *const p=&a;\n",[46,7512,7513],{"__ignoreMap":27},[49,7514,7515,7517,7520,7523,7525],{"class":51,"line":52},[49,7516,844],{"class":77},[49,7518,7519],{"class":77}," *const",[49,7521,7522],{"class":73}," p",[49,7524,7036],{"class":77},[49,7526,6894],{"class":73},[14,7528,7529],{},"指针的指向不可以改，指针指向的值可以改",[30,7531,7532],{"start":70},[33,7533,7474],{},[40,7535,7537],{"className":829,"code":7536,"language":831,"meta":27,"style":27},"const int *const p=&a;\n",[46,7538,7539],{"__ignoreMap":27},[49,7540,7541,7543,7545,7547,7549,7551],{"class":51,"line":52},[49,7542,7489],{"class":77},[49,7544,3080],{"class":77},[49,7546,7519],{"class":77},[49,7548,7522],{"class":73},[49,7550,7036],{"class":77},[49,7552,6894],{"class":73},[14,7554,7555],{},"指针的指向和指针指向的值都不可以改变",[782,7557,7559],{"id":7558},"_36指针和数组","3.6指针和数组",[40,7561,7563],{"className":829,"code":7562,"language":831,"meta":27,"style":27},"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",[46,7564,7565,7573,7577,7582,7636,7657,7673,7689,7700,7717,7722,7736,7762,7766,7778,7787,7791],{"__ignoreMap":27},[49,7566,7567,7569,7571],{"class":51,"line":52},[49,7568,844],{"class":77},[49,7570,2671],{"class":55},[49,7572,2674],{"class":73},[49,7574,7575],{"class":51,"line":63},[49,7576,2245],{"class":73},[49,7578,7579],{"class":51,"line":70},[49,7580,7581],{"class":66},"    \u002F\u002F利用指针访问数组中的元素\n",[49,7583,7584,7586,7588,7590,7592,7594,7596,7598,7600,7602,7604,7606,7608,7610,7612,7614,7616,7618,7620,7622,7624,7626,7628,7630,7632,7634],{"class":51,"line":219},[49,7585,2683],{"class":77},[49,7587,4659],{"class":73},[49,7589,1275],{"class":159},[49,7591,1769],{"class":73},[49,7593,78],{"class":77},[49,7595,1725],{"class":73},[49,7597,1047],{"class":159},[49,7599,1207],{"class":73},[49,7601,915],{"class":159},[49,7603,1207],{"class":73},[49,7605,909],{"class":159},[49,7607,1207],{"class":73},[49,7609,1122],{"class":159},[49,7611,1207],{"class":73},[49,7613,1148],{"class":159},[49,7615,1207],{"class":73},[49,7617,1173],{"class":159},[49,7619,1207],{"class":73},[49,7621,1198],{"class":159},[49,7623,1207],{"class":73},[49,7625,1224],{"class":159},[49,7627,1207],{"class":73},[49,7629,1249],{"class":159},[49,7631,1207],{"class":73},[49,7633,1275],{"class":159},[49,7635,4692],{"class":73},[49,7637,7638,7640,7642,7645,7647,7649,7651,7653,7655],{"class":51,"line":233},[49,7639,2250],{"class":73},[49,7641,1872],{"class":77},[49,7643,7644],{"class":59},"\"数组的第一个元素为：\"",[49,7646,1872],{"class":77},[49,7648,4603],{"class":73},[49,7650,1021],{"class":159},[49,7652,1769],{"class":73},[49,7654,1872],{"class":77},[49,7656,1894],{"class":73},[49,7658,7659,7661,7663,7665,7667,7670],{"class":51,"line":241},[49,7660,2683],{"class":77},[49,7662,7215],{"class":77},[49,7664,14],{"class":73},[49,7666,78],{"class":77},[49,7668,7669],{"class":73},"arr;",[49,7671,7672],{"class":66},"\u002F\u002F注意数才要加取地址符号&\n",[49,7674,7675,7677,7679,7681,7683,7685,7687],{"class":51,"line":1920},[49,7676,2250],{"class":73},[49,7678,1872],{"class":77},[49,7680,7644],{"class":59},[49,7682,7116],{"class":77},[49,7684,14],{"class":73},[49,7686,1872],{"class":77},[49,7688,1894],{"class":73},[49,7690,7691,7693,7695,7697],{"class":51,"line":2011},[49,7692,7033],{"class":73},[49,7694,2990],{"class":77},[49,7696,894],{"class":73},[49,7698,7699],{"class":66}," \u002F\u002F让指针向后偏移4个字节\n",[49,7701,7702,7704,7706,7709,7711,7713,7715],{"class":51,"line":2017},[49,7703,2250],{"class":73},[49,7705,1872],{"class":77},[49,7707,7708],{"class":59},"\"数组的第二个元素为：\"",[49,7710,7116],{"class":77},[49,7712,14],{"class":73},[49,7714,1872],{"class":77},[49,7716,1894],{"class":73},[49,7718,7719],{"class":51,"line":2029},[49,7720,7721],{"class":66},"    \u002F\u002F利用指针遍历数组\n",[49,7723,7724,7726,7728,7731,7733],{"class":51,"line":2311},[49,7725,2683],{"class":77},[49,7727,7215],{"class":77},[49,7729,7730],{"class":73},"p2",[49,7732,78],{"class":77},[49,7734,7735],{"class":73},"arr;\n",[49,7737,7738,7740,7742,7744,7746,7748,7750,7752,7754,7756,7758,7760],{"class":51,"line":2316},[49,7739,3898],{"class":77},[49,7741,2357],{"class":73},[49,7743,844],{"class":77},[49,7745,3729],{"class":73},[49,7747,78],{"class":77},[49,7749,1021],{"class":159},[49,7751,3736],{"class":73},[49,7753,1739],{"class":77},[49,7755,1275],{"class":159},[49,7757,3736],{"class":73},[49,7759,2990],{"class":77},[49,7761,847],{"class":73},[49,7763,7764],{"class":51,"line":2322},[49,7765,2728],{"class":73},[49,7767,7768,7770,7772,7774,7776],{"class":51,"line":2327},[49,7769,4148],{"class":73},[49,7771,7116],{"class":77},[49,7773,7730],{"class":73},[49,7775,1872],{"class":77},[49,7777,1894],{"class":73},[49,7779,7780,7783,7785],{"class":51,"line":2341},[49,7781,7782],{"class":73},"        p2",[49,7784,2990],{"class":77},[49,7786,1990],{"class":73},[49,7788,7789],{"class":51,"line":2346},[49,7790,2885],{"class":73},[49,7792,7793],{"class":51,"line":2352},[49,7794,2264],{"class":73},[782,7796,7798],{"id":7797},"_37指针和函数","3.7指针和函数",[14,7800,7801],{},"利用指针做函数参数，可以修改实参的值",[14,7803,7804],{},"值传递：只改变形参，不改变实参",[14,7806,7807],{},"地址传递：",[40,7809,7811],{"className":829,"code":7810,"language":831,"meta":27,"style":27},"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",[46,7812,7813,7838,7842,7854,7865,7875,7879,7887,7891,7903,7915,7920,7936,7951,7966],{"__ignoreMap":27},[49,7814,7815,7817,7819,7821,7823,7825,7828,7830,7832,7834,7836],{"class":51,"line":52},[49,7816,6061],{"class":77},[49,7818,6064],{"class":55},[49,7820,841],{"class":73},[49,7822,844],{"class":77},[49,7824,7215],{"class":77},[49,7826,7827],{"class":5913},"p1",[49,7829,1207],{"class":73},[49,7831,844],{"class":77},[49,7833,7215],{"class":77},[49,7835,7730],{"class":5913},[49,7837,847],{"class":73},[49,7839,7840],{"class":51,"line":63},[49,7841,2245],{"class":73},[49,7843,7844,7846,7848,7851],{"class":51,"line":70},[49,7845,2683],{"class":77},[49,7847,4952],{"class":73},[49,7849,7850],{"class":77},"=*",[49,7852,7853],{"class":73},"p1;\n",[49,7855,7856,7858,7860,7862],{"class":51,"line":219},[49,7857,7100],{"class":77},[49,7859,7827],{"class":73},[49,7861,7850],{"class":77},[49,7863,7864],{"class":73},"p2;\n",[49,7866,7867,7869,7871,7873],{"class":51,"line":233},[49,7868,7100],{"class":77},[49,7870,7730],{"class":73},[49,7872,78],{"class":77},[49,7874,4977],{"class":73},[49,7876,7877],{"class":51,"line":241},[49,7878,2264],{"class":73},[49,7880,7881,7883,7885],{"class":51,"line":1920},[49,7882,844],{"class":77},[49,7884,2671],{"class":55},[49,7886,2674],{"class":73},[49,7888,7889],{"class":51,"line":2011},[49,7890,2245],{"class":73},[49,7892,7893,7895,7897,7899,7901],{"class":51,"line":2017},[49,7894,2683],{"class":77},[49,7896,2098],{"class":73},[49,7898,78],{"class":77},[49,7900,1275],{"class":159},[49,7902,1990],{"class":73},[49,7904,7905,7907,7909,7911,7913],{"class":51,"line":2029},[49,7906,2683],{"class":77},[49,7908,3530],{"class":73},[49,7910,78],{"class":77},[49,7912,1529],{"class":159},[49,7914,1990],{"class":73},[49,7916,7917],{"class":51,"line":2311},[49,7918,7919],{"class":66},"    \u002F\u002F地址传递\n",[49,7921,7922,7924,7926,7928,7931,7933],{"class":51,"line":2316},[49,7923,6258],{"class":55},[49,7925,841],{"class":73},[49,7927,1182],{"class":77},[49,7929,7930],{"class":73},"a,",[49,7932,1182],{"class":77},[49,7934,7935],{"class":73},"b);\n",[49,7937,7938,7940,7942,7944,7946,7948],{"class":51,"line":2322},[49,7939,2250],{"class":73},[49,7941,1872],{"class":77},[49,7943,124],{"class":73},[49,7945,1872],{"class":77},[49,7947,1938],{"class":73},[49,7949,7950],{"class":66},"\u002F\u002F20\n",[49,7952,7953,7955,7957,7959,7961,7963],{"class":51,"line":2327},[49,7954,2250],{"class":73},[49,7956,1872],{"class":77},[49,7958,1092],{"class":73},[49,7960,1872],{"class":77},[49,7962,1938],{"class":73},[49,7964,7965],{"class":66},"\u002F\u002F10\n",[49,7967,7968],{"class":51,"line":2341},[49,7969,2264],{"class":73},[14,7971,7972],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[782,7974,7976],{"id":7975},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7978,7979],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7981,7982,7983,7985],{},"例如数组：int arr",[49,7984,1275],{},"={4,3,6,9,1,2,10,8,7,5}",[40,7987,7989],{"className":829,"code":7988,"language":831,"meta":27,"style":27},"#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",[46,7990,7991,7997,8007,8031,8035,8066,8070,8104,8108,8126,8130,8141,8156,8171,8175,8179,8183,8187,8191,8199,8203,8208,8262,8274,8286,8291,8299,8303,8308,8333,8337,8352,8361,8365],{"__ignoreMap":27},[49,7992,7993,7995],{"class":51,"line":52},[49,7994,2648],{"class":77},[49,7996,2651],{"class":59},[49,7998,7999,8001,8003,8005],{"class":51,"line":63},[49,8000,2656],{"class":77},[49,8002,2659],{"class":77},[49,8004,2662],{"class":55},[49,8006,1990],{"class":73},[49,8008,8009,8011,8014,8016,8018,8020,8022,8024,8026,8029],{"class":51,"line":70},[49,8010,6061],{"class":77},[49,8012,8013],{"class":55}," bubbleSort",[49,8015,841],{"class":73},[49,8017,844],{"class":77},[49,8019,7215],{"class":77},[49,8021,14],{"class":5913},[49,8023,1207],{"class":73},[49,8025,844],{"class":77},[49,8027,8028],{"class":5913}," len",[49,8030,847],{"class":73},[49,8032,8033],{"class":51,"line":219},[49,8034,2245],{"class":73},[49,8036,8037,8039,8041,8043,8045,8047,8049,8051,8053,8056,8058,8060,8062,8064],{"class":51,"line":233},[49,8038,3898],{"class":77},[49,8040,841],{"class":73},[49,8042,844],{"class":77},[49,8044,3729],{"class":73},[49,8046,78],{"class":77},[49,8048,1021],{"class":159},[49,8050,3736],{"class":73},[49,8052,1739],{"class":77},[49,8054,8055],{"class":73},"len",[49,8057,1361],{"class":77},[49,8059,1047],{"class":159},[49,8061,3736],{"class":73},[49,8063,2990],{"class":77},[49,8065,847],{"class":73},[49,8067,8068],{"class":51,"line":241},[49,8069,2728],{"class":73},[49,8071,8072,8074,8076,8078,8080,8082,8084,8086,8088,8090,8092,8094,8096,8098,8100,8102],{"class":51,"line":1920},[49,8073,4100],{"class":77},[49,8075,841],{"class":73},[49,8077,844],{"class":77},[49,8079,4107],{"class":73},[49,8081,78],{"class":77},[49,8083,1021],{"class":159},[49,8085,4114],{"class":73},[49,8087,1739],{"class":77},[49,8089,8055],{"class":73},[49,8091,1361],{"class":77},[49,8093,1270],{"class":73},[49,8095,1361],{"class":77},[49,8097,1047],{"class":159},[49,8099,4114],{"class":73},[49,8101,2990],{"class":77},[49,8103,847],{"class":73},[49,8105,8106],{"class":51,"line":2011},[49,8107,3207],{"class":73},[49,8109,8110,8112,8115,8117,8120,8122,8124],{"class":51,"line":2017},[49,8111,5339],{"class":77},[49,8113,8114],{"class":73},"(p[j]",[49,8116,1789],{"class":77},[49,8118,8119],{"class":73},"p[j",[49,8121,1310],{"class":77},[49,8123,1047],{"class":159},[49,8125,5354],{"class":73},[49,8127,8128],{"class":51,"line":2029},[49,8129,5359],{"class":73},[49,8131,8132,8134,8136,8138],{"class":51,"line":2311},[49,8133,5364],{"class":77},[49,8135,4952],{"class":73},[49,8137,78],{"class":77},[49,8139,8140],{"class":73},"p[j];\n",[49,8142,8143,8146,8148,8150,8152,8154],{"class":51,"line":2316},[49,8144,8145],{"class":73},"                p[j]",[49,8147,78],{"class":77},[49,8149,8119],{"class":73},[49,8151,1310],{"class":77},[49,8153,1047],{"class":159},[49,8155,5387],{"class":73},[49,8157,8158,8161,8163,8165,8167,8169],{"class":51,"line":2322},[49,8159,8160],{"class":73},"                p[j",[49,8162,1310],{"class":77},[49,8164,1047],{"class":159},[49,8166,1769],{"class":73},[49,8168,78],{"class":77},[49,8170,4977],{"class":73},[49,8172,8173],{"class":51,"line":2327},[49,8174,5407],{"class":73},[49,8176,8177],{"class":51,"line":2341},[49,8178,3226],{"class":73},[49,8180,8181],{"class":51,"line":2346},[49,8182,2885],{"class":73},[49,8184,8185],{"class":51,"line":2352},[49,8186,2264],{"class":73},[49,8188,8189],{"class":51,"line":2373},[49,8190,399],{"emptyLinePlaceholder":398},[49,8192,8193,8195,8197],{"class":51,"line":2378},[49,8194,844],{"class":77},[49,8196,2671],{"class":55},[49,8198,2674],{"class":73},[49,8200,8201],{"class":51,"line":2392},[49,8202,2245],{"class":73},[49,8204,8205],{"class":51,"line":2397},[49,8206,8207],{"class":66},"    \u002F\u002F 1.创建数组\n",[49,8209,8210,8212,8214,8216,8218,8220,8222,8224,8226,8228,8230,8232,8234,8236,8238,8240,8242,8244,8246,8248,8250,8252,8254,8256,8258,8260],{"class":51,"line":2426},[49,8211,2683],{"class":77},[49,8213,4659],{"class":73},[49,8215,1275],{"class":159},[49,8217,1769],{"class":73},[49,8219,78],{"class":77},[49,8221,1725],{"class":73},[49,8223,1122],{"class":159},[49,8225,1207],{"class":73},[49,8227,909],{"class":159},[49,8229,1207],{"class":73},[49,8231,1173],{"class":159},[49,8233,1207],{"class":73},[49,8235,1249],{"class":159},[49,8237,1207],{"class":73},[49,8239,1047],{"class":159},[49,8241,1207],{"class":73},[49,8243,915],{"class":159},[49,8245,1207],{"class":73},[49,8247,1275],{"class":159},[49,8249,1207],{"class":73},[49,8251,1224],{"class":159},[49,8253,1207],{"class":73},[49,8255,1198],{"class":159},[49,8257,1207],{"class":73},[49,8259,1148],{"class":159},[49,8261,4692],{"class":73},[49,8263,8264,8266,8268,8270,8272],{"class":51,"line":2431},[49,8265,2683],{"class":77},[49,8267,8028],{"class":73},[49,8269,78],{"class":77},[49,8271,1275],{"class":159},[49,8273,1990],{"class":73},[49,8275,8276,8278,8280,8282,8284],{"class":51,"line":2448},[49,8277,2683],{"class":77},[49,8279,7215],{"class":77},[49,8281,14],{"class":73},[49,8283,78],{"class":77},[49,8285,7735],{"class":73},[49,8287,8288],{"class":51,"line":2453},[49,8289,8290],{"class":66},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[49,8292,8293,8296],{"class":51,"line":2458},[49,8294,8295],{"class":55},"    bubbleSort",[49,8297,8298],{"class":73},"(p,len);\n",[49,8300,8301],{"class":51,"line":2463},[49,8302,399],{"emptyLinePlaceholder":398},[49,8304,8305],{"class":51,"line":2477},[49,8306,8307],{"class":66},"    \u002F\u002F 3.打印排序后的数组\n",[49,8309,8310,8312,8314,8316,8318,8320,8322,8324,8326,8329,8331],{"class":51,"line":2482},[49,8311,3898],{"class":77},[49,8313,2357],{"class":73},[49,8315,844],{"class":77},[49,8317,3729],{"class":73},[49,8319,78],{"class":77},[49,8321,1021],{"class":159},[49,8323,3911],{"class":73},[49,8325,1739],{"class":77},[49,8327,8328],{"class":73},"len; i",[49,8330,2990],{"class":77},[49,8332,847],{"class":73},[49,8334,8335],{"class":51,"line":3274},[49,8336,2728],{"class":73},[49,8338,8339,8341,8343,8345,8347,8350],{"class":51,"line":3288},[49,8340,4148],{"class":73},[49,8342,7116],{"class":77},[49,8344,14],{"class":73},[49,8346,1872],{"class":77},[49,8348,8349],{"class":59},"\"\"",[49,8351,1990],{"class":73},[49,8353,8354,8357,8359],{"class":51,"line":3296},[49,8355,8356],{"class":73},"        p",[49,8358,2990],{"class":77},[49,8360,1990],{"class":73},[49,8362,8363],{"class":51,"line":3301},[49,8364,2885],{"class":73},[49,8366,8367],{"class":51,"line":3307},[49,8368,2264],{"class":73},[757,8370,8371],{},"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":27,"searchDepth":63,"depth":63,"links":8373},[8374,8375,8376,8377,8378,8379,8380,8381],{"id":6980,"depth":63,"text":6981},{"id":7146,"depth":63,"text":7147},{"id":7302,"depth":63,"text":7303},{"id":7380,"depth":63,"text":7381},{"id":7459,"depth":63,"text":7460},{"id":7558,"depth":63,"text":7559},{"id":7797,"depth":63,"text":7798},{"id":7975,"depth":63,"text":7976},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6969,"description":6977},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8388,"title":8389,"body":8390,"description":8397,"extension":766,"meta":11371,"navigation":398,"path":11372,"seo":11373,"stem":11374,"__hash__":11375},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8391,"toc":11362},[8392,8395,8398,8402,8405,8408,8419,8757,8760,8764,8767,8774,9029,9033,9036,9039,9194,9198,9201,9204,9410,9414,9417,9720,9723,9731,9735,9738,9889,9891,9902,9959,9963,9968,10625,10633,10636,10730,10733,11353,11359],[10,8393,8389],{"id":8394},"_4结构体",[14,8396,8397],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[782,8399,8401],{"id":8400},"_41结构体定义与使用","4.1结构体定义与使用",[14,8403,8404],{},"语法：struct 结构体名 {结构体成员列表}；",[14,8406,8407],{},"通过结构体创建变量的方式：",[742,8409,8410,8413,8416],{},[33,8411,8412],{},"struct 结构体名 变量名",[33,8414,8415],{},"struct 结构体名 变量名={成员1值，成员2值...}",[33,8417,8418],{},"定义结构体时顺便创建变量",[40,8420,8422],{"className":829,"code":8421,"language":831,"meta":27,"style":27},"#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",[46,8423,8424,8430,8440,8447,8452,8460,8464,8469,8473,8478,8483,8488,8495,8500,8507,8511,8518,8522,8526,8530,8534,8538,8542,8548,8552,8558,8566,8574,8578,8583,8588,8599,8604,8616,8627,8638,8643,8667,8672,8678,8705,8710,8716,8728,8740,8752],{"__ignoreMap":27},[49,8425,8426,8428],{"class":51,"line":52},[49,8427,2648],{"class":77},[49,8429,2651],{"class":59},[49,8431,8432,8434,8436,8438],{"class":51,"line":63},[49,8433,2656],{"class":77},[49,8435,2659],{"class":77},[49,8437,2662],{"class":55},[49,8439,1990],{"class":73},[49,8441,8442,8444],{"class":51,"line":70},[49,8443,2648],{"class":77},[49,8445,8446],{"class":59},"\u003Cstring>\n",[49,8448,8449],{"class":51,"line":219},[49,8450,8451],{"class":66},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[49,8453,8454,8457],{"class":51,"line":233},[49,8455,8456],{"class":77},"struct",[49,8458,8459],{"class":55}," Student\n",[49,8461,8462],{"class":51,"line":241},[49,8463,2245],{"class":73},[49,8465,8466],{"class":51,"line":1920},[49,8467,8468],{"class":66},"    \u002F\u002F成员列表\n",[49,8470,8471],{"class":51,"line":2011},[49,8472,399],{"emptyLinePlaceholder":398},[49,8474,8475],{"class":51,"line":2017},[49,8476,8477],{"class":66},"    \u002F\u002F姓名\n",[49,8479,8480],{"class":51,"line":2029},[49,8481,8482],{"class":73},"    string name;\n",[49,8484,8485],{"class":51,"line":2311},[49,8486,8487],{"class":66},"    \u002F\u002F年龄\n",[49,8489,8490,8492],{"class":51,"line":2316},[49,8491,2683],{"class":77},[49,8493,8494],{"class":73}," age;\n",[49,8496,8497],{"class":51,"line":2322},[49,8498,8499],{"class":66},"    \u002F\u002F分数\n",[49,8501,8502,8504],{"class":51,"line":2327},[49,8503,2683],{"class":77},[49,8505,8506],{"class":73}," score;\n",[49,8508,8509],{"class":51,"line":2341},[49,8510,4692],{"class":73},[49,8512,8513,8515],{"class":51,"line":2346},[49,8514,8456],{"class":77},[49,8516,8517],{"class":55}," School\n",[49,8519,8520],{"class":51,"line":2352},[49,8521,2245],{"class":73},[49,8523,8524],{"class":51,"line":2373},[49,8525,8468],{"class":66},[49,8527,8528],{"class":51,"line":2378},[49,8529,399],{"emptyLinePlaceholder":398},[49,8531,8532],{"class":51,"line":2392},[49,8533,8477],{"class":66},[49,8535,8536],{"class":51,"line":2397},[49,8537,8482],{"class":73},[49,8539,8540],{"class":51,"line":2426},[49,8541,8487],{"class":66},[49,8543,8544,8546],{"class":51,"line":2431},[49,8545,2683],{"class":77},[49,8547,8494],{"class":73},[49,8549,8550],{"class":51,"line":2448},[49,8551,8499],{"class":66},[49,8553,8554,8556],{"class":51,"line":2453},[49,8555,2683],{"class":77},[49,8557,8506],{"class":73},[49,8559,8560,8563],{"class":51,"line":2458},[49,8561,8562],{"class":73},"} s3;",[49,8564,8565],{"class":66}," \u002F\u002F创建结构体时就创建了变量\n",[49,8567,8568,8570,8572],{"class":51,"line":2463},[49,8569,844],{"class":77},[49,8571,2671],{"class":55},[49,8573,2674],{"class":73},[49,8575,8576],{"class":51,"line":2477},[49,8577,2245],{"class":73},[49,8579,8580],{"class":51,"line":2482},[49,8581,8582],{"class":66},"    \u002F\u002F2.通过学生类型创建具体学生\n",[49,8584,8585],{"class":51,"line":3274},[49,8586,8587],{"class":66},"    \u002F\u002F2.1 struct Student s1;\n",[49,8589,8590,8593,8596],{"class":51,"line":3288},[49,8591,8592],{"class":77},"    struct",[49,8594,8595],{"class":55}," Student",[49,8597,8598],{"class":73}," s1;\n",[49,8600,8601],{"class":51,"line":3296},[49,8602,8603],{"class":66},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[49,8605,8606,8609,8611,8614],{"class":51,"line":3301},[49,8607,8608],{"class":73},"    s1.name",[49,8610,78],{"class":77},[49,8612,8613],{"class":59},"\"张三\"",[49,8615,1990],{"class":73},[49,8617,8618,8621,8623,8625],{"class":51,"line":3307},[49,8619,8620],{"class":73},"    s1.age",[49,8622,78],{"class":77},[49,8624,1479],{"class":159},[49,8626,1990],{"class":73},[49,8628,8629,8632,8634,8636],{"class":51,"line":3313},[49,8630,8631],{"class":73},"    s1.score",[49,8633,78],{"class":77},[49,8635,1083],{"class":159},[49,8637,1990],{"class":73},[49,8639,8640],{"class":51,"line":3318},[49,8641,8642],{"class":66},"    \u002F\u002F输出结果\n",[49,8644,8646,8648,8650,8653,8655,8658,8660,8663,8665],{"class":51,"line":8645},37,[49,8647,2250],{"class":73},[49,8649,1872],{"class":77},[49,8651,8652],{"class":73},"s1.name",[49,8654,1872],{"class":77},[49,8656,8657],{"class":73},"s1.age",[49,8659,1872],{"class":77},[49,8661,8662],{"class":73},"s1.score",[49,8664,1872],{"class":77},[49,8666,1894],{"class":73},[49,8668,8670],{"class":51,"line":8669},38,[49,8671,399],{"emptyLinePlaceholder":398},[49,8673,8675],{"class":51,"line":8674},39,[49,8676,8677],{"class":66},"    \u002F\u002F2.2 struct Student s2={...}\n",[49,8679,8681,8683,8685,8688,8690,8692,8695,8697,8699,8701,8703],{"class":51,"line":8680},40,[49,8682,8592],{"class":77},[49,8684,8595],{"class":55},[49,8686,8687],{"class":73}," s2",[49,8689,78],{"class":77},[49,8691,1725],{"class":73},[49,8693,8694],{"class":59},"\"王五\"",[49,8696,1207],{"class":73},[49,8698,1479],{"class":159},[49,8700,1207],{"class":73},[49,8702,1083],{"class":159},[49,8704,4692],{"class":73},[49,8706,8708],{"class":51,"line":8707},41,[49,8709,399],{"emptyLinePlaceholder":398},[49,8711,8713],{"class":51,"line":8712},42,[49,8714,8715],{"class":66},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[49,8717,8719,8722,8724,8726],{"class":51,"line":8718},43,[49,8720,8721],{"class":73},"    s3.name",[49,8723,78],{"class":77},[49,8725,4375],{"class":59},[49,8727,1990],{"class":73},[49,8729,8731,8734,8736,8738],{"class":51,"line":8730},44,[49,8732,8733],{"class":73},"    s3.age",[49,8735,78],{"class":77},[49,8737,1479],{"class":159},[49,8739,1990],{"class":73},[49,8741,8743,8746,8748,8750],{"class":51,"line":8742},45,[49,8744,8745],{"class":73},"    s3.score",[49,8747,78],{"class":77},[49,8749,1529],{"class":159},[49,8751,1990],{"class":73},[49,8753,8755],{"class":51,"line":8754},46,[49,8756,2264],{"class":73},[14,8758,8759],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[782,8761,8763],{"id":8762},"_42结构体数组","4.2结构体数组",[14,8765,8766],{},"将自定义的结构体放入到数组中方便维护",[14,8768,8769,8770,8773],{},"语法：struct 结构体名 数组名",[49,8771,8772],{},"元素个数","={ {}，{},...{} };",[40,8775,8777],{"className":829,"code":8776,"language":831,"meta":27,"style":27},"#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",[46,8778,8779,8785,8795,8801,8806,8812,8816,8820,8826,8832,8836,8840,8848,8852,8857,8872,8876,8892,8908,8912,8917,8933,8948,8963,8968,8994,8998,9021,9025],{"__ignoreMap":27},[49,8780,8781,8783],{"class":51,"line":52},[49,8782,2648],{"class":77},[49,8784,2651],{"class":59},[49,8786,8787,8789,8791,8793],{"class":51,"line":63},[49,8788,2656],{"class":77},[49,8790,2659],{"class":77},[49,8792,2662],{"class":55},[49,8794,1990],{"class":73},[49,8796,8797,8799],{"class":51,"line":70},[49,8798,2648],{"class":77},[49,8800,8446],{"class":59},[49,8802,8803],{"class":51,"line":219},[49,8804,8805],{"class":66},"\u002F\u002F1.定义结构体\n",[49,8807,8808,8810],{"class":51,"line":233},[49,8809,8456],{"class":77},[49,8811,8459],{"class":55},[49,8813,8814],{"class":51,"line":241},[49,8815,2245],{"class":73},[49,8817,8818],{"class":51,"line":1920},[49,8819,8482],{"class":73},[49,8821,8822,8824],{"class":51,"line":2011},[49,8823,2683],{"class":77},[49,8825,8494],{"class":73},[49,8827,8828,8830],{"class":51,"line":2017},[49,8829,2683],{"class":77},[49,8831,8506],{"class":73},[49,8833,8834],{"class":51,"line":2029},[49,8835,399],{"emptyLinePlaceholder":398},[49,8837,8838],{"class":51,"line":2311},[49,8839,4692],{"class":73},[49,8841,8842,8844,8846],{"class":51,"line":2316},[49,8843,844],{"class":77},[49,8845,2671],{"class":55},[49,8847,2674],{"class":73},[49,8849,8850],{"class":51,"line":2322},[49,8851,2245],{"class":73},[49,8853,8854],{"class":51,"line":2327},[49,8855,8856],{"class":66},"    \u002F\u002F2.创建结构体数组\n",[49,8858,8859,8861,8863,8866,8868,8870],{"class":51,"line":2341},[49,8860,8592],{"class":77},[49,8862,8595],{"class":55},[49,8864,8865],{"class":73}," stuArray[",[49,8867,915],{"class":159},[49,8869,1769],{"class":73},[49,8871,5605],{"class":77},[49,8873,8874],{"class":51,"line":2346},[49,8875,2728],{"class":73},[49,8877,8878,8880,8882,8884,8886,8888,8890],{"class":51,"line":2352},[49,8879,5614],{"class":73},[49,8881,8613],{"class":59},[49,8883,1207],{"class":73},[49,8885,1479],{"class":159},[49,8887,1207],{"class":73},[49,8889,1140],{"class":159},[49,8891,5627],{"class":73},[49,8893,8894,8896,8898,8900,8902,8904,8906],{"class":51,"line":2373},[49,8895,5614],{"class":73},[49,8897,4375],{"class":59},[49,8899,1207],{"class":73},[49,8901,1404],{"class":159},[49,8903,1207],{"class":73},[49,8905,1404],{"class":159},[49,8907,2264],{"class":73},[49,8909,8910],{"class":51,"line":2378},[49,8911,2885],{"class":73},[49,8913,8914],{"class":51,"line":2392},[49,8915,8916],{"class":66},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[49,8918,8919,8922,8924,8927,8929,8931],{"class":51,"line":2397},[49,8920,8921],{"class":73},"    stuArray[",[49,8923,1047],{"class":159},[49,8925,8926],{"class":73},"].name",[49,8928,78],{"class":77},[49,8930,4398],{"class":59},[49,8932,1990],{"class":73},[49,8934,8935,8937,8939,8942,8944,8946],{"class":51,"line":2426},[49,8936,8921],{"class":73},[49,8938,1047],{"class":159},[49,8940,8941],{"class":73},"].age",[49,8943,78],{"class":77},[49,8945,915],{"class":159},[49,8947,1990],{"class":73},[49,8949,8950,8952,8954,8957,8959,8961],{"class":51,"line":2431},[49,8951,8921],{"class":73},[49,8953,1047],{"class":159},[49,8955,8956],{"class":73},"].score",[49,8958,78],{"class":77},[49,8960,915],{"class":159},[49,8962,1990],{"class":73},[49,8964,8965],{"class":51,"line":2448},[49,8966,8967],{"class":66},"    \u002F\u002F4.遍历结构体数组\n",[49,8969,8970,8972,8974,8976,8978,8980,8982,8984,8986,8988,8990,8992],{"class":51,"line":2453},[49,8971,3898],{"class":77},[49,8973,2357],{"class":73},[49,8975,844],{"class":77},[49,8977,3729],{"class":73},[49,8979,78],{"class":77},[49,8981,1021],{"class":159},[49,8983,3736],{"class":73},[49,8985,1739],{"class":77},[49,8987,915],{"class":159},[49,8989,3736],{"class":73},[49,8991,2990],{"class":77},[49,8993,847],{"class":73},[49,8995,8996],{"class":51,"line":2458},[49,8997,2728],{"class":73},[49,8999,9000,9002,9004,9007,9009,9012,9014,9017,9019],{"class":51,"line":2463},[49,9001,4148],{"class":73},[49,9003,1872],{"class":77},[49,9005,9006],{"class":73},"stuArray[i].name",[49,9008,1872],{"class":77},[49,9010,9011],{"class":73},"stuArray[i].age",[49,9013,1872],{"class":77},[49,9015,9016],{"class":73},"stuArray[i].score",[49,9018,1872],{"class":77},[49,9020,1894],{"class":73},[49,9022,9023],{"class":51,"line":2477},[49,9024,2885],{"class":73},[49,9026,9027],{"class":51,"line":2482},[49,9028,2264],{"class":73},[782,9030,9032],{"id":9031},"_43结构体指针","4.3结构体指针",[14,9034,9035],{},"作用：通过指针访问结构体中的成员",[14,9037,9038],{},"利用操作符->可以通过结构体指针访问结构体属性",[40,9040,9042],{"className":829,"code":9041,"language":831,"meta":27,"style":27},"#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",[46,9043,9044,9050,9060,9066,9070,9076,9080,9084,9090,9096,9100,9108,9112,9117,9142,9147,9162,9167,9190],{"__ignoreMap":27},[49,9045,9046,9048],{"class":51,"line":52},[49,9047,2648],{"class":77},[49,9049,2651],{"class":59},[49,9051,9052,9054,9056,9058],{"class":51,"line":63},[49,9053,2656],{"class":77},[49,9055,2659],{"class":77},[49,9057,2662],{"class":55},[49,9059,1990],{"class":73},[49,9061,9062,9064],{"class":51,"line":70},[49,9063,2648],{"class":77},[49,9065,8446],{"class":59},[49,9067,9068],{"class":51,"line":219},[49,9069,8805],{"class":66},[49,9071,9072,9074],{"class":51,"line":233},[49,9073,8456],{"class":77},[49,9075,8459],{"class":55},[49,9077,9078],{"class":51,"line":241},[49,9079,2245],{"class":73},[49,9081,9082],{"class":51,"line":1920},[49,9083,8482],{"class":73},[49,9085,9086,9088],{"class":51,"line":2011},[49,9087,2683],{"class":77},[49,9089,8494],{"class":73},[49,9091,9092,9094],{"class":51,"line":2017},[49,9093,2683],{"class":77},[49,9095,8506],{"class":73},[49,9097,9098],{"class":51,"line":2029},[49,9099,4692],{"class":73},[49,9101,9102,9104,9106],{"class":51,"line":2311},[49,9103,844],{"class":77},[49,9105,2671],{"class":55},[49,9107,2674],{"class":73},[49,9109,9110],{"class":51,"line":2316},[49,9111,2245],{"class":73},[49,9113,9114],{"class":51,"line":2322},[49,9115,9116],{"class":66},"    \u002F\u002F创建学生结构体变量\n",[49,9118,9119,9121,9123,9126,9128,9130,9132,9134,9136,9138,9140],{"class":51,"line":2327},[49,9120,8592],{"class":77},[49,9122,8595],{"class":55},[49,9124,9125],{"class":73}," s",[49,9127,78],{"class":77},[49,9129,1725],{"class":73},[49,9131,8613],{"class":59},[49,9133,1207],{"class":73},[49,9135,1479],{"class":159},[49,9137,1207],{"class":73},[49,9139,2421],{"class":159},[49,9141,4692],{"class":73},[49,9143,9144],{"class":51,"line":2341},[49,9145,9146],{"class":66},"    \u002F\u002F通过指针指向结构体变量\n",[49,9148,9149,9151,9153,9155,9157,9159],{"class":51,"line":2346},[49,9150,8592],{"class":77},[49,9152,8595],{"class":55},[49,9154,7215],{"class":77},[49,9156,14],{"class":73},[49,9158,7036],{"class":77},[49,9160,9161],{"class":73},"s\n",[49,9163,9164],{"class":51,"line":2352},[49,9165,9166],{"class":66},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[49,9168,9169,9171,9173,9176,9178,9181,9183,9186,9188],{"class":51,"line":2373},[49,9170,2250],{"class":73},[49,9172,1872],{"class":77},[49,9174,9175],{"class":73},"p->name",[49,9177,1872],{"class":77},[49,9179,9180],{"class":73},"p->age",[49,9182,1872],{"class":77},[49,9184,9185],{"class":73},"p->score",[49,9187,1872],{"class":77},[49,9189,1894],{"class":73},[49,9191,9192],{"class":51,"line":2378},[49,9193,2264],{"class":73},[782,9195,9197],{"id":9196},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,9199,9200],{},"作用：结构体中的成员可以是另一个结构体",[14,9202,9203],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[40,9205,9207],{"className":829,"code":9206,"language":831,"meta":27,"style":27},"#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",[46,9208,9209,9215,9225,9231,9236,9244,9248,9252,9258,9264,9268,9273,9280,9284,9291,9295,9301,9306,9310,9318,9322,9327,9332,9337,9348,9360,9371,9384,9395,9406],{"__ignoreMap":27},[49,9210,9211,9213],{"class":51,"line":52},[49,9212,2648],{"class":77},[49,9214,2651],{"class":59},[49,9216,9217,9219,9221,9223],{"class":51,"line":63},[49,9218,2656],{"class":77},[49,9220,2659],{"class":77},[49,9222,2662],{"class":55},[49,9224,1990],{"class":73},[49,9226,9227,9229],{"class":51,"line":70},[49,9228,2648],{"class":77},[49,9230,8446],{"class":59},[49,9232,9233],{"class":51,"line":219},[49,9234,9235],{"class":66},"\u002F\u002F定义学生结构体\n",[49,9237,9238,9240,9242],{"class":51,"line":233},[49,9239,8456],{"class":77},[49,9241,8595],{"class":55},[49,9243,3371],{"class":73},[49,9245,9246],{"class":51,"line":241},[49,9247,2245],{"class":73},[49,9249,9250],{"class":51,"line":1920},[49,9251,8482],{"class":73},[49,9253,9254,9256],{"class":51,"line":2011},[49,9255,2683],{"class":77},[49,9257,8494],{"class":73},[49,9259,9260,9262],{"class":51,"line":2017},[49,9261,2683],{"class":77},[49,9263,8506],{"class":73},[49,9265,9266],{"class":51,"line":2029},[49,9267,2264],{"class":73},[49,9269,9270],{"class":51,"line":2311},[49,9271,9272],{"class":66},"\u002F\u002F定义老师结构体\n",[49,9274,9275,9277],{"class":51,"line":2316},[49,9276,8456],{"class":77},[49,9278,9279],{"class":55}," Teacher\n",[49,9281,9282],{"class":51,"line":2322},[49,9283,2245],{"class":73},[49,9285,9286,9288],{"class":51,"line":2327},[49,9287,2683],{"class":77},[49,9289,9290],{"class":73}," id;\n",[49,9292,9293],{"class":51,"line":2341},[49,9294,8482],{"class":73},[49,9296,9297,9299],{"class":51,"line":2346},[49,9298,2683],{"class":77},[49,9300,8494],{"class":73},[49,9302,9303],{"class":51,"line":2352},[49,9304,9305],{"class":73},"    Student stu;\n",[49,9307,9308],{"class":51,"line":2373},[49,9309,2264],{"class":73},[49,9311,9312,9314,9316],{"class":51,"line":2378},[49,9313,844],{"class":77},[49,9315,2671],{"class":55},[49,9317,6675],{"class":73},[49,9319,9320],{"class":51,"line":2392},[49,9321,2245],{"class":73},[49,9323,9324],{"class":51,"line":2397},[49,9325,9326],{"class":66},"    \u002F\u002F结构体嵌套结构体\n",[49,9328,9329],{"class":51,"line":2426},[49,9330,9331],{"class":66},"    \u002F\u002F创建老师\n",[49,9333,9334],{"class":51,"line":2431},[49,9335,9336],{"class":73},"    Teacher t;\n",[49,9338,9339,9342,9344,9346],{"class":51,"line":2448},[49,9340,9341],{"class":73},"    t.id",[49,9343,78],{"class":77},[49,9345,1140],{"class":159},[49,9347,1990],{"class":73},[49,9349,9350,9353,9355,9358],{"class":51,"line":2453},[49,9351,9352],{"class":73},"    t.name",[49,9354,78],{"class":77},[49,9356,9357],{"class":59},"\"老王\"",[49,9359,1990],{"class":73},[49,9361,9362,9365,9367,9369],{"class":51,"line":2458},[49,9363,9364],{"class":73},"    t.age",[49,9366,78],{"class":77},[49,9368,1479],{"class":159},[49,9370,1990],{"class":73},[49,9372,9373,9376,9378,9381],{"class":51,"line":2463},[49,9374,9375],{"class":73},"    t.stu.name",[49,9377,78],{"class":77},[49,9379,9380],{"class":59},"\"小王\"",[49,9382,9383],{"class":73},"；\n",[49,9385,9386,9389,9391,9393],{"class":51,"line":2477},[49,9387,9388],{"class":73},"    t.stu.age",[49,9390,78],{"class":77},[49,9392,1529],{"class":159},[49,9394,1990],{"class":73},[49,9396,9397,9400,9402,9404],{"class":51,"line":2482},[49,9398,9399],{"class":73},"    t.stu.score",[49,9401,78],{"class":77},[49,9403,1173],{"class":159},[49,9405,1990],{"class":73},[49,9407,9408],{"class":51,"line":3274},[49,9409,2264],{"class":73},[782,9411,9413],{"id":9412},"_45结构体做函数参数","4.5结构体做函数参数",[14,9415,9416],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[40,9418,9420],{"className":829,"code":9419,"language":831,"meta":27,"style":27},"#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",[46,9421,9422,9428,9438,9444,9450,9454,9458,9464,9470,9474,9479,9484,9501,9505,9538,9542,9547,9566,9570,9601,9605,9613,9617,9626,9638,9650,9662,9675,9683,9696,9708,9716],{"__ignoreMap":27},[49,9423,9424,9426],{"class":51,"line":52},[49,9425,2648],{"class":77},[49,9427,2651],{"class":59},[49,9429,9430,9432,9434,9436],{"class":51,"line":63},[49,9431,2656],{"class":77},[49,9433,2659],{"class":77},[49,9435,2662],{"class":55},[49,9437,1990],{"class":73},[49,9439,9440,9442],{"class":51,"line":70},[49,9441,2648],{"class":77},[49,9443,8446],{"class":59},[49,9445,9446,9448],{"class":51,"line":219},[49,9447,8456],{"class":77},[49,9449,8459],{"class":55},[49,9451,9452],{"class":51,"line":233},[49,9453,2245],{"class":73},[49,9455,9456],{"class":51,"line":241},[49,9457,8482],{"class":73},[49,9459,9460,9462],{"class":51,"line":1920},[49,9461,2683],{"class":77},[49,9463,8494],{"class":73},[49,9465,9466,9468],{"class":51,"line":2011},[49,9467,2683],{"class":77},[49,9469,8506],{"class":73},[49,9471,9472],{"class":51,"line":2017},[49,9473,4692],{"class":73},[49,9475,9476],{"class":51,"line":2029},[49,9477,9478],{"class":66},"\u002F\u002F打印学生信息的函数\n",[49,9480,9481],{"class":51,"line":2311},[49,9482,9483],{"class":66},"\u002F\u002F值传递\n",[49,9485,9486,9488,9491,9493,9495,9497,9499],{"class":51,"line":2316},[49,9487,6061],{"class":77},[49,9489,9490],{"class":55}," printStudent1",[49,9492,841],{"class":73},[49,9494,8456],{"class":77},[49,9496,8595],{"class":55},[49,9498,9125],{"class":5913},[49,9500,847],{"class":73},[49,9502,9503],{"class":51,"line":2322},[49,9504,2245],{"class":73},[49,9506,9507,9509,9511,9514,9516,9519,9521,9524,9526,9528,9530,9533,9535],{"class":51,"line":2327},[49,9508,7226],{"class":73},[49,9510,1872],{"class":77},[49,9512,9513],{"class":73}," s.name ",[49,9515,1872],{"class":77},[49,9517,9518],{"class":59}," \" \"",[49,9520,2144],{"class":77},[49,9522,9523],{"class":73}," s.age ",[49,9525,1872],{"class":77},[49,9527,9518],{"class":59},[49,9529,2144],{"class":77},[49,9531,9532],{"class":73}," s.score ",[49,9534,1872],{"class":77},[49,9536,9537],{"class":73}," endl;\n",[49,9539,9540],{"class":51,"line":2341},[49,9541,2264],{"class":73},[49,9543,9544],{"class":51,"line":2346},[49,9545,9546],{"class":66},"\u002F\u002F地址传递\n",[49,9548,9549,9551,9554,9556,9558,9560,9562,9564],{"class":51,"line":2352},[49,9550,6061],{"class":77},[49,9552,9553],{"class":55}," printStudent2",[49,9555,841],{"class":73},[49,9557,8456],{"class":77},[49,9559,8595],{"class":55},[49,9561,7215],{"class":77},[49,9563,1524],{"class":5913},[49,9565,847],{"class":73},[49,9567,9568],{"class":51,"line":2373},[49,9569,2245],{"class":73},[49,9571,9572,9574,9576,9579,9581,9583,9585,9588,9590,9592,9594,9597,9599],{"class":51,"line":2378},[49,9573,7226],{"class":73},[49,9575,1872],{"class":77},[49,9577,9578],{"class":73}," s->name ",[49,9580,1872],{"class":77},[49,9582,9518],{"class":59},[49,9584,2144],{"class":77},[49,9586,9587],{"class":73}," s->age ",[49,9589,1872],{"class":77},[49,9591,9518],{"class":59},[49,9593,2144],{"class":77},[49,9595,9596],{"class":73}," s->score ",[49,9598,1872],{"class":77},[49,9600,9537],{"class":73},[49,9602,9603],{"class":51,"line":2392},[49,9604,2264],{"class":73},[49,9606,9607,9609,9611],{"class":51,"line":2397},[49,9608,844],{"class":77},[49,9610,2671],{"class":55},[49,9612,2674],{"class":73},[49,9614,9615],{"class":51,"line":2426},[49,9616,2245],{"class":73},[49,9618,9619,9621,9623],{"class":51,"line":2431},[49,9620,8592],{"class":77},[49,9622,8595],{"class":55},[49,9624,9625],{"class":73}," s;\n",[49,9627,9628,9631,9633,9636],{"class":51,"line":2448},[49,9629,9630],{"class":73},"    s.name ",[49,9632,78],{"class":77},[49,9634,9635],{"class":59}," \"张三\"",[49,9637,1990],{"class":73},[49,9639,9640,9643,9645,9648],{"class":51,"line":2453},[49,9641,9642],{"class":73},"    s.age ",[49,9644,78],{"class":77},[49,9646,9647],{"class":159}," 20",[49,9649,1990],{"class":73},[49,9651,9652,9655,9657,9660],{"class":51,"line":2458},[49,9653,9654],{"class":73},"    s.score ",[49,9656,78],{"class":77},[49,9658,9659],{"class":159}," 85",[49,9661,1990],{"class":73},[49,9663,9664,9666,9668,9671,9673],{"class":51,"line":2463},[49,9665,2250],{"class":73},[49,9667,1872],{"class":77},[49,9669,9670],{"class":59},"\"值传递:\"",[49,9672,1872],{"class":77},[49,9674,1894],{"class":73},[49,9676,9677,9680],{"class":51,"line":2477},[49,9678,9679],{"class":55},"    printStudent1",[49,9681,9682],{"class":73},"(s);\n",[49,9684,9685,9687,9689,9692,9694],{"class":51,"line":2482},[49,9686,2250],{"class":73},[49,9688,1872],{"class":77},[49,9690,9691],{"class":59},"\"地址传递:\"",[49,9693,1872],{"class":77},[49,9695,1894],{"class":73},[49,9697,9698,9701,9703,9705],{"class":51,"line":3274},[49,9699,9700],{"class":55},"    printStudent2",[49,9702,841],{"class":73},[49,9704,1182],{"class":77},[49,9706,9707],{"class":73},"s); \n",[49,9709,9710,9712,9714],{"class":51,"line":3288},[49,9711,4787],{"class":77},[49,9713,4790],{"class":159},[49,9715,1990],{"class":73},[49,9717,9718],{"class":51,"line":3296},[49,9719,2264],{"class":73},[14,9721,9722],{},"注意：",[742,9724,9725,9728],{},[33,9726,9727],{},"1.先定义结构体，不要在函数中写结构体的定义",[33,9729,9730],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[782,9732,9734],{"id":9733},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9736,9737],{},"用const防止误操作",[40,9739,9741],{"className":829,"code":9740,"language":831,"meta":27,"style":27},"#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",[46,9742,9743,9749,9759,9765,9770,9774,9778,9784,9790,9794,9810,9814,9837,9841,9849,9853,9874,9881,9885],{"__ignoreMap":27},[49,9744,9745,9747],{"class":51,"line":52},[49,9746,2648],{"class":77},[49,9748,2651],{"class":59},[49,9750,9751,9753,9755,9757],{"class":51,"line":63},[49,9752,2656],{"class":77},[49,9754,2659],{"class":77},[49,9756,2662],{"class":55},[49,9758,1990],{"class":73},[49,9760,9761,9763],{"class":51,"line":70},[49,9762,2648],{"class":77},[49,9764,8446],{"class":59},[49,9766,9767],{"class":51,"line":219},[49,9768,9769],{"class":73},"sctuct Student\n",[49,9771,9772],{"class":51,"line":233},[49,9773,2245],{"class":73},[49,9775,9776],{"class":51,"line":241},[49,9777,8482],{"class":73},[49,9779,9780,9782],{"class":51,"line":1920},[49,9781,2683],{"class":77},[49,9783,8494],{"class":73},[49,9785,9786,9788],{"class":51,"line":2011},[49,9787,2683],{"class":77},[49,9789,8506],{"class":73},[49,9791,9792],{"class":51,"line":2017},[49,9793,4692],{"class":73},[49,9795,9796,9798,9801,9803,9806,9808],{"class":51,"line":2029},[49,9797,6061],{"class":77},[49,9799,9800],{"class":55}," printStudents",[49,9802,841],{"class":73},[49,9804,9805],{"class":55},"student",[49,9807,9125],{"class":5913},[49,9809,847],{"class":73},[49,9811,9812],{"class":51,"line":2311},[49,9813,2245],{"class":73},[49,9815,9816,9818,9820,9823,9825,9828,9830,9833,9835],{"class":51,"line":2316},[49,9817,2250],{"class":73},[49,9819,1872],{"class":77},[49,9821,9822],{"class":73},"s.name",[49,9824,1872],{"class":77},[49,9826,9827],{"class":73},"s.age",[49,9829,1872],{"class":77},[49,9831,9832],{"class":73},"s.score",[49,9834,1872],{"class":77},[49,9836,1894],{"class":73},[49,9838,9839],{"class":51,"line":2322},[49,9840,2264],{"class":73},[49,9842,9843,9845,9847],{"class":51,"line":2327},[49,9844,844],{"class":77},[49,9846,2671],{"class":55},[49,9848,6675],{"class":73},[49,9850,9851],{"class":51,"line":2341},[49,9852,2245],{"class":73},[49,9854,9855,9858,9860,9862,9864,9866,9868,9870,9872],{"class":51,"line":2346},[49,9856,9857],{"class":73},"    Student s",[49,9859,78],{"class":77},[49,9861,1725],{"class":73},[49,9863,8613],{"class":59},[49,9865,1207],{"class":73},[49,9867,1479],{"class":159},[49,9869,1207],{"class":73},[49,9871,1479],{"class":159},[49,9873,4692],{"class":73},[49,9875,9876,9879],{"class":51,"line":2352},[49,9877,9878],{"class":55},"    printStudent",[49,9880,9682],{"class":73},[49,9882,9883],{"class":51,"line":2373},[49,9884,399],{"emptyLinePlaceholder":398},[49,9886,9887],{"class":51,"line":2378},[49,9888,2264],{"class":73},[14,9890,9722],{},[742,9892,9893,9896,9899],{},[33,9894,9895],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[33,9897,9898],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[33,9900,9901],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[40,9903,9905],{"className":829,"code":9904,"language":831,"meta":27,"style":27},"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",[46,9906,9907,9926,9930,9935,9955],{"__ignoreMap":27},[49,9908,9909,9911,9913,9915,9917,9920,9922,9924],{"class":51,"line":52},[49,9910,6061],{"class":77},[49,9912,9800],{"class":55},[49,9914,841],{"class":73},[49,9916,7489],{"class":77},[49,9918,9919],{"class":55}," student",[49,9921,7215],{"class":77},[49,9923,1524],{"class":5913},[49,9925,847],{"class":73},[49,9927,9928],{"class":51,"line":63},[49,9929,2245],{"class":73},[49,9931,9932],{"class":51,"line":70},[49,9933,9934],{"class":66},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[49,9936,9937,9939,9941,9943,9945,9947,9949,9951,9953],{"class":51,"line":219},[49,9938,2250],{"class":73},[49,9940,1872],{"class":77},[49,9942,9822],{"class":73},[49,9944,1872],{"class":77},[49,9946,9827],{"class":73},[49,9948,1872],{"class":77},[49,9950,9832],{"class":73},[49,9952,1872],{"class":77},[49,9954,1894],{"class":73},[49,9956,9957],{"class":51,"line":233},[49,9958,2264],{"class":73},[782,9960,9962],{"id":9961},"_47案例","4.7案例",[30,9964,9965],{},[33,9966,9967],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[40,9969,9971],{"className":829,"code":9970,"language":831,"meta":27,"style":27},"#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",[46,9972,9973,9979,9989,9995,10002,10006,10012,10016,10021,10027,10033,10037,10041,10047,10051,10056,10061,10074,10078,10083,10109,10113,10125,10152,10156,10168,10178,10182,10187,10216,10220,10232,10241,10268,10279,10289,10293,10297,10301,10306,10330,10334,10358,10362,10381,10407,10411,10436,10459,10483,10488,10493,10498,10507,10512,10518,10539,10545,10559,10565,10592,10601,10607,10615,10620],{"__ignoreMap":27},[49,9974,9975,9977],{"class":51,"line":52},[49,9976,2648],{"class":77},[49,9978,2651],{"class":59},[49,9980,9981,9983,9985,9987],{"class":51,"line":63},[49,9982,2656],{"class":77},[49,9984,2659],{"class":77},[49,9986,2662],{"class":55},[49,9988,1990],{"class":73},[49,9990,9991,9993],{"class":51,"line":70},[49,9992,2648],{"class":77},[49,9994,8446],{"class":59},[49,9996,9997,9999],{"class":51,"line":219},[49,9998,2648],{"class":77},[49,10000,10001],{"class":59},"\u003Cctime>\n",[49,10003,10004],{"class":51,"line":233},[49,10005,9235],{"class":66},[49,10007,10008,10010],{"class":51,"line":241},[49,10009,8456],{"class":77},[49,10011,8459],{"class":55},[49,10013,10014],{"class":51,"line":1920},[49,10015,2245],{"class":73},[49,10017,10018],{"class":51,"line":2011},[49,10019,10020],{"class":73},"    string sName;\n",[49,10022,10023,10025],{"class":51,"line":2017},[49,10024,2683],{"class":77},[49,10026,8494],{"class":73},[49,10028,10029,10031],{"class":51,"line":2029},[49,10030,2683],{"class":77},[49,10032,8506],{"class":73},[49,10034,10035],{"class":51,"line":2311},[49,10036,4692],{"class":73},[49,10038,10039],{"class":51,"line":2316},[49,10040,9272],{"class":66},[49,10042,10043,10045],{"class":51,"line":2322},[49,10044,8456],{"class":77},[49,10046,9279],{"class":55},[49,10048,10049],{"class":51,"line":2327},[49,10050,2245],{"class":73},[49,10052,10053],{"class":51,"line":2341},[49,10054,10055],{"class":73},"    string tName;\n",[49,10057,10058],{"class":51,"line":2346},[49,10059,10060],{"class":66},"    \u002F\u002F学生数组\n",[49,10062,10063,10065,10067,10070,10072],{"class":51,"line":2352},[49,10064,8592],{"class":77},[49,10066,8595],{"class":55},[49,10068,10069],{"class":73}," sArray[",[49,10071,1148],{"class":159},[49,10073,5387],{"class":73},[49,10075,10076],{"class":51,"line":2373},[49,10077,4692],{"class":73},[49,10079,10080],{"class":51,"line":2378},[49,10081,10082],{"class":66},"\u002F\u002F给老师和学生赋值的函数\n",[49,10084,10085,10087,10090,10092,10094,10097,10100,10103,10105,10107],{"class":51,"line":2392},[49,10086,6061],{"class":77},[49,10088,10089],{"class":55}," allocateSpace",[49,10091,841],{"class":73},[49,10093,8456],{"class":77},[49,10095,10096],{"class":55}," Teacher",[49,10098,10099],{"class":5913}," tArray",[49,10101,10102],{"class":73},"[],",[49,10104,844],{"class":77},[49,10106,8028],{"class":5913},[49,10108,847],{"class":73},[49,10110,10111],{"class":51,"line":2397},[49,10112,2245],{"class":73},[49,10114,10115,10118,10120,10123],{"class":51,"line":2426},[49,10116,10117],{"class":73},"    string nameSeed",[49,10119,78],{"class":77},[49,10121,10122],{"class":59},"\"ABCDE\"",[49,10124,1990],{"class":73},[49,10126,10127,10129,10131,10133,10136,10138,10140,10143,10145,10148,10150],{"class":51,"line":2431},[49,10128,3898],{"class":77},[49,10130,2357],{"class":73},[49,10132,844],{"class":77},[49,10134,10135],{"class":73}," i ",[49,10137,78],{"class":77},[49,10139,4790],{"class":159},[49,10141,10142],{"class":73},"; i ",[49,10144,1739],{"class":77},[49,10146,10147],{"class":73}," len; i",[49,10149,2990],{"class":77},[49,10151,847],{"class":73},[49,10153,10154],{"class":51,"line":2448},[49,10155,2728],{"class":73},[49,10157,10158,10161,10163,10166],{"class":51,"line":2453},[49,10159,10160],{"class":73},"        tArray[i].tName ",[49,10162,78],{"class":77},[49,10164,10165],{"class":59}," \"Teacher_\"",[49,10167,1990],{"class":73},[49,10169,10170,10172,10175],{"class":51,"line":2458},[49,10171,10160],{"class":73},[49,10173,10174],{"class":77},"+=",[49,10176,10177],{"class":73},"nameSeed[i];\n",[49,10179,10180],{"class":51,"line":2463},[49,10181,399],{"emptyLinePlaceholder":398},[49,10183,10184],{"class":51,"line":2477},[49,10185,10186],{"class":66},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[49,10188,10189,10191,10193,10195,10198,10200,10202,10205,10207,10209,10212,10214],{"class":51,"line":2482},[49,10190,4100],{"class":77},[49,10192,2357],{"class":73},[49,10194,844],{"class":77},[49,10196,10197],{"class":73}," j ",[49,10199,78],{"class":77},[49,10201,4790],{"class":159},[49,10203,10204],{"class":73},"; j ",[49,10206,1739],{"class":77},[49,10208,2846],{"class":159},[49,10210,10211],{"class":73},"; j",[49,10213,2990],{"class":77},[49,10215,847],{"class":73},[49,10217,10218],{"class":51,"line":3274},[49,10219,3207],{"class":73},[49,10221,10222,10225,10227,10230],{"class":51,"line":3288},[49,10223,10224],{"class":73},"            tArray[i].sArray[j].sName ",[49,10226,78],{"class":77},[49,10228,10229],{"class":59}," \"Student_\"",[49,10231,1990],{"class":73},[49,10233,10234,10236,10238],{"class":51,"line":3296},[49,10235,10224],{"class":73},[49,10237,10174],{"class":77},[49,10239,10240],{"class":73}," nameSeed[j];\n",[49,10242,10243,10246,10249,10251,10253,10255,10257,10259,10261,10263,10265],{"class":51,"line":3301},[49,10244,10245],{"class":77},"            int",[49,10247,10248],{"class":73}," random",[49,10250,78],{"class":77},[49,10252,3121],{"class":55},[49,10254,3124],{"class":73},[49,10256,1157],{"class":77},[49,10258,1736],{"class":159},[49,10260,1310],{"class":77},[49,10262,1230],{"class":159},[49,10264,894],{"class":73},[49,10266,10267],{"class":66},"\u002F\u002F40~99\n",[49,10269,10270,10273,10275,10277],{"class":51,"line":3307},[49,10271,10272],{"class":73},"            tArray[i].sArray[j].age ",[49,10274,78],{"class":77},[49,10276,9647],{"class":159},[49,10278,1990],{"class":73},[49,10280,10281,10284,10286],{"class":51,"line":3313},[49,10282,10283],{"class":73},"            tArray[i].sArray[j].score ",[49,10285,78],{"class":77},[49,10287,10288],{"class":73}," random;\n",[49,10290,10291],{"class":51,"line":3318},[49,10292,3226],{"class":73},[49,10294,10295],{"class":51,"line":8645},[49,10296,2885],{"class":73},[49,10298,10299],{"class":51,"line":8669},[49,10300,2264],{"class":73},[49,10302,10303],{"class":51,"line":8674},[49,10304,10305],{"class":66},"\u002F\u002F打印所有信息的函数\n",[49,10307,10308,10310,10313,10315,10317,10319,10321,10324,10326,10328],{"class":51,"line":8680},[49,10309,6061],{"class":77},[49,10311,10312],{"class":55}," printInfo",[49,10314,841],{"class":73},[49,10316,8456],{"class":77},[49,10318,10096],{"class":55},[49,10320,10099],{"class":5913},[49,10322,10323],{"class":73},"[], ",[49,10325,844],{"class":77},[49,10327,8028],{"class":5913},[49,10329,847],{"class":73},[49,10331,10332],{"class":51,"line":8707},[49,10333,2245],{"class":73},[49,10335,10336,10338,10340,10342,10344,10346,10348,10350,10352,10354,10356],{"class":51,"line":8712},[49,10337,3898],{"class":77},[49,10339,2357],{"class":73},[49,10341,844],{"class":77},[49,10343,10135],{"class":73},[49,10345,78],{"class":77},[49,10347,4790],{"class":159},[49,10349,10142],{"class":73},[49,10351,1739],{"class":77},[49,10353,10147],{"class":73},[49,10355,2990],{"class":77},[49,10357,847],{"class":73},[49,10359,10360],{"class":51,"line":8718},[49,10361,2728],{"class":73},[49,10363,10364,10367,10369,10372,10374,10377,10379],{"class":51,"line":8730},[49,10365,10366],{"class":73},"        cout ",[49,10368,1872],{"class":77},[49,10370,10371],{"class":59}," \"Teacher: \"",[49,10373,2144],{"class":77},[49,10375,10376],{"class":73}," tArray[i].tName ",[49,10378,1872],{"class":77},[49,10380,9537],{"class":73},[49,10382,10383,10385,10387,10389,10391,10393,10395,10397,10399,10401,10403,10405],{"class":51,"line":8742},[49,10384,4100],{"class":77},[49,10386,2357],{"class":73},[49,10388,844],{"class":77},[49,10390,10197],{"class":73},[49,10392,78],{"class":77},[49,10394,4790],{"class":159},[49,10396,10204],{"class":73},[49,10398,1739],{"class":77},[49,10400,2846],{"class":159},[49,10402,10211],{"class":73},[49,10404,2990],{"class":77},[49,10406,847],{"class":73},[49,10408,10409],{"class":51,"line":8754},[49,10410,3207],{"class":73},[49,10412,10414,10417,10419,10422,10424,10427,10429,10432,10434],{"class":51,"line":10413},47,[49,10415,10416],{"class":73},"            cout ",[49,10418,1872],{"class":77},[49,10420,10421],{"class":59}," \"",[49,10423,1930],{"class":159},[49,10425,10426],{"class":59},"Student: \"",[49,10428,2144],{"class":77},[49,10430,10431],{"class":73}," tArray[i].sArray[j].sName",[49,10433,1872],{"class":77},[49,10435,1894],{"class":73},[49,10437,10439,10441,10443,10445,10447,10450,10452,10455,10457],{"class":51,"line":10438},48,[49,10440,10416],{"class":73},[49,10442,1872],{"class":77},[49,10444,10421],{"class":59},[49,10446,1930],{"class":159},[49,10448,10449],{"class":59},"Age: \"",[49,10451,2144],{"class":77},[49,10453,10454],{"class":73}," tArray[i].sArray[j].age ",[49,10456,1872],{"class":77},[49,10458,9537],{"class":73},[49,10460,10462,10464,10466,10468,10470,10473,10475,10478,10480],{"class":51,"line":10461},49,[49,10463,10416],{"class":73},[49,10465,1872],{"class":77},[49,10467,10421],{"class":59},[49,10469,1930],{"class":159},[49,10471,10472],{"class":59},"Score: \"",[49,10474,2144],{"class":77},[49,10476,10477],{"class":73}," tArray[i].sArray[j].score ",[49,10479,1872],{"class":77},[49,10481,10482],{"class":73}," endl;   \n",[49,10484,10486],{"class":51,"line":10485},50,[49,10487,3226],{"class":73},[49,10489,10491],{"class":51,"line":10490},51,[49,10492,2885],{"class":73},[49,10494,10496],{"class":51,"line":10495},52,[49,10497,2264],{"class":73},[49,10499,10501,10503,10505],{"class":51,"line":10500},53,[49,10502,844],{"class":77},[49,10504,2671],{"class":55},[49,10506,2674],{"class":73},[49,10508,10510],{"class":51,"line":10509},54,[49,10511,2245],{"class":73},[49,10513,10515],{"class":51,"line":10514},55,[49,10516,10517],{"class":66},"    \u002F\u002F随机数种子\n",[49,10519,10521,10523,10525,10527,10529,10531,10533,10535,10537],{"class":51,"line":10520},56,[49,10522,3071],{"class":55},[49,10524,3074],{"class":73},[49,10526,3077],{"class":77},[49,10528,3080],{"class":77},[49,10530,1258],{"class":73},[49,10532,3085],{"class":55},[49,10534,841],{"class":73},[49,10536,3090],{"class":159},[49,10538,3093],{"class":73},[49,10540,10542],{"class":51,"line":10541},57,[49,10543,10544],{"class":66},"    \u002F\u002F1.创建3名老师的数组\n",[49,10546,10548,10550,10552,10555,10557],{"class":51,"line":10547},58,[49,10549,8592],{"class":77},[49,10551,10096],{"class":55},[49,10553,10554],{"class":73}," tArray[",[49,10556,909],{"class":159},[49,10558,5387],{"class":73},[49,10560,10562],{"class":51,"line":10561},59,[49,10563,10564],{"class":66},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[49,10566,10568,10570,10573,10575,10578,10581,10583,10585,10588,10590],{"class":51,"line":10567},60,[49,10569,2683],{"class":77},[49,10571,10572],{"class":73}," len ",[49,10574,78],{"class":77},[49,10576,10577],{"class":77}," sizeof",[49,10579,10580],{"class":73},"(tArray) ",[49,10582,1413],{"class":77},[49,10584,10577],{"class":77},[49,10586,10587],{"class":73},"(tArray[",[49,10589,1021],{"class":159},[49,10591,4553],{"class":73},[49,10593,10595,10598],{"class":51,"line":10594},61,[49,10596,10597],{"class":55},"    allocateSpace",[49,10599,10600],{"class":73},"(tArray, len);\n",[49,10602,10604],{"class":51,"line":10603},62,[49,10605,10606],{"class":66},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[49,10608,10610,10613],{"class":51,"line":10609},63,[49,10611,10612],{"class":55},"    printInfo",[49,10614,10600],{"class":73},[49,10616,10618],{"class":51,"line":10617},64,[49,10619,399],{"emptyLinePlaceholder":398},[49,10621,10623],{"class":51,"line":10622},65,[49,10624,2264],{"class":73},[30,10626,10627],{"start":63},[33,10628,10629,10632],{},[112,10630,10631],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10634,10635],{},"五名英雄信息如下：",[40,10637,10641],{"className":10638,"code":10639,"language":10640,"meta":27,"style":27},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[46,10642,10643,10661,10678,10695,10712],{"__ignoreMap":27},[49,10644,10645,10647,10650,10652,10654,10656,10659],{"class":51,"line":52},[49,10646,5614],{"class":73},[49,10648,10649],{"class":59},"\"刘备\"",[49,10651,1207],{"class":73},[49,10653,1604],{"class":159},[49,10655,1207],{"class":73},[49,10657,10658],{"class":59},"\"男\"",[49,10660,5627],{"class":73},[49,10662,10663,10665,10668,10670,10672,10674,10676],{"class":51,"line":63},[49,10664,5614],{"class":73},[49,10666,10667],{"class":59},"\"关羽\"",[49,10669,1207],{"class":73},[49,10671,1579],{"class":159},[49,10673,1207],{"class":73},[49,10675,10658],{"class":59},[49,10677,5627],{"class":73},[49,10679,10680,10682,10685,10687,10689,10691,10693],{"class":51,"line":70},[49,10681,5614],{"class":73},[49,10683,10684],{"class":59},"\"张飞\"",[49,10686,1207],{"class":73},[49,10688,1529],{"class":159},[49,10690,1207],{"class":73},[49,10692,10658],{"class":59},[49,10694,5627],{"class":73},[49,10696,10697,10699,10702,10704,10706,10708,10710],{"class":51,"line":219},[49,10698,5614],{"class":73},[49,10700,10701],{"class":59},"\"赵云\"",[49,10703,1207],{"class":73},[49,10705,1554],{"class":159},[49,10707,1207],{"class":73},[49,10709,10658],{"class":59},[49,10711,5627],{"class":73},[49,10713,10714,10716,10719,10721,10723,10725,10728],{"class":51,"line":233},[49,10715,5614],{"class":73},[49,10717,10718],{"class":59},"\"貂蝉\"",[49,10720,1207],{"class":73},[49,10722,1504],{"class":159},[49,10724,1207],{"class":73},[49,10726,10727],{"class":59},"\"女\"",[49,10729,5627],{"class":73},[14,10731,10732],{},"代码：",[40,10734,10736],{"className":829,"code":10735,"language":831,"meta":27,"style":27},"#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",[46,10737,10738,10744,10754,10760,10767,10771,10775,10781,10786,10790,10795,10818,10822,10847,10851,10884,10889,10918,10923,10938,10964,10984,10989,10994,10998,11002,11007,11029,11033,11057,11061,11123,11127,11131,11139,11143,11148,11159,11163,11179,11195,11211,11227,11243,11247,11267,11289,11294,11307,11314,11319,11325,11330,11343,11349],{"__ignoreMap":27},[49,10739,10740,10742],{"class":51,"line":52},[49,10741,2648],{"class":77},[49,10743,2651],{"class":59},[49,10745,10746,10748,10750,10752],{"class":51,"line":63},[49,10747,2656],{"class":77},[49,10749,2659],{"class":77},[49,10751,2662],{"class":55},[49,10753,1990],{"class":73},[49,10755,10756,10758],{"class":51,"line":70},[49,10757,2648],{"class":77},[49,10759,8446],{"class":59},[49,10761,10762,10764],{"class":51,"line":219},[49,10763,8456],{"class":77},[49,10765,10766],{"class":55}," Sanguo\n",[49,10768,10769],{"class":51,"line":233},[49,10770,2245],{"class":73},[49,10772,10773],{"class":51,"line":241},[49,10774,8482],{"class":73},[49,10776,10777,10779],{"class":51,"line":1920},[49,10778,2683],{"class":77},[49,10780,8494],{"class":73},[49,10782,10783],{"class":51,"line":2011},[49,10784,10785],{"class":73},"    string gender;\n",[49,10787,10788],{"class":51,"line":2017},[49,10789,4692],{"class":73},[49,10791,10792],{"class":51,"line":2029},[49,10793,10794],{"class":66},"\u002F\u002F定义排序函数\n",[49,10796,10797,10799,10801,10803,10806,10808,10810,10812,10814,10816],{"class":51,"line":2311},[49,10798,6061],{"class":77},[49,10800,8013],{"class":55},[49,10802,841],{"class":73},[49,10804,10805],{"class":55},"Sanguo",[49,10807,7215],{"class":77},[49,10809,1524],{"class":5913},[49,10811,1207],{"class":73},[49,10813,844],{"class":77},[49,10815,8028],{"class":5913},[49,10817,847],{"class":73},[49,10819,10820],{"class":51,"line":2316},[49,10821,2245],{"class":73},[49,10823,10824,10826,10828,10830,10832,10834,10836,10838,10840,10843,10845],{"class":51,"line":2322},[49,10825,3898],{"class":77},[49,10827,841],{"class":73},[49,10829,844],{"class":77},[49,10831,3729],{"class":73},[49,10833,78],{"class":77},[49,10835,1021],{"class":159},[49,10837,3736],{"class":73},[49,10839,1739],{"class":77},[49,10841,10842],{"class":73},"len;i",[49,10844,2990],{"class":77},[49,10846,847],{"class":73},[49,10848,10849],{"class":51,"line":2327},[49,10850,2728],{"class":73},[49,10852,10853,10856,10858,10860,10862,10864,10866,10868,10870,10872,10874,10876,10878,10880,10882],{"class":51,"line":2341},[49,10854,10855],{"class":77},"     for",[49,10857,2357],{"class":73},[49,10859,844],{"class":77},[49,10861,4107],{"class":73},[49,10863,78],{"class":77},[49,10865,1021],{"class":159},[49,10867,4114],{"class":73},[49,10869,1739],{"class":77},[49,10871,8055],{"class":73},[49,10873,1361],{"class":77},[49,10875,1047],{"class":159},[49,10877,1361],{"class":77},[49,10879,4247],{"class":73},[49,10881,2990],{"class":77},[49,10883,847],{"class":73},[49,10885,10886],{"class":51,"line":2346},[49,10887,10888],{"class":73},"     {\n",[49,10890,10891,10894,10897,10899,10902,10904,10907,10909,10911,10913,10915],{"class":51,"line":2352},[49,10892,10893],{"class":77},"         if",[49,10895,10896],{"class":73}," ((s",[49,10898,1310],{"class":77},[49,10900,10901],{"class":73},"j)->age ",[49,10903,1789],{"class":77},[49,10905,10906],{"class":73}," (s",[49,10908,1310],{"class":77},[49,10910,1296],{"class":73},[49,10912,1310],{"class":77},[49,10914,1047],{"class":159},[49,10916,10917],{"class":73},")->age)\n",[49,10919,10920],{"class":51,"line":2373},[49,10921,10922],{"class":73},"         {\n",[49,10924,10925,10928,10930,10933,10935],{"class":51,"line":2378},[49,10926,10927],{"class":73},"             Sanguo temp",[49,10929,7850],{"class":77},[49,10931,10932],{"class":73},"(s",[49,10934,1310],{"class":77},[49,10936,10937],{"class":73},"j);\n",[49,10939,10940,10943,10945,10947,10950,10952,10954,10956,10958,10960,10962],{"class":51,"line":2392},[49,10941,10942],{"class":77},"             *",[49,10944,10932],{"class":73},[49,10946,1310],{"class":77},[49,10948,10949],{"class":73},"j)",[49,10951,7850],{"class":77},[49,10953,10932],{"class":73},[49,10955,1310],{"class":77},[49,10957,1296],{"class":73},[49,10959,1310],{"class":77},[49,10961,1047],{"class":159},[49,10963,3416],{"class":73},[49,10965,10966,10968,10970,10972,10974,10976,10978,10980,10982],{"class":51,"line":2397},[49,10967,10942],{"class":77},[49,10969,10932],{"class":73},[49,10971,1310],{"class":77},[49,10973,1296],{"class":73},[49,10975,1310],{"class":77},[49,10977,1047],{"class":159},[49,10979,1258],{"class":73},[49,10981,78],{"class":77},[49,10983,4977],{"class":73},[49,10985,10986],{"class":51,"line":2426},[49,10987,10988],{"class":73},"         }\n",[49,10990,10991],{"class":51,"line":2431},[49,10992,10993],{"class":73},"     }\n",[49,10995,10996],{"class":51,"line":2448},[49,10997,2885],{"class":73},[49,10999,11000],{"class":51,"line":2453},[49,11001,2264],{"class":73},[49,11003,11004],{"class":51,"line":2458},[49,11005,11006],{"class":66},"\u002F\u002F定义打印函数\n",[49,11008,11009,11011,11013,11015,11017,11019,11021,11023,11025,11027],{"class":51,"line":2463},[49,11010,6061],{"class":77},[49,11012,10312],{"class":55},[49,11014,841],{"class":73},[49,11016,10805],{"class":55},[49,11018,7215],{"class":77},[49,11020,1524],{"class":5913},[49,11022,1207],{"class":73},[49,11024,844],{"class":77},[49,11026,8028],{"class":5913},[49,11028,847],{"class":73},[49,11030,11031],{"class":51,"line":2477},[49,11032,2245],{"class":73},[49,11034,11035,11037,11039,11041,11043,11045,11047,11049,11051,11053,11055],{"class":51,"line":2482},[49,11036,3898],{"class":77},[49,11038,2357],{"class":73},[49,11040,844],{"class":77},[49,11042,3729],{"class":73},[49,11044,78],{"class":77},[49,11046,1021],{"class":159},[49,11048,3736],{"class":73},[49,11050,1739],{"class":77},[49,11052,10842],{"class":73},[49,11054,2990],{"class":77},[49,11056,847],{"class":73},[49,11058,11059],{"class":51,"line":3274},[49,11060,2728],{"class":73},[49,11062,11063,11065,11067,11069,11071,11074,11076,11078,11080,11083,11085,11087,11089,11092,11094,11096,11098,11101,11103,11105,11107,11110,11112,11114,11116,11119,11121],{"class":51,"line":3288},[49,11064,4148],{"class":73},[49,11066,1872],{"class":77},[49,11068,1080],{"class":59},[49,11070,1930],{"class":159},[49,11072,11073],{"class":59},"姓名：\"",[49,11075,1872],{"class":77},[49,11077,10932],{"class":73},[49,11079,1310],{"class":77},[49,11081,11082],{"class":73},"i)->name",[49,11084,1872],{"class":77},[49,11086,1080],{"class":59},[49,11088,1930],{"class":159},[49,11090,11091],{"class":59},"年龄：\"",[49,11093,1872],{"class":77},[49,11095,10932],{"class":73},[49,11097,1310],{"class":77},[49,11099,11100],{"class":73},"i)->age",[49,11102,1872],{"class":77},[49,11104,1080],{"class":59},[49,11106,1930],{"class":159},[49,11108,11109],{"class":59},"性别：\"",[49,11111,1872],{"class":77},[49,11113,10932],{"class":73},[49,11115,1310],{"class":77},[49,11117,11118],{"class":73},"i)->gender",[49,11120,1872],{"class":77},[49,11122,1894],{"class":73},[49,11124,11125],{"class":51,"line":3296},[49,11126,2885],{"class":73},[49,11128,11129],{"class":51,"line":3301},[49,11130,2264],{"class":73},[49,11132,11133,11135,11137],{"class":51,"line":3307},[49,11134,844],{"class":77},[49,11136,2671],{"class":55},[49,11138,2674],{"class":73},[49,11140,11141],{"class":51,"line":3313},[49,11142,2245],{"class":73},[49,11144,11145],{"class":51,"line":3318},[49,11146,11147],{"class":66},"    \u002F\u002F定义结构体变量\n",[49,11149,11150,11153,11155,11157],{"class":51,"line":8645},[49,11151,11152],{"class":73},"    Sanguo s1[",[49,11154,1148],{"class":159},[49,11156,1769],{"class":73},[49,11158,5605],{"class":77},[49,11160,11161],{"class":51,"line":8669},[49,11162,2728],{"class":73},[49,11164,11165,11167,11169,11171,11173,11175,11177],{"class":51,"line":8674},[49,11166,5614],{"class":73},[49,11168,10649],{"class":59},[49,11170,1207],{"class":73},[49,11172,1604],{"class":159},[49,11174,1207],{"class":73},[49,11176,10658],{"class":59},[49,11178,5627],{"class":73},[49,11180,11181,11183,11185,11187,11189,11191,11193],{"class":51,"line":8680},[49,11182,5614],{"class":73},[49,11184,10667],{"class":59},[49,11186,1207],{"class":73},[49,11188,1579],{"class":159},[49,11190,1207],{"class":73},[49,11192,10658],{"class":59},[49,11194,5627],{"class":73},[49,11196,11197,11199,11201,11203,11205,11207,11209],{"class":51,"line":8707},[49,11198,5614],{"class":73},[49,11200,10684],{"class":59},[49,11202,1207],{"class":73},[49,11204,1529],{"class":159},[49,11206,1207],{"class":73},[49,11208,10658],{"class":59},[49,11210,5627],{"class":73},[49,11212,11213,11215,11217,11219,11221,11223,11225],{"class":51,"line":8712},[49,11214,5614],{"class":73},[49,11216,10701],{"class":59},[49,11218,1207],{"class":73},[49,11220,1554],{"class":159},[49,11222,1207],{"class":73},[49,11224,10658],{"class":59},[49,11226,5627],{"class":73},[49,11228,11229,11231,11233,11235,11237,11239,11241],{"class":51,"line":8718},[49,11230,5614],{"class":73},[49,11232,10718],{"class":59},[49,11234,1207],{"class":73},[49,11236,1504],{"class":159},[49,11238,1207],{"class":73},[49,11240,10727],{"class":59},[49,11242,5627],{"class":73},[49,11244,11245],{"class":51,"line":8730},[49,11246,5648],{"class":73},[49,11248,11249,11251,11253,11255,11258,11260,11263,11265],{"class":51,"line":8742},[49,11250,2683],{"class":77},[49,11252,8028],{"class":73},[49,11254,4900],{"class":77},[49,11256,11257],{"class":73},"(s1)",[49,11259,4906],{"class":77},[49,11261,11262],{"class":73},"(s1[",[49,11264,1021],{"class":159},[49,11266,4553],{"class":73},[49,11268,11269,11272,11274,11277,11279,11282,11285,11287],{"class":51,"line":8754},[49,11270,11271],{"class":73},"    Sanguo ",[49,11273,1284],{"class":77},[49,11275,11276],{"class":73},"s ",[49,11278,78],{"class":77},[49,11280,11281],{"class":77}," &",[49,11283,11284],{"class":73},"s1[",[49,11286,1021],{"class":159},[49,11288,5387],{"class":73},[49,11290,11291],{"class":51,"line":10413},[49,11292,11293],{"class":66},"    \u002F\u002F排序前：\n",[49,11295,11296,11298,11300,11303,11305],{"class":51,"line":10438},[49,11297,7226],{"class":73},[49,11299,1872],{"class":77},[49,11301,11302],{"class":59}," \"排序前：\"",[49,11304,2144],{"class":77},[49,11306,9537],{"class":73},[49,11308,11309,11311],{"class":51,"line":10461},[49,11310,10612],{"class":55},[49,11312,11313],{"class":73},"(s,len);\n",[49,11315,11316],{"class":51,"line":10485},[49,11317,11318],{"class":66},"    \u002F\u002F调用排序函数\n",[49,11320,11321,11323],{"class":51,"line":10490},[49,11322,8295],{"class":55},[49,11324,11313],{"class":73},[49,11326,11327],{"class":51,"line":10495},[49,11328,11329],{"class":66},"    \u002F\u002F排序后\n",[49,11331,11332,11334,11336,11339,11341],{"class":51,"line":10500},[49,11333,7226],{"class":73},[49,11335,1872],{"class":77},[49,11337,11338],{"class":59}," \"排序后：\"",[49,11340,2144],{"class":77},[49,11342,9537],{"class":73},[49,11344,11345,11347],{"class":51,"line":10509},[49,11346,10612],{"class":55},[49,11348,11313],{"class":73},[49,11350,11351],{"class":51,"line":10514},[49,11352,2264],{"class":73},[14,11354,11355,11356,11358],{},"注意：使用指针时直接用传首地址**&s",[49,11357,1021],{},"**",[757,11360,11361],{},"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":27,"searchDepth":63,"depth":63,"links":11363},[11364,11365,11366,11367,11368,11369,11370],{"id":8400,"depth":63,"text":8401},{"id":8762,"depth":63,"text":8763},{"id":9031,"depth":63,"text":9032},{"id":9196,"depth":63,"text":9197},{"id":9412,"depth":63,"text":9413},{"id":9733,"depth":63,"text":9734},{"id":9961,"depth":63,"text":9962},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8389,"description":8397},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11377,"title":11378,"body":11379,"description":27,"extension":766,"meta":12722,"navigation":398,"path":12723,"seo":12724,"stem":12725,"__hash__":12726},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11380,"toc":12716},[11381,11384,11388,11394,11408,11413,11416,11420,11427,11433,11436,11443,11449,11454,11457,11460,11463,12027,12030,12044,12048,12053,12069,12209,12212,12218,12221,12226,12234,12342,12345,12350,12353,12358,12361,12367,12370,12713],[10,11382,11378],{"id":11383},"_5程序内存模型",[782,11385,11387],{"id":11386},"_51内存分区模型","5.1内存分区模型",[14,11389,11390,11391],{},"C++程序在执行时，将内存大方向划分为",[112,11392,11393],{},"4个区域",[742,11395,11396,11399,11402,11405],{},[33,11397,11398],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[33,11400,11401],{},"全局区：存放全局变量和静态变量以及常量",[33,11403,11404],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[33,11406,11407],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,11409,11410],{},[112,11411,11412],{},"内存四区意义：",[14,11414,11415],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[18,11417,11419],{"id":11418},"_511程序运行前","5.1.1程序运行前",[14,11421,11422,11423,11426],{},"​\t在程序编译后，生成了exe可执行程序，",[112,11424,11425],{},"未执行该程序前","分为两个区域",[14,11428,11429,11430],{},"​\t",[112,11431,11432],{},"代码区：",[14,11434,11435],{},"​\t\t存放 CPU 执行的机器指令",[14,11437,11438,11439,11442],{},"​\t\t代码区是",[112,11440,11441],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,11444,11438,11445,11448],{},[112,11446,11447],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,11450,11429,11451],{},[112,11452,11453],{},"全局区：",[14,11455,11456],{},"​\t\t全局变量和静态变量存放在此.",[14,11458,11459],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,11461,11462],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[40,11464,11466],{"className":829,"code":11465,"language":831,"meta":27,"style":27},"\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",[46,11467,11468,11473,11486,11499,11503,11508,11523,11538,11542,11551,11555,11560,11573,11586,11590,11595,11621,11647,11651,11678,11704,11708,11713,11729,11744,11748,11774,11800,11804,11829,11854,11858,11884,11910,11914,11930,11945,11971,11997,12001,12011,12015,12023],{"__ignoreMap":27},[49,11469,11470],{"class":51,"line":52},[49,11471,11472],{"class":66},"\u002F\u002F全局变量\n",[49,11474,11475,11477,11480,11482,11484],{"class":51,"line":63},[49,11476,844],{"class":77},[49,11478,11479],{"class":73}," g_a ",[49,11481,78],{"class":77},[49,11483,2736],{"class":159},[49,11485,1990],{"class":73},[49,11487,11488,11490,11493,11495,11497],{"class":51,"line":70},[49,11489,844],{"class":77},[49,11491,11492],{"class":73}," g_b ",[49,11494,78],{"class":77},[49,11496,2736],{"class":159},[49,11498,1990],{"class":73},[49,11500,11501],{"class":51,"line":219},[49,11502,399],{"emptyLinePlaceholder":398},[49,11504,11505],{"class":51,"line":233},[49,11506,11507],{"class":66},"\u002F\u002F全局常量\n",[49,11509,11510,11512,11514,11517,11519,11521],{"class":51,"line":241},[49,11511,7489],{"class":77},[49,11513,3080],{"class":77},[49,11515,11516],{"class":73}," c_g_a ",[49,11518,78],{"class":77},[49,11520,2736],{"class":159},[49,11522,1990],{"class":73},[49,11524,11525,11527,11529,11532,11534,11536],{"class":51,"line":1920},[49,11526,7489],{"class":77},[49,11528,3080],{"class":77},[49,11530,11531],{"class":73}," c_g_b ",[49,11533,78],{"class":77},[49,11535,2736],{"class":159},[49,11537,1990],{"class":73},[49,11539,11540],{"class":51,"line":2011},[49,11541,399],{"emptyLinePlaceholder":398},[49,11543,11544,11546,11548],{"class":51,"line":2017},[49,11545,844],{"class":77},[49,11547,2671],{"class":55},[49,11549,11550],{"class":73},"() {\n",[49,11552,11553],{"class":51,"line":2029},[49,11554,399],{"emptyLinePlaceholder":398},[49,11556,11557],{"class":51,"line":2311},[49,11558,11559],{"class":66},"    \u002F\u002F局部变量\n",[49,11561,11562,11564,11567,11569,11571],{"class":51,"line":2316},[49,11563,2683],{"class":77},[49,11565,11566],{"class":73}," a ",[49,11568,78],{"class":77},[49,11570,2736],{"class":159},[49,11572,1990],{"class":73},[49,11574,11575,11577,11580,11582,11584],{"class":51,"line":2322},[49,11576,2683],{"class":77},[49,11578,11579],{"class":73}," b ",[49,11581,78],{"class":77},[49,11583,2736],{"class":159},[49,11585,1990],{"class":73},[49,11587,11588],{"class":51,"line":2327},[49,11589,399],{"emptyLinePlaceholder":398},[49,11591,11592],{"class":51,"line":2341},[49,11593,11594],{"class":66},"    \u002F\u002F打印地址\n",[49,11596,11597,11599,11601,11604,11606,11608,11610,11612,11614,11617,11619],{"class":51,"line":2346},[49,11598,7226],{"class":73},[49,11600,1872],{"class":77},[49,11602,11603],{"class":59}," \"局部变量a地址为： \"",[49,11605,2144],{"class":77},[49,11607,2357],{"class":73},[49,11609,844],{"class":77},[49,11611,1258],{"class":73},[49,11613,1182],{"class":77},[49,11615,11616],{"class":73},"a ",[49,11618,1872],{"class":77},[49,11620,9537],{"class":73},[49,11622,11623,11625,11627,11630,11632,11634,11636,11638,11640,11643,11645],{"class":51,"line":2352},[49,11624,7226],{"class":73},[49,11626,1872],{"class":77},[49,11628,11629],{"class":59}," \"局部变量b地址为： \"",[49,11631,2144],{"class":77},[49,11633,2357],{"class":73},[49,11635,844],{"class":77},[49,11637,1258],{"class":73},[49,11639,1182],{"class":77},[49,11641,11642],{"class":73},"b ",[49,11644,1872],{"class":77},[49,11646,9537],{"class":73},[49,11648,11649],{"class":51,"line":2373},[49,11650,399],{"emptyLinePlaceholder":398},[49,11652,11653,11655,11657,11660,11662,11665,11667,11669,11671,11674,11676],{"class":51,"line":2378},[49,11654,7226],{"class":73},[49,11656,1872],{"class":77},[49,11658,11659],{"class":59}," \"全局变量g_a地址为： \"",[49,11661,2144],{"class":77},[49,11663,11664],{"class":73},"  (",[49,11666,844],{"class":77},[49,11668,1258],{"class":73},[49,11670,1182],{"class":77},[49,11672,11673],{"class":73},"g_a ",[49,11675,1872],{"class":77},[49,11677,9537],{"class":73},[49,11679,11680,11682,11684,11687,11689,11691,11693,11695,11697,11700,11702],{"class":51,"line":2392},[49,11681,7226],{"class":73},[49,11683,1872],{"class":77},[49,11685,11686],{"class":59}," \"全局变量g_b地址为： \"",[49,11688,2144],{"class":77},[49,11690,11664],{"class":73},[49,11692,844],{"class":77},[49,11694,1258],{"class":73},[49,11696,1182],{"class":77},[49,11698,11699],{"class":73},"g_b ",[49,11701,1872],{"class":77},[49,11703,9537],{"class":73},[49,11705,11706],{"class":51,"line":2397},[49,11707,399],{"emptyLinePlaceholder":398},[49,11709,11710],{"class":51,"line":2426},[49,11711,11712],{"class":66},"    \u002F\u002F静态变量\n",[49,11714,11715,11718,11720,11723,11725,11727],{"class":51,"line":2431},[49,11716,11717],{"class":77},"    static",[49,11719,3080],{"class":77},[49,11721,11722],{"class":73}," s_a ",[49,11724,78],{"class":77},[49,11726,2736],{"class":159},[49,11728,1990],{"class":73},[49,11730,11731,11733,11735,11738,11740,11742],{"class":51,"line":2448},[49,11732,11717],{"class":77},[49,11734,3080],{"class":77},[49,11736,11737],{"class":73}," s_b ",[49,11739,78],{"class":77},[49,11741,2736],{"class":159},[49,11743,1990],{"class":73},[49,11745,11746],{"class":51,"line":2453},[49,11747,399],{"emptyLinePlaceholder":398},[49,11749,11750,11752,11754,11757,11759,11761,11763,11765,11767,11770,11772],{"class":51,"line":2458},[49,11751,7226],{"class":73},[49,11753,1872],{"class":77},[49,11755,11756],{"class":59}," \"静态变量s_a地址为： \"",[49,11758,2144],{"class":77},[49,11760,2357],{"class":73},[49,11762,844],{"class":77},[49,11764,1258],{"class":73},[49,11766,1182],{"class":77},[49,11768,11769],{"class":73},"s_a ",[49,11771,1872],{"class":77},[49,11773,9537],{"class":73},[49,11775,11776,11778,11780,11783,11785,11787,11789,11791,11793,11796,11798],{"class":51,"line":2463},[49,11777,7226],{"class":73},[49,11779,1872],{"class":77},[49,11781,11782],{"class":59}," \"静态变量s_b地址为： \"",[49,11784,2144],{"class":77},[49,11786,2357],{"class":73},[49,11788,844],{"class":77},[49,11790,1258],{"class":73},[49,11792,1182],{"class":77},[49,11794,11795],{"class":73},"s_b ",[49,11797,1872],{"class":77},[49,11799,9537],{"class":73},[49,11801,11802],{"class":51,"line":2477},[49,11803,399],{"emptyLinePlaceholder":398},[49,11805,11806,11808,11810,11813,11815,11817,11819,11821,11823,11825,11827],{"class":51,"line":2482},[49,11807,7226],{"class":73},[49,11809,1872],{"class":77},[49,11811,11812],{"class":59}," \"字符串常量地址为： \"",[49,11814,2144],{"class":77},[49,11816,2357],{"class":73},[49,11818,844],{"class":77},[49,11820,1258],{"class":73},[49,11822,1182],{"class":77},[49,11824,1889],{"class":59},[49,11826,2144],{"class":77},[49,11828,9537],{"class":73},[49,11830,11831,11833,11835,11837,11839,11841,11843,11845,11847,11850,11852],{"class":51,"line":3274},[49,11832,7226],{"class":73},[49,11834,1872],{"class":77},[49,11836,11812],{"class":59},[49,11838,2144],{"class":77},[49,11840,2357],{"class":73},[49,11842,844],{"class":77},[49,11844,1258],{"class":73},[49,11846,1182],{"class":77},[49,11848,11849],{"class":59},"\"hello world1\"",[49,11851,2144],{"class":77},[49,11853,9537],{"class":73},[49,11855,11856],{"class":51,"line":3288},[49,11857,399],{"emptyLinePlaceholder":398},[49,11859,11860,11862,11864,11867,11869,11871,11873,11875,11877,11880,11882],{"class":51,"line":3296},[49,11861,7226],{"class":73},[49,11863,1872],{"class":77},[49,11865,11866],{"class":59}," \"全局常量c_g_a地址为： \"",[49,11868,2144],{"class":77},[49,11870,2357],{"class":73},[49,11872,844],{"class":77},[49,11874,1258],{"class":73},[49,11876,1182],{"class":77},[49,11878,11879],{"class":73},"c_g_a ",[49,11881,1872],{"class":77},[49,11883,9537],{"class":73},[49,11885,11886,11888,11890,11893,11895,11897,11899,11901,11903,11906,11908],{"class":51,"line":3301},[49,11887,7226],{"class":73},[49,11889,1872],{"class":77},[49,11891,11892],{"class":59}," \"全局常量c_g_b地址为： \"",[49,11894,2144],{"class":77},[49,11896,2357],{"class":73},[49,11898,844],{"class":77},[49,11900,1258],{"class":73},[49,11902,1182],{"class":77},[49,11904,11905],{"class":73},"c_g_b ",[49,11907,1872],{"class":77},[49,11909,9537],{"class":73},[49,11911,11912],{"class":51,"line":3307},[49,11913,399],{"emptyLinePlaceholder":398},[49,11915,11916,11919,11921,11924,11926,11928],{"class":51,"line":3313},[49,11917,11918],{"class":77},"    const",[49,11920,3080],{"class":77},[49,11922,11923],{"class":73}," c_l_a ",[49,11925,78],{"class":77},[49,11927,2736],{"class":159},[49,11929,1990],{"class":73},[49,11931,11932,11934,11936,11939,11941,11943],{"class":51,"line":3318},[49,11933,11918],{"class":77},[49,11935,3080],{"class":77},[49,11937,11938],{"class":73}," c_l_b ",[49,11940,78],{"class":77},[49,11942,2736],{"class":159},[49,11944,1990],{"class":73},[49,11946,11947,11949,11951,11954,11956,11958,11960,11962,11964,11967,11969],{"class":51,"line":8645},[49,11948,7226],{"class":73},[49,11950,1872],{"class":77},[49,11952,11953],{"class":59}," \"局部常量c_l_a地址为： \"",[49,11955,2144],{"class":77},[49,11957,2357],{"class":73},[49,11959,844],{"class":77},[49,11961,1258],{"class":73},[49,11963,1182],{"class":77},[49,11965,11966],{"class":73},"c_l_a ",[49,11968,1872],{"class":77},[49,11970,9537],{"class":73},[49,11972,11973,11975,11977,11980,11982,11984,11986,11988,11990,11993,11995],{"class":51,"line":8669},[49,11974,7226],{"class":73},[49,11976,1872],{"class":77},[49,11978,11979],{"class":59}," \"局部常量c_l_b地址为： \"",[49,11981,2144],{"class":77},[49,11983,2357],{"class":73},[49,11985,844],{"class":77},[49,11987,1258],{"class":73},[49,11989,1182],{"class":77},[49,11991,11992],{"class":73},"c_l_b ",[49,11994,1872],{"class":77},[49,11996,9537],{"class":73},[49,11998,11999],{"class":51,"line":8674},[49,12000,399],{"emptyLinePlaceholder":398},[49,12002,12003,12005,12007,12009],{"class":51,"line":8680},[49,12004,3001],{"class":55},[49,12006,841],{"class":73},[49,12008,3006],{"class":59},[49,12010,3416],{"class":73},[49,12012,12013],{"class":51,"line":8707},[49,12014,399],{"emptyLinePlaceholder":398},[49,12016,12017,12019,12021],{"class":51,"line":8712},[49,12018,4787],{"class":77},[49,12020,4790],{"class":159},[49,12022,1990],{"class":73},[49,12024,12025],{"class":51,"line":8718},[49,12026,2264],{"class":73},[14,12028,12029],{},"总结：",[742,12031,12032,12035,12038,12041],{},[33,12033,12034],{},"c++中程序运行前分为全局区和代码区",[33,12036,12037],{},"代码区特点是共享和只读",[33,12039,12040],{},"全局区中存放全局变量、静态变量、常量",[33,12042,12043],{},"常量区中存放const修饰的全局常量和字符串常量",[18,12045,12047],{"id":12046},"_512程序运行后","5.1.2程序运行后",[30,12049,12050],{},[33,12051,12052],{},"栈区：",[742,12054,12055,12062],{},[33,12056,12057,12058,12061],{},"由编译器自动分配释放, 存放",[112,12059,12060],{},"函数的参数值,局部变量","等",[33,12063,12064,12065,12068],{},"注意事项：",[112,12066,12067],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[40,12070,12072],{"className":829,"code":12071,"language":831,"meta":27,"style":27},"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",[46,12073,12074,12085,12089,12104,12116,12120,12124,12132,12137,12152,12170,12187,12197,12205],{"__ignoreMap":27},[49,12075,12076,12078,12080,12083],{"class":51,"line":52},[49,12077,844],{"class":77},[49,12079,7215],{"class":77},[49,12081,12082],{"class":55}," func",[49,12084,2674],{"class":73},[49,12086,12087],{"class":51,"line":63},[49,12088,2245],{"class":73},[49,12090,12091,12093,12095,12097,12099,12101],{"class":51,"line":70},[49,12092,2683],{"class":77},[49,12094,11566],{"class":73},[49,12096,78],{"class":77},[49,12098,2736],{"class":159},[49,12100,894],{"class":73},[49,12102,12103],{"class":66}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[49,12105,12106,12108,12110,12113],{"class":51,"line":219},[49,12107,4787],{"class":77},[49,12109,11281],{"class":77},[49,12111,12112],{"class":73},"a;",[49,12114,12115],{"class":66}," \u002F\u002F放回局部变量的地址\n",[49,12117,12118],{"class":51,"line":233},[49,12119,2264],{"class":73},[49,12121,12122],{"class":51,"line":241},[49,12123,399],{"emptyLinePlaceholder":398},[49,12125,12126,12128,12130],{"class":51,"line":1920},[49,12127,844],{"class":77},[49,12129,2671],{"class":55},[49,12131,11550],{"class":73},[49,12133,12134],{"class":51,"line":2011},[49,12135,12136],{"class":66},"    \u002F\u002F接受func的返回值\n",[49,12138,12139,12141,12143,12146,12148,12150],{"class":51,"line":2017},[49,12140,2683],{"class":77},[49,12142,7215],{"class":77},[49,12144,12145],{"class":73},"p ",[49,12147,78],{"class":77},[49,12149,12082],{"class":55},[49,12151,6333],{"class":73},[49,12153,12154,12156,12158,12160,12162,12164,12167],{"class":51,"line":2029},[49,12155,7226],{"class":73},[49,12157,1872],{"class":77},[49,12159,7215],{"class":77},[49,12161,12145],{"class":73},[49,12163,1872],{"class":77},[49,12165,12166],{"class":73}," endl;",[49,12168,12169],{"class":66}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[49,12171,12172,12174,12176,12178,12180,12182,12184],{"class":51,"line":2311},[49,12173,7226],{"class":73},[49,12175,1872],{"class":77},[49,12177,7215],{"class":77},[49,12179,12145],{"class":73},[49,12181,1872],{"class":77},[49,12183,12166],{"class":73},[49,12185,12186],{"class":66}," \u002F\u002F第二次这个数据不再保留\n",[49,12188,12189,12191,12193,12195],{"class":51,"line":2316},[49,12190,3001],{"class":55},[49,12192,841],{"class":73},[49,12194,3006],{"class":59},[49,12196,3416],{"class":73},[49,12198,12199,12201,12203],{"class":51,"line":2322},[49,12200,4787],{"class":77},[49,12202,4790],{"class":159},[49,12204,1990],{"class":73},[49,12206,12207],{"class":51,"line":2327},[49,12208,2264],{"class":73},[14,12210,12211],{},"输出结果：",[14,12213,12214],{},[25,12215],{"alt":12216,"src":12217},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,12219,12220],{},"总结：不要返回局部变量的地址",[30,12222,12223],{"start":63},[33,12224,12225],{},"堆区",[742,12227,12228,12231],{},[33,12229,12230],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[33,12232,12233],{},"在c++中主要利用new在堆区开辟内存",[40,12235,12237],{"className":829,"code":12236,"language":831,"meta":27,"style":27},"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",[46,12238,12239,12254,12258,12263,12284,12291,12295,12303,12307,12312,12326,12338],{"__ignoreMap":27},[49,12240,12241,12243,12246,12249,12251],{"class":51,"line":52},[49,12242,844],{"class":77},[49,12244,12245],{"class":77},"  *",[49,12247,12248],{"class":55},"func",[49,12250,3124],{"class":73},[49,12252,12253],{"class":66},"  \u002F\u002F函数返回指针\n",[49,12255,12256],{"class":51,"line":63},[49,12257,2245],{"class":73},[49,12259,12260],{"class":51,"line":70},[49,12261,12262],{"class":66},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[49,12264,12265,12267,12269,12271,12273,12276,12278,12280,12282],{"class":51,"line":219},[49,12266,4844],{"class":77},[49,12268,7215],{"class":77},[49,12270,14],{"class":73},[49,12272,78],{"class":77},[49,12274,12275],{"class":77}," new",[49,12277,3080],{"class":77},[49,12279,841],{"class":73},[49,12281,1275],{"class":159},[49,12283,3416],{"class":73},[49,12285,12286,12288],{"class":51,"line":233},[49,12287,5078],{"class":77},[49,12289,12290],{"class":73}," p;\n",[49,12292,12293],{"class":51,"line":241},[49,12294,2264],{"class":73},[49,12296,12297,12299,12301],{"class":51,"line":1920},[49,12298,844],{"class":77},[49,12300,2671],{"class":55},[49,12302,2674],{"class":73},[49,12304,12305],{"class":51,"line":2011},[49,12306,2245],{"class":73},[49,12308,12309],{"class":51,"line":2017},[49,12310,12311],{"class":66},"    \u002F\u002F在堆区开辟数据\n",[49,12313,12314,12316,12318,12320,12322,12324],{"class":51,"line":2029},[49,12315,2683],{"class":77},[49,12317,7215],{"class":77},[49,12319,14],{"class":73},[49,12321,78],{"class":77},[49,12323,12248],{"class":55},[49,12325,6333],{"class":73},[49,12327,12328,12330,12332,12334,12336],{"class":51,"line":2311},[49,12329,2250],{"class":73},[49,12331,7116],{"class":77},[49,12333,14],{"class":73},[49,12335,1872],{"class":77},[49,12337,1894],{"class":73},[49,12339,12340],{"class":51,"line":2316},[49,12341,2264],{"class":73},[14,12343,12344],{},"图片展示：",[14,12346,12347],{},[25,12348],{"alt":12216,"src":12349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,12351,12352],{},"堆区内存由程序员管生死！！！",[30,12354,12355],{"start":70},[33,12356,12357],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,12359,12360],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,12362,12363,12364],{},"​语法：",[46,12365,12366],{}," new 数据类型",[14,12368,12369],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[40,12371,12373],{"className":829,"code":12372,"language":831,"meta":27,"style":27},"\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",[46,12374,12375,12380,12390,12394,12399,12404,12426,12430,12438,12442,12456,12468,12480,12492,12497,12502,12513,12517,12522,12530,12534,12539,12561,12587,12591,12609,12613,12639,12643,12655,12659,12664,12669,12677,12681,12685,12693,12697,12703,12709],{"__ignoreMap":27},[49,12376,12377],{"class":51,"line":52},[49,12378,12379],{"class":66},"\u002F\u002F1.new的基本语法\n",[49,12381,12382,12384,12386,12388],{"class":51,"line":63},[49,12383,844],{"class":77},[49,12385,7215],{"class":77},[49,12387,12248],{"class":55},[49,12389,2674],{"class":73},[49,12391,12392],{"class":51,"line":70},[49,12393,2245],{"class":73},[49,12395,12396],{"class":51,"line":219},[49,12397,12398],{"class":66},"    \u002F\u002F在堆区创建整型数据\n",[49,12400,12401],{"class":51,"line":233},[49,12402,12403],{"class":66},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[49,12405,12406,12408,12410,12412,12415,12417,12419,12421,12423],{"class":51,"line":241},[49,12407,2683],{"class":77},[49,12409,7215],{"class":77},[49,12411,14],{"class":73},[49,12413,12414],{"class":77},"=new",[49,12416,3080],{"class":77},[49,12418,841],{"class":73},[49,12420,1275],{"class":159},[49,12422,6663],{"class":73},[49,12424,12425],{"class":66},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[49,12427,12428],{"class":51,"line":1920},[49,12429,2264],{"class":73},[49,12431,12432,12434,12436],{"class":51,"line":2011},[49,12433,6061],{"class":77},[49,12435,6285],{"class":55},[49,12437,2674],{"class":73},[49,12439,12440],{"class":51,"line":2017},[49,12441,2245],{"class":73},[49,12443,12444,12446,12448,12450,12452,12454],{"class":51,"line":2029},[49,12445,2683],{"class":77},[49,12447,7215],{"class":77},[49,12449,14],{"class":73},[49,12451,78],{"class":77},[49,12453,12248],{"class":55},[49,12455,6333],{"class":73},[49,12457,12458,12460,12462,12464,12466],{"class":51,"line":2311},[49,12459,2250],{"class":73},[49,12461,7116],{"class":77},[49,12463,14],{"class":73},[49,12465,1872],{"class":77},[49,12467,1894],{"class":73},[49,12469,12470,12472,12474,12476,12478],{"class":51,"line":2316},[49,12471,2250],{"class":73},[49,12473,7116],{"class":77},[49,12475,14],{"class":73},[49,12477,1872],{"class":77},[49,12479,1894],{"class":73},[49,12481,12482,12484,12486,12488,12490],{"class":51,"line":2322},[49,12483,2250],{"class":73},[49,12485,7116],{"class":77},[49,12487,14],{"class":73},[49,12489,1872],{"class":77},[49,12491,1894],{"class":73},[49,12493,12494],{"class":51,"line":2327},[49,12495,12496],{"class":66},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[49,12498,12499],{"class":51,"line":2341},[49,12500,12501],{"class":66},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[49,12503,12504,12507,12510],{"class":51,"line":2346},[49,12505,12506],{"class":77},"    delete",[49,12508,12509],{"class":73}," p;",[49,12511,12512],{"class":66},"\u002F\u002F删除这块地址\n",[49,12514,12515],{"class":51,"line":2352},[49,12516,2264],{"class":73},[49,12518,12519],{"class":51,"line":2373},[49,12520,12521],{"class":66},"\u002F\u002F2.在堆区利用new开辟数组\n",[49,12523,12524,12526,12528],{"class":51,"line":2378},[49,12525,6061],{"class":77},[49,12527,6354],{"class":55},[49,12529,2674],{"class":73},[49,12531,12532],{"class":51,"line":2392},[49,12533,2245],{"class":73},[49,12535,12536],{"class":51,"line":2397},[49,12537,12538],{"class":66},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[49,12540,12541,12543,12545,12547,12549,12551,12553,12555,12558],{"class":51,"line":2426},[49,12542,2683],{"class":77},[49,12544,7215],{"class":77},[49,12546,4577],{"class":73},[49,12548,12414],{"class":77},[49,12550,3080],{"class":77},[49,12552,1719],{"class":73},[49,12554,1275],{"class":159},[49,12556,12557],{"class":73},"];",[49,12559,12560],{"class":66},"\u002F\u002F10代表数组有10个元素\n",[49,12562,12563,12565,12567,12569,12571,12573,12575,12577,12579,12581,12583,12585],{"class":51,"line":2431},[49,12564,3898],{"class":77},[49,12566,2357],{"class":73},[49,12568,844],{"class":77},[49,12570,3729],{"class":73},[49,12572,78],{"class":77},[49,12574,1021],{"class":159},[49,12576,3736],{"class":73},[49,12578,1739],{"class":77},[49,12580,1275],{"class":159},[49,12582,3736],{"class":73},[49,12584,2990],{"class":77},[49,12586,847],{"class":73},[49,12588,12589],{"class":51,"line":2448},[49,12590,2728],{"class":73},[49,12592,12593,12596,12598,12600,12602,12604,12606],{"class":51,"line":2453},[49,12594,12595],{"class":73},"        arr[i]",[49,12597,78],{"class":77},[49,12599,1270],{"class":73},[49,12601,1310],{"class":77},[49,12603,1140],{"class":159},[49,12605,894],{"class":73},[49,12607,12608],{"class":66},"\u002F\u002F给10个元素赋值100～109\n",[49,12610,12611],{"class":51,"line":2458},[49,12612,2885],{"class":73},[49,12614,12615,12617,12619,12621,12623,12625,12627,12629,12631,12633,12635,12637],{"class":51,"line":2463},[49,12616,3898],{"class":77},[49,12618,2357],{"class":73},[49,12620,844],{"class":77},[49,12622,3729],{"class":73},[49,12624,78],{"class":77},[49,12626,1021],{"class":159},[49,12628,3736],{"class":73},[49,12630,1739],{"class":77},[49,12632,1275],{"class":159},[49,12634,3736],{"class":73},[49,12636,2990],{"class":77},[49,12638,847],{"class":73},[49,12640,12641],{"class":51,"line":2477},[49,12642,2728],{"class":73},[49,12644,12645,12647,12649,12651,12653],{"class":51,"line":2482},[49,12646,4148],{"class":73},[49,12648,1872],{"class":77},[49,12650,5051],{"class":73},[49,12652,1872],{"class":77},[49,12654,1894],{"class":73},[49,12656,12657],{"class":51,"line":3274},[49,12658,2885],{"class":73},[49,12660,12661],{"class":51,"line":3288},[49,12662,12663],{"class":66},"    \u002F\u002F释放堆区数组\n",[49,12665,12666],{"class":51,"line":3296},[49,12667,12668],{"class":66},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[49,12670,12671,12674],{"class":51,"line":3301},[49,12672,12673],{"class":77},"    delete[]",[49,12675,12676],{"class":73}," arr;\n",[49,12678,12679],{"class":51,"line":3307},[49,12680,2264],{"class":73},[49,12682,12683],{"class":51,"line":3313},[49,12684,399],{"emptyLinePlaceholder":398},[49,12686,12687,12689,12691],{"class":51,"line":3318},[49,12688,844],{"class":77},[49,12690,2671],{"class":55},[49,12692,2674],{"class":73},[49,12694,12695],{"class":51,"line":8645},[49,12696,2245],{"class":73},[49,12698,12699,12701],{"class":51,"line":8669},[49,12700,6330],{"class":55},[49,12702,6333],{"class":73},[49,12704,12705,12707],{"class":51,"line":8674},[49,12706,6399],{"class":55},[49,12708,6333],{"class":73},[49,12710,12711],{"class":51,"line":8680},[49,12712,2264],{"class":73},[757,12714,12715],{},"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":27,"searchDepth":63,"depth":63,"links":12717},[12718],{"id":11386,"depth":63,"text":11387,"children":12719},[12720,12721],{"id":11418,"depth":70,"text":11419},{"id":12046,"depth":70,"text":12047},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11378,"description":27},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12728,"title":12729,"body":12730,"description":27,"extension":766,"meta":14211,"navigation":398,"path":14212,"seo":14213,"stem":14214,"__hash__":14215},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12731,"toc":14203},[12732,12735,12739,12742,12745,12914,12918,12923,12940,12945,13097,13101,13104,13107,13501,13505,13508,13513,13516,13828,13832,13838,13998,14000,14008,14012,14015,14022,14200],[10,12733,12729],{"id":12734},"_6引用",[782,12736,12738],{"id":12737},"_61引用基本用法","6.1引用基本用法",[14,12740,12741],{},"引用的本质：给变量起别名",[14,12743,12744],{},"语法：数据类型 &别名=原名",[40,12746,12748],{"className":829,"code":12747,"language":831,"meta":27,"style":27},"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",[46,12749,12750,12758,12762,12774,12786,12790,12809,12828,12832,12843,12847,12866,12884,12888,12898,12902,12910],{"__ignoreMap":27},[49,12751,12752,12754,12756],{"class":51,"line":52},[49,12753,844],{"class":77},[49,12755,2671],{"class":55},[49,12757,11550],{"class":73},[49,12759,12760],{"class":51,"line":63},[49,12761,399],{"emptyLinePlaceholder":398},[49,12763,12764,12766,12768,12770,12772],{"class":51,"line":70},[49,12765,2683],{"class":77},[49,12767,11566],{"class":73},[49,12769,78],{"class":77},[49,12771,2736],{"class":159},[49,12773,1990],{"class":73},[49,12775,12776,12778,12780,12782,12784],{"class":51,"line":219},[49,12777,2683],{"class":77},[49,12779,11281],{"class":77},[49,12781,11642],{"class":73},[49,12783,78],{"class":77},[49,12785,2132],{"class":73},[49,12787,12788],{"class":51,"line":233},[49,12789,399],{"emptyLinePlaceholder":398},[49,12791,12792,12794,12796,12799,12801,12803,12805,12807],{"class":51,"line":241},[49,12793,7226],{"class":73},[49,12795,1872],{"class":77},[49,12797,12798],{"class":59}," \"a = \"",[49,12800,2144],{"class":77},[49,12802,11566],{"class":73},[49,12804,1872],{"class":77},[49,12806,12166],{"class":73},[49,12808,7965],{"class":66},[49,12810,12811,12813,12815,12818,12820,12822,12824,12826],{"class":51,"line":1920},[49,12812,7226],{"class":73},[49,12814,1872],{"class":77},[49,12816,12817],{"class":59}," \"b = \"",[49,12819,2144],{"class":77},[49,12821,11579],{"class":73},[49,12823,1872],{"class":77},[49,12825,12166],{"class":73},[49,12827,7965],{"class":66},[49,12829,12830],{"class":51,"line":2011},[49,12831,399],{"emptyLinePlaceholder":398},[49,12833,12834,12837,12839,12841],{"class":51,"line":2017},[49,12835,12836],{"class":73},"    b ",[49,12838,78],{"class":77},[49,12840,6451],{"class":159},[49,12842,1990],{"class":73},[49,12844,12845],{"class":51,"line":2029},[49,12846,399],{"emptyLinePlaceholder":398},[49,12848,12849,12851,12853,12855,12857,12859,12861,12863],{"class":51,"line":2311},[49,12850,7226],{"class":73},[49,12852,1872],{"class":77},[49,12854,12798],{"class":59},[49,12856,2144],{"class":77},[49,12858,11566],{"class":73},[49,12860,1872],{"class":77},[49,12862,12166],{"class":73},[49,12864,12865],{"class":66},"\u002F\u002F100\n",[49,12867,12868,12870,12872,12874,12876,12878,12880,12882],{"class":51,"line":2316},[49,12869,7226],{"class":73},[49,12871,1872],{"class":77},[49,12873,12817],{"class":59},[49,12875,2144],{"class":77},[49,12877,11579],{"class":73},[49,12879,1872],{"class":77},[49,12881,12166],{"class":73},[49,12883,12865],{"class":66},[49,12885,12886],{"class":51,"line":2322},[49,12887,399],{"emptyLinePlaceholder":398},[49,12889,12890,12892,12894,12896],{"class":51,"line":2327},[49,12891,3001],{"class":55},[49,12893,841],{"class":73},[49,12895,3006],{"class":59},[49,12897,3416],{"class":73},[49,12899,12900],{"class":51,"line":2341},[49,12901,399],{"emptyLinePlaceholder":398},[49,12903,12904,12906,12908],{"class":51,"line":2346},[49,12905,4787],{"class":77},[49,12907,4790],{"class":159},[49,12909,1990],{"class":73},[49,12911,12912],{"class":51,"line":2352},[49,12913,2264],{"class":73},[782,12915,12917],{"id":12916},"_62引用的注意事项","6.2引用的注意事项",[30,12919,12920],{},[33,12921,12922],{},"引用必须要初始化",[40,12924,12926],{"className":829,"code":12925,"language":831,"meta":27,"style":27},"int &b;\u002F\u002F非常错误！\n",[46,12927,12928],{"__ignoreMap":27},[49,12929,12930,12932,12934,12937],{"class":51,"line":52},[49,12931,844],{"class":77},[49,12933,11281],{"class":77},[49,12935,12936],{"class":73},"b;",[49,12938,12939],{"class":66},"\u002F\u002F非常错误！\n",[30,12941,12942],{"start":63},[33,12943,12944],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[40,12946,12948],{"className":829,"code":12947,"language":831,"meta":27,"style":27},"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",[46,12949,12950,12958,12970,12982,12990,13006,13019,13037,13055,13075,13085,13093],{"__ignoreMap":27},[49,12951,12952,12954,12956],{"class":51,"line":52},[49,12953,844],{"class":77},[49,12955,2671],{"class":55},[49,12957,11550],{"class":73},[49,12959,12960,12962,12964,12966,12968],{"class":51,"line":63},[49,12961,2683],{"class":77},[49,12963,11566],{"class":73},[49,12965,78],{"class":77},[49,12967,2736],{"class":159},[49,12969,1990],{"class":73},[49,12971,12972,12974,12976,12978,12980],{"class":51,"line":70},[49,12973,2683],{"class":77},[49,12975,11579],{"class":73},[49,12977,78],{"class":77},[49,12979,9647],{"class":159},[49,12981,1990],{"class":73},[49,12983,12984,12987],{"class":51,"line":219},[49,12985,12986],{"class":66},"    \u002F\u002Fint &c;",[49,12988,12989],{"class":66}," \u002F\u002F错误，引用必须初始化\n",[49,12991,12992,12994,12996,12998,13000,13003],{"class":51,"line":233},[49,12993,2683],{"class":77},[49,12995,11281],{"class":77},[49,12997,3643],{"class":73},[49,12999,78],{"class":77},[49,13001,13002],{"class":73}," a;",[49,13004,13005],{"class":66}," \u002F\u002F一旦初始化后，就不可以更改\n",[49,13007,13008,13011,13013,13016],{"class":51,"line":241},[49,13009,13010],{"class":73},"    c ",[49,13012,78],{"class":77},[49,13014,13015],{"class":73}," b;",[49,13017,13018],{"class":66}," \u002F\u002F这是赋值操作，不是更改引用\n",[49,13020,13021,13023,13025,13027,13029,13031,13033,13035],{"class":51,"line":1920},[49,13022,7226],{"class":73},[49,13024,1872],{"class":77},[49,13026,12798],{"class":59},[49,13028,2144],{"class":77},[49,13030,11566],{"class":73},[49,13032,1872],{"class":77},[49,13034,12166],{"class":73},[49,13036,7950],{"class":66},[49,13038,13039,13041,13043,13045,13047,13049,13051,13053],{"class":51,"line":2011},[49,13040,7226],{"class":73},[49,13042,1872],{"class":77},[49,13044,12817],{"class":59},[49,13046,2144],{"class":77},[49,13048,11579],{"class":73},[49,13050,1872],{"class":77},[49,13052,12166],{"class":73},[49,13054,7950],{"class":66},[49,13056,13057,13059,13061,13064,13066,13069,13071,13073],{"class":51,"line":2017},[49,13058,7226],{"class":73},[49,13060,1872],{"class":77},[49,13062,13063],{"class":59}," \"c = \"",[49,13065,2144],{"class":77},[49,13067,13068],{"class":73}," c ",[49,13070,1872],{"class":77},[49,13072,12166],{"class":73},[49,13074,7950],{"class":66},[49,13076,13077,13079,13081,13083],{"class":51,"line":2029},[49,13078,3001],{"class":55},[49,13080,841],{"class":73},[49,13082,3006],{"class":59},[49,13084,3416],{"class":73},[49,13086,13087,13089,13091],{"class":51,"line":2311},[49,13088,4787],{"class":77},[49,13090,4790],{"class":159},[49,13092,1990],{"class":73},[49,13094,13095],{"class":51,"line":2316},[49,13096,2264],{"class":73},[782,13098,13100],{"id":13099},"_63引用做函数参数","6.3引用做函数参数",[14,13102,13103],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,13105,13106],{},"优点：可以简化指针修改实参",[40,13108,13110],{"className":829,"code":13109,"language":831,"meta":27,"style":27},"\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",[46,13111,13112,13117,13140,13151,13161,13170,13174,13178,13183,13205,13217,13229,13239,13243,13247,13252,13274,13284,13292,13300,13304,13308,13316,13320,13332,13344,13348,13359,13385,13389,13409,13433,13437,13447,13471,13475,13485,13489,13497],{"__ignoreMap":27},[49,13113,13114],{"class":51,"line":52},[49,13115,13116],{"class":66},"\u002F\u002F1. 值传递\n",[49,13118,13119,13121,13124,13126,13128,13130,13133,13135,13137],{"class":51,"line":63},[49,13120,6061],{"class":77},[49,13122,13123],{"class":55}," mySwap01",[49,13125,841],{"class":73},[49,13127,844],{"class":77},[49,13129,2098],{"class":5913},[49,13131,13132],{"class":73},", ",[49,13134,844],{"class":77},[49,13136,3530],{"class":5913},[49,13138,13139],{"class":73},") {\n",[49,13141,13142,13144,13147,13149],{"class":51,"line":70},[49,13143,2683],{"class":77},[49,13145,13146],{"class":73}," temp ",[49,13148,78],{"class":77},[49,13150,2132],{"class":73},[49,13152,13153,13156,13158],{"class":51,"line":219},[49,13154,13155],{"class":73},"    a ",[49,13157,78],{"class":77},[49,13159,13160],{"class":73}," b;\n",[49,13162,13163,13165,13167],{"class":51,"line":233},[49,13164,12836],{"class":73},[49,13166,78],{"class":77},[49,13168,13169],{"class":73}," temp;\n",[49,13171,13172],{"class":51,"line":241},[49,13173,2264],{"class":73},[49,13175,13176],{"class":51,"line":1920},[49,13177,399],{"emptyLinePlaceholder":398},[49,13179,13180],{"class":51,"line":2011},[49,13181,13182],{"class":66},"\u002F\u002F2. 地址传递\n",[49,13184,13185,13187,13190,13192,13195,13197,13199,13201,13203],{"class":51,"line":2017},[49,13186,6061],{"class":77},[49,13188,13189],{"class":55}," mySwap02",[49,13191,841],{"class":73},[49,13193,13194],{"class":77},"int*",[49,13196,2098],{"class":5913},[49,13198,13132],{"class":73},[49,13200,13194],{"class":77},[49,13202,3530],{"class":5913},[49,13204,13139],{"class":73},[49,13206,13207,13209,13211,13213,13215],{"class":51,"line":2029},[49,13208,2683],{"class":77},[49,13210,13146],{"class":73},[49,13212,78],{"class":77},[49,13214,7215],{"class":77},[49,13216,6894],{"class":73},[49,13218,13219,13221,13223,13225,13227],{"class":51,"line":2311},[49,13220,7100],{"class":77},[49,13222,11616],{"class":73},[49,13224,78],{"class":77},[49,13226,7215],{"class":77},[49,13228,6766],{"class":73},[49,13230,13231,13233,13235,13237],{"class":51,"line":2316},[49,13232,7100],{"class":77},[49,13234,11642],{"class":73},[49,13236,78],{"class":77},[49,13238,13169],{"class":73},[49,13240,13241],{"class":51,"line":2322},[49,13242,2264],{"class":73},[49,13244,13245],{"class":51,"line":2327},[49,13246,399],{"emptyLinePlaceholder":398},[49,13248,13249],{"class":51,"line":2341},[49,13250,13251],{"class":66},"\u002F\u002F3. 引用传递\n",[49,13253,13254,13256,13259,13261,13264,13266,13268,13270,13272],{"class":51,"line":2346},[49,13255,6061],{"class":77},[49,13257,13258],{"class":55}," mySwap03",[49,13260,841],{"class":73},[49,13262,13263],{"class":77},"int&",[49,13265,2098],{"class":5913},[49,13267,13132],{"class":73},[49,13269,13263],{"class":77},[49,13271,3530],{"class":5913},[49,13273,13139],{"class":73},[49,13275,13276,13278,13280,13282],{"class":51,"line":2352},[49,13277,2683],{"class":77},[49,13279,13146],{"class":73},[49,13281,78],{"class":77},[49,13283,2132],{"class":73},[49,13285,13286,13288,13290],{"class":51,"line":2373},[49,13287,13155],{"class":73},[49,13289,78],{"class":77},[49,13291,13160],{"class":73},[49,13293,13294,13296,13298],{"class":51,"line":2378},[49,13295,12836],{"class":73},[49,13297,78],{"class":77},[49,13299,13169],{"class":73},[49,13301,13302],{"class":51,"line":2392},[49,13303,2264],{"class":73},[49,13305,13306],{"class":51,"line":2397},[49,13307,399],{"emptyLinePlaceholder":398},[49,13309,13310,13312,13314],{"class":51,"line":2426},[49,13311,844],{"class":77},[49,13313,2671],{"class":55},[49,13315,11550],{"class":73},[49,13317,13318],{"class":51,"line":2431},[49,13319,399],{"emptyLinePlaceholder":398},[49,13321,13322,13324,13326,13328,13330],{"class":51,"line":2448},[49,13323,2683],{"class":77},[49,13325,11566],{"class":73},[49,13327,78],{"class":77},[49,13329,2736],{"class":159},[49,13331,1990],{"class":73},[49,13333,13334,13336,13338,13340,13342],{"class":51,"line":2453},[49,13335,2683],{"class":77},[49,13337,11579],{"class":73},[49,13339,78],{"class":77},[49,13341,9647],{"class":159},[49,13343,1990],{"class":73},[49,13345,13346],{"class":51,"line":2458},[49,13347,399],{"emptyLinePlaceholder":398},[49,13349,13350,13353,13356],{"class":51,"line":2463},[49,13351,13352],{"class":55},"    mySwap01",[49,13354,13355],{"class":73},"(a, b);",[49,13357,13358],{"class":66},"\u002F\u002F值传递，形参不会修饰实参\n",[49,13360,13361,13363,13365,13368,13370,13372,13374,13377,13379,13381,13383],{"class":51,"line":2477},[49,13362,7226],{"class":73},[49,13364,1872],{"class":77},[49,13366,13367],{"class":59}," \"a:\"",[49,13369,2144],{"class":77},[49,13371,11566],{"class":73},[49,13373,1872],{"class":77},[49,13375,13376],{"class":59}," \" b:\"",[49,13378,2144],{"class":77},[49,13380,11579],{"class":73},[49,13382,1872],{"class":77},[49,13384,9537],{"class":73},[49,13386,13387],{"class":51,"line":2482},[49,13388,399],{"emptyLinePlaceholder":398},[49,13390,13391,13394,13396,13398,13401,13403,13406],{"class":51,"line":3274},[49,13392,13393],{"class":55},"    mySwap02",[49,13395,841],{"class":73},[49,13397,1182],{"class":77},[49,13399,13400],{"class":73},"a, ",[49,13402,1182],{"class":77},[49,13404,13405],{"class":73},"b);",[49,13407,13408],{"class":66},"\u002F\u002F地址传递，形参会修饰实参\n",[49,13410,13411,13413,13415,13417,13419,13421,13423,13425,13427,13429,13431],{"class":51,"line":3288},[49,13412,7226],{"class":73},[49,13414,1872],{"class":77},[49,13416,13367],{"class":59},[49,13418,2144],{"class":77},[49,13420,11566],{"class":73},[49,13422,1872],{"class":77},[49,13424,13376],{"class":59},[49,13426,2144],{"class":77},[49,13428,11579],{"class":73},[49,13430,1872],{"class":77},[49,13432,9537],{"class":73},[49,13434,13435],{"class":51,"line":3296},[49,13436,399],{"emptyLinePlaceholder":398},[49,13438,13439,13442,13444],{"class":51,"line":3301},[49,13440,13441],{"class":55},"    mySwap03",[49,13443,13355],{"class":73},[49,13445,13446],{"class":66},"\u002F\u002F引用传递，形参会修饰实参\n",[49,13448,13449,13451,13453,13455,13457,13459,13461,13463,13465,13467,13469],{"class":51,"line":3307},[49,13450,7226],{"class":73},[49,13452,1872],{"class":77},[49,13454,13367],{"class":59},[49,13456,2144],{"class":77},[49,13458,11566],{"class":73},[49,13460,1872],{"class":77},[49,13462,13376],{"class":59},[49,13464,2144],{"class":77},[49,13466,11579],{"class":73},[49,13468,1872],{"class":77},[49,13470,9537],{"class":73},[49,13472,13473],{"class":51,"line":3313},[49,13474,399],{"emptyLinePlaceholder":398},[49,13476,13477,13479,13481,13483],{"class":51,"line":3318},[49,13478,3001],{"class":55},[49,13480,841],{"class":73},[49,13482,3006],{"class":59},[49,13484,3416],{"class":73},[49,13486,13487],{"class":51,"line":8645},[49,13488,399],{"emptyLinePlaceholder":398},[49,13490,13491,13493,13495],{"class":51,"line":8669},[49,13492,4787],{"class":77},[49,13494,4790],{"class":159},[49,13496,1990],{"class":73},[49,13498,13499],{"class":51,"line":8674},[49,13500,2264],{"class":73},[782,13502,13504],{"id":13503},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,13506,13507],{},"作用：引用是可以作为函数的返回值存在的",[14,13509,9722,13510],{},[112,13511,13512],{},"不要返回局部变量引用",[14,13514,13515],{},"用法：函数调用作为左值",[40,13517,13519],{"className":10638,"code":13518,"language":10640,"meta":27,"style":27},"\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",[46,13520,13521,13526,13534,13549,13555,13559,13563,13568,13576,13593,13599,13603,13607,13615,13619,13624,13638,13658,13677,13681,13686,13699,13719,13737,13741,13757,13761,13780,13798,13802,13812,13816,13824],{"__ignoreMap":27},[49,13522,13523],{"class":51,"line":52},[49,13524,13525],{"class":66},"\u002F\u002F返回局部变量引用\n",[49,13527,13528,13530,13532],{"class":51,"line":63},[49,13529,13263],{"class":77},[49,13531,6285],{"class":55},[49,13533,11550],{"class":73},[49,13535,13536,13538,13540,13542,13544,13546],{"class":51,"line":70},[49,13537,2683],{"class":77},[49,13539,11566],{"class":73},[49,13541,78],{"class":77},[49,13543,2736],{"class":159},[49,13545,894],{"class":73},[49,13547,13548],{"class":66}," \u002F\u002F局部变量\n",[49,13550,13551,13553],{"class":51,"line":219},[49,13552,4787],{"class":77},[49,13554,2132],{"class":73},[49,13556,13557],{"class":51,"line":233},[49,13558,2264],{"class":73},[49,13560,13561],{"class":51,"line":241},[49,13562,399],{"emptyLinePlaceholder":398},[49,13564,13565],{"class":51,"line":1920},[49,13566,13567],{"class":66},"\u002F\u002F返回静态变量引用\n",[49,13569,13570,13572,13574],{"class":51,"line":2011},[49,13571,13263],{"class":77},[49,13573,6354],{"class":55},[49,13575,11550],{"class":73},[49,13577,13578,13580,13582,13584,13586,13588,13590],{"class":51,"line":2017},[49,13579,11717],{"class":77},[49,13581,3080],{"class":77},[49,13583,11566],{"class":73},[49,13585,78],{"class":77},[49,13587,9647],{"class":159},[49,13589,894],{"class":73},[49,13591,13592],{"class":66},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[49,13594,13595,13597],{"class":51,"line":2029},[49,13596,4787],{"class":77},[49,13598,2132],{"class":73},[49,13600,13601],{"class":51,"line":2311},[49,13602,2264],{"class":73},[49,13604,13605],{"class":51,"line":2316},[49,13606,399],{"emptyLinePlaceholder":398},[49,13608,13609,13611,13613],{"class":51,"line":2322},[49,13610,844],{"class":77},[49,13612,2671],{"class":55},[49,13614,11550],{"class":73},[49,13616,13617],{"class":51,"line":2327},[49,13618,399],{"emptyLinePlaceholder":398},[49,13620,13621],{"class":51,"line":2341},[49,13622,13623],{"class":66},"    \u002F\u002F不能返回局部变量的引用\n",[49,13625,13626,13629,13632,13634,13636],{"class":51,"line":2346},[49,13627,13628],{"class":77},"    int&",[49,13630,13631],{"class":73}," ref ",[49,13633,78],{"class":77},[49,13635,6285],{"class":55},[49,13637,6333],{"class":73},[49,13639,13640,13642,13644,13647,13649,13651,13653,13655],{"class":51,"line":2352},[49,13641,7226],{"class":73},[49,13643,1872],{"class":77},[49,13645,13646],{"class":59}," \"ref = \"",[49,13648,2144],{"class":77},[49,13650,13631],{"class":73},[49,13652,1872],{"class":77},[49,13654,12166],{"class":73},[49,13656,13657],{"class":66},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[49,13659,13660,13662,13664,13666,13668,13670,13672,13674],{"class":51,"line":2373},[49,13661,7226],{"class":73},[49,13663,1872],{"class":77},[49,13665,13646],{"class":59},[49,13667,2144],{"class":77},[49,13669,13631],{"class":73},[49,13671,1872],{"class":77},[49,13673,12166],{"class":73},[49,13675,13676],{"class":66},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[49,13678,13679],{"class":51,"line":2378},[49,13680,399],{"emptyLinePlaceholder":398},[49,13682,13683],{"class":51,"line":2392},[49,13684,13685],{"class":66},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[49,13687,13688,13690,13693,13695,13697],{"class":51,"line":2397},[49,13689,13628],{"class":77},[49,13691,13692],{"class":73}," ref2 ",[49,13694,78],{"class":77},[49,13696,6354],{"class":55},[49,13698,6333],{"class":73},[49,13700,13701,13703,13705,13708,13710,13712,13714,13716],{"class":51,"line":2426},[49,13702,7226],{"class":73},[49,13704,1872],{"class":77},[49,13706,13707],{"class":59}," \"ref2 = \"",[49,13709,2144],{"class":77},[49,13711,13692],{"class":73},[49,13713,1872],{"class":77},[49,13715,12166],{"class":73},[49,13717,13718],{"class":66}," \u002F\u002F20\n",[49,13720,13721,13723,13725,13727,13729,13731,13733,13735],{"class":51,"line":2431},[49,13722,7226],{"class":73},[49,13724,1872],{"class":77},[49,13726,13707],{"class":59},[49,13728,2144],{"class":77},[49,13730,13692],{"class":73},[49,13732,1872],{"class":77},[49,13734,12166],{"class":73},[49,13736,13718],{"class":66},[49,13738,13739],{"class":51,"line":2448},[49,13740,399],{"emptyLinePlaceholder":398},[49,13742,13743,13745,13748,13750,13752,13754],{"class":51,"line":2453},[49,13744,6399],{"class":55},[49,13746,13747],{"class":73},"() ",[49,13749,78],{"class":77},[49,13751,3696],{"class":159},[49,13753,894],{"class":73},[49,13755,13756],{"class":66},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[49,13758,13759],{"class":51,"line":2458},[49,13760,399],{"emptyLinePlaceholder":398},[49,13762,13763,13765,13767,13769,13771,13773,13775,13777],{"class":51,"line":2463},[49,13764,7226],{"class":73},[49,13766,1872],{"class":77},[49,13768,13707],{"class":59},[49,13770,2144],{"class":77},[49,13772,13692],{"class":73},[49,13774,1872],{"class":77},[49,13776,12166],{"class":73},[49,13778,13779],{"class":66}," \u002F\u002F1000\n",[49,13781,13782,13784,13786,13788,13790,13792,13794,13796],{"class":51,"line":2477},[49,13783,7226],{"class":73},[49,13785,1872],{"class":77},[49,13787,13707],{"class":59},[49,13789,2144],{"class":77},[49,13791,13692],{"class":73},[49,13793,1872],{"class":77},[49,13795,12166],{"class":73},[49,13797,13779],{"class":66},[49,13799,13800],{"class":51,"line":2482},[49,13801,399],{"emptyLinePlaceholder":398},[49,13803,13804,13806,13808,13810],{"class":51,"line":3274},[49,13805,3001],{"class":55},[49,13807,841],{"class":73},[49,13809,3006],{"class":59},[49,13811,3416],{"class":73},[49,13813,13814],{"class":51,"line":3288},[49,13815,399],{"emptyLinePlaceholder":398},[49,13817,13818,13820,13822],{"class":51,"line":3296},[49,13819,4787],{"class":77},[49,13821,4790],{"class":159},[49,13823,1990],{"class":73},[49,13825,13826],{"class":51,"line":3301},[49,13827,2264],{"class":73},[782,13829,13831],{"id":13830},"_65引用的本质","6.5引用的本质",[14,13833,13834,13835],{},"本质：",[112,13836,13837],{},"引用的本质在c++内部实现是一个指针常量.",[40,13839,13841],{"className":829,"code":13840,"language":831,"meta":27,"style":27},"\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",[46,13842,13843,13848,13864,13878,13882,13891,13903,13908,13913,13924,13937,13941,13957,13974,13978,13986,13994],{"__ignoreMap":27},[49,13844,13845],{"class":51,"line":52},[49,13846,13847],{"class":66},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[49,13849,13850,13852,13854,13856,13858,13861],{"class":51,"line":63},[49,13851,6061],{"class":77},[49,13853,12082],{"class":55},[49,13855,841],{"class":73},[49,13857,13263],{"class":77},[49,13859,13860],{"class":5913}," ref",[49,13862,13863],{"class":73},"){\n",[49,13865,13866,13869,13871,13873,13875],{"class":51,"line":70},[49,13867,13868],{"class":73},"    ref ",[49,13870,78],{"class":77},[49,13872,6451],{"class":159},[49,13874,894],{"class":73},[49,13876,13877],{"class":66}," \u002F\u002F ref是引用，转换为*ref = 100\n",[49,13879,13880],{"class":51,"line":219},[49,13881,2264],{"class":73},[49,13883,13884,13886,13888],{"class":51,"line":233},[49,13885,844],{"class":77},[49,13887,2671],{"class":55},[49,13889,13890],{"class":73},"(){\n",[49,13892,13893,13895,13897,13899,13901],{"class":51,"line":241},[49,13894,2683],{"class":77},[49,13896,11566],{"class":73},[49,13898,78],{"class":77},[49,13900,2736],{"class":159},[49,13902,1990],{"class":73},[49,13904,13905],{"class":51,"line":1920},[49,13906,13907],{"class":73},"    \n",[49,13909,13910],{"class":51,"line":2011},[49,13911,13912],{"class":66},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[49,13914,13915,13917,13919,13921],{"class":51,"line":2017},[49,13916,13628],{"class":77},[49,13918,13631],{"class":73},[49,13920,78],{"class":77},[49,13922,13923],{"class":73}," a; \n",[49,13925,13926,13928,13930,13932,13934],{"class":51,"line":2029},[49,13927,13868],{"class":73},[49,13929,78],{"class":77},[49,13931,9647],{"class":159},[49,13933,894],{"class":73},[49,13935,13936],{"class":66}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[49,13938,13939],{"class":51,"line":2311},[49,13940,13907],{"class":73},[49,13942,13943,13945,13947,13949,13951,13953,13955],{"class":51,"line":2316},[49,13944,7226],{"class":73},[49,13946,1872],{"class":77},[49,13948,13367],{"class":59},[49,13950,2144],{"class":77},[49,13952,11566],{"class":73},[49,13954,1872],{"class":77},[49,13956,9537],{"class":73},[49,13958,13959,13961,13963,13966,13968,13970,13972],{"class":51,"line":2322},[49,13960,7226],{"class":73},[49,13962,1872],{"class":77},[49,13964,13965],{"class":59}," \"ref:\"",[49,13967,2144],{"class":77},[49,13969,13631],{"class":73},[49,13971,1872],{"class":77},[49,13973,9537],{"class":73},[49,13975,13976],{"class":51,"line":2327},[49,13977,13907],{"class":73},[49,13979,13980,13983],{"class":51,"line":2341},[49,13981,13982],{"class":55},"    func",[49,13984,13985],{"class":73},"(a);\n",[49,13987,13988,13990,13992],{"class":51,"line":2346},[49,13989,4787],{"class":77},[49,13991,4790],{"class":159},[49,13993,1990],{"class":73},[49,13995,13996],{"class":51,"line":2352},[49,13997,2264],{"class":73},[14,13999,12029],{},[30,14001,14002,14005],{},[33,14003,14004],{},"引用的本质，就是一个指针常量",[33,14006,14007],{},"引用一旦初始化，就不可以发生改变",[782,14009,14011],{"id":14010},"_66常量引用","6.6常量引用",[14,14013,14014],{},"作用：常量引用主要用来修饰形参",[14,14016,14017,14018,14021],{},"在函数形参列表中，可以加",[112,14019,14020],{},"const修饰形参","，防止形参改变实参",[40,14023,14025],{"className":829,"code":14024,"language":831,"meta":27,"style":27},"\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",[46,14026,14027,14032,14037,14056,14061,14074,14078,14082,14090,14094,14099,14104,14118,14122,14130,14142,14146,14151,14163,14170,14174,14184,14188,14196],{"__ignoreMap":27},[49,14028,14029],{"class":51,"line":52},[49,14030,14031],{"class":66},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[49,14033,14034],{"class":51,"line":63},[49,14035,14036],{"class":66},"\u002F\u002F加上const就不能修改实参的\n",[49,14038,14039,14041,14044,14046,14048,14051,14054],{"class":51,"line":70},[49,14040,6061],{"class":77},[49,14042,14043],{"class":55}," showValue",[49,14045,841],{"class":73},[49,14047,7489],{"class":77},[49,14049,14050],{"class":77}," int&",[49,14052,14053],{"class":5913}," v",[49,14055,13139],{"class":73},[49,14057,14058],{"class":51,"line":219},[49,14059,14060],{"class":66},"    \u002F\u002Fv += 100;\n",[49,14062,14063,14065,14067,14070,14072],{"class":51,"line":233},[49,14064,7226],{"class":73},[49,14066,1872],{"class":77},[49,14068,14069],{"class":73}," v ",[49,14071,1872],{"class":77},[49,14073,9537],{"class":73},[49,14075,14076],{"class":51,"line":241},[49,14077,2264],{"class":73},[49,14079,14080],{"class":51,"line":1920},[49,14081,399],{"emptyLinePlaceholder":398},[49,14083,14084,14086,14088],{"class":51,"line":2011},[49,14085,844],{"class":77},[49,14087,2671],{"class":55},[49,14089,11550],{"class":73},[49,14091,14092],{"class":51,"line":2017},[49,14093,399],{"emptyLinePlaceholder":398},[49,14095,14096],{"class":51,"line":2029},[49,14097,14098],{"class":66},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[49,14100,14101],{"class":51,"line":2311},[49,14102,14103],{"class":66},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[49,14105,14106,14108,14110,14112,14114,14116],{"class":51,"line":2316},[49,14107,11918],{"class":77},[49,14109,14050],{"class":77},[49,14111,13631],{"class":73},[49,14113,78],{"class":77},[49,14115,2736],{"class":159},[49,14117,1990],{"class":73},[49,14119,14120],{"class":51,"line":2322},[49,14121,399],{"emptyLinePlaceholder":398},[49,14123,14124,14127],{"class":51,"line":2327},[49,14125,14126],{"class":66},"    \u002F\u002Fref = 100;",[49,14128,14129],{"class":66},"  \u002F\u002F加入const后不可以修改变量\n",[49,14131,14132,14134,14136,14138,14140],{"class":51,"line":2341},[49,14133,7226],{"class":73},[49,14135,1872],{"class":77},[49,14137,13631],{"class":73},[49,14139,1872],{"class":77},[49,14141,9537],{"class":73},[49,14143,14144],{"class":51,"line":2346},[49,14145,399],{"emptyLinePlaceholder":398},[49,14147,14148],{"class":51,"line":2352},[49,14149,14150],{"class":66},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[49,14152,14153,14155,14157,14159,14161],{"class":51,"line":2373},[49,14154,2683],{"class":77},[49,14156,11566],{"class":73},[49,14158,78],{"class":77},[49,14160,2736],{"class":159},[49,14162,1990],{"class":73},[49,14164,14165,14168],{"class":51,"line":2378},[49,14166,14167],{"class":55},"    showValue",[49,14169,13985],{"class":73},[49,14171,14172],{"class":51,"line":2392},[49,14173,399],{"emptyLinePlaceholder":398},[49,14175,14176,14178,14180,14182],{"class":51,"line":2397},[49,14177,3001],{"class":55},[49,14179,841],{"class":73},[49,14181,3006],{"class":59},[49,14183,3416],{"class":73},[49,14185,14186],{"class":51,"line":2426},[49,14187,399],{"emptyLinePlaceholder":398},[49,14189,14190,14192,14194],{"class":51,"line":2431},[49,14191,4787],{"class":77},[49,14193,4790],{"class":159},[49,14195,1990],{"class":73},[49,14197,14198],{"class":51,"line":2448},[49,14199,2264],{"class":73},[757,14201,14202],{},"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":27,"searchDepth":63,"depth":63,"links":14204},[14205,14206,14207,14208,14209,14210],{"id":12737,"depth":63,"text":12738},{"id":12916,"depth":63,"text":12917},{"id":13099,"depth":63,"text":13100},{"id":13503,"depth":63,"text":13504},{"id":13830,"depth":63,"text":13831},{"id":14010,"depth":63,"text":14011},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12729,"description":27},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14217,"title":14218,"body":14219,"description":27,"extension":766,"meta":15300,"navigation":398,"path":15301,"seo":15302,"stem":15303,"__hash__":15304},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14220,"toc":15292},[14221,14224,14228,14231,14236,14468,14470,14481,14485,14488,14496,14600,14603,14607,14610,14614,14617,14622,14644,14650,14977,14980,14984,14992,15289],[10,14222,14218],{"id":14223},"_7函数高级部分",[782,14225,14227],{"id":14226},"_71函数默认参数","7.1函数默认参数",[14,14229,14230],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,14232,5878,14233],{},[46,14234,14235],{}," 返回值类型  函数名 （参数= 默认值）{}",[40,14237,14239],{"className":829,"code":14238,"language":831,"meta":27,"style":27},"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",[46,14240,14241,14276,14291,14295,14299,14304,14309,14338,14358,14368,14372,14376,14384,14388,14416,14438,14442,14452,14456,14464],{"__ignoreMap":27},[49,14242,14243,14245,14247,14249,14251,14253,14255,14257,14259,14262,14264,14266,14268,14270,14272,14274],{"class":51,"line":52},[49,14244,844],{"class":77},[49,14246,12082],{"class":55},[49,14248,841],{"class":73},[49,14250,844],{"class":77},[49,14252,2098],{"class":5913},[49,14254,13132],{"class":73},[49,14256,844],{"class":77},[49,14258,3530],{"class":5913},[49,14260,14261],{"class":77}," =",[49,14263,2736],{"class":159},[49,14265,13132],{"class":73},[49,14267,844],{"class":77},[49,14269,3546],{"class":5913},[49,14271,14261],{"class":77},[49,14273,2736],{"class":159},[49,14275,13139],{"class":73},[49,14277,14278,14280,14282,14284,14286,14288],{"class":51,"line":63},[49,14279,4787],{"class":77},[49,14281,11566],{"class":73},[49,14283,1310],{"class":77},[49,14285,11579],{"class":73},[49,14287,1310],{"class":77},[49,14289,14290],{"class":73}," c;\n",[49,14292,14293],{"class":51,"line":70},[49,14294,2264],{"class":73},[49,14296,14297],{"class":51,"line":219},[49,14298,399],{"emptyLinePlaceholder":398},[49,14300,14301],{"class":51,"line":233},[49,14302,14303],{"class":66},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[49,14305,14306],{"class":51,"line":241},[49,14307,14308],{"class":66},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[49,14310,14311,14313,14316,14318,14320,14322,14324,14326,14328,14330,14332,14334,14336],{"class":51,"line":1920},[49,14312,844],{"class":77},[49,14314,14315],{"class":55}," func2",[49,14317,841],{"class":73},[49,14319,844],{"class":77},[49,14321,2098],{"class":5913},[49,14323,14261],{"class":77},[49,14325,2736],{"class":159},[49,14327,13132],{"class":73},[49,14329,844],{"class":77},[49,14331,3530],{"class":5913},[49,14333,14261],{"class":77},[49,14335,2736],{"class":159},[49,14337,3416],{"class":73},[49,14339,14340,14342,14344,14346,14348,14350,14352,14354,14356],{"class":51,"line":2011},[49,14341,844],{"class":77},[49,14343,14315],{"class":55},[49,14345,841],{"class":73},[49,14347,844],{"class":77},[49,14349,2098],{"class":5913},[49,14351,13132],{"class":73},[49,14353,844],{"class":77},[49,14355,3530],{"class":5913},[49,14357,13139],{"class":73},[49,14359,14360,14362,14364,14366],{"class":51,"line":2017},[49,14361,4787],{"class":77},[49,14363,11566],{"class":73},[49,14365,1310],{"class":77},[49,14367,13160],{"class":73},[49,14369,14370],{"class":51,"line":2029},[49,14371,2264],{"class":73},[49,14373,14374],{"class":51,"line":2311},[49,14375,399],{"emptyLinePlaceholder":398},[49,14377,14378,14380,14382],{"class":51,"line":2316},[49,14379,844],{"class":77},[49,14381,2671],{"class":55},[49,14383,11550],{"class":73},[49,14385,14386],{"class":51,"line":2322},[49,14387,399],{"emptyLinePlaceholder":398},[49,14389,14390,14392,14394,14397,14399,14401,14403,14405,14407,14409,14412,14414],{"class":51,"line":2327},[49,14391,7226],{"class":73},[49,14393,1872],{"class":77},[49,14395,14396],{"class":59}," \"ret = \"",[49,14398,2144],{"class":77},[49,14400,12082],{"class":55},[49,14402,841],{"class":73},[49,14404,1529],{"class":159},[49,14406,13132],{"class":73},[49,14408,1529],{"class":159},[49,14410,14411],{"class":73},") ",[49,14413,1872],{"class":77},[49,14415,9537],{"class":73},[49,14417,14418,14420,14422,14424,14426,14428,14430,14432,14434,14436],{"class":51,"line":2341},[49,14419,7226],{"class":73},[49,14421,1872],{"class":77},[49,14423,14396],{"class":59},[49,14425,2144],{"class":77},[49,14427,12082],{"class":55},[49,14429,841],{"class":73},[49,14431,1140],{"class":159},[49,14433,14411],{"class":73},[49,14435,1872],{"class":77},[49,14437,9537],{"class":73},[49,14439,14440],{"class":51,"line":2346},[49,14441,399],{"emptyLinePlaceholder":398},[49,14443,14444,14446,14448,14450],{"class":51,"line":2352},[49,14445,3001],{"class":55},[49,14447,841],{"class":73},[49,14449,3006],{"class":59},[49,14451,3416],{"class":73},[49,14453,14454],{"class":51,"line":2373},[49,14455,399],{"emptyLinePlaceholder":398},[49,14457,14458,14460,14462],{"class":51,"line":2378},[49,14459,4787],{"class":77},[49,14461,4790],{"class":159},[49,14463,1990],{"class":73},[49,14465,14466],{"class":51,"line":2392},[49,14467,2264],{"class":73},[14,14469,12029],{},[30,14471,14472,14475,14478],{},[33,14473,14474],{},"我传就用我；没传就用你",[33,14476,14477],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[33,14479,14480],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[782,14482,14484],{"id":14483},"_72函数的占位参数","7.2函数的占位参数",[14,14486,14487],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,14489,14490,14492,14493],{},[112,14491,5878],{}," ",[46,14494,14495],{},"返回值类型 函数名 (数据类型){}",[40,14497,14499],{"className":829,"code":14498,"language":831,"meta":27,"style":27},"\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",[46,14500,14501,14506,14524,14537,14541,14549,14553,14570,14574,14584,14588,14596],{"__ignoreMap":27},[49,14502,14503],{"class":51,"line":52},[49,14504,14505],{"class":66},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[49,14507,14508,14510,14512,14514,14516,14518,14520,14522],{"class":51,"line":63},[49,14509,6061],{"class":77},[49,14511,12082],{"class":55},[49,14513,841],{"class":73},[49,14515,844],{"class":77},[49,14517,2098],{"class":5913},[49,14519,13132],{"class":73},[49,14521,844],{"class":77},[49,14523,13139],{"class":73},[49,14525,14526,14528,14530,14533,14535],{"class":51,"line":70},[49,14527,7226],{"class":73},[49,14529,1872],{"class":77},[49,14531,14532],{"class":59}," \"this is func\"",[49,14534,2144],{"class":77},[49,14536,9537],{"class":73},[49,14538,14539],{"class":51,"line":219},[49,14540,2264],{"class":73},[49,14542,14543,14545,14547],{"class":51,"line":233},[49,14544,844],{"class":77},[49,14546,2671],{"class":55},[49,14548,11550],{"class":73},[49,14550,14551],{"class":51,"line":241},[49,14552,399],{"emptyLinePlaceholder":398},[49,14554,14555,14557,14559,14561,14563,14565,14567],{"class":51,"line":1920},[49,14556,13982],{"class":55},[49,14558,841],{"class":73},[49,14560,1275],{"class":159},[49,14562,1207],{"class":73},[49,14564,1275],{"class":159},[49,14566,6663],{"class":73},[49,14568,14569],{"class":66}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[49,14571,14572],{"class":51,"line":2011},[49,14573,399],{"emptyLinePlaceholder":398},[49,14575,14576,14578,14580,14582],{"class":51,"line":2017},[49,14577,3001],{"class":55},[49,14579,841],{"class":73},[49,14581,3006],{"class":59},[49,14583,3416],{"class":73},[49,14585,14586],{"class":51,"line":2029},[49,14587,399],{"emptyLinePlaceholder":398},[49,14589,14590,14592,14594],{"class":51,"line":2311},[49,14591,4787],{"class":77},[49,14593,4790],{"class":159},[49,14595,1990],{"class":73},[49,14597,14598],{"class":51,"line":2316},[49,14599,2264],{"class":73},[14,14601,14602],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[782,14604,14606],{"id":14605},"_73函数重载","7.3函数重载",[14,14608,14609],{},"意思是函数名是可以相同的",[18,14611,14613],{"id":14612},"_731基本语法","7.3.1基本语法",[14,14615,14616],{},"作用：函数名可以相同，提高复用性",[14,14618,14619],{},[112,14620,14621],{},"函数重载满足条件：",[742,14623,14624,14627,14630],{},[33,14625,14626],{},"同一个作用域下",[33,14628,14629],{},"函数名称相同",[33,14631,14632,14633,14636,14637,14640,14641],{},"函数参数",[112,14634,14635],{},"类型不同","  或者 ",[112,14638,14639],{},"个数不同"," 或者 ",[112,14642,14643],{},"顺序不同",[14,14645,14646,14649],{},[112,14647,14648],{},"注意:","  函数的返回值不可以作为函数重载的条件",[40,14651,14653],{"className":10638,"code":14652,"language":10640,"meta":27,"style":27},"\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",[46,14654,14655,14660,14668,14672,14685,14689,14703,14707,14720,14724,14739,14743,14756,14760,14781,14785,14798,14802,14822,14826,14839,14843,14847,14852,14857,14862,14867,14872,14876,14880,14888,14892,14898,14908,14918,14932,14947,14951,14961,14965,14973],{"__ignoreMap":27},[49,14656,14657],{"class":51,"line":52},[49,14658,14659],{"class":66},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[49,14661,14662,14664,14666],{"class":51,"line":63},[49,14663,6061],{"class":77},[49,14665,12082],{"class":55},[49,14667,2674],{"class":73},[49,14669,14670],{"class":51,"line":70},[49,14671,2245],{"class":73},[49,14673,14674,14676,14678,14681,14683],{"class":51,"line":219},[49,14675,7226],{"class":73},[49,14677,1872],{"class":77},[49,14679,14680],{"class":59}," \"func 的调用！\"",[49,14682,2144],{"class":77},[49,14684,9537],{"class":73},[49,14686,14687],{"class":51,"line":233},[49,14688,2264],{"class":73},[49,14690,14691,14693,14695,14697,14699,14701],{"class":51,"line":241},[49,14692,6061],{"class":77},[49,14694,12082],{"class":55},[49,14696,841],{"class":73},[49,14698,844],{"class":77},[49,14700,2098],{"class":5913},[49,14702,847],{"class":73},[49,14704,14705],{"class":51,"line":1920},[49,14706,2245],{"class":73},[49,14708,14709,14711,14713,14716,14718],{"class":51,"line":2011},[49,14710,7226],{"class":73},[49,14712,1872],{"class":77},[49,14714,14715],{"class":59}," \"func (int a) 的调用！\"",[49,14717,2144],{"class":77},[49,14719,9537],{"class":73},[49,14721,14722],{"class":51,"line":2017},[49,14723,2264],{"class":73},[49,14725,14726,14728,14730,14732,14735,14737],{"class":51,"line":2029},[49,14727,6061],{"class":77},[49,14729,12082],{"class":55},[49,14731,841],{"class":73},[49,14733,14734],{"class":77},"double",[49,14736,2098],{"class":5913},[49,14738,847],{"class":73},[49,14740,14741],{"class":51,"line":2311},[49,14742,2245],{"class":73},[49,14744,14745,14747,14749,14752,14754],{"class":51,"line":2316},[49,14746,7226],{"class":73},[49,14748,1872],{"class":77},[49,14750,14751],{"class":59}," \"func (double a)的调用！\"",[49,14753,2144],{"class":77},[49,14755,9537],{"class":73},[49,14757,14758],{"class":51,"line":2322},[49,14759,2264],{"class":73},[49,14761,14762,14764,14766,14768,14770,14772,14775,14777,14779],{"class":51,"line":2327},[49,14763,6061],{"class":77},[49,14765,12082],{"class":55},[49,14767,841],{"class":73},[49,14769,844],{"class":77},[49,14771,2098],{"class":5913},[49,14773,14774],{"class":73}," ,",[49,14776,14734],{"class":77},[49,14778,3530],{"class":5913},[49,14780,847],{"class":73},[49,14782,14783],{"class":51,"line":2341},[49,14784,2245],{"class":73},[49,14786,14787,14789,14791,14794,14796],{"class":51,"line":2346},[49,14788,7226],{"class":73},[49,14790,1872],{"class":77},[49,14792,14793],{"class":59}," \"func (int a ,double b) 的调用！\"",[49,14795,2144],{"class":77},[49,14797,9537],{"class":73},[49,14799,14800],{"class":51,"line":2352},[49,14801,2264],{"class":73},[49,14803,14804,14806,14808,14810,14812,14814,14816,14818,14820],{"class":51,"line":2373},[49,14805,6061],{"class":77},[49,14807,12082],{"class":55},[49,14809,841],{"class":73},[49,14811,14734],{"class":77},[49,14813,2098],{"class":5913},[49,14815,14774],{"class":73},[49,14817,844],{"class":77},[49,14819,3530],{"class":5913},[49,14821,847],{"class":73},[49,14823,14824],{"class":51,"line":2378},[49,14825,2245],{"class":73},[49,14827,14828,14830,14832,14835,14837],{"class":51,"line":2392},[49,14829,7226],{"class":73},[49,14831,1872],{"class":77},[49,14833,14834],{"class":59}," \"func (double a ,int b)的调用！\"",[49,14836,2144],{"class":77},[49,14838,9537],{"class":73},[49,14840,14841],{"class":51,"line":2397},[49,14842,2264],{"class":73},[49,14844,14845],{"class":51,"line":2426},[49,14846,399],{"emptyLinePlaceholder":398},[49,14848,14849],{"class":51,"line":2431},[49,14850,14851],{"class":66},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[49,14853,14854],{"class":51,"line":2448},[49,14855,14856],{"class":66},"\u002F\u002Fint func(double a, int b)\n",[49,14858,14859],{"class":51,"line":2453},[49,14860,14861],{"class":66},"\u002F\u002F{\n",[49,14863,14864],{"class":51,"line":2458},[49,14865,14866],{"class":66},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[49,14868,14869],{"class":51,"line":2463},[49,14870,14871],{"class":66},"\u002F\u002F}\n",[49,14873,14874],{"class":51,"line":2477},[49,14875,399],{"emptyLinePlaceholder":398},[49,14877,14878],{"class":51,"line":2482},[49,14879,399],{"emptyLinePlaceholder":398},[49,14881,14882,14884,14886],{"class":51,"line":3274},[49,14883,844],{"class":77},[49,14885,2671],{"class":55},[49,14887,11550],{"class":73},[49,14889,14890],{"class":51,"line":3288},[49,14891,399],{"emptyLinePlaceholder":398},[49,14893,14894,14896],{"class":51,"line":3296},[49,14895,13982],{"class":55},[49,14897,6333],{"class":73},[49,14899,14900,14902,14904,14906],{"class":51,"line":3301},[49,14901,13982],{"class":55},[49,14903,841],{"class":73},[49,14905,1275],{"class":159},[49,14907,3416],{"class":73},[49,14909,14910,14912,14914,14916],{"class":51,"line":3307},[49,14911,13982],{"class":55},[49,14913,841],{"class":73},[49,14915,888],{"class":159},[49,14917,3416],{"class":73},[49,14919,14920,14922,14924,14926,14928,14930],{"class":51,"line":3313},[49,14921,13982],{"class":55},[49,14923,841],{"class":73},[49,14925,1275],{"class":159},[49,14927,1207],{"class":73},[49,14929,888],{"class":159},[49,14931,3416],{"class":73},[49,14933,14934,14936,14938,14940,14943,14945],{"class":51,"line":3318},[49,14935,13982],{"class":55},[49,14937,841],{"class":73},[49,14939,888],{"class":159},[49,14941,14942],{"class":73}," , ",[49,14944,1275],{"class":159},[49,14946,3416],{"class":73},[49,14948,14949],{"class":51,"line":8645},[49,14950,13907],{"class":73},[49,14952,14953,14955,14957,14959],{"class":51,"line":8669},[49,14954,3001],{"class":55},[49,14956,841],{"class":73},[49,14958,3006],{"class":59},[49,14960,3416],{"class":73},[49,14962,14963],{"class":51,"line":8674},[49,14964,399],{"emptyLinePlaceholder":398},[49,14966,14967,14969,14971],{"class":51,"line":8680},[49,14968,4787],{"class":77},[49,14970,4790],{"class":159},[49,14972,1990],{"class":73},[49,14974,14975],{"class":51,"line":8707},[49,14976,2264],{"class":73},[14,14978,14979],{},"重点：函数返回值不可以作为函数重载条件！",[18,14981,14983],{"id":14982},"_732注意事项","7.3.2注意事项",[742,14985,14986,14989],{},[33,14987,14988],{},"引用作为重载条件!!!",[33,14990,14991],{},"函数重载碰到函数默认参数",[40,14993,14995],{"className":829,"code":14994,"language":831,"meta":27,"style":27},"\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",[46,14996,14997,15002,15007,15011,15027,15031,15044,15048,15052,15070,15074,15087,15091,15095,15099,15104,15108,15132,15136,15149,15153,15157,15171,15175,15188,15192,15196,15204,15208,15220,15230,15243,15247,15251,15259,15263,15273,15277,15285],{"__ignoreMap":27},[49,14998,14999],{"class":51,"line":52},[49,15000,15001],{"class":66},"\u002F\u002F函数重载注意事项\n",[49,15003,15004],{"class":51,"line":63},[49,15005,15006],{"class":66},"\u002F\u002F1、引用作为重载条件\n",[49,15008,15009],{"class":51,"line":70},[49,15010,399],{"emptyLinePlaceholder":398},[49,15012,15013,15015,15017,15019,15021,15023,15025],{"class":51,"line":219},[49,15014,6061],{"class":77},[49,15016,12082],{"class":55},[49,15018,841],{"class":73},[49,15020,844],{"class":77},[49,15022,11281],{"class":77},[49,15024,124],{"class":5913},[49,15026,847],{"class":73},[49,15028,15029],{"class":51,"line":233},[49,15030,2245],{"class":73},[49,15032,15033,15035,15037,15040,15042],{"class":51,"line":241},[49,15034,7226],{"class":73},[49,15036,1872],{"class":77},[49,15038,15039],{"class":59}," \"func (int &a) 调用 \"",[49,15041,2144],{"class":77},[49,15043,9537],{"class":73},[49,15045,15046],{"class":51,"line":1920},[49,15047,2264],{"class":73},[49,15049,15050],{"class":51,"line":2011},[49,15051,399],{"emptyLinePlaceholder":398},[49,15053,15054,15056,15058,15060,15062,15064,15066,15068],{"class":51,"line":2017},[49,15055,6061],{"class":77},[49,15057,12082],{"class":55},[49,15059,841],{"class":73},[49,15061,7489],{"class":77},[49,15063,3080],{"class":77},[49,15065,11281],{"class":77},[49,15067,124],{"class":5913},[49,15069,847],{"class":73},[49,15071,15072],{"class":51,"line":2029},[49,15073,2245],{"class":73},[49,15075,15076,15078,15080,15083,15085],{"class":51,"line":2311},[49,15077,7226],{"class":73},[49,15079,1872],{"class":77},[49,15081,15082],{"class":59}," \"func (const int &a) 调用 \"",[49,15084,2144],{"class":77},[49,15086,9537],{"class":73},[49,15088,15089],{"class":51,"line":2316},[49,15090,2264],{"class":73},[49,15092,15093],{"class":51,"line":2322},[49,15094,399],{"emptyLinePlaceholder":398},[49,15096,15097],{"class":51,"line":2327},[49,15098,399],{"emptyLinePlaceholder":398},[49,15100,15101],{"class":51,"line":2341},[49,15102,15103],{"class":66},"\u002F\u002F2、函数重载碰到函数默认参数\n",[49,15105,15106],{"class":51,"line":2346},[49,15107,399],{"emptyLinePlaceholder":398},[49,15109,15110,15112,15114,15116,15118,15120,15122,15124,15126,15128,15130],{"class":51,"line":2352},[49,15111,6061],{"class":77},[49,15113,14315],{"class":55},[49,15115,841],{"class":73},[49,15117,844],{"class":77},[49,15119,2098],{"class":5913},[49,15121,13132],{"class":73},[49,15123,844],{"class":77},[49,15125,3530],{"class":5913},[49,15127,14261],{"class":77},[49,15129,2736],{"class":159},[49,15131,847],{"class":73},[49,15133,15134],{"class":51,"line":2373},[49,15135,2245],{"class":73},[49,15137,15138,15140,15142,15145,15147],{"class":51,"line":2378},[49,15139,7226],{"class":73},[49,15141,1872],{"class":77},[49,15143,15144],{"class":59}," \"func2(int a, int b = 10) 调用\"",[49,15146,2144],{"class":77},[49,15148,9537],{"class":73},[49,15150,15151],{"class":51,"line":2392},[49,15152,2264],{"class":73},[49,15154,15155],{"class":51,"line":2397},[49,15156,399],{"emptyLinePlaceholder":398},[49,15158,15159,15161,15163,15165,15167,15169],{"class":51,"line":2426},[49,15160,6061],{"class":77},[49,15162,14315],{"class":55},[49,15164,841],{"class":73},[49,15166,844],{"class":77},[49,15168,2098],{"class":5913},[49,15170,847],{"class":73},[49,15172,15173],{"class":51,"line":2431},[49,15174,2245],{"class":73},[49,15176,15177,15179,15181,15184,15186],{"class":51,"line":2448},[49,15178,7226],{"class":73},[49,15180,1872],{"class":77},[49,15182,15183],{"class":59}," \"func2(int a) 调用\"",[49,15185,2144],{"class":77},[49,15187,9537],{"class":73},[49,15189,15190],{"class":51,"line":2453},[49,15191,2264],{"class":73},[49,15193,15194],{"class":51,"line":2458},[49,15195,399],{"emptyLinePlaceholder":398},[49,15197,15198,15200,15202],{"class":51,"line":2463},[49,15199,844],{"class":77},[49,15201,2671],{"class":55},[49,15203,11550],{"class":73},[49,15205,15206],{"class":51,"line":2477},[49,15207,13907],{"class":73},[49,15209,15210,15212,15214,15216,15218],{"class":51,"line":2482},[49,15211,2683],{"class":77},[49,15213,11566],{"class":73},[49,15215,78],{"class":77},[49,15217,2736],{"class":159},[49,15219,1990],{"class":73},[49,15221,15222,15224,15227],{"class":51,"line":3274},[49,15223,13982],{"class":55},[49,15225,15226],{"class":73},"(a);",[49,15228,15229],{"class":66}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[49,15231,15232,15234,15236,15238,15240],{"class":51,"line":3288},[49,15233,13982],{"class":55},[49,15235,841],{"class":73},[49,15237,1275],{"class":159},[49,15239,6663],{"class":73},[49,15241,15242],{"class":66},"\u002F\u002F调用有const   10是个常量\n",[49,15244,15245],{"class":51,"line":3296},[49,15246,399],{"emptyLinePlaceholder":398},[49,15248,15249],{"class":51,"line":3301},[49,15250,399],{"emptyLinePlaceholder":398},[49,15252,15253,15256],{"class":51,"line":3307},[49,15254,15255],{"class":66},"    \u002F\u002Ffunc2(10);",[49,15257,15258],{"class":66}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[49,15260,15261],{"class":51,"line":3313},[49,15262,399],{"emptyLinePlaceholder":398},[49,15264,15265,15267,15269,15271],{"class":51,"line":3318},[49,15266,3001],{"class":55},[49,15268,841],{"class":73},[49,15270,3006],{"class":59},[49,15272,3416],{"class":73},[49,15274,15275],{"class":51,"line":8645},[49,15276,399],{"emptyLinePlaceholder":398},[49,15278,15279,15281,15283],{"class":51,"line":8669},[49,15280,4787],{"class":77},[49,15282,4790],{"class":159},[49,15284,1990],{"class":73},[49,15286,15287],{"class":51,"line":8674},[49,15288,2264],{"class":73},[757,15290,15291],{},"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":27,"searchDepth":63,"depth":63,"links":15293},[15294,15295,15296],{"id":14226,"depth":63,"text":14227},{"id":14483,"depth":63,"text":14484},{"id":14605,"depth":63,"text":14606,"children":15297},[15298,15299],{"id":14612,"depth":70,"text":14613},{"id":14982,"depth":70,"text":14983},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14218,"description":27},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15306,"title":15307,"body":15308,"description":24060,"extension":766,"meta":24061,"navigation":398,"path":24062,"seo":24063,"stem":24064,"__hash__":24065},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15309,"toc":24041},[15310,15313,15319,15326,15331,15334,15337,15340,15344,15348,15351,15354,15362,15367,15370,15377,15382,15541,15544,15797,15800,15803,15806,15811,15814,15817,15828,15833,16069,16073,16083,16086,16094,16241,16245,16248,16251,16255,16700,16704,16712,16720,17632,17639,17644,18272,18275,18278,18281,18400,18403,18490,18493,18619,18622,18716,18719,19072,19076,19084,19088,19095,19098,19101,19112,19118,19123,19135,19143,19163,19171,19188,19374,19377,19381,19384,19387,19390,19393,19396,19399,19402,19862,19868,19872,19875,19886,20473,20476,20965,20969,20972,20975,20978,20981,20984,20992,21388,21392,21395,21398,21845,21848,21851,21856,21859,21864,21867,21871,21874,21876,21882,21885,22191,22201,22242,22246,22249,22251,22284,22287,22594,22596,22611,22614,22637,22646,22652,22655,22659,22662,22665,22670,22681,22686,22694,22698,22828,22831,22834,23009,23014,23226,23230,23233,23347,23352,23591,23595,23599,23602,23605,23609,23714,23717,23720,23723,23727,23838,23841,23844,23849,23901,23904,23907,23912,23958,23961,23966,24034,24036,24039],[10,15311,15307],{"id":15312},"_8类和对象",[14,15314,15315,15316],{},"C++面向对象的三大特性为",[112,15317,15318],{},"封装、继承、多态",[14,15320,15321,15322,15325],{},"C++认为",[112,15323,15324],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,15327,15328],{},[112,15329,15330],{},"例如：",[14,15332,15333],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,15335,15336],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,15338,15339],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[782,15341,15343],{"id":15342},"_81封装","8.1封装",[18,15345,15347],{"id":15346},"_811封装的意义","8.1.1封装的意义",[14,15349,15350],{},"封装是C++面向对象三大特性之一",[14,15352,15353],{},"封装的意义：",[742,15355,15356,15359],{},[33,15357,15358],{},"将属性和行为作为一个整体，表现生活中的事物",[33,15360,15361],{},"将属性和行为加以权限控制",[14,15363,15364],{},[112,15365,15366],{},"封装意义一：",[14,15368,15369],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,15371,15372,14492,15374],{},[112,15373,5878],{},[46,15375,15376],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[30,15378,15379],{},[33,15380,15381],{},"**示例1：**设计一个圆类，求圆的周长",[40,15383,15385],{"className":829,"code":15384,"language":831,"meta":27,"style":27},"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",[46,15386,15387,15395,15399,15404,15409,15414,15419,15426,15431,15441,15445,15463,15467,15471,15479,15483,15488,15493,15498,15503,15514,15537],{"__ignoreMap":27},[49,15388,15389,15392],{"class":51,"line":52},[49,15390,15391],{"class":77},"class",[49,15393,15394],{"class":55}," Circle\n",[49,15396,15397],{"class":51,"line":63},[49,15398,2245],{"class":73},[49,15400,15401],{"class":51,"line":70},[49,15402,15403],{"class":66},"    \u002F\u002F访问权限\n",[49,15405,15406],{"class":51,"line":219},[49,15407,15408],{"class":66},"    \u002F\u002F公共权限\n",[49,15410,15411],{"class":51,"line":233},[49,15412,15413],{"class":77},"public:\n",[49,15415,15416],{"class":51,"line":241},[49,15417,15418],{"class":66},"    \u002F\u002F属性\n",[49,15420,15421,15423],{"class":51,"line":1920},[49,15422,2683],{"class":77},[49,15424,15425],{"class":73}," m_r;\n",[49,15427,15428],{"class":51,"line":2011},[49,15429,15430],{"class":66},"    \u002F\u002F行为\n",[49,15432,15433,15436,15439],{"class":51,"line":2017},[49,15434,15435],{"class":77},"    double",[49,15437,15438],{"class":55}," calculateZC",[49,15440,2674],{"class":73},[49,15442,15443],{"class":51,"line":2029},[49,15444,2728],{"class":73},[49,15446,15447,15450,15453,15455,15458,15460],{"class":51,"line":2311},[49,15448,15449],{"class":77},"        return",[49,15451,15452],{"class":159}," 2",[49,15454,1284],{"class":77},[49,15456,15457],{"class":73},"PI",[49,15459,1284],{"class":77},[49,15461,15462],{"class":73},"m_r;\n",[49,15464,15465],{"class":51,"line":2316},[49,15466,2885],{"class":73},[49,15468,15469],{"class":51,"line":2322},[49,15470,4692],{"class":73},[49,15472,15473,15475,15477],{"class":51,"line":2327},[49,15474,844],{"class":77},[49,15476,2671],{"class":55},[49,15478,2674],{"class":73},[49,15480,15481],{"class":51,"line":2341},[49,15482,2245],{"class":73},[49,15484,15485],{"class":51,"line":2346},[49,15486,15487],{"class":66},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[49,15489,15490],{"class":51,"line":2352},[49,15491,15492],{"class":66},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[49,15494,15495],{"class":51,"line":2373},[49,15496,15497],{"class":73},"    Circle c1;\n",[49,15499,15500],{"class":51,"line":2378},[49,15501,15502],{"class":66},"    \u002F\u002F给圆对象 的属性进行赋值\n",[49,15504,15505,15508,15510,15512],{"class":51,"line":2392},[49,15506,15507],{"class":73},"    c1.m_r",[49,15509,78],{"class":77},[49,15511,1275],{"class":159},[49,15513,1990],{"class":73},[49,15515,15516,15518,15520,15523,15525,15528,15531,15533,15535],{"class":51,"line":2397},[49,15517,2250],{"class":73},[49,15519,1872],{"class":77},[49,15521,15522],{"class":59},"\"圆的周长\"",[49,15524,1872],{"class":77},[49,15526,15527],{"class":73},"c1.",[49,15529,15530],{"class":55},"calculateZC",[49,15532,3124],{"class":73},[49,15534,1872],{"class":77},[49,15536,1894],{"class":73},[49,15538,15539],{"class":51,"line":2426},[49,15540,2264],{"class":73},[14,15542,15543],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[40,15545,15547],{"className":829,"code":15546,"language":831,"meta":27,"style":27},"#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",[46,15548,15549,15555,15565,15571,15577,15581,15585,15590,15597,15602,15620,15624,15634,15638,15643,15659,15663,15673,15677,15682,15690,15694,15726,15730,15734,15742,15746,15751,15756,15770,15784,15793],{"__ignoreMap":27},[49,15550,15551,15553],{"class":51,"line":52},[49,15552,2648],{"class":77},[49,15554,2651],{"class":59},[49,15556,15557,15559,15561,15563],{"class":51,"line":63},[49,15558,2656],{"class":77},[49,15560,2659],{"class":77},[49,15562,2662],{"class":55},[49,15564,1990],{"class":73},[49,15566,15567,15569],{"class":51,"line":70},[49,15568,2648],{"class":77},[49,15570,8446],{"class":59},[49,15572,15573,15575],{"class":51,"line":219},[49,15574,15391],{"class":77},[49,15576,8459],{"class":55},[49,15578,15579],{"class":51,"line":233},[49,15580,2245],{"class":73},[49,15582,15583],{"class":51,"line":241},[49,15584,15413],{"class":77},[49,15586,15587],{"class":51,"line":1920},[49,15588,15589],{"class":73},"    string m_name;\n",[49,15591,15592,15594],{"class":51,"line":2011},[49,15593,2683],{"class":77},[49,15595,15596],{"class":73}," m_id;\n",[49,15598,15599],{"class":51,"line":2017},[49,15600,15601],{"class":66},"    \u002F\u002F赋值姓名\n",[49,15603,15604,15607,15610,15612,15615,15618],{"class":51,"line":2029},[49,15605,15606],{"class":77},"    void",[49,15608,15609],{"class":55}," setName",[49,15611,841],{"class":73},[49,15613,15614],{"class":55},"string",[49,15616,15617],{"class":5913}," name",[49,15619,847],{"class":73},[49,15621,15622],{"class":51,"line":2311},[49,15623,2728],{"class":73},[49,15625,15626,15629,15631],{"class":51,"line":2316},[49,15627,15628],{"class":73},"        m_name",[49,15630,78],{"class":77},[49,15632,15633],{"class":73},"name;\n",[49,15635,15636],{"class":51,"line":2322},[49,15637,2885],{"class":73},[49,15639,15640],{"class":51,"line":2327},[49,15641,15642],{"class":66},"    \u002F\u002F赋值学号\n",[49,15644,15645,15647,15650,15652,15654,15657],{"class":51,"line":2341},[49,15646,15606],{"class":77},[49,15648,15649],{"class":55}," setId",[49,15651,841],{"class":73},[49,15653,844],{"class":77},[49,15655,15656],{"class":5913}," id",[49,15658,847],{"class":73},[49,15660,15661],{"class":51,"line":2346},[49,15662,2728],{"class":73},[49,15664,15665,15668,15670],{"class":51,"line":2352},[49,15666,15667],{"class":73},"        m_id",[49,15669,78],{"class":77},[49,15671,15672],{"class":73},"id;\n",[49,15674,15675],{"class":51,"line":2373},[49,15676,2885],{"class":73},[49,15678,15679],{"class":51,"line":2378},[49,15680,15681],{"class":66},"    \u002F\u002F打印学生信息\n",[49,15683,15684,15686,15688],{"class":51,"line":2392},[49,15685,15606],{"class":77},[49,15687,10312],{"class":55},[49,15689,2674],{"class":73},[49,15691,15692],{"class":51,"line":2397},[49,15693,2728],{"class":73},[49,15695,15696,15698,15700,15703,15705,15708,15710,15712,15714,15717,15719,15722,15724],{"class":51,"line":2426},[49,15697,4148],{"class":73},[49,15699,1872],{"class":77},[49,15701,15702],{"class":59},"\"姓名：\"",[49,15704,1872],{"class":77},[49,15706,15707],{"class":73},"m_name",[49,15709,1872],{"class":77},[49,15711,5056],{"class":59},[49,15713,1872],{"class":77},[49,15715,15716],{"class":59},"\"学号：\"",[49,15718,1872],{"class":77},[49,15720,15721],{"class":73},"m_id",[49,15723,1872],{"class":77},[49,15725,1894],{"class":73},[49,15727,15728],{"class":51,"line":2431},[49,15729,2885],{"class":73},[49,15731,15732],{"class":51,"line":2448},[49,15733,4692],{"class":73},[49,15735,15736,15738,15740],{"class":51,"line":2453},[49,15737,844],{"class":77},[49,15739,2671],{"class":55},[49,15741,2674],{"class":73},[49,15743,15744],{"class":51,"line":2458},[49,15745,2245],{"class":73},[49,15747,15748],{"class":51,"line":2463},[49,15749,15750],{"class":66},"    \u002F\u002F实例化\n",[49,15752,15753],{"class":51,"line":2477},[49,15754,15755],{"class":73},"    Student s1;\n",[49,15757,15758,15761,15764,15766,15768],{"class":51,"line":2482},[49,15759,15760],{"class":73},"    s1.",[49,15762,15763],{"class":55},"setName",[49,15765,841],{"class":73},[49,15767,8613],{"class":59},[49,15769,3416],{"class":73},[49,15771,15772,15774,15777,15779,15782],{"class":51,"line":3274},[49,15773,15760],{"class":73},[49,15775,15776],{"class":55},"setId",[49,15778,841],{"class":73},[49,15780,15781],{"class":159},"123456",[49,15783,3416],{"class":73},[49,15785,15786,15788,15791],{"class":51,"line":3288},[49,15787,15760],{"class":73},[49,15789,15790],{"class":55},"printInfo",[49,15792,6333],{"class":73},[49,15794,15795],{"class":51,"line":3296},[49,15796,2264],{"class":73},[14,15798,15799],{},"类中的属性和行为统称为成员",[14,15801,15802],{},"属性：成员属性(成员变量)",[14,15804,15805],{},"方法：成员函数(成员方法)",[14,15807,15808],{},[112,15809,15810],{},"封装意义二：",[14,15812,15813],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15815,15816],{},"访问权限有三种：",[30,15818,15819,15822,15825],{},[33,15820,15821],{},"public        公共权限",[33,15823,15824],{},"protected 保护权限",[33,15826,15827],{},"private      私有权限",[14,15829,15830],{},[112,15831,15832],{},"示例：",[40,15834,15836],{"className":10638,"code":15835,"language":10640,"meta":27,"style":27},"\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",[46,15837,15838,15843,15848,15853,15858,15862,15869,15873,15878,15882,15887,15891,15896,15901,15906,15910,15915,15920,15927,15931,15935,15943,15947,15958,15970,15982,15986,15990,15994,16002,16006,16011,16023,16031,16039,16043,16053,16057,16065],{"__ignoreMap":27},[49,15839,15840],{"class":51,"line":52},[49,15841,15842],{"class":66},"\u002F\u002F三种权限\n",[49,15844,15845],{"class":51,"line":63},[49,15846,15847],{"class":66},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[49,15849,15850],{"class":51,"line":70},[49,15851,15852],{"class":66},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[49,15854,15855],{"class":51,"line":219},[49,15856,15857],{"class":66},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[49,15859,15860],{"class":51,"line":233},[49,15861,399],{"emptyLinePlaceholder":398},[49,15863,15864,15866],{"class":51,"line":241},[49,15865,15391],{"class":77},[49,15867,15868],{"class":55}," Person\n",[49,15870,15871],{"class":51,"line":1920},[49,15872,2245],{"class":73},[49,15874,15875],{"class":51,"line":2011},[49,15876,15877],{"class":66},"    \u002F\u002F姓名  公共权限\n",[49,15879,15880],{"class":51,"line":2017},[49,15881,15413],{"class":77},[49,15883,15884],{"class":51,"line":2029},[49,15885,15886],{"class":73},"    string m_Name;\n",[49,15888,15889],{"class":51,"line":2311},[49,15890,399],{"emptyLinePlaceholder":398},[49,15892,15893],{"class":51,"line":2316},[49,15894,15895],{"class":66},"    \u002F\u002F汽车  保护权限\n",[49,15897,15898],{"class":51,"line":2322},[49,15899,15900],{"class":77},"protected:\n",[49,15902,15903],{"class":51,"line":2327},[49,15904,15905],{"class":73},"    string m_Car;\n",[49,15907,15908],{"class":51,"line":2341},[49,15909,399],{"emptyLinePlaceholder":398},[49,15911,15912],{"class":51,"line":2346},[49,15913,15914],{"class":66},"    \u002F\u002F银行卡密码  私有权限\n",[49,15916,15917],{"class":51,"line":2352},[49,15918,15919],{"class":77},"private:\n",[49,15921,15922,15924],{"class":51,"line":2373},[49,15923,2683],{"class":77},[49,15925,15926],{"class":73}," m_Password;\n",[49,15928,15929],{"class":51,"line":2378},[49,15930,399],{"emptyLinePlaceholder":398},[49,15932,15933],{"class":51,"line":2392},[49,15934,15413],{"class":77},[49,15936,15937,15939,15941],{"class":51,"line":2397},[49,15938,15606],{"class":77},[49,15940,12082],{"class":55},[49,15942,2674],{"class":73},[49,15944,15945],{"class":51,"line":2426},[49,15946,2728],{"class":73},[49,15948,15949,15952,15954,15956],{"class":51,"line":2431},[49,15950,15951],{"class":73},"        m_Name ",[49,15953,78],{"class":77},[49,15955,9635],{"class":59},[49,15957,1990],{"class":73},[49,15959,15960,15963,15965,15968],{"class":51,"line":2448},[49,15961,15962],{"class":73},"        m_Car ",[49,15964,78],{"class":77},[49,15966,15967],{"class":59}," \"拖拉机\"",[49,15969,1990],{"class":73},[49,15971,15972,15975,15977,15980],{"class":51,"line":2453},[49,15973,15974],{"class":73},"        m_Password ",[49,15976,78],{"class":77},[49,15978,15979],{"class":159}," 123456",[49,15981,1990],{"class":73},[49,15983,15984],{"class":51,"line":2458},[49,15985,2885],{"class":73},[49,15987,15988],{"class":51,"line":2463},[49,15989,4692],{"class":73},[49,15991,15992],{"class":51,"line":2477},[49,15993,399],{"emptyLinePlaceholder":398},[49,15995,15996,15998,16000],{"class":51,"line":2482},[49,15997,844],{"class":77},[49,15999,2671],{"class":55},[49,16001,11550],{"class":73},[49,16003,16004],{"class":51,"line":3274},[49,16005,399],{"emptyLinePlaceholder":398},[49,16007,16008],{"class":51,"line":3288},[49,16009,16010],{"class":73},"    Person p;\n",[49,16012,16013,16016,16018,16021],{"class":51,"line":3296},[49,16014,16015],{"class":73},"    p.m_Name ",[49,16017,78],{"class":77},[49,16019,16020],{"class":59}," \"李四\"",[49,16022,1990],{"class":73},[49,16024,16025,16028],{"class":51,"line":3301},[49,16026,16027],{"class":66},"    \u002F\u002Fp.m_Car = \"奔驰\";",[49,16029,16030],{"class":66},"  \u002F\u002F保护权限类外访问不到\n",[49,16032,16033,16036],{"class":51,"line":3307},[49,16034,16035],{"class":66},"    \u002F\u002Fp.m_Password = 123;",[49,16037,16038],{"class":66}," \u002F\u002F私有权限类外访问不到\n",[49,16040,16041],{"class":51,"line":3313},[49,16042,399],{"emptyLinePlaceholder":398},[49,16044,16045,16047,16049,16051],{"class":51,"line":3318},[49,16046,3001],{"class":55},[49,16048,841],{"class":73},[49,16050,3006],{"class":59},[49,16052,3416],{"class":73},[49,16054,16055],{"class":51,"line":8645},[49,16056,399],{"emptyLinePlaceholder":398},[49,16058,16059,16061,16063],{"class":51,"line":8669},[49,16060,4787],{"class":77},[49,16062,4790],{"class":159},[49,16064,1990],{"class":73},[49,16066,16067],{"class":51,"line":8674},[49,16068,2264],{"class":73},[18,16070,16072],{"id":16071},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,16074,16075,16076,16079,16080],{},"在C++中 struct和class唯一的",[112,16077,16078],{},"区别","就在于 ",[112,16081,16082],{},"默认的访问权限不同",[14,16084,16085],{},"区别：",[742,16087,16088,16091],{},[33,16089,16090],{},"struct 默认权限为公共",[33,16092,16093],{},"class   默认权限为私有",[40,16095,16097],{"className":10638,"code":16096,"language":10640,"meta":27,"style":27},"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",[46,16098,16099,16106,16110,16120,16124,16128,16135,16139,16149,16153,16157,16165,16169,16174,16188,16192,16197,16211,16215,16225,16229,16237],{"__ignoreMap":27},[49,16100,16101,16103],{"class":51,"line":52},[49,16102,15391],{"class":77},[49,16104,16105],{"class":55}," C1\n",[49,16107,16108],{"class":51,"line":63},[49,16109,2245],{"class":73},[49,16111,16112,16114,16117],{"class":51,"line":70},[49,16113,2683],{"class":77},[49,16115,16116],{"class":73},"  m_A;",[49,16118,16119],{"class":66}," \u002F\u002F默认是私有权限\n",[49,16121,16122],{"class":51,"line":219},[49,16123,4692],{"class":73},[49,16125,16126],{"class":51,"line":233},[49,16127,399],{"emptyLinePlaceholder":398},[49,16129,16130,16132],{"class":51,"line":241},[49,16131,8456],{"class":77},[49,16133,16134],{"class":55}," C2\n",[49,16136,16137],{"class":51,"line":1920},[49,16138,2245],{"class":73},[49,16140,16141,16143,16146],{"class":51,"line":2011},[49,16142,2683],{"class":77},[49,16144,16145],{"class":73}," m_A;",[49,16147,16148],{"class":66},"  \u002F\u002F默认是公共权限\n",[49,16150,16151],{"class":51,"line":2017},[49,16152,4692],{"class":73},[49,16154,16155],{"class":51,"line":2029},[49,16156,399],{"emptyLinePlaceholder":398},[49,16158,16159,16161,16163],{"class":51,"line":2311},[49,16160,844],{"class":77},[49,16162,2671],{"class":55},[49,16164,11550],{"class":73},[49,16166,16167],{"class":51,"line":2316},[49,16168,399],{"emptyLinePlaceholder":398},[49,16170,16171],{"class":51,"line":2322},[49,16172,16173],{"class":73},"    C1 c1;\n",[49,16175,16176,16179,16181,16183,16185],{"class":51,"line":2327},[49,16177,16178],{"class":73},"    c1.m_A ",[49,16180,78],{"class":77},[49,16182,2736],{"class":159},[49,16184,894],{"class":73},[49,16186,16187],{"class":66}," \u002F\u002F错误，访问权限是私有\n",[49,16189,16190],{"class":51,"line":2341},[49,16191,399],{"emptyLinePlaceholder":398},[49,16193,16194],{"class":51,"line":2346},[49,16195,16196],{"class":73},"    C2 c2;\n",[49,16198,16199,16202,16204,16206,16208],{"class":51,"line":2352},[49,16200,16201],{"class":73},"    c2.m_A ",[49,16203,78],{"class":77},[49,16205,2736],{"class":159},[49,16207,894],{"class":73},[49,16209,16210],{"class":66}," \u002F\u002F正确，访问权限是公共\n",[49,16212,16213],{"class":51,"line":2373},[49,16214,399],{"emptyLinePlaceholder":398},[49,16216,16217,16219,16221,16223],{"class":51,"line":2378},[49,16218,3001],{"class":55},[49,16220,841],{"class":73},[49,16222,3006],{"class":59},[49,16224,3416],{"class":73},[49,16226,16227],{"class":51,"line":2392},[49,16228,399],{"emptyLinePlaceholder":398},[49,16230,16231,16233,16235],{"class":51,"line":2397},[49,16232,4787],{"class":77},[49,16234,4790],{"class":159},[49,16236,1990],{"class":73},[49,16238,16239],{"class":51,"line":2426},[49,16240,2264],{"class":73},[18,16242,16244],{"id":16243},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,16246,16247],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,16249,16250],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,16252,16253],{},[112,16254,15832],{},[40,16256,16258],{"className":10638,"code":16257,"language":10640,"meta":27,"style":27},"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",[46,16259,16260,16270,16274,16278,16283,16297,16306,16310,16320,16324,16331,16335,16339,16343,16348,16357,16364,16368,16373,16389,16412,16425,16432,16436,16445,16449,16453,16458,16474,16484,16488,16492,16496,16504,16508,16518,16522,16530,16534,16538,16546,16550,16554,16559,16572,16595,16599,16604,16617,16639,16643,16648,16662,16670,16674,16684,16688,16696],{"__ignoreMap":27},[49,16261,16262,16264,16267],{"class":51,"line":52},[49,16263,15391],{"class":77},[49,16265,16266],{"class":55}," Person",[49,16268,16269],{"class":73}," {\n",[49,16271,16272],{"class":51,"line":63},[49,16273,15413],{"class":77},[49,16275,16276],{"class":51,"line":70},[49,16277,399],{"emptyLinePlaceholder":398},[49,16279,16280],{"class":51,"line":219},[49,16281,16282],{"class":66},"    \u002F\u002F姓名设置可读可写\n",[49,16284,16285,16287,16289,16291,16293,16295],{"class":51,"line":233},[49,16286,15606],{"class":77},[49,16288,15609],{"class":55},[49,16290,841],{"class":73},[49,16292,15614],{"class":55},[49,16294,15617],{"class":5913},[49,16296,13139],{"class":73},[49,16298,16299,16301,16303],{"class":51,"line":241},[49,16300,15951],{"class":73},[49,16302,78],{"class":77},[49,16304,16305],{"class":73}," name;\n",[49,16307,16308],{"class":51,"line":1920},[49,16309,2885],{"class":73},[49,16311,16312,16315,16318],{"class":51,"line":2011},[49,16313,16314],{"class":55},"    string",[49,16316,16317],{"class":55}," getName",[49,16319,2674],{"class":73},[49,16321,16322],{"class":51,"line":2017},[49,16323,2728],{"class":73},[49,16325,16326,16328],{"class":51,"line":2029},[49,16327,15449],{"class":77},[49,16329,16330],{"class":73}," m_Name;\n",[49,16332,16333],{"class":51,"line":2311},[49,16334,2885],{"class":73},[49,16336,16337],{"class":51,"line":2316},[49,16338,399],{"emptyLinePlaceholder":398},[49,16340,16341],{"class":51,"line":2322},[49,16342,399],{"emptyLinePlaceholder":398},[49,16344,16345],{"class":51,"line":2327},[49,16346,16347],{"class":66},"    \u002F\u002F获取年龄 \n",[49,16349,16350,16352,16355],{"class":51,"line":2341},[49,16351,2683],{"class":77},[49,16353,16354],{"class":55}," getAge",[49,16356,11550],{"class":73},[49,16358,16359,16361],{"class":51,"line":2346},[49,16360,15449],{"class":77},[49,16362,16363],{"class":73}," m_Age;\n",[49,16365,16366],{"class":51,"line":2352},[49,16367,2885],{"class":73},[49,16369,16370],{"class":51,"line":2373},[49,16371,16372],{"class":66},"    \u002F\u002F设置年龄\n",[49,16374,16375,16377,16380,16382,16384,16387],{"class":51,"line":2378},[49,16376,15606],{"class":77},[49,16378,16379],{"class":55}," setAge",[49,16381,841],{"class":73},[49,16383,844],{"class":77},[49,16385,16386],{"class":5913}," age",[49,16388,13139],{"class":73},[49,16390,16391,16393,16396,16398,16400,16402,16405,16407,16410],{"class":51,"line":2392},[49,16392,3194],{"class":77},[49,16394,16395],{"class":73}," (age ",[49,16397,1739],{"class":77},[49,16399,4790],{"class":159},[49,16401,3952],{"class":77},[49,16403,16404],{"class":73}," age ",[49,16406,1789],{"class":77},[49,16408,16409],{"class":159}," 150",[49,16411,13139],{"class":73},[49,16413,16414,16416,16418,16421,16423],{"class":51,"line":2397},[49,16415,10416],{"class":73},[49,16417,1872],{"class":77},[49,16419,16420],{"class":59}," \"你个老妖精!\"",[49,16422,2144],{"class":77},[49,16424,9537],{"class":73},[49,16426,16427,16430],{"class":51,"line":2426},[49,16428,16429],{"class":77},"            return",[49,16431,1990],{"class":73},[49,16433,16434],{"class":51,"line":2431},[49,16435,3226],{"class":73},[49,16437,16438,16441,16443],{"class":51,"line":2448},[49,16439,16440],{"class":73},"        m_Age ",[49,16442,78],{"class":77},[49,16444,8494],{"class":73},[49,16446,16447],{"class":51,"line":2453},[49,16448,2885],{"class":73},[49,16450,16451],{"class":51,"line":2458},[49,16452,399],{"emptyLinePlaceholder":398},[49,16454,16455],{"class":51,"line":2463},[49,16456,16457],{"class":66},"    \u002F\u002F情人设置为只写\n",[49,16459,16460,16462,16465,16467,16469,16472],{"class":51,"line":2477},[49,16461,15606],{"class":77},[49,16463,16464],{"class":55}," setLover",[49,16466,841],{"class":73},[49,16468,15614],{"class":55},[49,16470,16471],{"class":5913}," lover",[49,16473,13139],{"class":73},[49,16475,16476,16479,16481],{"class":51,"line":2482},[49,16477,16478],{"class":73},"        m_Lover ",[49,16480,78],{"class":77},[49,16482,16483],{"class":73}," lover;\n",[49,16485,16486],{"class":51,"line":3274},[49,16487,2885],{"class":73},[49,16489,16490],{"class":51,"line":3288},[49,16491,399],{"emptyLinePlaceholder":398},[49,16493,16494],{"class":51,"line":3296},[49,16495,15919],{"class":77},[49,16497,16498,16501],{"class":51,"line":3301},[49,16499,16500],{"class":73},"    string m_Name;",[49,16502,16503],{"class":66}," \u002F\u002F可读可写  姓名\n",[49,16505,16506],{"class":51,"line":3307},[49,16507,13907],{"class":73},[49,16509,16510,16512,16515],{"class":51,"line":3313},[49,16511,2683],{"class":77},[49,16513,16514],{"class":73}," m_Age;",[49,16516,16517],{"class":66}," \u002F\u002F只读  年龄\n",[49,16519,16520],{"class":51,"line":3318},[49,16521,399],{"emptyLinePlaceholder":398},[49,16523,16524,16527],{"class":51,"line":8645},[49,16525,16526],{"class":73},"    string m_Lover;",[49,16528,16529],{"class":66}," \u002F\u002F只写  情人\n",[49,16531,16532],{"class":51,"line":8669},[49,16533,4692],{"class":73},[49,16535,16536],{"class":51,"line":8674},[49,16537,399],{"emptyLinePlaceholder":398},[49,16539,16540,16542,16544],{"class":51,"line":8680},[49,16541,844],{"class":77},[49,16543,2671],{"class":55},[49,16545,11550],{"class":73},[49,16547,16548],{"class":51,"line":8707},[49,16549,399],{"emptyLinePlaceholder":398},[49,16551,16552],{"class":51,"line":8712},[49,16553,16010],{"class":73},[49,16555,16556],{"class":51,"line":8718},[49,16557,16558],{"class":66},"    \u002F\u002F姓名设置\n",[49,16560,16561,16564,16566,16568,16570],{"class":51,"line":8730},[49,16562,16563],{"class":73},"    p.",[49,16565,15763],{"class":55},[49,16567,841],{"class":73},[49,16569,8613],{"class":59},[49,16571,3416],{"class":73},[49,16573,16574,16576,16578,16581,16583,16586,16589,16591,16593],{"class":51,"line":8742},[49,16575,7226],{"class":73},[49,16577,1872],{"class":77},[49,16579,16580],{"class":59}," \"姓名： \"",[49,16582,2144],{"class":77},[49,16584,16585],{"class":73}," p.",[49,16587,16588],{"class":55},"getName",[49,16590,13747],{"class":73},[49,16592,1872],{"class":77},[49,16594,9537],{"class":73},[49,16596,16597],{"class":51,"line":8754},[49,16598,399],{"emptyLinePlaceholder":398},[49,16600,16601],{"class":51,"line":10413},[49,16602,16603],{"class":66},"    \u002F\u002F年龄设置\n",[49,16605,16606,16608,16611,16613,16615],{"class":51,"line":10438},[49,16607,16563],{"class":73},[49,16609,16610],{"class":55},"setAge",[49,16612,841],{"class":73},[49,16614,1485],{"class":159},[49,16616,3416],{"class":73},[49,16618,16619,16621,16623,16626,16628,16630,16633,16635,16637],{"class":51,"line":10461},[49,16620,7226],{"class":73},[49,16622,1872],{"class":77},[49,16624,16625],{"class":59}," \"年龄： \"",[49,16627,2144],{"class":77},[49,16629,16585],{"class":73},[49,16631,16632],{"class":55},"getAge",[49,16634,13747],{"class":73},[49,16636,1872],{"class":77},[49,16638,9537],{"class":73},[49,16640,16641],{"class":51,"line":10485},[49,16642,399],{"emptyLinePlaceholder":398},[49,16644,16645],{"class":51,"line":10490},[49,16646,16647],{"class":66},"    \u002F\u002F情人设置\n",[49,16649,16650,16652,16655,16657,16660],{"class":51,"line":10495},[49,16651,16563],{"class":73},[49,16653,16654],{"class":55},"setLover",[49,16656,841],{"class":73},[49,16658,16659],{"class":59},"\"苍井\"",[49,16661,3416],{"class":73},[49,16663,16664,16667],{"class":51,"line":10500},[49,16665,16666],{"class":66},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[49,16668,16669],{"class":66},"  \u002F\u002F只写属性，不可以读取\n",[49,16671,16672],{"class":51,"line":10509},[49,16673,399],{"emptyLinePlaceholder":398},[49,16675,16676,16678,16680,16682],{"class":51,"line":10514},[49,16677,3001],{"class":55},[49,16679,841],{"class":73},[49,16681,3006],{"class":59},[49,16683,3416],{"class":73},[49,16685,16686],{"class":51,"line":10520},[49,16687,399],{"emptyLinePlaceholder":398},[49,16689,16690,16692,16694],{"class":51,"line":10541},[49,16691,4787],{"class":77},[49,16693,4790],{"class":159},[49,16695,1990],{"class":73},[49,16697,16698],{"class":51,"line":10547},[49,16699,2264],{"class":73},[18,16701,16703],{"id":16702},"_814封装案例","8.1.4封装案例",[30,16705,16706],{},[33,16707,16708,16711],{},[112,16709,16710],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[742,16713,16714,16717],{},[33,16715,16716],{},"求出立方体的面积和体积",[33,16718,16719],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[40,16721,16723],{"className":829,"code":16722,"language":831,"meta":27,"style":27},"#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",[46,16724,16725,16731,16741,16748,16752,16756,16761,16791,16795,16805,16815,16825,16829,16838,16842,16878,16882,16891,16895,16911,16915,16920,16929,16933,16940,16944,16953,16957,16964,16968,16977,16981,16988,16992,16997,17014,17018,17064,17068,17077,17081,17085,17089,17098,17102,17106,17111,17115,17121,17127,17133,17137,17141,17146,17168,17172,17226,17230,17238,17242,17247,17252,17265,17272,17288,17299,17305,17328,17334,17357,17371,17391,17397,17408,17431,17453,17458,17464,17478,17491,17496,17510,17515,17521,17526,17540,17545,17550,17564,17576,17581,17594,17599,17604,17609,17622,17627],{"__ignoreMap":27},[49,16726,16727,16729],{"class":51,"line":52},[49,16728,2648],{"class":77},[49,16730,2651],{"class":59},[49,16732,16733,16735,16737,16739],{"class":51,"line":63},[49,16734,2656],{"class":77},[49,16736,2659],{"class":77},[49,16738,2662],{"class":55},[49,16740,1990],{"class":73},[49,16742,16743,16745],{"class":51,"line":70},[49,16744,15391],{"class":77},[49,16746,16747],{"class":55}," Cube\n",[49,16749,16750],{"class":51,"line":219},[49,16751,2245],{"class":73},[49,16753,16754],{"class":51,"line":233},[49,16755,15413],{"class":77},[49,16757,16758],{"class":51,"line":241},[49,16759,16760],{"class":66},"    \u002F\u002F输入长宽高\n",[49,16762,16763,16765,16768,16770,16772,16775,16777,16779,16782,16784,16786,16789],{"class":51,"line":1920},[49,16764,15606],{"class":77},[49,16766,16767],{"class":55}," setLwh",[49,16769,841],{"class":73},[49,16771,844],{"class":77},[49,16773,16774],{"class":5913}," l",[49,16776,1207],{"class":73},[49,16778,844],{"class":77},[49,16780,16781],{"class":5913}," w",[49,16783,1207],{"class":73},[49,16785,844],{"class":77},[49,16787,16788],{"class":5913}," h",[49,16790,847],{"class":73},[49,16792,16793],{"class":51,"line":2011},[49,16794,2728],{"class":73},[49,16796,16797,16800,16802],{"class":51,"line":2017},[49,16798,16799],{"class":73},"        m_L",[49,16801,78],{"class":77},[49,16803,16804],{"class":73},"l;\n",[49,16806,16807,16810,16812],{"class":51,"line":2029},[49,16808,16809],{"class":73},"        m_W",[49,16811,78],{"class":77},[49,16813,16814],{"class":73},"w;\n",[49,16816,16817,16820,16822],{"class":51,"line":2311},[49,16818,16819],{"class":73},"        m_H",[49,16821,78],{"class":77},[49,16823,16824],{"class":73},"h;\n",[49,16826,16827],{"class":51,"line":2316},[49,16828,2885],{"class":73},[49,16830,16831,16833,16836],{"class":51,"line":2322},[49,16832,2683],{"class":77},[49,16834,16835],{"class":55}," mianji",[49,16837,2674],{"class":73},[49,16839,16840],{"class":51,"line":2327},[49,16841,2728],{"class":73},[49,16843,16844,16846,16848,16850,16853,16855,16858,16860,16863,16865,16868,16870,16873,16875],{"class":51,"line":2341},[49,16845,15449],{"class":77},[49,16847,15452],{"class":159},[49,16849,1284],{"class":77},[49,16851,16852],{"class":73},"(m_L",[49,16854,1284],{"class":77},[49,16856,16857],{"class":73},"m_W ",[49,16859,1310],{"class":77},[49,16861,16862],{"class":73}," m_L",[49,16864,1284],{"class":77},[49,16866,16867],{"class":73},"m_H ",[49,16869,1310],{"class":77},[49,16871,16872],{"class":73}," m_W",[49,16874,1284],{"class":77},[49,16876,16877],{"class":73},"m_H);\n",[49,16879,16880],{"class":51,"line":2346},[49,16881,2885],{"class":73},[49,16883,16884,16886,16889],{"class":51,"line":2352},[49,16885,2683],{"class":77},[49,16887,16888],{"class":55}," tiji",[49,16890,2674],{"class":73},[49,16892,16893],{"class":51,"line":2373},[49,16894,2728],{"class":73},[49,16896,16897,16899,16901,16903,16906,16908],{"class":51,"line":2378},[49,16898,15449],{"class":77},[49,16900,16862],{"class":73},[49,16902,1284],{"class":77},[49,16904,16905],{"class":73},"m_W",[49,16907,1284],{"class":77},[49,16909,16910],{"class":73},"m_H;\n",[49,16912,16913],{"class":51,"line":2392},[49,16914,2885],{"class":73},[49,16916,16917],{"class":51,"line":2397},[49,16918,16919],{"class":66},"    \u002F\u002F获取长宽高\n",[49,16921,16922,16924,16927],{"class":51,"line":2426},[49,16923,2683],{"class":77},[49,16925,16926],{"class":55}," getLength",[49,16928,2674],{"class":73},[49,16930,16931],{"class":51,"line":2431},[49,16932,2728],{"class":73},[49,16934,16935,16937],{"class":51,"line":2448},[49,16936,15449],{"class":77},[49,16938,16939],{"class":73}," m_L;\n",[49,16941,16942],{"class":51,"line":2453},[49,16943,2885],{"class":73},[49,16945,16946,16948,16951],{"class":51,"line":2458},[49,16947,2683],{"class":77},[49,16949,16950],{"class":55}," getWidth",[49,16952,2674],{"class":73},[49,16954,16955],{"class":51,"line":2463},[49,16956,2728],{"class":73},[49,16958,16959,16961],{"class":51,"line":2477},[49,16960,15449],{"class":77},[49,16962,16963],{"class":73}," m_W;\n",[49,16965,16966],{"class":51,"line":2482},[49,16967,2885],{"class":73},[49,16969,16970,16972,16975],{"class":51,"line":3274},[49,16971,2683],{"class":77},[49,16973,16974],{"class":55}," getHeight",[49,16976,2674],{"class":73},[49,16978,16979],{"class":51,"line":3288},[49,16980,2728],{"class":73},[49,16982,16983,16985],{"class":51,"line":3296},[49,16984,15449],{"class":77},[49,16986,16987],{"class":73}," m_H;\n",[49,16989,16990],{"class":51,"line":3301},[49,16991,2885],{"class":73},[49,16993,16994],{"class":51,"line":3307},[49,16995,16996],{"class":66},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[49,16998,16999,17002,17005,17007,17010,17012],{"class":51,"line":3313},[49,17000,17001],{"class":77},"    bool",[49,17003,17004],{"class":55}," isEqual",[49,17006,841],{"class":73},[49,17008,17009],{"class":55},"Cube",[49,17011,3546],{"class":5913},[49,17013,847],{"class":73},[49,17015,17016],{"class":51,"line":3318},[49,17017,2728],{"class":73},[49,17019,17020,17022,17025,17028,17030,17032,17035,17037,17040,17043,17045,17047,17050,17052,17054,17057,17059,17061],{"class":51,"line":8645},[49,17021,3194],{"class":77},[49,17023,17024],{"class":73}," (c.",[49,17026,17027],{"class":55},"getLength",[49,17029,13747],{"class":73},[49,17031,3646],{"class":77},[49,17033,17034],{"class":73}," m_L ",[49,17036,2414],{"class":77},[49,17038,17039],{"class":73}," c.",[49,17041,17042],{"class":55},"getWidth",[49,17044,13747],{"class":73},[49,17046,3646],{"class":77},[49,17048,17049],{"class":73}," m_W ",[49,17051,2414],{"class":77},[49,17053,17039],{"class":73},[49,17055,17056],{"class":55},"getHeight",[49,17058,13747],{"class":73},[49,17060,3646],{"class":77},[49,17062,17063],{"class":73}," m_H)\n",[49,17065,17066],{"class":51,"line":8669},[49,17067,3207],{"class":73},[49,17069,17070,17072,17075],{"class":51,"line":8674},[49,17071,16429],{"class":77},[49,17073,17074],{"class":159}," true",[49,17076,1990],{"class":73},[49,17078,17079],{"class":51,"line":8680},[49,17080,3226],{"class":73},[49,17082,17083],{"class":51,"line":8707},[49,17084,3267],{"class":77},[49,17086,17087],{"class":51,"line":8712},[49,17088,3207],{"class":73},[49,17090,17091,17093,17096],{"class":51,"line":8718},[49,17092,16429],{"class":77},[49,17094,17095],{"class":159}," false",[49,17097,1990],{"class":73},[49,17099,17100],{"class":51,"line":8730},[49,17101,3226],{"class":73},[49,17103,17104],{"class":51,"line":8742},[49,17105,2885],{"class":73},[49,17107,17108],{"class":51,"line":8754},[49,17109,17110],{"class":66},"    \u002F\u002F私有属性\n",[49,17112,17113],{"class":51,"line":10413},[49,17114,15919],{"class":77},[49,17116,17117,17119],{"class":51,"line":10438},[49,17118,2683],{"class":77},[49,17120,16939],{"class":73},[49,17122,17123,17125],{"class":51,"line":10461},[49,17124,2683],{"class":77},[49,17126,16963],{"class":73},[49,17128,17129,17131],{"class":51,"line":10485},[49,17130,2683],{"class":77},[49,17132,16987],{"class":73},[49,17134,17135],{"class":51,"line":10490},[49,17136,399],{"emptyLinePlaceholder":398},[49,17138,17139],{"class":51,"line":10495},[49,17140,4692],{"class":73},[49,17142,17143],{"class":51,"line":10500},[49,17144,17145],{"class":66},"\u002F\u002F全局函数判断两个立方体是否相等\n",[49,17147,17148,17150,17152,17154,17156,17159,17161,17163,17166],{"class":51,"line":10509},[49,17149,2054],{"class":77},[49,17151,17004],{"class":55},[49,17153,841],{"class":73},[49,17155,17009],{"class":55},[49,17157,17158],{"class":5913}," c1",[49,17160,1207],{"class":73},[49,17162,17009],{"class":55},[49,17164,17165],{"class":5913}," c2",[49,17167,847],{"class":73},[49,17169,17170],{"class":51,"line":10514},[49,17171,2245],{"class":73},[49,17173,17174,17176,17179,17181,17183,17185,17188,17190,17193,17195,17197,17199,17201,17203,17205,17207,17209,17211,17213,17215,17217,17219,17221,17223],{"class":51,"line":10520},[49,17175,4787],{"class":77},[49,17177,17178],{"class":73}," (c1.",[49,17180,17027],{"class":55},[49,17182,13747],{"class":73},[49,17184,3646],{"class":77},[49,17186,17187],{"class":73}," c2.",[49,17189,17027],{"class":55},[49,17191,17192],{"class":73},"()) ",[49,17194,2414],{"class":77},[49,17196,17178],{"class":73},[49,17198,17042],{"class":55},[49,17200,13747],{"class":73},[49,17202,3646],{"class":77},[49,17204,17187],{"class":73},[49,17206,17042],{"class":55},[49,17208,17192],{"class":73},[49,17210,2414],{"class":77},[49,17212,17178],{"class":73},[49,17214,17056],{"class":55},[49,17216,13747],{"class":73},[49,17218,3646],{"class":77},[49,17220,17187],{"class":73},[49,17222,17056],{"class":55},[49,17224,17225],{"class":73},"());\n",[49,17227,17228],{"class":51,"line":10541},[49,17229,2264],{"class":73},[49,17231,17232,17234,17236],{"class":51,"line":10547},[49,17233,844],{"class":77},[49,17235,2671],{"class":55},[49,17237,2674],{"class":73},[49,17239,17240],{"class":51,"line":10561},[49,17241,2245],{"class":73},[49,17243,17244],{"class":51,"line":10567},[49,17245,17246],{"class":73},"    Cube c1;\n",[49,17248,17249],{"class":51,"line":10594},[49,17250,17251],{"class":66},"    \u002F\u002F输入立方体的长宽高\n",[49,17253,17254,17256,17258,17261,17263],{"class":51,"line":10603},[49,17255,2250],{"class":73},[49,17257,1872],{"class":77},[49,17259,17260],{"class":59},"\"请输入第一个立方体的长、宽、高：\"",[49,17262,1872],{"class":77},[49,17264,1894],{"class":73},[49,17266,17267,17269],{"class":51,"line":10609},[49,17268,2683],{"class":77},[49,17270,17271],{"class":73}," l,w,h,l1,w1,h1;\n",[49,17273,17274,17276,17278,17280,17282,17284,17286],{"class":51,"line":10617},[49,17275,2710],{"class":73},[49,17277,2129],{"class":77},[49,17279,1347],{"class":73},[49,17281,2129],{"class":77},[49,17283,1624],{"class":73},[49,17285,2129],{"class":77},[49,17287,16824],{"class":73},[49,17289,17290,17293,17296],{"class":51,"line":10622},[49,17291,17292],{"class":73},"    c1.",[49,17294,17295],{"class":55},"setLwh",[49,17297,17298],{"class":73},"(l,w,h);\n",[49,17300,17302],{"class":51,"line":17301},66,[49,17303,17304],{"class":66},"    \u002F\u002F面积\n",[49,17306,17308,17310,17312,17315,17317,17319,17322,17324,17326],{"class":51,"line":17307},67,[49,17309,2250],{"class":73},[49,17311,1872],{"class":77},[49,17313,17314],{"class":59},"\"立方体的表面积为：\"",[49,17316,1872],{"class":77},[49,17318,15527],{"class":73},[49,17320,17321],{"class":55},"mianji",[49,17323,3124],{"class":73},[49,17325,1872],{"class":77},[49,17327,1894],{"class":73},[49,17329,17331],{"class":51,"line":17330},68,[49,17332,17333],{"class":66},"    \u002F\u002F体积\n",[49,17335,17337,17339,17341,17344,17346,17348,17351,17353,17355],{"class":51,"line":17336},69,[49,17338,2250],{"class":73},[49,17340,1872],{"class":77},[49,17342,17343],{"class":59},"\"立方体的体积为：\"",[49,17345,1872],{"class":77},[49,17347,15527],{"class":73},[49,17349,17350],{"class":55},"tiji",[49,17352,3124],{"class":73},[49,17354,1872],{"class":77},[49,17356,1894],{"class":73},[49,17358,17360,17362,17364,17367,17369],{"class":51,"line":17359},70,[49,17361,2250],{"class":73},[49,17363,1872],{"class":77},[49,17365,17366],{"class":59},"\"请输入第二个立方体的长、宽、高：\"",[49,17368,1872],{"class":77},[49,17370,1894],{"class":73},[49,17372,17374,17376,17378,17381,17383,17386,17388],{"class":51,"line":17373},71,[49,17375,2710],{"class":73},[49,17377,2129],{"class":77},[49,17379,17380],{"class":73},"l1",[49,17382,2129],{"class":77},[49,17384,17385],{"class":73},"w1",[49,17387,2129],{"class":77},[49,17389,17390],{"class":73},"h1;\n",[49,17392,17394],{"class":51,"line":17393},72,[49,17395,17396],{"class":73},"    Cube c2;\n",[49,17398,17400,17403,17405],{"class":51,"line":17399},73,[49,17401,17402],{"class":73},"    c2.",[49,17404,17295],{"class":55},[49,17406,17407],{"class":73},"(l1,w1,h1);\n",[49,17409,17411,17413,17415,17418,17420,17423,17425,17427,17429],{"class":51,"line":17410},74,[49,17412,2250],{"class":73},[49,17414,1872],{"class":77},[49,17416,17417],{"class":59},"\"第二个立方体的表面积为：\"",[49,17419,1872],{"class":77},[49,17421,17422],{"class":73},"c2.",[49,17424,17321],{"class":55},[49,17426,3124],{"class":73},[49,17428,1872],{"class":77},[49,17430,1894],{"class":73},[49,17432,17434,17436,17438,17441,17443,17445,17447,17449,17451],{"class":51,"line":17433},75,[49,17435,2250],{"class":73},[49,17437,1872],{"class":77},[49,17439,17440],{"class":59},"\"第二个立方体的体积为：\"",[49,17442,1872],{"class":77},[49,17444,17422],{"class":73},[49,17446,17350],{"class":55},[49,17448,3124],{"class":73},[49,17450,1872],{"class":77},[49,17452,1894],{"class":73},[49,17454,17456],{"class":51,"line":17455},76,[49,17457,399],{"emptyLinePlaceholder":398},[49,17459,17461],{"class":51,"line":17460},77,[49,17462,17463],{"class":66},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[49,17465,17467,17469,17471,17474,17476],{"class":51,"line":17466},78,[49,17468,2250],{"class":73},[49,17470,1872],{"class":77},[49,17472,17473],{"class":59},"\"内部函数判断结果：\"",[49,17475,1872],{"class":77},[49,17477,1894],{"class":73},[49,17479,17481,17483,17485,17488],{"class":51,"line":17480},79,[49,17482,3798],{"class":77},[49,17484,17178],{"class":73},[49,17486,17487],{"class":55},"isEqual",[49,17489,17490],{"class":73},"(c2))\n",[49,17492,17494],{"class":51,"line":17493},80,[49,17495,2728],{"class":73},[49,17497,17499,17501,17503,17506,17508],{"class":51,"line":17498},81,[49,17500,4148],{"class":73},[49,17502,1872],{"class":77},[49,17504,17505],{"class":59},"\"两个立方体相等\"",[49,17507,1872],{"class":77},[49,17509,1894],{"class":73},[49,17511,17513],{"class":51,"line":17512},82,[49,17514,2885],{"class":73},[49,17516,17518],{"class":51,"line":17517},83,[49,17519,17520],{"class":77},"    else\n",[49,17522,17524],{"class":51,"line":17523},84,[49,17525,2728],{"class":73},[49,17527,17529,17531,17533,17536,17538],{"class":51,"line":17528},85,[49,17530,4148],{"class":73},[49,17532,1872],{"class":77},[49,17534,17535],{"class":59},"\"两个立方体不相等\"",[49,17537,1872],{"class":77},[49,17539,1894],{"class":73},[49,17541,17543],{"class":51,"line":17542},86,[49,17544,2885],{"class":73},[49,17546,17548],{"class":51,"line":17547},87,[49,17549,399],{"emptyLinePlaceholder":398},[49,17551,17553,17555,17557,17560,17562],{"class":51,"line":17552},88,[49,17554,2250],{"class":73},[49,17556,1872],{"class":77},[49,17558,17559],{"class":59},"\"全局函数判断结果：\"",[49,17561,1872],{"class":77},[49,17563,1894],{"class":73},[49,17565,17567,17569,17571,17573],{"class":51,"line":17566},89,[49,17568,3798],{"class":77},[49,17570,2357],{"class":73},[49,17572,17487],{"class":55},[49,17574,17575],{"class":73},"(c1, c2))\n",[49,17577,17579],{"class":51,"line":17578},90,[49,17580,2728],{"class":73},[49,17582,17584,17586,17588,17590,17592],{"class":51,"line":17583},91,[49,17585,4148],{"class":73},[49,17587,1872],{"class":77},[49,17589,17505],{"class":59},[49,17591,1872],{"class":77},[49,17593,1894],{"class":73},[49,17595,17597],{"class":51,"line":17596},92,[49,17598,2885],{"class":73},[49,17600,17602],{"class":51,"line":17601},93,[49,17603,17520],{"class":77},[49,17605,17607],{"class":51,"line":17606},94,[49,17608,2728],{"class":73},[49,17610,17612,17614,17616,17618,17620],{"class":51,"line":17611},95,[49,17613,4148],{"class":73},[49,17615,1872],{"class":77},[49,17617,17535],{"class":59},[49,17619,1872],{"class":77},[49,17621,1894],{"class":73},[49,17623,17625],{"class":51,"line":17624},96,[49,17626,2885],{"class":73},[49,17628,17630],{"class":51,"line":17629},97,[49,17631,2264],{"class":73},[30,17633,17634],{"start":63},[33,17635,17636],{},[112,17637,17638],{},"练习案例2：点和圆的关系",[742,17640,17641],{},[33,17642,17643],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[40,17645,17647],{"className":829,"code":17646,"language":831,"meta":27,"style":27},"#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",[46,17648,17649,17655,17665,17672,17679,17683,17687,17692,17726,17731,17747,17761,17765,17769,17776,17783,17787,17793,17797,17801,17805,17827,17850,17855,17869,17884,17888,17892,17898,17903,17908,17912,17938,17942,17972,18000,18028,18045,18049,18062,18066,18070,18074,18087,18091,18095,18103,18107,18111,18115,18120,18124,18135,18142,18151,18161,18172,18179,18192,18203,18213,18224,18231,18245,18250,18260,18268],{"__ignoreMap":27},[49,17650,17651,17653],{"class":51,"line":52},[49,17652,2648],{"class":77},[49,17654,2651],{"class":59},[49,17656,17657,17659,17661,17663],{"class":51,"line":63},[49,17658,2656],{"class":77},[49,17660,2659],{"class":77},[49,17662,2662],{"class":55},[49,17664,1990],{"class":73},[49,17666,17667,17669],{"class":51,"line":70},[49,17668,2648],{"class":77},[49,17670,17671],{"class":59},"\u003Ccmath>\n",[49,17673,17674,17676],{"class":51,"line":219},[49,17675,15391],{"class":77},[49,17677,17678],{"class":55}," Point\n",[49,17680,17681],{"class":51,"line":233},[49,17682,2245],{"class":73},[49,17684,17685],{"class":51,"line":241},[49,17686,15413],{"class":77},[49,17688,17689],{"class":51,"line":1920},[49,17690,17691],{"class":66},"    \u002F\u002F赋值\n",[49,17693,17694,17696,17699,17701,17703,17706,17708,17710,17713,17716,17718,17721,17723],{"class":51,"line":2011},[49,17695,15606],{"class":77},[49,17697,17698],{"class":55}," setPoint",[49,17700,841],{"class":73},[49,17702,14734],{"class":77},[49,17704,17705],{"class":5913}," x",[49,17707,13132],{"class":73},[49,17709,14734],{"class":77},[49,17711,17712],{"class":5913}," y",[49,17714,17715],{"class":73},") { m_x ",[49,17717,78],{"class":77},[49,17719,17720],{"class":73}," x; m_y ",[49,17722,78],{"class":77},[49,17724,17725],{"class":73}," y; }\n",[49,17727,17728],{"class":51,"line":2017},[49,17729,17730],{"class":66},"    \u002F\u002F获取坐标\n",[49,17732,17733,17735,17738,17741,17744],{"class":51,"line":2029},[49,17734,15435],{"class":77},[49,17736,17737],{"class":55}," getX",[49,17739,17740],{"class":73},"() { ",[49,17742,17743],{"class":77},"return",[49,17745,17746],{"class":73}," m_x; }\n",[49,17748,17749,17751,17754,17756,17758],{"class":51,"line":2311},[49,17750,15435],{"class":77},[49,17752,17753],{"class":55}," getY",[49,17755,17740],{"class":73},[49,17757,17743],{"class":77},[49,17759,17760],{"class":73}," m_y; }\n",[49,17762,17763],{"class":51,"line":2316},[49,17764,399],{"emptyLinePlaceholder":398},[49,17766,17767],{"class":51,"line":2322},[49,17768,15919],{"class":77},[49,17770,17771,17773],{"class":51,"line":2327},[49,17772,15435],{"class":77},[49,17774,17775],{"class":73}," m_x;\n",[49,17777,17778,17780],{"class":51,"line":2341},[49,17779,15435],{"class":77},[49,17781,17782],{"class":73}," m_y;\n",[49,17784,17785],{"class":51,"line":2346},[49,17786,4692],{"class":73},[49,17788,17789,17791],{"class":51,"line":2352},[49,17790,15391],{"class":77},[49,17792,15394],{"class":55},[49,17794,17795],{"class":51,"line":2373},[49,17796,2245],{"class":73},[49,17798,17799],{"class":51,"line":2378},[49,17800,15413],{"class":77},[49,17802,17803],{"class":51,"line":2392},[49,17804,17691],{"class":66},[49,17806,17807,17809,17812,17814,17816,17819,17822,17824],{"class":51,"line":2397},[49,17808,15606],{"class":77},[49,17810,17811],{"class":55}," setRadius",[49,17813,841],{"class":73},[49,17815,14734],{"class":77},[49,17817,17818],{"class":5913}," r",[49,17820,17821],{"class":73},") { m_r ",[49,17823,78],{"class":77},[49,17825,17826],{"class":73}," r; }\n",[49,17828,17829,17831,17834,17836,17839,17842,17845,17847],{"class":51,"line":2426},[49,17830,15606],{"class":77},[49,17832,17833],{"class":55}," setCenter",[49,17835,841],{"class":73},[49,17837,17838],{"class":55},"Point",[49,17840,17841],{"class":5913}," center",[49,17843,17844],{"class":73},") { m_center ",[49,17846,78],{"class":77},[49,17848,17849],{"class":73}," center; }\n",[49,17851,17852],{"class":51,"line":2431},[49,17853,17854],{"class":66},"    \u002F\u002F获取属性\n",[49,17856,17857,17859,17862,17864,17866],{"class":51,"line":2448},[49,17858,15435],{"class":77},[49,17860,17861],{"class":55}," getRadius",[49,17863,17740],{"class":73},[49,17865,17743],{"class":77},[49,17867,17868],{"class":73}," m_r; }\n",[49,17870,17871,17874,17877,17879,17881],{"class":51,"line":2453},[49,17872,17873],{"class":55},"    Point",[49,17875,17876],{"class":55}," getCenter",[49,17878,17740],{"class":73},[49,17880,17743],{"class":77},[49,17882,17883],{"class":73}," m_center; }\n",[49,17885,17886],{"class":51,"line":2458},[49,17887,399],{"emptyLinePlaceholder":398},[49,17889,17890],{"class":51,"line":2463},[49,17891,15919],{"class":77},[49,17893,17894,17896],{"class":51,"line":2477},[49,17895,15435],{"class":77},[49,17897,15425],{"class":73},[49,17899,17900],{"class":51,"line":2482},[49,17901,17902],{"class":66},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[49,17904,17905],{"class":51,"line":3274},[49,17906,17907],{"class":73},"    Point m_center;\n",[49,17909,17910],{"class":51,"line":3288},[49,17911,4692],{"class":73},[49,17913,17914,17916,17919,17921,17924,17926,17928,17930,17932,17934,17936],{"class":51,"line":3296},[49,17915,6061],{"class":77},[49,17917,17918],{"class":55}," isInCircle",[49,17920,841],{"class":73},[49,17922,17923],{"class":55},"Circle",[49,17925,11281],{"class":77},[49,17927,1117],{"class":5913},[49,17929,1207],{"class":73},[49,17931,17838],{"class":55},[49,17933,11281],{"class":77},[49,17935,14],{"class":5913},[49,17937,847],{"class":73},[49,17939,17940],{"class":51,"line":3301},[49,17941,2245],{"class":73},[49,17943,17944,17946,17949,17951,17953,17956,17959,17962,17964,17966,17968,17970],{"class":51,"line":3307},[49,17945,15435],{"class":77},[49,17947,17948],{"class":73}," dx ",[49,17950,78],{"class":77},[49,17952,17039],{"class":73},[49,17954,17955],{"class":55},"getCenter",[49,17957,17958],{"class":73},"().",[49,17960,17961],{"class":55},"getX",[49,17963,13747],{"class":73},[49,17965,1361],{"class":77},[49,17967,16585],{"class":73},[49,17969,17961],{"class":55},[49,17971,6333],{"class":73},[49,17973,17974,17976,17979,17981,17983,17985,17987,17990,17992,17994,17996,17998],{"class":51,"line":3313},[49,17975,15435],{"class":77},[49,17977,17978],{"class":73}," dy ",[49,17980,78],{"class":77},[49,17982,17039],{"class":73},[49,17984,17955],{"class":55},[49,17986,17958],{"class":73},[49,17988,17989],{"class":55},"getY",[49,17991,13747],{"class":73},[49,17993,1361],{"class":77},[49,17995,16585],{"class":73},[49,17997,17989],{"class":55},[49,17999,6333],{"class":73},[49,18001,18002,18004,18007,18009,18012,18015,18017,18019,18021,18023,18025],{"class":51,"line":3318},[49,18003,15435],{"class":77},[49,18005,18006],{"class":73}," distance ",[49,18008,78],{"class":77},[49,18010,18011],{"class":55}," sqrt",[49,18013,18014],{"class":73},"(dx ",[49,18016,1284],{"class":77},[49,18018,17948],{"class":73},[49,18020,1310],{"class":77},[49,18022,17978],{"class":73},[49,18024,1284],{"class":77},[49,18026,18027],{"class":73}," dy);\n",[49,18029,18030,18032,18035,18037,18039,18042],{"class":51,"line":8645},[49,18031,3798],{"class":77},[49,18033,18034],{"class":73}," (distance ",[49,18036,1739],{"class":77},[49,18038,17039],{"class":73},[49,18040,18041],{"class":55},"getRadius",[49,18043,18044],{"class":73},"())\n",[49,18046,18047],{"class":51,"line":8669},[49,18048,2728],{"class":73},[49,18050,18051,18053,18055,18058,18060],{"class":51,"line":8674},[49,18052,10366],{"class":73},[49,18054,1872],{"class":77},[49,18056,18057],{"class":59}," \"点在圆内\"",[49,18059,2144],{"class":77},[49,18061,9537],{"class":73},[49,18063,18064],{"class":51,"line":8680},[49,18065,2885],{"class":73},[49,18067,18068],{"class":51,"line":8707},[49,18069,17520],{"class":77},[49,18071,18072],{"class":51,"line":8712},[49,18073,2728],{"class":73},[49,18075,18076,18078,18080,18083,18085],{"class":51,"line":8718},[49,18077,10366],{"class":73},[49,18079,1872],{"class":77},[49,18081,18082],{"class":59}," \"点在圆外\"",[49,18084,2144],{"class":77},[49,18086,9537],{"class":73},[49,18088,18089],{"class":51,"line":8730},[49,18090,2885],{"class":73},[49,18092,18093],{"class":51,"line":8742},[49,18094,2264],{"class":73},[49,18096,18097,18099,18101],{"class":51,"line":8754},[49,18098,844],{"class":77},[49,18100,2671],{"class":55},[49,18102,2674],{"class":73},[49,18104,18105],{"class":51,"line":10413},[49,18106,2245],{"class":73},[49,18108,18109],{"class":51,"line":10438},[49,18110,15750],{"class":66},[49,18112,18113],{"class":51,"line":10461},[49,18114,15497],{"class":73},[49,18116,18117],{"class":51,"line":10485},[49,18118,18119],{"class":73},"    Point p1;\n",[49,18121,18122],{"class":51,"line":10490},[49,18123,17691],{"class":66},[49,18125,18126,18128,18130,18133],{"class":51,"line":10495},[49,18127,2250],{"class":73},[49,18129,1872],{"class":77},[49,18131,18132],{"class":59},"\"请输入圆的半径：\"",[49,18134,1990],{"class":73},[49,18136,18137,18139],{"class":51,"line":10500},[49,18138,15435],{"class":77},[49,18140,18141],{"class":73}," r;\n",[49,18143,18144,18146,18148],{"class":51,"line":10509},[49,18145,2710],{"class":73},[49,18147,2129],{"class":77},[49,18149,18150],{"class":73},"r;\n",[49,18152,18153,18155,18158],{"class":51,"line":10514},[49,18154,17292],{"class":73},[49,18156,18157],{"class":55},"setRadius",[49,18159,18160],{"class":73},"(r);\n",[49,18162,18163,18165,18167,18170],{"class":51,"line":10520},[49,18164,2250],{"class":73},[49,18166,1872],{"class":77},[49,18168,18169],{"class":59},"\"请输入圆心坐标：\"",[49,18171,1990],{"class":73},[49,18173,18174,18176],{"class":51,"line":10541},[49,18175,15435],{"class":77},[49,18177,18178],{"class":73}," x, y;\n",[49,18180,18181,18183,18185,18187,18189],{"class":51,"line":10547},[49,18182,2710],{"class":73},[49,18184,2129],{"class":77},[49,18186,1649],{"class":73},[49,18188,2129],{"class":77},[49,18190,18191],{"class":73},"y;\n",[49,18193,18194,18197,18200],{"class":51,"line":10561},[49,18195,18196],{"class":73},"    p1.",[49,18198,18199],{"class":55},"setPoint",[49,18201,18202],{"class":73},"(x, y);\n",[49,18204,18205,18207,18210],{"class":51,"line":10567},[49,18206,17292],{"class":73},[49,18208,18209],{"class":55},"setCenter",[49,18211,18212],{"class":73},"(p1);\n",[49,18214,18215,18217,18219,18222],{"class":51,"line":10594},[49,18216,2250],{"class":73},[49,18218,1872],{"class":77},[49,18220,18221],{"class":59},"\"请输入测试点坐标：\"",[49,18223,1990],{"class":73},[49,18225,18226,18228],{"class":51,"line":10603},[49,18227,15435],{"class":77},[49,18229,18230],{"class":73}," x1, y1;\n",[49,18232,18233,18235,18237,18240,18242],{"class":51,"line":10609},[49,18234,2710],{"class":73},[49,18236,2129],{"class":77},[49,18238,18239],{"class":73},"x1",[49,18241,2129],{"class":77},[49,18243,18244],{"class":73},"y1;\n",[49,18246,18247],{"class":51,"line":10617},[49,18248,18249],{"class":73},"    Point p2;\n",[49,18251,18252,18255,18257],{"class":51,"line":10622},[49,18253,18254],{"class":73},"    p2.",[49,18256,18199],{"class":55},[49,18258,18259],{"class":73},"(x1, y1);\n",[49,18261,18262,18265],{"class":51,"line":17301},[49,18263,18264],{"class":55},"    isInCircle",[49,18266,18267],{"class":73},"(c1, p2);\n",[49,18269,18270],{"class":51,"line":17307},[49,18271,2264],{"class":73},[14,18273,18274],{},"在类中可以让另一个类作为本来的成员",[14,18276,18277],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,18279,18280],{},"创建point.h",[40,18282,18284],{"className":829,"code":18283,"language":831,"meta":27,"style":27},"#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",[46,18285,18286,18297,18303,18313,18319,18323,18328,18332,18336,18356,18360,18368,18376,18380,18384,18390,18396],{"__ignoreMap":27},[49,18287,18288,18291,18294],{"class":51,"line":52},[49,18289,18290],{"class":77},"#pragma",[49,18292,18293],{"class":55}," once",[49,18295,18296],{"class":66}," \u002F\u002F防止头文件重复包含\n",[49,18298,18299,18301],{"class":51,"line":63},[49,18300,2648],{"class":77},[49,18302,2651],{"class":59},[49,18304,18305,18307,18309,18311],{"class":51,"line":70},[49,18306,2656],{"class":77},[49,18308,2659],{"class":77},[49,18310,2662],{"class":55},[49,18312,1990],{"class":73},[49,18314,18315,18317],{"class":51,"line":219},[49,18316,15391],{"class":77},[49,18318,17678],{"class":55},[49,18320,18321],{"class":51,"line":233},[49,18322,2245],{"class":73},[49,18324,18325],{"class":51,"line":241},[49,18326,18327],{"class":66},"\u002F\u002F做好声明与变量定义就可以\n",[49,18329,18330],{"class":51,"line":1920},[49,18331,15413],{"class":77},[49,18333,18334],{"class":51,"line":2011},[49,18335,17691],{"class":66},[49,18337,18338,18340,18342,18344,18346,18348,18350,18352,18354],{"class":51,"line":2017},[49,18339,15606],{"class":77},[49,18341,17698],{"class":55},[49,18343,841],{"class":73},[49,18345,14734],{"class":77},[49,18347,17705],{"class":5913},[49,18349,13132],{"class":73},[49,18351,14734],{"class":77},[49,18353,17712],{"class":5913},[49,18355,3416],{"class":73},[49,18357,18358],{"class":51,"line":2029},[49,18359,17730],{"class":66},[49,18361,18362,18364,18366],{"class":51,"line":2311},[49,18363,15435],{"class":77},[49,18365,17737],{"class":55},[49,18367,6333],{"class":73},[49,18369,18370,18372,18374],{"class":51,"line":2316},[49,18371,15435],{"class":77},[49,18373,17753],{"class":55},[49,18375,6333],{"class":73},[49,18377,18378],{"class":51,"line":2322},[49,18379,399],{"emptyLinePlaceholder":398},[49,18381,18382],{"class":51,"line":2327},[49,18383,15919],{"class":77},[49,18385,18386,18388],{"class":51,"line":2341},[49,18387,15435],{"class":77},[49,18389,17775],{"class":73},[49,18391,18392,18394],{"class":51,"line":2346},[49,18393,15435],{"class":77},[49,18395,17782],{"class":73},[49,18397,18398],{"class":51,"line":2352},[49,18399,4692],{"class":73},[14,18401,18402],{},"创建point.cpp",[40,18404,18406],{"className":829,"code":18405,"language":831,"meta":27,"style":27},"#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",[46,18407,18408,18415,18420,18454,18458,18474],{"__ignoreMap":27},[49,18409,18410,18412],{"class":51,"line":52},[49,18411,2648],{"class":77},[49,18413,18414],{"class":59},"\u003Cpoint.h>\n",[49,18416,18417],{"class":51,"line":63},[49,18418,18419],{"class":66},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[49,18421,18422,18424,18427,18430,18432,18434,18436,18438,18440,18442,18444,18446,18448,18450,18452],{"class":51,"line":70},[49,18423,15606],{"class":77},[49,18425,18426],{"class":55}," Point",[49,18428,18429],{"class":73},"::",[49,18431,18199],{"class":55},[49,18433,841],{"class":73},[49,18435,14734],{"class":77},[49,18437,17705],{"class":5913},[49,18439,13132],{"class":73},[49,18441,14734],{"class":77},[49,18443,17712],{"class":5913},[49,18445,17715],{"class":73},[49,18447,78],{"class":77},[49,18449,17720],{"class":73},[49,18451,78],{"class":77},[49,18453,17725],{"class":73},[49,18455,18456],{"class":51,"line":219},[49,18457,17730],{"class":66},[49,18459,18460,18462,18464,18466,18468,18470,18472],{"class":51,"line":233},[49,18461,15435],{"class":77},[49,18463,18426],{"class":55},[49,18465,18429],{"class":73},[49,18467,17961],{"class":55},[49,18469,17740],{"class":73},[49,18471,17743],{"class":77},[49,18473,17746],{"class":73},[49,18475,18476,18478,18480,18482,18484,18486,18488],{"class":51,"line":241},[49,18477,15435],{"class":77},[49,18479,18426],{"class":55},[49,18481,18429],{"class":73},[49,18483,17989],{"class":55},[49,18485,17740],{"class":73},[49,18487,17743],{"class":77},[49,18489,17760],{"class":73},[14,18491,18492],{},"创建circle.h",[40,18494,18496],{"className":829,"code":18495,"language":831,"meta":27,"style":27},"#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",[46,18497,18498,18505,18511,18521,18527,18533,18537,18541,18545,18559,18573,18577,18585,18593,18597,18601,18607,18611,18615],{"__ignoreMap":27},[49,18499,18500,18502],{"class":51,"line":52},[49,18501,18290],{"class":77},[49,18503,18504],{"class":55}," once\n",[49,18506,18507,18509],{"class":51,"line":63},[49,18508,2648],{"class":77},[49,18510,2651],{"class":59},[49,18512,18513,18515,18517,18519],{"class":51,"line":70},[49,18514,2656],{"class":77},[49,18516,2659],{"class":77},[49,18518,2662],{"class":55},[49,18520,1990],{"class":73},[49,18522,18523,18525],{"class":51,"line":219},[49,18524,2648],{"class":77},[49,18526,18414],{"class":59},[49,18528,18529,18531],{"class":51,"line":233},[49,18530,15391],{"class":77},[49,18532,15394],{"class":55},[49,18534,18535],{"class":51,"line":241},[49,18536,2245],{"class":73},[49,18538,18539],{"class":51,"line":1920},[49,18540,15413],{"class":77},[49,18542,18543],{"class":51,"line":2011},[49,18544,17691],{"class":66},[49,18546,18547,18549,18551,18553,18555,18557],{"class":51,"line":2017},[49,18548,15606],{"class":77},[49,18550,17811],{"class":55},[49,18552,841],{"class":73},[49,18554,14734],{"class":77},[49,18556,17818],{"class":5913},[49,18558,3416],{"class":73},[49,18560,18561,18563,18565,18567,18569,18571],{"class":51,"line":2029},[49,18562,15606],{"class":77},[49,18564,17833],{"class":55},[49,18566,841],{"class":73},[49,18568,17838],{"class":55},[49,18570,17841],{"class":5913},[49,18572,3416],{"class":73},[49,18574,18575],{"class":51,"line":2311},[49,18576,17854],{"class":66},[49,18578,18579,18581,18583],{"class":51,"line":2316},[49,18580,15435],{"class":77},[49,18582,17861],{"class":55},[49,18584,6333],{"class":73},[49,18586,18587,18589,18591],{"class":51,"line":2322},[49,18588,17873],{"class":55},[49,18590,17876],{"class":55},[49,18592,6333],{"class":73},[49,18594,18595],{"class":51,"line":2327},[49,18596,399],{"emptyLinePlaceholder":398},[49,18598,18599],{"class":51,"line":2341},[49,18600,15919],{"class":77},[49,18602,18603,18605],{"class":51,"line":2346},[49,18604,15435],{"class":77},[49,18606,15425],{"class":73},[49,18608,18609],{"class":51,"line":2352},[49,18610,17902],{"class":66},[49,18612,18613],{"class":51,"line":2373},[49,18614,17907],{"class":73},[49,18616,18617],{"class":51,"line":2378},[49,18618,4692],{"class":73},[14,18620,18621],{},"创建circle.cpp",[40,18623,18625],{"className":829,"code":18624,"language":831,"meta":27,"style":27},"#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",[46,18626,18627,18634,18657,18679,18684,18700],{"__ignoreMap":27},[49,18628,18629,18631],{"class":51,"line":52},[49,18630,2648],{"class":77},[49,18632,18633],{"class":59},"\u003Ccircle.h>\n",[49,18635,18636,18638,18641,18643,18645,18647,18649,18651,18653,18655],{"class":51,"line":63},[49,18637,6061],{"class":77},[49,18639,18640],{"class":55}," Circle",[49,18642,18429],{"class":73},[49,18644,18157],{"class":55},[49,18646,841],{"class":73},[49,18648,14734],{"class":77},[49,18650,17818],{"class":5913},[49,18652,17821],{"class":73},[49,18654,78],{"class":77},[49,18656,17826],{"class":73},[49,18658,18659,18661,18663,18665,18667,18669,18671,18673,18675,18677],{"class":51,"line":70},[49,18660,6061],{"class":77},[49,18662,18640],{"class":55},[49,18664,18429],{"class":73},[49,18666,18209],{"class":55},[49,18668,841],{"class":73},[49,18670,17838],{"class":55},[49,18672,17841],{"class":5913},[49,18674,17844],{"class":73},[49,18676,78],{"class":77},[49,18678,17849],{"class":73},[49,18680,18681],{"class":51,"line":219},[49,18682,18683],{"class":66},"\u002F\u002F获取属性\n",[49,18685,18686,18688,18690,18692,18694,18696,18698],{"class":51,"line":233},[49,18687,14734],{"class":77},[49,18689,18640],{"class":55},[49,18691,18429],{"class":73},[49,18693,18041],{"class":55},[49,18695,17740],{"class":73},[49,18697,17743],{"class":77},[49,18699,17868],{"class":73},[49,18701,18702,18704,18706,18708,18710,18712,18714],{"class":51,"line":241},[49,18703,17838],{"class":55},[49,18705,18640],{"class":55},[49,18707,18429],{"class":73},[49,18709,17955],{"class":55},[49,18711,17740],{"class":73},[49,18713,17743],{"class":77},[49,18715,17883],{"class":73},[14,18717,18718],{},"使用封装的类",[40,18720,18722],{"className":829,"code":18721,"language":831,"meta":27,"style":27},"#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",[46,18723,18724,18730,18740,18746,18752,18776,18780,18806,18832,18856,18870,18874,18886,18890,18894,18898,18910,18914,18918,18926,18930,18934,18938,18942,18946,18956,18962,18970,18978,18988,18994,19006,19014,19022,19032,19038,19050,19054,19062,19068],{"__ignoreMap":27},[49,18725,18726,18728],{"class":51,"line":52},[49,18727,2648],{"class":77},[49,18729,2651],{"class":59},[49,18731,18732,18734,18736,18738],{"class":51,"line":63},[49,18733,2656],{"class":77},[49,18735,2659],{"class":77},[49,18737,2662],{"class":55},[49,18739,1990],{"class":73},[49,18741,18742,18744],{"class":51,"line":70},[49,18743,2648],{"class":77},[49,18745,18633],{"class":59},[49,18747,18748,18750],{"class":51,"line":219},[49,18749,2648],{"class":77},[49,18751,18414],{"class":59},[49,18753,18754,18756,18758,18760,18762,18764,18766,18768,18770,18772,18774],{"class":51,"line":233},[49,18755,6061],{"class":77},[49,18757,17918],{"class":55},[49,18759,841],{"class":73},[49,18761,17923],{"class":55},[49,18763,11281],{"class":77},[49,18765,1117],{"class":5913},[49,18767,1207],{"class":73},[49,18769,17838],{"class":55},[49,18771,11281],{"class":77},[49,18773,14],{"class":5913},[49,18775,847],{"class":73},[49,18777,18778],{"class":51,"line":241},[49,18779,2245],{"class":73},[49,18781,18782,18784,18786,18788,18790,18792,18794,18796,18798,18800,18802,18804],{"class":51,"line":1920},[49,18783,15435],{"class":77},[49,18785,17948],{"class":73},[49,18787,78],{"class":77},[49,18789,17039],{"class":73},[49,18791,17955],{"class":55},[49,18793,17958],{"class":73},[49,18795,17961],{"class":55},[49,18797,13747],{"class":73},[49,18799,1361],{"class":77},[49,18801,16585],{"class":73},[49,18803,17961],{"class":55},[49,18805,6333],{"class":73},[49,18807,18808,18810,18812,18814,18816,18818,18820,18822,18824,18826,18828,18830],{"class":51,"line":2011},[49,18809,15435],{"class":77},[49,18811,17978],{"class":73},[49,18813,78],{"class":77},[49,18815,17039],{"class":73},[49,18817,17955],{"class":55},[49,18819,17958],{"class":73},[49,18821,17989],{"class":55},[49,18823,13747],{"class":73},[49,18825,1361],{"class":77},[49,18827,16585],{"class":73},[49,18829,17989],{"class":55},[49,18831,6333],{"class":73},[49,18833,18834,18836,18838,18840,18842,18844,18846,18848,18850,18852,18854],{"class":51,"line":2017},[49,18835,15435],{"class":77},[49,18837,18006],{"class":73},[49,18839,78],{"class":77},[49,18841,18011],{"class":55},[49,18843,18014],{"class":73},[49,18845,1284],{"class":77},[49,18847,17948],{"class":73},[49,18849,1310],{"class":77},[49,18851,17978],{"class":73},[49,18853,1284],{"class":77},[49,18855,18027],{"class":73},[49,18857,18858,18860,18862,18864,18866,18868],{"class":51,"line":2029},[49,18859,3798],{"class":77},[49,18861,18034],{"class":73},[49,18863,1739],{"class":77},[49,18865,17039],{"class":73},[49,18867,18041],{"class":55},[49,18869,18044],{"class":73},[49,18871,18872],{"class":51,"line":2311},[49,18873,2728],{"class":73},[49,18875,18876,18878,18880,18882,18884],{"class":51,"line":2316},[49,18877,10366],{"class":73},[49,18879,1872],{"class":77},[49,18881,18057],{"class":59},[49,18883,2144],{"class":77},[49,18885,9537],{"class":73},[49,18887,18888],{"class":51,"line":2322},[49,18889,2885],{"class":73},[49,18891,18892],{"class":51,"line":2327},[49,18893,17520],{"class":77},[49,18895,18896],{"class":51,"line":2341},[49,18897,2728],{"class":73},[49,18899,18900,18902,18904,18906,18908],{"class":51,"line":2346},[49,18901,10366],{"class":73},[49,18903,1872],{"class":77},[49,18905,18082],{"class":59},[49,18907,2144],{"class":77},[49,18909,9537],{"class":73},[49,18911,18912],{"class":51,"line":2352},[49,18913,2885],{"class":73},[49,18915,18916],{"class":51,"line":2373},[49,18917,2264],{"class":73},[49,18919,18920,18922,18924],{"class":51,"line":2378},[49,18921,844],{"class":77},[49,18923,2671],{"class":55},[49,18925,2674],{"class":73},[49,18927,18928],{"class":51,"line":2392},[49,18929,2245],{"class":73},[49,18931,18932],{"class":51,"line":2397},[49,18933,15750],{"class":66},[49,18935,18936],{"class":51,"line":2426},[49,18937,15497],{"class":73},[49,18939,18940],{"class":51,"line":2431},[49,18941,18119],{"class":73},[49,18943,18944],{"class":51,"line":2448},[49,18945,17691],{"class":66},[49,18947,18948,18950,18952,18954],{"class":51,"line":2453},[49,18949,2250],{"class":73},[49,18951,1872],{"class":77},[49,18953,18132],{"class":59},[49,18955,1990],{"class":73},[49,18957,18958,18960],{"class":51,"line":2458},[49,18959,15435],{"class":77},[49,18961,18141],{"class":73},[49,18963,18964,18966,18968],{"class":51,"line":2463},[49,18965,2710],{"class":73},[49,18967,2129],{"class":77},[49,18969,18150],{"class":73},[49,18971,18972,18974,18976],{"class":51,"line":2477},[49,18973,17292],{"class":73},[49,18975,18157],{"class":55},[49,18977,18160],{"class":73},[49,18979,18980,18982,18984,18986],{"class":51,"line":2482},[49,18981,2250],{"class":73},[49,18983,1872],{"class":77},[49,18985,18169],{"class":59},[49,18987,1990],{"class":73},[49,18989,18990,18992],{"class":51,"line":3274},[49,18991,15435],{"class":77},[49,18993,18178],{"class":73},[49,18995,18996,18998,19000,19002,19004],{"class":51,"line":3288},[49,18997,2710],{"class":73},[49,18999,2129],{"class":77},[49,19001,1649],{"class":73},[49,19003,2129],{"class":77},[49,19005,18191],{"class":73},[49,19007,19008,19010,19012],{"class":51,"line":3296},[49,19009,18196],{"class":73},[49,19011,18199],{"class":55},[49,19013,18202],{"class":73},[49,19015,19016,19018,19020],{"class":51,"line":3301},[49,19017,17292],{"class":73},[49,19019,18209],{"class":55},[49,19021,18212],{"class":73},[49,19023,19024,19026,19028,19030],{"class":51,"line":3307},[49,19025,2250],{"class":73},[49,19027,1872],{"class":77},[49,19029,18221],{"class":59},[49,19031,1990],{"class":73},[49,19033,19034,19036],{"class":51,"line":3313},[49,19035,15435],{"class":77},[49,19037,18230],{"class":73},[49,19039,19040,19042,19044,19046,19048],{"class":51,"line":3318},[49,19041,2710],{"class":73},[49,19043,2129],{"class":77},[49,19045,18239],{"class":73},[49,19047,2129],{"class":77},[49,19049,18244],{"class":73},[49,19051,19052],{"class":51,"line":8645},[49,19053,18249],{"class":73},[49,19055,19056,19058,19060],{"class":51,"line":8669},[49,19057,18254],{"class":73},[49,19059,18199],{"class":55},[49,19061,18259],{"class":73},[49,19063,19064,19066],{"class":51,"line":8674},[49,19065,18264],{"class":55},[49,19067,18267],{"class":73},[49,19069,19070],{"class":51,"line":8680},[49,19071,2264],{"class":73},[782,19073,19075],{"id":19074},"_82对象的初始化清理","8.2对象的初始化清理",[742,19077,19078,19081],{},[33,19079,19080],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[33,19082,19083],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[18,19085,19087],{"id":19086},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,19089,19090,19091,19094],{},"对象的",[112,19092,19093],{},"初始化和清理","也是两个非常重要的安全问题",[14,19096,19097],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,19099,19100],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,19102,19103,19104,19107,19108,19111],{},"c++利用了",[112,19105,19106],{},"构造函数","和",[112,19109,19110],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,19113,19114,19115],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[112,19116,19117],{},"我们不提供构造和析构，编译器会提供",[14,19119,19120],{},[112,19121,19122],{},"编译器提供的构造函数和析构函数是空实现。",[742,19124,19125,19128],{},[33,19126,19127],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[33,19129,19130,19131,19134],{},"析构函数：主要作用在于对象",[112,19132,19133],{},"销毁前","系统自动调用，执行一些清理工作。",[14,19136,19137,19140],{},[112,19138,19139],{},"构造函数语法：",[46,19141,19142],{},"类名(){}",[30,19144,19145,19148,19151,19154,19157],{},[33,19146,19147],{},"构造函数，没有返回值也不写void",[33,19149,19150],{},"函数名称与类名相同",[33,19152,19153],{},"构造函数可以有参数，因此可以发生重载",[33,19155,19156],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[33,19158,19159,19160,1258],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[46,19161,19162],{},"Person(){}",[14,19164,19165,14492,19168],{},[112,19166,19167],{},"析构函数语法：",[46,19169,19170],{},"~类名(){}",[30,19172,19173,19176,19179,19185],{},[33,19174,19175],{},"析构函数，没有返回值也不写void",[33,19177,19178],{},"函数名称与类名相同,在名称前加上符号  ~",[33,19180,19181,19182],{},"析构函数不可以有参数，因此",[112,19183,19184],{},"不可以发生重载",[33,19186,19187],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[40,19189,19191],{"className":829,"code":19190,"language":831,"meta":27,"style":27},"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",[46,19192,19193,19199,19203,19207,19212,19219,19223,19236,19240,19245,19252,19256,19269,19273,19277,19281,19285,19293,19297,19305,19309,19313,19321,19325,19330,19334,19341,19345,19358,19362,19370],{"__ignoreMap":27},[49,19194,19195,19197],{"class":51,"line":52},[49,19196,15391],{"class":77},[49,19198,15868],{"class":55},[49,19200,19201],{"class":51,"line":63},[49,19202,2245],{"class":73},[49,19204,19205],{"class":51,"line":70},[49,19206,15413],{"class":77},[49,19208,19209],{"class":51,"line":219},[49,19210,19211],{"class":66},"    \u002F\u002F构造函数\n",[49,19213,19214,19217],{"class":51,"line":233},[49,19215,19216],{"class":55},"    Person",[49,19218,2674],{"class":73},[49,19220,19221],{"class":51,"line":241},[49,19222,2728],{"class":73},[49,19224,19225,19227,19229,19232,19234],{"class":51,"line":1920},[49,19226,10366],{"class":73},[49,19228,1872],{"class":77},[49,19230,19231],{"class":59}," \"Person的构造函数调用\"",[49,19233,2144],{"class":77},[49,19235,9537],{"class":73},[49,19237,19238],{"class":51,"line":2011},[49,19239,2885],{"class":73},[49,19241,19242],{"class":51,"line":2017},[49,19243,19244],{"class":66},"    \u002F\u002F析构函数\n",[49,19246,19247,19250],{"class":51,"line":2029},[49,19248,19249],{"class":55},"    ~Person",[49,19251,2674],{"class":73},[49,19253,19254],{"class":51,"line":2311},[49,19255,2728],{"class":73},[49,19257,19258,19260,19262,19265,19267],{"class":51,"line":2316},[49,19259,10366],{"class":73},[49,19261,1872],{"class":77},[49,19263,19264],{"class":59}," \"Person的析构函数调用\"",[49,19266,2144],{"class":77},[49,19268,9537],{"class":73},[49,19270,19271],{"class":51,"line":2322},[49,19272,2885],{"class":73},[49,19274,19275],{"class":51,"line":2327},[49,19276,399],{"emptyLinePlaceholder":398},[49,19278,19279],{"class":51,"line":2341},[49,19280,4692],{"class":73},[49,19282,19283],{"class":51,"line":2346},[49,19284,399],{"emptyLinePlaceholder":398},[49,19286,19287,19289,19291],{"class":51,"line":2352},[49,19288,6061],{"class":77},[49,19290,6285],{"class":55},[49,19292,2674],{"class":73},[49,19294,19295],{"class":51,"line":2373},[49,19296,2245],{"class":73},[49,19298,19299,19302],{"class":51,"line":2378},[49,19300,19301],{"class":73},"    Person p;",[49,19303,19304],{"class":66},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[49,19306,19307],{"class":51,"line":2392},[49,19308,2264],{"class":73},[49,19310,19311],{"class":51,"line":2397},[49,19312,399],{"emptyLinePlaceholder":398},[49,19314,19315,19317,19319],{"class":51,"line":2426},[49,19316,844],{"class":77},[49,19318,2671],{"class":55},[49,19320,11550],{"class":73},[49,19322,19323],{"class":51,"line":2431},[49,19324,13907],{"class":73},[49,19326,19327],{"class":51,"line":2448},[49,19328,19329],{"class":66},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[49,19331,19332],{"class":51,"line":2453},[49,19333,399],{"emptyLinePlaceholder":398},[49,19335,19336,19338],{"class":51,"line":2458},[49,19337,19301],{"class":73},[49,19339,19340],{"class":66},"\u002F\u002F只有构造函数\n",[49,19342,19343],{"class":51,"line":2463},[49,19344,399],{"emptyLinePlaceholder":398},[49,19346,19347,19349,19351,19353,19355],{"class":51,"line":2477},[49,19348,3001],{"class":55},[49,19350,841],{"class":73},[49,19352,3006],{"class":59},[49,19354,6663],{"class":73},[49,19356,19357],{"class":66},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[49,19359,19360],{"class":51,"line":2482},[49,19361,399],{"emptyLinePlaceholder":398},[49,19363,19364,19366,19368],{"class":51,"line":3274},[49,19365,4787],{"class":77},[49,19367,4790],{"class":159},[49,19369,1990],{"class":73},[49,19371,19372],{"class":51,"line":3288},[49,19373,2264],{"class":73},[14,19375,19376],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[18,19378,19380],{"id":19379},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,19382,19383],{},"两种分类方式：",[14,19385,19386],{},"​\t按参数分为： 有参构造和无参构造",[14,19388,19389],{},"​\t按类型分为： 普通构造和拷贝构造",[14,19391,19392],{},"三种调用方式：",[14,19394,19395],{},"​\t括号法",[14,19397,19398],{},"​\t显示法",[14,19400,19401],{},"​\t隐式转换法",[40,19403,19405],{"className":829,"code":19404,"language":831,"meta":27,"style":27},"#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",[46,19406,19407,19413,19423,19428,19433,19438,19443,19447,19455,19459,19463,19467,19473,19477,19490,19494,19506,19510,19519,19532,19536,19540,19546,19550,19563,19567,19572,19588,19592,19597,19606,19619,19623,19629,19633,19638,19646,19650,19655,19659,19667,19671,19676,19681,19686,19691,19696,19700,19705,19710,19715,19720,19724,19729,19734,19750,19762,19767,19771,19776,19781,19786,19790,19795,19809,19822,19826,19834,19838,19844,19850,19858],{"__ignoreMap":27},[49,19408,19409,19411],{"class":51,"line":52},[49,19410,2648],{"class":77},[49,19412,2651],{"class":59},[49,19414,19415,19417,19419,19421],{"class":51,"line":63},[49,19416,2656],{"class":77},[49,19418,2659],{"class":77},[49,19420,2662],{"class":55},[49,19422,1990],{"class":73},[49,19424,19425],{"class":51,"line":70},[49,19426,19427],{"class":66},"\u002F\u002F1.构造函数的分类及调用\n",[49,19429,19430],{"class":51,"line":219},[49,19431,19432],{"class":66},"\u002F\u002F分类\n",[49,19434,19435],{"class":51,"line":233},[49,19436,19437],{"class":66},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[49,19439,19440],{"class":51,"line":241},[49,19441,19442],{"class":66},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[49,19444,19445],{"class":51,"line":1920},[49,19446,399],{"emptyLinePlaceholder":398},[49,19448,19449,19451,19453],{"class":51,"line":2011},[49,19450,15391],{"class":77},[49,19452,16266],{"class":55},[49,19454,3371],{"class":73},[49,19456,19457],{"class":51,"line":2017},[49,19458,2245],{"class":73},[49,19460,19461],{"class":51,"line":2029},[49,19462,15413],{"class":77},[49,19464,19465],{"class":51,"line":2311},[49,19466,19211],{"class":66},[49,19468,19469,19471],{"class":51,"line":2316},[49,19470,19216],{"class":55},[49,19472,2674],{"class":73},[49,19474,19475],{"class":51,"line":2322},[49,19476,2728],{"class":73},[49,19478,19479,19481,19483,19486,19488],{"class":51,"line":2327},[49,19480,4148],{"class":73},[49,19482,1872],{"class":77},[49,19484,19485],{"class":59},"\"Person构造函数无参构造\"",[49,19487,1872],{"class":77},[49,19489,1894],{"class":73},[49,19491,19492],{"class":51,"line":2341},[49,19493,2885],{"class":73},[49,19495,19496,19498,19500,19502,19504],{"class":51,"line":2346},[49,19497,19216],{"class":55},[49,19499,841],{"class":73},[49,19501,844],{"class":77},[49,19503,2098],{"class":5913},[49,19505,847],{"class":73},[49,19507,19508],{"class":51,"line":2352},[49,19509,2728],{"class":73},[49,19511,19512,19515,19517],{"class":51,"line":2373},[49,19513,19514],{"class":73},"        age",[49,19516,78],{"class":77},[49,19518,6894],{"class":73},[49,19520,19521,19523,19525,19528,19530],{"class":51,"line":2378},[49,19522,4148],{"class":73},[49,19524,1872],{"class":77},[49,19526,19527],{"class":59},"\"Person构造函数有参构造\"",[49,19529,1872],{"class":77},[49,19531,1894],{"class":73},[49,19533,19534],{"class":51,"line":2392},[49,19535,2885],{"class":73},[49,19537,19538],{"class":51,"line":2397},[49,19539,19244],{"class":66},[49,19541,19542,19544],{"class":51,"line":2426},[49,19543,19249],{"class":55},[49,19545,2674],{"class":73},[49,19547,19548],{"class":51,"line":2431},[49,19549,2728],{"class":73},[49,19551,19552,19554,19556,19559,19561],{"class":51,"line":2448},[49,19553,4148],{"class":73},[49,19555,1872],{"class":77},[49,19557,19558],{"class":59},"\"Person析构函数被调用\"",[49,19560,1872],{"class":77},[49,19562,1894],{"class":73},[49,19564,19565],{"class":51,"line":2453},[49,19566,2885],{"class":73},[49,19568,19569],{"class":51,"line":2458},[49,19570,19571],{"class":66},"    \u002F\u002F拷贝构造函数\n",[49,19573,19574,19576,19578,19580,19582,19584,19586],{"class":51,"line":2463},[49,19575,19216],{"class":55},[49,19577,841],{"class":73},[49,19579,7489],{"class":77},[49,19581,16266],{"class":55},[49,19583,11281],{"class":77},[49,19585,14],{"class":5913},[49,19587,847],{"class":73},[49,19589,19590],{"class":51,"line":2477},[49,19591,2728],{"class":73},[49,19593,19594],{"class":51,"line":2482},[49,19595,19596],{"class":66},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[49,19598,19599,19601,19603],{"class":51,"line":3274},[49,19600,19514],{"class":73},[49,19602,78],{"class":77},[49,19604,19605],{"class":73},"p.age;\n",[49,19607,19608,19610,19612,19615,19617],{"class":51,"line":3288},[49,19609,4148],{"class":73},[49,19611,1872],{"class":77},[49,19613,19614],{"class":59},"\"Person拷贝构造函数被调用\"",[49,19616,1872],{"class":77},[49,19618,1894],{"class":73},[49,19620,19621],{"class":51,"line":3296},[49,19622,2885],{"class":73},[49,19624,19625,19627],{"class":51,"line":3301},[49,19626,2683],{"class":77},[49,19628,8494],{"class":73},[49,19630,19631],{"class":51,"line":3307},[49,19632,4692],{"class":73},[49,19634,19635],{"class":51,"line":3313},[49,19636,19637],{"class":66},"\u002F\u002F调用\n",[49,19639,19640,19642,19644],{"class":51,"line":3318},[49,19641,6061],{"class":77},[49,19643,6285],{"class":55},[49,19645,2674],{"class":73},[49,19647,19648],{"class":51,"line":8645},[49,19649,2245],{"class":73},[49,19651,19652],{"class":51,"line":8669},[49,19653,19654],{"class":66},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[49,19656,19657],{"class":51,"line":8674},[49,19658,2264],{"class":73},[49,19660,19661,19663,19665],{"class":51,"line":8680},[49,19662,6061],{"class":77},[49,19664,6354],{"class":55},[49,19666,2674],{"class":73},[49,19668,19669],{"class":51,"line":8707},[49,19670,2245],{"class":73},[49,19672,19673],{"class":51,"line":8712},[49,19674,19675],{"class":66},"    \u002F\u002F1.括号法\n",[49,19677,19678],{"class":51,"line":8718},[49,19679,19680],{"class":66},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[49,19682,19683],{"class":51,"line":8730},[49,19684,19685],{"class":66},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[49,19687,19688],{"class":51,"line":8742},[49,19689,19690],{"class":66},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[49,19692,19693],{"class":51,"line":8754},[49,19694,19695],{"class":66},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[49,19697,19698],{"class":51,"line":10413},[49,19699,399],{"emptyLinePlaceholder":398},[49,19701,19702],{"class":51,"line":10438},[49,19703,19704],{"class":66},"    \u002F\u002F注意事项\n",[49,19706,19707],{"class":51,"line":10461},[49,19708,19709],{"class":66},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[49,19711,19712],{"class":51,"line":10485},[49,19713,19714],{"class":66},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[49,19716,19717],{"class":51,"line":10490},[49,19718,19719],{"class":66},"    \u002F\u002F Person p4();\n",[49,19721,19722],{"class":51,"line":10495},[49,19723,399],{"emptyLinePlaceholder":398},[49,19725,19726],{"class":51,"line":10500},[49,19727,19728],{"class":66},"    \u002F\u002F2.显示法\n",[49,19730,19731],{"class":51,"line":10509},[49,19732,19733],{"class":73},"    Person p1;\n",[49,19735,19736,19739,19741,19744,19746,19748],{"class":51,"line":10514},[49,19737,19738],{"class":73},"    Person p2",[49,19740,78],{"class":77},[49,19742,19743],{"class":55},"Person",[49,19745,841],{"class":73},[49,19747,1275],{"class":159},[49,19749,3416],{"class":73},[49,19751,19752,19755,19757,19759],{"class":51,"line":10520},[49,19753,19754],{"class":73},"    Person p3",[49,19756,78],{"class":77},[49,19758,19743],{"class":55},[49,19760,19761],{"class":73},"(p2);\n",[49,19763,19764],{"class":51,"line":10541},[49,19765,19766],{"class":66},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[49,19768,19769],{"class":51,"line":10547},[49,19770,399],{"emptyLinePlaceholder":398},[49,19772,19773],{"class":51,"line":10561},[49,19774,19775],{"class":66},"    \u002F\u002F 注意事项2\n",[49,19777,19778],{"class":51,"line":10567},[49,19779,19780],{"class":66},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[49,19782,19783],{"class":51,"line":10594},[49,19784,19785],{"class":66},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[49,19787,19788],{"class":51,"line":10603},[49,19789,399],{"emptyLinePlaceholder":398},[49,19791,19792],{"class":51,"line":10609},[49,19793,19794],{"class":66},"    \u002F\u002F3.隐士转换法\n",[49,19796,19797,19800,19802,19804,19806],{"class":51,"line":10617},[49,19798,19799],{"class":73},"    Person p4",[49,19801,78],{"class":77},[49,19803,1275],{"class":159},[49,19805,894],{"class":73},[49,19807,19808],{"class":66},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[49,19810,19811,19814,19816,19819],{"class":51,"line":10622},[49,19812,19813],{"class":73},"    Person p5",[49,19815,78],{"class":77},[49,19817,19818],{"class":73},"p4;",[49,19820,19821],{"class":66}," \u002F\u002F 这里会调用拷贝构造函数\n",[49,19823,19824],{"class":51,"line":17301},[49,19825,2264],{"class":73},[49,19827,19828,19830,19832],{"class":51,"line":17307},[49,19829,844],{"class":77},[49,19831,2671],{"class":55},[49,19833,2674],{"class":73},[49,19835,19836],{"class":51,"line":17330},[49,19837,2245],{"class":73},[49,19839,19840,19842],{"class":51,"line":17336},[49,19841,6330],{"class":55},[49,19843,6333],{"class":73},[49,19845,19846,19848],{"class":51,"line":17359},[49,19847,6399],{"class":55},[49,19849,6333],{"class":73},[49,19851,19852,19854,19856],{"class":51,"line":17373},[49,19853,4787],{"class":77},[49,19855,4790],{"class":159},[49,19857,1990],{"class":73},[49,19859,19860],{"class":51,"line":17393},[49,19861,2264],{"class":73},[14,19863,19864,19867],{},[112,19865,19866],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[18,19869,19871],{"id":19870},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19873,19874],{},"C++中拷贝构造函数调用时机通常有三种情况",[742,19876,19877,19880,19883],{},[33,19878,19879],{},"使用一个已经创建完毕的对象来初始化一个新对象",[33,19881,19882],{},"值传递的方式给函数参数传值",[33,19884,19885],{},"以值方式返回局部对象",[40,19887,19889],{"className":829,"code":19888,"language":831,"meta":27,"style":27},"#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",[46,19890,19891,19897,19907,19911,19916,19920,19925,19930,19935,19941,19945,19949,19955,19959,19972,19976,19981,19993,19997,20005,20018,20022,20026,20042,20046,20055,20068,20072,20078,20082,20094,20098,20104,20108,20112,20120,20124,20137,20145,20163,20167,20172,20177,20192,20196,20209,20213,20221,20225,20229,20237,20241,20246,20255,20259,20263,20288,20298,20302,20310,20314,20325,20350,20354,20358,20362,20370,20374,20379,20384,20391,20396,20401,20406,20411,20415,20420,20424,20429,20433,20438,20443,20447,20451,20456,20461,20469],{"__ignoreMap":27},[49,19892,19893,19895],{"class":51,"line":52},[49,19894,2648],{"class":77},[49,19896,2651],{"class":59},[49,19898,19899,19901,19903,19905],{"class":51,"line":63},[49,19900,2656],{"class":77},[49,19902,2659],{"class":77},[49,19904,2662],{"class":55},[49,19906,1990],{"class":73},[49,19908,19909],{"class":51,"line":70},[49,19910,399],{"emptyLinePlaceholder":398},[49,19912,19913],{"class":51,"line":219},[49,19914,19915],{"class":66},"\u002F\u002F拷贝构造函数调用时机\n",[49,19917,19918],{"class":51,"line":233},[49,19919,399],{"emptyLinePlaceholder":398},[49,19921,19922],{"class":51,"line":241},[49,19923,19924],{"class":66},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[49,19926,19927],{"class":51,"line":1920},[49,19928,19929],{"class":66},"\u002F\u002F2.值传递的方式给函数参数传值\n",[49,19931,19932],{"class":51,"line":2011},[49,19933,19934],{"class":66},"\u002F\u002F3.以值方式返回局部对象\n",[49,19936,19937,19939],{"class":51,"line":2017},[49,19938,15391],{"class":77},[49,19940,15868],{"class":55},[49,19942,19943],{"class":51,"line":2029},[49,19944,2245],{"class":73},[49,19946,19947],{"class":51,"line":2311},[49,19948,15413],{"class":77},[49,19950,19951,19953],{"class":51,"line":2316},[49,19952,19216],{"class":55},[49,19954,2674],{"class":73},[49,19956,19957],{"class":51,"line":2322},[49,19958,2728],{"class":73},[49,19960,19961,19963,19965,19968,19970],{"class":51,"line":2327},[49,19962,10366],{"class":73},[49,19964,1872],{"class":77},[49,19966,19967],{"class":59}," \"Person的默认构造函数调用\"",[49,19969,2144],{"class":77},[49,19971,9537],{"class":73},[49,19973,19974],{"class":51,"line":2341},[49,19975,2885],{"class":73},[49,19977,19978],{"class":51,"line":2346},[49,19979,19980],{"class":66},"    \u002F\u002F有参构造\n",[49,19982,19983,19985,19987,19989,19991],{"class":51,"line":2352},[49,19984,19216],{"class":55},[49,19986,841],{"class":73},[49,19988,844],{"class":77},[49,19990,16386],{"class":5913},[49,19992,847],{"class":73},[49,19994,19995],{"class":51,"line":2373},[49,19996,2728],{"class":73},[49,19998,19999,20001,20003],{"class":51,"line":2378},[49,20000,16440],{"class":73},[49,20002,78],{"class":77},[49,20004,8494],{"class":73},[49,20006,20007,20009,20011,20014,20016],{"class":51,"line":2392},[49,20008,10366],{"class":73},[49,20010,1872],{"class":77},[49,20012,20013],{"class":59}," \"Person的有参构造函数调用\"",[49,20015,2144],{"class":77},[49,20017,9537],{"class":73},[49,20019,20020],{"class":51,"line":2397},[49,20021,2885],{"class":73},[49,20023,20024],{"class":51,"line":2426},[49,20025,19571],{"class":66},[49,20027,20028,20030,20032,20034,20036,20038,20040],{"class":51,"line":2431},[49,20029,19216],{"class":55},[49,20031,841],{"class":73},[49,20033,7489],{"class":77},[49,20035,16266],{"class":55},[49,20037,11281],{"class":77},[49,20039,14],{"class":5913},[49,20041,847],{"class":73},[49,20043,20044],{"class":51,"line":2448},[49,20045,2728],{"class":73},[49,20047,20048,20050,20052],{"class":51,"line":2453},[49,20049,16440],{"class":73},[49,20051,78],{"class":77},[49,20053,20054],{"class":73}," p.m_Age;\n",[49,20056,20057,20059,20061,20064,20066],{"class":51,"line":2458},[49,20058,10366],{"class":73},[49,20060,1872],{"class":77},[49,20062,20063],{"class":59}," \"Person的拷贝构造函数调用\"",[49,20065,2144],{"class":77},[49,20067,9537],{"class":73},[49,20069,20070],{"class":51,"line":2463},[49,20071,2885],{"class":73},[49,20073,20074,20076],{"class":51,"line":2477},[49,20075,19249],{"class":55},[49,20077,2674],{"class":73},[49,20079,20080],{"class":51,"line":2482},[49,20081,2728],{"class":73},[49,20083,20084,20086,20088,20090,20092],{"class":51,"line":3274},[49,20085,10366],{"class":73},[49,20087,1872],{"class":77},[49,20089,19264],{"class":59},[49,20091,2144],{"class":77},[49,20093,9537],{"class":73},[49,20095,20096],{"class":51,"line":3288},[49,20097,2885],{"class":73},[49,20099,20100,20102],{"class":51,"line":3296},[49,20101,2683],{"class":77},[49,20103,16363],{"class":73},[49,20105,20106],{"class":51,"line":3301},[49,20107,4692],{"class":73},[49,20109,20110],{"class":51,"line":3307},[49,20111,19924],{"class":66},[49,20113,20114,20116,20118],{"class":51,"line":3313},[49,20115,6061],{"class":77},[49,20117,6285],{"class":55},[49,20119,2674],{"class":73},[49,20121,20122],{"class":51,"line":3318},[49,20123,2245],{"class":73},[49,20125,20126,20129,20131,20133,20135],{"class":51,"line":8645},[49,20127,20128],{"class":73},"    Person ",[49,20130,7827],{"class":55},[49,20132,841],{"class":73},[49,20134,1529],{"class":159},[49,20136,3416],{"class":73},[49,20138,20139,20141,20143],{"class":51,"line":8669},[49,20140,20128],{"class":73},[49,20142,7730],{"class":55},[49,20144,18212],{"class":73},[49,20146,20147,20149,20151,20154,20156,20159,20161],{"class":51,"line":8674},[49,20148,2250],{"class":73},[49,20150,1872],{"class":77},[49,20152,20153],{"class":59},"\"P2的年龄为：\"",[49,20155,1872],{"class":77},[49,20157,20158],{"class":73},"p2.m_Age",[49,20160,1872],{"class":77},[49,20162,1894],{"class":73},[49,20164,20165],{"class":51,"line":8680},[49,20166,2264],{"class":73},[49,20168,20169],{"class":51,"line":8707},[49,20170,20171],{"class":66},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[49,20173,20174],{"class":51,"line":8712},[49,20175,20176],{"class":66},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[49,20178,20179,20181,20184,20186,20188,20190],{"class":51,"line":8718},[49,20180,6061],{"class":77},[49,20182,20183],{"class":55}," doWork",[49,20185,841],{"class":73},[49,20187,19743],{"class":55},[49,20189,7522],{"class":5913},[49,20191,847],{"class":73},[49,20193,20194],{"class":51,"line":8730},[49,20195,2245],{"class":73},[49,20197,20198,20200,20202,20205,20207],{"class":51,"line":8742},[49,20199,7226],{"class":73},[49,20201,1872],{"class":77},[49,20203,20204],{"class":59}," \"doWork函数调用\"",[49,20206,2144],{"class":77},[49,20208,9537],{"class":73},[49,20210,20211],{"class":51,"line":8754},[49,20212,2264],{"class":73},[49,20214,20215,20217,20219],{"class":51,"line":10413},[49,20216,6061],{"class":77},[49,20218,6354],{"class":55},[49,20220,2674],{"class":73},[49,20222,20223],{"class":51,"line":10438},[49,20224,2245],{"class":73},[49,20226,20227],{"class":51,"line":10461},[49,20228,16010],{"class":73},[49,20230,20231,20234],{"class":51,"line":10485},[49,20232,20233],{"class":55},"    doWork",[49,20235,20236],{"class":73},"(p);\n",[49,20238,20239],{"class":51,"line":10490},[49,20240,2264],{"class":73},[49,20242,20243],{"class":51,"line":10495},[49,20244,20245],{"class":66},"\u002F\u002F 3.以值方式返回局部对象\n",[49,20247,20248,20250,20253],{"class":51,"line":10500},[49,20249,19743],{"class":55},[49,20251,20252],{"class":55}," doWork2",[49,20254,2674],{"class":73},[49,20256,20257],{"class":51,"line":10509},[49,20258,2245],{"class":73},[49,20260,20261],{"class":51,"line":10514},[49,20262,19733],{"class":73},[49,20264,20265,20267,20269,20271,20273,20275,20277,20279,20281,20283,20285],{"class":51,"line":10520},[49,20266,2250],{"class":73},[49,20268,1872],{"class":77},[49,20270,841],{"class":73},[49,20272,844],{"class":77},[49,20274,7215],{"class":77},[49,20276,1258],{"class":73},[49,20278,1182],{"class":77},[49,20280,7827],{"class":73},[49,20282,1872],{"class":77},[49,20284,1938],{"class":73},[49,20286,20287],{"class":66},"\u002F\u002F打印p1的地址\n",[49,20289,20290,20292,20295],{"class":51,"line":10541},[49,20291,4787],{"class":77},[49,20293,20294],{"class":73}," p1;",[49,20296,20297],{"class":66},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[49,20299,20300],{"class":51,"line":10547},[49,20301,2264],{"class":73},[49,20303,20304,20306,20308],{"class":51,"line":10561},[49,20305,6061],{"class":77},[49,20307,6426],{"class":55},[49,20309,2674],{"class":73},[49,20311,20312],{"class":51,"line":10567},[49,20313,2245],{"class":73},[49,20315,20316,20319,20321,20323],{"class":51,"line":10594},[49,20317,20318],{"class":73},"    Person p ",[49,20320,78],{"class":77},[49,20322,20252],{"class":55},[49,20324,6333],{"class":73},[49,20326,20327,20329,20331,20333,20335,20337,20339,20341,20343,20345,20347],{"class":51,"line":10603},[49,20328,2250],{"class":73},[49,20330,1872],{"class":77},[49,20332,841],{"class":73},[49,20334,844],{"class":77},[49,20336,7215],{"class":77},[49,20338,1258],{"class":73},[49,20340,1182],{"class":77},[49,20342,14],{"class":73},[49,20344,1872],{"class":77},[49,20346,1938],{"class":73},[49,20348,20349],{"class":66},"\u002F\u002F打印p的地址\n",[49,20351,20352],{"class":51,"line":10609},[49,20353,2264],{"class":73},[49,20355,20356],{"class":51,"line":10617},[49,20357,399],{"emptyLinePlaceholder":398},[49,20359,20360],{"class":51,"line":10622},[49,20361,399],{"emptyLinePlaceholder":398},[49,20363,20364,20366,20368],{"class":51,"line":17301},[49,20365,844],{"class":77},[49,20367,2671],{"class":55},[49,20369,2674],{"class":73},[49,20371,20372],{"class":51,"line":17307},[49,20373,2245],{"class":73},[49,20375,20376],{"class":51,"line":17330},[49,20377,20378],{"class":66},"    \u002F\u002F test01();\n",[49,20380,20381],{"class":51,"line":17336},[49,20382,20383],{"class":66},"    \u002F\u002F test02();\n",[49,20385,20386,20389],{"class":51,"line":17359},[49,20387,20388],{"class":55},"    test03",[49,20390,6333],{"class":73},[49,20392,20393],{"class":51,"line":17373},[49,20394,20395],{"class":66},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[49,20397,20398],{"class":51,"line":17393},[49,20399,20400],{"class":66},"\u002F\u002F 输出结果如下：\n",[49,20402,20403],{"class":51,"line":17399},[49,20404,20405],{"class":66},"\u002F\u002F Person的默认构造函数调用\n",[49,20407,20408],{"class":51,"line":17410},[49,20409,20410],{"class":66},"\u002F\u002F 0x7fffffffceec\n",[49,20412,20413],{"class":51,"line":17433},[49,20414,20410],{"class":66},[49,20416,20417],{"class":51,"line":17455},[49,20418,20419],{"class":66},"\u002F\u002F Person的析构函数调用\n",[49,20421,20422],{"class":51,"line":17460},[49,20423,399],{"emptyLinePlaceholder":398},[49,20425,20426],{"class":51,"line":17466},[49,20427,20428],{"class":66},"\u002F\u002F 之前的输出结果如下：\n",[49,20430,20431],{"class":51,"line":17480},[49,20432,20405],{"class":66},[49,20434,20435],{"class":51,"line":17493},[49,20436,20437],{"class":66},"\u002F\u002F 地址\n",[49,20439,20440],{"class":51,"line":17498},[49,20441,20442],{"class":66},"\u002F\u002F Person的拷贝构造函数调用\n",[49,20444,20445],{"class":51,"line":17512},[49,20446,20419],{"class":66},[49,20448,20449],{"class":51,"line":17517},[49,20450,20437],{"class":66},[49,20452,20453],{"class":51,"line":17523},[49,20454,20455],{"class":66},"\u002F\u002F (这两次输出的地址也是不同的) \n",[49,20457,20458],{"class":51,"line":17528},[49,20459,20460],{"class":66},"\u002F\u002F Person的析构函数调用     \n",[49,20462,20463,20465,20467],{"class":51,"line":17542},[49,20464,4787],{"class":77},[49,20466,4790],{"class":159},[49,20468,1990],{"class":73},[49,20470,20471],{"class":51,"line":17547},[49,20472,2264],{"class":73},[14,20474,20475],{},"简化版理解",[40,20477,20479],{"className":829,"code":20478,"language":831,"meta":27,"style":27},"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",[46,20480,20481,20489,20493,20499,20512,20523,20527,20539,20552,20560,20564,20580,20593,20602,20606,20611,20617,20630,20634,20638,20645,20649,20653,20658,20666,20670,20686,20699,20712,20716,20721,20729,20733,20737,20742,20747,20763,20771,20778,20784,20788,20792,20797,20805,20809,20813,20836,20843,20847,20851,20859,20863,20873,20895,20899,20903,20907,20915,20919,20924,20929,20935,20939,20949,20953,20961],{"__ignoreMap":27},[49,20482,20483,20485,20487],{"class":51,"line":52},[49,20484,15391],{"class":77},[49,20486,16266],{"class":55},[49,20488,16269],{"class":73},[49,20490,20491],{"class":51,"line":63},[49,20492,15413],{"class":77},[49,20494,20495,20497],{"class":51,"line":70},[49,20496,19216],{"class":55},[49,20498,11550],{"class":73},[49,20500,20501,20503,20505,20508,20510],{"class":51,"line":219},[49,20502,10366],{"class":73},[49,20504,1872],{"class":77},[49,20506,20507],{"class":59}," \"无参构造函数!\"",[49,20509,2144],{"class":77},[49,20511,9537],{"class":73},[49,20513,20514,20517,20519,20521],{"class":51,"line":233},[49,20515,20516],{"class":73},"        mAge ",[49,20518,78],{"class":77},[49,20520,4790],{"class":159},[49,20522,1990],{"class":73},[49,20524,20525],{"class":51,"line":241},[49,20526,2885],{"class":73},[49,20528,20529,20531,20533,20535,20537],{"class":51,"line":1920},[49,20530,19216],{"class":55},[49,20532,841],{"class":73},[49,20534,844],{"class":77},[49,20536,16386],{"class":5913},[49,20538,13139],{"class":73},[49,20540,20541,20543,20545,20548,20550],{"class":51,"line":2011},[49,20542,10366],{"class":73},[49,20544,1872],{"class":77},[49,20546,20547],{"class":59}," \"有参构造函数!\"",[49,20549,2144],{"class":77},[49,20551,9537],{"class":73},[49,20553,20554,20556,20558],{"class":51,"line":2017},[49,20555,20516],{"class":73},[49,20557,78],{"class":77},[49,20559,8494],{"class":73},[49,20561,20562],{"class":51,"line":2029},[49,20563,2885],{"class":73},[49,20565,20566,20568,20570,20572,20574,20576,20578],{"class":51,"line":2311},[49,20567,19216],{"class":55},[49,20569,841],{"class":73},[49,20571,7489],{"class":77},[49,20573,16266],{"class":55},[49,20575,1182],{"class":77},[49,20577,7522],{"class":5913},[49,20579,13139],{"class":73},[49,20581,20582,20584,20586,20589,20591],{"class":51,"line":2316},[49,20583,10366],{"class":73},[49,20585,1872],{"class":77},[49,20587,20588],{"class":59}," \"拷贝构造函数!\"",[49,20590,2144],{"class":77},[49,20592,9537],{"class":73},[49,20594,20595,20597,20599],{"class":51,"line":2322},[49,20596,20516],{"class":73},[49,20598,78],{"class":77},[49,20600,20601],{"class":73}," p.mAge;\n",[49,20603,20604],{"class":51,"line":2327},[49,20605,2885],{"class":73},[49,20607,20608],{"class":51,"line":2341},[49,20609,20610],{"class":66},"    \u002F\u002F析构函数在释放内存之前调用\n",[49,20612,20613,20615],{"class":51,"line":2346},[49,20614,19249],{"class":55},[49,20616,11550],{"class":73},[49,20618,20619,20621,20623,20626,20628],{"class":51,"line":2352},[49,20620,10366],{"class":73},[49,20622,1872],{"class":77},[49,20624,20625],{"class":59}," \"析构函数!\"",[49,20627,2144],{"class":77},[49,20629,9537],{"class":73},[49,20631,20632],{"class":51,"line":2373},[49,20633,2885],{"class":73},[49,20635,20636],{"class":51,"line":2378},[49,20637,15413],{"class":77},[49,20639,20640,20642],{"class":51,"line":2392},[49,20641,2683],{"class":77},[49,20643,20644],{"class":73}," mAge;\n",[49,20646,20647],{"class":51,"line":2397},[49,20648,4692],{"class":73},[49,20650,20651],{"class":51,"line":2426},[49,20652,399],{"emptyLinePlaceholder":398},[49,20654,20655],{"class":51,"line":2431},[49,20656,20657],{"class":66},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[49,20659,20660,20662,20664],{"class":51,"line":2448},[49,20661,6061],{"class":77},[49,20663,6285],{"class":55},[49,20665,11550],{"class":73},[49,20667,20668],{"class":51,"line":2453},[49,20669,399],{"emptyLinePlaceholder":398},[49,20671,20672,20674,20677,20679,20681,20683],{"class":51,"line":2458},[49,20673,20128],{"class":73},[49,20675,20676],{"class":55},"man",[49,20678,841],{"class":73},[49,20680,1140],{"class":159},[49,20682,6663],{"class":73},[49,20684,20685],{"class":66}," \u002F\u002Fp对象已经创建完毕\n",[49,20687,20688,20690,20693,20696],{"class":51,"line":2463},[49,20689,20128],{"class":73},[49,20691,20692],{"class":55},"newman",[49,20694,20695],{"class":73},"(man);",[49,20697,20698],{"class":66}," \u002F\u002F调用拷贝构造函数\n",[49,20700,20701,20704,20706,20709],{"class":51,"line":2477},[49,20702,20703],{"class":73},"    Person newman2 ",[49,20705,78],{"class":77},[49,20707,20708],{"class":73}," man;",[49,20710,20711],{"class":66}," \u002F\u002F拷贝构造\n",[49,20713,20714],{"class":51,"line":2482},[49,20715,399],{"emptyLinePlaceholder":398},[49,20717,20718],{"class":51,"line":3274},[49,20719,20720],{"class":66},"    \u002F\u002FPerson newman3;\n",[49,20722,20723,20726],{"class":51,"line":3288},[49,20724,20725],{"class":66},"    \u002F\u002Fnewman3 = man;",[49,20727,20728],{"class":66}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[49,20730,20731],{"class":51,"line":3296},[49,20732,2264],{"class":73},[49,20734,20735],{"class":51,"line":3301},[49,20736,399],{"emptyLinePlaceholder":398},[49,20738,20739],{"class":51,"line":3307},[49,20740,20741],{"class":66},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[49,20743,20744],{"class":51,"line":3313},[49,20745,20746],{"class":66},"\u002F\u002F相当于Person p1 = p;\n",[49,20748,20749,20751,20753,20755,20757,20760],{"class":51,"line":3318},[49,20750,6061],{"class":77},[49,20752,20183],{"class":55},[49,20754,841],{"class":73},[49,20756,19743],{"class":55},[49,20758,20759],{"class":5913}," p1",[49,20761,20762],{"class":73},") {}\n",[49,20764,20765,20767,20769],{"class":51,"line":8645},[49,20766,6061],{"class":77},[49,20768,6354],{"class":55},[49,20770,11550],{"class":73},[49,20772,20773,20775],{"class":51,"line":8669},[49,20774,19301],{"class":73},[49,20776,20777],{"class":66}," \u002F\u002F无参构造函数\n",[49,20779,20780,20782],{"class":51,"line":8674},[49,20781,20233],{"class":55},[49,20783,20236],{"class":73},[49,20785,20786],{"class":51,"line":8680},[49,20787,2264],{"class":73},[49,20789,20790],{"class":51,"line":8707},[49,20791,399],{"emptyLinePlaceholder":398},[49,20793,20794],{"class":51,"line":8712},[49,20795,20796],{"class":66},"\u002F\u002F3. 以值方式返回局部对象\n",[49,20798,20799,20801,20803],{"class":51,"line":8718},[49,20800,19743],{"class":55},[49,20802,20252],{"class":55},[49,20804,2674],{"class":73},[49,20806,20807],{"class":51,"line":8730},[49,20808,2245],{"class":73},[49,20810,20811],{"class":51,"line":8742},[49,20812,19733],{"class":73},[49,20814,20815,20817,20819,20821,20823,20825,20827,20829,20832,20834],{"class":51,"line":8754},[49,20816,7226],{"class":73},[49,20818,1872],{"class":77},[49,20820,2357],{"class":73},[49,20822,844],{"class":77},[49,20824,7215],{"class":77},[49,20826,1258],{"class":73},[49,20828,1182],{"class":77},[49,20830,20831],{"class":73},"p1 ",[49,20833,1872],{"class":77},[49,20835,9537],{"class":73},[49,20837,20838,20840],{"class":51,"line":10413},[49,20839,4787],{"class":77},[49,20841,20842],{"class":73}," p1;\n",[49,20844,20845],{"class":51,"line":10438},[49,20846,2264],{"class":73},[49,20848,20849],{"class":51,"line":10461},[49,20850,399],{"emptyLinePlaceholder":398},[49,20852,20853,20855,20857],{"class":51,"line":10485},[49,20854,6061],{"class":77},[49,20856,6426],{"class":55},[49,20858,2674],{"class":73},[49,20860,20861],{"class":51,"line":10490},[49,20862,2245],{"class":73},[49,20864,20865,20867,20869,20871],{"class":51,"line":10495},[49,20866,20318],{"class":73},[49,20868,78],{"class":77},[49,20870,20252],{"class":55},[49,20872,6333],{"class":73},[49,20874,20875,20877,20879,20881,20883,20885,20887,20889,20891,20893],{"class":51,"line":10500},[49,20876,7226],{"class":73},[49,20878,1872],{"class":77},[49,20880,2357],{"class":73},[49,20882,844],{"class":77},[49,20884,7215],{"class":77},[49,20886,1258],{"class":73},[49,20888,1182],{"class":77},[49,20890,12145],{"class":73},[49,20892,1872],{"class":77},[49,20894,9537],{"class":73},[49,20896,20897],{"class":51,"line":10509},[49,20898,2264],{"class":73},[49,20900,20901],{"class":51,"line":10514},[49,20902,399],{"emptyLinePlaceholder":398},[49,20904,20905],{"class":51,"line":10520},[49,20906,399],{"emptyLinePlaceholder":398},[49,20908,20909,20911,20913],{"class":51,"line":10541},[49,20910,844],{"class":77},[49,20912,2671],{"class":55},[49,20914,11550],{"class":73},[49,20916,20917],{"class":51,"line":10547},[49,20918,399],{"emptyLinePlaceholder":398},[49,20920,20921],{"class":51,"line":10561},[49,20922,20923],{"class":66},"    \u002F\u002Ftest01();\n",[49,20925,20926],{"class":51,"line":10567},[49,20927,20928],{"class":66},"    \u002F\u002Ftest02();\n",[49,20930,20931,20933],{"class":51,"line":10594},[49,20932,20388],{"class":55},[49,20934,6333],{"class":73},[49,20936,20937],{"class":51,"line":10603},[49,20938,399],{"emptyLinePlaceholder":398},[49,20940,20941,20943,20945,20947],{"class":51,"line":10609},[49,20942,3001],{"class":55},[49,20944,841],{"class":73},[49,20946,3006],{"class":59},[49,20948,3416],{"class":73},[49,20950,20951],{"class":51,"line":10617},[49,20952,399],{"emptyLinePlaceholder":398},[49,20954,20955,20957,20959],{"class":51,"line":10622},[49,20956,4787],{"class":77},[49,20958,4790],{"class":159},[49,20960,1990],{"class":73},[49,20962,20963],{"class":51,"line":17301},[49,20964,2264],{"class":73},[18,20966,20968],{"id":20967},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20970,20971],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20973,20974],{},"1．默认构造函数(无参，函数体为空)",[14,20976,20977],{},"2．默认析构函数(无参，函数体为空)",[14,20979,20980],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20982,20983],{},"构造函数调用规则如下：",[742,20985,20986,20989],{},[33,20987,20988],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[33,20990,20991],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[40,20993,20995],{"className":829,"code":20994,"language":831,"meta":27,"style":27},"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",[46,20996,20997,21005,21009,21014,21020,21032,21036,21041,21053,21062,21074,21078,21082,21098,21107,21119,21123,21127,21133,21145,21149,21153,21159,21163,21167,21175,21179,21191,21196,21204,21208,21226,21230,21234,21242,21246,21251,21259,21274,21287,21291,21296,21303,21319,21332,21336,21340,21348,21352,21358,21362,21372,21376,21384],{"__ignoreMap":27},[49,20998,20999,21001,21003],{"class":51,"line":52},[49,21000,15391],{"class":77},[49,21002,16266],{"class":55},[49,21004,16269],{"class":73},[49,21006,21007],{"class":51,"line":63},[49,21008,15413],{"class":77},[49,21010,21011],{"class":51,"line":70},[49,21012,21013],{"class":66},"    \u002F\u002F无参（默认）构造函数\n",[49,21015,21016,21018],{"class":51,"line":219},[49,21017,19216],{"class":55},[49,21019,11550],{"class":73},[49,21021,21022,21024,21026,21028,21030],{"class":51,"line":233},[49,21023,10366],{"class":73},[49,21025,1872],{"class":77},[49,21027,20507],{"class":59},[49,21029,2144],{"class":77},[49,21031,9537],{"class":73},[49,21033,21034],{"class":51,"line":241},[49,21035,2885],{"class":73},[49,21037,21038],{"class":51,"line":1920},[49,21039,21040],{"class":66},"    \u002F\u002F有参构造函数\n",[49,21042,21043,21045,21047,21049,21051],{"class":51,"line":2011},[49,21044,19216],{"class":55},[49,21046,841],{"class":73},[49,21048,844],{"class":77},[49,21050,2098],{"class":5913},[49,21052,13139],{"class":73},[49,21054,21055,21058,21060],{"class":51,"line":2017},[49,21056,21057],{"class":73},"        age ",[49,21059,78],{"class":77},[49,21061,2132],{"class":73},[49,21063,21064,21066,21068,21070,21072],{"class":51,"line":2029},[49,21065,10366],{"class":73},[49,21067,1872],{"class":77},[49,21069,20547],{"class":59},[49,21071,2144],{"class":77},[49,21073,9537],{"class":73},[49,21075,21076],{"class":51,"line":2311},[49,21077,2885],{"class":73},[49,21079,21080],{"class":51,"line":2316},[49,21081,19571],{"class":66},[49,21083,21084,21086,21088,21090,21092,21094,21096],{"class":51,"line":2322},[49,21085,19216],{"class":55},[49,21087,841],{"class":73},[49,21089,7489],{"class":77},[49,21091,16266],{"class":55},[49,21093,1182],{"class":77},[49,21095,7522],{"class":5913},[49,21097,13139],{"class":73},[49,21099,21100,21102,21104],{"class":51,"line":2327},[49,21101,21057],{"class":73},[49,21103,78],{"class":77},[49,21105,21106],{"class":73}," p.age;\n",[49,21108,21109,21111,21113,21115,21117],{"class":51,"line":2341},[49,21110,10366],{"class":73},[49,21112,1872],{"class":77},[49,21114,20588],{"class":59},[49,21116,2144],{"class":77},[49,21118,9537],{"class":73},[49,21120,21121],{"class":51,"line":2346},[49,21122,2885],{"class":73},[49,21124,21125],{"class":51,"line":2352},[49,21126,19244],{"class":66},[49,21128,21129,21131],{"class":51,"line":2373},[49,21130,19249],{"class":55},[49,21132,11550],{"class":73},[49,21134,21135,21137,21139,21141,21143],{"class":51,"line":2378},[49,21136,10366],{"class":73},[49,21138,1872],{"class":77},[49,21140,20625],{"class":59},[49,21142,2144],{"class":77},[49,21144,9537],{"class":73},[49,21146,21147],{"class":51,"line":2392},[49,21148,2885],{"class":73},[49,21150,21151],{"class":51,"line":2397},[49,21152,15413],{"class":77},[49,21154,21155,21157],{"class":51,"line":2426},[49,21156,2683],{"class":77},[49,21158,8494],{"class":73},[49,21160,21161],{"class":51,"line":2431},[49,21162,4692],{"class":73},[49,21164,21165],{"class":51,"line":2448},[49,21166,399],{"emptyLinePlaceholder":398},[49,21168,21169,21171,21173],{"class":51,"line":2453},[49,21170,6061],{"class":77},[49,21172,6285],{"class":55},[49,21174,2674],{"class":73},[49,21176,21177],{"class":51,"line":2458},[49,21178,2245],{"class":73},[49,21180,21181,21183,21185,21187,21189],{"class":51,"line":2463},[49,21182,20128],{"class":73},[49,21184,7827],{"class":55},[49,21186,841],{"class":73},[49,21188,1479],{"class":159},[49,21190,3416],{"class":73},[49,21192,21193],{"class":51,"line":2477},[49,21194,21195],{"class":66},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[49,21197,21198,21200,21202],{"class":51,"line":2482},[49,21199,20128],{"class":73},[49,21201,7730],{"class":55},[49,21203,18212],{"class":73},[49,21205,21206],{"class":51,"line":3274},[49,21207,399],{"emptyLinePlaceholder":398},[49,21209,21210,21212,21214,21217,21219,21222,21224],{"class":51,"line":3288},[49,21211,7226],{"class":73},[49,21213,1872],{"class":77},[49,21215,21216],{"class":59}," \"p2的年龄为： \"",[49,21218,2144],{"class":77},[49,21220,21221],{"class":73}," p2.age ",[49,21223,1872],{"class":77},[49,21225,9537],{"class":73},[49,21227,21228],{"class":51,"line":3296},[49,21229,2264],{"class":73},[49,21231,21232],{"class":51,"line":3301},[49,21233,399],{"emptyLinePlaceholder":398},[49,21235,21236,21238,21240],{"class":51,"line":3307},[49,21237,6061],{"class":77},[49,21239,6354],{"class":55},[49,21241,2674],{"class":73},[49,21243,21244],{"class":51,"line":3313},[49,21245,2245],{"class":73},[49,21247,21248],{"class":51,"line":3318},[49,21249,21250],{"class":66},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[49,21252,21253,21256],{"class":51,"line":8645},[49,21254,21255],{"class":73},"    Person p1;",[49,21257,21258],{"class":66}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[49,21260,21261,21263,21265,21267,21269,21271],{"class":51,"line":8669},[49,21262,20128],{"class":73},[49,21264,7730],{"class":55},[49,21266,841],{"class":73},[49,21268,1275],{"class":159},[49,21270,6663],{"class":73},[49,21272,21273],{"class":66}," \u002F\u002F用户提供的有参\n",[49,21275,21276,21278,21281,21284],{"class":51,"line":8674},[49,21277,20128],{"class":73},[49,21279,21280],{"class":55},"p3",[49,21282,21283],{"class":73},"(p2);",[49,21285,21286],{"class":66}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[49,21288,21289],{"class":51,"line":8680},[49,21290,399],{"emptyLinePlaceholder":398},[49,21292,21293],{"class":51,"line":8707},[49,21294,21295],{"class":66},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[49,21297,21298,21301],{"class":51,"line":8712},[49,21299,21300],{"class":73},"    Person p4;",[49,21302,21258],{"class":66},[49,21304,21305,21307,21310,21312,21314,21316],{"class":51,"line":8718},[49,21306,20128],{"class":73},[49,21308,21309],{"class":55},"p5",[49,21311,841],{"class":73},[49,21313,1275],{"class":159},[49,21315,6663],{"class":73},[49,21317,21318],{"class":66}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[49,21320,21321,21323,21326,21329],{"class":51,"line":8730},[49,21322,20128],{"class":73},[49,21324,21325],{"class":55},"p6",[49,21327,21328],{"class":73},"(p5);",[49,21330,21331],{"class":66}," \u002F\u002F用户自己提供拷贝构造\n",[49,21333,21334],{"class":51,"line":8742},[49,21335,2264],{"class":73},[49,21337,21338],{"class":51,"line":8754},[49,21339,399],{"emptyLinePlaceholder":398},[49,21341,21342,21344,21346],{"class":51,"line":10413},[49,21343,844],{"class":77},[49,21345,2671],{"class":55},[49,21347,11550],{"class":73},[49,21349,21350],{"class":51,"line":10438},[49,21351,399],{"emptyLinePlaceholder":398},[49,21353,21354,21356],{"class":51,"line":10461},[49,21355,6330],{"class":55},[49,21357,6333],{"class":73},[49,21359,21360],{"class":51,"line":10485},[49,21361,399],{"emptyLinePlaceholder":398},[49,21363,21364,21366,21368,21370],{"class":51,"line":10490},[49,21365,3001],{"class":55},[49,21367,841],{"class":73},[49,21369,3006],{"class":59},[49,21371,3416],{"class":73},[49,21373,21374],{"class":51,"line":10495},[49,21375,399],{"emptyLinePlaceholder":398},[49,21377,21378,21380,21382],{"class":51,"line":10500},[49,21379,4787],{"class":77},[49,21381,4790],{"class":159},[49,21383,1990],{"class":73},[49,21385,21386],{"class":51,"line":10509},[49,21387,2264],{"class":73},[18,21389,21391],{"id":21390},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,21393,21394],{},"浅拷贝：简单的赋值拷贝操作",[14,21396,21397],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[40,21399,21401],{"className":829,"code":21400,"language":831,"meta":27,"style":27},"#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",[46,21402,21403,21409,21419,21425,21429,21433,21438,21444,21448,21461,21465,21469,21476,21480,21490,21505,21518,21522,21527,21532,21548,21552,21565,21570,21575,21580,21589,21594,21609,21613,21617,21621,21627,21631,21636,21651,21655,21666,21680,21684,21693,21697,21703,21715,21719,21727,21731,21748,21779,21787,21815,21819,21823,21831,21835,21841],{"__ignoreMap":27},[49,21404,21405,21407],{"class":51,"line":52},[49,21406,2648],{"class":77},[49,21408,2651],{"class":59},[49,21410,21411,21413,21415,21417],{"class":51,"line":63},[49,21412,2656],{"class":77},[49,21414,2659],{"class":77},[49,21416,2662],{"class":55},[49,21418,1990],{"class":73},[49,21420,21421,21423],{"class":51,"line":70},[49,21422,15391],{"class":77},[49,21424,15868],{"class":55},[49,21426,21427],{"class":51,"line":219},[49,21428,2245],{"class":73},[49,21430,21431],{"class":51,"line":233},[49,21432,15413],{"class":77},[49,21434,21435],{"class":51,"line":241},[49,21436,21437],{"class":66},"    \u002F\u002F默认构造函数\n",[49,21439,21440,21442],{"class":51,"line":1920},[49,21441,19216],{"class":55},[49,21443,2674],{"class":73},[49,21445,21446],{"class":51,"line":2011},[49,21447,2728],{"class":73},[49,21449,21450,21452,21454,21457,21459],{"class":51,"line":2017},[49,21451,4148],{"class":73},[49,21453,1872],{"class":77},[49,21455,21456],{"class":59},"\"默认构造函数\"",[49,21458,1872],{"class":77},[49,21460,1894],{"class":73},[49,21462,21463],{"class":51,"line":2029},[49,21464,2885],{"class":73},[49,21466,21467],{"class":51,"line":2311},[49,21468,21040],{"class":66},[49,21470,21471,21473],{"class":51,"line":2316},[49,21472,19249],{"class":55},[49,21474,21475],{"class":73},"(int age,int height)\n",[49,21477,21478],{"class":51,"line":2322},[49,21479,2728],{"class":73},[49,21481,21482,21485,21487],{"class":51,"line":2327},[49,21483,21484],{"class":73},"        m_Age",[49,21486,78],{"class":77},[49,21488,21489],{"class":73},"age;\n",[49,21491,21492,21495,21497,21499,21502],{"class":51,"line":2341},[49,21493,21494],{"class":73},"        m_Height",[49,21496,12414],{"class":77},[49,21498,3080],{"class":77},[49,21500,21501],{"class":73},"(height);",[49,21503,21504],{"class":66},"\u002F\u002F放到堆区\n",[49,21506,21507,21509,21511,21514,21516],{"class":51,"line":2346},[49,21508,4148],{"class":73},[49,21510,1872],{"class":77},[49,21512,21513],{"class":59},"\"有参构造函数\"",[49,21515,1872],{"class":77},[49,21517,1894],{"class":73},[49,21519,21520],{"class":51,"line":2352},[49,21521,2885],{"class":73},[49,21523,21524],{"class":51,"line":2373},[49,21525,21526],{"class":66},"    \u002F\u002F深拷贝解决上述问题\n",[49,21528,21529],{"class":51,"line":2378},[49,21530,21531],{"class":66},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[49,21533,21534,21536,21538,21540,21542,21544,21546],{"class":51,"line":2392},[49,21535,19216],{"class":55},[49,21537,841],{"class":73},[49,21539,7489],{"class":77},[49,21541,16266],{"class":55},[49,21543,11281],{"class":77},[49,21545,14],{"class":5913},[49,21547,847],{"class":73},[49,21549,21550],{"class":51,"line":2397},[49,21551,2728],{"class":73},[49,21553,21554,21556,21558,21561,21563],{"class":51,"line":2426},[49,21555,4148],{"class":73},[49,21557,1872],{"class":77},[49,21559,21560],{"class":59},"\"拷贝构造函数\"",[49,21562,1872],{"class":77},[49,21564,1894],{"class":73},[49,21566,21567],{"class":51,"line":2431},[49,21568,21569],{"class":66},"        \u002F\u002F编译器默认的写如下注释部分\n",[49,21571,21572],{"class":51,"line":2448},[49,21573,21574],{"class":66},"        \u002F\u002Fm_Age=p.m_Age;\n",[49,21576,21577],{"class":51,"line":2453},[49,21578,21579],{"class":66},"        \u002F\u002Fm_Height=p.m_Height;\n",[49,21581,21582,21584,21586],{"class":51,"line":2458},[49,21583,21484],{"class":73},[49,21585,78],{"class":77},[49,21587,21588],{"class":73},"p.m_Age;\n",[49,21590,21591],{"class":51,"line":2463},[49,21592,21593],{"class":66},"        \u002F\u002F深拷贝操作\n",[49,21595,21596,21598,21600,21602,21604,21606],{"class":51,"line":2477},[49,21597,21494],{"class":73},[49,21599,12414],{"class":77},[49,21601,3080],{"class":77},[49,21603,841],{"class":73},[49,21605,1284],{"class":77},[49,21607,21608],{"class":73},"p.m_Height);\n",[49,21610,21611],{"class":51,"line":2482},[49,21612,2885],{"class":73},[49,21614,21615],{"class":51,"line":3274},[49,21616,399],{"emptyLinePlaceholder":398},[49,21618,21619],{"class":51,"line":3288},[49,21620,19244],{"class":66},[49,21622,21623,21625],{"class":51,"line":3296},[49,21624,19249],{"class":55},[49,21626,2674],{"class":73},[49,21628,21629],{"class":51,"line":3301},[49,21630,2728],{"class":73},[49,21632,21633],{"class":51,"line":3307},[49,21634,21635],{"class":66},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[49,21637,21638,21640,21643,21646,21649],{"class":51,"line":3313},[49,21639,3194],{"class":77},[49,21641,21642],{"class":73},"(m_Height ",[49,21644,21645],{"class":77},"!=",[49,21647,21648],{"class":159}," NULL",[49,21650,847],{"class":73},[49,21652,21653],{"class":51,"line":3318},[49,21654,3207],{"class":73},[49,21656,21657,21660,21663],{"class":51,"line":8645},[49,21658,21659],{"class":77},"            delete",[49,21661,21662],{"class":73}," m_Height;",[49,21664,21665],{"class":66}," \u002F\u002F释放堆区内存\n",[49,21667,21668,21671,21673,21675,21677],{"class":51,"line":8669},[49,21669,21670],{"class":73},"            m_Height",[49,21672,78],{"class":77},[49,21674,3090],{"class":159},[49,21676,894],{"class":73},[49,21678,21679],{"class":66}," \u002F\u002F防止野指针\n",[49,21681,21682],{"class":51,"line":8674},[49,21683,3226],{"class":73},[49,21685,21686,21688,21690],{"class":51,"line":8680},[49,21687,4148],{"class":73},[49,21689,1872],{"class":77},[49,21691,21692],{"class":59},"\"Person的析构函数调用\"\n",[49,21694,21695],{"class":51,"line":8707},[49,21696,2885],{"class":73},[49,21698,21699,21701],{"class":51,"line":8712},[49,21700,2683],{"class":77},[49,21702,16363],{"class":73},[49,21704,21705,21707,21709,21712],{"class":51,"line":8718},[49,21706,2683],{"class":77},[49,21708,7215],{"class":77},[49,21710,21711],{"class":73},"m_Height;",[49,21713,21714],{"class":66}," \u002F\u002F定义一个指针，指向身高\n",[49,21716,21717],{"class":51,"line":8730},[49,21718,4692],{"class":73},[49,21720,21721,21723,21725],{"class":51,"line":8742},[49,21722,6061],{"class":77},[49,21724,6285],{"class":55},[49,21726,2674],{"class":73},[49,21728,21729],{"class":51,"line":8754},[49,21730,2245],{"class":73},[49,21732,21733,21735,21737,21739,21741,21743,21746],{"class":51,"line":10413},[49,21734,20128],{"class":73},[49,21736,7827],{"class":55},[49,21738,841],{"class":73},[49,21740,1479],{"class":159},[49,21742,1207],{"class":73},[49,21744,21745],{"class":159},"160",[49,21747,3416],{"class":73},[49,21749,21750,21752,21754,21757,21759,21762,21764,21767,21769,21772,21774,21776],{"class":51,"line":10438},[49,21751,2250],{"class":73},[49,21753,1872],{"class":77},[49,21755,21756],{"class":59},"\"p1的年龄为:\"",[49,21758,1872],{"class":77},[49,21760,21761],{"class":73},"p1.m_Age",[49,21763,1872],{"class":77},[49,21765,21766],{"class":59},"\"身高为：\"",[49,21768,7116],{"class":77},[49,21770,21771],{"class":73},"p1.m_Height",[49,21773,1872],{"class":77},[49,21775,1938],{"class":73},[49,21777,21778],{"class":66},"  \u002F\u002F18\n",[49,21780,21781,21783,21785],{"class":51,"line":10461},[49,21782,20128],{"class":73},[49,21784,7730],{"class":55},[49,21786,18212],{"class":73},[49,21788,21789,21791,21793,21796,21798,21800,21802,21804,21806,21809,21811,21813],{"class":51,"line":10485},[49,21790,2250],{"class":73},[49,21792,1872],{"class":77},[49,21794,21795],{"class":59},"\"p2的年龄为：\"",[49,21797,1872],{"class":77},[49,21799,20158],{"class":73},[49,21801,1872],{"class":77},[49,21803,21766],{"class":59},[49,21805,7116],{"class":77},[49,21807,21808],{"class":73},"p2.m_Height",[49,21810,1872],{"class":77},[49,21812,1938],{"class":73},[49,21814,21778],{"class":66},[49,21816,21817],{"class":51,"line":10490},[49,21818,13907],{"class":73},[49,21820,21821],{"class":51,"line":10495},[49,21822,2264],{"class":73},[49,21824,21825,21827,21829],{"class":51,"line":10500},[49,21826,844],{"class":77},[49,21828,2671],{"class":55},[49,21830,2674],{"class":73},[49,21832,21833],{"class":51,"line":10509},[49,21834,2245],{"class":73},[49,21836,21837,21839],{"class":51,"line":10514},[49,21838,6330],{"class":55},[49,21840,6333],{"class":73},[49,21842,21843],{"class":51,"line":10520},[49,21844,2264],{"class":73},[14,21846,21847],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21849,21850],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21852,21853],{},[25,21854],{"alt":27,"src":21855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21857,21858],{},"浅拷贝问题要使用深拷贝来解决",[14,21860,21861],{},[25,21862],{"alt":27,"src":21863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21865,21866],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[18,21868,21870],{"id":21869},"_826初始化列表","8.2.6初始化列表",[14,21872,21873],{},"作用：初始化属性",[14,21875,5878],{},[40,21877,21880],{"className":21878,"code":21879,"language":5884},[5882],"构造函数():属性1(值1),属性2(值2).....{}\n",[46,21881,21879],{"__ignoreMap":27},[14,21883,21884],{},"例子",[40,21886,21888],{"className":829,"code":21887,"language":831,"meta":27,"style":27},"#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",[46,21889,21890,21896,21906,21912,21916,21921,21925,21930,21935,21940,21945,21950,21955,21959,21964,21969,22012,22021,22039,22057,22075,22079,22083,22090,22097,22104,22108,22112,22120,22124,22128,22148,22157,22161,22165,22175,22179,22187],{"__ignoreMap":27},[49,21891,21892,21894],{"class":51,"line":52},[49,21893,2648],{"class":77},[49,21895,2651],{"class":59},[49,21897,21898,21900,21902,21904],{"class":51,"line":63},[49,21899,2656],{"class":77},[49,21901,2659],{"class":77},[49,21903,2662],{"class":55},[49,21905,1990],{"class":73},[49,21907,21908,21910],{"class":51,"line":70},[49,21909,15391],{"class":77},[49,21911,15868],{"class":55},[49,21913,21914],{"class":51,"line":219},[49,21915,2245],{"class":73},[49,21917,21918],{"class":51,"line":233},[49,21919,21920],{"class":77},"    public:\n",[49,21922,21923],{"class":51,"line":241},[49,21924,399],{"emptyLinePlaceholder":398},[49,21926,21927],{"class":51,"line":1920},[49,21928,21929],{"class":66},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[49,21931,21932],{"class":51,"line":2011},[49,21933,21934],{"class":66},"    \u002F\u002FPerson(int a, int b, int c) {\n",[49,21936,21937],{"class":51,"line":2017},[49,21938,21939],{"class":66},"    \u002F\u002F  m_A = a;\n",[49,21941,21942],{"class":51,"line":2029},[49,21943,21944],{"class":66},"    \u002F\u002F  m_B = b;\n",[49,21946,21947],{"class":51,"line":2311},[49,21948,21949],{"class":66},"    \u002F\u002F  m_C = c;\n",[49,21951,21952],{"class":51,"line":2316},[49,21953,21954],{"class":66},"    \u002F\u002F}\n",[49,21956,21957],{"class":51,"line":2322},[49,21958,399],{"emptyLinePlaceholder":398},[49,21960,21961],{"class":51,"line":2327},[49,21962,21963],{"class":66},"    \u002F\u002F初始化列表方式初始化\n",[49,21965,21966],{"class":51,"line":2341},[49,21967,21968],{"class":66},"    \u002F\u002F使用有参构造函数\n",[49,21970,21971,21973,21975,21977,21979,21981,21983,21985,21987,21989,21991,21994,21997,22000,22003,22006,22009],{"class":51,"line":2346},[49,21972,19216],{"class":55},[49,21974,841],{"class":73},[49,21976,844],{"class":77},[49,21978,2098],{"class":5913},[49,21980,13132],{"class":73},[49,21982,844],{"class":77},[49,21984,3530],{"class":5913},[49,21986,13132],{"class":73},[49,21988,844],{"class":77},[49,21990,3546],{"class":5913},[49,21992,21993],{"class":73},") :",[49,21995,21996],{"class":55},"m_A",[49,21998,21999],{"class":73},"(a), ",[49,22001,22002],{"class":55},"m_B",[49,22004,22005],{"class":73},"(b), ",[49,22007,22008],{"class":55},"m_C",[49,22010,22011],{"class":73},"(c) {}\n",[49,22013,22014,22016,22019],{"class":51,"line":2352},[49,22015,15606],{"class":77},[49,22017,22018],{"class":55}," PrintPerson",[49,22020,11550],{"class":73},[49,22022,22023,22025,22027,22030,22032,22035,22037],{"class":51,"line":2373},[49,22024,10366],{"class":73},[49,22026,1872],{"class":77},[49,22028,22029],{"class":59}," \"mA:\"",[49,22031,2144],{"class":77},[49,22033,22034],{"class":73}," m_A ",[49,22036,1872],{"class":77},[49,22038,9537],{"class":73},[49,22040,22041,22043,22045,22048,22050,22053,22055],{"class":51,"line":2378},[49,22042,10366],{"class":73},[49,22044,1872],{"class":77},[49,22046,22047],{"class":59}," \"mB:\"",[49,22049,2144],{"class":77},[49,22051,22052],{"class":73}," m_B ",[49,22054,1872],{"class":77},[49,22056,9537],{"class":73},[49,22058,22059,22061,22063,22066,22068,22071,22073],{"class":51,"line":2392},[49,22060,10366],{"class":73},[49,22062,1872],{"class":77},[49,22064,22065],{"class":59}," \"mC:\"",[49,22067,2144],{"class":77},[49,22069,22070],{"class":73}," m_C ",[49,22072,1872],{"class":77},[49,22074,9537],{"class":73},[49,22076,22077],{"class":51,"line":2397},[49,22078,2885],{"class":73},[49,22080,22081],{"class":51,"line":2426},[49,22082,15919],{"class":77},[49,22084,22085,22087],{"class":51,"line":2431},[49,22086,2683],{"class":77},[49,22088,22089],{"class":73}," m_A;\n",[49,22091,22092,22094],{"class":51,"line":2448},[49,22093,2683],{"class":77},[49,22095,22096],{"class":73}," m_B;\n",[49,22098,22099,22101],{"class":51,"line":2453},[49,22100,2683],{"class":77},[49,22102,22103],{"class":73}," m_C;\n",[49,22105,22106],{"class":51,"line":2458},[49,22107,4692],{"class":73},[49,22109,22110],{"class":51,"line":2463},[49,22111,399],{"emptyLinePlaceholder":398},[49,22113,22114,22116,22118],{"class":51,"line":2477},[49,22115,844],{"class":77},[49,22117,2671],{"class":55},[49,22119,6675],{"class":73},[49,22121,22122],{"class":51,"line":2482},[49,22123,2245],{"class":73},[49,22125,22126],{"class":51,"line":3274},[49,22127,399],{"emptyLinePlaceholder":398},[49,22129,22130,22132,22134,22136,22138,22140,22142,22144,22146],{"class":51,"line":3288},[49,22131,20128],{"class":73},[49,22133,14],{"class":55},[49,22135,841],{"class":73},[49,22137,1047],{"class":159},[49,22139,13132],{"class":73},[49,22141,915],{"class":159},[49,22143,13132],{"class":73},[49,22145,909],{"class":159},[49,22147,3416],{"class":73},[49,22149,22150,22152,22155],{"class":51,"line":3296},[49,22151,16563],{"class":73},[49,22153,22154],{"class":55},"PrintPerson",[49,22156,6333],{"class":73},[49,22158,22159],{"class":51,"line":3301},[49,22160,399],{"emptyLinePlaceholder":398},[49,22162,22163],{"class":51,"line":3307},[49,22164,399],{"emptyLinePlaceholder":398},[49,22166,22167,22169,22171,22173],{"class":51,"line":3313},[49,22168,3001],{"class":55},[49,22170,841],{"class":73},[49,22172,3006],{"class":59},[49,22174,3416],{"class":73},[49,22176,22177],{"class":51,"line":3318},[49,22178,399],{"emptyLinePlaceholder":398},[49,22180,22181,22183,22185],{"class":51,"line":8645},[49,22182,4787],{"class":77},[49,22184,4790],{"class":159},[49,22186,1990],{"class":73},[49,22188,22189],{"class":51,"line":8669},[49,22190,2264],{"class":73},[14,22192,22193,22194,22197,22198],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[112,22195,22196],{},"参数名就是定义的对象属性","，",[112,22199,22200],{},"属性后面的值为有参构造函数的形参",[40,22202,22204],{"className":829,"code":22203,"language":831,"meta":27,"style":27},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[46,22205,22206],{"__ignoreMap":27},[49,22207,22208,22210,22212,22214,22217,22219,22222,22224,22227,22229,22232,22234,22237,22239],{"class":51,"line":52},[49,22209,19743],{"class":55},[49,22211,841],{"class":73},[49,22213,844],{"class":77},[49,22215,22216],{"class":73}," a.",[49,22218,844],{"class":77},[49,22220,22221],{"class":73}," b,",[49,22223,844],{"class":77},[49,22225,22226],{"class":73}," b):",[49,22228,21996],{"class":55},[49,22230,22231],{"class":73},"(a),",[49,22233,22002],{"class":55},[49,22235,22236],{"class":73},"(c),",[49,22238,22008],{"class":55},[49,22240,22241],{"class":73},"(b) {}\n",[18,22243,22245],{"id":22244},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,22247,22248],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,22250,15330],{},[40,22252,22254],{"className":829,"code":22253,"language":831,"meta":27,"style":27},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[46,22255,22256,22261,22266,22270,22275,22279],{"__ignoreMap":27},[49,22257,22258],{"class":51,"line":52},[49,22259,22260],{"class":73},"A{};\n",[49,22262,22263],{"class":51,"line":63},[49,22264,22265],{"class":73},"B\n",[49,22267,22268],{"class":51,"line":70},[49,22269,2245],{"class":73},[49,22271,22272],{"class":51,"line":219},[49,22273,22274],{"class":73},"    A a;\n",[49,22276,22277],{"class":51,"line":233},[49,22278,2264],{"class":73},[49,22280,22281],{"class":51,"line":241},[49,22282,22283],{"class":66},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,22285,22286],{},"案例",[40,22288,22290],{"className":829,"code":22289,"language":831,"meta":27,"style":27},"\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",[46,22291,22292,22297,22304,22308,22313,22318,22332,22336,22346,22357,22361,22368,22372,22385,22389,22394,22399,22403,22409,22413,22417,22421,22452,22456,22467,22471,22477,22481,22494,22498,22502,22506,22511,22516,22520,22528,22532,22549,22568,22572,22580,22584,22590],{"__ignoreMap":27},[49,22293,22294],{"class":51,"line":52},[49,22295,22296],{"class":66},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[49,22298,22299,22301],{"class":51,"line":63},[49,22300,15391],{"class":77},[49,22302,22303],{"class":55}," Phone\n",[49,22305,22306],{"class":51,"line":70},[49,22307,2245],{"class":73},[49,22309,22310],{"class":51,"line":219},[49,22311,22312],{"class":73},"public：\n",[49,22314,22315],{"class":51,"line":233},[49,22316,22317],{"class":66},"    \u002F\u002F 赋值(构造函数)\n",[49,22319,22320,22323,22325,22327,22330],{"class":51,"line":241},[49,22321,22322],{"class":55},"    Phone",[49,22324,841],{"class":73},[49,22326,15614],{"class":55},[49,22328,22329],{"class":5913}," pName",[49,22331,847],{"class":73},[49,22333,22334],{"class":51,"line":1920},[49,22335,2728],{"class":73},[49,22337,22338,22341,22343],{"class":51,"line":2011},[49,22339,22340],{"class":73},"        m_pName",[49,22342,78],{"class":77},[49,22344,22345],{"class":73},"pName;\n",[49,22347,22348,22350,22352,22355],{"class":51,"line":2017},[49,22349,4148],{"class":73},[49,22351,1872],{"class":77},[49,22353,22354],{"class":59},"\"Phone的构造函数调用\"",[49,22356,1990],{"class":73},[49,22358,22359],{"class":51,"line":2029},[49,22360,2885],{"class":73},[49,22362,22363,22366],{"class":51,"line":2311},[49,22364,22365],{"class":55},"    ~Phone",[49,22367,2674],{"class":73},[49,22369,22370],{"class":51,"line":2316},[49,22371,2728],{"class":73},[49,22373,22374,22376,22378,22381,22383],{"class":51,"line":2322},[49,22375,4148],{"class":73},[49,22377,1872],{"class":77},[49,22379,22380],{"class":59},"\"Phone析构函数调用\"",[49,22382,1872],{"class":77},[49,22384,1894],{"class":73},[49,22386,22387],{"class":51,"line":2327},[49,22388,2885],{"class":73},[49,22390,22391],{"class":51,"line":2341},[49,22392,22393],{"class":66},"    \u002F\u002F\n",[49,22395,22396],{"class":51,"line":2346},[49,22397,22398],{"class":73},"    string m_PName;\n",[49,22400,22401],{"class":51,"line":2352},[49,22402,4692],{"class":73},[49,22404,22405,22407],{"class":51,"line":2373},[49,22406,15391],{"class":77},[49,22408,15868],{"class":55},[49,22410,22411],{"class":51,"line":2378},[49,22412,2245],{"class":73},[49,22414,22415],{"class":51,"line":2392},[49,22416,15413],{"class":77},[49,22418,22419],{"class":51,"line":2397},[49,22420,17691],{"class":66},[49,22422,22423,22425,22427,22429,22431,22433,22435,22438,22441,22443,22446,22449],{"class":51,"line":2426},[49,22424,19216],{"class":55},[49,22426,841],{"class":73},[49,22428,15614],{"class":55},[49,22430,15617],{"class":5913},[49,22432,1207],{"class":73},[49,22434,15614],{"class":55},[49,22436,22437],{"class":5913}," pname",[49,22439,22440],{"class":73},"):",[49,22442,15707],{"class":55},[49,22444,22445],{"class":73},"(name),m_phone.",[49,22447,22448],{"class":55},"m_PName",[49,22450,22451],{"class":73},"(pname) \n",[49,22453,22454],{"class":51,"line":2431},[49,22455,2728],{"class":73},[49,22457,22458,22460,22462,22465],{"class":51,"line":2448},[49,22459,4148],{"class":73},[49,22461,1872],{"class":77},[49,22463,22464],{"class":59},"\"Person的构造函数调用\"",[49,22466,1990],{"class":73},[49,22468,22469],{"class":51,"line":2453},[49,22470,2885],{"class":73},[49,22472,22473,22475],{"class":51,"line":2458},[49,22474,19249],{"class":55},[49,22476,2674],{"class":73},[49,22478,22479],{"class":51,"line":2463},[49,22480,2728],{"class":73},[49,22482,22483,22485,22487,22490,22492],{"class":51,"line":2477},[49,22484,4148],{"class":73},[49,22486,1872],{"class":77},[49,22488,22489],{"class":59},"\"Person析构函数调用\"",[49,22491,1872],{"class":77},[49,22493,1894],{"class":73},[49,22495,22496],{"class":51,"line":2482},[49,22497,2885],{"class":73},[49,22499,22500],{"class":51,"line":3274},[49,22501,8477],{"class":66},[49,22503,22504],{"class":51,"line":3288},[49,22505,15589],{"class":73},[49,22507,22508],{"class":51,"line":3296},[49,22509,22510],{"class":66},"    \u002F\u002F手机\n",[49,22512,22513],{"class":51,"line":3301},[49,22514,22515],{"class":73},"    Phone m_Phone;\n",[49,22517,22518],{"class":51,"line":3307},[49,22519,4692],{"class":73},[49,22521,22522,22524,22526],{"class":51,"line":3313},[49,22523,6061],{"class":77},[49,22525,6285],{"class":55},[49,22527,2674],{"class":73},[49,22529,22530],{"class":51,"line":3318},[49,22531,2245],{"class":73},[49,22533,22534,22536,22538,22540,22542,22544,22547],{"class":51,"line":8645},[49,22535,20128],{"class":73},[49,22537,14],{"class":55},[49,22539,841],{"class":73},[49,22541,8613],{"class":59},[49,22543,1207],{"class":73},[49,22545,22546],{"class":59},"\"安卓\"",[49,22548,3416],{"class":73},[49,22550,22551,22553,22555,22558,22560,22563,22565],{"class":51,"line":8669},[49,22552,2250],{"class":73},[49,22554,1872],{"class":77},[49,22556,22557],{"class":73},"p.Name",[49,22559,1872],{"class":77},[49,22561,22562],{"class":59},"\"拿着：\"",[49,22564,1872],{"class":77},[49,22566,22567],{"class":73},"p.m_phone.m_PName;\n",[49,22569,22570],{"class":51,"line":8674},[49,22571,2264],{"class":73},[49,22573,22574,22576,22578],{"class":51,"line":8680},[49,22575,844],{"class":77},[49,22577,2671],{"class":55},[49,22579,2674],{"class":73},[49,22581,22582],{"class":51,"line":8707},[49,22583,2245],{"class":73},[49,22585,22586,22588],{"class":51,"line":8712},[49,22587,6330],{"class":55},[49,22589,6333],{"class":73},[49,22591,22592],{"class":51,"line":8718},[49,22593,2264],{"class":73},[14,22595,9722],{},[40,22597,22599],{"className":829,"code":22598,"language":831,"meta":27,"style":27},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[46,22600,22601,22606],{"__ignoreMap":27},[49,22602,22603],{"class":51,"line":52},[49,22604,22605],{"class":66},"    \u002F\u002F不需要写这个：\n",[49,22607,22608],{"class":51,"line":63},[49,22609,22610],{"class":66},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,22612,22613],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[40,22615,22617],{"className":829,"code":22616,"language":831,"meta":27,"style":27},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[46,22618,22619],{"__ignoreMap":27},[49,22620,22621,22623,22626,22628,22631,22634],{"class":51,"line":52},[49,22622,19743],{"class":55},[49,22624,22625],{"class":73},"(string name.string pname):",[49,22627,15707],{"class":55},[49,22629,22630],{"class":73},"(name),",[49,22632,22633],{"class":55},"m_phone",[49,22635,22636],{"class":73},"(pname) {}\n",[14,22638,22639,22640,78,22643],{},"采用的是隐式转换法，实际为如下：\n",[46,22641,22642],{},"m_phone(pname)",[46,22644,22645],{},"Phone m_phone=pname",[14,22647,22648,22651],{},[112,22649,22650],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22653,22654],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[18,22656,22658],{"id":22657},"_828静态对象","8.2.8静态对象",[14,22660,22661],{},"静态对象在成员对象前static，称为静态对象",[14,22663,22664],{},"静态对象分为两类：",[30,22666,22667],{},[33,22668,22669],{},"静态成员变量",[742,22671,22672,22675,22678],{},[33,22673,22674],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[33,22676,22677],{},"②在编译阶段分配内存",[33,22679,22680],{},"③类内声明，类外初始化",[30,22682,22683],{"start":63},[33,22684,22685],{},"静态成员函数",[742,22687,22688,22691],{},[33,22689,22690],{},"①所有对象共享同一个函数",[33,22692,22693],{},"②静态成员函数只能访问静态成员变量",[130,22695,22697],{"id":22696},"_8281静态成员变量","8.2.8.1静态成员变量",[40,22699,22701],{"className":829,"code":22700,"language":831,"meta":27,"style":27},"#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",[46,22702,22703,22709,22719,22725,22729,22733,22738,22743,22748,22756,22760,22764,22768,22776,22780,22784,22789,22802,22806,22814,22818,22824],{"__ignoreMap":27},[49,22704,22705,22707],{"class":51,"line":52},[49,22706,2648],{"class":77},[49,22708,2651],{"class":59},[49,22710,22711,22713,22715,22717],{"class":51,"line":63},[49,22712,2656],{"class":77},[49,22714,2659],{"class":77},[49,22716,2662],{"class":55},[49,22718,1990],{"class":73},[49,22720,22721,22723],{"class":51,"line":70},[49,22722,15391],{"class":77},[49,22724,15868],{"class":55},[49,22726,22727],{"class":51,"line":219},[49,22728,2245],{"class":73},[49,22730,22731],{"class":51,"line":233},[49,22732,15413],{"class":77},[49,22734,22735],{"class":51,"line":241},[49,22736,22737],{"class":66},"    \u002F\u002F非静态成员变量\n",[49,22739,22740],{"class":51,"line":1920},[49,22741,22742],{"class":66},"    \u002F\u002F int m_A;\n",[49,22744,22745],{"class":51,"line":2011},[49,22746,22747],{"class":66},"    \u002F\u002F定义静态成员变量\n",[49,22749,22750,22752,22754],{"class":51,"line":2017},[49,22751,11717],{"class":77},[49,22753,3080],{"class":77},[49,22755,22089],{"class":73},[49,22757,22758],{"class":51,"line":2029},[49,22759,399],{"emptyLinePlaceholder":398},[49,22761,22762],{"class":51,"line":2311},[49,22763,399],{"emptyLinePlaceholder":398},[49,22765,22766],{"class":51,"line":2316},[49,22767,4692],{"class":73},[49,22769,22770,22772,22774],{"class":51,"line":2322},[49,22771,6061],{"class":77},[49,22773,6285],{"class":55},[49,22775,2674],{"class":73},[49,22777,22778],{"class":51,"line":2327},[49,22779,2245],{"class":73},[49,22781,22782],{"class":51,"line":2341},[49,22783,16010],{"class":73},[49,22785,22786],{"class":51,"line":2346},[49,22787,22788],{"class":66},"    \u002F\u002F输出类成员变量这块内存\n",[49,22790,22791,22793,22795,22798,22800],{"class":51,"line":2352},[49,22792,2250],{"class":73},[49,22794,1872],{"class":77},[49,22796,22797],{"class":73},"p.m_A",[49,22799,1872],{"class":77},[49,22801,1894],{"class":73},[49,22803,22804],{"class":51,"line":2373},[49,22805,2264],{"class":73},[49,22807,22808,22810,22812],{"class":51,"line":2378},[49,22809,844],{"class":77},[49,22811,2671],{"class":55},[49,22813,2674],{"class":73},[49,22815,22816],{"class":51,"line":2392},[49,22817,2245],{"class":73},[49,22819,22820,22822],{"class":51,"line":2397},[49,22821,6330],{"class":55},[49,22823,2674],{"class":73},[49,22825,22826],{"class":51,"line":2426},[49,22827,2264],{"class":73},[14,22829,22830],{},"此时输出是报错的：无法解析外部命令",[14,22832,22833],{},"解决这一问题：必须用到类内声明，类外初始化操作",[40,22835,22837],{"className":829,"code":22836,"language":831,"meta":27,"style":27},"#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",[46,22838,22839,22845,22855,22861,22865,22869,22874,22882,22886,22891,22906,22914,22918,22922,22927,22932,22944,22949,22960,22965,22970,22983,22987,22995,22999,23005],{"__ignoreMap":27},[49,22840,22841,22843],{"class":51,"line":52},[49,22842,2648],{"class":77},[49,22844,2651],{"class":59},[49,22846,22847,22849,22851,22853],{"class":51,"line":63},[49,22848,2656],{"class":77},[49,22850,2659],{"class":77},[49,22852,2662],{"class":55},[49,22854,1990],{"class":73},[49,22856,22857,22859],{"class":51,"line":70},[49,22858,15391],{"class":77},[49,22860,15868],{"class":55},[49,22862,22863],{"class":51,"line":219},[49,22864,2245],{"class":73},[49,22866,22867],{"class":51,"line":233},[49,22868,15413],{"class":77},[49,22870,22871],{"class":51,"line":241},[49,22872,22873],{"class":66},"    \u002F\u002F类内声明\n",[49,22875,22876,22878,22880],{"class":51,"line":1920},[49,22877,11717],{"class":77},[49,22879,3080],{"class":77},[49,22881,22089],{"class":73},[49,22883,22884],{"class":51,"line":2011},[49,22885,4692],{"class":73},[49,22887,22888],{"class":51,"line":2017},[49,22889,22890],{"class":66},"\u002F\u002F类外初始化\n",[49,22892,22893,22895,22897,22900,22902,22904],{"class":51,"line":2029},[49,22894,844],{"class":77},[49,22896,16266],{"class":55},[49,22898,22899],{"class":73},"::m_A",[49,22901,78],{"class":77},[49,22903,1275],{"class":159},[49,22905,1990],{"class":73},[49,22907,22908,22910,22912],{"class":51,"line":2311},[49,22909,6061],{"class":77},[49,22911,6285],{"class":55},[49,22913,2674],{"class":73},[49,22915,22916],{"class":51,"line":2316},[49,22917,2245],{"class":73},[49,22919,22920],{"class":51,"line":2322},[49,22921,16010],{"class":73},[49,22923,22924],{"class":51,"line":2327},[49,22925,22926],{"class":66},"    \u002F\u002F访问变量的原内存空间\n",[49,22928,22929],{"class":51,"line":2341},[49,22930,22931],{"class":66},"    \u002F\u002F100\n",[49,22933,22934,22936,22938,22940,22942],{"class":51,"line":2346},[49,22935,2250],{"class":73},[49,22937,1872],{"class":77},[49,22939,22797],{"class":73},[49,22941,1872],{"class":77},[49,22943,1894],{"class":73},[49,22945,22946],{"class":51,"line":2352},[49,22947,22948],{"class":73},"    Person p2;\n",[49,22950,22951,22954,22956,22958],{"class":51,"line":2373},[49,22952,22953],{"class":73},"    p2.m_A",[49,22955,78],{"class":77},[49,22957,2421],{"class":159},[49,22959,1990],{"class":73},[49,22961,22962],{"class":51,"line":2378},[49,22963,22964],{"class":66},"    \u002F\u002F继续访问这片空间\n",[49,22966,22967],{"class":51,"line":2392},[49,22968,22969],{"class":66},"    \u002F\u002F200\n",[49,22971,22972,22974,22976,22979,22981],{"class":51,"line":2397},[49,22973,2250],{"class":73},[49,22975,1872],{"class":77},[49,22977,22978],{"class":73},"p2.m_A",[49,22980,1872],{"class":77},[49,22982,1894],{"class":73},[49,22984,22985],{"class":51,"line":2426},[49,22986,2264],{"class":73},[49,22988,22989,22991,22993],{"class":51,"line":2431},[49,22990,844],{"class":77},[49,22992,2671],{"class":55},[49,22994,2674],{"class":73},[49,22996,22997],{"class":51,"line":2448},[49,22998,2245],{"class":73},[49,23000,23001,23003],{"class":51,"line":2453},[49,23002,6330],{"class":55},[49,23004,6333],{"class":73},[49,23006,23007],{"class":51,"line":2458},[49,23008,2264],{"class":73},[14,23010,23011],{},[112,23012,23013],{},"静态变量的访问",[40,23015,23017],{"className":829,"code":23016,"language":831,"meta":27,"style":27},"#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",[46,23018,23019,23025,23035,23041,23045,23049,23053,23061,23065,23070,23078,23082,23086,23100,23115,23123,23127,23132,23137,23142,23147,23159,23164,23169,23183,23200,23204,23212,23216,23222],{"__ignoreMap":27},[49,23020,23021,23023],{"class":51,"line":52},[49,23022,2648],{"class":77},[49,23024,2651],{"class":59},[49,23026,23027,23029,23031,23033],{"class":51,"line":63},[49,23028,2656],{"class":77},[49,23030,2659],{"class":77},[49,23032,2662],{"class":55},[49,23034,1990],{"class":73},[49,23036,23037,23039],{"class":51,"line":70},[49,23038,15391],{"class":77},[49,23040,15868],{"class":55},[49,23042,23043],{"class":51,"line":219},[49,23044,2245],{"class":73},[49,23046,23047],{"class":51,"line":233},[49,23048,15413],{"class":77},[49,23050,23051],{"class":51,"line":241},[49,23052,22873],{"class":66},[49,23054,23055,23057,23059],{"class":51,"line":1920},[49,23056,11717],{"class":77},[49,23058,3080],{"class":77},[49,23060,22089],{"class":73},[49,23062,23063],{"class":51,"line":2011},[49,23064,15919],{"class":77},[49,23066,23067],{"class":51,"line":2017},[49,23068,23069],{"class":66},"    \u002F\u002F静态成员变量也是有访问权限的\n",[49,23071,23072,23074,23076],{"class":51,"line":2029},[49,23073,11717],{"class":77},[49,23075,3080],{"class":77},[49,23077,22096],{"class":73},[49,23079,23080],{"class":51,"line":2311},[49,23081,4692],{"class":73},[49,23083,23084],{"class":51,"line":2316},[49,23085,22890],{"class":66},[49,23087,23088,23090,23092,23094,23096,23098],{"class":51,"line":2322},[49,23089,844],{"class":77},[49,23091,16266],{"class":55},[49,23093,22899],{"class":73},[49,23095,78],{"class":77},[49,23097,1275],{"class":159},[49,23099,1990],{"class":73},[49,23101,23102,23104,23106,23109,23111,23113],{"class":51,"line":2327},[49,23103,844],{"class":77},[49,23105,16266],{"class":55},[49,23107,23108],{"class":73},"::m_B",[49,23110,78],{"class":77},[49,23112,1529],{"class":159},[49,23114,1990],{"class":73},[49,23116,23117,23119,23121],{"class":51,"line":2341},[49,23118,6061],{"class":77},[49,23120,6354],{"class":55},[49,23122,2674],{"class":73},[49,23124,23125],{"class":51,"line":2346},[49,23126,2245],{"class":73},[49,23128,23129],{"class":51,"line":2352},[49,23130,23131],{"class":66},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[49,23133,23134],{"class":51,"line":2373},[49,23135,23136],{"class":66},"    \u002F\u002F静态成员变量有两种访问方式：\n",[49,23138,23139],{"class":51,"line":2378},[49,23140,23141],{"class":66},"    \u002F\u002F1.通过对象进行访问\n",[49,23143,23144],{"class":51,"line":2392},[49,23145,23146],{"class":73},"    Person p;  \n",[49,23148,23149,23151,23153,23155,23157],{"class":51,"line":2397},[49,23150,2250],{"class":73},[49,23152,1872],{"class":77},[49,23154,22797],{"class":73},[49,23156,1872],{"class":77},[49,23158,1894],{"class":73},[49,23160,23161],{"class":51,"line":2426},[49,23162,23163],{"class":66},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[49,23165,23166],{"class":51,"line":2431},[49,23167,23168],{"class":66},"    \u002F\u002F2.通过类名进行访问\n",[49,23170,23171,23173,23175,23177,23179,23181],{"class":51,"line":2448},[49,23172,2250],{"class":73},[49,23174,1872],{"class":77},[49,23176,19743],{"class":55},[49,23178,22899],{"class":73},[49,23180,1872],{"class":77},[49,23182,1894],{"class":73},[49,23184,23185,23187,23189,23191,23193,23195,23197],{"class":51,"line":2453},[49,23186,2250],{"class":73},[49,23188,1872],{"class":77},[49,23190,19743],{"class":55},[49,23192,23108],{"class":73},[49,23194,1872],{"class":77},[49,23196,1938],{"class":73},[49,23198,23199],{"class":66}," \u002F\u002F没有访问权限，报错\n",[49,23201,23202],{"class":51,"line":2458},[49,23203,2264],{"class":73},[49,23205,23206,23208,23210],{"class":51,"line":2463},[49,23207,844],{"class":77},[49,23209,2671],{"class":55},[49,23211,2674],{"class":73},[49,23213,23214],{"class":51,"line":2477},[49,23215,2245],{"class":73},[49,23217,23218,23220],{"class":51,"line":2482},[49,23219,6399],{"class":55},[49,23221,6333],{"class":73},[49,23223,23224],{"class":51,"line":3274},[49,23225,2264],{"class":73},[130,23227,23229],{"id":23228},"_8282静态成员函数","8.2.8.2静态成员函数",[14,23231,23232],{},"1.静态成员函数定义与访问",[40,23234,23236],{"className":829,"code":23235,"language":831,"meta":27,"style":27},"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",[46,23237,23238,23244,23248,23252,23257,23268,23272,23286,23290,23294,23302,23306,23311,23316,23320,23328,23333,23343],{"__ignoreMap":27},[49,23239,23240,23242],{"class":51,"line":52},[49,23241,15391],{"class":77},[49,23243,15868],{"class":55},[49,23245,23246],{"class":51,"line":63},[49,23247,2245],{"class":73},[49,23249,23250],{"class":51,"line":70},[49,23251,15413],{"class":77},[49,23253,23254],{"class":51,"line":219},[49,23255,23256],{"class":66},"    \u002F\u002F在公共权限下定义静态成员函数\n",[49,23258,23259,23261,23264,23266],{"class":51,"line":233},[49,23260,11717],{"class":77},[49,23262,23263],{"class":77}," void",[49,23265,12082],{"class":55},[49,23267,2674],{"class":73},[49,23269,23270],{"class":51,"line":241},[49,23271,2728],{"class":73},[49,23273,23274,23277,23279,23282,23284],{"class":51,"line":1920},[49,23275,23276],{"class":73},"        coout",[49,23278,1872],{"class":77},[49,23280,23281],{"class":59},"\"静态成员函数的调用\"",[49,23283,1872],{"class":77},[49,23285,1894],{"class":73},[49,23287,23288],{"class":51,"line":2011},[49,23289,2885],{"class":73},[49,23291,23292],{"class":51,"line":2017},[49,23293,4692],{"class":73},[49,23295,23296,23298,23300],{"class":51,"line":2029},[49,23297,6061],{"class":77},[49,23299,6285],{"class":55},[49,23301,2674],{"class":73},[49,23303,23304],{"class":51,"line":2311},[49,23305,2245],{"class":73},[49,23307,23308],{"class":51,"line":2316},[49,23309,23310],{"class":66},"    \u002F\u002F静态成员函数的调用方式:\n",[49,23312,23313],{"class":51,"line":2322},[49,23314,23315],{"class":66},"    \u002F\u002F1.通过对象访问\n",[49,23317,23318],{"class":51,"line":2327},[49,23319,16010],{"class":73},[49,23321,23322,23324,23326],{"class":51,"line":2341},[49,23323,16563],{"class":73},[49,23325,12248],{"class":55},[49,23327,6333],{"class":73},[49,23329,23330],{"class":51,"line":2346},[49,23331,23332],{"class":66},"    \u002F\u002F2.通过类名访问\n",[49,23334,23335,23337,23339,23341],{"class":51,"line":2352},[49,23336,19216],{"class":55},[49,23338,18429],{"class":73},[49,23340,12248],{"class":55},[49,23342,6333],{"class":73},[49,23344,23345],{"class":51,"line":2373},[49,23346,2264],{"class":73},[30,23348,23349],{"start":63},[33,23350,23351],{},"静态成员函数只能访问静态成员变量",[40,23353,23355],{"className":829,"code":23354,"language":831,"meta":27,"style":27},"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",[46,23356,23357,23363,23367,23371,23375,23385,23389,23403,23408,23420,23424,23435,23445,23449,23453,23457,23467,23471,23484,23488,23492,23496,23500,23514,23522,23526,23530,23534,23538,23546,23550,23560,23565,23569,23577,23581,23587],{"__ignoreMap":27},[49,23358,23359,23361],{"class":51,"line":52},[49,23360,15391],{"class":77},[49,23362,15868],{"class":55},[49,23364,23365],{"class":51,"line":63},[49,23366,2245],{"class":73},[49,23368,23369],{"class":51,"line":70},[49,23370,15413],{"class":77},[49,23372,23373],{"class":51,"line":219},[49,23374,23256],{"class":66},[49,23376,23377,23379,23381,23383],{"class":51,"line":233},[49,23378,11717],{"class":77},[49,23380,23263],{"class":77},[49,23382,12082],{"class":55},[49,23384,2674],{"class":73},[49,23386,23387],{"class":51,"line":241},[49,23388,2728],{"class":73},[49,23390,23391,23394,23396,23398,23400],{"class":51,"line":1920},[49,23392,23393],{"class":73},"        m_A",[49,23395,78],{"class":77},[49,23397,1140],{"class":159},[49,23399,894],{"class":73},[49,23401,23402],{"class":66}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[49,23404,23405],{"class":51,"line":2011},[49,23406,23407],{"class":66},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[49,23409,23410,23412,23414,23416,23418],{"class":51,"line":2017},[49,23411,23276],{"class":73},[49,23413,1872],{"class":77},[49,23415,23281],{"class":59},[49,23417,1872],{"class":77},[49,23419,1894],{"class":73},[49,23421,23422],{"class":51,"line":2029},[49,23423,2885],{"class":73},[49,23425,23426,23428,23430,23432],{"class":51,"line":2311},[49,23427,11717],{"class":77},[49,23429,3080],{"class":77},[49,23431,16145],{"class":73},[49,23433,23434],{"class":66}," \u002F\u002F静态成员变量\n",[49,23436,23437,23439,23442],{"class":51,"line":2316},[49,23438,2683],{"class":77},[49,23440,23441],{"class":73}," m_B;",[49,23443,23444],{"class":66}," \u002F\u002F非静态成员变量\n",[49,23446,23447],{"class":51,"line":2322},[49,23448,399],{"emptyLinePlaceholder":398},[49,23450,23451],{"class":51,"line":2327},[49,23452,15919],{"class":77},[49,23454,23455],{"class":51,"line":2341},[49,23456,23069],{"class":66},[49,23458,23459,23461,23463,23465],{"class":51,"line":2346},[49,23460,11717],{"class":77},[49,23462,23263],{"class":77},[49,23464,14315],{"class":55},[49,23466,2674],{"class":73},[49,23468,23469],{"class":51,"line":2352},[49,23470,2728],{"class":73},[49,23472,23473,23475,23477,23480,23482],{"class":51,"line":2373},[49,23474,4148],{"class":73},[49,23476,1872],{"class":77},[49,23478,23479],{"class":59},"\"这是私有权限下的静态函数调用\"",[49,23481,1872],{"class":77},[49,23483,1894],{"class":73},[49,23485,23486],{"class":51,"line":2378},[49,23487,2885],{"class":73},[49,23489,23490],{"class":51,"line":2392},[49,23491,399],{"emptyLinePlaceholder":398},[49,23493,23494],{"class":51,"line":2397},[49,23495,399],{"emptyLinePlaceholder":398},[49,23497,23498],{"class":51,"line":2426},[49,23499,4692],{"class":73},[49,23501,23502,23504,23506,23508,23510,23512],{"class":51,"line":2431},[49,23503,844],{"class":77},[49,23505,16266],{"class":55},[49,23507,22899],{"class":73},[49,23509,78],{"class":77},[49,23511,1021],{"class":159},[49,23513,1990],{"class":73},[49,23515,23516,23518,23520],{"class":51,"line":2448},[49,23517,6061],{"class":77},[49,23519,6285],{"class":55},[49,23521,2674],{"class":73},[49,23523,23524],{"class":51,"line":2453},[49,23525,2245],{"class":73},[49,23527,23528],{"class":51,"line":2458},[49,23529,23310],{"class":66},[49,23531,23532],{"class":51,"line":2463},[49,23533,23315],{"class":66},[49,23535,23536],{"class":51,"line":2477},[49,23537,16010],{"class":73},[49,23539,23540,23542,23544],{"class":51,"line":2482},[49,23541,16563],{"class":73},[49,23543,12248],{"class":55},[49,23545,6333],{"class":73},[49,23547,23548],{"class":51,"line":3274},[49,23549,23332],{"class":66},[49,23551,23552,23554,23556,23558],{"class":51,"line":3288},[49,23553,19216],{"class":55},[49,23555,18429],{"class":73},[49,23557,12248],{"class":55},[49,23559,6333],{"class":73},[49,23561,23562],{"class":51,"line":3296},[49,23563,23564],{"class":66},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[49,23566,23567],{"class":51,"line":3301},[49,23568,2264],{"class":73},[49,23570,23571,23573,23575],{"class":51,"line":3307},[49,23572,844],{"class":77},[49,23574,2671],{"class":55},[49,23576,2674],{"class":73},[49,23578,23579],{"class":51,"line":3313},[49,23580,2245],{"class":73},[49,23582,23583,23585],{"class":51,"line":3318},[49,23584,6330],{"class":55},[49,23586,6333],{"class":73},[49,23588,23589],{"class":51,"line":8645},[49,23590,2264],{"class":73},[18,23592,23594],{"id":23593},"_83c对象模型和this指针","8.3C++对象模型和this指针",[130,23596,23598],{"id":23597},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,23600,23601],{},"在c++中，类内的成员变量和成员函数分开存储",[14,23603,23604],{},"只有非静态成员变量才属于类的对象上",[138,23606,23608],{"id":23607},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[40,23610,23612],{"className":829,"code":23611,"language":831,"meta":27,"style":27},"#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",[46,23613,23614,23621,23631,23637,23641,23645,23649,23657,23661,23665,23688,23692,23700,23704,23710],{"__ignoreMap":27},[49,23615,23616,23618],{"class":51,"line":52},[49,23617,2648],{"class":77},[49,23619,23620],{"class":59},"\u003Ciostraem>\n",[49,23622,23623,23625,23627,23629],{"class":51,"line":63},[49,23624,2656],{"class":77},[49,23626,2659],{"class":77},[49,23628,2662],{"class":55},[49,23630,1990],{"class":73},[49,23632,23633,23635],{"class":51,"line":70},[49,23634,15391],{"class":77},[49,23636,15868],{"class":55},[49,23638,23639],{"class":51,"line":219},[49,23640,2245],{"class":73},[49,23642,23643],{"class":51,"line":233},[49,23644,399],{"emptyLinePlaceholder":398},[49,23646,23647],{"class":51,"line":241},[49,23648,4692],{"class":73},[49,23650,23651,23653,23655],{"class":51,"line":1920},[49,23652,6061],{"class":77},[49,23654,6285],{"class":55},[49,23656,2674],{"class":73},[49,23658,23659],{"class":51,"line":2011},[49,23660,2245],{"class":73},[49,23662,23663],{"class":51,"line":2017},[49,23664,16010],{"class":73},[49,23666,23667,23669,23671,23674,23676,23679,23681,23683,23685],{"class":51,"line":2029},[49,23668,2250],{"class":73},[49,23670,1872],{"class":77},[49,23672,23673],{"class":59},"\"size of p=\"",[49,23675,1872],{"class":77},[49,23677,23678],{"class":55},"sizeoif",[49,23680,7236],{"class":73},[49,23682,1872],{"class":77},[49,23684,1938],{"class":73},[49,23686,23687],{"class":66}," \u002F\u002F查看这个空类的占用的内存空间\n",[49,23689,23690],{"class":51,"line":2311},[49,23691,2264],{"class":73},[49,23693,23694,23696,23698],{"class":51,"line":2316},[49,23695,844],{"class":77},[49,23697,2671],{"class":55},[49,23699,2674],{"class":73},[49,23701,23702],{"class":51,"line":2322},[49,23703,2245],{"class":73},[49,23705,23706,23708],{"class":51,"line":2327},[49,23707,6330],{"class":55},[49,23709,6333],{"class":73},[49,23711,23712],{"class":51,"line":2341},[49,23713,2264],{"class":73},[14,23715,23716],{},"输出结果为：size of p=1",[14,23718,23719],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23721,23722],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[138,23724,23726],{"id":23725},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[40,23728,23730],{"className":829,"code":23729,"language":831,"meta":27,"style":27},"#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",[46,23731,23732,23738,23748,23756,23760,23769,23773,23781,23785,23789,23808,23812,23816,23824,23828,23834],{"__ignoreMap":27},[49,23733,23734,23736],{"class":51,"line":52},[49,23735,2648],{"class":77},[49,23737,2651],{"class":59},[49,23739,23740,23742,23744,23746],{"class":51,"line":63},[49,23741,2656],{"class":77},[49,23743,2659],{"class":77},[49,23745,2662],{"class":55},[49,23747,1990],{"class":73},[49,23749,23750,23752,23754],{"class":51,"line":70},[49,23751,15391],{"class":77},[49,23753,16266],{"class":55},[49,23755,3371],{"class":73},[49,23757,23758],{"class":51,"line":219},[49,23759,2245],{"class":73},[49,23761,23762,23764,23766],{"class":51,"line":233},[49,23763,2683],{"class":77},[49,23765,16145],{"class":73},[49,23767,23768],{"class":66},"\u002F\u002F非静态成员变量\n",[49,23770,23771],{"class":51,"line":241},[49,23772,4692],{"class":73},[49,23774,23775,23777,23779],{"class":51,"line":1920},[49,23776,6061],{"class":77},[49,23778,6285],{"class":55},[49,23780,2674],{"class":73},[49,23782,23783],{"class":51,"line":2011},[49,23784,2245],{"class":73},[49,23786,23787],{"class":51,"line":2017},[49,23788,16010],{"class":73},[49,23790,23791,23793,23795,23797,23799,23801,23803,23805],{"class":51,"line":2029},[49,23792,2250],{"class":73},[49,23794,1872],{"class":77},[49,23796,23673],{"class":59},[49,23798,2072],{"class":77},[49,23800,7236],{"class":73},[49,23802,1872],{"class":77},[49,23804,1938],{"class":73},[49,23806,23807],{"class":66}," \u002F\u002F查看不是空对象时占用多少内存\n",[49,23809,23810],{"class":51,"line":2311},[49,23811,399],{"emptyLinePlaceholder":398},[49,23813,23814],{"class":51,"line":2316},[49,23815,2264],{"class":73},[49,23817,23818,23820,23822],{"class":51,"line":2322},[49,23819,844],{"class":77},[49,23821,2671],{"class":55},[49,23823,2674],{"class":73},[49,23825,23826],{"class":51,"line":2327},[49,23827,2245],{"class":73},[49,23829,23830,23832],{"class":51,"line":2341},[49,23831,6330],{"class":55},[49,23833,6333],{"class":73},[49,23835,23836],{"class":51,"line":2346},[49,23837,2264],{"class":73},[14,23839,23840],{},"输出结果：size of p=4",[14,23842,23843],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[30,23845,23846],{},[33,23847,23848],{},"如果加上非静态成员变量，Person类修改如下",[40,23850,23852],{"className":829,"code":23851,"language":831,"meta":27,"style":27},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[46,23853,23854,23860,23864,23870,23878,23882,23887],{"__ignoreMap":27},[49,23855,23856,23858],{"class":51,"line":52},[49,23857,15391],{"class":77},[49,23859,15868],{"class":55},[49,23861,23862],{"class":51,"line":63},[49,23863,2245],{"class":73},[49,23865,23866,23868],{"class":51,"line":70},[49,23867,2683],{"class":77},[49,23869,22089],{"class":73},[49,23871,23872,23874,23876],{"class":51,"line":219},[49,23873,11717],{"class":77},[49,23875,3080],{"class":77},[49,23877,22096],{"class":73},[49,23879,23880],{"class":51,"line":233},[49,23881,4692],{"class":73},[49,23883,23884],{"class":51,"line":241},[49,23885,23886],{"class":66},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[49,23888,23889,23891,23893,23895,23897,23899],{"class":51,"line":1920},[49,23890,844],{"class":77},[49,23892,16266],{"class":55},[49,23894,23108],{"class":73},[49,23896,78],{"class":77},[49,23898,1021],{"class":159},[49,23900,1990],{"class":73},[14,23902,23903],{},"输出结果：4",[14,23905,23906],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[30,23908,23909],{"start":63},[33,23910,23911],{},"加上非静态成员函数",[40,23913,23915],{"className":829,"code":23914,"language":831,"meta":27,"style":27},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[46,23916,23917,23924,23928,23934,23942,23946,23950,23954],{"__ignoreMap":27},[49,23918,23919,23921],{"class":51,"line":52},[49,23920,15391],{"class":77},[49,23922,23923],{"class":55},"  Person\n",[49,23925,23926],{"class":51,"line":63},[49,23927,2245],{"class":73},[49,23929,23930,23932],{"class":51,"line":70},[49,23931,2683],{"class":77},[49,23933,22089],{"class":73},[49,23935,23936,23938,23940],{"class":51,"line":219},[49,23937,15606],{"class":77},[49,23939,12082],{"class":55},[49,23941,2674],{"class":73},[49,23943,23944],{"class":51,"line":233},[49,23945,2728],{"class":73},[49,23947,23948],{"class":51,"line":241},[49,23949,399],{"emptyLinePlaceholder":398},[49,23951,23952],{"class":51,"line":1920},[49,23953,2885],{"class":73},[49,23955,23956],{"class":51,"line":2011},[49,23957,4692],{"class":73},[14,23959,23960],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[30,23962,23963],{"start":70},[33,23964,23965],{},"加上静态成员函数",[40,23967,23969],{"className":829,"code":23968,"language":831,"meta":27,"style":27},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[46,23970,23971,23977,23981,23987,23995,23999,24003,24007,24018,24022,24026,24030],{"__ignoreMap":27},[49,23972,23973,23975],{"class":51,"line":52},[49,23974,15391],{"class":77},[49,23976,23923],{"class":55},[49,23978,23979],{"class":51,"line":63},[49,23980,2245],{"class":73},[49,23982,23983,23985],{"class":51,"line":70},[49,23984,2683],{"class":77},[49,23986,22089],{"class":73},[49,23988,23989,23991,23993],{"class":51,"line":219},[49,23990,15606],{"class":77},[49,23992,12082],{"class":55},[49,23994,2674],{"class":73},[49,23996,23997],{"class":51,"line":233},[49,23998,2728],{"class":73},[49,24000,24001],{"class":51,"line":241},[49,24002,399],{"emptyLinePlaceholder":398},[49,24004,24005],{"class":51,"line":1920},[49,24006,2885],{"class":73},[49,24008,24009,24011,24013,24016],{"class":51,"line":2011},[49,24010,11717],{"class":77},[49,24012,23263],{"class":77},[49,24014,24015],{"class":55}," func1",[49,24017,2674],{"class":73},[49,24019,24020],{"class":51,"line":2017},[49,24021,2728],{"class":73},[49,24023,24024],{"class":51,"line":2029},[49,24025,399],{"emptyLinePlaceholder":398},[49,24027,24028],{"class":51,"line":2311},[49,24029,2885],{"class":73},[49,24031,24032],{"class":51,"line":2316},[49,24033,4692],{"class":73},[14,24035,23903],{},[14,24037,24038],{},"解释：静态成员函数也不属于类上",[757,24040,8371],{},{"title":27,"searchDepth":63,"depth":63,"links":24042},[24043,24049],{"id":15342,"depth":63,"text":15343,"children":24044},[24045,24046,24047,24048],{"id":15346,"depth":70,"text":15347},{"id":16071,"depth":70,"text":16072},{"id":16243,"depth":70,"text":16244},{"id":16702,"depth":70,"text":16703},{"id":19074,"depth":63,"text":19075,"children":24050},[24051,24052,24053,24054,24055,24056,24057,24058,24059],{"id":19086,"depth":70,"text":19087},{"id":19379,"depth":70,"text":19380},{"id":19870,"depth":70,"text":19871},{"id":20967,"depth":70,"text":20968},{"id":21390,"depth":70,"text":21391},{"id":21869,"depth":70,"text":21870},{"id":22244,"depth":70,"text":22245},{"id":22657,"depth":70,"text":22658},{"id":23593,"depth":70,"text":23594},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15307,"description":24060},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24067,"title":831,"body":24068,"description":24072,"extension":766,"meta":24073,"navigation":398,"path":24075,"seo":24076,"stem":24077,"__hash__":24078},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24069,"toc":24070},[],{"title":27,"searchDepth":63,"depth":63,"links":24071},[],null,{"category":24074},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":831,"description":24072},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24080,"title":24081,"body":24082,"description":27,"extension":766,"meta":24668,"navigation":398,"path":24669,"seo":24670,"stem":24671,"__hash__":24672},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24083,"toc":24650},[24084,24087,24091,24094,24097,24100,24118,24123,24126,24129,24132,24135,24140,24143,24148,24151,24154,24158,24161,24164,24170,24173,24191,24195,24199,24202,24207,24210,24214,24217,24230,24233,24237,24240,24243,24246,24271,24274,24283,24294,24309,24341,24345,24352,24360,24364,24367,24370,24375,24379,24382,24385,24390,24393,24397,24400,24403,24408,24411,24415,24420,24424,24490,24494,24497,24500,24503,24506,24509,24515,24533,24536,24550,24558,24562,24565,24568,24573,24576,24581,24586,24589,24592,24597,24602,24605,24610,24615,24618,24623,24628,24631,24634,24639,24642,24647],[10,24085,24081],{"id":24086},"_1强化学习基本认识",[782,24088,24090],{"id":24089},"_11什么是强化学习","1.1.什么是强化学习",[14,24092,24093],{},"强化学习有两部分组成：智能体和环境；",[14,24095,24096],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,24098,24099],{},"强化学习与监督学习的区别:",[30,24101,24102,24105,24108,24111],{},[33,24103,24104],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[33,24106,24107],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[33,24109,24110],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[33,24112,24113,24114,24117],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[112,24115,24116],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,24119,24120],{},[25,24121],{"alt":27,"src":24122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,24124,24125],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,24127,24128],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,24130,24131],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,24133,24134],{},"获取奖励",[14,24136,24137],{},[25,24138],{"alt":27,"src":24139},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,24141,24142],{},"强化学习可以分成标准强化学习和深度强化学习",[14,24144,24145],{},[25,24146],{"alt":27,"src":24147},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,24149,24150],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,24152,24153],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[782,24155,24157],{"id":24156},"_12强化学习应用场景","1.2.强化学习应用场景",[14,24159,24160],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,24162,24163],{},"具身智能中的应用",[14,24165,24166,24169],{},[112,24167,24168],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,24171,24172],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,24174,24175,24176,24179,24180,24183,24184,24187,24188],{},"机器人是",[112,24177,24178],{},"躯体","，深度学习是",[112,24181,24182],{},"神经元****网络","，VLA是",[112,24185,24186],{},"通用的行为逻辑","，而强化学习是",[112,24189,24190],{},"教练",[782,24192,24194],{"id":24193},"_13序列决策","1.3.序列决策",[18,24196,24198],{"id":24197},"_131智能体与环境","1.3.1.智能体与环境",[14,24200,24201],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,24203,24204],{},[25,24205],{"alt":27,"src":24206},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,24208,24209],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[18,24211,24213],{"id":24212},"_132奖励","1.3.2.奖励",[14,24215,24216],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,24218,24219,24220,24229],{},"取某个策略的表现如何。强化学习的目的就是",[112,24221,24222,24223,24228],{},"最大化",[112,24224,24225],{},[112,24226,24227],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,24231,24232],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[18,24234,24236],{"id":24235},"_133序列决策","1.3.3.序列决策",[14,24238,24239],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,24241,24242],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,24244,24245],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,24247,24248,24252,24253,24255,24256,24258,24259,24261,24262,14492,24265,14492,24268],{},[24249,24250,24251],"em",{},"Ht"," = ",[24249,24254,1425],{},"1*, a",[24249,24257,1047],{},", r",[24249,24260,1047],{},", . . . ,* ",[24249,24263,24264],{},"ot",[24249,24266,24267],{},", at ,",[24249,24269,24270],{},"rt",[14,24272,24273],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,24275,24276,24252,24279,2357,24281,1258],{},[24249,24277,24278],{},"st",[24249,24280,891],{},[24249,24282,24251],{},[14,24284,24285,24286,24289,24290,24293],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[112,24287,24288],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[112,24291,24292],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,24295,24296,24297,24300,24301,24304,24305,24308],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[112,24298,24299],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[112,24302,24303],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24249,24306,24307],{},"S, A, T, R, Ω, O, γ",")。",[14,24310,24311,24312,24314,24315,24317,24318,841,24320,24323,24324,24326,24327,841,24330,24333,24334,24336,24337,24340],{},"其中 ",[24249,24313,1518],{}," 表示状态空间，为隐变量，",[24249,24316,1062],{}," 为动作空间，",[24249,24319,1543],{},[24249,24321,24322],{},"s ′ |s, a",") 为状态转移概率，",[24249,24325,1493],{}," 为奖励函数，",[24249,24328,24329],{},"Ω",[24249,24331,24332],{},"o|s, a",") 为观测概率，",[24249,24335,1419],{}," 为观测空间，",[24249,24338,24339],{},"γ"," 为折扣因子。",[782,24342,24344],{"id":24343},"_14动作空间","1.4.动作空间",[14,24346,24347,24348,24351],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[112,24349,24350],{},"动作空间"," ，动作空间分为:",[30,24353,24354,24357],{},[33,24355,24356],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[33,24358,24359],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[782,24361,24363],{"id":24362},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,24365,24366],{},"由策略、价值函数、模型三部分组成",[14,24368,24369],{},"这三者组成马尔可夫决策过程",[14,24371,24372],{},[25,24373],{"alt":27,"src":24374},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[18,24376,24378],{"id":24377},"_151策略","1.5.1.策略",[14,24380,24381],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,24383,24384],{},"策略可分为两种：",[14,24386,24387],{},[25,24388],{"alt":27,"src":24389},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,24391,24392],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[18,24394,24396],{"id":24395},"_152价值函数","1.5.2.价值函数",[14,24398,24399],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,24401,24402],{},"价值函数中有一个折扣因子，类似于存款利息",[14,24404,24405],{},[25,24406],{"alt":27,"src":24407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,24409,24410],{},"进入某个状态采取的最优动作可以通过Q函数得到",[18,24412,24414],{"id":24413},"_153模型","1.5.3.模型",[14,24416,24417],{},[25,24418],{"alt":27,"src":24419},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[782,24421,24423],{"id":24422},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[610,24425,24426,24436],{},[613,24427,24428],{},[616,24429,24430,24433],{},[619,24431,24432],{"align":621},"类型",[619,24434,24435],{"align":621},"特点",[633,24437,24438,24448,24458,24468,24480],{},[616,24439,24440,24445],{},[638,24441,24442],{"align":621},[112,24443,24444],{},"基于价值的智能体",[638,24446,24447],{"align":621},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[616,24449,24450,24455],{},[638,24451,24452],{"align":621},[112,24453,24454],{},"基于策略的智能体",[638,24456,24457],{"align":621},"直接学习策略，没有学习价值函数",[616,24459,24460,24465],{},[638,24461,24462],{"align":621},[112,24463,24464],{},"演员-评论员智能体",[638,24466,24467],{"align":621},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[616,24469,24470,24475],{},[638,24471,24472],{"align":621},[112,24473,24474],{},"有模型强化学习智能体",[638,24476,24477],{"align":621},[25,24478],{"alt":27,"src":24479},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[616,24481,24482,24487],{},[638,24483,24484],{"align":621},[112,24485,24486],{},"免模型强化学习智能体",[638,24488,24489],{"align":621},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[782,24491,24493],{"id":24492},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,24495,24496],{},"学习和规划是序列决策的两个基本问题",[14,24498,24499],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,24501,24502],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,24504,24505],{},"强化学习用到的库：Gym",[14,24507,24508],{},"Gym可以检验强化学习算法的优劣",[14,24510,24511,24514],{},[112,24512,24513],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[40,24516,24518],{"className":42,"code":24517,"language":44,"meta":27,"style":27},"pip install gym==0.25.2\n",[46,24519,24520],{"__ignoreMap":27},[49,24521,24522,24525,24527,24530],{"class":51,"line":52},[49,24523,24524],{"class":55},"pip",[49,24526,269],{"class":59},[49,24528,24529],{"class":59}," gym==",[49,24531,24532],{"class":159},"0.25.2\n",[14,24534,24535],{},"显示图形界面需要",[40,24537,24539],{"className":42,"code":24538,"language":44,"meta":27,"style":27},"pip install pygame\n",[46,24540,24541],{"__ignoreMap":27},[49,24542,24543,24545,24547],{"class":51,"line":52},[49,24544,24524],{"class":55},[49,24546,269],{"class":59},[49,24548,24549],{"class":59}," pygame\n",[14,24551,24552,24553],{},"有关Gym库的相关文档介绍：",[124,24554,24557],{"href":24555,"rel":24556},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[128],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[782,24559,24561],{"id":24560},"_18一些补充基础概念","1.8.一些补充基础概念",[14,24563,24564],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,24566,24567],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,24569,24570],{},[25,24571],{"alt":27,"src":24572},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,24574,24575],{},"折扣率需要自己来设定",[14,24577,24578],{},[25,24579],{"alt":27,"src":24580},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[30,24582,24583],{},[33,24584,24585],{},"状态转移函数：",[14,24587,24588],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,24590,24591],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,24593,24594],{},[25,24595],{"alt":27,"src":24596},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[30,24598,24599],{"start":63},[33,24600,24601],{},"动作价值函数：",[14,24603,24604],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,24606,24607],{},[25,24608],{"alt":27,"src":24609},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[30,24611,24612],{"start":70},[33,24613,24614],{},"最优动作价值函数：",[14,24616,24617],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[14,24619,24620],{},[25,24621],{"alt":27,"src":24622},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[30,24624,24625],{"start":219},[33,24626,24627],{},"状态价值函数:",[14,24629,24630],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24632,24633],{},"它衡量的是“一个具体动作”的长期价值",[14,24635,24636],{},[25,24637],{"alt":27,"src":24638},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24640,24641],{},"几个价值函数之间的比较：",[14,24643,24644],{},[25,24645],{"alt":27,"src":24646},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[757,24648,24649],{},"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":27,"searchDepth":63,"depth":63,"links":24651},[24652,24653,24654,24659,24660,24665,24666,24667],{"id":24089,"depth":63,"text":24090},{"id":24156,"depth":63,"text":24157},{"id":24193,"depth":63,"text":24194,"children":24655},[24656,24657,24658],{"id":24197,"depth":70,"text":24198},{"id":24212,"depth":70,"text":24213},{"id":24235,"depth":70,"text":24236},{"id":24343,"depth":63,"text":24344},{"id":24362,"depth":63,"text":24363,"children":24661},[24662,24663,24664],{"id":24377,"depth":70,"text":24378},{"id":24395,"depth":70,"text":24396},{"id":24413,"depth":70,"text":24414},{"id":24422,"depth":63,"text":24423},{"id":24492,"depth":63,"text":24493},{"id":24560,"depth":63,"text":24561},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24081,"description":27},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24674,"title":24675,"body":24676,"description":24683,"extension":766,"meta":24694,"navigation":398,"path":24695,"seo":24696,"stem":24697,"__hash__":24698},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24677,"toc":24692},[24678,24681,24684,24689],[10,24679,24675],{"id":24680},"_2马尔可夫决策过程",[14,24682,24683],{},"这是强化学习的基本框架",[14,24685,24686],{},[25,24687],{"alt":27,"src":24688},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24690,24691],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":27,"searchDepth":63,"depth":63,"links":24693},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24675,"description":24683},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24700,"title":24701,"body":24702,"description":27,"extension":766,"meta":24818,"navigation":398,"path":24819,"seo":24820,"stem":24821,"__hash__":24822},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24703,"toc":24813},[24704,24707,24711,24714,24719,24724,24727,24732,24735,24740,24743,24747,24752,24755,24760,24765,24770,24773,24777,24782,24785,24790,24795,24800,24805,24808],[10,24705,24701],{"id":24706},"_3动作价值函数",[782,24708,24710],{"id":24709},"_31dqn","3.1.DQN",[14,24712,24713],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24715,24716],{},[25,24717],{"alt":27,"src":24718},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24720,24721],{},[25,24722],{"alt":27,"src":24723},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24725,24726],{},"DQN算法的描述：",[14,24728,24729],{},[25,24730],{"alt":27,"src":24731},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24733,24734],{},"这里的Dense指的是全连接层",[14,24736,24737],{},[25,24738],{"alt":27,"src":24739},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24741,24742],{},"当前观测的状态为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算法",[782,24744,24746],{"id":24745},"_32dqn的举例","3.2.DQN的举例",[14,24748,24749],{},[25,24750],{"alt":27,"src":24751},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24753,24754],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24756,24757],{},[25,24758],{"alt":27,"src":24759},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24761,24762],{},[25,24763],{"alt":27,"src":24764},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24766,24767],{},[25,24768],{"alt":27,"src":24769},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24771,24772],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[782,24774,24776],{"id":24775},"_33td算法","3.3.TD算法",[14,24778,24779],{},[25,24780],{"alt":27,"src":24781},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24783,24784],{},"强化学习TD算法公式的粗略解释：",[14,24786,24787],{},[25,24788],{"alt":27,"src":24789},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24791,24792],{},[25,24793],{"alt":27,"src":24794},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24796,24797],{},[25,24798],{"alt":27,"src":24799},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24801,24802],{},[25,24803],{"alt":27,"src":24804},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24806,24807],{},"TD算法总结：",[14,24809,24810],{},[25,24811],{"alt":27,"src":24812},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":27,"searchDepth":63,"depth":63,"links":24814},[24815,24816,24817],{"id":24709,"depth":63,"text":24710},{"id":24745,"depth":63,"text":24746},{"id":24775,"depth":63,"text":24776},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24701,"description":27},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24824,"title":24825,"body":24826,"description":27,"extension":766,"meta":25059,"navigation":398,"path":25060,"seo":25061,"stem":25062,"__hash__":25063},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24827,"toc":25055},[24828,24831,24835,24838,24841,24846,24851,24854,24859,24864,24867,24872,24875,24880,24883,24888,24891,24896,24899,24904,24909,24912,24917,24920,24923,24928,24931,24936,24941,24945,24948,24951,24956,24961,24964,24969,24974,24977,24982,24985,24988,24993,24996,25001,25004,25009,25014,25017,25022,25027,25030,25035,25038,25043,25046],[10,24829,24825],{"id":24830},"_4策略学习",[782,24832,24834],{"id":24833},"_41概念描述","4.1.概念描述",[14,24836,24837],{},"用神经网络（策略网络）近似策略函数",[14,24839,24840],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24842,24843],{},[25,24844],{"alt":27,"src":24845},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24847,24848],{},[25,24849],{"alt":27,"src":24850},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24852,24853],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24855,24856],{},[25,24857],{"alt":27,"src":24858},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24860,24861],{},[25,24862],{"alt":27,"src":24863},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24865,24866],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24868,24869],{},[25,24870],{"alt":27,"src":24871},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24873,24874],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24876,24877],{},[25,24878],{"alt":27,"src":24879},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24881,24882],{},"改进theta要用到策略梯度算法",[14,24884,24885],{},[25,24886],{"alt":27,"src":24887},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24889,24890],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24892,24893],{},[25,24894],{"alt":27,"src":24895},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24897,24898],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24900,24901],{},[25,24902],{"alt":27,"src":24903},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24905,24906],{},[25,24907],{"alt":27,"src":24908},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24910,24911],{},"梯度公式总结：",[14,24913,24914],{},[25,24915],{"alt":27,"src":24916},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24918,24919],{},"两个公式的分别应用场景：",[14,24921,24922],{},"对于离散的动作：",[14,24924,24925],{},[25,24926],{"alt":27,"src":24927},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24929,24930],{},"对于连续的动作：",[14,24932,24933],{},[25,24934],{"alt":27,"src":24935},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24937,24938],{},[25,24939],{"alt":27,"src":24940},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[782,24942,24944],{"id":24943},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24946,24947],{},"使用蒙特卡洛来近似计算策略梯度",[14,24949,24950],{},"蒙特卡洛法的解释如下：",[14,24952,24953],{},[25,24954],{"alt":27,"src":24955},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24957,24958],{},[25,24959],{"alt":27,"src":24960},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24962,24963],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[30,24965,24966],{},[33,24967,24968],{},"方法一：reinforce算法",[14,24970,24971],{},[25,24972],{"alt":27,"src":24973},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24975,24976],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[30,24978,24979],{"start":63},[33,24980,24981],{},"方法二：actor-critic算法",[14,24983,24984],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24986,24987],{},"两个网络的构建：",[14,24989,24990],{},[25,24991],{"alt":27,"src":24992},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24994,24995],{},"actor网路：",[14,24997,24998],{},[25,24999],{"alt":27,"src":25000},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,25002,25003],{},"critic网络",[14,25005,25006],{},[25,25007],{"alt":27,"src":25008},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[30,25010,25011],{"start":70},[33,25012,25013],{},"网络的训练",[14,25015,25016],{},"网络描述",[14,25018,25019],{},[25,25020],{"alt":27,"src":25021},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,25023,25024],{},[25,25025],{"alt":27,"src":25026},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,25028,25029],{},"TD算法更新梯度：",[14,25031,25032],{},[25,25033],{"alt":27,"src":25034},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,25036,25037],{},"策略网络更新梯度：",[14,25039,25040],{},[25,25041],{"alt":27,"src":25042},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,25044,25045],{},"训练整个流程的具体描述：",[14,25047,25048,25051,25052],{},[25,25049],{"alt":27,"src":25050},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[25,25053],{"alt":27,"src":25054},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":27,"searchDepth":63,"depth":63,"links":25056},[25057,25058],{"id":24833,"depth":63,"text":24834},{"id":24943,"depth":63,"text":24944},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24825,"description":27},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25065,"title":25066,"body":25067,"description":25074,"extension":766,"meta":25124,"navigation":398,"path":25125,"seo":25126,"stem":25127,"__hash__":25128},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25068,"toc":25120},[25069,25072,25075,25079,25082,25087,25091,25094,25099,25102,25107,25112,25115],[10,25070,25066],{"id":25071},"_5alphago算法",[14,25073,25074],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[782,25076,25078],{"id":25077},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,25080,25081],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,25083,25084],{},[25,25085],{"alt":27,"src":25086},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[782,25088,25090],{"id":25089},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,25092,25093],{},"采用强化学习的方式训练策略网络",[14,25095,25096],{},[25,25097],{"alt":27,"src":25098},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,25100,25101],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,25103,25104],{},[25,25105],{"alt":27,"src":25106},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,25108,25109],{},[25,25110],{"alt":27,"src":25111},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,25113,25114],{},"强化学习训练策略网络的总结：",[14,25116,25117],{},[25,25118],{"alt":27,"src":25119},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":27,"searchDepth":63,"depth":63,"links":25121},[25122,25123],{"id":25077,"depth":63,"text":25078},{"id":25089,"depth":63,"text":25090},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25066,"description":25074},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25130,"title":25131,"body":25132,"description":25139,"extension":766,"meta":25142,"navigation":398,"path":25143,"seo":25144,"stem":25145,"__hash__":25146},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25133,"toc":25140},[25134,25137],[10,25135,25131],{"id":25136},"_6价值网络",[14,25138,25139],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":27,"searchDepth":63,"depth":63,"links":25141},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25131,"description":25139},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25148,"title":25149,"body":25150,"description":25154,"extension":766,"meta":25155,"navigation":398,"path":25156,"seo":25157,"stem":25158,"__hash__":25159},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25151,"toc":25152},[],{"title":27,"searchDepth":63,"depth":63,"links":25153},[],"记录自己的强化学习笔记。",{"category":24074},"\u002Fwiki\u002F2025-12-04",{"title":25149,"description":25154},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25161,"title":25162,"body":25163,"description":24072,"extension":766,"meta":25202,"navigation":398,"path":25203,"seo":25204,"stem":25205,"__hash__":25206},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25164,"toc":25200},[25165,25168,25171,25177,25180,25186,25189,25194,25197],[10,25166,25162],{"id":25167},"_1-项目概览与官方资源",[14,25169,25170],{},"官方文档：",[14,25172,25173],{},[124,25174,25175],{"href":25175,"rel":25176},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[128],[14,25178,25179],{},"官方代码仓库：",[14,25181,25182],{},[124,25183,25184],{"href":25184,"rel":25185},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[128],[14,25187,25188],{},"复现大体流程：",[14,25190,25191],{},[25,25192],{"alt":27,"src":25193},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,25195,25196],{},"本教程的目标是打通这条链路：",[14,25198,25199],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":27,"searchDepth":63,"depth":63,"links":25201},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25162,"description":24072},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25208,"title":25209,"body":25210,"description":24072,"extension":766,"meta":25325,"navigation":398,"path":25326,"seo":25327,"stem":25328,"__hash__":25329},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25211,"toc":25320},[25212,25215,25219,25222,25229,25233,25236,25245,25255,25259,25288,25291,25317],[10,25213,25209],{"id":25214},"_2-环境准备与设备连接",[782,25216,25218],{"id":25217},"_21-系统与环境","2.1 系统与环境",[14,25220,25221],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,25223,25224,25225,25228],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[46,25226,25227],{},"lerobot"," 依赖。",[782,25230,25232],{"id":25231},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,25234,25235],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[40,25237,25239],{"className":42,"code":25238,"language":44,"meta":27,"style":27},"lerobot-find-out\n",[46,25240,25241],{"__ignoreMap":27},[49,25242,25243],{"class":51,"line":52},[49,25244,25238],{"class":55},[14,25246,25247,25248,1042,25251,25254],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[46,25249,25250],{},"\u002Fdev\u002FttyACM0",[46,25252,25253],{},"\u002Fdev\u002FttyACM1","）。",[782,25256,25258],{"id":25257},"_23-串口授权","2.3 串口授权",[40,25260,25262],{"className":42,"code":25261,"language":44,"meta":27,"style":27},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[46,25263,25264,25277],{"__ignoreMap":27},[49,25265,25266,25268,25271,25274],{"class":51,"line":52},[49,25267,264],{"class":55},[49,25269,25270],{"class":59}," chmod",[49,25272,25273],{"class":159}," 666",[49,25275,25276],{"class":59}," \u002Fdev\u002FttyACM0\n",[49,25278,25279,25281,25283,25285],{"class":51,"line":63},[49,25280,264],{"class":55},[49,25282,25270],{"class":59},[49,25284,25273],{"class":159},[49,25286,25287],{"class":59}," \u002Fdev\u002FttyACM1\n",[14,25289,25290],{},"说明：",[742,25292,25293,25298,25304,25314],{},[33,25294,25295,25297],{},[46,25296,264],{},"：以 root 权限执行命令。",[33,25299,25300,25303],{},[46,25301,25302],{},"chmod","：修改设备节点权限。",[33,25305,25306,25309,25310,25313],{},[46,25307,25308],{},"666","：",[46,25311,25312],{},"rw-rw-rw-","，所有用户可读写。",[33,25315,25316],{},"串口号必须替换为你机器上的真实端口。",[757,25318,25319],{},"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":27,"searchDepth":63,"depth":63,"links":25321},[25322,25323,25324],{"id":25217,"depth":63,"text":25218},{"id":25231,"depth":63,"text":25232},{"id":25257,"depth":63,"text":25258},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25209,"description":24072},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25331,"title":25332,"body":25333,"description":24072,"extension":766,"meta":25493,"navigation":398,"path":25494,"seo":25495,"stem":25496,"__hash__":25497},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25334,"toc":25489},[25335,25339,25343,25349,25352,25408,25411,25415,25418,25486],[10,25336,25338],{"id":25337},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[782,25340,25342],{"id":25341},"_31-配置电机-id","3.1 配置电机 ID",[14,25344,25345,25346,25348],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[46,25347,1047],{},"，需要改成机械臂链路里不冲突的编号。",[14,25350,25351],{},"方式一：用 LeRobot 命令逐步写入。",[40,25353,25355],{"className":42,"code":25354,"language":44,"meta":27,"style":27},"# 主臂舵机配置 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",[46,25356,25357,25362,25369,25376,25381,25385,25390,25396,25403],{"__ignoreMap":27},[49,25358,25359],{"class":51,"line":52},[49,25360,25361],{"class":66},"# 主臂舵机配置 ID\n",[49,25363,25364,25367],{"class":51,"line":63},[49,25365,25366],{"class":55},"lerobot-setup-motors",[49,25368,184],{"class":159},[49,25370,25371,25374],{"class":51,"line":70},[49,25372,25373],{"class":159},"  --teleop.type=so101_leader",[49,25375,184],{"class":159},[49,25377,25378],{"class":51,"line":219},[49,25379,25380],{"class":159},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[49,25382,25383],{"class":51,"line":233},[49,25384,399],{"emptyLinePlaceholder":398},[49,25386,25387],{"class":51,"line":241},[49,25388,25389],{"class":66},"# 从臂舵机配置 ID\n",[49,25391,25392,25394],{"class":51,"line":1920},[49,25393,25366],{"class":55},[49,25395,184],{"class":159},[49,25397,25398,25401],{"class":51,"line":2011},[49,25399,25400],{"class":159},"  --robot.type=so101_follower",[49,25402,184],{"class":159},[49,25404,25405],{"class":51,"line":2017},[49,25406,25407],{"class":159},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,25409,25410],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[782,25412,25414],{"id":25413},"_32-机械臂校准","3.2 机械臂校准",[14,25416,25417],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[40,25419,25421],{"className":42,"code":25420,"language":44,"meta":27,"style":27},"# 主臂校准\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",[46,25422,25423,25428,25435,25441,25448,25453,25457,25462,25468,25474,25481],{"__ignoreMap":27},[49,25424,25425],{"class":51,"line":52},[49,25426,25427],{"class":66},"# 主臂校准\n",[49,25429,25430,25433],{"class":51,"line":63},[49,25431,25432],{"class":55},"lerobot-calibrate",[49,25434,184],{"class":159},[49,25436,25437,25439],{"class":51,"line":70},[49,25438,25373],{"class":159},[49,25440,184],{"class":159},[49,25442,25443,25446],{"class":51,"line":219},[49,25444,25445],{"class":159},"  --teleop.port=\u002Fdev\u002FttyACM0",[49,25447,184],{"class":159},[49,25449,25450],{"class":51,"line":233},[49,25451,25452],{"class":159},"  --teleop.id=my_awesome_leader_arm\n",[49,25454,25455],{"class":51,"line":241},[49,25456,399],{"emptyLinePlaceholder":398},[49,25458,25459],{"class":51,"line":1920},[49,25460,25461],{"class":66},"# 从臂校准\n",[49,25463,25464,25466],{"class":51,"line":2011},[49,25465,25432],{"class":55},[49,25467,184],{"class":159},[49,25469,25470,25472],{"class":51,"line":2017},[49,25471,25400],{"class":159},[49,25473,184],{"class":159},[49,25475,25476,25479],{"class":51,"line":2029},[49,25477,25478],{"class":159},"  --robot.port=\u002Fdev\u002FttyACM1",[49,25480,184],{"class":159},[49,25482,25483],{"class":51,"line":2311},[49,25484,25485],{"class":159},"  --robot.id=my_awesome_follower_arm\n",[757,25487,25488],{},"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":27,"searchDepth":63,"depth":63,"links":25490},[25491,25492],{"id":25341,"depth":63,"text":25342},{"id":25413,"depth":63,"text":25414},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25332,"description":24072},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25499,"title":25500,"body":25501,"description":24072,"extension":766,"meta":25692,"navigation":398,"path":25693,"seo":25694,"stem":25695,"__hash__":25696},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25502,"toc":25688},[25503,25506,25510,25557,25561,25574,25637,25640,25685],[10,25504,25500],{"id":25505},"_4-遥操与相机接入",[782,25507,25509],{"id":25508},"_41-不带相机遥操","4.1 不带相机遥操",[40,25511,25513],{"className":42,"code":25512,"language":44,"meta":27,"style":27},"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",[46,25514,25515,25522,25528,25534,25541,25547,25553],{"__ignoreMap":27},[49,25516,25517,25520],{"class":51,"line":52},[49,25518,25519],{"class":55},"lerobot-teleoperate",[49,25521,184],{"class":159},[49,25523,25524,25526],{"class":51,"line":63},[49,25525,25400],{"class":159},[49,25527,184],{"class":159},[49,25529,25530,25532],{"class":51,"line":70},[49,25531,25478],{"class":159},[49,25533,184],{"class":159},[49,25535,25536,25539],{"class":51,"line":219},[49,25537,25538],{"class":159},"  --robot.id=my_awesome_follower_arm",[49,25540,184],{"class":159},[49,25542,25543,25545],{"class":51,"line":233},[49,25544,25373],{"class":159},[49,25546,184],{"class":159},[49,25548,25549,25551],{"class":51,"line":241},[49,25550,25445],{"class":159},[49,25552,184],{"class":159},[49,25554,25555],{"class":51,"line":1920},[49,25556,25452],{"class":159},[782,25558,25560],{"id":25559},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[40,25562,25564],{"className":42,"code":25563,"language":44,"meta":27,"style":27},"lerobot-find-cameras opencv\n",[46,25565,25566],{"__ignoreMap":27},[49,25567,25568,25571],{"class":51,"line":52},[49,25569,25570],{"class":55},"lerobot-find-cameras",[49,25572,25573],{"class":59}," opencv\n",[40,25575,25577],{"className":42,"code":25576,"language":44,"meta":27,"style":27},"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",[46,25578,25579,25585,25591,25597,25603,25613,25619,25625,25632],{"__ignoreMap":27},[49,25580,25581,25583],{"class":51,"line":52},[49,25582,25519],{"class":55},[49,25584,184],{"class":159},[49,25586,25587,25589],{"class":51,"line":63},[49,25588,25400],{"class":159},[49,25590,184],{"class":159},[49,25592,25593,25595],{"class":51,"line":70},[49,25594,25478],{"class":159},[49,25596,184],{"class":159},[49,25598,25599,25601],{"class":51,"line":219},[49,25600,25538],{"class":159},[49,25602,184],{"class":159},[49,25604,25605,25608,25611],{"class":51,"line":233},[49,25606,25607],{"class":159},"  --robot.cameras=",[49,25609,25610],{"class":59},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[49,25612,184],{"class":159},[49,25614,25615,25617],{"class":51,"line":241},[49,25616,25373],{"class":159},[49,25618,184],{"class":159},[49,25620,25621,25623],{"class":51,"line":1920},[49,25622,25445],{"class":159},[49,25624,184],{"class":159},[49,25626,25627,25630],{"class":51,"line":2011},[49,25628,25629],{"class":159},"  --teleop.id=my_awesome_leader_arm",[49,25631,184],{"class":159},[49,25633,25634],{"class":51,"line":2017},[49,25635,25636],{"class":159},"  --display_data=true\n",[14,25638,25639],{},"相机参数说明：",[742,25641,25642,25648,25654,25663,25673,25679],{},[33,25643,25644,25647],{},[46,25645,25646],{},"front","：相机名称。",[33,25649,25650,25653],{},[46,25651,25652],{},"type: opencv","：相机驱动类型。",[33,25655,25656,25659,25660,25254],{},[46,25657,25658],{},"index_or_path","：设备编号或设备路径（如 ",[46,25661,25662],{},"\u002Fdev\u002Fvideo4",[33,25664,25665,25668,25669,25672],{},[46,25666,25667],{},"width"," \u002F ",[46,25670,25671],{},"height","：图像分辨率。",[33,25674,25675,25678],{},[46,25676,25677],{},"fps","：采样帧率。",[33,25680,25681,25684],{},[46,25682,25683],{},"--display_data=true","：启用实时可视化。",[757,25686,25687],{},"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":27,"searchDepth":63,"depth":63,"links":25689},[25690,25691],{"id":25508,"depth":63,"text":25509},{"id":25559,"depth":63,"text":25560},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25500,"description":24072},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25698,"title":25699,"body":25700,"description":24072,"extension":766,"meta":25871,"navigation":398,"path":25872,"seo":25873,"stem":25874,"__hash__":25875},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25701,"toc":25866},[25702,25706,25710,25715,25720,25723,25765,25771,25775,25823,25828,25832,25835,25843,25848,25853,25858,25863],[10,25703,25705],{"id":25704},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[782,25707,25709],{"id":25708},"_51-生成访问令牌","5.1 生成访问令牌",[14,25711,25712],{},[25,25713],{"alt":27,"src":25714},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25716,25717],{},[25,25718],{"alt":27,"src":25719},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25721,25722],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[40,25724,25726],{"className":42,"code":25725,"language":44,"meta":27,"style":27},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[46,25727,25728,25741],{"__ignoreMap":27},[49,25729,25730,25733,25736,25738],{"class":51,"line":52},[49,25731,25732],{"class":77},"export",[49,25734,25735],{"class":73}," HF_TOKEN",[49,25737,78],{"class":77},[49,25739,25740],{"class":59},"\"your_huggingface_token\"\n",[49,25742,25743,25746,25749,25752,25755,25757,25760,25762],{"class":51,"line":63},[49,25744,25745],{"class":55},"hf",[49,25747,25748],{"class":59}," auth",[49,25750,25751],{"class":59}," login",[49,25753,25754],{"class":159}," --token",[49,25756,10421],{"class":59},[49,25758,25759],{"class":73},"$HF_TOKEN",[49,25761,1080],{"class":59},[49,25763,25764],{"class":159}," --add-to-git-credential\n",[14,25766,25767,25770],{},[46,25768,25769],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[782,25772,25774],{"id":25773},"_52-验证登录","5.2 验证登录",[40,25776,25778],{"className":42,"code":25777,"language":44,"meta":27,"style":27},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[46,25779,25780,25810],{"__ignoreMap":27},[49,25781,25782,25785,25787,25790,25792,25794,25797,25799,25802,25805,25808],{"class":51,"line":52},[49,25783,25784],{"class":73},"HF_USER",[49,25786,78],{"class":77},[49,25788,25789],{"class":73},"$(",[49,25791,25745],{"class":55},[49,25793,25748],{"class":59},[49,25795,25796],{"class":59}," whoami",[49,25798,166],{"class":77},[49,25800,25801],{"class":55}," head",[49,25803,25804],{"class":159}," -n",[49,25806,25807],{"class":159}," 1",[49,25809,847],{"class":73},[49,25811,25812,25815,25817,25820],{"class":51,"line":63},[49,25813,25814],{"class":159},"echo",[49,25816,10421],{"class":59},[49,25818,25819],{"class":73},"$HF_USER",[49,25821,25822],{"class":59},"\"\n",[14,25824,25825],{},[25,25826],{"alt":27,"src":25827},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[782,25829,25831],{"id":25830},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25833,25834],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[742,25836,25837,25840],{},[33,25838,25839],{},"Dataset Repo（用于上传演示数据）",[33,25841,25842],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25844,25845],{},[25,25846],{"alt":27,"src":25847},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25849,25850],{},[25,25851],{"alt":27,"src":25852},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25854,25855],{},[25,25856],{"alt":27,"src":25857},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25859,25860],{},[25,25861],{"alt":27,"src":25862},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[757,25864,25865],{},"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":27,"searchDepth":63,"depth":63,"links":25867},[25868,25869,25870],{"id":25708,"depth":63,"text":25709},{"id":25773,"depth":63,"text":25774},{"id":25830,"depth":63,"text":25831},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25699,"description":24072},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25877,"title":25878,"body":25879,"description":24072,"extension":766,"meta":26076,"navigation":398,"path":26077,"seo":26078,"stem":26079,"__hash__":26080},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25880,"toc":26071},[25881,25885,25889,25985,25993,25998,26002,26018,26021,26025,26068],[10,25882,25884],{"id":25883},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[782,25886,25888],{"id":25887},"_61-录制示教数据","6.1 录制示教数据",[40,25890,25892],{"className":42,"code":25891,"language":44,"meta":27,"style":27},"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",[46,25893,25894,25901,25907,25913,25919,25928,25934,25940,25946,25953,25963,25970,25980],{"__ignoreMap":27},[49,25895,25896,25899],{"class":51,"line":52},[49,25897,25898],{"class":55},"lerobot-record",[49,25900,184],{"class":159},[49,25902,25903,25905],{"class":51,"line":63},[49,25904,25400],{"class":159},[49,25906,184],{"class":159},[49,25908,25909,25911],{"class":51,"line":70},[49,25910,25478],{"class":159},[49,25912,184],{"class":159},[49,25914,25915,25917],{"class":51,"line":219},[49,25916,25538],{"class":159},[49,25918,184],{"class":159},[49,25920,25921,25923,25926],{"class":51,"line":233},[49,25922,25607],{"class":159},[49,25924,25925],{"class":59},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[49,25927,184],{"class":159},[49,25929,25930,25932],{"class":51,"line":241},[49,25931,25373],{"class":159},[49,25933,184],{"class":159},[49,25935,25936,25938],{"class":51,"line":1920},[49,25937,25445],{"class":159},[49,25939,184],{"class":159},[49,25941,25942,25944],{"class":51,"line":2011},[49,25943,25629],{"class":159},[49,25945,184],{"class":159},[49,25947,25948,25951],{"class":51,"line":2017},[49,25949,25950],{"class":159},"  --display_data=true",[49,25952,184],{"class":159},[49,25954,25955,25958,25961],{"class":51,"line":2029},[49,25956,25957],{"class":159},"  --dataset.repo_id=",[49,25959,25960],{"class":59},"\"Embodied-AI-6\u002Fso101_test\"",[49,25962,184],{"class":159},[49,25964,25965,25968],{"class":51,"line":2311},[49,25966,25967],{"class":159},"  --dataset.num_episodes=10",[49,25969,184],{"class":159},[49,25971,25972,25975,25978],{"class":51,"line":2316},[49,25973,25974],{"class":159},"  --dataset.single_task=",[49,25976,25977],{"class":59},"\"Grab the green cube\"",[49,25979,184],{"class":159},[49,25981,25982],{"class":51,"line":2322},[49,25983,25984],{"class":159},"  --resume=true\n",[742,25986,25987],{},[33,25988,25989,25992],{},[46,25990,25991],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25994,25995],{},[25,25996],{"alt":27,"src":25997},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[782,25999,26001],{"id":26000},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[40,26003,26005],{"className":42,"code":26004,"language":44,"meta":27,"style":27},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[46,26006,26007],{"__ignoreMap":27},[49,26008,26009,26012,26015],{"class":51,"line":52},[49,26010,26011],{"class":55},"rm",[49,26013,26014],{"class":159}," -rf",[49,26016,26017],{"class":59}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,26019,26020],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[782,26022,26024],{"id":26023},"_63-回放指定-episode","6.3 回放指定 episode",[40,26026,26028],{"className":42,"code":26027,"language":44,"meta":27,"style":27},"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",[46,26029,26030,26037,26043,26049,26055,26063],{"__ignoreMap":27},[49,26031,26032,26035],{"class":51,"line":52},[49,26033,26034],{"class":55},"lerobot-replay",[49,26036,184],{"class":159},[49,26038,26039,26041],{"class":51,"line":63},[49,26040,25400],{"class":159},[49,26042,184],{"class":159},[49,26044,26045,26047],{"class":51,"line":70},[49,26046,25478],{"class":159},[49,26048,184],{"class":159},[49,26050,26051,26053],{"class":51,"line":219},[49,26052,25538],{"class":159},[49,26054,184],{"class":159},[49,26056,26057,26059,26061],{"class":51,"line":233},[49,26058,25957],{"class":159},[49,26060,25960],{"class":59},[49,26062,184],{"class":159},[49,26064,26065],{"class":51,"line":241},[49,26066,26067],{"class":159},"  --dataset.episode=0\n",[757,26069,26070],{},"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":27,"searchDepth":63,"depth":63,"links":26072},[26073,26074,26075],{"id":25887,"depth":63,"text":25888},{"id":26000,"depth":63,"text":26001},{"id":26023,"depth":63,"text":26024},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25878,"description":24072},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26082,"title":26083,"body":26084,"description":24072,"extension":766,"meta":26212,"navigation":398,"path":26213,"seo":26214,"stem":26215,"__hash__":26216},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26085,"toc":26210},[26086,26090,26153,26156,26203,26208],[10,26087,26089],{"id":26088},"_7-act-模型训练","7. ACT 模型训练",[40,26091,26093],{"className":42,"code":26092,"language":44,"meta":27,"style":27},"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",[46,26094,26095,26102,26110,26117,26124,26131,26138,26145],{"__ignoreMap":27},[49,26096,26097,26100],{"class":51,"line":52},[49,26098,26099],{"class":55},"lerobot-train",[49,26101,184],{"class":159},[49,26103,26104,26106,26108],{"class":51,"line":63},[49,26105,25957],{"class":159},[49,26107,25960],{"class":59},[49,26109,184],{"class":159},[49,26111,26112,26115],{"class":51,"line":70},[49,26113,26114],{"class":159},"  --policy.type=act",[49,26116,184],{"class":159},[49,26118,26119,26122],{"class":51,"line":219},[49,26120,26121],{"class":159},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[49,26123,184],{"class":159},[49,26125,26126,26129],{"class":51,"line":233},[49,26127,26128],{"class":159},"  --job_name=act_so101_test",[49,26130,184],{"class":159},[49,26132,26133,26136],{"class":51,"line":241},[49,26134,26135],{"class":159},"  --policy.device=cuda",[49,26137,184],{"class":159},[49,26139,26140,26143],{"class":51,"line":1920},[49,26141,26142],{"class":159},"  --wandb.enable=false",[49,26144,184],{"class":159},[49,26146,26147,26150],{"class":51,"line":2011},[49,26148,26149],{"class":159},"  --policy.repo_id=",[49,26151,26152],{"class":59},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,26154,26155],{},"参数说明：",[742,26157,26158,26164,26170,26176,26182,26191,26197],{},[33,26159,26160,26163],{},[46,26161,26162],{},"--dataset.repo_id","：训练数据集仓库。",[33,26165,26166,26169],{},[46,26167,26168],{},"--policy.type=act","：策略模型类型为 ACT。",[33,26171,26172,26175],{},[46,26173,26174],{},"--output_dir","：本地训练输出目录。",[33,26177,26178,26181],{},[46,26179,26180],{},"--job_name","：训练任务名称。",[33,26183,26184,26187,26188,25254],{},[46,26185,26186],{},"--policy.device","：训练设备（如 ",[46,26189,26190],{},"cuda",[33,26192,26193,26196],{},[46,26194,26195],{},"--wandb.enable","：是否启用 WandB 可视化。",[33,26198,26199,26202],{},[46,26200,26201],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,26204,26205],{},[25,26206],{"alt":27,"src":26207},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[757,26209,26070],{},{"title":27,"searchDepth":63,"depth":63,"links":26211},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26083,"description":24072},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26218,"title":26219,"body":26220,"description":24072,"extension":766,"meta":26307,"navigation":398,"path":26308,"seo":26309,"stem":26310,"__hash__":26311},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26221,"toc":26305},[26222,26225,26228,26295,26303],[10,26223,26219],{"id":26224},"_8-策略部署与自动采集",[14,26226,26227],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[40,26229,26231],{"className":42,"code":26230,"language":44,"meta":27,"style":27},"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",[46,26232,26233,26239,26245,26251,26259,26265,26272,26280,26288],{"__ignoreMap":27},[49,26234,26235,26237],{"class":51,"line":52},[49,26236,25898],{"class":55},[49,26238,184],{"class":159},[49,26240,26241,26243],{"class":51,"line":63},[49,26242,25400],{"class":159},[49,26244,184],{"class":159},[49,26246,26247,26249],{"class":51,"line":70},[49,26248,25478],{"class":159},[49,26250,184],{"class":159},[49,26252,26253,26255,26257],{"class":51,"line":219},[49,26254,25607],{"class":159},[49,26256,25925],{"class":59},[49,26258,184],{"class":159},[49,26260,26261,26263],{"class":51,"line":233},[49,26262,25538],{"class":159},[49,26264,184],{"class":159},[49,26266,26267,26270],{"class":51,"line":241},[49,26268,26269],{"class":159},"  --display_data=false",[49,26271,184],{"class":159},[49,26273,26274,26276,26278],{"class":51,"line":1920},[49,26275,25957],{"class":159},[49,26277,25960],{"class":59},[49,26279,184],{"class":159},[49,26281,26282,26284,26286],{"class":51,"line":2011},[49,26283,25974],{"class":159},[49,26285,25977],{"class":59},[49,26287,184],{"class":159},[49,26289,26290,26293],{"class":51,"line":2017},[49,26291,26292],{"class":159},"  --policy.path=",[49,26294,26152],{"class":59},[742,26296,26297],{},[33,26298,26299,26302],{},[46,26300,26301],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[757,26304,26070],{},{"title":27,"searchDepth":63,"depth":63,"links":26306},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26219,"description":24072},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26313,"title":26314,"body":26315,"description":24072,"extension":766,"meta":26344,"navigation":398,"path":26345,"seo":26346,"stem":26347,"__hash__":26348},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26316,"toc":26342},[26317,26321,26324,26330,26333,26339],[10,26318,26320],{"id":26319},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,26322,26323],{},"项目地址：",[14,26325,26326],{},[124,26327,26328],{"href":26328,"rel":26329},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[128],[14,26331,26332],{},"参考教程：",[14,26334,26335],{},[124,26336,26337],{"href":26337,"rel":26338},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[128],[14,26340,26341],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":27,"searchDepth":63,"depth":63,"links":26343},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26314,"description":24072},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26350,"title":26351,"body":26352,"description":26356,"extension":766,"meta":26357,"navigation":398,"path":26358,"seo":26359,"stem":26360,"__hash__":26361},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26353,"toc":26354},[],{"title":27,"searchDepth":63,"depth":63,"links":26355},[],"act复现",{"category":24074},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26351,"description":26356},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26363,"title":26364,"body":26365,"description":27,"extension":766,"meta":26667,"navigation":398,"path":26668,"seo":26669,"stem":26670,"__hash__":26671},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26366,"toc":26659},[26367,26370,26374,26384,26391,26398,26401,26408,26411,26414,26418,26430,26434,26480,26483,26486,26489,26492,26495,26499,26537,26543,26547,26601,26606,26609,26612,26617,26620,26625,26628,26631,26635,26638,26641,26645],[10,26368,26364],{"id":26369},"_1简介",[18,26371,26373],{"id":26372},"_11什么是-docker","1.1什么是 Docker？",[14,26375,26376,26377,26380,26381],{},"Docker 是一个开源的 ",[112,26378,26379],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[112,26382,26383],{},"一次构建，到处运行。",[14,26385,26386,26387,26390],{},"“ ",[112,26388,26389],{},"一次构建，到处运行"," ”也就是说：",[30,26392,26393],{},[33,26394,26395],{},[112,26396,26397],{},"之前：",[14,26399,26400],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[30,26402,26403],{},[33,26404,26405],{},[112,26406,26407],{},"使用docker后：",[14,26409,26410],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,26412,26413],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[18,26415,26417],{"id":26416},"_12它是怎么工作的","1.2.它是怎么工作的？",[742,26419,26420,26423],{},[33,26421,26422],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[33,26424,26425,26426,26429],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[112,26427,26428],{},"无论在哪运行都一样稳定"," 。",[18,26431,26433],{"id":26432},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[610,26435,26436,26446],{},[613,26437,26438],{},[616,26439,26440,26443],{},[619,26441,26442],{"align":621},"概念",[619,26444,26445],{"align":621},"解释",[633,26447,26448,26456,26464,26472],{},[616,26449,26450,26453],{},[638,26451,26452],{"align":621},"镜像",[638,26454,26455],{"align":621},"Image，运行容器的模板，像是一个应用快照",[616,26457,26458,26461],{},[638,26459,26460],{"align":621},"容器",[638,26462,26463],{"align":621},"Container，运行中的镜像实例，有自己的文件系统、网络等",[616,26465,26466,26469],{},[638,26467,26468],{"align":621},"Dockerfile",[638,26470,26471],{"align":621},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[616,26473,26474,26477],{},[638,26475,26476],{"align":621},"仓库",[638,26478,26479],{"align":621},"Registry，存放镜像的地方，比如 Docker Hub",[14,26481,26482],{},"抽象化理解:",[14,26484,26485],{},"Docker镜像≈C++类",[14,26487,26488],{},"Docker容器≈C++类实例(即对象)",[14,26490,26491],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,26493,26494],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[18,26496,26498],{"id":26497},"_14类比理解","1.4.类比理解",[610,26500,26501,26511],{},[613,26502,26503],{},[616,26504,26505,26508],{},[619,26506,26507],{"align":621},"传统部署",[619,26509,26510],{"align":621},"Docker部署",[633,26512,26513,26521,26529],{},[616,26514,26515,26518],{},[638,26516,26517],{"align":621},"手动安装依赖、调试版本不一致问题",[638,26519,26520],{"align":621},"一次打包环境和代码",[616,26522,26523,26526],{},[638,26524,26525],{"align":621},"程序“裸奔”跑在系统上",[638,26527,26528],{"align":621},"程序“穿着容器”隔离运行",[616,26530,26531,26534],{},[638,26532,26533],{"align":621},"容易“在我电脑上能跑”",[638,26535,26536],{"align":621},"保证“无论在哪都能跑”",[14,26538,26539,26540],{},"就像快递包裹： ",[112,26541,26542],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[18,26544,26546],{"id":26545},"_15docker-的核心优势","1.5.Docker 的核心优势",[610,26548,26549,26559],{},[613,26550,26551],{},[616,26552,26553,26556],{},[619,26554,26555],{"align":621},"优势",[619,26557,26558],{"align":621},"说明",[633,26560,26561,26569,26577,26585,26593],{},[616,26562,26563,26566],{},[638,26564,26565],{"align":621},"轻量级",[638,26567,26568],{"align":621},"基于系统内核共享，启动速度快，占资源少",[616,26570,26571,26574],{},[638,26572,26573],{"align":621},"跨平台",[638,26575,26576],{"align":621},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[616,26578,26579,26582],{},[638,26580,26581],{"align":621},"易于迁移部署",[638,26583,26584],{"align":621},"应用和环境一起封装，不怕依赖不一致",[616,26586,26587,26590],{},[638,26588,26589],{"align":621},"易于版本控制",[638,26591,26592],{"align":621},"镜像版本可控，支持回滚",[616,26594,26595,26598],{},[638,26596,26597],{"align":621},"生态丰富",[638,26599,26600],{"align":621},"Docker Hub 上有成千上万的现成镜像可用",[30,26602,26603],{},[33,26604,26605],{},"在Linux上可以几乎实现无性能损失。",[14,26607,26608],{},"docker里的发行版和本机共用Linux内核。",[14,26610,26611],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[30,26613,26614],{},[33,26615,26616],{},"可以快速部署在绝大多数Linux发行版",[14,26618,26619],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[30,26621,26622],{},[33,26623,26624],{},"配置环境简单",[14,26626,26627],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26629,26630],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[30,26632,26633],{},[33,26634,26597],{},[14,26636,26637],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26639,26640],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[18,26642,26644],{"id":26643},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[742,26646,26647,26650,26653,26656],{},[33,26648,26649],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[33,26651,26652],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[33,26654,26655],{},"微服务架构：每个服务一个容器，灵活组合",[33,26657,26658],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":27,"searchDepth":63,"depth":63,"links":26660},[26661,26662,26663,26664,26665,26666],{"id":26372,"depth":70,"text":26373},{"id":26416,"depth":70,"text":26417},{"id":26432,"depth":70,"text":26433},{"id":26497,"depth":70,"text":26498},{"id":26545,"depth":70,"text":26546},{"id":26643,"depth":70,"text":26644},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26364,"description":27},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26673,"title":26674,"body":26675,"description":27,"extension":766,"meta":27395,"navigation":398,"path":27396,"seo":27397,"stem":27398,"__hash__":27399},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26676,"toc":27390},[26677,26680,26684,26687,26690,26696,26702,26706,26715,26718,26773,26776,26827,26830,26911,26914,26950,26954,26965,26977,26984,26987,27065,27068,27115,27118,27141,27145,27152,27155,27170,27176,27179,27194,27200,27203,27219,27233,27239,27259,27265,27268,27280,27286,27289,27303,27309,27312,27332,27337,27340,27343,27347,27350,27353,27356,27363,27366,27369,27372,27377,27382,27387],[10,26678,26674],{"id":26679},"_2安装docker",[18,26681,26683],{"id":26682},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26685,26686],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26688,26689],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26691,26692],{},[124,26693,26694],{"href":26694,"rel":26695},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[128],[14,26697,26698],{},[124,26699,26700],{"href":26700,"rel":26701},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[128],[130,26703,26705],{"id":26704},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26707,26708,26709,26714],{},"以下内容根据 ",[124,26710,26713],{"href":26711,"rel":26712},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[128],"官方文档"," 修改而来。",[14,26716,26717],{},"如果你过去安装过 docker，先删掉：",[40,26719,26721],{"className":42,"code":26720,"language":44,"meta":27,"style":27},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[46,26722,26723],{"__ignoreMap":27},[49,26724,26725,26727,26730,26733,26736,26739,26742,26745,26748,26751,26754,26757,26760,26762,26764,26767,26770],{"class":51,"line":52},[49,26726,3722],{"class":77},[49,26728,26729],{"class":73}," pkg ",[49,26731,26732],{"class":77},"in",[49,26734,26735],{"class":59}," docker.io",[49,26737,26738],{"class":59}," docker-doc",[49,26740,26741],{"class":59}," docker-compose",[49,26743,26744],{"class":59}," docker-compose-v2",[49,26746,26747],{"class":59}," podman-docker",[49,26749,26750],{"class":59}," containerd",[49,26752,26753],{"class":59}," runc",[49,26755,26756],{"class":73},"; ",[49,26758,26759],{"class":77},"do",[49,26761,169],{"class":55},[49,26763,246],{"class":59},[49,26765,26766],{"class":59}," remove",[49,26768,26769],{"class":73}," $pkg; ",[49,26771,26772],{"class":77},"done\n",[14,26774,26775],{},"首先安装依赖和GPG：",[40,26777,26781],{"className":26778,"code":26779,"language":26780,"meta":27,"style":27},"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",[46,26782,26783,26788,26793,26798,26803,26808,26813,26817,26822],{"__ignoreMap":27},[49,26784,26785],{"class":51,"line":52},[49,26786,26787],{},"# Add Docker's official GPG key:\n",[49,26789,26790],{"class":51,"line":63},[49,26791,26792],{},"sudo apt-get update\n",[49,26794,26795],{"class":51,"line":70},[49,26796,26797],{},"sudo apt-get install ca-certificates curl\n",[49,26799,26800],{"class":51,"line":219},[49,26801,26802],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[49,26804,26805],{"class":51,"line":233},[49,26806,26807],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[49,26809,26810],{"class":51,"line":241},[49,26811,26812],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[49,26814,26815],{"class":51,"line":1920},[49,26816,399],{"emptyLinePlaceholder":398},[49,26818,26819],{"class":51,"line":2011},[49,26820,26821],{},"# 如果上面这行报错就弄下面这行\n",[49,26823,26824],{"class":51,"line":2017},[49,26825,26826],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26828,26829],{},"信任 Docker 的 GPG 公钥并添加仓库：",[40,26831,26833],{"className":42,"code":26832,"language":44,"meta":27,"style":27},"# 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",[46,26834,26835,26840,26846,26862,26895],{"__ignoreMap":27},[49,26836,26837],{"class":51,"line":52},[49,26838,26839],{"class":66},"# Add the repository to Apt sources:\n",[49,26841,26842,26844],{"class":51,"line":63},[49,26843,25814],{"class":159},[49,26845,184],{"class":159},[49,26847,26848,26851,26854,26857,26860],{"class":51,"line":70},[49,26849,26850],{"class":59},"  \"deb [arch=$(",[49,26852,26853],{"class":55},"dpkg",[49,26855,26856],{"class":159}," --print-architecture",[49,26858,26859],{"class":59},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[49,26861,238],{"class":159},[49,26863,26864,26867,26869,26871,26874,26877,26879,26881,26884,26886,26888,26891,26893],{"class":51,"line":219},[49,26865,26866],{"class":59},"  \"",[49,26868,25789],{"class":73},[49,26870,1387],{"class":159},[49,26872,26873],{"class":59}," \u002Fetc\u002Fos-release",[49,26875,26876],{"class":73}," && ",[49,26878,25814],{"class":159},[49,26880,10421],{"class":59},[49,26882,26883],{"class":73},"$VERSION_CODENAME",[49,26885,1080],{"class":59},[49,26887,1258],{"class":73},[49,26889,26890],{"class":59},"\" stable\"",[49,26892,166],{"class":77},[49,26894,184],{"class":159},[49,26896,26897,26900,26902,26905,26908],{"class":51,"line":233},[49,26898,26899],{"class":55},"  sudo",[49,26901,225],{"class":59},[49,26903,26904],{"class":59}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[49,26906,26907],{"class":77}," >",[49,26909,26910],{"class":59}," \u002Fdev\u002Fnull\n",[14,26912,26913],{},"最后安装",[40,26915,26917],{"className":42,"code":26916,"language":44,"meta":27,"style":27},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[46,26918,26919,26927],{"__ignoreMap":27},[49,26920,26921,26923,26925],{"class":51,"line":52},[49,26922,264],{"class":55},[49,26924,246],{"class":59},[49,26926,249],{"class":59},[49,26928,26929,26931,26933,26935,26938,26941,26944,26947],{"class":51,"line":63},[49,26930,264],{"class":55},[49,26932,246],{"class":59},[49,26934,269],{"class":59},[49,26936,26937],{"class":59}," docker-ce",[49,26939,26940],{"class":59}," docker-ce-cli",[49,26942,26943],{"class":59}," containerd.io",[49,26945,26946],{"class":59}," docker-buildx-plugin",[49,26948,26949],{"class":59}," docker-compose-plugin\n",[130,26951,26953],{"id":26952},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26955,26956,26957,26960,26961,26964],{},"查看自己自己包管理工具版本（dnf是 ",[112,26958,26959],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[112,26962,26963],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[40,26966,26968],{"className":42,"code":26967,"language":44,"meta":27,"style":27},"dnf --version\n",[46,26969,26970],{"__ignoreMap":27},[49,26971,26972,26974],{"class":51,"line":52},[49,26973,475],{"class":55},[49,26975,26976],{"class":159}," --version\n",[14,26978,26708,26979,26983],{},[124,26980,26713],{"href":26981,"rel":26982},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[128]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26985,26986],{},"如果你之前安装过 docker，请先删掉",[40,26988,26990],{"className":42,"code":26989,"language":44,"meta":27,"style":27},"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",[46,26991,26992,27004,27011,27018,27025,27032,27039,27046,27053,27060],{"__ignoreMap":27},[49,26993,26994,26996,26998,27000,27002],{"class":51,"line":52},[49,26995,264],{"class":55},[49,26997,384],{"class":59},[49,26999,26766],{"class":59},[49,27001,557],{"class":59},[49,27003,184],{"class":159},[49,27005,27006,27009],{"class":51,"line":63},[49,27007,27008],{"class":59},"                  docker-client",[49,27010,184],{"class":159},[49,27012,27013,27016],{"class":51,"line":70},[49,27014,27015],{"class":59},"                  docker-client-latest",[49,27017,184],{"class":159},[49,27019,27020,27023],{"class":51,"line":219},[49,27021,27022],{"class":59},"                  docker-common",[49,27024,184],{"class":159},[49,27026,27027,27030],{"class":51,"line":233},[49,27028,27029],{"class":59},"                  docker-latest",[49,27031,184],{"class":159},[49,27033,27034,27037],{"class":51,"line":241},[49,27035,27036],{"class":59},"                  docker-latest-logrotate",[49,27038,184],{"class":159},[49,27040,27041,27044],{"class":51,"line":1920},[49,27042,27043],{"class":59},"                  docker-logrotate",[49,27045,184],{"class":159},[49,27047,27048,27051],{"class":51,"line":2011},[49,27049,27050],{"class":59},"                  docker-selinux",[49,27052,184],{"class":159},[49,27054,27055,27058],{"class":51,"line":2017},[49,27056,27057],{"class":59},"                  docker-engine-selinux",[49,27059,184],{"class":159},[49,27061,27062],{"class":51,"line":2029},[49,27063,27064],{"class":59},"                  docker-engine\n",[14,27066,27067],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[40,27069,27071],{"className":42,"code":27070,"language":44,"meta":27,"style":27},"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",[46,27072,27073,27086,27099],{"__ignoreMap":27},[49,27074,27075,27077,27079,27081,27083],{"class":51,"line":52},[49,27076,264],{"class":55},[49,27078,384],{"class":59},[49,27080,272],{"class":159},[49,27082,269],{"class":59},[49,27084,27085],{"class":59}," dnf-plugins-core\n",[49,27087,27088,27090,27092,27094,27096],{"class":51,"line":63},[49,27089,264],{"class":55},[49,27091,384],{"class":59},[49,27093,387],{"class":59},[49,27095,415],{"class":59},[49,27097,27098],{"class":159}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[49,27100,27101,27103,27106,27109,27112],{"class":51,"line":70},[49,27102,264],{"class":55},[49,27104,27105],{"class":59}," sed",[49,27107,27108],{"class":159}," -i",[49,27110,27111],{"class":59}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[49,27113,27114],{"class":59}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,27116,27117],{},"最后安装：",[40,27119,27121],{"className":42,"code":27120,"language":44,"meta":27,"style":27},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[46,27122,27123],{"__ignoreMap":27},[49,27124,27125,27127,27129,27131,27133,27135,27137,27139],{"class":51,"line":52},[49,27126,264],{"class":55},[49,27128,384],{"class":59},[49,27130,269],{"class":59},[49,27132,26937],{"class":59},[49,27134,26940],{"class":59},[49,27136,26943],{"class":59},[49,27138,26946],{"class":59},[49,27140,26949],{"class":59},[18,27142,27144],{"id":27143},"_22配置环境","2.2.配置环境",[130,27146,27148,27151],{"id":27147},"_221检查-docker-服务状态",[112,27149,27150],{},"2.2.1.检查 Docker 服务状态"," ：",[14,27153,27154],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[40,27156,27158],{"className":42,"code":27157,"language":44,"meta":27,"style":27},"systemctl status docker\n",[46,27159,27160],{"__ignoreMap":27},[49,27161,27162,27165,27168],{"class":51,"line":52},[49,27163,27164],{"class":55},"systemctl",[49,27166,27167],{"class":59}," status",[49,27169,324],{"class":59},[130,27171,27173,27151],{"id":27172},"_222启动-docker-服务",[112,27174,27175],{},"2.2.2.启动 Docker 服务",[14,27177,27178],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[40,27180,27182],{"className":42,"code":27181,"language":44,"meta":27,"style":27},"sudo systemctl start docker\n",[46,27183,27184],{"__ignoreMap":27},[49,27185,27186,27188,27190,27192],{"class":51,"line":52},[49,27187,264],{"class":55},[49,27189,318],{"class":59},[49,27191,4881],{"class":59},[49,27193,324],{"class":59},[130,27195,27197,27151],{"id":27196},"_223设置-docker-开机自启",[112,27198,27199],{},"2.2.3.设置 Docker 开机自启",[14,27201,27202],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[40,27204,27206],{"className":42,"code":27205,"language":44,"meta":27,"style":27},"sudo systemctl enable docker\n",[46,27207,27208],{"__ignoreMap":27},[49,27209,27210,27212,27214,27217],{"class":51,"line":52},[49,27211,264],{"class":55},[49,27213,318],{"class":59},[49,27215,27216],{"class":59}," enable",[49,27218,324],{"class":59},[130,27220,27222,14492,27225,14492,27230,27151],{"id":27221},"_224将用户添加到-docker-组",[112,27223,27224],{},"2.2.4.将用户添加到",[112,27226,27227],{},[46,27228,27229],{},"docker",[112,27231,27232],{},"组",[14,27234,27235,27236,27238],{},"使用以下命令将当前用户添加到 ",[46,27237,27229],{}," 组：",[40,27240,27242],{"className":42,"code":27241,"language":44,"meta":27,"style":27},"sudo usermod -aG docker $USER\n",[46,27243,27244],{"__ignoreMap":27},[49,27245,27246,27248,27251,27254,27256],{"class":51,"line":52},[49,27247,264],{"class":55},[49,27249,27250],{"class":59}," usermod",[49,27252,27253],{"class":159}," -aG",[49,27255,557],{"class":59},[49,27257,27258],{"class":73}," $USER\n",[130,27260,27262,27151],{"id":27261},"_225退出并重新登录",[112,27263,27264],{},"2.2.5.退出并重新登录",[14,27266,27267],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[40,27269,27271],{"className":42,"code":27270,"language":44,"meta":27,"style":27},"newgrp docker\n",[46,27272,27273],{"__ignoreMap":27},[49,27274,27275,27278],{"class":51,"line":52},[49,27276,27277],{"class":55},"newgrp",[49,27279,324],{"class":59},[130,27281,27283,27151],{"id":27282},"_226重新启动-docker-服务如果需要",[112,27284,27285],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,27287,27288],{},"确保 Docker 服务正在运行，可以使用以下命令：",[40,27290,27291],{"className":42,"code":27181,"language":44,"meta":27,"style":27},[46,27292,27293],{"__ignoreMap":27},[49,27294,27295,27297,27299,27301],{"class":51,"line":52},[49,27296,264],{"class":55},[49,27298,318],{"class":59},[49,27300,4881],{"class":59},[49,27302,324],{"class":59},[130,27304,27306,27151],{"id":27305},"_227重启电脑后检查-docker-服务状态",[112,27307,27308],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,27310,27311],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[40,27313,27315],{"className":42,"code":27314,"language":44,"meta":27,"style":27},"sudo reboot\nsystemctl status docker\n",[46,27316,27317,27324],{"__ignoreMap":27},[49,27318,27319,27321],{"class":51,"line":52},[49,27320,264],{"class":55},[49,27322,27323],{"class":59}," reboot\n",[49,27325,27326,27328,27330],{"class":51,"line":63},[49,27327,27164],{"class":55},[49,27329,27167],{"class":59},[49,27331,324],{"class":59},[14,27333,27334],{},[25,27335],{"alt":27,"src":27336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,27338,27339],{},"第三行显示enabled说明开机自启动成功",[14,27341,27342],{},"按q退出",[18,27344,27346],{"id":27345},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,27348,27349],{},"优先使用linux来使用docker是比较好的",[14,27351,27352],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,27354,27355],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,27357,27358,27359],{},"官方下载安装:",[124,27360,27361],{"href":27361,"rel":27362},"https:\u002F\u002Fwww.docker.com\u002F",[128],[14,27364,27365],{},"Windows的Docker显卡直通与USB直通:",[14,27367,27368],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,27370,27371],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,27373,27374],{},[25,27375],{"alt":27,"src":27376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,27378,27379],{},[25,27380],{"alt":27,"src":27381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,27383,27384],{},[25,27385],{"alt":27,"src":27386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[757,27388,27389],{},"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":27,"searchDepth":63,"depth":63,"links":27391},[27392,27393,27394],{"id":26682,"depth":70,"text":26683},{"id":27143,"depth":70,"text":27144},{"id":27345,"depth":70,"text":27346},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26674,"description":27},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":4,"title":5,"body":27401,"description":16,"extension":766,"meta":27961,"navigation":398,"path":768,"seo":27962,"stem":770,"__hash__":771},{"type":7,"value":27402,"toc":27955},[27403,27405,27407,27409,27413,27417,27419,27441,27445,27453,27455,27459,27461,27465,27469,27474,27476,27478,27480,27484,27560,27564,27580,27584,27600,27604,27618,27620,27624,27650,27654,27694,27698,27738,27744,27760,27764,27780,27784,27798,27800,27802,27804,27806,27828,27830,27834,27836,27838,27840,27845,27847,27849,27851,27897,27901,27905,27907,27921,27923,27925,27939,27941,27943,27953],[10,27404,5],{"id":12},[14,27406,16],{},[18,27408,21],{"id":20},[14,27410,27411],{},[25,27412],{"alt":27,"src":28},[30,27414,27415],{},[33,27416,35],{},[14,27418,38],{},[40,27420,27421],{"className":42,"code":43,"language":44,"meta":27,"style":27},[46,27422,27423,27429,27433],{"__ignoreMap":27},[49,27424,27425,27427],{"class":51,"line":52},[49,27426,56],{"class":55},[49,27428,60],{"class":59},[49,27430,27431],{"class":51,"line":63},[49,27432,67],{"class":66},[49,27434,27435,27437,27439],{"class":51,"line":70},[49,27436,74],{"class":73},[49,27438,78],{"class":77},[49,27440,81],{"class":59},[30,27442,27443],{"start":63},[33,27444,86],{},[40,27446,27447],{"className":42,"code":89,"language":44,"meta":27,"style":27},[46,27448,27449],{"__ignoreMap":27},[49,27450,27451],{"class":51,"line":52},[49,27452,89],{"class":55},[14,27454,98],{},[14,27456,27457],{},[25,27458],{"alt":27,"src":103},[18,27460,107],{"id":106},[14,27462,110,27463,115],{},[112,27464,114],{},[14,27466,27467],{},[25,27468],{"alt":27,"src":120},[14,27470,27471],{},[124,27472,126],{"href":126,"rel":27473},[128],[130,27475,133],{"id":132},[14,27477,136],{},[138,27479,141],{"id":140},[30,27481,27482],{},[33,27483,146],{},[40,27485,27486],{"className":42,"code":149,"language":44,"meta":27,"style":27},[46,27487,27488,27510,27526,27536,27546,27552],{"__ignoreMap":27},[49,27489,27490,27492,27494,27496,27498,27500,27502,27504,27506,27508],{"class":51,"line":52},[49,27491,156],{"class":55},[49,27493,160],{"class":159},[49,27495,163],{"class":59},[49,27497,166],{"class":77},[49,27499,169],{"class":55},[49,27501,172],{"class":59},[49,27503,175],{"class":159},[49,27505,178],{"class":159},[49,27507,181],{"class":59},[49,27509,184],{"class":159},[49,27511,27512,27514,27516,27518,27520,27522,27524],{"class":51,"line":63},[49,27513,189],{"class":73},[49,27515,156],{"class":55},[49,27517,194],{"class":159},[49,27519,197],{"class":159},[49,27521,200],{"class":59},[49,27523,166],{"class":77},[49,27525,184],{"class":159},[49,27527,27528,27530,27532,27534],{"class":51,"line":70},[49,27529,209],{"class":55},[49,27531,212],{"class":59},[49,27533,166],{"class":77},[49,27535,184],{"class":159},[49,27537,27538,27540,27542,27544],{"class":51,"line":219},[49,27539,222],{"class":55},[49,27541,225],{"class":59},[49,27543,228],{"class":59},[49,27545,184],{"class":159},[49,27547,27548,27550],{"class":51,"line":233},[49,27549,189],{"class":73},[49,27551,238],{"class":159},[49,27553,27554,27556,27558],{"class":51,"line":241},[49,27555,222],{"class":55},[49,27557,246],{"class":59},[49,27559,249],{"class":59},[30,27561,27562],{"start":63},[33,27563,254],{},[40,27565,27566],{"className":42,"code":257,"language":44,"meta":27,"style":27},[46,27567,27568],{"__ignoreMap":27},[49,27569,27570,27572,27574,27576,27578],{"class":51,"line":52},[49,27571,264],{"class":55},[49,27573,246],{"class":59},[49,27575,269],{"class":59},[49,27577,272],{"class":159},[49,27579,275],{"class":59},[30,27581,27582],{"start":70},[33,27583,280],{},[40,27585,27586],{"className":42,"code":283,"language":44,"meta":27,"style":27},[46,27587,27588],{"__ignoreMap":27},[49,27589,27590,27592,27594,27596,27598],{"class":51,"line":52},[49,27591,264],{"class":55},[49,27593,292],{"class":59},[49,27595,295],{"class":59},[49,27597,298],{"class":59},[49,27599,301],{"class":159},[30,27601,27602],{"start":219},[33,27603,306],{},[40,27605,27606],{"className":42,"code":309,"language":44,"meta":27,"style":27},[46,27607,27608],{"__ignoreMap":27},[49,27609,27610,27612,27614,27616],{"class":51,"line":52},[49,27611,264],{"class":55},[49,27613,318],{"class":59},[49,27615,321],{"class":59},[49,27617,324],{"class":59},[138,27619,328],{"id":327},[30,27621,27622],{},[33,27623,333],{},[40,27625,27626],{"className":42,"code":336,"language":44,"meta":27,"style":27},[46,27627,27628,27642],{"__ignoreMap":27},[49,27629,27630,27632,27634,27636,27638,27640],{"class":51,"line":52},[49,27631,156],{"class":55},[49,27633,194],{"class":159},[49,27635,197],{"class":159},[49,27637,349],{"class":59},[49,27639,166],{"class":77},[49,27641,184],{"class":159},[49,27643,27644,27646,27648],{"class":51,"line":63},[49,27645,264],{"class":55},[49,27647,225],{"class":59},[49,27649,362],{"class":59},[30,27651,27652],{"start":63},[33,27653,367],{},[40,27655,27656],{"className":42,"code":370,"language":44,"meta":27,"style":27},[46,27657,27658,27662,27674,27678,27682],{"__ignoreMap":27},[49,27659,27660],{"class":51,"line":52},[49,27661,377],{"class":66},[49,27663,27664,27666,27668,27670,27672],{"class":51,"line":63},[49,27665,264],{"class":55},[49,27667,384],{"class":59},[49,27669,387],{"class":59},[49,27671,390],{"class":159},[49,27673,393],{"class":59},[49,27675,27676],{"class":51,"line":70},[49,27677,399],{"emptyLinePlaceholder":398},[49,27679,27680],{"class":51,"line":219},[49,27681,404],{"class":66},[49,27683,27684,27686,27688,27690,27692],{"class":51,"line":233},[49,27685,264],{"class":55},[49,27687,384],{"class":59},[49,27689,387],{"class":59},[49,27691,415],{"class":59},[49,27693,418],{"class":159},[30,27695,27696],{"start":70},[33,27697,423],{},[40,27699,27700],{"className":42,"code":426,"language":44,"meta":27,"style":27},[46,27701,27702,27706,27718,27722,27726],{"__ignoreMap":27},[49,27703,27704],{"class":51,"line":52},[49,27705,433],{"class":66},[49,27707,27708,27710,27712,27714,27716],{"class":51,"line":63},[49,27709,264],{"class":55},[49,27711,384],{"class":59},[49,27713,269],{"class":59},[49,27715,272],{"class":159},[49,27717,446],{"class":59},[49,27719,27720],{"class":51,"line":70},[49,27721,399],{"emptyLinePlaceholder":398},[49,27723,27724],{"class":51,"line":219},[49,27725,455],{"class":66},[49,27727,27728,27730,27732,27734,27736],{"class":51,"line":233},[49,27729,264],{"class":55},[49,27731,384],{"class":59},[49,27733,269],{"class":59},[49,27735,272],{"class":159},[49,27737,446],{"class":59},[30,27739,27740],{"start":219},[33,27741,472,27742,476],{},[46,27743,475],{},[40,27745,27746],{"className":42,"code":479,"language":44,"meta":27,"style":27},[46,27747,27748],{"__ignoreMap":27},[49,27749,27750,27752,27754,27756,27758],{"class":51,"line":52},[49,27751,264],{"class":55},[49,27753,384],{"class":59},[49,27755,269],{"class":59},[49,27757,272],{"class":159},[49,27759,275],{"class":59},[30,27761,27762],{"start":233},[33,27763,498],{},[40,27765,27766],{"className":42,"code":283,"language":44,"meta":27,"style":27},[46,27767,27768],{"__ignoreMap":27},[49,27769,27770,27772,27774,27776,27778],{"class":51,"line":52},[49,27771,264],{"class":55},[49,27773,292],{"class":59},[49,27775,295],{"class":59},[49,27777,298],{"class":59},[49,27779,301],{"class":159},[30,27781,27782],{"start":241},[33,27783,519],{},[40,27785,27786],{"className":42,"code":309,"language":44,"meta":27,"style":27},[46,27787,27788],{"__ignoreMap":27},[49,27789,27790,27792,27794,27796],{"class":51,"line":52},[49,27791,264],{"class":55},[49,27793,318],{"class":59},[49,27795,321],{"class":59},[49,27797,324],{"class":59},[14,27799,536],{},[14,27801,539],{},[14,27803,542],{},[14,27805,545],{},[40,27807,27808],{"className":42,"code":548,"language":44,"meta":27,"style":27},[46,27809,27810],{"__ignoreMap":27},[49,27811,27812,27814,27816,27818,27820,27822,27824,27826],{"class":51,"line":52},[49,27813,264],{"class":55},[49,27815,557],{"class":59},[49,27817,560],{"class":59},[49,27819,563],{"class":159},[49,27821,566],{"class":159},[49,27823,569],{"class":59},[49,27825,572],{"class":59},[49,27827,575],{"class":59},[14,27829,578],{},[14,27831,27832],{},[25,27833],{"alt":27,"src":583},[18,27835,587],{"id":586},[14,27837,590],{},[14,27839,593],{},[14,27841,27842],{},[124,27843,598],{"href":598,"rel":27844},[128],[14,27846,602],{},[14,27848,605],{},[14,27850,608],{},[610,27852,27853,27865],{},[613,27854,27855],{},[616,27856,27857,27859,27861,27863],{},[619,27858,622],{"align":621},[619,27860,625],{"align":621},[619,27862,628],{"align":621},[619,27864,631],{"align":621},[633,27866,27867,27877,27887],{},[616,27868,27869,27871,27873,27875],{},[638,27870,640],{"align":621},[638,27872,643],{"align":621},[638,27874,646],{"align":621},[638,27876,649],{"align":621},[616,27878,27879,27881,27883,27885],{},[638,27880,654],{"align":621},[638,27882,657],{"align":621},[638,27884,660],{"align":621},[638,27886,663],{"align":621},[616,27888,27889,27891,27893,27895],{},[638,27890,668],{"align":621},[638,27892,671],{"align":621},[638,27894,674],{"align":621},[638,27896,677],{"align":621},[14,27898,680,27899,684],{},[46,27900,683],{},[14,27902,27903],{},[25,27904],{"alt":27,"src":689},[14,27906,692],{},[40,27908,27909],{"className":42,"code":695,"language":44,"meta":27,"style":27},[46,27910,27911,27915],{"__ignoreMap":27},[49,27912,27913],{"class":51,"line":52},[49,27914,702],{"class":66},[49,27916,27917,27919],{"class":51,"line":63},[49,27918,707],{"class":55},[49,27920,710],{"class":59},[18,27922,714],{"id":713},[14,27924,717],{},[40,27926,27927],{"className":42,"code":720,"language":44,"meta":27,"style":27},[46,27928,27929],{"__ignoreMap":27},[49,27930,27931,27933,27935,27937],{"class":51,"line":52},[49,27932,727],{"class":73},[49,27934,78],{"class":77},[49,27936,732],{"class":59},[49,27938,184],{"class":55},[14,27940,737],{},[14,27942,740],{},[742,27944,27945,27947,27949,27951],{},[33,27946,746],{},[33,27948,749],{},[33,27950,752],{},[33,27952,755],{},[757,27954,759],{},{"title":27,"searchDepth":63,"depth":63,"links":27956},[27957,27958,27959,27960],{"id":20,"depth":70,"text":21},{"id":106,"depth":70,"text":107},{"id":586,"depth":70,"text":587},{"id":713,"depth":70,"text":714},{},{"title":5,"description":16},{"id":27964,"title":27965,"body":27966,"description":27973,"extension":766,"meta":27979,"navigation":398,"path":27980,"seo":27981,"stem":27982,"__hash__":27983},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27967,"toc":27977},[27968,27971,27974],[10,27969,27965],{"id":27970},"_4dockerhub换源",[14,27972,27973],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27975,27976],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":27,"searchDepth":63,"depth":63,"links":27978},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27965,"description":27973},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27985,"title":27986,"body":27987,"description":27,"extension":766,"meta":28999,"navigation":398,"path":29000,"seo":29001,"stem":29002,"__hash__":29003},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27988,"toc":28994},[27989,27992,27996,28002,28006,28009,28349,28352,28355,28358,28363,28368,28371,28374,28377,28380,28399,28402,28413,28419,28601,28611,28627,28890,28892,28917,28932,28941,28991],[10,27990,27986],{"id":27991},"_5docker命令学习",[18,27993,27995],{"id":27994},"_51参考文档","5.1.参考文档",[14,27997,27998],{},[124,27999,28000],{"href":28000,"rel":28001},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[128],[18,28003,28005],{"id":28004},"_52常用命令","5.2.常用命令",[14,28007,28008],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[610,28010,28011,28024],{},[613,28012,28013],{},[616,28014,28015,28018,28021],{},[619,28016,28017],{"align":621},"命令",[619,28019,28020],{"align":621},"描述",[619,28022,28023],{"align":621},"示例",[633,28025,28026,28037,28048,28059,28070,28081,28092,28103,28113,28124,28135,28146,28156,28167,28178,28189,28199,28209,28219,28229,28240,28251,28262,28273,28284,28295,28305,28316,28327,28338],{},[616,28027,28028,28031,28034],{},[638,28029,28030],{"align":621},"docker run",[638,28032,28033],{"align":621},"创建并启动一个新的容器。",[638,28035,28036],{"align":621},"docker run -it ubuntu bash",[616,28038,28039,28042,28045],{},[638,28040,28041],{"align":621},"docker build",[638,28043,28044],{"align":621},"通过指定的 Dockerfile 创建一个新的镜像。",[638,28046,28047],{"align":621},"docker build -t myimage .",[616,28049,28050,28053,28056],{},[638,28051,28052],{"align":621},"docker pull",[638,28054,28055],{"align":621},"从 Docker 仓库拉取镜像。",[638,28057,28058],{"align":621},"docker pull ubuntu",[616,28060,28061,28064,28067],{},[638,28062,28063],{"align":621},"docker push",[638,28065,28066],{"align":621},"将本地镜像推送到 Docker 仓库。",[638,28068,28069],{"align":621},"docker push myimage",[616,28071,28072,28075,28078],{},[638,28073,28074],{"align":621},"docker stop",[638,28076,28077],{"align":621},"停止一个正在运行的容器。",[638,28079,28080],{"align":621},"docker stop container_id",[616,28082,28083,28086,28089],{},[638,28084,28085],{"align":621},"docker start",[638,28087,28088],{"align":621},"启动一个已经存在的容器。",[638,28090,28091],{"align":621},"docker start container_id",[616,28093,28094,28097,28100],{},[638,28095,28096],{"align":621},"docker restart",[638,28098,28099],{"align":621},"重新启动容器。",[638,28101,28102],{"align":621},"docker restart container_id",[616,28104,28105,28108,28111],{},[638,28106,28107],{"align":621},"docker ps",[638,28109,28110],{"align":621},"列出当前正在运行的容器。",[638,28112,28107],{"align":621},[616,28114,28115,28118,28121],{},[638,28116,28117],{"align":621},"docker rm",[638,28119,28120],{"align":621},"删除一个或多个停止的容器。",[638,28122,28123],{"align":621},"docker rm container_id",[616,28125,28126,28129,28132],{},[638,28127,28128],{"align":621},"docker exec",[638,28130,28131],{"align":621},"在一个正在运行的容器中执行命令。",[638,28133,28134],{"align":621},"docker exec -it container_id bash",[616,28136,28137,28140,28143],{},[638,28138,28139],{"align":621},"docker logs",[638,28141,28142],{"align":621},"查看容器的日志输出。",[638,28144,28145],{"align":621},"docker logs container_id",[616,28147,28148,28151,28154],{},[638,28149,28150],{"align":621},"docker images",[638,28152,28153],{"align":621},"列出本地所有镜像。",[638,28155,28150],{"align":621},[616,28157,28158,28161,28164],{},[638,28159,28160],{"align":621},"docker rmi",[638,28162,28163],{"align":621},"删除一个或多个镜像。",[638,28165,28166],{"align":621},"docker rmi myimage",[616,28168,28169,28172,28175],{},[638,28170,28171],{"align":621},"docker network",[638,28173,28174],{"align":621},"管理 Docker 网络。",[638,28176,28177],{"align":621},"docker network ls",[616,28179,28180,28183,28186],{},[638,28181,28182],{"align":621},"docker volume",[638,28184,28185],{"align":621},"管理 Docker 数据卷。",[638,28187,28188],{"align":621},"docker volume ls",[616,28190,28191,28194,28197],{},[638,28192,28193],{"align":621},"docker-compose up",[638,28195,28196],{"align":621},"启动 docker-compose.yml 中定义的所有服务。",[638,28198,28193],{"align":621},[616,28200,28201,28204,28207],{},[638,28202,28203],{"align":621},"docker-compose down",[638,28205,28206],{"align":621},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[638,28208,28203],{"align":621},[616,28210,28211,28214,28217],{},[638,28212,28213],{"align":621},"docker info",[638,28215,28216],{"align":621},"显示 Docker 系统的详细信息。",[638,28218,28213],{"align":621},[616,28220,28221,28224,28227],{},[638,28222,28223],{"align":621},"docker stats",[638,28225,28226],{"align":621},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[638,28228,28223],{"align":621},[616,28230,28231,28234,28237],{},[638,28232,28233],{"align":621},"docker inspect",[638,28235,28236],{"align":621},"查看容器或镜像的详细信息（JSON 格式）。",[638,28238,28239],{"align":621},"docker inspect container_id",[616,28241,28242,28245,28248],{},[638,28243,28244],{"align":621},"docker save",[638,28246,28247],{"align":621},"将一个镜像保存为 tar 文件。",[638,28249,28250],{"align":621},"docker save -o myimage.tar myimage",[616,28252,28253,28256,28259],{},[638,28254,28255],{"align":621},"docker load",[638,28257,28258],{"align":621},"从 tar 文件中加载镜像。",[638,28260,28261],{"align":621},"docker load -i myimage.tar",[616,28263,28264,28267,28270],{},[638,28265,28266],{"align":621},"docker tag",[638,28268,28269],{"align":621},"为镜像添加标签（tag）。",[638,28271,28272],{"align":621},"docker tag myimage myimage:v1",[616,28274,28275,28278,28281],{},[638,28276,28277],{"align":621},"docker buildx build",[638,28279,28280],{"align":621},"使用 Buildx 构建多架构镜像。",[638,28282,28283],{"align":621},"docker buildx build -t myimage .",[616,28285,28286,28289,28292],{},[638,28287,28288],{"align":621},"docker buildx create",[638,28290,28291],{"align":621},"创建一个新的 Buildx 构建实例。",[638,28293,28294],{"align":621},"docker buildx create –use",[616,28296,28297,28300,28303],{},[638,28298,28299],{"align":621},"docker buildx ls",[638,28301,28302],{"align":621},"列出所有可用的 Buildx 构建实例。",[638,28304,28299],{"align":621},[616,28306,28307,28310,28313],{},[638,28308,28309],{"align":621},"docker buildx use",[638,28311,28312],{"align":621},"设置当前的 Buildx 构建实例。",[638,28314,28315],{"align":621},"docker buildx use mybuilder",[616,28317,28318,28321,28324],{},[638,28319,28320],{"align":621},"docker buildx bake",[638,28322,28323],{"align":621},"使用 Bake 文件批量构建镜像。",[638,28325,28326],{"align":621},"docker buildx bake -f bake.hcl",[616,28328,28329,28332,28335],{},[638,28330,28331],{"align":621},"docker buildx build –push",[638,28333,28334],{"align":621},"构建镜像并推送到镜像仓库。",[638,28336,28337],{"align":621},"docker buildx build –push -t myimage .",[616,28339,28340,28343,28346],{},[638,28341,28342],{"align":621},"docker buildx build –platform",[638,28344,28345],{"align":621},"构建镜像并为多个平台生成支持。",[638,28347,28348],{"align":621},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,28350,28351],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,28353,28354],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,28356,28357],{},"docker images 可以查看已经下载的镜像",[14,28359,28360],{},[25,28361],{"alt":27,"src":28362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,28364,28365],{},[112,28366,28367],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,28369,28370],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,28372,28373],{},"docker container logs 查看容器日志",[14,28375,28376],{},"docker top 查看容器里的进程",[14,28378,28379],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[40,28381,28383],{"className":42,"code":28382,"language":44,"meta":27,"style":27},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[46,28384,28385],{"__ignoreMap":27},[49,28386,28387,28390,28393,28396],{"class":51,"line":52},[49,28388,28389],{"class":55},"如：docker",[49,28391,28392],{"class":59}," cp",[49,28394,28395],{"class":59}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[49,28397,28398],{"class":59}," \u002Fmydata\u002Fnginx\n",[14,28400,28401],{},"docker run时在启动容器的时候会有几个常用的选项：",[742,28403,28404,28407,28410],{},[33,28405,28406],{},"-d选项：表示后台运行",[33,28408,28409],{},"-P选项：随机端口映射",[33,28411,28412],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[18,28414,28416],{"id":28415},"_53run命令的参数非常重要",[112,28417,28418],{},"5.3.run命令的参数（非常重要）",[610,28420,28421,28434],{},[613,28422,28423],{},[616,28424,28425,28428,28431],{},[619,28426,28427],{"align":621},"参数\u002F配置",[619,28429,28430],{"align":621},"功能说明",[619,28432,28433],{"align":621},"重要性与参考依据",[633,28435,28436,28447,28458,28469,28480,28491,28502,28513,28524,28535,28546,28557,28568,28579,28590],{},[616,28437,28438,28441,28444],{},[638,28439,28440],{"align":621},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[638,28442,28443],{"align":621},"指定容器名称，便于后续管理",[638,28445,28446],{"align":621},"替代随机生成的容器名。",[616,28448,28449,28452,28455],{},[638,28450,28451],{"align":621},"–gpus all",[638,28453,28454],{"align":621},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[638,28456,28457],{"align":621},"用于CUDA加速等GPU依赖任务。",[616,28459,28460,28463,28466],{},[638,28461,28462],{"align":621},"-e NVIDIA_DRIVER_CAPABILITIES=all",[638,28464,28465],{"align":621},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[638,28467,28468],{"align":621},"确保容器内GPU功能完整67。",[616,28470,28471,28474,28477],{},[638,28472,28473],{"align":621},"-dit",[638,28475,28476],{"align":621},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[638,28478,28479],{"align":621},"允许容器在后台运行并支持交互操作。",[616,28481,28482,28485,28488],{},[638,28483,28484],{"align":621},"–privileged",[638,28486,28487],{"align":621},"赋予容器完全主机权限（可访问设备、内核模块等）",[638,28489,28490],{"align":621},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[616,28492,28493,28496,28499],{},[638,28494,28495],{"align":621},"–net=host",[638,28497,28498],{"align":621},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[638,28500,28501],{"align":621},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[616,28503,28504,28507,28510],{},[638,28505,28506],{"align":621},"–group-add audio–group-add video–group-add dialout",[638,28508,28509],{"align":621},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[638,28511,28512],{"align":621},"避免权限问题（如避免无法调用摄像头、麦克风）。",[616,28514,28515,28518,28521],{},[638,28516,28517],{"align":621},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[638,28519,28520],{"align":621},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[638,28522,28523],{"align":621},"支持容器内运行图形界面应用（如OpenCV可视化）。",[616,28525,28526,28529,28532],{},[638,28527,28528],{"align":621},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[638,28530,28531],{"align":621},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[638,28533,28534],{"align":621},"实现容器内图形显示。",[616,28536,28537,28540,28543],{},[638,28538,28539],{"align":621},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[638,28541,28542],{"align":621},"挂载X11认证文件（只读）",[638,28544,28545],{"align":621},"确保容器有权连接宿主机显示服务。",[616,28547,28548,28551,28554],{},[638,28549,28550],{"align":621},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[638,28552,28553],{"align":621},"挂载Wayland显示协议相关目录",[638,28555,28556],{"align":621},"支持Wayland协议的图形显示。",[616,28558,28559,28562,28565],{},[638,28560,28561],{"align":621},"–ulimit nofile=1024:524288",[638,28563,28564],{"align":621},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[638,28566,28567],{"align":621},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[616,28569,28570,28573,28576],{},[638,28571,28572],{"align":621},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[638,28574,28575],{"align":621},"挂载宿主机用户目录到容器内同名路径",[638,28577,28578],{"align":621},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[616,28580,28581,28584,28587],{},[638,28582,28583],{"align":621},"-w \u002Fhome\u002Ftungchiahui",[638,28585,28586],{"align":621},"设置容器启动后的默认工作目录",[638,28588,28589],{"align":621},"直接进入项目路径，方便执行命令2324。",[616,28591,28592,28595,28598],{},[638,28593,28594],{"align":621},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[638,28596,28597],{"align":621},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[638,28599,28600],{"align":621},"提供预配置的深度学习与机器人开发环境。",[14,28602,28603,28604,28606,28607,28610],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[46,28605,264],{},"加不加",[46,28608,28609],{},"sudo -E","都无所谓。",[14,28612,28613,28614,28616,28617,28619,28620,28623,28624,28626],{},"用户已经被加到docker组了，不用",[46,28615,264],{},"也行跑，其次，",[46,28618,264],{},"运行的话，你的",[46,28621,28622],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[46,28625,28622],{},"更不可能变了。",[40,28628,28630],{"className":42,"code":28629,"language":44,"meta":27,"style":27},"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",[46,28631,28632,28645,28655,28665,28677,28684,28691,28698,28708,28717,28726,28740,28752,28764,28773,28783,28792,28807,28840,28867,28878,28885],{"__ignoreMap":27},[49,28633,28634,28636,28638,28640,28643],{"class":51,"line":52},[49,28635,264],{"class":55},[49,28637,557],{"class":59},[49,28639,560],{"class":59},[49,28641,28642],{"class":159}," --name=ros_opencv_cuda",[49,28644,184],{"class":159},[49,28646,28647,28650,28653],{"class":51,"line":63},[49,28648,28649],{"class":73},"--gpus ",[49,28651,28652],{"class":59},"all",[49,28654,184],{"class":159},[49,28656,28657,28660,28663],{"class":51,"line":70},[49,28658,28659],{"class":73},"-e ",[49,28661,28662],{"class":59},"NVIDIA_DRIVER_CAPABILITIES=all",[49,28664,184],{"class":159},[49,28666,28667,28669,28672,28675],{"class":51,"line":219},[49,28668,28659],{"class":73},[49,28670,28671],{"class":59},"DISPLAY=",[49,28673,28674],{"class":73},"$DISPLAY ",[49,28676,238],{"class":159},[49,28678,28679,28682],{"class":51,"line":233},[49,28680,28681],{"class":73},"-dit ",[49,28683,238],{"class":159},[49,28685,28686,28689],{"class":51,"line":241},[49,28687,28688],{"class":73},"--privileged ",[49,28690,238],{"class":159},[49,28692,28693,28696],{"class":51,"line":1920},[49,28694,28695],{"class":73},"--net=host ",[49,28697,238],{"class":159},[49,28699,28700,28703,28706],{"class":51,"line":2011},[49,28701,28702],{"class":73},"--group-add ",[49,28704,28705],{"class":59},"audio",[49,28707,184],{"class":159},[49,28709,28710,28712,28715],{"class":51,"line":2017},[49,28711,28702],{"class":73},[49,28713,28714],{"class":59},"video",[49,28716,184],{"class":159},[49,28718,28719,28721,28724],{"class":51,"line":2029},[49,28720,28702],{"class":73},[49,28722,28723],{"class":59},"dialout",[49,28725,184],{"class":159},[49,28727,28728,28730,28733,28735,28738],{"class":51,"line":2311},[49,28729,28659],{"class":73},[49,28731,28732],{"class":59},"XAUTHORITY=",[49,28734,28622],{"class":73},[49,28736,28737],{"class":59},"\u002F.Xauthority",[49,28739,184],{"class":159},[49,28741,28742,28744,28747,28750],{"class":51,"line":2316},[49,28743,28659],{"class":73},[49,28745,28746],{"class":59},"WAYLAND_DISPLAY=",[49,28748,28749],{"class":73},"$WAYLAND_DISPLAY ",[49,28751,238],{"class":159},[49,28753,28754,28756,28759,28762],{"class":51,"line":2322},[49,28755,28659],{"class":73},[49,28757,28758],{"class":59},"XDG_RUNTIME_DIR=",[49,28760,28761],{"class":73},"$XDG_RUNTIME_DIR ",[49,28763,238],{"class":159},[49,28765,28766,28768,28771],{"class":51,"line":2327},[49,28767,28659],{"class":73},[49,28769,28770],{"class":59},"QT_QPA_PLATFORM=xcb",[49,28772,184],{"class":159},[49,28774,28775,28778,28781],{"class":51,"line":2341},[49,28776,28777],{"class":73},"-v ",[49,28779,28780],{"class":59},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[49,28782,184],{"class":159},[49,28784,28785,28787,28790],{"class":51,"line":2346},[49,28786,28777],{"class":73},[49,28788,28789],{"class":59},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[49,28791,184],{"class":159},[49,28793,28794,28797,28800,28802,28805],{"class":51,"line":2352},[49,28795,28796],{"class":73},"-v $HOME",[49,28798,28799],{"class":59},"\u002F.Xauthority:",[49,28801,28622],{"class":73},[49,28803,28804],{"class":59},"\u002F.Xauthority:ro",[49,28806,184],{"class":159},[49,28808,28809,28811,28814,28816,28819,28822,28824,28827,28829,28831,28833,28835,28838],{"class":51,"line":2373},[49,28810,28777],{"class":73},[49,28812,28813],{"class":59},"\u002Frun\u002Fuser\u002F",[49,28815,25789],{"class":73},[49,28817,28818],{"class":55},"id",[49,28820,28821],{"class":159}," -u",[49,28823,1258],{"class":73},[49,28825,28826],{"class":59},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[49,28828,25789],{"class":73},[49,28830,28818],{"class":55},[49,28832,28821],{"class":159},[49,28834,1258],{"class":73},[49,28836,28837],{"class":59},"\u002Fwayland-0",[49,28839,184],{"class":159},[49,28841,28842,28844,28846,28848,28850,28852,28854,28857,28859,28861,28863,28865],{"class":51,"line":2378},[49,28843,28777],{"class":73},[49,28845,28813],{"class":59},[49,28847,25789],{"class":73},[49,28849,28818],{"class":55},[49,28851,28821],{"class":159},[49,28853,1258],{"class":73},[49,28855,28856],{"class":59},":\u002Frun\u002Fuser\u002F",[49,28858,25789],{"class":73},[49,28860,28818],{"class":55},[49,28862,28821],{"class":159},[49,28864,14411],{"class":73},[49,28866,238],{"class":159},[49,28868,28869,28871,28873,28876],{"class":51,"line":2392},[49,28870,28796],{"class":73},[49,28872,1688],{"class":59},[49,28874,28875],{"class":73},"$HOME ",[49,28877,238],{"class":159},[49,28879,28880,28883],{"class":51,"line":2397},[49,28881,28882],{"class":73},"-w $HOME ",[49,28884,238],{"class":159},[49,28886,28887],{"class":51,"line":2426},[49,28888,28889],{"class":73},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28891,9722],{},[30,28893,28894,28902,28905,28908],{},[33,28895,28896,14492,28898,28901],{},[46,28897,28662],{},[46,28899,28900],{},"--gpus all","没有英伟达显卡请注释。",[33,28903,28904],{},"--name后面请自己为容器起名。",[33,28906,28907],{},"最后一行仓库名称请你自己找对应的镜像填上。",[33,28909,28910,28911,28916],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24249,28912,28913],{},[112,28914,28915],{},"请不要加","。",[40,28918,28920],{"className":42,"code":28919,"language":44,"meta":27,"style":27},"--ulimit nofile=1024:524288 \\\n",[46,28921,28922],{"__ignoreMap":27},[49,28923,28924,28927,28930],{"class":51,"line":52},[49,28925,28926],{"class":55},"--ulimit",[49,28928,28929],{"class":59}," nofile=1024:524288",[49,28931,184],{"class":159},[14,28933,28934,28935,28940],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24249,28936,28937],{},[112,28938,28939],{},"不建议","**.**",[40,28942,28944],{"className":42,"code":28943,"language":44,"meta":27,"style":27},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[46,28945,28946,28973,28982],{"__ignoreMap":27},[49,28947,28948,28951,28954,28956,28958,28960,28962,28964,28966,28969,28971],{"class":51,"line":52},[49,28949,28950],{"class":55},"--user",[49,28952,28953],{"class":73}," $(",[49,28955,28818],{"class":55},[49,28957,28821],{"class":159},[49,28959,1258],{"class":73},[49,28961,1688],{"class":59},[49,28963,25789],{"class":73},[49,28965,28818],{"class":55},[49,28967,28968],{"class":159}," -g",[49,28970,14411],{"class":73},[49,28972,238],{"class":159},[49,28974,28975,28977,28980],{"class":51,"line":63},[49,28976,28777],{"class":73},[49,28978,28979],{"class":59},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[49,28981,184],{"class":159},[49,28983,28984,28986,28989],{"class":51,"line":70},[49,28985,28777],{"class":73},[49,28987,28988],{"class":59},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[49,28990,184],{"class":159},[757,28992,28993],{},"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":27,"searchDepth":63,"depth":63,"links":28995},[28996,28997,28998],{"id":27994,"depth":70,"text":27995},{"id":28004,"depth":70,"text":28005},{"id":28415,"depth":70,"text":28418},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27986,"description":27},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29005,"title":29006,"body":29007,"description":27,"extension":766,"meta":30630,"navigation":398,"path":30631,"seo":30632,"stem":30633,"__hash__":30634},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29008,"toc":30625},[29009,29012,29016,29019,29241,29245,29249,29252,29358,29363,29366,29371,29374,29379,29382,29387,29390,29402,29405,29410,29417,29445,29452,29528,29533,29536,29559,29561,29636,29641,29644,29648,29656,29661,29666,29670,29681,29687,29690,29693,29717,29720,29723,29751,29754,29757,30222,30225,30230,30235,30239,30262,30267,30271,30275,30278,30281,30284,30311,30314,30317,30335,30338,30341,30363,30371,30376,30381,30385,30388,30391,30394,30397,30442,30445,30463,30466,30471,30474,30495,30498,30554,30557,30562,30566,30569,30576,30579,30582,30587,30590,30606,30609,30622],[10,29010,29006],{"id":29011},"_6手动创建docker镜像",[18,29013,29015],{"id":29014},"_61dockerfile","6.1.DockerFile",[14,29017,29018],{},"常用命令：",[610,29020,29021,29032],{},[613,29022,29023],{},[616,29024,29025,29028,29030],{},[619,29026,29027],{"align":621},"指令",[619,29029,26558],{"align":621},[619,29031,28023],{"align":621},[633,29033,29034,29044,29060,29071,29082,29093,29104,29115,29126,29140,29154,29165,29179,29190,29201,29215,29230],{},[616,29035,29036,29038,29041],{},[638,29037,707],{"align":621},[638,29039,29040],{"align":621},"指定基础镜像，是 Dockerfile 的起点",[638,29042,29043],{"align":621},"FROM ubuntu:22.04",[616,29045,29046,29049,29052],{},[638,29047,29048],{"align":621},"LABEL",[638,29050,29051],{"align":621},"添加元数据（如作者、版本等）",[638,29053,29054,29055,29059],{"align":621},"LABEL maintainer=”",[124,29056,29058],{"href":29057},"mailto:you@example.com","you@example.com","”",[616,29061,29062,29065,29068],{},[638,29063,29064],{"align":621},"ENV",[638,29066,29067],{"align":621},"设置环境变量",[638,29069,29070],{"align":621},"ENV PORT=8080",[616,29072,29073,29076,29079],{},[638,29074,29075],{"align":621},"ARG",[638,29077,29078],{"align":621},"构建参数，只在构建期间可用",[638,29080,29081],{"align":621},"ARG VERSION=1.0",[616,29083,29084,29087,29090],{},[638,29085,29086],{"align":621},"RUN",[638,29088,29089],{"align":621},"构建镜像时运行命令",[638,29091,29092],{"align":621},"RUN apt-get update && apt-get install -y curl",[616,29094,29095,29098,29101],{},[638,29096,29097],{"align":621},"COPY",[638,29099,29100],{"align":621},"复制文件到镜像中",[638,29102,29103],{"align":621},"COPY . \u002Fapp",[616,29105,29106,29109,29112],{},[638,29107,29108],{"align":621},"ADD",[638,29110,29111],{"align":621},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[638,29113,29114],{"align":621},"ADD archive.tar.gz \u002Fdata\u002F",[616,29116,29117,29120,29123],{},[638,29118,29119],{"align":621},"WORKDIR",[638,29121,29122],{"align":621},"设置工作目录",[638,29124,29125],{"align":621},"WORKDIR \u002Fopt",[616,29127,29128,29131,29134],{},[638,29129,29130],{"align":621},"CMD",[638,29132,29133],{"align":621},"设置容器启动时默认命令（可被 docker run 覆盖）",[638,29135,29136,29137],{"align":621},"CMD ",[49,29138,29139],{},"“node”, “index.js”",[616,29141,29142,29145,29148],{},[638,29143,29144],{"align":621},"ENTRYPOINT",[638,29146,29147],{"align":621},"设置容器启动时固定命令（通常用于 CLI 工具等）",[638,29149,29150,29151],{"align":621},"ENTRYPOINT ",[49,29152,29153],{},"“python3”",[616,29155,29156,29159,29162],{},[638,29157,29158],{"align":621},"EXPOSE",[638,29160,29161],{"align":621},"声明镜像内服务监听的端口（不会自动映射）",[638,29163,29164],{"align":621},"EXPOSE 80",[616,29166,29167,29170,29173],{},[638,29168,29169],{"align":621},"VOLUME",[638,29171,29172],{"align":621},"声明数据卷挂载点",[638,29174,29175,29176],{"align":621},"VOLUME ",[49,29177,29178],{},"“\u002Fdata”",[616,29180,29181,29184,29187],{},[638,29182,29183],{"align":621},"USER",[638,29185,29186],{"align":621},"设置后续命令执行的用户",[638,29188,29189],{"align":621},"USER appuser",[616,29191,29192,29195,29198],{},[638,29193,29194],{"align":621},"ONBUILD",[638,29196,29197],{"align":621},"当镜像作为其他镜像基础镜像时触发的构建指令",[638,29199,29200],{"align":621},"ONBUILD COPY . \u002Fsrc",[616,29202,29203,29206,29209],{},[638,29204,29205],{"align":621},"SHELL",[638,29207,29208],{"align":621},"更改默认 shell，比如将 sh -c 改为 bash -c",[638,29210,29211,29212],{"align":621},"SHELL ",[49,29213,29214],{},"“\u002Fbin\u002Fbash”, “-c”",[616,29216,29217,29220,29223],{},[638,29218,29219],{"align":621},"HEALTHCHECK",[638,29221,29222],{"align":621},"定义容器运行时的健康检查命令",[638,29224,29225,29226],{"align":621},"`HEALTHCHECK CMD curl –fail ",[124,29227,29228],{"href":29228,"rel":29229},"http:\u002F\u002Flocalhost:8080",[128],[616,29231,29232,29235,29238],{},[638,29233,29234],{"align":621},"STOPSIGNAL",[638,29236,29237],{"align":621},"容器停止时发送的信号",[638,29239,29240],{"align":621},"STOPSIGNAL SIGKILL",[18,29242,29244],{"id":29243},"_62自己创建容器","6.2.自己创建容器",[130,29246,29248],{"id":29247},"_621手动创建","6.2.1.手动创建",[14,29250,29251],{},"在x86电脑上编译x86的：",[40,29253,29255],{"className":42,"code":29254,"language":44,"meta":27,"style":27},"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",[46,29256,29257,29273,29277,29290,29294,29307,29311,29324,29328,29341,29345],{"__ignoreMap":27},[49,29258,29259,29261,29264,29267,29270],{"class":51,"line":52},[49,29260,27229],{"class":55},[49,29262,29263],{"class":59}," build",[49,29265,29266],{"class":159}," -t",[49,29268,29269],{"class":59}," ros-melodic-cuda118-cudnn8-bionic:latest",[49,29271,29272],{"class":59}," .\n",[49,29274,29275],{"class":51,"line":63},[49,29276,399],{"emptyLinePlaceholder":398},[49,29278,29279,29281,29283,29285,29288],{"class":51,"line":70},[49,29280,27229],{"class":55},[49,29282,29263],{"class":59},[49,29284,29266],{"class":159},[49,29286,29287],{"class":59}," ros-noetic-focal:latest",[49,29289,29272],{"class":59},[49,29291,29292],{"class":51,"line":219},[49,29293,399],{"emptyLinePlaceholder":398},[49,29295,29296,29298,29300,29302,29305],{"class":51,"line":233},[49,29297,27229],{"class":55},[49,29299,29263],{"class":59},[49,29301,29266],{"class":159},[49,29303,29304],{"class":59}," ros-humble-jammy:latest",[49,29306,29272],{"class":59},[49,29308,29309],{"class":51,"line":241},[49,29310,399],{"emptyLinePlaceholder":398},[49,29312,29313,29315,29317,29319,29322],{"class":51,"line":1920},[49,29314,27229],{"class":55},[49,29316,29263],{"class":59},[49,29318,29266],{"class":159},[49,29320,29321],{"class":59}," ros-jazzy-noble:latest",[49,29323,29272],{"class":59},[49,29325,29326],{"class":51,"line":2011},[49,29327,399],{"emptyLinePlaceholder":398},[49,29329,29330,29332,29334,29336,29339],{"class":51,"line":2017},[49,29331,27229],{"class":55},[49,29333,29263],{"class":59},[49,29335,29266],{"class":159},[49,29337,29338],{"class":59}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[49,29340,29272],{"class":59},[49,29342,29343],{"class":51,"line":2029},[49,29344,399],{"emptyLinePlaceholder":398},[49,29346,29347,29349,29351,29353,29356],{"class":51,"line":2311},[49,29348,27229],{"class":55},[49,29350,29263],{"class":59},[49,29352,29266],{"class":159},[49,29354,29355],{"class":59}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[49,29357,29272],{"class":59},[14,29359,29360],{},[25,29361],{"alt":27,"src":29362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,29364,29365],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,29367,29368],{},[25,29369],{"alt":27,"src":29370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,29372,29373],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[30,29375,29376],{},[33,29377,29378],{},"创建 Docker Hub 账户",[14,29380,29381],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[30,29383,29384],{"start":63},[33,29385,29386],{},"登录 Docker Hub",[14,29388,29389],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[40,29391,29393],{"className":42,"code":29392,"language":44,"meta":27,"style":27},"docker login\n",[46,29394,29395],{"__ignoreMap":27},[49,29396,29397,29399],{"class":51,"line":52},[49,29398,27229],{"class":55},[49,29400,29401],{"class":59}," login\n",[14,29403,29404],{},"输入你的 Docker Hub 用户名和密码进行验证。",[30,29406,29407],{},[33,29408,29409],{},"为你的镜像打标签",[14,29411,29412,29413,29416],{},"Docker Hub 使用 ",[46,29414,29415],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[40,29418,29420],{"className":42,"code":29419,"language":44,"meta":27,"style":27},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[46,29421,29422],{"__ignoreMap":27},[49,29423,29424,29426,29429,29431,29434,29437,29440,29442],{"class":51,"line":52},[49,29425,27229],{"class":55},[49,29427,29428],{"class":59}," tag",[49,29430,29321],{"class":59},[49,29432,29433],{"class":77}," \u003C",[49,29435,29436],{"class":59},"你的用户",[49,29438,29439],{"class":73},"名",[49,29441,1789],{"class":77},[49,29443,29444],{"class":59},"\u002Fros-jazzy-noble:latest\n",[14,29446,29447,29448,29451],{},"例如，如果你的 Docker Hub 用户名是 ",[46,29449,29450],{},"tungchiahui","，你应该执行：",[40,29453,29455],{"className":42,"code":29454,"language":44,"meta":27,"style":27},"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",[46,29456,29457,29468,29472,29483,29487,29498,29502,29513,29517],{"__ignoreMap":27},[49,29458,29459,29461,29463,29465],{"class":51,"line":52},[49,29460,27229],{"class":55},[49,29462,29428],{"class":59},[49,29464,29287],{"class":59},[49,29466,29467],{"class":59}," tungchiahui\u002Fros-noetic-focal:latest\n",[49,29469,29470],{"class":51,"line":63},[49,29471,399],{"emptyLinePlaceholder":398},[49,29473,29474,29476,29478,29480],{"class":51,"line":70},[49,29475,27229],{"class":55},[49,29477,29428],{"class":59},[49,29479,29304],{"class":59},[49,29481,29482],{"class":59}," tungchiahui\u002Fros-humble-jammy:latest\n",[49,29484,29485],{"class":51,"line":219},[49,29486,399],{"emptyLinePlaceholder":398},[49,29488,29489,29491,29493,29495],{"class":51,"line":233},[49,29490,27229],{"class":55},[49,29492,29428],{"class":59},[49,29494,29321],{"class":59},[49,29496,29497],{"class":59}," tungchiahui\u002Fros-jazzy-noble:latest\n",[49,29499,29500],{"class":51,"line":241},[49,29501,399],{"emptyLinePlaceholder":398},[49,29503,29504,29506,29508,29510],{"class":51,"line":1920},[49,29505,27229],{"class":55},[49,29507,29428],{"class":59},[49,29509,29338],{"class":59},[49,29511,29512],{"class":59}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[49,29514,29515],{"class":51,"line":2011},[49,29516,399],{"emptyLinePlaceholder":398},[49,29518,29519,29521,29523,29525],{"class":51,"line":2017},[49,29520,27229],{"class":55},[49,29522,29428],{"class":59},[49,29524,29355],{"class":59},[49,29526,29527],{"class":59}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[30,29529,29530],{"start":63},[33,29531,29532],{},"推送镜像到 Docker Hub",[14,29534,29535],{},"使用以下命令将镜像推送到 Docker Hub：",[40,29537,29539],{"className":42,"code":29538,"language":44,"meta":27,"style":27},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[46,29540,29541],{"__ignoreMap":27},[49,29542,29543,29545,29548,29550,29552,29554,29556],{"class":51,"line":52},[49,29544,27229],{"class":55},[49,29546,29547],{"class":59}," push",[49,29549,29433],{"class":77},[49,29551,29436],{"class":59},[49,29553,29439],{"class":73},[49,29555,1789],{"class":77},[49,29557,29558],{"class":59},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29560,15330],{},[40,29562,29564],{"className":42,"code":29563,"language":44,"meta":27,"style":27},"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",[46,29565,29566,29574,29578,29586,29590,29598,29602,29611,29615,29623,29627],{"__ignoreMap":27},[49,29567,29568,29570,29572],{"class":51,"line":52},[49,29569,27229],{"class":55},[49,29571,29547],{"class":59},[49,29573,29467],{"class":59},[49,29575,29576],{"class":51,"line":63},[49,29577,399],{"emptyLinePlaceholder":398},[49,29579,29580,29582,29584],{"class":51,"line":70},[49,29581,27229],{"class":55},[49,29583,29547],{"class":59},[49,29585,29482],{"class":59},[49,29587,29588],{"class":51,"line":219},[49,29589,399],{"emptyLinePlaceholder":398},[49,29591,29592,29594,29596],{"class":51,"line":233},[49,29593,27229],{"class":55},[49,29595,29547],{"class":59},[49,29597,29497],{"class":59},[49,29599,29600],{"class":51,"line":241},[49,29601,399],{"emptyLinePlaceholder":398},[49,29603,29604,29606,29608],{"class":51,"line":1920},[49,29605,27229],{"class":55},[49,29607,29547],{"class":59},[49,29609,29610],{"class":59}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[49,29612,29613],{"class":51,"line":2011},[49,29614,399],{"emptyLinePlaceholder":398},[49,29616,29617,29619,29621],{"class":51,"line":2017},[49,29618,27229],{"class":55},[49,29620,29547],{"class":59},[49,29622,29527],{"class":59},[49,29624,29625],{"class":51,"line":2029},[49,29626,399],{"emptyLinePlaceholder":398},[49,29628,29629,29631,29633],{"class":51,"line":2311},[49,29630,27229],{"class":55},[49,29632,29547],{"class":59},[49,29634,29635],{"class":59}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[30,29637,29638],{"start":70},[33,29639,29640],{},"验证推送成功",[14,29642,29643],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29645,29646],{},[112,29647,4481],{},[742,29649,29650,29653],{},[33,29651,29652],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[33,29654,29655],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29657,29658],{},[25,29659],{"alt":27,"src":29660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29662,29663],{},[25,29664],{"alt":27,"src":29665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[130,29667,29669],{"id":29668},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29671,29672,29673,29676,29677,29680],{},"如果您想在 ",[112,29674,29675],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[112,29678,29679],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29682,29683,29684],{},"1. ",[112,29685,29686],{},"启用 Docker 跨平台构建",[14,29688,29689],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29691,29692],{},"第一步：启用 buildx（只需执行一次）",[40,29694,29696],{"className":42,"code":29695,"language":44,"meta":27,"style":27},"docker buildx create --name multiarch_builder --use\n",[46,29697,29698],{"__ignoreMap":27},[49,29699,29700,29702,29705,29708,29711,29714],{"class":51,"line":52},[49,29701,27229],{"class":55},[49,29703,29704],{"class":59}," buildx",[49,29706,29707],{"class":59}," create",[49,29709,29710],{"class":159}," --name",[49,29712,29713],{"class":59}," multiarch_builder",[49,29715,29716],{"class":159}," --use\n",[14,29718,29719],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29721,29722],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[40,29724,29726],{"className":42,"code":29725,"language":44,"meta":27,"style":27},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[46,29727,29728],{"__ignoreMap":27},[49,29729,29730,29732,29734,29736,29739,29742,29745,29748],{"class":51,"line":52},[49,29731,27229],{"class":55},[49,29733,560],{"class":59},[49,29735,563],{"class":159},[49,29737,29738],{"class":159}," --privileged",[49,29740,29741],{"class":59}," multiarch\u002Fqemu-user-static",[49,29743,29744],{"class":159}," --reset",[49,29746,29747],{"class":159}," -p",[49,29749,29750],{"class":59}," yes\n",[14,29752,29753],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29755,29756],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[40,29758,29760],{"className":42,"code":29759,"language":44,"meta":27,"style":27},"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",[46,29761,29762,29804,29808,29813,29823,29833,29842,29848,29852,29856,29866,29874,29883,29889,29893,29897,29907,29915,29924,29930,29934,29938,29948,29956,29965,29971,29975,29979,29989,29997,30006,30012,30016,30020,30030,30038,30047,30053,30057,30061,30071,30079,30088,30094,30098,30102,30112,30120,30129,30135,30139,30143,30153,30161,30170,30176,30180,30184,30195,30203,30212,30218],{"__ignoreMap":27},[49,29763,29764,29766,29768,29770,29773,29776,29778,29780,29783,29785,29787,29789,29791,29794,29797,29799,29802],{"class":51,"line":52},[49,29765,27229],{"class":55},[49,29767,29704],{"class":59},[49,29769,29263],{"class":59},[49,29771,29772],{"class":159}," --platform",[49,29774,29775],{"class":59}," linux\u002Famd64,linux\u002Farm64",[49,29777,29266],{"class":159},[49,29779,29433],{"class":77},[49,29781,29782],{"class":59},"你的镜像",[49,29784,29439],{"class":73},[49,29786,1789],{"class":77},[49,29788,1688],{"class":59},[49,29790,1739],{"class":77},[49,29792,29793],{"class":59},"标",[49,29795,29796],{"class":73},"签",[49,29798,1789],{"class":77},[49,29800,29801],{"class":159}," --push",[49,29803,29272],{"class":59},[49,29805,29806],{"class":51,"line":63},[49,29807,399],{"emptyLinePlaceholder":398},[49,29809,29810],{"class":51,"line":70},[49,29811,29812],{"class":66},"# 例子：\n",[49,29814,29815,29817,29819,29821],{"class":51,"line":219},[49,29816,27229],{"class":55},[49,29818,29704],{"class":59},[49,29820,29263],{"class":59},[49,29822,184],{"class":159},[49,29824,29825,29828,29831],{"class":51,"line":233},[49,29826,29827],{"class":73},"--platform ",[49,29829,29830],{"class":59},"linux\u002Famd64,linux\u002Farm64",[49,29832,184],{"class":159},[49,29834,29835,29837,29840],{"class":51,"line":241},[49,29836,29266],{"class":159},[49,29838,29839],{"class":59}," tungchiahui\u002Fros:noetic-focal",[49,29841,184],{"class":159},[49,29843,29844,29846],{"class":51,"line":1920},[49,29845,29801],{"class":159},[49,29847,184],{"class":159},[49,29849,29850],{"class":51,"line":2011},[49,29851,29272],{"class":59},[49,29853,29854],{"class":51,"line":2017},[49,29855,399],{"emptyLinePlaceholder":398},[49,29857,29858,29860,29862,29864],{"class":51,"line":2029},[49,29859,27229],{"class":55},[49,29861,29704],{"class":59},[49,29863,29263],{"class":59},[49,29865,184],{"class":159},[49,29867,29868,29870,29872],{"class":51,"line":2311},[49,29869,29827],{"class":73},[49,29871,29830],{"class":59},[49,29873,184],{"class":159},[49,29875,29876,29878,29881],{"class":51,"line":2316},[49,29877,29266],{"class":159},[49,29879,29880],{"class":59}," tungchiahui\u002Fros:humble-jammy",[49,29882,184],{"class":159},[49,29884,29885,29887],{"class":51,"line":2322},[49,29886,29801],{"class":159},[49,29888,184],{"class":159},[49,29890,29891],{"class":51,"line":2327},[49,29892,29272],{"class":59},[49,29894,29895],{"class":51,"line":2341},[49,29896,399],{"emptyLinePlaceholder":398},[49,29898,29899,29901,29903,29905],{"class":51,"line":2346},[49,29900,27229],{"class":55},[49,29902,29704],{"class":59},[49,29904,29263],{"class":59},[49,29906,184],{"class":159},[49,29908,29909,29911,29913],{"class":51,"line":2352},[49,29910,29827],{"class":73},[49,29912,29830],{"class":59},[49,29914,184],{"class":159},[49,29916,29917,29919,29922],{"class":51,"line":2373},[49,29918,29266],{"class":159},[49,29920,29921],{"class":59}," tungchiahui\u002Fros:jazzy-noble",[49,29923,184],{"class":159},[49,29925,29926,29928],{"class":51,"line":2378},[49,29927,29801],{"class":159},[49,29929,184],{"class":159},[49,29931,29932],{"class":51,"line":2392},[49,29933,29272],{"class":59},[49,29935,29936],{"class":51,"line":2397},[49,29937,399],{"emptyLinePlaceholder":398},[49,29939,29940,29942,29944,29946],{"class":51,"line":2426},[49,29941,557],{"class":55},[49,29943,29704],{"class":59},[49,29945,29263],{"class":59},[49,29947,184],{"class":159},[49,29949,29950,29952,29954],{"class":51,"line":2431},[49,29951,29827],{"class":73},[49,29953,29830],{"class":59},[49,29955,184],{"class":159},[49,29957,29958,29960,29963],{"class":51,"line":2448},[49,29959,29266],{"class":159},[49,29961,29962],{"class":59}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[49,29964,184],{"class":159},[49,29966,29967,29969],{"class":51,"line":2453},[49,29968,29801],{"class":159},[49,29970,184],{"class":159},[49,29972,29973],{"class":51,"line":2458},[49,29974,29272],{"class":59},[49,29976,29977],{"class":51,"line":2463},[49,29978,399],{"emptyLinePlaceholder":398},[49,29980,29981,29983,29985,29987],{"class":51,"line":2477},[49,29982,27229],{"class":55},[49,29984,29704],{"class":59},[49,29986,29263],{"class":59},[49,29988,184],{"class":159},[49,29990,29991,29993,29995],{"class":51,"line":2482},[49,29992,29827],{"class":73},[49,29994,29830],{"class":59},[49,29996,184],{"class":159},[49,29998,29999,30001,30004],{"class":51,"line":3274},[49,30000,29266],{"class":159},[49,30002,30003],{"class":59}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[49,30005,184],{"class":159},[49,30007,30008,30010],{"class":51,"line":3288},[49,30009,29801],{"class":159},[49,30011,184],{"class":159},[49,30013,30014],{"class":51,"line":3296},[49,30015,29272],{"class":59},[49,30017,30018],{"class":51,"line":3301},[49,30019,399],{"emptyLinePlaceholder":398},[49,30021,30022,30024,30026,30028],{"class":51,"line":3307},[49,30023,557],{"class":55},[49,30025,29704],{"class":59},[49,30027,29263],{"class":59},[49,30029,184],{"class":159},[49,30031,30032,30034,30036],{"class":51,"line":3313},[49,30033,29827],{"class":73},[49,30035,29830],{"class":59},[49,30037,184],{"class":159},[49,30039,30040,30042,30045],{"class":51,"line":3318},[49,30041,29266],{"class":159},[49,30043,30044],{"class":59}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[49,30046,184],{"class":159},[49,30048,30049,30051],{"class":51,"line":8645},[49,30050,29801],{"class":159},[49,30052,184],{"class":159},[49,30054,30055],{"class":51,"line":8669},[49,30056,29272],{"class":59},[49,30058,30059],{"class":51,"line":8674},[49,30060,399],{"emptyLinePlaceholder":398},[49,30062,30063,30065,30067,30069],{"class":51,"line":8680},[49,30064,27229],{"class":55},[49,30066,29704],{"class":59},[49,30068,29263],{"class":59},[49,30070,184],{"class":159},[49,30072,30073,30075,30077],{"class":51,"line":8707},[49,30074,29827],{"class":73},[49,30076,29830],{"class":59},[49,30078,184],{"class":159},[49,30080,30081,30083,30086],{"class":51,"line":8712},[49,30082,29266],{"class":159},[49,30084,30085],{"class":59}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[49,30087,184],{"class":159},[49,30089,30090,30092],{"class":51,"line":8718},[49,30091,29801],{"class":159},[49,30093,184],{"class":159},[49,30095,30096],{"class":51,"line":8730},[49,30097,29272],{"class":59},[49,30099,30100],{"class":51,"line":8742},[49,30101,399],{"emptyLinePlaceholder":398},[49,30103,30104,30106,30108,30110],{"class":51,"line":8754},[49,30105,27229],{"class":55},[49,30107,29704],{"class":59},[49,30109,29263],{"class":59},[49,30111,184],{"class":159},[49,30113,30114,30116,30118],{"class":51,"line":10413},[49,30115,29827],{"class":73},[49,30117,29830],{"class":59},[49,30119,184],{"class":159},[49,30121,30122,30124,30127],{"class":51,"line":10438},[49,30123,29266],{"class":159},[49,30125,30126],{"class":59}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[49,30128,184],{"class":159},[49,30130,30131,30133],{"class":51,"line":10461},[49,30132,29801],{"class":159},[49,30134,184],{"class":159},[49,30136,30137],{"class":51,"line":10485},[49,30138,29272],{"class":59},[49,30140,30141],{"class":51,"line":10490},[49,30142,399],{"emptyLinePlaceholder":398},[49,30144,30145,30147,30149,30151],{"class":51,"line":10495},[49,30146,557],{"class":55},[49,30148,29704],{"class":59},[49,30150,29263],{"class":59},[49,30152,184],{"class":159},[49,30154,30155,30157,30159],{"class":51,"line":10500},[49,30156,29827],{"class":73},[49,30158,29830],{"class":59},[49,30160,184],{"class":159},[49,30162,30163,30165,30168],{"class":51,"line":10509},[49,30164,29266],{"class":159},[49,30166,30167],{"class":59}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[49,30169,184],{"class":159},[49,30171,30172,30174],{"class":51,"line":10514},[49,30173,29801],{"class":159},[49,30175,184],{"class":159},[49,30177,30178],{"class":51,"line":10520},[49,30179,29272],{"class":59},[49,30181,30182],{"class":51,"line":10541},[49,30183,399],{"emptyLinePlaceholder":398},[49,30185,30186,30189,30191,30193],{"class":51,"line":10547},[49,30187,30188],{"class":55},"  docker",[49,30190,29704],{"class":59},[49,30192,29263],{"class":59},[49,30194,184],{"class":159},[49,30196,30197,30199,30201],{"class":51,"line":10561},[49,30198,29827],{"class":73},[49,30200,29830],{"class":59},[49,30202,184],{"class":159},[49,30204,30205,30207,30210],{"class":51,"line":10567},[49,30206,29266],{"class":159},[49,30208,30209],{"class":59}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[49,30211,184],{"class":159},[49,30213,30214,30216],{"class":51,"line":10594},[49,30215,29801],{"class":159},[49,30217,184],{"class":159},[49,30219,30220],{"class":51,"line":10603},[49,30221,29272],{"class":59},[14,30223,30224],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,30226,30227],{},[25,30228],{"alt":27,"src":30229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,30231,30232],{},[25,30233],{"alt":27,"src":30234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[130,30236,30238],{"id":30237},"_623清除构建缓存","6.2.3.清除构建缓存",[40,30240,30242],{"className":42,"code":30241,"language":44,"meta":27,"style":27},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[46,30243,30244,30249],{"__ignoreMap":27},[49,30245,30246],{"class":51,"line":52},[49,30247,30248],{"class":66},"# 清理BuildKit构建缓存\n",[49,30250,30251,30253,30256,30259],{"class":51,"line":63},[49,30252,27229],{"class":55},[49,30254,30255],{"class":59}," builder",[49,30257,30258],{"class":59}," prune",[49,30260,30261],{"class":159}," -f\n",[14,30263,30264],{},[25,30265],{"alt":27,"src":30266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[18,30268,30270],{"id":30269},"_63补充","6.3.补充",[130,30272,30274],{"id":30273},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,30276,30277],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,30279,30280],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,30282,30283],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[40,30285,30287],{"className":42,"code":30286,"language":44,"meta":27,"style":27},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[46,30288,30289,30296],{"__ignoreMap":27},[49,30290,30291,30293],{"class":51,"line":52},[49,30292,707],{"class":55},[49,30294,30295],{"class":59}," nginx\n",[49,30297,30298,30300,30303,30306,30308],{"class":51,"line":63},[49,30299,29086],{"class":55},[49,30301,30302],{"class":59}," echo",[49,30304,30305],{"class":59}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[49,30307,26907],{"class":77},[49,30309,30310],{"class":59}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,30312,30313],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,30315,30316],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[40,30318,30320],{"className":42,"code":30319,"language":44,"meta":27,"style":27},"docker build -t nginx:tuling .\n",[46,30321,30322],{"__ignoreMap":27},[49,30323,30324,30326,30328,30330,30333],{"class":51,"line":52},[49,30325,27229],{"class":55},[49,30327,29263],{"class":59},[49,30329,29266],{"class":159},[49,30331,30332],{"class":59}," nginx:tuling",[49,30334,29272],{"class":59},[14,30336,30337],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,30339,30340],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[40,30342,30344],{"className":42,"code":30343,"language":44,"meta":27,"style":27},"docker run -d -p 92:80 nginx:tuling\n",[46,30345,30346],{"__ignoreMap":27},[49,30347,30348,30350,30352,30355,30357,30360],{"class":51,"line":52},[49,30349,27229],{"class":55},[49,30351,560],{"class":59},[49,30353,30354],{"class":159}," -d",[49,30356,29747],{"class":159},[49,30358,30359],{"class":59}," 92:80",[49,30361,30362],{"class":59}," nginx:tuling\n",[14,30364,30365,30366],{},"4、访问 ",[124,30367,30370],{"href":30368,"rel":30369},"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",[128],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,30372,30373],{},[25,30374],{"alt":27,"src":30375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,30377,30378],{},[25,30379],{"alt":27,"src":30380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[130,30382,30384],{"id":30383},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,30386,30387],{},"只需要知道大体流程即可",[14,30389,30390],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,30392,30393],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,30395,30396],{},"2、在Dockerfile中添加以下内容",[40,30398,30400],{"className":26778,"code":30399,"language":26780,"meta":27,"style":27},"# 基于哪个镜像\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",[46,30401,30402,30407,30412,30417,30422,30427,30432,30437],{"__ignoreMap":27},[49,30403,30404],{"class":51,"line":52},[49,30405,30406],{},"# 基于哪个镜像\n",[49,30408,30409],{"class":51,"line":63},[49,30410,30411],{},"From java:8\n",[49,30413,30414],{"class":51,"line":70},[49,30415,30416],{},"# 复制文件到容器\n",[49,30418,30419],{"class":51,"line":219},[49,30420,30421],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[49,30423,30424],{"class":51,"line":233},[49,30425,30426],{},"# 声明需要暴露的端口\n",[49,30428,30429],{"class":51,"line":241},[49,30430,30431],{},"EXPOSE 8877\n",[49,30433,30434],{"class":51,"line":1920},[49,30435,30436],{},"# 配置容器启动后执行的命令\n",[49,30438,30439],{"class":51,"line":2011},[49,30440,30441],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,30443,30444],{},"3、使用docker build命令构建镜像",[40,30446,30448],{"className":42,"code":30447,"language":44,"meta":27,"style":27},"docker build -t tulingmall-member:0.0.5 .\n",[46,30449,30450],{"__ignoreMap":27},[49,30451,30452,30454,30456,30458,30461],{"class":51,"line":52},[49,30453,27229],{"class":55},[49,30455,29263],{"class":59},[49,30457,29266],{"class":159},[49,30459,30460],{"class":59}," tulingmall-member:0.0.5",[49,30462,29272],{"class":59},[14,30464,30465],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30467,30468],{},[25,30469],{"alt":27,"src":30470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30472,30473],{},"4、启动镜像，加-d可在后台启动",[40,30475,30477],{"className":42,"code":30476,"language":44,"meta":27,"style":27},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[46,30478,30479],{"__ignoreMap":27},[49,30480,30481,30483,30485,30487,30489,30492],{"class":51,"line":52},[49,30482,27229],{"class":55},[49,30484,560],{"class":59},[49,30486,30354],{"class":159},[49,30488,29747],{"class":159},[49,30490,30491],{"class":59}," 8877:8877",[49,30493,30494],{"class":59}," tulingmall-member:0.0.5\n",[14,30496,30497],{},"加上JVM参数：",[40,30499,30501],{"className":42,"code":30500,"language":44,"meta":27,"style":27},"# --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",[46,30502,30503,30508,30523,30533,30542,30549],{"__ignoreMap":27},[49,30504,30505],{"class":51,"line":52},[49,30506,30507],{"class":66},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[49,30509,30510,30512,30514,30517,30519,30521],{"class":51,"line":63},[49,30511,27229],{"class":55},[49,30513,560],{"class":59},[49,30515,30516],{"class":159},"  -d",[49,30518,29747],{"class":159},[49,30520,30491],{"class":59},[49,30522,184],{"class":159},[49,30524,30525,30527,30530],{"class":51,"line":70},[49,30526,28659],{"class":73},[49,30528,30529],{"class":59},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[49,30531,30532],{"class":159},"  \\\n",[49,30534,30535,30537,30540],{"class":51,"line":219},[49,30536,28659],{"class":73},[49,30538,30539],{"class":59},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[49,30541,30532],{"class":159},[49,30543,30544,30547],{"class":51,"line":233},[49,30545,30546],{"class":73},"--cap-add=SYS_PTRACE  ",[49,30548,238],{"class":159},[49,30550,30551],{"class":51,"line":241},[49,30552,30553],{"class":73},"tulingmall-member:0.0.5\n",[14,30555,30556],{},"5、访问会员服务接口",[14,30558,30559],{},[25,30560],{"alt":27,"src":30561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[130,30563,30565],{"id":30564},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30567,30568],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30570,30571,30572],{},"阿里云docker镜像仓库：",[124,30573,30574],{"href":30574,"rel":30575},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[128],[14,30577,30578],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30580,30581],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30583,30584],{},[25,30585],{"alt":27,"src":30586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30588,30589],{},"要把镜像推送到镜像仓库",[40,30591,30593],{"className":42,"code":30592,"language":44,"meta":27,"style":27},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[46,30594,30595],{"__ignoreMap":27},[49,30596,30597,30599,30601,30603],{"class":51,"line":52},[49,30598,27229],{"class":55},[49,30600,29428],{"class":59},[49,30602,30460],{"class":59},[49,30604,30605],{"class":59}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30607,30608],{},"最后将镜像推送到远程仓库",[40,30610,30612],{"className":42,"code":30611,"language":44,"meta":27,"style":27},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[46,30613,30614],{"__ignoreMap":27},[49,30615,30616,30618,30620],{"class":51,"line":52},[49,30617,27229],{"class":55},[49,30619,29547],{"class":59},[49,30621,30605],{"class":59},[757,30623,30624],{},"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":27,"searchDepth":63,"depth":63,"links":30626},[30627,30628,30629],{"id":29014,"depth":70,"text":29015},{"id":29243,"depth":70,"text":29244},{"id":30269,"depth":70,"text":30270},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29006,"description":27},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30636,"title":30637,"body":30638,"description":27,"extension":766,"meta":30781,"navigation":398,"path":30782,"seo":30783,"stem":30784,"__hash__":30785},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30639,"toc":30779},[30640,30643,30648,30653,30656,30661,30666,30669,30674,30679,30682,30687,30690,30693,30696,30699,30702,30705,30725,30747,30750,30753,30773,30776],[10,30641,30637],{"id":30642},"_7vscode远程开发",[30,30644,30645],{},[33,30646,30647],{},"插件1：微软Docker工具",[14,30649,30650],{},[25,30651],{"alt":27,"src":30652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30654,30655],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30657,30658],{},[25,30659],{"alt":27,"src":30660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[30,30662,30663],{"start":63},[33,30664,30665],{},"插件2：微软Docker远程开发工具",[14,30667,30668],{},"下面这是远程开发的插件。",[14,30670,30671],{},[25,30672],{"alt":27,"src":30673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30675,30676],{},[25,30677],{"alt":27,"src":30678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30680,30681],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30683,30684],{},[25,30685],{"alt":27,"src":30686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30688,30689],{},"安装完拓展之后，vscode进行链接：",[14,30691,30692],{},"1.按ctrl+shift+p",[14,30694,30695],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30697,30698],{},"3.选择目前运行的容器",[14,30700,30701],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30703,30704],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[40,30706,30708],{"className":42,"code":30707,"language":44,"meta":27,"style":27},"docker run -v 主机目录:容器目录 image-name\n",[46,30709,30710],{"__ignoreMap":27},[49,30711,30712,30714,30716,30719,30722],{"class":51,"line":52},[49,30713,27229],{"class":55},[49,30715,560],{"class":59},[49,30717,30718],{"class":159}," -v",[49,30720,30721],{"class":59}," 主机目录:容器目录",[49,30723,30724],{"class":59}," image-name\n",[40,30726,30728],{"className":42,"code":30727,"language":44,"meta":27,"style":27},"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",[46,30729,30730],{"__ignoreMap":27},[49,30731,30732,30734,30736,30739,30741,30744],{"class":51,"line":52},[49,30733,27229],{"class":55},[49,30735,560],{"class":59},[49,30737,30738],{"class":159}," -it",[49,30740,30718],{"class":159},[49,30742,30743],{"class":59}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[49,30745,30746],{"class":59}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30748,30749],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30751,30752],{},"查看挂载情况：",[40,30754,30756],{"className":42,"code":30755,"language":44,"meta":27,"style":27},"mount | grep -i project\n",[46,30757,30758],{"__ignoreMap":27},[49,30759,30760,30763,30765,30768,30770],{"class":51,"line":52},[49,30761,30762],{"class":55},"mount",[49,30764,166],{"class":77},[49,30766,30767],{"class":55}," grep",[49,30769,27108],{"class":159},[49,30771,30772],{"class":59}," project\n",[14,30774,30775],{},"也可以通过ls来进行查看",[757,30777,30778],{},"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":27,"searchDepth":63,"depth":63,"links":30780},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30637,"description":27},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30787,"title":30788,"body":30789,"description":24072,"extension":766,"meta":30793,"navigation":398,"path":30795,"seo":30796,"stem":30797,"__hash__":30798},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30790,"toc":30791},[],{"title":27,"searchDepth":63,"depth":63,"links":30792},[],{"category":30794},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30788,"description":24072},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30800,"title":30801,"body":30802,"description":24072,"extension":766,"meta":30806,"navigation":398,"path":30807,"seo":30808,"stem":30809,"__hash__":30810},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30803,"toc":30804},[],{"title":27,"searchDepth":63,"depth":63,"links":30805},[],{"category":30794},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30801,"description":24072},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30812,"title":30813,"body":30814,"description":24072,"extension":766,"meta":31107,"navigation":398,"path":31108,"seo":31109,"stem":31110,"__hash__":31111},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30815,"toc":31105},[30816,30819,30827,30842,30847,30898,30901,30907,31094,31099,31102],[10,30817,30813],{"id":30818},"_1验证深度学习环境",[14,30820,30821,30822],{},"关于环境的安装，看",[124,30823,30826],{"href":30824,"rel":30825},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[128],"Pytorch-->深度学习",[14,30828,30829,30830,30833,30834,30837,30838,30841],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[46,30831,30832],{},"pytorch-cuda=12.4"," 是一个“ ",[112,30835,30836],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[112,30839,30840],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30843,30844],{},[25,30845],{"alt":27,"src":30846},"\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",[40,30848,30850],{"className":42,"code":30849,"language":44,"meta":27,"style":27},"# 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",[46,30851,30852,30857],{"__ignoreMap":27},[49,30853,30854],{"class":51,"line":52},[49,30855,30856],{"class":66},"# CUDA 12.4\n",[49,30858,30859,30862,30864,30867,30870,30873,30876,30879,30881,30884,30887,30890,30893,30895],{"class":51,"line":63},[49,30860,30861],{"class":55},"conda",[49,30863,269],{"class":59},[49,30865,30866],{"class":59}," pytorch==",[49,30868,30869],{"class":159},"2.5.1",[49,30871,30872],{"class":59}," torchvision==",[49,30874,30875],{"class":159},"0.20.1",[49,30877,30878],{"class":59}," torchaudio==",[49,30880,30869],{"class":159},[49,30882,30883],{"class":59}," pytorch-cuda=",[49,30885,30886],{"class":159},"12.4",[49,30888,30889],{"class":159}," -c",[49,30891,30892],{"class":59}," pytorch",[49,30894,30889],{"class":159},[49,30896,30897],{"class":59}," nvidia\n",[14,30899,30900],{},"）：",[14,30902,30903],{},[124,30904,30905],{"href":30905,"rel":30906},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[128],[40,30908,30912],{"className":30909,"code":30910,"language":30911,"meta":27,"style":27},"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",[46,30913,30914,30919,30927,30932,30942,30958,30963,30973,31010,31017,31029,31045,31050,31060,31072,31082],{"__ignoreMap":27},[49,30915,30916],{"class":51,"line":52},[49,30917,30918],{"class":66},"# 对深度学习环境进行测试\n",[49,30920,30921,30924],{"class":51,"line":63},[49,30922,30923],{"class":77},"import",[49,30925,30926],{"class":73}," torch\n",[49,30928,30929],{"class":51,"line":70},[49,30930,30931],{"class":66},"# 查看cuda是否被激活\n",[49,30933,30934,30937,30939],{"class":51,"line":219},[49,30935,30936],{"class":73},"flag",[49,30938,78],{"class":77},[49,30940,30941],{"class":73},"torch.cuda.is_available()\n",[49,30943,30944,30947,30949,30952,30955],{"class":51,"line":233},[49,30945,30946],{"class":159},"print",[49,30948,841],{"class":73},[49,30950,30951],{"class":59},"\"cuda:\"",[49,30953,30954],{"class":73},", flag)   ",[49,30956,30957],{"class":66},"#返回true的话说明被激活\n",[49,30959,30960],{"class":51,"line":241},[49,30961,30962],{"class":66},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[49,30964,30965,30968,30970],{"class":51,"line":1920},[49,30966,30967],{"class":73},"ngpu",[49,30969,78],{"class":77},[49,30971,30972],{"class":159},"1\n",[49,30974,30975,30978,30980,30983,30986,30988,30991,30994,30997,30999,31001,31003,31005,31008],{"class":51,"line":2011},[49,30976,30977],{"class":73},"device",[49,30979,78],{"class":77},[49,30981,30982],{"class":73},"torch.device(",[49,30984,30985],{"class":59},"\"cuda:0\"",[49,30987,2403],{"class":77},[49,30989,30990],{"class":73},"(torch.cuda.is_available() ",[49,30992,30993],{"class":77},"and",[49,30995,30996],{"class":73}," ngpu",[49,30998,1789],{"class":77},[49,31000,1021],{"class":159},[49,31002,14411],{"class":73},[49,31004,2400],{"class":77},[49,31006,31007],{"class":59}," \"cpu\"",[49,31009,847],{"class":73},[49,31011,31012,31014],{"class":51,"line":2017},[49,31013,30946],{"class":159},[49,31015,31016],{"class":73},"(device)\n",[49,31018,31019,31021,31024,31026],{"class":51,"line":2029},[49,31020,30946],{"class":159},[49,31022,31023],{"class":73},"(torch.cuda.get_device_name(",[49,31025,1021],{"class":159},[49,31027,31028],{"class":73},"))\n",[49,31030,31031,31033,31036,31038,31040,31042],{"class":51,"line":2311},[49,31032,30946],{"class":159},[49,31034,31035],{"class":73},"(torch.rand(",[49,31037,909],{"class":159},[49,31039,1207],{"class":73},[49,31041,909],{"class":159},[49,31043,31044],{"class":73},").cuda())\n",[49,31046,31047],{"class":51,"line":2316},[49,31048,31049],{"class":66},"# 查看cuda和cudnn的版本\n",[49,31051,31052,31055,31057],{"class":51,"line":2322},[49,31053,31054],{"class":73},"cuda_version",[49,31056,78],{"class":77},[49,31058,31059],{"class":73},"torch.version.cuda\n",[49,31061,31062,31064,31066,31069],{"class":51,"line":2327},[49,31063,30946],{"class":159},[49,31065,841],{"class":73},[49,31067,31068],{"class":59},"\"cuda version\"",[49,31070,31071],{"class":73},",cuda_version)\n",[49,31073,31074,31077,31079],{"class":51,"line":2341},[49,31075,31076],{"class":73},"cudnn_version",[49,31078,78],{"class":77},[49,31080,31081],{"class":73},"torch.backends.cudnn.version()\n",[49,31083,31084,31086,31088,31091],{"class":51,"line":2346},[49,31085,30946],{"class":159},[49,31087,841],{"class":73},[49,31089,31090],{"class":59},"\"cudnn version\"",[49,31092,31093],{"class":73},",cudnn_version)\n",[14,31095,31096],{},[25,31097],{"alt":27,"src":31098},"\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",[14,31100,31101],{},"cuda:0 指的是一块显卡",[757,31103,31104],{},"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":27,"searchDepth":63,"depth":63,"links":31106},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30813,"description":24072},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31113,"title":31114,"body":31115,"description":24072,"extension":766,"meta":50919,"navigation":398,"path":50920,"seo":50921,"stem":50922,"__hash__":50923},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31116,"toc":50913},[31117,31120,31124,31128,31131,31136,31141,31144,31149,31154,31159,31162,31166,31171,31175,31180,31183,31188,31191,31194,31197,31200,31205,31208,31213,31218,31223,31228,31231,31235,31238,31243,31847,31852,31855,31860,31863,31866,32330,32333,32336,32339,32342,34393,34396,34401,34406,35201,35204,35209,35987,35991,37650,37654,38368,38372,38376,38381,38386,38391,38394,38399,38404,38409,38414,38419,38423,38428,39710,39715,39718,39721,39724,39879,39882,39885,41101,41106,41801,41805,41809,41814,41819,41822,41827,41832,41837,41842,41847,41852,41857,41862,41867,41872,41877,41882,41887,41892,41897,41902,41907,41912,41917,41922,41927,41932,41937,41942,41947,41952,41957,41962,41967,41972,41976,41980,41983,43461,43465,45112,45116,45810,45814,45817,45820,46364,46367,46371,46374,47771,47775,47778,48356,50143,50147,50150,50910],[10,31118,31114],{"id":31119},"_2经典神经网络",[18,31121,31123],{"id":31122},"_21lenet与alexnet","2.1.LeNet与AlexNet",[130,31125,31127],{"id":31126},"_211原理介绍","2.1.1.原理介绍",[14,31129,31130],{},"LeNet-5",[30,31132,31133],{},[33,31134,31135],{},"原理",[14,31137,31138],{},[25,31139],{"alt":27,"src":31140},"\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",[14,31142,31143],{},"B是batch批次；C是channel通道",[30,31145,31146],{"start":63},[33,31147,31148],{},"网络参数详细",[14,31150,31151],{},[25,31152],{"alt":27,"src":31153},"\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",[14,31155,31156],{},[25,31157],{"alt":27,"src":31158},"\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",[14,31160,31161],{},"AlexNet",[30,31163,31164],{},[33,31165,31135],{},[14,31167,31168],{},[25,31169],{"alt":27,"src":31170},"\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",[30,31172,31173],{"start":63},[33,31174,31148],{},[14,31176,31177],{},[25,31178],{"alt":27,"src":31179},"\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",[14,31181,31182],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,31184,31185],{},[25,31186],{"alt":27,"src":31187},"\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",[14,31189,31190],{},"数据处理中的图像增强操作:",[14,31192,31193],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,31195,31196],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,31198,31199],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,31201,31202],{},[25,31203],{"alt":27,"src":31204},"\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",[14,31206,31207],{},"提升网络精确度的方法：LRN正则化",[14,31209,31210],{},[25,31211],{"alt":27,"src":31212},"\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",[14,31214,31215],{},[25,31216],{"alt":27,"src":31217},"\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",[30,31219,31220],{"start":70},[33,31221,31222],{},"AlexNet的总结",[14,31224,31225],{},[25,31226],{"alt":27,"src":31227},"\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",[14,31229,31230],{},"比LeNet模型要深一丢丢",[130,31232,31234],{"id":31233},"_212代码实现","2.1.2.代码实现",[14,31236,31237],{},"（1）LeNet",[30,31239,31240],{},[33,31241,31242],{},"模型搭建",[40,31244,31246],{"className":30909,"code":31245,"language":30911,"meta":27,"style":27},"# 导入库\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",[46,31247,31248,31253,31259,31264,31277,31282,31294,31298,31318,31323,31328,31339,31344,31363,31367,31372,31421,31433,31438,31467,31502,31529,31534,31546,31551,31571,31590,31609,31613,31618,31628,31645,31656,31671,31682,31693,31708,31723,31734,31741,31745,31759,31764,31787,31792,31797,31802,31806,31811,31816,31826],{"__ignoreMap":27},[49,31249,31250],{"class":51,"line":52},[49,31251,31252],{"class":66},"# 导入库\n",[49,31254,31255,31257],{"class":51,"line":63},[49,31256,30923],{"class":77},[49,31258,30926],{"class":73},[49,31260,31261],{"class":51,"line":70},[49,31262,31263],{"class":66},"# 导入神经网络层\n",[49,31265,31266,31269,31272,31274],{"class":51,"line":219},[49,31267,31268],{"class":77},"from",[49,31270,31271],{"class":73}," torch ",[49,31273,30923],{"class":77},[49,31275,31276],{"class":73}," nn\n",[49,31278,31279],{"class":51,"line":233},[49,31280,31281],{"class":66},"# 导入展示神经网络参数的包\n",[49,31283,31284,31286,31289,31291],{"class":51,"line":241},[49,31285,31268],{"class":77},[49,31287,31288],{"class":73}," torchsummary ",[49,31290,30923],{"class":77},[49,31292,31293],{"class":73}," summary\n",[49,31295,31296],{"class":51,"line":1920},[49,31297,399],{"emptyLinePlaceholder":398},[49,31299,31300,31302,31305,31307,31310,31312,31315],{"class":51,"line":2011},[49,31301,15391],{"class":77},[49,31303,31304],{"class":55}," LeNet",[49,31306,841],{"class":73},[49,31308,31309],{"class":55},"nn",[49,31311,1387],{"class":73},[49,31313,31314],{"class":55},"Module",[49,31316,31317],{"class":73},"):\n",[49,31319,31320],{"class":51,"line":2017},[49,31321,31322],{"class":66},"    # 模型初始化:\n",[49,31324,31325],{"class":51,"line":2029},[49,31326,31327],{"class":66},"    # 定义一些网络层和激活函数\n",[49,31329,31330,31333,31336],{"class":51,"line":2311},[49,31331,31332],{"class":77},"    def",[49,31334,31335],{"class":159}," __init__",[49,31337,31338],{"class":73},"(self):\n",[49,31340,31341],{"class":51,"line":2316},[49,31342,31343],{"class":66},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[49,31345,31346,31349,31352,31355,31358,31361],{"class":51,"line":2322},[49,31347,31348],{"class":159},"        super",[49,31350,31351],{"class":73},"(LeNet,",[49,31353,31354],{"class":159},"self",[49,31356,31357],{"class":73},").",[49,31359,31360],{"class":159},"__init__",[49,31362,2674],{"class":73},[49,31364,31365],{"class":51,"line":2327},[49,31366,399],{"emptyLinePlaceholder":398},[49,31368,31369],{"class":51,"line":2341},[49,31370,31371],{"class":66},"        # 定义网络层\n",[49,31373,31374,31377,31380,31382,31385,31388,31390,31392,31394,31397,31399,31401,31403,31406,31408,31410,31412,31415,31417,31419],{"class":51,"line":2346},[49,31375,31376],{"class":159},"        self",[49,31378,31379],{"class":73},".c1",[49,31381,78],{"class":77},[49,31383,31384],{"class":73},"nn.Conv2d(",[49,31386,31387],{"class":5913},"in_channels",[49,31389,78],{"class":77},[49,31391,1047],{"class":159},[49,31393,1207],{"class":73},[49,31395,31396],{"class":5913},"out_channels",[49,31398,78],{"class":77},[49,31400,1173],{"class":159},[49,31402,1207],{"class":73},[49,31404,31405],{"class":5913},"kernel_size",[49,31407,78],{"class":77},[49,31409,1148],{"class":159},[49,31411,1207],{"class":73},[49,31413,31414],{"class":5913},"padding",[49,31416,78],{"class":77},[49,31418,915],{"class":159},[49,31420,847],{"class":73},[49,31422,31423,31425,31428,31430],{"class":51,"line":2352},[49,31424,31376],{"class":159},[49,31426,31427],{"class":73},".sig",[49,31429,78],{"class":77},[49,31431,31432],{"class":73},"nn.Sigmoid()\n",[49,31434,31435],{"class":51,"line":2373},[49,31436,31437],{"class":66},"        # 定义池化\n",[49,31439,31440,31442,31445,31447,31450,31452,31454,31456,31458,31461,31463,31465],{"class":51,"line":2378},[49,31441,31376],{"class":159},[49,31443,31444],{"class":73},".s2",[49,31446,78],{"class":77},[49,31448,31449],{"class":73},"nn.AvgPool2d(",[49,31451,31405],{"class":5913},[49,31453,78],{"class":77},[49,31455,915],{"class":159},[49,31457,1207],{"class":73},[49,31459,31460],{"class":5913},"stride",[49,31462,78],{"class":77},[49,31464,915],{"class":159},[49,31466,847],{"class":73},[49,31468,31469,31471,31474,31476,31478,31480,31482,31484,31486,31488,31490,31492,31494,31496,31498,31500],{"class":51,"line":2392},[49,31470,31376],{"class":159},[49,31472,31473],{"class":73},".c3",[49,31475,78],{"class":77},[49,31477,31384],{"class":73},[49,31479,31387],{"class":5913},[49,31481,78],{"class":77},[49,31483,1173],{"class":159},[49,31485,1207],{"class":73},[49,31487,31396],{"class":5913},[49,31489,78],{"class":77},[49,31491,1430],{"class":159},[49,31493,1207],{"class":73},[49,31495,31405],{"class":5913},[49,31497,78],{"class":77},[49,31499,1148],{"class":159},[49,31501,847],{"class":73},[49,31503,31504,31506,31509,31511,31513,31515,31517,31519,31521,31523,31525,31527],{"class":51,"line":2397},[49,31505,31376],{"class":159},[49,31507,31508],{"class":73},".s4",[49,31510,78],{"class":77},[49,31512,31449],{"class":73},[49,31514,31405],{"class":5913},[49,31516,78],{"class":77},[49,31518,915],{"class":159},[49,31520,1207],{"class":73},[49,31522,31460],{"class":5913},[49,31524,78],{"class":77},[49,31526,915],{"class":159},[49,31528,847],{"class":73},[49,31530,31531],{"class":51,"line":2426},[49,31532,31533],{"class":66},"        # 定义平展层\n",[49,31535,31536,31538,31541,31543],{"class":51,"line":2431},[49,31537,31376],{"class":159},[49,31539,31540],{"class":73},".flatten",[49,31542,78],{"class":77},[49,31544,31545],{"class":73},"nn.Flatten()\n",[49,31547,31548],{"class":51,"line":2448},[49,31549,31550],{"class":66},"        # 定义全连接层\n",[49,31552,31553,31555,31558,31560,31563,31565,31567,31569],{"class":51,"line":2453},[49,31554,31376],{"class":159},[49,31556,31557],{"class":73},".f5",[49,31559,78],{"class":77},[49,31561,31562],{"class":73},"nn.Linear(",[49,31564,4684],{"class":159},[49,31566,1207],{"class":73},[49,31568,1646],{"class":159},[49,31570,847],{"class":73},[49,31572,31573,31575,31578,31580,31582,31584,31586,31588],{"class":51,"line":2458},[49,31574,31376],{"class":159},[49,31576,31577],{"class":73},".f6",[49,31579,78],{"class":77},[49,31581,31562],{"class":73},[49,31583,1646],{"class":159},[49,31585,1207],{"class":73},[49,31587,1540],{"class":159},[49,31589,847],{"class":73},[49,31591,31592,31594,31597,31599,31601,31603,31605,31607],{"class":51,"line":2463},[49,31593,31376],{"class":159},[49,31595,31596],{"class":73},".f7",[49,31598,78],{"class":77},[49,31600,31562],{"class":73},[49,31602,1540],{"class":159},[49,31604,1207],{"class":73},[49,31606,1275],{"class":159},[49,31608,847],{"class":73},[49,31610,31611],{"class":51,"line":2477},[49,31612,399],{"emptyLinePlaceholder":398},[49,31614,31615],{"class":51,"line":2482},[49,31616,31617],{"class":66},"    # 写工具->写前向传播\n",[49,31619,31620,31622,31625],{"class":51,"line":3274},[49,31621,31332],{"class":77},[49,31623,31624],{"class":55}," forward",[49,31626,31627],{"class":73},"(self,x):\n",[49,31629,31630,31633,31635,31637,31640,31642],{"class":51,"line":3288},[49,31631,31632],{"class":73},"        x",[49,31634,78],{"class":77},[49,31636,31354],{"class":159},[49,31638,31639],{"class":73},".sig(",[49,31641,31354],{"class":159},[49,31643,31644],{"class":73},".c1(x))\n",[49,31646,31647,31649,31651,31653],{"class":51,"line":3296},[49,31648,31632],{"class":73},[49,31650,78],{"class":77},[49,31652,31354],{"class":159},[49,31654,31655],{"class":73},".s2(x)\n",[49,31657,31658,31660,31662,31664,31666,31668],{"class":51,"line":3301},[49,31659,31632],{"class":73},[49,31661,78],{"class":77},[49,31663,31354],{"class":159},[49,31665,31639],{"class":73},[49,31667,31354],{"class":159},[49,31669,31670],{"class":73},".c3(x))\n",[49,31672,31673,31675,31677,31679],{"class":51,"line":3307},[49,31674,31632],{"class":73},[49,31676,78],{"class":77},[49,31678,31354],{"class":159},[49,31680,31681],{"class":73},".s4(x)\n",[49,31683,31684,31686,31688,31690],{"class":51,"line":3313},[49,31685,31632],{"class":73},[49,31687,78],{"class":77},[49,31689,31354],{"class":159},[49,31691,31692],{"class":73},".flatten(x)\n",[49,31694,31695,31697,31699,31701,31703,31705],{"class":51,"line":3318},[49,31696,31632],{"class":73},[49,31698,78],{"class":77},[49,31700,31354],{"class":159},[49,31702,31639],{"class":73},[49,31704,31354],{"class":159},[49,31706,31707],{"class":73},".f5(x))\n",[49,31709,31710,31712,31714,31716,31718,31720],{"class":51,"line":8645},[49,31711,31632],{"class":73},[49,31713,78],{"class":77},[49,31715,31354],{"class":159},[49,31717,31639],{"class":73},[49,31719,31354],{"class":159},[49,31721,31722],{"class":73},".f6(x))\n",[49,31724,31725,31727,31729,31731],{"class":51,"line":8669},[49,31726,31632],{"class":73},[49,31728,78],{"class":77},[49,31730,31354],{"class":159},[49,31732,31733],{"class":73},".f7(x)\n",[49,31735,31736,31738],{"class":51,"line":8674},[49,31737,15449],{"class":77},[49,31739,31740],{"class":73}," x\n",[49,31742,31743],{"class":51,"line":8680},[49,31744,399],{"emptyLinePlaceholder":398},[49,31746,31747,31749,31752,31754,31757],{"class":51,"line":8707},[49,31748,2230],{"class":77},[49,31750,31751],{"class":159}," __name__",[49,31753,3646],{"class":77},[49,31755,31756],{"class":59},"\"__main__\"",[49,31758,4436],{"class":73},[49,31760,31761],{"class":51,"line":8712},[49,31762,31763],{"class":66},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[49,31765,31766,31769,31771,31773,31776,31778,31781,31783,31785],{"class":51,"line":8718},[49,31767,31768],{"class":73},"    device",[49,31770,78],{"class":77},[49,31772,30982],{"class":73},[49,31774,31775],{"class":59},"\"cuda\"",[49,31777,2403],{"class":77},[49,31779,31780],{"class":73}," torch.cuda.is_available() ",[49,31782,2400],{"class":77},[49,31784,31007],{"class":59},[49,31786,847],{"class":73},[49,31788,31789],{"class":51,"line":8730},[49,31790,31791],{"class":66},"    # 如果就是想指定用cpu用下方代码:\n",[49,31793,31794],{"class":51,"line":8742},[49,31795,31796],{"class":66},"    # device=\"cpu\"\n",[49,31798,31799],{"class":51,"line":8754},[49,31800,31801],{"class":66},"    # print(device)\n",[49,31803,31804],{"class":51,"line":10413},[49,31805,399],{"emptyLinePlaceholder":398},[49,31807,31808],{"class":51,"line":10438},[49,31809,31810],{"class":66},"    # 实例化模型\n",[49,31812,31813],{"class":51,"line":10461},[49,31814,31815],{"class":66},"    # 将模型放到设备中去运行\n",[49,31817,31818,31821,31823],{"class":51,"line":10485},[49,31819,31820],{"class":73},"    model",[49,31822,78],{"class":77},[49,31824,31825],{"class":73},"LeNet().to(device)\n",[49,31827,31828,31831,31834,31836,31838,31840,31842,31844],{"class":51,"line":10490},[49,31829,31830],{"class":159},"    print",[49,31832,31833],{"class":73},"(summary(model,(",[49,31835,1047],{"class":159},[49,31837,1207],{"class":73},[49,31839,1730],{"class":159},[49,31841,1207],{"class":73},[49,31843,1730],{"class":159},[49,31845,31846],{"class":73},")))\n",[14,31848,31849],{},[25,31850],{"alt":27,"src":31851},"\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",[14,31853,31854],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[30,31856,31857],{"start":63},[33,31858,31859],{},"训练",[14,31861,31862],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31864,31865],{},"在训练之前可以将数据展示看一下",[40,31867,31869],{"className":30909,"code":31868,"language":30911,"meta":27,"style":27},"# 建立画图的函数，用于展示数据\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",[46,31870,31871,31876,31881,31893,31905,31918,31923,31935,31940,31952,31957,31969,31973,31977,31998,32010,32015,32036,32047,32051,32056,32074,32085,32090,32101,32106,32117,32121,32126,32141,32154,32159,32164,32177,32190,32203,32208,32212,32217,32237,32254,32274,32287,32300,32310,32325],{"__ignoreMap":27},[49,31872,31873],{"class":51,"line":52},[49,31874,31875],{"class":66},"# 建立画图的函数，用于展示数据\n",[49,31877,31878],{"class":51,"line":63},[49,31879,31880],{"class":66},"# torchvision中包含很多内置的数据集\n",[49,31882,31883,31885,31888,31890],{"class":51,"line":70},[49,31884,31268],{"class":77},[49,31886,31887],{"class":73}," sklearn.externals.array_api_compat.torch ",[49,31889,30923],{"class":77},[49,31891,31892],{"class":73}," squeeze\n",[49,31894,31895,31897,31900,31902],{"class":51,"line":219},[49,31896,31268],{"class":77},[49,31898,31899],{"class":73}," torchvision.datasets ",[49,31901,30923],{"class":77},[49,31903,31904],{"class":73}," FashionMNIST\n",[49,31906,31907,31909,31912,31915],{"class":51,"line":233},[49,31908,30923],{"class":77},[49,31910,31911],{"class":73}," numpy ",[49,31913,31914],{"class":77},"as",[49,31916,31917],{"class":73}," np\n",[49,31919,31920],{"class":51,"line":241},[49,31921,31922],{"class":66},"# 引入处理数据集的包\n",[49,31924,31925,31927,31930,31932],{"class":51,"line":1920},[49,31926,31268],{"class":77},[49,31928,31929],{"class":73}," torchvision ",[49,31931,30923],{"class":77},[49,31933,31934],{"class":73}," transforms\n",[49,31936,31937],{"class":51,"line":2011},[49,31938,31939],{"class":66},"# 从torch库中引入数据处理的包\n",[49,31941,31942,31944,31947,31949],{"class":51,"line":2017},[49,31943,30923],{"class":77},[49,31945,31946],{"class":73}," torch.utils.data ",[49,31948,31914],{"class":77},[49,31950,31951],{"class":73}," Data\n",[49,31953,31954],{"class":51,"line":2029},[49,31955,31956],{"class":66},"# 导入画图的库\n",[49,31958,31959,31961,31964,31966],{"class":51,"line":2311},[49,31960,30923],{"class":77},[49,31962,31963],{"class":73}," matplotlib.pyplot ",[49,31965,31914],{"class":77},[49,31967,31968],{"class":73}," plt\n",[49,31970,31971],{"class":51,"line":2316},[49,31972,399],{"emptyLinePlaceholder":398},[49,31974,31975],{"class":51,"line":2322},[49,31976,399],{"emptyLinePlaceholder":398},[49,31978,31979,31982,31984,31987,31990,31992,31995],{"class":51,"line":2327},[49,31980,31981],{"class":73},"train_data",[49,31983,78],{"class":77},[49,31985,31986],{"class":73},"FashionMNIST(",[49,31988,31989],{"class":5913},"root",[49,31991,78],{"class":77},[49,31993,31994],{"class":59},"'.\u002Fdata'",[49,31996,31997],{"class":73},",\n",[49,31999,32000,32003,32005,32008],{"class":51,"line":2341},[49,32001,32002],{"class":5913},"                        train",[49,32004,78],{"class":77},[49,32006,32007],{"class":159},"True",[49,32009,31997],{"class":73},[49,32011,32012],{"class":51,"line":2346},[49,32013,32014],{"class":66},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[49,32016,32017,32020,32022,32025,32028,32030,32033],{"class":51,"line":2352},[49,32018,32019],{"class":5913},"                        transform",[49,32021,78],{"class":77},[49,32023,32024],{"class":73},"transforms.Compose([transforms.Resize(",[49,32026,32027],{"class":5913},"size",[49,32029,78],{"class":77},[49,32031,32032],{"class":159},"224",[49,32034,32035],{"class":73},"),transforms.ToTensor()]),\n",[49,32037,32038,32041,32043,32045],{"class":51,"line":2373},[49,32039,32040],{"class":5913},"                        download",[49,32042,78],{"class":77},[49,32044,32007],{"class":159},[49,32046,847],{"class":73},[49,32048,32049],{"class":51,"line":2378},[49,32050,399],{"emptyLinePlaceholder":398},[49,32052,32053],{"class":51,"line":2392},[49,32054,32055],{"class":66},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[49,32057,32058,32061,32063,32066,32069,32071],{"class":51,"line":2397},[49,32059,32060],{"class":73},"train_loader",[49,32062,78],{"class":77},[49,32064,32065],{"class":73},"Data.DataLoader(",[49,32067,32068],{"class":5913},"dataset",[49,32070,78],{"class":77},[49,32072,32073],{"class":73},"train_data,\n",[49,32075,32076,32079,32081,32083],{"class":51,"line":2426},[49,32077,32078],{"class":5913},"                             batch_size",[49,32080,78],{"class":77},[49,32082,1033],{"class":159},[49,32084,31997],{"class":73},[49,32086,32087],{"class":51,"line":2431},[49,32088,32089],{"class":66},"                             # 数据是否打乱\n",[49,32091,32092,32095,32097,32099],{"class":51,"line":2448},[49,32093,32094],{"class":5913},"                             shuffle",[49,32096,78],{"class":77},[49,32098,32007],{"class":159},[49,32100,31997],{"class":73},[49,32102,32103],{"class":51,"line":2453},[49,32104,32105],{"class":66},"                             # 规定加载数据的进程\n",[49,32107,32108,32111,32113,32115],{"class":51,"line":2458},[49,32109,32110],{"class":5913},"                             num_workers",[49,32112,78],{"class":77},[49,32114,1021],{"class":159},[49,32116,847],{"class":73},[49,32118,32119],{"class":51,"line":2463},[49,32120,399],{"emptyLinePlaceholder":398},[49,32122,32123],{"class":51,"line":2477},[49,32124,32125],{"class":66},"# 获得一个batch的数据\n",[49,32127,32128,32130,32133,32135,32138],{"class":51,"line":2482},[49,32129,3722],{"class":77},[49,32131,32132],{"class":73}," step,(b_x,b_y) ",[49,32134,26732],{"class":77},[49,32136,32137],{"class":159}," enumerate",[49,32139,32140],{"class":73},"(train_loader):\n",[49,32142,32143,32145,32148,32150,32152],{"class":51,"line":3274},[49,32144,3798],{"class":77},[49,32146,32147],{"class":73}," step ",[49,32149,1789],{"class":77},[49,32151,4790],{"class":159},[49,32153,4436],{"class":73},[49,32155,32156],{"class":51,"line":3288},[49,32157,32158],{"class":77},"        break\n",[49,32160,32161],{"class":51,"line":3296},[49,32162,32163],{"class":66},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[49,32165,32166,32169,32171,32174],{"class":51,"line":3301},[49,32167,32168],{"class":73},"batch_x",[49,32170,78],{"class":77},[49,32172,32173],{"class":73},"b_x.squeeze().numpy()  ",[49,32175,32176],{"class":66},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[49,32178,32179,32182,32184,32187],{"class":51,"line":3307},[49,32180,32181],{"class":73},"batch_y",[49,32183,78],{"class":77},[49,32185,32186],{"class":73},"b_y.numpy()   ",[49,32188,32189],{"class":66},"#将张量转换成功numpy数组\n",[49,32191,32192,32195,32197,32200],{"class":51,"line":3313},[49,32193,32194],{"class":73},"class_label",[49,32196,78],{"class":77},[49,32198,32199],{"class":73},"train_data.classes  ",[49,32201,32202],{"class":66},"#训练集标签\n",[49,32204,32205],{"class":51,"line":3318},[49,32206,32207],{"class":66},"# print(class_label)\n",[49,32209,32210],{"class":51,"line":8645},[49,32211,399],{"emptyLinePlaceholder":398},[49,32213,32214],{"class":51,"line":8669},[49,32215,32216],{"class":66},"# 可视化一个batch的图像\n",[49,32218,32219,32222,32225,32227,32229,32231,32233,32235],{"class":51,"line":8674},[49,32220,32221],{"class":73},"plt.figure(",[49,32223,32224],{"class":5913},"figsize",[49,32226,78],{"class":77},[49,32228,841],{"class":73},[49,32230,1327],{"class":159},[49,32232,1207],{"class":73},[49,32234,1148],{"class":159},[49,32236,31028],{"class":73},[49,32238,32239,32241,32244,32246,32249,32251],{"class":51,"line":8680},[49,32240,3722],{"class":77},[49,32242,32243],{"class":73}," ii ",[49,32245,26732],{"class":77},[49,32247,32248],{"class":73}," np.arange(",[49,32250,8055],{"class":159},[49,32252,32253],{"class":73},"(batch_y)):\n",[49,32255,32256,32259,32261,32263,32265,32268,32270,32272],{"class":51,"line":8707},[49,32257,32258],{"class":73},"    plt.subplot(",[49,32260,1122],{"class":159},[49,32262,1207],{"class":73},[49,32264,1430],{"class":159},[49,32266,32267],{"class":73},",ii ",[49,32269,1310],{"class":77},[49,32271,25807],{"class":159},[49,32273,847],{"class":73},[49,32275,32276,32279,32282,32284],{"class":51,"line":8712},[49,32277,32278],{"class":73},"    plt.imshow(batch_x[ii,:,:],",[49,32280,32281],{"class":5913},"cmap",[49,32283,78],{"class":77},[49,32285,32286],{"class":73},"plt.cm.gray)\n",[49,32288,32289,32292,32294,32296,32298],{"class":51,"line":8718},[49,32290,32291],{"class":73},"    plt.title(class_label[batch_y[ii]],",[49,32293,32027],{"class":5913},[49,32295,78],{"class":77},[49,32297,1275],{"class":159},[49,32299,847],{"class":73},[49,32301,32302,32305,32308],{"class":51,"line":8730},[49,32303,32304],{"class":73},"    plt.axis(",[49,32306,32307],{"class":59},"\"off\"",[49,32309,847],{"class":73},[49,32311,32312,32315,32318,32320,32323],{"class":51,"line":8742},[49,32313,32314],{"class":73},"    plt.subplots_adjust(",[49,32316,32317],{"class":5913},"wspace",[49,32319,78],{"class":77},[49,32321,32322],{"class":159},"0.05",[49,32324,847],{"class":73},[49,32326,32327],{"class":51,"line":8754},[49,32328,32329],{"class":73},"plt.show()\n",[14,32331,32332],{},"用matplotlib进行展示的过程可以后续再补",[14,32334,32335],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,32337,32338],{},"训练次数就是按照批次过整个训练集数据的次数",[14,32340,32341],{},"模型训练：",[40,32343,32345],{"className":30909,"code":32344,"language":30911,"meta":27,"style":27},"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",[46,32346,32347,32354,32361,32365,32377,32383,32394,32404,32414,32424,32434,32439,32451,32461,32465,32469,32474,32485,32498,32509,32526,32537,32576,32592,32604,32615,32620,32631,32647,32658,32669,32680,32687,32691,32696,32701,32705,32710,32720,32741,32745,32749,32754,32759,32764,32784,32788,32793,32803,32807,32812,32821,32826,32831,32836,32846,32850,32854,32859,32864,32874,32879,32889,32894,32903,32908,32917,32922,32931,32935,32940,32950,32954,32958,32963,32978,33006,33021,33025,33030,33035,33044,33049,33058,33063,33072,33077,33086,33091,33100,33105,33114,33119,33132,33137,33147,33152,33162,33168,33174,33180,33186,33197,33203,33223,33229,33240,33246,33252,33258,33264,33270,33276,33282,33302,33308,33324,33330,33344,33350,33365,33371,33380,33386,33395,33401,33407,33416,33422,33433,33439,33458,33464,33475,33481,33501,33517,33523,33537,33543,33549,33560,33566,33572,33582,33588,33599,33605,33615,33620,33626,33675,33722,33727,33733,33752,33758,33778,33784,33790,33800,33805,33811,33827,33872,33878,33884,33890,33901,33907,33913,33919,33937,33951,33960,33969,33978,33987,33993,33999,34007,34012,34018,34029,34035,34055,34061,34067,34073,34090,34096,34102,34108,34114,34120,34147,34171,34177,34183,34189,34200,34211,34217,34234,34257,34280,34286,34291,34300,34310,34316,34321,34327,34340,34346,34357,34368,34387],{"__ignoreMap":27},[49,32348,32349,32351],{"class":51,"line":52},[49,32350,30923],{"class":77},[49,32352,32353],{"class":73}," copy\n",[49,32355,32356,32358],{"class":51,"line":63},[49,32357,30923],{"class":77},[49,32359,32360],{"class":73}," time\n",[49,32362,32363],{"class":51,"line":70},[49,32364,399],{"emptyLinePlaceholder":398},[49,32366,32367,32369,32372,32374],{"class":51,"line":219},[49,32368,30923],{"class":77},[49,32370,32371],{"class":73}," pandas ",[49,32373,31914],{"class":77},[49,32375,32376],{"class":73}," pd\n",[49,32378,32379,32381],{"class":51,"line":233},[49,32380,30923],{"class":77},[49,32382,30926],{"class":73},[49,32384,32385,32387,32389,32391],{"class":51,"line":241},[49,32386,31268],{"class":77},[49,32388,31946],{"class":73},[49,32390,30923],{"class":77},[49,32392,32393],{"class":73}," Dataset\n",[49,32395,32396,32398,32400,32402],{"class":51,"line":1920},[49,32397,31268],{"class":77},[49,32399,31899],{"class":73},[49,32401,30923],{"class":77},[49,32403,31904],{"class":73},[49,32405,32406,32408,32410,32412],{"class":51,"line":2011},[49,32407,31268],{"class":77},[49,32409,31929],{"class":73},[49,32411,30923],{"class":77},[49,32413,31934],{"class":73},[49,32415,32416,32418,32420,32422],{"class":51,"line":2017},[49,32417,30923],{"class":77},[49,32419,31946],{"class":73},[49,32421,31914],{"class":77},[49,32423,31951],{"class":73},[49,32425,32426,32428,32430,32432],{"class":51,"line":2029},[49,32427,30923],{"class":77},[49,32429,31963],{"class":73},[49,32431,31914],{"class":77},[49,32433,31968],{"class":73},[49,32435,32436],{"class":51,"line":2311},[49,32437,32438],{"class":66},"# 导入模型\n",[49,32440,32441,32443,32446,32448],{"class":51,"line":2316},[49,32442,31268],{"class":77},[49,32444,32445],{"class":73}," model ",[49,32447,30923],{"class":77},[49,32449,32450],{"class":73}," LeNet\n",[49,32452,32453,32455,32457,32459],{"class":51,"line":2322},[49,32454,31268],{"class":77},[49,32456,31271],{"class":73},[49,32458,30923],{"class":77},[49,32460,31276],{"class":73},[49,32462,32463],{"class":51,"line":2327},[49,32464,399],{"emptyLinePlaceholder":398},[49,32466,32467],{"class":51,"line":2341},[49,32468,399],{"emptyLinePlaceholder":398},[49,32470,32471],{"class":51,"line":2346},[49,32472,32473],{"class":66},"# 处理训练集与验证集函数--->划分数据集\n",[49,32475,32476,32479,32482],{"class":51,"line":2352},[49,32477,32478],{"class":77},"def",[49,32480,32481],{"class":55}," train_val_data_process",[49,32483,32484],{"class":73},"():\n",[49,32486,32487,32490,32492,32494,32496],{"class":51,"line":2373},[49,32488,32489],{"class":73},"    train_data",[49,32491,78],{"class":77},[49,32493,31986],{"class":73},[49,32495,31994],{"class":59},[49,32497,31997],{"class":73},[49,32499,32500,32503,32505,32507],{"class":51,"line":2378},[49,32501,32502],{"class":5913},"                            train",[49,32504,78],{"class":77},[49,32506,32007],{"class":159},[49,32508,31997],{"class":73},[49,32510,32511,32514,32516,32518,32520,32522,32524],{"class":51,"line":2392},[49,32512,32513],{"class":5913},"                            transform",[49,32515,78],{"class":77},[49,32517,32024],{"class":73},[49,32519,32027],{"class":5913},[49,32521,78],{"class":77},[49,32523,1730],{"class":159},[49,32525,32035],{"class":73},[49,32527,32528,32531,32533,32535],{"class":51,"line":2397},[49,32529,32530],{"class":5913},"                            download",[49,32532,78],{"class":77},[49,32534,32007],{"class":159},[49,32536,847],{"class":73},[49,32538,32539,32542,32544,32547,32550,32552,32555,32557,32559,32562,32564,32566,32569,32571,32573],{"class":51,"line":2426},[49,32540,32541],{"class":73},"    train_data,val_data",[49,32543,78],{"class":77},[49,32545,32546],{"class":73},"Data.random_split(train_data,[",[49,32548,32549],{"class":159},"round",[49,32551,841],{"class":73},[49,32553,32554],{"class":159},"0.8",[49,32556,1284],{"class":77},[49,32558,8055],{"class":159},[49,32560,32561],{"class":73},"(train_data)),",[49,32563,32549],{"class":159},[49,32565,841],{"class":73},[49,32567,32568],{"class":159},"0.2",[49,32570,1284],{"class":77},[49,32572,8055],{"class":159},[49,32574,32575],{"class":73},"(train_data))])\n",[49,32577,32578,32581,32583,32586,32588,32590],{"class":51,"line":2431},[49,32579,32580],{"class":73},"    train_dataloader ",[49,32582,78],{"class":77},[49,32584,32585],{"class":73}," Data.DataLoader(",[49,32587,32068],{"class":5913},[49,32589,78],{"class":77},[49,32591,32073],{"class":73},[49,32593,32594,32597,32599,32602],{"class":51,"line":2448},[49,32595,32596],{"class":5913},"                                       batch_size",[49,32598,78],{"class":77},[49,32600,32601],{"class":159},"128",[49,32603,31997],{"class":73},[49,32605,32606,32609,32611,32613],{"class":51,"line":2453},[49,32607,32608],{"class":5913},"                                       shuffle",[49,32610,78],{"class":77},[49,32612,32007],{"class":159},[49,32614,31997],{"class":73},[49,32616,32617],{"class":51,"line":2458},[49,32618,32619],{"class":66},"                                       # 规定8个进程\n",[49,32621,32622,32625,32627,32629],{"class":51,"line":2463},[49,32623,32624],{"class":5913},"                                       num_workers",[49,32626,78],{"class":77},[49,32628,1224],{"class":159},[49,32630,847],{"class":73},[49,32632,32633,32636,32638,32640,32642,32644],{"class":51,"line":2477},[49,32634,32635],{"class":73},"    val_dataloader",[49,32637,78],{"class":77},[49,32639,32065],{"class":73},[49,32641,32068],{"class":5913},[49,32643,78],{"class":77},[49,32645,32646],{"class":73},"val_data,\n",[49,32648,32649,32652,32654,32656],{"class":51,"line":2482},[49,32650,32651],{"class":5913},"                                   batch_size",[49,32653,78],{"class":77},[49,32655,32601],{"class":159},[49,32657,31997],{"class":73},[49,32659,32660,32663,32665,32667],{"class":51,"line":3274},[49,32661,32662],{"class":5913},"                                   shuffle",[49,32664,78],{"class":77},[49,32666,32007],{"class":159},[49,32668,31997],{"class":73},[49,32670,32671,32674,32676,32678],{"class":51,"line":3288},[49,32672,32673],{"class":5913},"                                   num_workers",[49,32675,78],{"class":77},[49,32677,1224],{"class":159},[49,32679,847],{"class":73},[49,32681,32682,32684],{"class":51,"line":3296},[49,32683,4787],{"class":77},[49,32685,32686],{"class":73}," train_dataloader,val_dataloader\n",[49,32688,32689],{"class":51,"line":3301},[49,32690,399],{"emptyLinePlaceholder":398},[49,32692,32693],{"class":51,"line":3307},[49,32694,32695],{"class":66},"# 验证是否出错\n",[49,32697,32698],{"class":51,"line":3313},[49,32699,32700],{"class":66},"# train_val_data_process()\n",[49,32702,32703],{"class":51,"line":3318},[49,32704,399],{"emptyLinePlaceholder":398},[49,32706,32707],{"class":51,"line":8645},[49,32708,32709],{"class":66},"# 定义模型训练函数\n",[49,32711,32712,32714,32717],{"class":51,"line":8669},[49,32713,32478],{"class":77},[49,32715,32716],{"class":55}," train_model_process",[49,32718,32719],{"class":73},"(model,train_dataloader,val_dataloader,num_epochs):\n",[49,32721,32722,32724,32726,32728,32730,32732,32734,32736,32739],{"class":51,"line":8674},[49,32723,31768],{"class":73},[49,32725,78],{"class":77},[49,32727,30982],{"class":73},[49,32729,31775],{"class":59},[49,32731,2403],{"class":77},[49,32733,31780],{"class":73},[49,32735,2400],{"class":77},[49,32737,32738],{"class":59}," 'cpu'",[49,32740,847],{"class":73},[49,32742,32743],{"class":51,"line":8680},[49,32744,399],{"emptyLinePlaceholder":398},[49,32746,32747],{"class":51,"line":8707},[49,32748,399],{"emptyLinePlaceholder":398},[49,32750,32751],{"class":51,"line":8712},[49,32752,32753],{"class":66},"    # 定义优化器\n",[49,32755,32756],{"class":51,"line":8718},[49,32757,32758],{"class":66},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[49,32760,32761],{"class":51,"line":8730},[49,32762,32763],{"class":66},"    # lr为学习率\n",[49,32765,32766,32769,32771,32774,32777,32779,32782],{"class":51,"line":8742},[49,32767,32768],{"class":73},"    optimizer",[49,32770,78],{"class":77},[49,32772,32773],{"class":73},"torch.optim.Adam(model.parameters(),",[49,32775,32776],{"class":5913},"lr",[49,32778,78],{"class":77},[49,32780,32781],{"class":159},"0.001",[49,32783,847],{"class":73},[49,32785,32786],{"class":51,"line":8754},[49,32787,399],{"emptyLinePlaceholder":398},[49,32789,32790],{"class":51,"line":10413},[49,32791,32792],{"class":66},"    # 定义损失函数使用交叉熵损失函数\n",[49,32794,32795,32798,32800],{"class":51,"line":10438},[49,32796,32797],{"class":73},"    criterion",[49,32799,78],{"class":77},[49,32801,32802],{"class":73},"nn.CrossEntropyLoss()\n",[49,32804,32805],{"class":51,"line":10461},[49,32806,399],{"emptyLinePlaceholder":398},[49,32808,32809],{"class":51,"line":10485},[49,32810,32811],{"class":66},"    # 将模型放到GPU中进行训练\n",[49,32813,32814,32816,32818],{"class":51,"line":10490},[49,32815,31820],{"class":73},[49,32817,78],{"class":77},[49,32819,32820],{"class":73},"model.to(device)\n",[49,32822,32823],{"class":51,"line":10495},[49,32824,32825],{"class":66},"    # 复制当前模型的参数\n",[49,32827,32828],{"class":51,"line":10500},[49,32829,32830],{"class":66},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[49,32832,32833],{"class":51,"line":10509},[49,32834,32835],{"class":66},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[49,32837,32838,32841,32843],{"class":51,"line":10514},[49,32839,32840],{"class":73},"    best_model_wts",[49,32842,78],{"class":77},[49,32844,32845],{"class":73},"copy.deepcopy(model.state_dict())\n",[49,32847,32848],{"class":51,"line":10520},[49,32849,399],{"emptyLinePlaceholder":398},[49,32851,32852],{"class":51,"line":10541},[49,32853,399],{"emptyLinePlaceholder":398},[49,32855,32856],{"class":51,"line":10547},[49,32857,32858],{"class":66},"    # 初始化参数\n",[49,32860,32861],{"class":51,"line":10561},[49,32862,32863],{"class":66},"    # 最高准确度\n",[49,32865,32866,32869,32871],{"class":51,"line":10567},[49,32867,32868],{"class":73},"    best_acc",[49,32870,78],{"class":77},[49,32872,32873],{"class":159},"0.0\n",[49,32875,32876],{"class":51,"line":10594},[49,32877,32878],{"class":66},"    # 训练集损失列表\n",[49,32880,32881,32884,32886],{"class":51,"line":10603},[49,32882,32883],{"class":73},"    train_loss_all",[49,32885,78],{"class":77},[49,32887,32888],{"class":73},"[]\n",[49,32890,32891],{"class":51,"line":10609},[49,32892,32893],{"class":66},"    # 验证集函数列表\n",[49,32895,32896,32899,32901],{"class":51,"line":10617},[49,32897,32898],{"class":73},"    val_loss_all",[49,32900,78],{"class":77},[49,32902,32888],{"class":73},[49,32904,32905],{"class":51,"line":10622},[49,32906,32907],{"class":66},"    # 训练集准确度列表\n",[49,32909,32910,32913,32915],{"class":51,"line":17301},[49,32911,32912],{"class":73},"    train_acc_all",[49,32914,78],{"class":77},[49,32916,32888],{"class":73},[49,32918,32919],{"class":51,"line":17307},[49,32920,32921],{"class":66},"    # 验证集准确度列表\n",[49,32923,32924,32927,32929],{"class":51,"line":17330},[49,32925,32926],{"class":73},"    val_acc_all",[49,32928,78],{"class":77},[49,32930,32888],{"class":73},[49,32932,32933],{"class":51,"line":17336},[49,32934,399],{"emptyLinePlaceholder":398},[49,32936,32937],{"class":51,"line":17359},[49,32938,32939],{"class":66},"    # 保存当前时间--->方便看每轮训练的时间\n",[49,32941,32942,32945,32947],{"class":51,"line":17373},[49,32943,32944],{"class":73},"    since",[49,32946,78],{"class":77},[49,32948,32949],{"class":73},"time.time()\n",[49,32951,32952],{"class":51,"line":17393},[49,32953,399],{"emptyLinePlaceholder":398},[49,32955,32956],{"class":51,"line":17399},[49,32957,399],{"emptyLinePlaceholder":398},[49,32959,32960],{"class":51,"line":17410},[49,32961,32962],{"class":66},"    # 准备工作完成--->开始训练模型\n",[49,32964,32965,32967,32970,32972,32975],{"class":51,"line":17433},[49,32966,3898],{"class":77},[49,32968,32969],{"class":73}," epoch ",[49,32971,26732],{"class":77},[49,32973,32974],{"class":159}," range",[49,32976,32977],{"class":73},"(num_epochs):\n",[49,32979,32980,32983,32985,32988,32991,32993,32995,32997,33000,33002,33004],{"class":51,"line":17455},[49,32981,32982],{"class":159},"        print",[49,32984,841],{"class":73},[49,32986,32987],{"class":59},"\"Epoch ",[49,32989,32990],{"class":159},"{}",[49,32992,1413],{"class":59},[49,32994,32990],{"class":159},[49,32996,1080],{"class":59},[49,32998,32999],{"class":73},".format(epoch,num_epochs",[49,33001,1361],{"class":77},[49,33003,1047],{"class":159},[49,33005,31028],{"class":73},[49,33007,33008,33010,33012,33015,33017,33019],{"class":51,"line":17460},[49,33009,32982],{"class":159},[49,33011,841],{"class":73},[49,33013,33014],{"class":59},"\"-\"",[49,33016,1284],{"class":77},[49,33018,1275],{"class":159},[49,33020,847],{"class":73},[49,33022,33023],{"class":51,"line":17466},[49,33024,399],{"emptyLinePlaceholder":398},[49,33026,33027],{"class":51,"line":17480},[49,33028,33029],{"class":66},"        # 初始化参数\n",[49,33031,33032],{"class":51,"line":17493},[49,33033,33034],{"class":66},"        # 训练集损失函数\n",[49,33036,33037,33040,33042],{"class":51,"line":17498},[49,33038,33039],{"class":73},"        train_loss",[49,33041,78],{"class":77},[49,33043,32873],{"class":159},[49,33045,33046],{"class":51,"line":17512},[49,33047,33048],{"class":66},"        # 训练集准确度\n",[49,33050,33051,33054,33056],{"class":51,"line":17517},[49,33052,33053],{"class":73},"        train_corrects",[49,33055,78],{"class":77},[49,33057,3782],{"class":159},[49,33059,33060],{"class":51,"line":17523},[49,33061,33062],{"class":66},"        # 验证集损失函数\n",[49,33064,33065,33068,33070],{"class":51,"line":17528},[49,33066,33067],{"class":73},"        val_loss",[49,33069,78],{"class":77},[49,33071,32873],{"class":159},[49,33073,33074],{"class":51,"line":17542},[49,33075,33076],{"class":66},"        # 验证集准确度\n",[49,33078,33079,33082,33084],{"class":51,"line":17547},[49,33080,33081],{"class":73},"        val_corrects",[49,33083,78],{"class":77},[49,33085,3782],{"class":159},[49,33087,33088],{"class":51,"line":17552},[49,33089,33090],{"class":66},"        # 训练集样本数量\n",[49,33092,33093,33096,33098],{"class":51,"line":17566},[49,33094,33095],{"class":73},"        train_num",[49,33097,78],{"class":77},[49,33099,3782],{"class":159},[49,33101,33102],{"class":51,"line":17578},[49,33103,33104],{"class":66},"        # 验证集样本数量\n",[49,33106,33107,33110,33112],{"class":51,"line":17583},[49,33108,33109],{"class":73},"        val_num",[49,33111,78],{"class":77},[49,33113,3782],{"class":159},[49,33115,33116],{"class":51,"line":17596},[49,33117,33118],{"class":66},"        # 将数据放到设备,并开始训练\n",[49,33120,33121,33123,33125,33127,33129],{"class":51,"line":17601},[49,33122,4100],{"class":77},[49,33124,32132],{"class":73},[49,33126,26732],{"class":77},[49,33128,32137],{"class":159},[49,33130,33131],{"class":73},"(train_dataloader):\n",[49,33133,33134],{"class":51,"line":17606},[49,33135,33136],{"class":66},"            # 将特征放入到训练设备\n",[49,33138,33139,33142,33144],{"class":51,"line":17611},[49,33140,33141],{"class":73},"            b_x",[49,33143,78],{"class":77},[49,33145,33146],{"class":73},"b_x.to(device)\n",[49,33148,33149],{"class":51,"line":17624},[49,33150,33151],{"class":66},"            # 将标签放入到训练设备当中\n",[49,33153,33154,33157,33159],{"class":51,"line":17629},[49,33155,33156],{"class":73},"            b_y",[49,33158,78],{"class":77},[49,33160,33161],{"class":73},"b_y.to(device)\n",[49,33163,33165],{"class":51,"line":33164},98,[49,33166,33167],{"class":66},"            # 设置模型为训练模式\n",[49,33169,33171],{"class":51,"line":33170},99,[49,33172,33173],{"class":73},"            model.train()\n",[49,33175,33177],{"class":51,"line":33176},100,[49,33178,33179],{"class":66},"            # 将数据放到模型当中,开始前向传播\n",[49,33181,33183],{"class":51,"line":33182},101,[49,33184,33185],{"class":66},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[49,33187,33189,33192,33194],{"class":51,"line":33188},102,[49,33190,33191],{"class":73},"            output",[49,33193,78],{"class":77},[49,33195,33196],{"class":73},"model(b_x)\n",[49,33198,33200],{"class":51,"line":33199},103,[49,33201,33202],{"class":66},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[49,33204,33206,33209,33211,33214,33217,33219,33221],{"class":51,"line":33205},104,[49,33207,33208],{"class":73},"            pre_lab",[49,33210,78],{"class":77},[49,33212,33213],{"class":73},"torch.argmax(output,",[49,33215,33216],{"class":5913},"dim",[49,33218,78],{"class":77},[49,33220,1047],{"class":159},[49,33222,847],{"class":73},[49,33224,33226],{"class":51,"line":33225},105,[49,33227,33228],{"class":66},"            # 计算每一个batch的损失函数\n",[49,33230,33232,33235,33237],{"class":51,"line":33231},106,[49,33233,33234],{"class":73},"            loss",[49,33236,78],{"class":77},[49,33238,33239],{"class":73},"criterion(output,b_y)\n",[49,33241,33243],{"class":51,"line":33242},107,[49,33244,33245],{"class":66},"            # 将梯度初始化为0\n",[49,33247,33249],{"class":51,"line":33248},108,[49,33250,33251],{"class":73},"            optimizer.zero_grad()\n",[49,33253,33255],{"class":51,"line":33254},109,[49,33256,33257],{"class":66},"            # 梯度置为0后再进行反向传播\n",[49,33259,33261],{"class":51,"line":33260},110,[49,33262,33263],{"class":73},"            loss.backward()\n",[49,33265,33267],{"class":51,"line":33266},111,[49,33268,33269],{"class":66},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[49,33271,33273],{"class":51,"line":33272},112,[49,33274,33275],{"class":73},"            optimizer.step()\n",[49,33277,33279],{"class":51,"line":33278},113,[49,33280,33281],{"class":66},"            # loss.item()指的是batch的平均损失\n",[49,33283,33285,33288,33290,33293,33295,33298,33300],{"class":51,"line":33284},114,[49,33286,33287],{"class":73},"            train_loss",[49,33289,10174],{"class":77},[49,33291,33292],{"class":73},"loss.item()",[49,33294,1284],{"class":77},[49,33296,33297],{"class":73},"b_x.size(",[49,33299,1021],{"class":159},[49,33301,847],{"class":73},[49,33303,33305],{"class":51,"line":33304},115,[49,33306,33307],{"class":66},"            # 计算每个批次中正确预测的数量\n",[49,33309,33311,33314,33316,33319,33321],{"class":51,"line":33310},116,[49,33312,33313],{"class":73},"            train_corrects",[49,33315,10174],{"class":77},[49,33317,33318],{"class":73},"torch.sum(pre_lab",[49,33320,3646],{"class":77},[49,33322,33323],{"class":73},"b_y.data)\n",[49,33325,33327],{"class":51,"line":33326},117,[49,33328,33329],{"class":66},"            # 计算目前为止一共处理了多少样本\n",[49,33331,33333,33336,33338,33340,33342],{"class":51,"line":33332},118,[49,33334,33335],{"class":73},"            train_num",[49,33337,10174],{"class":77},[49,33339,33297],{"class":73},[49,33341,1021],{"class":159},[49,33343,847],{"class":73},[49,33345,33347],{"class":51,"line":33346},119,[49,33348,33349],{"class":66},"        # 验证数据\n",[49,33351,33353,33355,33358,33360,33362],{"class":51,"line":33352},120,[49,33354,4100],{"class":77},[49,33356,33357],{"class":73}," step ,(b_x,b_y) ",[49,33359,26732],{"class":77},[49,33361,32137],{"class":159},[49,33363,33364],{"class":73},"(val_dataloader):\n",[49,33366,33368],{"class":51,"line":33367},121,[49,33369,33370],{"class":66},"            # 将特征放到验证设备当中\n",[49,33372,33374,33376,33378],{"class":51,"line":33373},122,[49,33375,33141],{"class":73},[49,33377,78],{"class":77},[49,33379,33146],{"class":73},[49,33381,33383],{"class":51,"line":33382},123,[49,33384,33385],{"class":66},"            # 将标签放到放到训练设备当中\n",[49,33387,33389,33391,33393],{"class":51,"line":33388},124,[49,33390,33156],{"class":73},[49,33392,78],{"class":77},[49,33394,33161],{"class":73},[49,33396,33398],{"class":51,"line":33397},125,[49,33399,33400],{"class":66},"            # 开启验证模式，设置模型为评估模式\n",[49,33402,33404],{"class":51,"line":33403},126,[49,33405,33406],{"class":73},"            model.eval()\n",[49,33408,33410,33413],{"class":51,"line":33409},127,[49,33411,33412],{"class":77},"            with",[49,33414,33415],{"class":73}," torch.no_grad():\n",[49,33417,33419],{"class":51,"line":33418},128,[49,33420,33421],{"class":66},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[49,33423,33425,33428,33430],{"class":51,"line":33424},129,[49,33426,33427],{"class":73},"                output ",[49,33429,78],{"class":77},[49,33431,33432],{"class":73}," model(b_x)\n",[49,33434,33436],{"class":51,"line":33435},130,[49,33437,33438],{"class":66},"                # 查找每一行中最大值对应的下标\n",[49,33440,33442,33445,33447,33450,33452,33454,33456],{"class":51,"line":33441},131,[49,33443,33444],{"class":73},"                pre_lab ",[49,33446,78],{"class":77},[49,33448,33449],{"class":73}," torch.argmax(output, ",[49,33451,33216],{"class":5913},[49,33453,78],{"class":77},[49,33455,1047],{"class":159},[49,33457,847],{"class":73},[49,33459,33461],{"class":51,"line":33460},132,[49,33462,33463],{"class":66},"                # 计算验证集上的当前 batch 损失\n",[49,33465,33467,33470,33472],{"class":51,"line":33466},133,[49,33468,33469],{"class":73},"                val_batch_loss ",[49,33471,78],{"class":77},[49,33473,33474],{"class":73}," criterion(output, b_y)\n",[49,33476,33478],{"class":51,"line":33477},134,[49,33479,33480],{"class":66},"                # 对损失函数进行累加（按样本数加权）\n",[49,33482,33484,33487,33489,33492,33494,33497,33499],{"class":51,"line":33483},135,[49,33485,33486],{"class":73},"                val_loss ",[49,33488,10174],{"class":77},[49,33490,33491],{"class":73}," val_batch_loss.item() ",[49,33493,1284],{"class":77},[49,33495,33496],{"class":73}," b_x.size(",[49,33498,1021],{"class":159},[49,33500,847],{"class":73},[49,33502,33504,33507,33509,33512,33514],{"class":51,"line":33503},136,[49,33505,33506],{"class":73},"                val_corrects ",[49,33508,10174],{"class":77},[49,33510,33511],{"class":73}," torch.sum(pre_lab ",[49,33513,3646],{"class":77},[49,33515,33516],{"class":73}," b_y.data)\n",[49,33518,33520],{"class":51,"line":33519},137,[49,33521,33522],{"class":66},"                # 当前用于验证的样本数量\n",[49,33524,33526,33529,33531,33533,33535],{"class":51,"line":33525},138,[49,33527,33528],{"class":73},"            val_num ",[49,33530,10174],{"class":77},[49,33532,33496],{"class":73},[49,33534,1021],{"class":159},[49,33536,847],{"class":73},[49,33538,33540],{"class":51,"line":33539},139,[49,33541,33542],{"class":66},"        # 计算并保存每一次迭代的loss值和准确率\n",[49,33544,33546],{"class":51,"line":33545},140,[49,33547,33548],{"class":66},"        # 计算并保存训练集的loss值\n",[49,33550,33552,33555,33557],{"class":51,"line":33551},141,[49,33553,33554],{"class":73},"        train_loss_all.append(train_loss",[49,33556,1413],{"class":77},[49,33558,33559],{"class":73},"train_num)\n",[49,33561,33563],{"class":51,"line":33562},142,[49,33564,33565],{"class":66},"        # 取双精度\n",[49,33567,33569],{"class":51,"line":33568},143,[49,33570,33571],{"class":66},"        # 计算并保存训练集的准确率\n",[49,33573,33575,33578,33580],{"class":51,"line":33574},144,[49,33576,33577],{"class":73},"        train_acc_all.append(train_corrects.double().item()",[49,33579,1413],{"class":77},[49,33581,33559],{"class":73},[49,33583,33585],{"class":51,"line":33584},145,[49,33586,33587],{"class":66},"        # 计算并保存验证集的loss值\n",[49,33589,33591,33594,33596],{"class":51,"line":33590},146,[49,33592,33593],{"class":73},"        val_loss_all.append(val_loss",[49,33595,1413],{"class":77},[49,33597,33598],{"class":73},"val_num)\n",[49,33600,33602],{"class":51,"line":33601},147,[49,33603,33604],{"class":66},"        # 计算并保存验证集的准确率\n",[49,33606,33608,33611,33613],{"class":51,"line":33607},148,[49,33609,33610],{"class":73},"        val_acc_all.append(val_corrects.double().item()",[49,33612,1413],{"class":77},[49,33614,33598],{"class":73},[49,33616,33618],{"class":51,"line":33617},149,[49,33619,399],{"emptyLinePlaceholder":398},[49,33621,33623],{"class":51,"line":33622},150,[49,33624,33625],{"class":66},"        # 打印训练一轮的loss值和准确率\n",[49,33627,33629,33631,33633,33635,33637,33640,33642,33645,33647,33650,33652,33654,33656,33658,33661,33663,33665,33668,33670,33672],{"class":51,"line":33628},151,[49,33630,32982],{"class":159},[49,33632,841],{"class":73},[49,33634,4289],{"class":59},[49,33636,32990],{"class":159},[49,33638,33639],{"class":59},"train loss:",[49,33641,1725],{"class":159},[49,33643,33644],{"class":77},":.4f",[49,33646,1775],{"class":159},[49,33648,33649],{"class":59}," train acc:",[49,33651,1725],{"class":159},[49,33653,33644],{"class":77},[49,33655,1775],{"class":159},[49,33657,4289],{"class":59},[49,33659,33660],{"class":73},".format(epoch,train_loss_all[",[49,33662,1361],{"class":77},[49,33664,1047],{"class":159},[49,33666,33667],{"class":73},"],train_acc_all[",[49,33669,1361],{"class":77},[49,33671,1047],{"class":159},[49,33673,33674],{"class":73},"]))\n",[49,33676,33678,33680,33682,33684,33686,33689,33691,33693,33695,33698,33700,33702,33704,33706,33709,33711,33713,33716,33718,33720],{"class":51,"line":33677},152,[49,33679,32982],{"class":159},[49,33681,841],{"class":73},[49,33683,4289],{"class":59},[49,33685,32990],{"class":159},[49,33687,33688],{"class":59},"val loss:",[49,33690,1725],{"class":159},[49,33692,33644],{"class":77},[49,33694,1775],{"class":159},[49,33696,33697],{"class":59}," val acc:",[49,33699,1725],{"class":159},[49,33701,33644],{"class":77},[49,33703,1775],{"class":159},[49,33705,4289],{"class":59},[49,33707,33708],{"class":73},".format(epoch,val_loss_all[",[49,33710,1361],{"class":77},[49,33712,1047],{"class":159},[49,33714,33715],{"class":73},"],val_acc_all[",[49,33717,1361],{"class":77},[49,33719,1047],{"class":159},[49,33721,33674],{"class":73},[49,33723,33725],{"class":51,"line":33724},153,[49,33726,399],{"emptyLinePlaceholder":398},[49,33728,33730],{"class":51,"line":33729},154,[49,33731,33732],{"class":66},"        # 判断准确度--->保存最优模型\n",[49,33734,33736,33738,33741,33743,33745,33747,33749],{"class":51,"line":33735},155,[49,33737,3194],{"class":77},[49,33739,33740],{"class":73}," val_acc_all[",[49,33742,1361],{"class":77},[49,33744,1047],{"class":159},[49,33746,1769],{"class":73},[49,33748,1789],{"class":77},[49,33750,33751],{"class":73},"best_acc:\n",[49,33753,33755],{"class":51,"line":33754},156,[49,33756,33757],{"class":66},"            # 保存当前模型准确度\n",[49,33759,33761,33764,33766,33768,33771,33773,33775],{"class":51,"line":33760},157,[49,33762,33763],{"class":73},"            best_acc:",[49,33765,880],{"class":159},[49,33767,78],{"class":77},[49,33769,33770],{"class":73},"val_acc_all[",[49,33772,1361],{"class":77},[49,33774,1047],{"class":159},[49,33776,33777],{"class":73},"]\n",[49,33779,33781],{"class":51,"line":33780},158,[49,33782,33783],{"class":66},"            # 保存当前的准确度\n",[49,33785,33787],{"class":51,"line":33786},159,[49,33788,33789],{"class":66},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[49,33791,33793,33796,33798],{"class":51,"line":33792},160,[49,33794,33795],{"class":73},"            best_model_wts",[49,33797,78],{"class":77},[49,33799,32845],{"class":73},[49,33801,33803],{"class":51,"line":33802},161,[49,33804,399],{"emptyLinePlaceholder":398},[49,33806,33808],{"class":51,"line":33807},162,[49,33809,33810],{"class":66},"        # 计算耗时\n",[49,33812,33814,33817,33819,33822,33824],{"class":51,"line":33813},163,[49,33815,33816],{"class":73},"        time_use",[49,33818,78],{"class":77},[49,33820,33821],{"class":73},"time.time()",[49,33823,1361],{"class":77},[49,33825,33826],{"class":73},"since\n",[49,33828,33830,33832,33834,33837,33839,33842,33844,33846,33848,33850,33852,33855,33858,33861,33863,33866,33868,33870],{"class":51,"line":33829},164,[49,33831,32982],{"class":159},[49,33833,841],{"class":73},[49,33835,33836],{"class":59},"'训练和验证耗费的时间",[49,33838,1725],{"class":159},[49,33840,33841],{"class":77},":.0f",[49,33843,1775],{"class":159},[49,33845,1373],{"class":59},[49,33847,1725],{"class":159},[49,33849,33841],{"class":77},[49,33851,1775],{"class":159},[49,33853,33854],{"class":59},"s'",[49,33856,33857],{"class":73},".format(time_use",[49,33859,33860],{"class":77},"\u002F\u002F",[49,33862,1736],{"class":159},[49,33864,33865],{"class":73},",time_use",[49,33867,1157],{"class":77},[49,33869,1736],{"class":159},[49,33871,31028],{"class":73},[49,33873,33875],{"class":51,"line":33874},165,[49,33876,33877],{"class":66},"    # 选择最优参数\n",[49,33879,33881],{"class":51,"line":33880},166,[49,33882,33883],{"class":66},"    # 加载最高准确率下的模型参数\n",[49,33885,33887],{"class":51,"line":33886},167,[49,33888,33889],{"class":66},"    # model.load_state_dict(best_model_wts)\n",[49,33891,33893,33896,33899],{"class":51,"line":33892},168,[49,33894,33895],{"class":73},"    torch.save(model.state_dict(best_model_wts), ",[49,33897,33898],{"class":59},"'.\u002Fbest_model.pth'",[49,33900,847],{"class":73},[49,33902,33904],{"class":51,"line":33903},169,[49,33905,33906],{"class":66},"    # 或者写成\n",[49,33908,33910],{"class":51,"line":33909},170,[49,33911,33912],{"class":66},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[49,33914,33916],{"class":51,"line":33915},171,[49,33917,33918],{"class":66},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[49,33920,33922,33925,33927,33930,33933,33935],{"class":51,"line":33921},172,[49,33923,33924],{"class":73},"    train_process",[49,33926,78],{"class":77},[49,33928,33929],{"class":73},"pd.DataFrame(",[49,33931,33932],{"class":5913},"data",[49,33934,78],{"class":77},[49,33936,2245],{"class":73},[49,33938,33940,33943,33945,33948],{"class":51,"line":33939},173,[49,33941,33942],{"class":59},"        \"epoch\"",[49,33944,1688],{"class":73},[49,33946,33947],{"class":159},"range",[49,33949,33950],{"class":73},"(num_epochs),\n",[49,33952,33954,33957],{"class":51,"line":33953},174,[49,33955,33956],{"class":59},"        \"train_loss_all\"",[49,33958,33959],{"class":73},":train_loss_all,\n",[49,33961,33963,33966],{"class":51,"line":33962},175,[49,33964,33965],{"class":59},"        \"val_loss_all\"",[49,33967,33968],{"class":73},":val_loss_all,\n",[49,33970,33972,33975],{"class":51,"line":33971},176,[49,33973,33974],{"class":59},"        \"train_acc_all\"",[49,33976,33977],{"class":73},":train_acc_all,\n",[49,33979,33981,33984],{"class":51,"line":33980},177,[49,33982,33983],{"class":59},"        \"val_acc_all\"",[49,33985,33986],{"class":73},":val_acc_all\n",[49,33988,33990],{"class":51,"line":33989},178,[49,33991,33992],{"class":73},"    })\n",[49,33994,33996],{"class":51,"line":33995},179,[49,33997,33998],{"class":66},"    # 返回训练保存的过程\n",[49,34000,34002,34004],{"class":51,"line":34001},180,[49,34003,4787],{"class":77},[49,34005,34006],{"class":73}," train_process\n",[49,34008,34010],{"class":51,"line":34009},181,[49,34011,399],{"emptyLinePlaceholder":398},[49,34013,34015],{"class":51,"line":34014},182,[49,34016,34017],{"class":66},"# 将loss值和精度按照图片的形式展示出来\n",[49,34019,34021,34023,34026],{"class":51,"line":34020},183,[49,34022,32478],{"class":77},[49,34024,34025],{"class":55}," matplot_acc_loss",[49,34027,34028],{"class":73},"(train_process):\n",[49,34030,34032],{"class":51,"line":34031},184,[49,34033,34034],{"class":66},"    # 设置图的大小\n",[49,34036,34038,34041,34043,34045,34047,34049,34051,34053],{"class":51,"line":34037},185,[49,34039,34040],{"class":73},"    plt.figure(",[49,34042,32224],{"class":5913},[49,34044,78],{"class":77},[49,34046,841],{"class":73},[49,34048,1327],{"class":159},[49,34050,1207],{"class":73},[49,34052,1122],{"class":159},[49,34054,31028],{"class":73},[49,34056,34058],{"class":51,"line":34057},186,[49,34059,34060],{"class":66},"    # 设置图中有几张图\n",[49,34062,34064],{"class":51,"line":34063},187,[49,34065,34066],{"class":66},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[49,34068,34070],{"class":51,"line":34069},188,[49,34071,34072],{"class":66},"    # ①loss图\n",[49,34074,34076,34078,34080,34082,34084,34086,34088],{"class":51,"line":34075},189,[49,34077,32258],{"class":73},[49,34079,1047],{"class":159},[49,34081,1207],{"class":73},[49,34083,915],{"class":159},[49,34085,1207],{"class":73},[49,34087,1047],{"class":159},[49,34089,847],{"class":73},[49,34091,34093],{"class":51,"line":34092},190,[49,34094,34095],{"class":66},"    # 补充:\n",[49,34097,34099],{"class":51,"line":34098},191,[49,34100,34101],{"class":66},"    # plt.subplot(nrows, ncols, index)\n",[49,34103,34105],{"class":51,"line":34104},192,[49,34106,34107],{"class":66},"    # nrows：行数\n",[49,34109,34111],{"class":51,"line":34110},193,[49,34112,34113],{"class":66},"    # ncols：列数\n",[49,34115,34117],{"class":51,"line":34116},194,[49,34118,34119],{"class":66},"    # index：目前选中第几个子图（从1开始）\n",[49,34121,34123,34126,34129,34132,34135,34137,34140,34142,34145],{"class":51,"line":34122},195,[49,34124,34125],{"class":73},"    plt.plot(train_process[",[49,34127,34128],{"class":59},"\"epoch\"",[49,34130,34131],{"class":73},"],train_process.train_loss_all,",[49,34133,34134],{"class":59},"'ro-'",[49,34136,1207],{"class":73},[49,34138,34139],{"class":5913},"label",[49,34141,78],{"class":77},[49,34143,34144],{"class":59},"'train loss'",[49,34146,847],{"class":73},[49,34148,34150,34152,34154,34157,34160,34162,34164,34166,34169],{"class":51,"line":34149},196,[49,34151,34125],{"class":73},[49,34153,34128],{"class":59},[49,34155,34156],{"class":73},"],train_process.val_loss_all,",[49,34158,34159],{"class":59},"'bs--'",[49,34161,1207],{"class":73},[49,34163,34139],{"class":5913},[49,34165,78],{"class":77},[49,34167,34168],{"class":59},"'val loss'",[49,34170,847],{"class":73},[49,34172,34174],{"class":51,"line":34173},197,[49,34175,34176],{"class":66},"    # 添加一个图例\n",[49,34178,34180],{"class":51,"line":34179},198,[49,34181,34182],{"class":73},"    plt.legend()\n",[49,34184,34186],{"class":51,"line":34185},199,[49,34187,34188],{"class":66},"    # 给轴添加标签\n",[49,34190,34192,34195,34198],{"class":51,"line":34191},200,[49,34193,34194],{"class":73},"    plt.xlabel(",[49,34196,34197],{"class":59},"'epoch'",[49,34199,847],{"class":73},[49,34201,34203,34206,34209],{"class":51,"line":34202},201,[49,34204,34205],{"class":73},"    plt.ylabel(",[49,34207,34208],{"class":59},"'loss'",[49,34210,847],{"class":73},[49,34212,34214],{"class":51,"line":34213},202,[49,34215,34216],{"class":66},"    # ②准确度图\n",[49,34218,34220,34222,34224,34226,34228,34230,34232],{"class":51,"line":34219},203,[49,34221,32258],{"class":73},[49,34223,1047],{"class":159},[49,34225,1207],{"class":73},[49,34227,915],{"class":159},[49,34229,1207],{"class":73},[49,34231,915],{"class":159},[49,34233,847],{"class":73},[49,34235,34237,34239,34241,34244,34246,34248,34250,34252,34255],{"class":51,"line":34236},204,[49,34238,34125],{"class":73},[49,34240,34128],{"class":59},[49,34242,34243],{"class":73},"],train_process.train_acc_all,",[49,34245,34134],{"class":59},[49,34247,1207],{"class":73},[49,34249,34139],{"class":5913},[49,34251,78],{"class":77},[49,34253,34254],{"class":59},"'train acc'",[49,34256,847],{"class":73},[49,34258,34260,34262,34264,34267,34269,34271,34273,34275,34278],{"class":51,"line":34259},205,[49,34261,34125],{"class":73},[49,34263,34128],{"class":59},[49,34265,34266],{"class":73},"],train_process.val_acc_all,",[49,34268,34159],{"class":59},[49,34270,1207],{"class":73},[49,34272,34139],{"class":5913},[49,34274,78],{"class":77},[49,34276,34277],{"class":59},"'val acc'",[49,34279,847],{"class":73},[49,34281,34283],{"class":51,"line":34282},206,[49,34284,34285],{"class":66},"    # 添加图例\n",[49,34287,34289],{"class":51,"line":34288},207,[49,34290,34182],{"class":73},[49,34292,34294,34296,34298],{"class":51,"line":34293},208,[49,34295,34194],{"class":73},[49,34297,34128],{"class":59},[49,34299,847],{"class":73},[49,34301,34303,34305,34308],{"class":51,"line":34302},209,[49,34304,34205],{"class":73},[49,34306,34307],{"class":59},"\"acc\"",[49,34309,847],{"class":73},[49,34311,34313],{"class":51,"line":34312},210,[49,34314,34315],{"class":73},"    plt.show()\n",[49,34317,34319],{"class":51,"line":34318},211,[49,34320,399],{"emptyLinePlaceholder":398},[49,34322,34324],{"class":51,"line":34323},212,[49,34325,34326],{"class":66},"# 正式开始训练:\n",[49,34328,34330,34332,34334,34336,34338],{"class":51,"line":34329},213,[49,34331,2230],{"class":77},[49,34333,31751],{"class":159},[49,34335,3646],{"class":77},[49,34337,31756],{"class":59},[49,34339,4436],{"class":73},[49,34341,34343],{"class":51,"line":34342},214,[49,34344,34345],{"class":66},"    # 将模型实例化\n",[49,34347,34349,34352,34354],{"class":51,"line":34348},215,[49,34350,34351],{"class":73},"    LeNet",[49,34353,78],{"class":77},[49,34355,34356],{"class":73},"LeNet()\n",[49,34358,34360,34363,34365],{"class":51,"line":34359},216,[49,34361,34362],{"class":73},"    train_dataloader,val_dataloader",[49,34364,78],{"class":77},[49,34366,34367],{"class":73},"train_val_data_process()\n",[49,34369,34371,34373,34375,34378,34381,34383,34385],{"class":51,"line":34370},217,[49,34372,33924],{"class":73},[49,34374,78],{"class":77},[49,34376,34377],{"class":73},"train_model_process(LeNet,train_dataloader,val_dataloader,",[49,34379,34380],{"class":5913},"num_epochs",[49,34382,78],{"class":77},[49,34384,1529],{"class":159},[49,34386,847],{"class":73},[49,34388,34390],{"class":51,"line":34389},218,[49,34391,34392],{"class":73},"    matplot_acc_loss(train_process)\n",[14,34394,34395],{},"画图的补充点学习：",[14,34397,34398],{},[25,34399],{"alt":27,"src":34400},"\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",[30,34402,34403],{"start":70},[33,34404,34405],{},"测试",[40,34407,34409],{"className":30909,"code":34408,"language":30911,"meta":27,"style":27},"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",[46,34410,34411,34417,34427,34439,34449,34454,34464,34474,34478,34483,34492,34509,34521,34538,34549,34565,34570,34581,34592,34603,34610,34614,34619,34629,34634,34651,34659,34663,34668,34677,34686,34690,34695,34700,34705,34712,34717,34729,34739,34749,34754,34758,34763,34772,34777,34793,34798,34803,34808,34822,34827,34841,34845,34850,34865,34870,34882,34886,34891,34903,34908,34916,34921,34926,34936,34941,34950,34955,34960,34964,34969,34974,34990,34998,35003,35008,35067,35073,35078,35089,35097,35105,35109,35114,35118,35123,35131,35136,35152,35157,35167,35177],{"__ignoreMap":27},[49,34412,34413,34415],{"class":51,"line":52},[49,34414,30923],{"class":77},[49,34416,30926],{"class":73},[49,34418,34419,34421,34423,34425],{"class":51,"line":63},[49,34420,30923],{"class":77},[49,34422,31946],{"class":73},[49,34424,31914],{"class":77},[49,34426,31951],{"class":73},[49,34428,34429,34431,34434,34436],{"class":51,"line":70},[49,34430,31268],{"class":77},[49,34432,34433],{"class":73}," jupyter_client.consoleapp ",[49,34435,30923],{"class":77},[49,34437,34438],{"class":73}," classes\n",[49,34440,34441,34443,34445,34447],{"class":51,"line":219},[49,34442,31268],{"class":77},[49,34444,31929],{"class":73},[49,34446,30923],{"class":77},[49,34448,31934],{"class":73},[49,34450,34451],{"class":51,"line":233},[49,34452,34453],{"class":66},"# 导入数据集\n",[49,34455,34456,34458,34460,34462],{"class":51,"line":241},[49,34457,31268],{"class":77},[49,34459,31899],{"class":73},[49,34461,30923],{"class":77},[49,34463,31904],{"class":73},[49,34465,34466,34468,34470,34472],{"class":51,"line":1920},[49,34467,31268],{"class":77},[49,34469,32445],{"class":73},[49,34471,30923],{"class":77},[49,34473,32450],{"class":73},[49,34475,34476],{"class":51,"line":2011},[49,34477,399],{"emptyLinePlaceholder":398},[49,34479,34480],{"class":51,"line":2017},[49,34481,34482],{"class":66},"# 测试数据处理\n",[49,34484,34485,34487,34490],{"class":51,"line":2029},[49,34486,32478],{"class":77},[49,34488,34489],{"class":55}," test_data_process",[49,34491,32484],{"class":73},[49,34493,34494,34497,34499,34501,34503,34505,34507],{"class":51,"line":2311},[49,34495,34496],{"class":73},"    test_data",[49,34498,78],{"class":77},[49,34500,31986],{"class":73},[49,34502,31989],{"class":5913},[49,34504,78],{"class":77},[49,34506,31994],{"class":59},[49,34508,31997],{"class":73},[49,34510,34511,34514,34516,34519],{"class":51,"line":2316},[49,34512,34513],{"class":5913},"                           train",[49,34515,78],{"class":77},[49,34517,34518],{"class":159},"False",[49,34520,31997],{"class":73},[49,34522,34523,34526,34528,34530,34532,34534,34536],{"class":51,"line":2322},[49,34524,34525],{"class":5913},"                           transform",[49,34527,78],{"class":77},[49,34529,32024],{"class":73},[49,34531,32027],{"class":5913},[49,34533,78],{"class":77},[49,34535,1730],{"class":159},[49,34537,32035],{"class":73},[49,34539,34540,34543,34545,34547],{"class":51,"line":2327},[49,34541,34542],{"class":5913},"                           download",[49,34544,78],{"class":77},[49,34546,32007],{"class":159},[49,34548,847],{"class":73},[49,34550,34551,34554,34556,34558,34560,34562],{"class":51,"line":2341},[49,34552,34553],{"class":73},"    test_dataloader",[49,34555,78],{"class":77},[49,34557,32065],{"class":73},[49,34559,32068],{"class":5913},[49,34561,78],{"class":77},[49,34563,34564],{"class":73},"test_data,\n",[49,34566,34567],{"class":51,"line":2346},[49,34568,34569],{"class":66},"                                    # 这里是一张一张进行测试\n",[49,34571,34572,34575,34577,34579],{"class":51,"line":2352},[49,34573,34574],{"class":5913},"                                    batch_size",[49,34576,78],{"class":77},[49,34578,1047],{"class":159},[49,34580,31997],{"class":73},[49,34582,34583,34586,34588,34590],{"class":51,"line":2373},[49,34584,34585],{"class":5913},"                                    shuffle",[49,34587,78],{"class":77},[49,34589,32007],{"class":159},[49,34591,31997],{"class":73},[49,34593,34594,34597,34599,34601],{"class":51,"line":2378},[49,34595,34596],{"class":5913},"                                    num_workers",[49,34598,78],{"class":77},[49,34600,1021],{"class":159},[49,34602,847],{"class":73},[49,34604,34605,34607],{"class":51,"line":2392},[49,34606,4787],{"class":77},[49,34608,34609],{"class":73}," test_dataloader\n",[49,34611,34612],{"class":51,"line":2397},[49,34613,399],{"emptyLinePlaceholder":398},[49,34615,34616],{"class":51,"line":2426},[49,34617,34618],{"class":66},"# 定义模型测试函数\n",[49,34620,34621,34623,34626],{"class":51,"line":2431},[49,34622,32478],{"class":77},[49,34624,34625],{"class":55}," test_model_process",[49,34627,34628],{"class":73},"(model,test_dataloader):\n",[49,34630,34631],{"class":51,"line":2448},[49,34632,34633],{"class":66},"    # 将模型放到设备当中，先进行判断\n",[49,34635,34636,34638,34640,34642,34644,34646,34648],{"class":51,"line":2453},[49,34637,31768],{"class":73},[49,34639,78],{"class":77},[49,34641,31775],{"class":59},[49,34643,2403],{"class":77},[49,34645,31780],{"class":73},[49,34647,2400],{"class":77},[49,34649,34650],{"class":59}," \"cpu\"\n",[49,34652,34653,34655,34657],{"class":51,"line":2458},[49,34654,31820],{"class":73},[49,34656,78],{"class":77},[49,34658,32820],{"class":73},[49,34660,34661],{"class":51,"line":2463},[49,34662,399],{"emptyLinePlaceholder":398},[49,34664,34665],{"class":51,"line":2477},[49,34666,34667],{"class":66},"    # 设置初始化参数\n",[49,34669,34670,34673,34675],{"class":51,"line":2482},[49,34671,34672],{"class":73},"    test_corrects",[49,34674,78],{"class":77},[49,34676,32873],{"class":159},[49,34678,34679,34682,34684],{"class":51,"line":3274},[49,34680,34681],{"class":73},"    test_num",[49,34683,78],{"class":77},[49,34685,3782],{"class":159},[49,34687,34688],{"class":51,"line":3288},[49,34689,399],{"emptyLinePlaceholder":398},[49,34691,34692],{"class":51,"line":3296},[49,34693,34694],{"class":66},"    # 进行模型测试\n",[49,34696,34697],{"class":51,"line":3301},[49,34698,34699],{"class":66},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[49,34701,34702],{"class":51,"line":3307},[49,34703,34704],{"class":66},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[49,34706,34707,34710],{"class":51,"line":3313},[49,34708,34709],{"class":77},"    with",[49,34711,33415],{"class":73},[49,34713,34714],{"class":51,"line":3318},[49,34715,34716],{"class":66},"        # 从数据中进行\n",[49,34718,34719,34721,34724,34726],{"class":51,"line":8645},[49,34720,4100],{"class":77},[49,34722,34723],{"class":73}," test_data_x,test_data_y ",[49,34725,26732],{"class":77},[49,34727,34728],{"class":73}," test_dataloader:\n",[49,34730,34731,34734,34736],{"class":51,"line":8669},[49,34732,34733],{"class":73},"            test_data_x",[49,34735,78],{"class":77},[49,34737,34738],{"class":73},"test_data_x.to(device)\n",[49,34740,34741,34744,34746],{"class":51,"line":8674},[49,34742,34743],{"class":73},"            test_data_y",[49,34745,78],{"class":77},[49,34747,34748],{"class":73},"test_data_y.to(device)\n",[49,34750,34751],{"class":51,"line":8680},[49,34752,34753],{"class":66},"            # 设置为验证模式\n",[49,34755,34756],{"class":51,"line":8707},[49,34757,33406],{"class":73},[49,34759,34760],{"class":51,"line":8712},[49,34761,34762],{"class":66},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[49,34764,34765,34767,34769],{"class":51,"line":8718},[49,34766,33191],{"class":73},[49,34768,78],{"class":77},[49,34770,34771],{"class":73},"model(test_data_x)\n",[49,34773,34774],{"class":51,"line":8730},[49,34775,34776],{"class":66},"            # 查找每一行中最大值对应的下标\n",[49,34778,34779,34781,34783,34785,34787,34789,34791],{"class":51,"line":8742},[49,34780,33208],{"class":73},[49,34782,78],{"class":77},[49,34784,33213],{"class":73},[49,34786,33216],{"class":5913},[49,34788,78],{"class":77},[49,34790,1047],{"class":159},[49,34792,847],{"class":73},[49,34794,34795],{"class":51,"line":8754},[49,34796,34797],{"class":66},"            # 计算正确率\n",[49,34799,34800],{"class":51,"line":10413},[49,34801,34802],{"class":66},"            # .data表示是一个不带梯度信息的tensor\n",[49,34804,34805],{"class":51,"line":10438},[49,34806,34807],{"class":66},"            # 如果预测正确，则准确度test_corrects加1\n",[49,34809,34810,34813,34815,34817,34819],{"class":51,"line":10461},[49,34811,34812],{"class":73},"            test_corrects",[49,34814,10174],{"class":77},[49,34816,33318],{"class":73},[49,34818,3646],{"class":77},[49,34820,34821],{"class":73},"test_data_y.data)\n",[49,34823,34824],{"class":51,"line":10485},[49,34825,34826],{"class":66},"            # 将所有的测试样本进行累计\n",[49,34828,34829,34832,34834,34837,34839],{"class":51,"line":10490},[49,34830,34831],{"class":73},"            test_num",[49,34833,10174],{"class":77},[49,34835,34836],{"class":73},"test_data_x.size(",[49,34838,1021],{"class":159},[49,34840,847],{"class":73},[49,34842,34843],{"class":51,"line":10495},[49,34844,399],{"emptyLinePlaceholder":398},[49,34846,34847],{"class":51,"line":10500},[49,34848,34849],{"class":66},"        # 计算准确度\n",[49,34851,34852,34855,34857,34860,34862],{"class":51,"line":10509},[49,34853,34854],{"class":73},"        test_acc",[49,34856,78],{"class":77},[49,34858,34859],{"class":73},"test_corrects.double().item()",[49,34861,1413],{"class":77},[49,34863,34864],{"class":73},"test_num\n",[49,34866,34867],{"class":51,"line":10514},[49,34868,34869],{"class":66},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[49,34871,34872,34874,34876,34879],{"class":51,"line":10520},[49,34873,32982],{"class":159},[49,34875,841],{"class":73},[49,34877,34878],{"class":59},"\"测试的准确率：\"",[49,34880,34881],{"class":73},",test_acc)\n",[49,34883,34884],{"class":51,"line":10541},[49,34885,399],{"emptyLinePlaceholder":398},[49,34887,34888],{"class":51,"line":10547},[49,34889,34890],{"class":66},"# 实现模型的测试功能\n",[49,34892,34893,34895,34897,34899,34901],{"class":51,"line":10561},[49,34894,2230],{"class":77},[49,34896,31751],{"class":159},[49,34898,3646],{"class":77},[49,34900,31756],{"class":59},[49,34902,4436],{"class":73},[49,34904,34905],{"class":51,"line":10567},[49,34906,34907],{"class":66},"    # 加载模型\n",[49,34909,34910,34912,34914],{"class":51,"line":10594},[49,34911,31820],{"class":73},[49,34913,78],{"class":77},[49,34915,34356],{"class":73},[49,34917,34918],{"class":51,"line":10603},[49,34919,34920],{"class":66},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[49,34922,34923],{"class":51,"line":10609},[49,34924,34925],{"class":66},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[49,34927,34928,34931,34934],{"class":51,"line":10617},[49,34929,34930],{"class":73},"    model.load_state_dict(torch.load(",[49,34932,34933],{"class":59},"'best_model.pth'",[49,34935,31028],{"class":73},[49,34937,34938],{"class":51,"line":10622},[49,34939,34940],{"class":66},"    # 数据加载\n",[49,34942,34943,34945,34947],{"class":51,"line":17301},[49,34944,34553],{"class":73},[49,34946,78],{"class":77},[49,34948,34949],{"class":73},"test_data_process()\n",[49,34951,34952],{"class":51,"line":17307},[49,34953,34954],{"class":66},"    # 加载模型测试的函数\n",[49,34956,34957],{"class":51,"line":17330},[49,34958,34959],{"class":73},"    test_model_process(model,test_dataloader)\n",[49,34961,34962],{"class":51,"line":17336},[49,34963,399],{"emptyLinePlaceholder":398},[49,34965,34966],{"class":51,"line":17359},[49,34967,34968],{"class":66},"    # 验证集推理实现：\n",[49,34970,34971],{"class":51,"line":17373},[49,34972,34973],{"class":66},"    # 加载数据加载的更详细一些\n",[49,34975,34976,34978,34980,34982,34984,34986,34988],{"class":51,"line":17393},[49,34977,31768],{"class":73},[49,34979,78],{"class":77},[49,34981,31775],{"class":59},[49,34983,2403],{"class":77},[49,34985,31780],{"class":73},[49,34987,2400],{"class":77},[49,34989,34650],{"class":59},[49,34991,34992,34994,34996],{"class":51,"line":17399},[49,34993,31820],{"class":73},[49,34995,78],{"class":77},[49,34997,32820],{"class":73},[49,34999,35000],{"class":51,"line":17410},[49,35001,35002],{"class":66},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[49,35004,35005],{"class":51,"line":17433},[49,35006,35007],{"class":66},"    # 顺序不可改变\n",[49,35009,35010,35013,35015,35017,35020,35022,35025,35027,35030,35032,35035,35037,35040,35042,35045,35047,35050,35052,35055,35057,35060,35062,35065],{"class":51,"line":17455},[49,35011,35012],{"class":73},"    classes",[49,35014,78],{"class":77},[49,35016,1719],{"class":73},[49,35018,35019],{"class":59},"'T-shirt\u002Ftop'",[49,35021,1207],{"class":73},[49,35023,35024],{"class":59},"'Trouser'",[49,35026,1207],{"class":73},[49,35028,35029],{"class":59},"'Pullover'",[49,35031,1207],{"class":73},[49,35033,35034],{"class":59},"'Dress'",[49,35036,1207],{"class":73},[49,35038,35039],{"class":59},"'Coat'",[49,35041,1207],{"class":73},[49,35043,35044],{"class":59},"'Sandal'",[49,35046,1207],{"class":73},[49,35048,35049],{"class":59},"'Shirt'",[49,35051,1207],{"class":73},[49,35053,35054],{"class":59},"'Sneaker'",[49,35056,1207],{"class":73},[49,35058,35059],{"class":59},"'Bag'",[49,35061,1207],{"class":73},[49,35063,35064],{"class":59},"'Ankle boot'",[49,35066,33777],{"class":73},[49,35068,35069,35071],{"class":51,"line":17460},[49,35070,34709],{"class":77},[49,35072,33415],{"class":73},[49,35074,35075],{"class":51,"line":17466},[49,35076,35077],{"class":66},"        # 将数据和标签都放到设备当中\n",[49,35079,35080,35082,35085,35087],{"class":51,"line":17480},[49,35081,4100],{"class":77},[49,35083,35084],{"class":73}," b_x,b_y ",[49,35086,26732],{"class":77},[49,35088,34728],{"class":73},[49,35090,35091,35093,35095],{"class":51,"line":17493},[49,35092,33141],{"class":73},[49,35094,78],{"class":77},[49,35096,33146],{"class":73},[49,35098,35099,35101,35103],{"class":51,"line":17498},[49,35100,33156],{"class":73},[49,35102,78],{"class":77},[49,35104,33161],{"class":73},[49,35106,35107],{"class":51,"line":17512},[49,35108,399],{"emptyLinePlaceholder":398},[49,35110,35111],{"class":51,"line":17517},[49,35112,35113],{"class":66},"            # 设置模型为验证模式\n",[49,35115,35116],{"class":51,"line":17523},[49,35117,33406],{"class":73},[49,35119,35120],{"class":51,"line":17528},[49,35121,35122],{"class":66},"            # 模型推理结果\n",[49,35124,35125,35127,35129],{"class":51,"line":17542},[49,35126,33191],{"class":73},[49,35128,78],{"class":77},[49,35130,33196],{"class":73},[49,35132,35133],{"class":51,"line":17547},[49,35134,35135],{"class":66},"            # 获取最大下标，最大下标就是类别号\n",[49,35137,35138,35140,35142,35144,35146,35148,35150],{"class":51,"line":17552},[49,35139,33208],{"class":73},[49,35141,78],{"class":77},[49,35143,33213],{"class":73},[49,35145,33216],{"class":5913},[49,35147,78],{"class":77},[49,35149,1047],{"class":159},[49,35151,847],{"class":73},[49,35153,35154],{"class":51,"line":17566},[49,35155,35156],{"class":66},"            # 取出张量中的数值\n",[49,35158,35159,35162,35164],{"class":51,"line":17578},[49,35160,35161],{"class":73},"            result",[49,35163,78],{"class":77},[49,35165,35166],{"class":73},"pre_lab.item()\n",[49,35168,35169,35172,35174],{"class":51,"line":17583},[49,35170,35171],{"class":73},"            label",[49,35173,78],{"class":77},[49,35175,35176],{"class":73},"b_y.item()\n",[49,35178,35179,35182,35184,35187,35190,35193,35195,35198],{"class":51,"line":17596},[49,35180,35181],{"class":159},"            print",[49,35183,841],{"class":73},[49,35185,35186],{"class":59},"\"预测值：\"",[49,35188,35189],{"class":73},",classes[result],",[49,35191,35192],{"class":59},"\"------\"",[49,35194,1207],{"class":73},[49,35196,35197],{"class":59},"\"真实值：\"",[49,35199,35200],{"class":73},",classes[label])\n",[14,35202,35203],{},"（2）AlexNet",[30,35205,35206],{},[33,35207,35208],{},"神经网络构建",[40,35210,35212],{"className":30909,"code":35211,"language":30911,"meta":27,"style":27},"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",[46,35213,35214,35220,35230,35240,35252,35256,35273,35281,35296,35308,35350,35377,35420,35446,35490,35533,35576,35603,35607,35617,35622,35650,35669,35688,35692,35697,35705,35720,35730,35744,35754,35769,35784,35799,35810,35814,35819,35829,35844,35849,35863,35878,35890,35895,35906,35911,35917,35922,35934,35954,35959,35968],{"__ignoreMap":27},[49,35215,35216,35218],{"class":51,"line":52},[49,35217,30923],{"class":77},[49,35219,30926],{"class":73},[49,35221,35222,35224,35226,35228],{"class":51,"line":63},[49,35223,31268],{"class":77},[49,35225,31271],{"class":73},[49,35227,30923],{"class":77},[49,35229,31276],{"class":73},[49,35231,35232,35234,35236,35238],{"class":51,"line":70},[49,35233,31268],{"class":77},[49,35235,31288],{"class":73},[49,35237,30923],{"class":77},[49,35239,31293],{"class":73},[49,35241,35242,35244,35247,35249],{"class":51,"line":219},[49,35243,30923],{"class":77},[49,35245,35246],{"class":73}," torch.nn.functional ",[49,35248,31914],{"class":77},[49,35250,35251],{"class":73}," F\n",[49,35253,35254],{"class":51,"line":233},[49,35255,399],{"emptyLinePlaceholder":398},[49,35257,35258,35260,35263,35265,35267,35269,35271],{"class":51,"line":241},[49,35259,15391],{"class":77},[49,35261,35262],{"class":55}," AlexNet",[49,35264,841],{"class":73},[49,35266,31309],{"class":55},[49,35268,1387],{"class":73},[49,35270,31314],{"class":55},[49,35272,31317],{"class":73},[49,35274,35275,35277,35279],{"class":51,"line":1920},[49,35276,31332],{"class":77},[49,35278,31335],{"class":159},[49,35280,31338],{"class":73},[49,35282,35283,35285,35288,35290,35292,35294],{"class":51,"line":2011},[49,35284,31348],{"class":159},[49,35286,35287],{"class":73},"(AlexNet,",[49,35289,31354],{"class":159},[49,35291,31357],{"class":73},[49,35293,31360],{"class":159},[49,35295,2674],{"class":73},[49,35297,35298,35300,35303,35305],{"class":51,"line":2017},[49,35299,31376],{"class":159},[49,35301,35302],{"class":73},".ReLu",[49,35304,78],{"class":77},[49,35306,35307],{"class":73},"nn.ReLU()\n",[49,35309,35310,35312,35314,35316,35318,35320,35322,35324,35326,35328,35330,35332,35334,35336,35338,35340,35342,35344,35346,35348],{"class":51,"line":2029},[49,35311,31376],{"class":159},[49,35313,31379],{"class":73},[49,35315,78],{"class":77},[49,35317,31384],{"class":73},[49,35319,31387],{"class":5913},[49,35321,78],{"class":77},[49,35323,1047],{"class":159},[49,35325,1207],{"class":73},[49,35327,31396],{"class":5913},[49,35329,78],{"class":77},[49,35331,1039],{"class":159},[49,35333,1207],{"class":73},[49,35335,31405],{"class":5913},[49,35337,78],{"class":77},[49,35339,1301],{"class":159},[49,35341,1207],{"class":73},[49,35343,31460],{"class":5913},[49,35345,78],{"class":77},[49,35347,1122],{"class":159},[49,35349,847],{"class":73},[49,35351,35352,35354,35356,35358,35361,35363,35365,35367,35369,35371,35373,35375],{"class":51,"line":2311},[49,35353,31376],{"class":159},[49,35355,31444],{"class":73},[49,35357,78],{"class":77},[49,35359,35360],{"class":73},"nn.MaxPool2d(",[49,35362,31405],{"class":5913},[49,35364,78],{"class":77},[49,35366,909],{"class":159},[49,35368,1207],{"class":73},[49,35370,31460],{"class":5913},[49,35372,78],{"class":77},[49,35374,915],{"class":159},[49,35376,847],{"class":73},[49,35378,35379,35381,35383,35385,35387,35389,35391,35393,35395,35397,35399,35402,35404,35406,35408,35410,35412,35414,35416,35418],{"class":51,"line":2316},[49,35380,31376],{"class":159},[49,35382,31473],{"class":73},[49,35384,78],{"class":77},[49,35386,31384],{"class":73},[49,35388,31387],{"class":5913},[49,35390,78],{"class":77},[49,35392,1039],{"class":159},[49,35394,1207],{"class":73},[49,35396,31396],{"class":5913},[49,35398,78],{"class":77},[49,35400,35401],{"class":159},"256",[49,35403,1207],{"class":73},[49,35405,31405],{"class":5913},[49,35407,78],{"class":77},[49,35409,1148],{"class":159},[49,35411,1207],{"class":73},[49,35413,31414],{"class":5913},[49,35415,78],{"class":77},[49,35417,915],{"class":159},[49,35419,847],{"class":73},[49,35421,35422,35424,35426,35428,35430,35432,35434,35436,35438,35440,35442,35444],{"class":51,"line":2322},[49,35423,31376],{"class":159},[49,35425,31508],{"class":73},[49,35427,78],{"class":77},[49,35429,35360],{"class":73},[49,35431,31405],{"class":5913},[49,35433,78],{"class":77},[49,35435,909],{"class":159},[49,35437,1207],{"class":73},[49,35439,31460],{"class":5913},[49,35441,78],{"class":77},[49,35443,915],{"class":159},[49,35445,847],{"class":73},[49,35447,35448,35450,35453,35455,35457,35459,35461,35463,35465,35467,35469,35472,35474,35476,35478,35480,35482,35484,35486,35488],{"class":51,"line":2327},[49,35449,31376],{"class":159},[49,35451,35452],{"class":73},".c5",[49,35454,78],{"class":77},[49,35456,31384],{"class":73},[49,35458,31387],{"class":5913},[49,35460,78],{"class":77},[49,35462,35401],{"class":159},[49,35464,1207],{"class":73},[49,35466,31396],{"class":5913},[49,35468,78],{"class":77},[49,35470,35471],{"class":159},"384",[49,35473,1207],{"class":73},[49,35475,31405],{"class":5913},[49,35477,78],{"class":77},[49,35479,909],{"class":159},[49,35481,1207],{"class":73},[49,35483,31414],{"class":5913},[49,35485,78],{"class":77},[49,35487,1047],{"class":159},[49,35489,847],{"class":73},[49,35491,35492,35494,35497,35499,35501,35503,35505,35507,35509,35511,35513,35515,35517,35519,35521,35523,35525,35527,35529,35531],{"class":51,"line":2341},[49,35493,31376],{"class":159},[49,35495,35496],{"class":73},".c6",[49,35498,78],{"class":77},[49,35500,31384],{"class":73},[49,35502,31387],{"class":5913},[49,35504,78],{"class":77},[49,35506,35471],{"class":159},[49,35508,1207],{"class":73},[49,35510,31396],{"class":5913},[49,35512,78],{"class":77},[49,35514,35471],{"class":159},[49,35516,1207],{"class":73},[49,35518,31405],{"class":5913},[49,35520,78],{"class":77},[49,35522,909],{"class":159},[49,35524,1207],{"class":73},[49,35526,31414],{"class":5913},[49,35528,78],{"class":77},[49,35530,1047],{"class":159},[49,35532,847],{"class":73},[49,35534,35535,35537,35540,35542,35544,35546,35548,35550,35552,35554,35556,35558,35560,35562,35564,35566,35568,35570,35572,35574],{"class":51,"line":2346},[49,35536,31376],{"class":159},[49,35538,35539],{"class":73},".c7",[49,35541,78],{"class":77},[49,35543,31384],{"class":73},[49,35545,31387],{"class":5913},[49,35547,78],{"class":77},[49,35549,35471],{"class":159},[49,35551,1207],{"class":73},[49,35553,31396],{"class":5913},[49,35555,78],{"class":77},[49,35557,35401],{"class":159},[49,35559,1207],{"class":73},[49,35561,31405],{"class":5913},[49,35563,78],{"class":77},[49,35565,909],{"class":159},[49,35567,1207],{"class":73},[49,35569,31414],{"class":5913},[49,35571,78],{"class":77},[49,35573,1047],{"class":159},[49,35575,847],{"class":73},[49,35577,35578,35580,35583,35585,35587,35589,35591,35593,35595,35597,35599,35601],{"class":51,"line":2352},[49,35579,31376],{"class":159},[49,35581,35582],{"class":73},".s8",[49,35584,78],{"class":77},[49,35586,35360],{"class":73},[49,35588,31405],{"class":5913},[49,35590,78],{"class":77},[49,35592,909],{"class":159},[49,35594,1207],{"class":73},[49,35596,31460],{"class":5913},[49,35598,78],{"class":77},[49,35600,915],{"class":159},[49,35602,847],{"class":73},[49,35604,35605],{"class":51,"line":2373},[49,35606,31533],{"class":66},[49,35608,35609,35611,35613,35615],{"class":51,"line":2378},[49,35610,31376],{"class":159},[49,35612,31540],{"class":73},[49,35614,78],{"class":77},[49,35616,31545],{"class":73},[49,35618,35619],{"class":51,"line":2392},[49,35620,35621],{"class":66},"       # 定义全连接层\n",[49,35623,35624,35626,35629,35631,35633,35635,35637,35639,35641,35643,35645,35648],{"class":51,"line":2397},[49,35625,31376],{"class":159},[49,35627,35628],{"class":73},".f1",[49,35630,78],{"class":77},[49,35632,31562],{"class":73},[49,35634,1173],{"class":159},[49,35636,1284],{"class":77},[49,35638,1173],{"class":159},[49,35640,1284],{"class":77},[49,35642,35401],{"class":159},[49,35644,1207],{"class":73},[49,35646,35647],{"class":159},"4096",[49,35649,847],{"class":73},[49,35651,35652,35654,35657,35659,35661,35663,35665,35667],{"class":51,"line":2426},[49,35653,31376],{"class":159},[49,35655,35656],{"class":73},".f2",[49,35658,78],{"class":77},[49,35660,31562],{"class":73},[49,35662,35647],{"class":159},[49,35664,1207],{"class":73},[49,35666,35647],{"class":159},[49,35668,847],{"class":73},[49,35670,35671,35673,35676,35678,35680,35682,35684,35686],{"class":51,"line":2431},[49,35672,31376],{"class":159},[49,35674,35675],{"class":73},".f3",[49,35677,78],{"class":77},[49,35679,31562],{"class":73},[49,35681,35647],{"class":159},[49,35683,1207],{"class":73},[49,35685,1275],{"class":159},[49,35687,847],{"class":73},[49,35689,35690],{"class":51,"line":2448},[49,35691,399],{"emptyLinePlaceholder":398},[49,35693,35694],{"class":51,"line":2453},[49,35695,35696],{"class":66},"    # 定义前向传播\n",[49,35698,35699,35701,35703],{"class":51,"line":2458},[49,35700,31332],{"class":77},[49,35702,31624],{"class":55},[49,35704,31627],{"class":73},[49,35706,35707,35709,35711,35713,35716,35718],{"class":51,"line":2463},[49,35708,31632],{"class":73},[49,35710,78],{"class":77},[49,35712,31354],{"class":159},[49,35714,35715],{"class":73},".ReLu(",[49,35717,31354],{"class":159},[49,35719,31644],{"class":73},[49,35721,35722,35724,35726,35728],{"class":51,"line":2477},[49,35723,31632],{"class":73},[49,35725,78],{"class":77},[49,35727,31354],{"class":159},[49,35729,31655],{"class":73},[49,35731,35732,35734,35736,35738,35740,35742],{"class":51,"line":2482},[49,35733,31632],{"class":73},[49,35735,78],{"class":77},[49,35737,31354],{"class":159},[49,35739,35715],{"class":73},[49,35741,31354],{"class":159},[49,35743,31670],{"class":73},[49,35745,35746,35748,35750,35752],{"class":51,"line":3274},[49,35747,31632],{"class":73},[49,35749,78],{"class":77},[49,35751,31354],{"class":159},[49,35753,31681],{"class":73},[49,35755,35756,35758,35760,35762,35764,35766],{"class":51,"line":3288},[49,35757,31632],{"class":73},[49,35759,78],{"class":77},[49,35761,31354],{"class":159},[49,35763,35715],{"class":73},[49,35765,31354],{"class":159},[49,35767,35768],{"class":73},".c5(x))\n",[49,35770,35771,35773,35775,35777,35779,35781],{"class":51,"line":3296},[49,35772,31632],{"class":73},[49,35774,78],{"class":77},[49,35776,31354],{"class":159},[49,35778,35715],{"class":73},[49,35780,31354],{"class":159},[49,35782,35783],{"class":73},".c6(x))\n",[49,35785,35786,35788,35790,35792,35794,35796],{"class":51,"line":3301},[49,35787,31632],{"class":73},[49,35789,78],{"class":77},[49,35791,31354],{"class":159},[49,35793,35715],{"class":73},[49,35795,31354],{"class":159},[49,35797,35798],{"class":73},".c7(x))\n",[49,35800,35801,35803,35805,35807],{"class":51,"line":3307},[49,35802,31632],{"class":73},[49,35804,78],{"class":77},[49,35806,31354],{"class":159},[49,35808,35809],{"class":73},".s8(x)\n",[49,35811,35812],{"class":51,"line":3313},[49,35813,399],{"emptyLinePlaceholder":398},[49,35815,35816],{"class":51,"line":3318},[49,35817,35818],{"class":66},"        # 展平加线性全连接层\n",[49,35820,35821,35823,35825,35827],{"class":51,"line":8645},[49,35822,31632],{"class":73},[49,35824,78],{"class":77},[49,35826,31354],{"class":159},[49,35828,31692],{"class":73},[49,35830,35831,35833,35835,35837,35839,35841],{"class":51,"line":8669},[49,35832,31632],{"class":73},[49,35834,78],{"class":77},[49,35836,31354],{"class":159},[49,35838,35715],{"class":73},[49,35840,31354],{"class":159},[49,35842,35843],{"class":73},".f1(x))\n",[49,35845,35846],{"class":51,"line":8674},[49,35847,35848],{"class":66},"        # 还需要dropout对神经元随机进行失活\n",[49,35850,35851,35853,35855,35858,35861],{"class":51,"line":8680},[49,35852,31632],{"class":73},[49,35854,78],{"class":77},[49,35856,35857],{"class":73},"F.dropout(x,",[49,35859,35860],{"class":159},"0.5",[49,35862,847],{"class":73},[49,35864,35865,35867,35869,35871,35873,35875],{"class":51,"line":8707},[49,35866,31632],{"class":73},[49,35868,78],{"class":77},[49,35870,31354],{"class":159},[49,35872,35715],{"class":73},[49,35874,31354],{"class":159},[49,35876,35877],{"class":73},".f2(x))\n",[49,35879,35880,35882,35884,35886,35888],{"class":51,"line":8712},[49,35881,31632],{"class":73},[49,35883,78],{"class":77},[49,35885,35857],{"class":73},[49,35887,35860],{"class":159},[49,35889,847],{"class":73},[49,35891,35892],{"class":51,"line":8718},[49,35893,35894],{"class":66},"        # 直接输出\n",[49,35896,35897,35899,35901,35903],{"class":51,"line":8730},[49,35898,31632],{"class":73},[49,35900,78],{"class":77},[49,35902,31354],{"class":159},[49,35904,35905],{"class":73},".f3(x)\n",[49,35907,35908],{"class":51,"line":8742},[49,35909,35910],{"class":66},"        # 前向传播输出\n",[49,35912,35913,35915],{"class":51,"line":8754},[49,35914,15449],{"class":77},[49,35916,31740],{"class":73},[49,35918,35919],{"class":51,"line":10413},[49,35920,35921],{"class":66},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[49,35923,35924,35926,35928,35930,35932],{"class":51,"line":10438},[49,35925,2230],{"class":77},[49,35927,31751],{"class":159},[49,35929,3646],{"class":77},[49,35931,31756],{"class":59},[49,35933,4436],{"class":73},[49,35935,35936,35938,35940,35942,35944,35946,35948,35950,35952],{"class":51,"line":10461},[49,35937,31768],{"class":73},[49,35939,78],{"class":77},[49,35941,30982],{"class":73},[49,35943,31775],{"class":59},[49,35945,2403],{"class":77},[49,35947,31780],{"class":73},[49,35949,2400],{"class":77},[49,35951,31007],{"class":59},[49,35953,847],{"class":73},[49,35955,35956],{"class":51,"line":10485},[49,35957,35958],{"class":66},"    # 模型实例化，然后将实例化的模型放到设备中\n",[49,35960,35961,35963,35965],{"class":51,"line":10490},[49,35962,31820],{"class":73},[49,35964,78],{"class":77},[49,35966,35967],{"class":73},"AlexNet().to(device)\n",[49,35969,35970,35972,35974,35976,35978,35981,35983,35985],{"class":51,"line":10495},[49,35971,31830],{"class":159},[49,35973,31833],{"class":73},[49,35975,1047],{"class":159},[49,35977,1207],{"class":73},[49,35979,35980],{"class":159},"227",[49,35982,1207],{"class":73},[49,35984,35980],{"class":159},[49,35986,31846],{"class":73},[30,35988,35989],{"start":63},[33,35990,31859],{},[40,35992,35994],{"className":30909,"code":35993,"language":30911,"meta":27,"style":27},"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",[46,35995,35996,36002,36008,36018,36024,36034,36044,36054,36064,36074,36078,36089,36099,36103,36107,36111,36119,36131,36141,36157,36167,36199,36213,36223,36233,36237,36247,36261,36271,36281,36291,36297,36301,36305,36309,36313,36317,36325,36345,36349,36353,36357,36361,36365,36381,36385,36389,36397,36401,36405,36413,36417,36421,36425,36433,36437,36441,36445,36449,36457,36461,36469,36473,36481,36485,36493,36497,36505,36509,36513,36521,36525,36529,36533,36545,36569,36583,36587,36591,36595,36603,36607,36615,36619,36627,36631,36639,36643,36651,36655,36663,36667,36679,36683,36691,36695,36703,36707,36711,36715,36719,36727,36731,36747,36751,36759,36763,36767,36771,36775,36779,36783,36787,36803,36807,36819,36823,36835,36839,36851,36855,36863,36867,36875,36879,36883,36888,36894,36898,36907,36911,36928,36932,36941,36945,36963,36976,36981,36994,36998,37002,37010,37014,37018,37026,37030,37038,37042,37050,37054,37058,37100,37142,37146,37150,37166,37170,37186,37190,37194,37202,37206,37210,37222,37260,37265,37270,37279,37283,37297,37307,37313,37319,37325,37331,37335,37339,37345,37349,37353,37361,37365,37383,37387,37391,37395,37411,37415,37419,37423,37427,37431,37451,37471,37475,37479,37483,37491,37499,37503,37519,37539,37559,37563,37567,37575,37583,37587,37591,37595,37607,37611,37621,37629,37646],{"__ignoreMap":27},[49,35997,35998,36000],{"class":51,"line":52},[49,35999,30923],{"class":77},[49,36001,32353],{"class":73},[49,36003,36004,36006],{"class":51,"line":63},[49,36005,30923],{"class":77},[49,36007,32360],{"class":73},[49,36009,36010,36012,36014,36016],{"class":51,"line":70},[49,36011,30923],{"class":77},[49,36013,32371],{"class":73},[49,36015,31914],{"class":77},[49,36017,32376],{"class":73},[49,36019,36020,36022],{"class":51,"line":219},[49,36021,30923],{"class":77},[49,36023,30926],{"class":73},[49,36025,36026,36028,36030,36032],{"class":51,"line":233},[49,36027,31268],{"class":77},[49,36029,31946],{"class":73},[49,36031,30923],{"class":77},[49,36033,32393],{"class":73},[49,36035,36036,36038,36040,36042],{"class":51,"line":241},[49,36037,31268],{"class":77},[49,36039,31899],{"class":73},[49,36041,30923],{"class":77},[49,36043,31904],{"class":73},[49,36045,36046,36048,36050,36052],{"class":51,"line":1920},[49,36047,31268],{"class":77},[49,36049,31929],{"class":73},[49,36051,30923],{"class":77},[49,36053,31934],{"class":73},[49,36055,36056,36058,36060,36062],{"class":51,"line":2011},[49,36057,30923],{"class":77},[49,36059,31946],{"class":73},[49,36061,31914],{"class":77},[49,36063,31951],{"class":73},[49,36065,36066,36068,36070,36072],{"class":51,"line":2017},[49,36067,30923],{"class":77},[49,36069,31963],{"class":73},[49,36071,31914],{"class":77},[49,36073,31968],{"class":73},[49,36075,36076],{"class":51,"line":2029},[49,36077,32438],{"class":66},[49,36079,36080,36082,36084,36086],{"class":51,"line":2311},[49,36081,31268],{"class":77},[49,36083,32445],{"class":73},[49,36085,30923],{"class":77},[49,36087,36088],{"class":73}," AlexNet\n",[49,36090,36091,36093,36095,36097],{"class":51,"line":2316},[49,36092,31268],{"class":77},[49,36094,31271],{"class":73},[49,36096,30923],{"class":77},[49,36098,31276],{"class":73},[49,36100,36101],{"class":51,"line":2322},[49,36102,399],{"emptyLinePlaceholder":398},[49,36104,36105],{"class":51,"line":2327},[49,36106,399],{"emptyLinePlaceholder":398},[49,36108,36109],{"class":51,"line":2341},[49,36110,32473],{"class":66},[49,36112,36113,36115,36117],{"class":51,"line":2346},[49,36114,32478],{"class":77},[49,36116,32481],{"class":55},[49,36118,32484],{"class":73},[49,36120,36121,36123,36125,36127,36129],{"class":51,"line":2352},[49,36122,32489],{"class":73},[49,36124,78],{"class":77},[49,36126,31986],{"class":73},[49,36128,31994],{"class":59},[49,36130,31997],{"class":73},[49,36132,36133,36135,36137,36139],{"class":51,"line":2373},[49,36134,32502],{"class":5913},[49,36136,78],{"class":77},[49,36138,32007],{"class":159},[49,36140,31997],{"class":73},[49,36142,36143,36145,36147,36149,36151,36153,36155],{"class":51,"line":2378},[49,36144,32513],{"class":5913},[49,36146,78],{"class":77},[49,36148,32024],{"class":73},[49,36150,32027],{"class":5913},[49,36152,78],{"class":77},[49,36154,35980],{"class":159},[49,36156,32035],{"class":73},[49,36158,36159,36161,36163,36165],{"class":51,"line":2392},[49,36160,32530],{"class":5913},[49,36162,78],{"class":77},[49,36164,32007],{"class":159},[49,36166,847],{"class":73},[49,36168,36169,36171,36173,36175,36177,36179,36181,36183,36185,36187,36189,36191,36193,36195,36197],{"class":51,"line":2397},[49,36170,32541],{"class":73},[49,36172,78],{"class":77},[49,36174,32546],{"class":73},[49,36176,32549],{"class":159},[49,36178,841],{"class":73},[49,36180,32554],{"class":159},[49,36182,1284],{"class":77},[49,36184,8055],{"class":159},[49,36186,32561],{"class":73},[49,36188,32549],{"class":159},[49,36190,841],{"class":73},[49,36192,32568],{"class":159},[49,36194,1284],{"class":77},[49,36196,8055],{"class":159},[49,36198,32575],{"class":73},[49,36200,36201,36203,36205,36207,36209,36211],{"class":51,"line":2426},[49,36202,32580],{"class":73},[49,36204,78],{"class":77},[49,36206,32585],{"class":73},[49,36208,32068],{"class":5913},[49,36210,78],{"class":77},[49,36212,32073],{"class":73},[49,36214,36215,36217,36219,36221],{"class":51,"line":2431},[49,36216,32596],{"class":5913},[49,36218,78],{"class":77},[49,36220,32601],{"class":159},[49,36222,31997],{"class":73},[49,36224,36225,36227,36229,36231],{"class":51,"line":2448},[49,36226,32608],{"class":5913},[49,36228,78],{"class":77},[49,36230,32007],{"class":159},[49,36232,31997],{"class":73},[49,36234,36235],{"class":51,"line":2453},[49,36236,32619],{"class":66},[49,36238,36239,36241,36243,36245],{"class":51,"line":2458},[49,36240,32624],{"class":5913},[49,36242,78],{"class":77},[49,36244,1224],{"class":159},[49,36246,847],{"class":73},[49,36248,36249,36251,36253,36255,36257,36259],{"class":51,"line":2463},[49,36250,32635],{"class":73},[49,36252,78],{"class":77},[49,36254,32065],{"class":73},[49,36256,32068],{"class":5913},[49,36258,78],{"class":77},[49,36260,32646],{"class":73},[49,36262,36263,36265,36267,36269],{"class":51,"line":2477},[49,36264,32651],{"class":5913},[49,36266,78],{"class":77},[49,36268,32601],{"class":159},[49,36270,31997],{"class":73},[49,36272,36273,36275,36277,36279],{"class":51,"line":2482},[49,36274,32662],{"class":5913},[49,36276,78],{"class":77},[49,36278,32007],{"class":159},[49,36280,31997],{"class":73},[49,36282,36283,36285,36287,36289],{"class":51,"line":3274},[49,36284,32673],{"class":5913},[49,36286,78],{"class":77},[49,36288,1224],{"class":159},[49,36290,847],{"class":73},[49,36292,36293,36295],{"class":51,"line":3288},[49,36294,4787],{"class":77},[49,36296,32686],{"class":73},[49,36298,36299],{"class":51,"line":3296},[49,36300,399],{"emptyLinePlaceholder":398},[49,36302,36303],{"class":51,"line":3301},[49,36304,32695],{"class":66},[49,36306,36307],{"class":51,"line":3307},[49,36308,32700],{"class":66},[49,36310,36311],{"class":51,"line":3313},[49,36312,399],{"emptyLinePlaceholder":398},[49,36314,36315],{"class":51,"line":3318},[49,36316,32709],{"class":66},[49,36318,36319,36321,36323],{"class":51,"line":8645},[49,36320,32478],{"class":77},[49,36322,32716],{"class":55},[49,36324,32719],{"class":73},[49,36326,36327,36329,36331,36333,36335,36337,36339,36341,36343],{"class":51,"line":8669},[49,36328,31768],{"class":73},[49,36330,78],{"class":77},[49,36332,30982],{"class":73},[49,36334,31775],{"class":59},[49,36336,2403],{"class":77},[49,36338,31780],{"class":73},[49,36340,2400],{"class":77},[49,36342,32738],{"class":59},[49,36344,847],{"class":73},[49,36346,36347],{"class":51,"line":8674},[49,36348,399],{"emptyLinePlaceholder":398},[49,36350,36351],{"class":51,"line":8680},[49,36352,399],{"emptyLinePlaceholder":398},[49,36354,36355],{"class":51,"line":8707},[49,36356,32753],{"class":66},[49,36358,36359],{"class":51,"line":8712},[49,36360,32758],{"class":66},[49,36362,36363],{"class":51,"line":8718},[49,36364,32763],{"class":66},[49,36366,36367,36369,36371,36373,36375,36377,36379],{"class":51,"line":8730},[49,36368,32768],{"class":73},[49,36370,78],{"class":77},[49,36372,32773],{"class":73},[49,36374,32776],{"class":5913},[49,36376,78],{"class":77},[49,36378,32781],{"class":159},[49,36380,847],{"class":73},[49,36382,36383],{"class":51,"line":8742},[49,36384,399],{"emptyLinePlaceholder":398},[49,36386,36387],{"class":51,"line":8754},[49,36388,32792],{"class":66},[49,36390,36391,36393,36395],{"class":51,"line":10413},[49,36392,32797],{"class":73},[49,36394,78],{"class":77},[49,36396,32802],{"class":73},[49,36398,36399],{"class":51,"line":10438},[49,36400,399],{"emptyLinePlaceholder":398},[49,36402,36403],{"class":51,"line":10461},[49,36404,32811],{"class":66},[49,36406,36407,36409,36411],{"class":51,"line":10485},[49,36408,31820],{"class":73},[49,36410,78],{"class":77},[49,36412,32820],{"class":73},[49,36414,36415],{"class":51,"line":10490},[49,36416,32825],{"class":66},[49,36418,36419],{"class":51,"line":10495},[49,36420,32830],{"class":66},[49,36422,36423],{"class":51,"line":10500},[49,36424,32835],{"class":66},[49,36426,36427,36429,36431],{"class":51,"line":10509},[49,36428,32840],{"class":73},[49,36430,78],{"class":77},[49,36432,32845],{"class":73},[49,36434,36435],{"class":51,"line":10514},[49,36436,399],{"emptyLinePlaceholder":398},[49,36438,36439],{"class":51,"line":10520},[49,36440,399],{"emptyLinePlaceholder":398},[49,36442,36443],{"class":51,"line":10541},[49,36444,32858],{"class":66},[49,36446,36447],{"class":51,"line":10547},[49,36448,32863],{"class":66},[49,36450,36451,36453,36455],{"class":51,"line":10561},[49,36452,32868],{"class":73},[49,36454,78],{"class":77},[49,36456,32873],{"class":159},[49,36458,36459],{"class":51,"line":10567},[49,36460,32878],{"class":66},[49,36462,36463,36465,36467],{"class":51,"line":10594},[49,36464,32883],{"class":73},[49,36466,78],{"class":77},[49,36468,32888],{"class":73},[49,36470,36471],{"class":51,"line":10603},[49,36472,32893],{"class":66},[49,36474,36475,36477,36479],{"class":51,"line":10609},[49,36476,32898],{"class":73},[49,36478,78],{"class":77},[49,36480,32888],{"class":73},[49,36482,36483],{"class":51,"line":10617},[49,36484,32907],{"class":66},[49,36486,36487,36489,36491],{"class":51,"line":10622},[49,36488,32912],{"class":73},[49,36490,78],{"class":77},[49,36492,32888],{"class":73},[49,36494,36495],{"class":51,"line":17301},[49,36496,32921],{"class":66},[49,36498,36499,36501,36503],{"class":51,"line":17307},[49,36500,32926],{"class":73},[49,36502,78],{"class":77},[49,36504,32888],{"class":73},[49,36506,36507],{"class":51,"line":17330},[49,36508,399],{"emptyLinePlaceholder":398},[49,36510,36511],{"class":51,"line":17336},[49,36512,32939],{"class":66},[49,36514,36515,36517,36519],{"class":51,"line":17359},[49,36516,32944],{"class":73},[49,36518,78],{"class":77},[49,36520,32949],{"class":73},[49,36522,36523],{"class":51,"line":17373},[49,36524,399],{"emptyLinePlaceholder":398},[49,36526,36527],{"class":51,"line":17393},[49,36528,399],{"emptyLinePlaceholder":398},[49,36530,36531],{"class":51,"line":17399},[49,36532,32962],{"class":66},[49,36534,36535,36537,36539,36541,36543],{"class":51,"line":17410},[49,36536,3898],{"class":77},[49,36538,32969],{"class":73},[49,36540,26732],{"class":77},[49,36542,32974],{"class":159},[49,36544,32977],{"class":73},[49,36546,36547,36549,36551,36553,36555,36557,36559,36561,36563,36565,36567],{"class":51,"line":17433},[49,36548,32982],{"class":159},[49,36550,841],{"class":73},[49,36552,32987],{"class":59},[49,36554,32990],{"class":159},[49,36556,1413],{"class":59},[49,36558,32990],{"class":159},[49,36560,1080],{"class":59},[49,36562,32999],{"class":73},[49,36564,1361],{"class":77},[49,36566,1047],{"class":159},[49,36568,31028],{"class":73},[49,36570,36571,36573,36575,36577,36579,36581],{"class":51,"line":17455},[49,36572,32982],{"class":159},[49,36574,841],{"class":73},[49,36576,33014],{"class":59},[49,36578,1284],{"class":77},[49,36580,1275],{"class":159},[49,36582,847],{"class":73},[49,36584,36585],{"class":51,"line":17460},[49,36586,399],{"emptyLinePlaceholder":398},[49,36588,36589],{"class":51,"line":17466},[49,36590,33029],{"class":66},[49,36592,36593],{"class":51,"line":17480},[49,36594,33034],{"class":66},[49,36596,36597,36599,36601],{"class":51,"line":17493},[49,36598,33039],{"class":73},[49,36600,78],{"class":77},[49,36602,32873],{"class":159},[49,36604,36605],{"class":51,"line":17498},[49,36606,33048],{"class":66},[49,36608,36609,36611,36613],{"class":51,"line":17512},[49,36610,33053],{"class":73},[49,36612,78],{"class":77},[49,36614,3782],{"class":159},[49,36616,36617],{"class":51,"line":17517},[49,36618,33062],{"class":66},[49,36620,36621,36623,36625],{"class":51,"line":17523},[49,36622,33067],{"class":73},[49,36624,78],{"class":77},[49,36626,32873],{"class":159},[49,36628,36629],{"class":51,"line":17528},[49,36630,33076],{"class":66},[49,36632,36633,36635,36637],{"class":51,"line":17542},[49,36634,33081],{"class":73},[49,36636,78],{"class":77},[49,36638,3782],{"class":159},[49,36640,36641],{"class":51,"line":17547},[49,36642,33090],{"class":66},[49,36644,36645,36647,36649],{"class":51,"line":17552},[49,36646,33095],{"class":73},[49,36648,78],{"class":77},[49,36650,3782],{"class":159},[49,36652,36653],{"class":51,"line":17566},[49,36654,33104],{"class":66},[49,36656,36657,36659,36661],{"class":51,"line":17578},[49,36658,33109],{"class":73},[49,36660,78],{"class":77},[49,36662,3782],{"class":159},[49,36664,36665],{"class":51,"line":17583},[49,36666,33118],{"class":66},[49,36668,36669,36671,36673,36675,36677],{"class":51,"line":17596},[49,36670,4100],{"class":77},[49,36672,32132],{"class":73},[49,36674,26732],{"class":77},[49,36676,32137],{"class":159},[49,36678,33131],{"class":73},[49,36680,36681],{"class":51,"line":17601},[49,36682,33136],{"class":66},[49,36684,36685,36687,36689],{"class":51,"line":17606},[49,36686,33141],{"class":73},[49,36688,78],{"class":77},[49,36690,33146],{"class":73},[49,36692,36693],{"class":51,"line":17611},[49,36694,33151],{"class":66},[49,36696,36697,36699,36701],{"class":51,"line":17624},[49,36698,33156],{"class":73},[49,36700,78],{"class":77},[49,36702,33161],{"class":73},[49,36704,36705],{"class":51,"line":17629},[49,36706,33167],{"class":66},[49,36708,36709],{"class":51,"line":33164},[49,36710,33173],{"class":73},[49,36712,36713],{"class":51,"line":33170},[49,36714,33179],{"class":66},[49,36716,36717],{"class":51,"line":33176},[49,36718,33185],{"class":66},[49,36720,36721,36723,36725],{"class":51,"line":33182},[49,36722,33191],{"class":73},[49,36724,78],{"class":77},[49,36726,33196],{"class":73},[49,36728,36729],{"class":51,"line":33188},[49,36730,33202],{"class":66},[49,36732,36733,36735,36737,36739,36741,36743,36745],{"class":51,"line":33199},[49,36734,33208],{"class":73},[49,36736,78],{"class":77},[49,36738,33213],{"class":73},[49,36740,33216],{"class":5913},[49,36742,78],{"class":77},[49,36744,1047],{"class":159},[49,36746,847],{"class":73},[49,36748,36749],{"class":51,"line":33205},[49,36750,33228],{"class":66},[49,36752,36753,36755,36757],{"class":51,"line":33225},[49,36754,33234],{"class":73},[49,36756,78],{"class":77},[49,36758,33239],{"class":73},[49,36760,36761],{"class":51,"line":33231},[49,36762,33245],{"class":66},[49,36764,36765],{"class":51,"line":33242},[49,36766,33251],{"class":73},[49,36768,36769],{"class":51,"line":33248},[49,36770,33257],{"class":66},[49,36772,36773],{"class":51,"line":33254},[49,36774,33263],{"class":73},[49,36776,36777],{"class":51,"line":33260},[49,36778,33269],{"class":66},[49,36780,36781],{"class":51,"line":33266},[49,36782,33275],{"class":73},[49,36784,36785],{"class":51,"line":33272},[49,36786,33281],{"class":66},[49,36788,36789,36791,36793,36795,36797,36799,36801],{"class":51,"line":33278},[49,36790,33287],{"class":73},[49,36792,10174],{"class":77},[49,36794,33292],{"class":73},[49,36796,1284],{"class":77},[49,36798,33297],{"class":73},[49,36800,1021],{"class":159},[49,36802,847],{"class":73},[49,36804,36805],{"class":51,"line":33284},[49,36806,33307],{"class":66},[49,36808,36809,36811,36813,36815,36817],{"class":51,"line":33304},[49,36810,33313],{"class":73},[49,36812,10174],{"class":77},[49,36814,33318],{"class":73},[49,36816,3646],{"class":77},[49,36818,33323],{"class":73},[49,36820,36821],{"class":51,"line":33310},[49,36822,33329],{"class":66},[49,36824,36825,36827,36829,36831,36833],{"class":51,"line":33326},[49,36826,33335],{"class":73},[49,36828,10174],{"class":77},[49,36830,33297],{"class":73},[49,36832,1021],{"class":159},[49,36834,847],{"class":73},[49,36836,36837],{"class":51,"line":33332},[49,36838,33349],{"class":66},[49,36840,36841,36843,36845,36847,36849],{"class":51,"line":33346},[49,36842,4100],{"class":77},[49,36844,33357],{"class":73},[49,36846,26732],{"class":77},[49,36848,32137],{"class":159},[49,36850,33364],{"class":73},[49,36852,36853],{"class":51,"line":33352},[49,36854,33370],{"class":66},[49,36856,36857,36859,36861],{"class":51,"line":33367},[49,36858,33141],{"class":73},[49,36860,78],{"class":77},[49,36862,33146],{"class":73},[49,36864,36865],{"class":51,"line":33373},[49,36866,33385],{"class":66},[49,36868,36869,36871,36873],{"class":51,"line":33382},[49,36870,33156],{"class":73},[49,36872,78],{"class":77},[49,36874,33161],{"class":73},[49,36876,36877],{"class":51,"line":33388},[49,36878,33400],{"class":66},[49,36880,36881],{"class":51,"line":33397},[49,36882,33406],{"class":73},[49,36884,36885],{"class":51,"line":33403},[49,36886,36887],{"class":66},"            # 验证时不计算梯度以节省内存\u002F计算\n",[49,36889,36890,36892],{"class":51,"line":33409},[49,36891,33412],{"class":77},[49,36893,33415],{"class":73},[49,36895,36896],{"class":51,"line":33418},[49,36897,33421],{"class":66},[49,36899,36900,36903,36905],{"class":51,"line":33424},[49,36901,36902],{"class":73},"                output",[49,36904,78],{"class":77},[49,36906,33196],{"class":73},[49,36908,36909],{"class":51,"line":33435},[49,36910,33438],{"class":66},[49,36912,36913,36916,36918,36920,36922,36924,36926],{"class":51,"line":33441},[49,36914,36915],{"class":73},"                pre_lab",[49,36917,78],{"class":77},[49,36919,33213],{"class":73},[49,36921,33216],{"class":5913},[49,36923,78],{"class":77},[49,36925,1047],{"class":159},[49,36927,847],{"class":73},[49,36929,36930],{"class":51,"line":33460},[49,36931,33463],{"class":66},[49,36933,36934,36937,36939],{"class":51,"line":33466},[49,36935,36936],{"class":73},"                val_batch_loss",[49,36938,78],{"class":77},[49,36940,33239],{"class":73},[49,36942,36943],{"class":51,"line":33477},[49,36944,33480],{"class":66},[49,36946,36947,36950,36952,36955,36957,36959,36961],{"class":51,"line":33483},[49,36948,36949],{"class":73},"                val_loss",[49,36951,10174],{"class":77},[49,36953,36954],{"class":73},"val_batch_loss.item()",[49,36956,1284],{"class":77},[49,36958,33297],{"class":73},[49,36960,1021],{"class":159},[49,36962,847],{"class":73},[49,36964,36965,36968,36970,36972,36974],{"class":51,"line":33503},[49,36966,36967],{"class":73},"                val_corrects",[49,36969,10174],{"class":77},[49,36971,33318],{"class":73},[49,36973,3646],{"class":77},[49,36975,33323],{"class":73},[49,36977,36978],{"class":51,"line":33519},[49,36979,36980],{"class":66},"            # 当前用于验证的样本数量\n",[49,36982,36983,36986,36988,36990,36992],{"class":51,"line":33525},[49,36984,36985],{"class":73},"            val_num",[49,36987,10174],{"class":77},[49,36989,33297],{"class":73},[49,36991,1021],{"class":159},[49,36993,847],{"class":73},[49,36995,36996],{"class":51,"line":33539},[49,36997,33542],{"class":66},[49,36999,37000],{"class":51,"line":33545},[49,37001,33548],{"class":66},[49,37003,37004,37006,37008],{"class":51,"line":33551},[49,37005,33554],{"class":73},[49,37007,1413],{"class":77},[49,37009,33559],{"class":73},[49,37011,37012],{"class":51,"line":33562},[49,37013,33565],{"class":66},[49,37015,37016],{"class":51,"line":33568},[49,37017,33571],{"class":66},[49,37019,37020,37022,37024],{"class":51,"line":33574},[49,37021,33577],{"class":73},[49,37023,1413],{"class":77},[49,37025,33559],{"class":73},[49,37027,37028],{"class":51,"line":33584},[49,37029,33587],{"class":66},[49,37031,37032,37034,37036],{"class":51,"line":33590},[49,37033,33593],{"class":73},[49,37035,1413],{"class":77},[49,37037,33598],{"class":73},[49,37039,37040],{"class":51,"line":33601},[49,37041,33604],{"class":66},[49,37043,37044,37046,37048],{"class":51,"line":33607},[49,37045,33610],{"class":73},[49,37047,1413],{"class":77},[49,37049,33598],{"class":73},[49,37051,37052],{"class":51,"line":33617},[49,37053,399],{"emptyLinePlaceholder":398},[49,37055,37056],{"class":51,"line":33622},[49,37057,33625],{"class":66},[49,37059,37060,37062,37064,37066,37068,37070,37072,37074,37076,37078,37080,37082,37084,37086,37088,37090,37092,37094,37096,37098],{"class":51,"line":33628},[49,37061,32982],{"class":159},[49,37063,841],{"class":73},[49,37065,4289],{"class":59},[49,37067,32990],{"class":159},[49,37069,33639],{"class":59},[49,37071,1725],{"class":159},[49,37073,33644],{"class":77},[49,37075,1775],{"class":159},[49,37077,33649],{"class":59},[49,37079,1725],{"class":159},[49,37081,33644],{"class":77},[49,37083,1775],{"class":159},[49,37085,4289],{"class":59},[49,37087,33660],{"class":73},[49,37089,1361],{"class":77},[49,37091,1047],{"class":159},[49,37093,33667],{"class":73},[49,37095,1361],{"class":77},[49,37097,1047],{"class":159},[49,37099,33674],{"class":73},[49,37101,37102,37104,37106,37108,37110,37112,37114,37116,37118,37120,37122,37124,37126,37128,37130,37132,37134,37136,37138,37140],{"class":51,"line":33677},[49,37103,32982],{"class":159},[49,37105,841],{"class":73},[49,37107,4289],{"class":59},[49,37109,32990],{"class":159},[49,37111,33688],{"class":59},[49,37113,1725],{"class":159},[49,37115,33644],{"class":77},[49,37117,1775],{"class":159},[49,37119,33697],{"class":59},[49,37121,1725],{"class":159},[49,37123,33644],{"class":77},[49,37125,1775],{"class":159},[49,37127,4289],{"class":59},[49,37129,33708],{"class":73},[49,37131,1361],{"class":77},[49,37133,1047],{"class":159},[49,37135,33715],{"class":73},[49,37137,1361],{"class":77},[49,37139,1047],{"class":159},[49,37141,33674],{"class":73},[49,37143,37144],{"class":51,"line":33724},[49,37145,399],{"emptyLinePlaceholder":398},[49,37147,37148],{"class":51,"line":33729},[49,37149,33732],{"class":66},[49,37151,37152,37154,37156,37158,37160,37162,37164],{"class":51,"line":33735},[49,37153,3194],{"class":77},[49,37155,33740],{"class":73},[49,37157,1361],{"class":77},[49,37159,1047],{"class":159},[49,37161,1769],{"class":73},[49,37163,1789],{"class":77},[49,37165,33751],{"class":73},[49,37167,37168],{"class":51,"line":33754},[49,37169,33757],{"class":66},[49,37171,37172,37174,37176,37178,37180,37182,37184],{"class":51,"line":33760},[49,37173,33763],{"class":73},[49,37175,880],{"class":159},[49,37177,78],{"class":77},[49,37179,33770],{"class":73},[49,37181,1361],{"class":77},[49,37183,1047],{"class":159},[49,37185,33777],{"class":73},[49,37187,37188],{"class":51,"line":33780},[49,37189,33783],{"class":66},[49,37191,37192],{"class":51,"line":33786},[49,37193,33789],{"class":66},[49,37195,37196,37198,37200],{"class":51,"line":33792},[49,37197,33795],{"class":73},[49,37199,78],{"class":77},[49,37201,32845],{"class":73},[49,37203,37204],{"class":51,"line":33802},[49,37205,399],{"emptyLinePlaceholder":398},[49,37207,37208],{"class":51,"line":33807},[49,37209,33810],{"class":66},[49,37211,37212,37214,37216,37218,37220],{"class":51,"line":33813},[49,37213,33816],{"class":73},[49,37215,78],{"class":77},[49,37217,33821],{"class":73},[49,37219,1361],{"class":77},[49,37221,33826],{"class":73},[49,37223,37224,37226,37228,37230,37232,37234,37236,37238,37240,37242,37244,37246,37248,37250,37252,37254,37256,37258],{"class":51,"line":33829},[49,37225,32982],{"class":159},[49,37227,841],{"class":73},[49,37229,33836],{"class":59},[49,37231,1725],{"class":159},[49,37233,33841],{"class":77},[49,37235,1775],{"class":159},[49,37237,1373],{"class":59},[49,37239,1725],{"class":159},[49,37241,33841],{"class":77},[49,37243,1775],{"class":159},[49,37245,33854],{"class":59},[49,37247,33857],{"class":73},[49,37249,33860],{"class":77},[49,37251,1736],{"class":159},[49,37253,33865],{"class":73},[49,37255,1157],{"class":77},[49,37257,1736],{"class":159},[49,37259,31028],{"class":73},[49,37261,37262],{"class":51,"line":33874},[49,37263,37264],{"class":66},"    # 选择最优参数并保存\n",[49,37266,37267],{"class":51,"line":33880},[49,37268,37269],{"class":66},"    # 保存最佳模型权重字典\n",[49,37271,37272,37275,37277],{"class":51,"line":33886},[49,37273,37274],{"class":73},"    torch.save(best_model_wts,",[49,37276,33898],{"class":59},[49,37278,847],{"class":73},[49,37280,37281],{"class":51,"line":33892},[49,37282,33918],{"class":66},[49,37284,37285,37287,37289,37291,37293,37295],{"class":51,"line":33903},[49,37286,33924],{"class":73},[49,37288,78],{"class":77},[49,37290,33929],{"class":73},[49,37292,33932],{"class":5913},[49,37294,78],{"class":77},[49,37296,2245],{"class":73},[49,37298,37299,37301,37303,37305],{"class":51,"line":33909},[49,37300,33942],{"class":59},[49,37302,1688],{"class":73},[49,37304,33947],{"class":159},[49,37306,33950],{"class":73},[49,37308,37309,37311],{"class":51,"line":33915},[49,37310,33956],{"class":59},[49,37312,33959],{"class":73},[49,37314,37315,37317],{"class":51,"line":33921},[49,37316,33965],{"class":59},[49,37318,33968],{"class":73},[49,37320,37321,37323],{"class":51,"line":33939},[49,37322,33974],{"class":59},[49,37324,33977],{"class":73},[49,37326,37327,37329],{"class":51,"line":33953},[49,37328,33983],{"class":59},[49,37330,33986],{"class":73},[49,37332,37333],{"class":51,"line":33962},[49,37334,33992],{"class":73},[49,37336,37337],{"class":51,"line":33971},[49,37338,33998],{"class":66},[49,37340,37341,37343],{"class":51,"line":33980},[49,37342,4787],{"class":77},[49,37344,34006],{"class":73},[49,37346,37347],{"class":51,"line":33989},[49,37348,399],{"emptyLinePlaceholder":398},[49,37350,37351],{"class":51,"line":33995},[49,37352,34017],{"class":66},[49,37354,37355,37357,37359],{"class":51,"line":34001},[49,37356,32478],{"class":77},[49,37358,34025],{"class":55},[49,37360,34028],{"class":73},[49,37362,37363],{"class":51,"line":34009},[49,37364,34034],{"class":66},[49,37366,37367,37369,37371,37373,37375,37377,37379,37381],{"class":51,"line":34014},[49,37368,34040],{"class":73},[49,37370,32224],{"class":5913},[49,37372,78],{"class":77},[49,37374,841],{"class":73},[49,37376,1327],{"class":159},[49,37378,1207],{"class":73},[49,37380,1122],{"class":159},[49,37382,31028],{"class":73},[49,37384,37385],{"class":51,"line":34020},[49,37386,34060],{"class":66},[49,37388,37389],{"class":51,"line":34031},[49,37390,34066],{"class":66},[49,37392,37393],{"class":51,"line":34037},[49,37394,34072],{"class":66},[49,37396,37397,37399,37401,37403,37405,37407,37409],{"class":51,"line":34057},[49,37398,32258],{"class":73},[49,37400,1047],{"class":159},[49,37402,1207],{"class":73},[49,37404,915],{"class":159},[49,37406,1207],{"class":73},[49,37408,1047],{"class":159},[49,37410,847],{"class":73},[49,37412,37413],{"class":51,"line":34063},[49,37414,34095],{"class":66},[49,37416,37417],{"class":51,"line":34069},[49,37418,34101],{"class":66},[49,37420,37421],{"class":51,"line":34075},[49,37422,34107],{"class":66},[49,37424,37425],{"class":51,"line":34092},[49,37426,34113],{"class":66},[49,37428,37429],{"class":51,"line":34098},[49,37430,34119],{"class":66},[49,37432,37433,37435,37437,37439,37441,37443,37445,37447,37449],{"class":51,"line":34104},[49,37434,34125],{"class":73},[49,37436,34128],{"class":59},[49,37438,34131],{"class":73},[49,37440,34134],{"class":59},[49,37442,1207],{"class":73},[49,37444,34139],{"class":5913},[49,37446,78],{"class":77},[49,37448,34144],{"class":59},[49,37450,847],{"class":73},[49,37452,37453,37455,37457,37459,37461,37463,37465,37467,37469],{"class":51,"line":34110},[49,37454,34125],{"class":73},[49,37456,34128],{"class":59},[49,37458,34156],{"class":73},[49,37460,34159],{"class":59},[49,37462,1207],{"class":73},[49,37464,34139],{"class":5913},[49,37466,78],{"class":77},[49,37468,34168],{"class":59},[49,37470,847],{"class":73},[49,37472,37473],{"class":51,"line":34116},[49,37474,34176],{"class":66},[49,37476,37477],{"class":51,"line":34122},[49,37478,34182],{"class":73},[49,37480,37481],{"class":51,"line":34149},[49,37482,34188],{"class":66},[49,37484,37485,37487,37489],{"class":51,"line":34173},[49,37486,34194],{"class":73},[49,37488,34197],{"class":59},[49,37490,847],{"class":73},[49,37492,37493,37495,37497],{"class":51,"line":34179},[49,37494,34205],{"class":73},[49,37496,34208],{"class":59},[49,37498,847],{"class":73},[49,37500,37501],{"class":51,"line":34185},[49,37502,34216],{"class":66},[49,37504,37505,37507,37509,37511,37513,37515,37517],{"class":51,"line":34191},[49,37506,32258],{"class":73},[49,37508,1047],{"class":159},[49,37510,1207],{"class":73},[49,37512,915],{"class":159},[49,37514,1207],{"class":73},[49,37516,915],{"class":159},[49,37518,847],{"class":73},[49,37520,37521,37523,37525,37527,37529,37531,37533,37535,37537],{"class":51,"line":34202},[49,37522,34125],{"class":73},[49,37524,34128],{"class":59},[49,37526,34243],{"class":73},[49,37528,34134],{"class":59},[49,37530,1207],{"class":73},[49,37532,34139],{"class":5913},[49,37534,78],{"class":77},[49,37536,34254],{"class":59},[49,37538,847],{"class":73},[49,37540,37541,37543,37545,37547,37549,37551,37553,37555,37557],{"class":51,"line":34213},[49,37542,34125],{"class":73},[49,37544,34128],{"class":59},[49,37546,34266],{"class":73},[49,37548,34159],{"class":59},[49,37550,1207],{"class":73},[49,37552,34139],{"class":5913},[49,37554,78],{"class":77},[49,37556,34277],{"class":59},[49,37558,847],{"class":73},[49,37560,37561],{"class":51,"line":34219},[49,37562,34285],{"class":66},[49,37564,37565],{"class":51,"line":34236},[49,37566,34182],{"class":73},[49,37568,37569,37571,37573],{"class":51,"line":34259},[49,37570,34194],{"class":73},[49,37572,34128],{"class":59},[49,37574,847],{"class":73},[49,37576,37577,37579,37581],{"class":51,"line":34282},[49,37578,34205],{"class":73},[49,37580,34307],{"class":59},[49,37582,847],{"class":73},[49,37584,37585],{"class":51,"line":34288},[49,37586,34315],{"class":73},[49,37588,37589],{"class":51,"line":34293},[49,37590,399],{"emptyLinePlaceholder":398},[49,37592,37593],{"class":51,"line":34302},[49,37594,34326],{"class":66},[49,37596,37597,37599,37601,37603,37605],{"class":51,"line":34312},[49,37598,2230],{"class":77},[49,37600,31751],{"class":159},[49,37602,3646],{"class":77},[49,37604,31756],{"class":59},[49,37606,4436],{"class":73},[49,37608,37609],{"class":51,"line":34318},[49,37610,34345],{"class":66},[49,37612,37613,37616,37618],{"class":51,"line":34323},[49,37614,37615],{"class":73},"    AlexNet",[49,37617,78],{"class":77},[49,37619,37620],{"class":73},"AlexNet()\n",[49,37622,37623,37625,37627],{"class":51,"line":34329},[49,37624,34362],{"class":73},[49,37626,78],{"class":77},[49,37628,34367],{"class":73},[49,37630,37631,37633,37635,37638,37640,37642,37644],{"class":51,"line":34342},[49,37632,33924],{"class":73},[49,37634,78],{"class":77},[49,37636,37637],{"class":73},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[49,37639,34380],{"class":5913},[49,37641,78],{"class":77},[49,37643,1529],{"class":159},[49,37645,847],{"class":73},[49,37647,37648],{"class":51,"line":34348},[49,37649,34392],{"class":73},[30,37651,37652],{"start":70},[33,37653,34405],{},[40,37655,37657],{"className":30909,"code":37656,"language":30911,"meta":27,"style":27},"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",[46,37658,37659,37665,37675,37685,37695,37699,37709,37719,37730,37734,37738,37742,37750,37766,37776,37792,37802,37816,37820,37830,37840,37850,37856,37860,37864,37872,37876,37892,37900,37904,37908,37916,37924,37928,37932,37936,37940,37946,37950,37960,37968,37976,37980,37984,37988,37996,38000,38016,38020,38024,38028,38040,38044,38056,38060,38064,38076,38080,38090,38094,38098,38110,38114,38122,38126,38130,38138,38142,38150,38154,38158,38162,38166,38170,38186,38194,38198,38202,38250,38256,38260,38270,38278,38286,38290,38294,38298,38302,38310,38314,38330,38334,38342,38350],{"__ignoreMap":27},[49,37660,37661,37663],{"class":51,"line":52},[49,37662,30923],{"class":77},[49,37664,30926],{"class":73},[49,37666,37667,37669,37671,37673],{"class":51,"line":63},[49,37668,30923],{"class":77},[49,37670,31946],{"class":73},[49,37672,31914],{"class":77},[49,37674,31951],{"class":73},[49,37676,37677,37679,37681,37683],{"class":51,"line":70},[49,37678,31268],{"class":77},[49,37680,34433],{"class":73},[49,37682,30923],{"class":77},[49,37684,34438],{"class":73},[49,37686,37687,37689,37691,37693],{"class":51,"line":219},[49,37688,31268],{"class":77},[49,37690,31929],{"class":73},[49,37692,30923],{"class":77},[49,37694,31934],{"class":73},[49,37696,37697],{"class":51,"line":233},[49,37698,34453],{"class":66},[49,37700,37701,37703,37705,37707],{"class":51,"line":241},[49,37702,31268],{"class":77},[49,37704,31899],{"class":73},[49,37706,30923],{"class":77},[49,37708,31904],{"class":73},[49,37710,37711,37713,37715,37717],{"class":51,"line":1920},[49,37712,31268],{"class":77},[49,37714,32445],{"class":73},[49,37716,30923],{"class":77},[49,37718,36088],{"class":73},[49,37720,37721,37723,37726,37728],{"class":51,"line":2011},[49,37722,31268],{"class":77},[49,37724,37725],{"class":73}," 练习.AlexNet.model ",[49,37727,30923],{"class":77},[49,37729,36088],{"class":73},[49,37731,37732],{"class":51,"line":2017},[49,37733,399],{"emptyLinePlaceholder":398},[49,37735,37736],{"class":51,"line":2029},[49,37737,399],{"emptyLinePlaceholder":398},[49,37739,37740],{"class":51,"line":2311},[49,37741,34482],{"class":66},[49,37743,37744,37746,37748],{"class":51,"line":2316},[49,37745,32478],{"class":77},[49,37747,34489],{"class":55},[49,37749,32484],{"class":73},[49,37751,37752,37754,37756,37758,37760,37762,37764],{"class":51,"line":2322},[49,37753,34496],{"class":73},[49,37755,78],{"class":77},[49,37757,31986],{"class":73},[49,37759,31989],{"class":5913},[49,37761,78],{"class":77},[49,37763,31994],{"class":59},[49,37765,31997],{"class":73},[49,37767,37768,37770,37772,37774],{"class":51,"line":2327},[49,37769,34513],{"class":5913},[49,37771,78],{"class":77},[49,37773,34518],{"class":159},[49,37775,31997],{"class":73},[49,37777,37778,37780,37782,37784,37786,37788,37790],{"class":51,"line":2341},[49,37779,34525],{"class":5913},[49,37781,78],{"class":77},[49,37783,32024],{"class":73},[49,37785,32027],{"class":5913},[49,37787,78],{"class":77},[49,37789,35980],{"class":159},[49,37791,32035],{"class":73},[49,37793,37794,37796,37798,37800],{"class":51,"line":2346},[49,37795,34542],{"class":5913},[49,37797,78],{"class":77},[49,37799,32007],{"class":159},[49,37801,847],{"class":73},[49,37803,37804,37806,37808,37810,37812,37814],{"class":51,"line":2352},[49,37805,34553],{"class":73},[49,37807,78],{"class":77},[49,37809,32065],{"class":73},[49,37811,32068],{"class":5913},[49,37813,78],{"class":77},[49,37815,34564],{"class":73},[49,37817,37818],{"class":51,"line":2373},[49,37819,34569],{"class":66},[49,37821,37822,37824,37826,37828],{"class":51,"line":2378},[49,37823,34574],{"class":5913},[49,37825,78],{"class":77},[49,37827,1047],{"class":159},[49,37829,31997],{"class":73},[49,37831,37832,37834,37836,37838],{"class":51,"line":2392},[49,37833,34585],{"class":5913},[49,37835,78],{"class":77},[49,37837,32007],{"class":159},[49,37839,31997],{"class":73},[49,37841,37842,37844,37846,37848],{"class":51,"line":2397},[49,37843,34596],{"class":5913},[49,37845,78],{"class":77},[49,37847,1021],{"class":159},[49,37849,847],{"class":73},[49,37851,37852,37854],{"class":51,"line":2426},[49,37853,4787],{"class":77},[49,37855,34609],{"class":73},[49,37857,37858],{"class":51,"line":2431},[49,37859,399],{"emptyLinePlaceholder":398},[49,37861,37862],{"class":51,"line":2448},[49,37863,34618],{"class":66},[49,37865,37866,37868,37870],{"class":51,"line":2453},[49,37867,32478],{"class":77},[49,37869,34625],{"class":55},[49,37871,34628],{"class":73},[49,37873,37874],{"class":51,"line":2458},[49,37875,34633],{"class":66},[49,37877,37878,37880,37882,37884,37886,37888,37890],{"class":51,"line":2463},[49,37879,31768],{"class":73},[49,37881,78],{"class":77},[49,37883,31775],{"class":59},[49,37885,2403],{"class":77},[49,37887,31780],{"class":73},[49,37889,2400],{"class":77},[49,37891,34650],{"class":59},[49,37893,37894,37896,37898],{"class":51,"line":2477},[49,37895,31820],{"class":73},[49,37897,78],{"class":77},[49,37899,32820],{"class":73},[49,37901,37902],{"class":51,"line":2482},[49,37903,399],{"emptyLinePlaceholder":398},[49,37905,37906],{"class":51,"line":3274},[49,37907,34667],{"class":66},[49,37909,37910,37912,37914],{"class":51,"line":3288},[49,37911,34672],{"class":73},[49,37913,78],{"class":77},[49,37915,32873],{"class":159},[49,37917,37918,37920,37922],{"class":51,"line":3296},[49,37919,34681],{"class":73},[49,37921,78],{"class":77},[49,37923,3782],{"class":159},[49,37925,37926],{"class":51,"line":3301},[49,37927,399],{"emptyLinePlaceholder":398},[49,37929,37930],{"class":51,"line":3307},[49,37931,34694],{"class":66},[49,37933,37934],{"class":51,"line":3313},[49,37935,34699],{"class":66},[49,37937,37938],{"class":51,"line":3318},[49,37939,34704],{"class":66},[49,37941,37942,37944],{"class":51,"line":8645},[49,37943,34709],{"class":77},[49,37945,33415],{"class":73},[49,37947,37948],{"class":51,"line":8669},[49,37949,34716],{"class":66},[49,37951,37952,37954,37956,37958],{"class":51,"line":8674},[49,37953,4100],{"class":77},[49,37955,34723],{"class":73},[49,37957,26732],{"class":77},[49,37959,34728],{"class":73},[49,37961,37962,37964,37966],{"class":51,"line":8680},[49,37963,34733],{"class":73},[49,37965,78],{"class":77},[49,37967,34738],{"class":73},[49,37969,37970,37972,37974],{"class":51,"line":8707},[49,37971,34743],{"class":73},[49,37973,78],{"class":77},[49,37975,34748],{"class":73},[49,37977,37978],{"class":51,"line":8712},[49,37979,34753],{"class":66},[49,37981,37982],{"class":51,"line":8718},[49,37983,33406],{"class":73},[49,37985,37986],{"class":51,"line":8730},[49,37987,34762],{"class":66},[49,37989,37990,37992,37994],{"class":51,"line":8742},[49,37991,33191],{"class":73},[49,37993,78],{"class":77},[49,37995,34771],{"class":73},[49,37997,37998],{"class":51,"line":8754},[49,37999,34776],{"class":66},[49,38001,38002,38004,38006,38008,38010,38012,38014],{"class":51,"line":10413},[49,38003,33208],{"class":73},[49,38005,78],{"class":77},[49,38007,33213],{"class":73},[49,38009,33216],{"class":5913},[49,38011,78],{"class":77},[49,38013,1047],{"class":159},[49,38015,847],{"class":73},[49,38017,38018],{"class":51,"line":10438},[49,38019,34797],{"class":66},[49,38021,38022],{"class":51,"line":10461},[49,38023,34802],{"class":66},[49,38025,38026],{"class":51,"line":10485},[49,38027,34807],{"class":66},[49,38029,38030,38032,38034,38036,38038],{"class":51,"line":10490},[49,38031,34812],{"class":73},[49,38033,10174],{"class":77},[49,38035,33318],{"class":73},[49,38037,3646],{"class":77},[49,38039,34821],{"class":73},[49,38041,38042],{"class":51,"line":10495},[49,38043,34826],{"class":66},[49,38045,38046,38048,38050,38052,38054],{"class":51,"line":10500},[49,38047,34831],{"class":73},[49,38049,10174],{"class":77},[49,38051,34836],{"class":73},[49,38053,1021],{"class":159},[49,38055,847],{"class":73},[49,38057,38058],{"class":51,"line":10509},[49,38059,399],{"emptyLinePlaceholder":398},[49,38061,38062],{"class":51,"line":10514},[49,38063,34849],{"class":66},[49,38065,38066,38068,38070,38072,38074],{"class":51,"line":10520},[49,38067,34854],{"class":73},[49,38069,78],{"class":77},[49,38071,34859],{"class":73},[49,38073,1413],{"class":77},[49,38075,34864],{"class":73},[49,38077,38078],{"class":51,"line":10541},[49,38079,34869],{"class":66},[49,38081,38082,38084,38086,38088],{"class":51,"line":10547},[49,38083,32982],{"class":159},[49,38085,841],{"class":73},[49,38087,34878],{"class":59},[49,38089,34881],{"class":73},[49,38091,38092],{"class":51,"line":10561},[49,38093,399],{"emptyLinePlaceholder":398},[49,38095,38096],{"class":51,"line":10567},[49,38097,34890],{"class":66},[49,38099,38100,38102,38104,38106,38108],{"class":51,"line":10594},[49,38101,2230],{"class":77},[49,38103,31751],{"class":159},[49,38105,3646],{"class":77},[49,38107,31756],{"class":59},[49,38109,4436],{"class":73},[49,38111,38112],{"class":51,"line":10603},[49,38113,34907],{"class":66},[49,38115,38116,38118,38120],{"class":51,"line":10609},[49,38117,31820],{"class":73},[49,38119,78],{"class":77},[49,38121,37620],{"class":73},[49,38123,38124],{"class":51,"line":10617},[49,38125,34920],{"class":66},[49,38127,38128],{"class":51,"line":10622},[49,38129,34925],{"class":66},[49,38131,38132,38134,38136],{"class":51,"line":17301},[49,38133,34930],{"class":73},[49,38135,34933],{"class":59},[49,38137,31028],{"class":73},[49,38139,38140],{"class":51,"line":17307},[49,38141,34940],{"class":66},[49,38143,38144,38146,38148],{"class":51,"line":17330},[49,38145,34553],{"class":73},[49,38147,78],{"class":77},[49,38149,34949],{"class":73},[49,38151,38152],{"class":51,"line":17336},[49,38153,34954],{"class":66},[49,38155,38156],{"class":51,"line":17359},[49,38157,34959],{"class":73},[49,38159,38160],{"class":51,"line":17373},[49,38161,399],{"emptyLinePlaceholder":398},[49,38163,38164],{"class":51,"line":17393},[49,38165,34968],{"class":66},[49,38167,38168],{"class":51,"line":17399},[49,38169,34973],{"class":66},[49,38171,38172,38174,38176,38178,38180,38182,38184],{"class":51,"line":17410},[49,38173,31768],{"class":73},[49,38175,78],{"class":77},[49,38177,31775],{"class":59},[49,38179,2403],{"class":77},[49,38181,31780],{"class":73},[49,38183,2400],{"class":77},[49,38185,34650],{"class":59},[49,38187,38188,38190,38192],{"class":51,"line":17433},[49,38189,31820],{"class":73},[49,38191,78],{"class":77},[49,38193,32820],{"class":73},[49,38195,38196],{"class":51,"line":17455},[49,38197,35002],{"class":66},[49,38199,38200],{"class":51,"line":17460},[49,38201,35007],{"class":66},[49,38203,38204,38206,38208,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228,38230,38232,38234,38236,38238,38240,38242,38244,38246,38248],{"class":51,"line":17466},[49,38205,35012],{"class":73},[49,38207,78],{"class":77},[49,38209,1719],{"class":73},[49,38211,35019],{"class":59},[49,38213,1207],{"class":73},[49,38215,35024],{"class":59},[49,38217,1207],{"class":73},[49,38219,35029],{"class":59},[49,38221,1207],{"class":73},[49,38223,35034],{"class":59},[49,38225,1207],{"class":73},[49,38227,35039],{"class":59},[49,38229,1207],{"class":73},[49,38231,35044],{"class":59},[49,38233,1207],{"class":73},[49,38235,35049],{"class":59},[49,38237,1207],{"class":73},[49,38239,35054],{"class":59},[49,38241,1207],{"class":73},[49,38243,35059],{"class":59},[49,38245,1207],{"class":73},[49,38247,35064],{"class":59},[49,38249,33777],{"class":73},[49,38251,38252,38254],{"class":51,"line":17480},[49,38253,34709],{"class":77},[49,38255,33415],{"class":73},[49,38257,38258],{"class":51,"line":17493},[49,38259,35077],{"class":66},[49,38261,38262,38264,38266,38268],{"class":51,"line":17498},[49,38263,4100],{"class":77},[49,38265,35084],{"class":73},[49,38267,26732],{"class":77},[49,38269,34728],{"class":73},[49,38271,38272,38274,38276],{"class":51,"line":17512},[49,38273,33141],{"class":73},[49,38275,78],{"class":77},[49,38277,33146],{"class":73},[49,38279,38280,38282,38284],{"class":51,"line":17517},[49,38281,33156],{"class":73},[49,38283,78],{"class":77},[49,38285,33161],{"class":73},[49,38287,38288],{"class":51,"line":17523},[49,38289,399],{"emptyLinePlaceholder":398},[49,38291,38292],{"class":51,"line":17528},[49,38293,35113],{"class":66},[49,38295,38296],{"class":51,"line":17542},[49,38297,33406],{"class":73},[49,38299,38300],{"class":51,"line":17547},[49,38301,35122],{"class":66},[49,38303,38304,38306,38308],{"class":51,"line":17552},[49,38305,33191],{"class":73},[49,38307,78],{"class":77},[49,38309,33196],{"class":73},[49,38311,38312],{"class":51,"line":17566},[49,38313,35135],{"class":66},[49,38315,38316,38318,38320,38322,38324,38326,38328],{"class":51,"line":17578},[49,38317,33208],{"class":73},[49,38319,78],{"class":77},[49,38321,33213],{"class":73},[49,38323,33216],{"class":5913},[49,38325,78],{"class":77},[49,38327,1047],{"class":159},[49,38329,847],{"class":73},[49,38331,38332],{"class":51,"line":17583},[49,38333,35156],{"class":66},[49,38335,38336,38338,38340],{"class":51,"line":17596},[49,38337,35161],{"class":73},[49,38339,78],{"class":77},[49,38341,35166],{"class":73},[49,38343,38344,38346,38348],{"class":51,"line":17601},[49,38345,35171],{"class":73},[49,38347,78],{"class":77},[49,38349,35176],{"class":73},[49,38351,38352,38354,38356,38358,38360,38362,38364,38366],{"class":51,"line":17606},[49,38353,35181],{"class":159},[49,38355,841],{"class":73},[49,38357,35186],{"class":59},[49,38359,35189],{"class":73},[49,38361,35192],{"class":59},[49,38363,1207],{"class":73},[49,38365,35197],{"class":59},[49,38367,35200],{"class":73},[18,38369,38371],{"id":38370},"_22vgg","2.2.VGG",[130,38373,38375],{"id":38374},"_221原理","2.2.1.原理",[14,38377,38378],{},[25,38379],{"alt":27,"src":38380},"\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",[14,38382,38383],{},[25,38384],{"alt":27,"src":38385},"\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",[14,38387,38388],{},[25,38389],{"alt":27,"src":38390},"\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",[14,38392,38393],{},"参数详细描述：",[14,38395,38396],{},[25,38397],{"alt":27,"src":38398},"\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",[14,38400,38401],{},[25,38402],{"alt":27,"src":38403},"\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",[14,38405,38406],{},[25,38407],{"alt":27,"src":38408},"\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",[14,38410,38411],{},[25,38412],{"alt":27,"src":38413},"\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",[14,38415,38416],{},[25,38417],{"alt":27,"src":38418},"\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",[130,38420,38422],{"id":38421},"_222代码实现","2.2.2.代码实现",[30,38424,38425],{},[33,38426,38427],{},"网络搭建",[40,38429,38431],{"className":30909,"code":38430,"language":30911,"meta":27,"style":27},"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",[46,38432,38433,38439,38451,38461,38471,38475,38492,38500,38519,38524,38529,38541,38579,38584,38620,38624,38653,38658,38663,38674,38710,38714,38750,38754,38782,38786,38791,38802,38838,38842,38878,38882,38918,38922,38950,38954,38959,38970,39007,39011,39047,39051,39087,39091,39119,39123,39128,39139,39175,39179,39215,39219,39255,39259,39287,39291,39296,39307,39312,39317,39322,39343,39347,39359,39363,39375,39379,39383,39388,39393,39408,39413,39423,39428,39443,39448,39467,39472,39481,39486,39496,39501,39506,39520,39525,39539,39547,39551,39555,39563,39574,39585,39596,39607,39618,39629,39635,39639,39644,39657,39677,39683,39692],{"__ignoreMap":27},[49,38434,38435,38437],{"class":51,"line":52},[49,38436,30923],{"class":77},[49,38438,30926],{"class":73},[49,38440,38441,38443,38446,38448],{"class":51,"line":63},[49,38442,31268],{"class":77},[49,38444,38445],{"class":73}," sympy.core.sympify ",[49,38447,30923],{"class":77},[49,38449,38450],{"class":73}," kernS\n",[49,38452,38453,38455,38457,38459],{"class":51,"line":70},[49,38454,31268],{"class":77},[49,38456,31271],{"class":73},[49,38458,30923],{"class":77},[49,38460,31276],{"class":73},[49,38462,38463,38465,38467,38469],{"class":51,"line":219},[49,38464,31268],{"class":77},[49,38466,31288],{"class":73},[49,38468,30923],{"class":77},[49,38470,31293],{"class":73},[49,38472,38473],{"class":51,"line":233},[49,38474,399],{"emptyLinePlaceholder":398},[49,38476,38477,38479,38482,38484,38486,38488,38490],{"class":51,"line":241},[49,38478,15391],{"class":77},[49,38480,38481],{"class":55}," VGG16",[49,38483,841],{"class":73},[49,38485,31309],{"class":55},[49,38487,1387],{"class":73},[49,38489,31314],{"class":55},[49,38491,31317],{"class":73},[49,38493,38494,38496,38498],{"class":51,"line":1920},[49,38495,31332],{"class":77},[49,38497,31335],{"class":159},[49,38499,31338],{"class":73},[49,38501,38502,38504,38506,38509,38511,38513,38515,38517],{"class":51,"line":2011},[49,38503,31348],{"class":159},[49,38505,841],{"class":73},[49,38507,38508],{"class":159},"VGG16",[49,38510,13132],{"class":73},[49,38512,31354],{"class":159},[49,38514,31357],{"class":73},[49,38516,31360],{"class":159},[49,38518,2674],{"class":73},[49,38520,38521],{"class":51,"line":2017},[49,38522,38523],{"class":66},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[49,38525,38526],{"class":51,"line":2029},[49,38527,38528],{"class":66},"        # 这里用的是灰度图\n",[49,38530,38531,38533,38536,38538],{"class":51,"line":2311},[49,38532,31376],{"class":159},[49,38534,38535],{"class":73},".block1",[49,38537,78],{"class":77},[49,38539,38540],{"class":73},"nn.Sequential(\n",[49,38542,38543,38546,38548,38550,38552,38554,38556,38558,38560,38562,38564,38566,38568,38570,38572,38574,38576],{"class":51,"line":2316},[49,38544,38545],{"class":73},"            nn.Conv2d(",[49,38547,31387],{"class":5913},[49,38549,78],{"class":77},[49,38551,1047],{"class":159},[49,38553,1207],{"class":73},[49,38555,31396],{"class":5913},[49,38557,78],{"class":77},[49,38559,1033],{"class":159},[49,38561,1207],{"class":73},[49,38563,31405],{"class":5913},[49,38565,78],{"class":77},[49,38567,909],{"class":159},[49,38569,1207],{"class":73},[49,38571,31414],{"class":5913},[49,38573,78],{"class":77},[49,38575,1047],{"class":159},[49,38577,38578],{"class":73},"),\n",[49,38580,38581],{"class":51,"line":2322},[49,38582,38583],{"class":73},"            nn.ReLU(),\n",[49,38585,38586,38588,38590,38592,38594,38596,38598,38600,38602,38604,38606,38608,38610,38612,38614,38616,38618],{"class":51,"line":2327},[49,38587,38545],{"class":73},[49,38589,31387],{"class":5913},[49,38591,78],{"class":77},[49,38593,1033],{"class":159},[49,38595,1207],{"class":73},[49,38597,31396],{"class":5913},[49,38599,78],{"class":77},[49,38601,1033],{"class":159},[49,38603,1207],{"class":73},[49,38605,31405],{"class":5913},[49,38607,78],{"class":77},[49,38609,909],{"class":159},[49,38611,1207],{"class":73},[49,38613,31414],{"class":5913},[49,38615,78],{"class":77},[49,38617,1047],{"class":159},[49,38619,38578],{"class":73},[49,38621,38622],{"class":51,"line":2341},[49,38623,38583],{"class":73},[49,38625,38626,38629,38631,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651],{"class":51,"line":2346},[49,38627,38628],{"class":73},"            nn.MaxPool2d(",[49,38630,31405],{"class":5913},[49,38632,78],{"class":77},[49,38634,915],{"class":159},[49,38636,1207],{"class":73},[49,38638,31460],{"class":5913},[49,38640,78],{"class":77},[49,38642,915],{"class":159},[49,38644,1207],{"class":73},[49,38646,31414],{"class":5913},[49,38648,78],{"class":77},[49,38650,1021],{"class":159},[49,38652,847],{"class":73},[49,38654,38655],{"class":51,"line":2352},[49,38656,38657],{"class":73},"        )\n",[49,38659,38660],{"class":51,"line":2373},[49,38661,38662],{"class":66},"        # 第二层\n",[49,38664,38665,38667,38670,38672],{"class":51,"line":2378},[49,38666,31376],{"class":159},[49,38668,38669],{"class":73},".block2",[49,38671,78],{"class":77},[49,38673,38540],{"class":73},[49,38675,38676,38678,38680,38682,38684,38686,38688,38690,38692,38694,38696,38698,38700,38702,38704,38706,38708],{"class":51,"line":2392},[49,38677,38545],{"class":73},[49,38679,31387],{"class":5913},[49,38681,78],{"class":77},[49,38683,1033],{"class":159},[49,38685,1207],{"class":73},[49,38687,31396],{"class":5913},[49,38689,78],{"class":77},[49,38691,32601],{"class":159},[49,38693,1207],{"class":73},[49,38695,31405],{"class":5913},[49,38697,78],{"class":77},[49,38699,909],{"class":159},[49,38701,1207],{"class":73},[49,38703,31414],{"class":5913},[49,38705,78],{"class":77},[49,38707,1047],{"class":159},[49,38709,38578],{"class":73},[49,38711,38712],{"class":51,"line":2397},[49,38713,38583],{"class":73},[49,38715,38716,38718,38720,38722,38724,38726,38728,38730,38732,38734,38736,38738,38740,38742,38744,38746,38748],{"class":51,"line":2426},[49,38717,38545],{"class":73},[49,38719,31387],{"class":5913},[49,38721,78],{"class":77},[49,38723,32601],{"class":159},[49,38725,1207],{"class":73},[49,38727,31396],{"class":5913},[49,38729,78],{"class":77},[49,38731,32601],{"class":159},[49,38733,1207],{"class":73},[49,38735,31405],{"class":5913},[49,38737,78],{"class":77},[49,38739,909],{"class":159},[49,38741,1207],{"class":73},[49,38743,31414],{"class":5913},[49,38745,78],{"class":77},[49,38747,1047],{"class":159},[49,38749,38578],{"class":73},[49,38751,38752],{"class":51,"line":2431},[49,38753,38583],{"class":73},[49,38755,38756,38758,38760,38762,38764,38766,38768,38770,38772,38774,38776,38778,38780],{"class":51,"line":2448},[49,38757,38628],{"class":73},[49,38759,31405],{"class":5913},[49,38761,78],{"class":77},[49,38763,915],{"class":159},[49,38765,1207],{"class":73},[49,38767,31460],{"class":5913},[49,38769,78],{"class":77},[49,38771,915],{"class":159},[49,38773,1207],{"class":73},[49,38775,31414],{"class":5913},[49,38777,78],{"class":77},[49,38779,1021],{"class":159},[49,38781,847],{"class":73},[49,38783,38784],{"class":51,"line":2453},[49,38785,38657],{"class":73},[49,38787,38788],{"class":51,"line":2458},[49,38789,38790],{"class":66},"        # 第三层\n",[49,38792,38793,38795,38798,38800],{"class":51,"line":2463},[49,38794,31376],{"class":159},[49,38796,38797],{"class":73},".block3",[49,38799,78],{"class":77},[49,38801,38540],{"class":73},[49,38803,38804,38806,38808,38810,38812,38814,38816,38818,38820,38822,38824,38826,38828,38830,38832,38834,38836],{"class":51,"line":2477},[49,38805,38545],{"class":73},[49,38807,31387],{"class":5913},[49,38809,78],{"class":77},[49,38811,32601],{"class":159},[49,38813,1207],{"class":73},[49,38815,31396],{"class":5913},[49,38817,78],{"class":77},[49,38819,35401],{"class":159},[49,38821,1207],{"class":73},[49,38823,31405],{"class":5913},[49,38825,78],{"class":77},[49,38827,909],{"class":159},[49,38829,1207],{"class":73},[49,38831,31414],{"class":5913},[49,38833,78],{"class":77},[49,38835,1047],{"class":159},[49,38837,38578],{"class":73},[49,38839,38840],{"class":51,"line":2482},[49,38841,38583],{"class":73},[49,38843,38844,38846,38848,38850,38852,38854,38856,38858,38860,38862,38864,38866,38868,38870,38872,38874,38876],{"class":51,"line":3274},[49,38845,38545],{"class":73},[49,38847,31387],{"class":5913},[49,38849,78],{"class":77},[49,38851,35401],{"class":159},[49,38853,1207],{"class":73},[49,38855,31396],{"class":5913},[49,38857,78],{"class":77},[49,38859,35401],{"class":159},[49,38861,1207],{"class":73},[49,38863,31405],{"class":5913},[49,38865,78],{"class":77},[49,38867,909],{"class":159},[49,38869,1207],{"class":73},[49,38871,31414],{"class":5913},[49,38873,78],{"class":77},[49,38875,1047],{"class":159},[49,38877,38578],{"class":73},[49,38879,38880],{"class":51,"line":3288},[49,38881,38583],{"class":73},[49,38883,38884,38886,38888,38890,38892,38894,38896,38898,38900,38902,38904,38906,38908,38910,38912,38914,38916],{"class":51,"line":3296},[49,38885,38545],{"class":73},[49,38887,31387],{"class":5913},[49,38889,78],{"class":77},[49,38891,35401],{"class":159},[49,38893,1207],{"class":73},[49,38895,31396],{"class":5913},[49,38897,78],{"class":77},[49,38899,35401],{"class":159},[49,38901,1207],{"class":73},[49,38903,31405],{"class":5913},[49,38905,78],{"class":77},[49,38907,909],{"class":159},[49,38909,1207],{"class":73},[49,38911,31414],{"class":5913},[49,38913,78],{"class":77},[49,38915,1047],{"class":159},[49,38917,38578],{"class":73},[49,38919,38920],{"class":51,"line":3301},[49,38921,38583],{"class":73},[49,38923,38924,38926,38928,38930,38932,38934,38936,38938,38940,38942,38944,38946,38948],{"class":51,"line":3307},[49,38925,38628],{"class":73},[49,38927,31405],{"class":5913},[49,38929,78],{"class":77},[49,38931,915],{"class":159},[49,38933,1207],{"class":73},[49,38935,31460],{"class":5913},[49,38937,78],{"class":77},[49,38939,915],{"class":159},[49,38941,1207],{"class":73},[49,38943,31414],{"class":5913},[49,38945,78],{"class":77},[49,38947,1021],{"class":159},[49,38949,847],{"class":73},[49,38951,38952],{"class":51,"line":3313},[49,38953,38657],{"class":73},[49,38955,38956],{"class":51,"line":3318},[49,38957,38958],{"class":66},"        # 第四层\n",[49,38960,38961,38963,38966,38968],{"class":51,"line":8645},[49,38962,31376],{"class":159},[49,38964,38965],{"class":73},".block4",[49,38967,78],{"class":77},[49,38969,38540],{"class":73},[49,38971,38972,38974,38976,38978,38980,38982,38984,38986,38989,38991,38993,38995,38997,38999,39001,39003,39005],{"class":51,"line":8669},[49,38973,38545],{"class":73},[49,38975,31387],{"class":5913},[49,38977,78],{"class":77},[49,38979,35401],{"class":159},[49,38981,1207],{"class":73},[49,38983,31396],{"class":5913},[49,38985,78],{"class":77},[49,38987,38988],{"class":159},"512",[49,38990,1207],{"class":73},[49,38992,31405],{"class":5913},[49,38994,78],{"class":77},[49,38996,909],{"class":159},[49,38998,1207],{"class":73},[49,39000,31414],{"class":5913},[49,39002,78],{"class":77},[49,39004,1047],{"class":159},[49,39006,38578],{"class":73},[49,39008,39009],{"class":51,"line":8674},[49,39010,38583],{"class":73},[49,39012,39013,39015,39017,39019,39021,39023,39025,39027,39029,39031,39033,39035,39037,39039,39041,39043,39045],{"class":51,"line":8680},[49,39014,38545],{"class":73},[49,39016,31387],{"class":5913},[49,39018,78],{"class":77},[49,39020,38988],{"class":159},[49,39022,1207],{"class":73},[49,39024,31396],{"class":5913},[49,39026,78],{"class":77},[49,39028,38988],{"class":159},[49,39030,1207],{"class":73},[49,39032,31405],{"class":5913},[49,39034,78],{"class":77},[49,39036,909],{"class":159},[49,39038,1207],{"class":73},[49,39040,31414],{"class":5913},[49,39042,78],{"class":77},[49,39044,1047],{"class":159},[49,39046,38578],{"class":73},[49,39048,39049],{"class":51,"line":8707},[49,39050,38583],{"class":73},[49,39052,39053,39055,39057,39059,39061,39063,39065,39067,39069,39071,39073,39075,39077,39079,39081,39083,39085],{"class":51,"line":8712},[49,39054,38545],{"class":73},[49,39056,31387],{"class":5913},[49,39058,78],{"class":77},[49,39060,38988],{"class":159},[49,39062,1207],{"class":73},[49,39064,31396],{"class":5913},[49,39066,78],{"class":77},[49,39068,38988],{"class":159},[49,39070,1207],{"class":73},[49,39072,31405],{"class":5913},[49,39074,78],{"class":77},[49,39076,909],{"class":159},[49,39078,1207],{"class":73},[49,39080,31414],{"class":5913},[49,39082,78],{"class":77},[49,39084,1047],{"class":159},[49,39086,38578],{"class":73},[49,39088,39089],{"class":51,"line":8718},[49,39090,38583],{"class":73},[49,39092,39093,39095,39097,39099,39101,39103,39105,39107,39109,39111,39113,39115,39117],{"class":51,"line":8730},[49,39094,38628],{"class":73},[49,39096,31405],{"class":5913},[49,39098,78],{"class":77},[49,39100,915],{"class":159},[49,39102,1207],{"class":73},[49,39104,31460],{"class":5913},[49,39106,78],{"class":77},[49,39108,915],{"class":159},[49,39110,1207],{"class":73},[49,39112,31414],{"class":5913},[49,39114,78],{"class":77},[49,39116,1021],{"class":159},[49,39118,847],{"class":73},[49,39120,39121],{"class":51,"line":8742},[49,39122,38657],{"class":73},[49,39124,39125],{"class":51,"line":8754},[49,39126,39127],{"class":66},"        # 第五层\n",[49,39129,39130,39132,39135,39137],{"class":51,"line":10413},[49,39131,31376],{"class":159},[49,39133,39134],{"class":73},".block5",[49,39136,78],{"class":77},[49,39138,38540],{"class":73},[49,39140,39141,39143,39145,39147,39149,39151,39153,39155,39157,39159,39161,39163,39165,39167,39169,39171,39173],{"class":51,"line":10438},[49,39142,38545],{"class":73},[49,39144,31387],{"class":5913},[49,39146,78],{"class":77},[49,39148,38988],{"class":159},[49,39150,1207],{"class":73},[49,39152,31396],{"class":5913},[49,39154,78],{"class":77},[49,39156,38988],{"class":159},[49,39158,1207],{"class":73},[49,39160,31405],{"class":5913},[49,39162,78],{"class":77},[49,39164,909],{"class":159},[49,39166,1207],{"class":73},[49,39168,31414],{"class":5913},[49,39170,78],{"class":77},[49,39172,1047],{"class":159},[49,39174,38578],{"class":73},[49,39176,39177],{"class":51,"line":10461},[49,39178,38583],{"class":73},[49,39180,39181,39183,39185,39187,39189,39191,39193,39195,39197,39199,39201,39203,39205,39207,39209,39211,39213],{"class":51,"line":10485},[49,39182,38545],{"class":73},[49,39184,31387],{"class":5913},[49,39186,78],{"class":77},[49,39188,38988],{"class":159},[49,39190,1207],{"class":73},[49,39192,31396],{"class":5913},[49,39194,78],{"class":77},[49,39196,38988],{"class":159},[49,39198,1207],{"class":73},[49,39200,31405],{"class":5913},[49,39202,78],{"class":77},[49,39204,909],{"class":159},[49,39206,1207],{"class":73},[49,39208,31414],{"class":5913},[49,39210,78],{"class":77},[49,39212,1047],{"class":159},[49,39214,38578],{"class":73},[49,39216,39217],{"class":51,"line":10490},[49,39218,38583],{"class":73},[49,39220,39221,39223,39225,39227,39229,39231,39233,39235,39237,39239,39241,39243,39245,39247,39249,39251,39253],{"class":51,"line":10495},[49,39222,38545],{"class":73},[49,39224,31387],{"class":5913},[49,39226,78],{"class":77},[49,39228,38988],{"class":159},[49,39230,1207],{"class":73},[49,39232,31396],{"class":5913},[49,39234,78],{"class":77},[49,39236,38988],{"class":159},[49,39238,1207],{"class":73},[49,39240,31405],{"class":5913},[49,39242,78],{"class":77},[49,39244,909],{"class":159},[49,39246,1207],{"class":73},[49,39248,31414],{"class":5913},[49,39250,78],{"class":77},[49,39252,1047],{"class":159},[49,39254,38578],{"class":73},[49,39256,39257],{"class":51,"line":10500},[49,39258,38583],{"class":73},[49,39260,39261,39263,39265,39267,39269,39271,39273,39275,39277,39279,39281,39283,39285],{"class":51,"line":10509},[49,39262,38628],{"class":73},[49,39264,31405],{"class":5913},[49,39266,78],{"class":77},[49,39268,915],{"class":159},[49,39270,1207],{"class":73},[49,39272,31460],{"class":5913},[49,39274,78],{"class":77},[49,39276,915],{"class":159},[49,39278,1207],{"class":73},[49,39280,31414],{"class":5913},[49,39282,78],{"class":77},[49,39284,1021],{"class":159},[49,39286,847],{"class":73},[49,39288,39289],{"class":51,"line":10514},[49,39290,38657],{"class":73},[49,39292,39293],{"class":51,"line":10520},[49,39294,39295],{"class":66},"        # 全连接层\n",[49,39297,39298,39300,39303,39305],{"class":51,"line":10541},[49,39299,31376],{"class":159},[49,39301,39302],{"class":73},".block6",[49,39304,78],{"class":77},[49,39306,38540],{"class":73},[49,39308,39309],{"class":51,"line":10547},[49,39310,39311],{"class":66},"            # 平展操作\n",[49,39313,39314],{"class":51,"line":10561},[49,39315,39316],{"class":66},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[49,39318,39319],{"class":51,"line":10567},[49,39320,39321],{"class":73},"            nn.Flatten(),\n",[49,39323,39324,39327,39329,39331,39333,39335,39337,39339,39341],{"class":51,"line":10594},[49,39325,39326],{"class":73},"            nn.Linear(",[49,39328,1198],{"class":159},[49,39330,1284],{"class":77},[49,39332,1198],{"class":159},[49,39334,1284],{"class":77},[49,39336,38988],{"class":159},[49,39338,1207],{"class":73},[49,39340,35401],{"class":159},[49,39342,38578],{"class":73},[49,39344,39345],{"class":51,"line":10603},[49,39346,38583],{"class":73},[49,39348,39349,39351,39353,39355,39357],{"class":51,"line":10609},[49,39350,39326],{"class":73},[49,39352,35401],{"class":159},[49,39354,1207],{"class":73},[49,39356,32601],{"class":159},[49,39358,38578],{"class":73},[49,39360,39361],{"class":51,"line":10617},[49,39362,38583],{"class":73},[49,39364,39365,39367,39369,39371,39373],{"class":51,"line":10622},[49,39366,39326],{"class":73},[49,39368,32601],{"class":159},[49,39370,1207],{"class":73},[49,39372,1275],{"class":159},[49,39374,847],{"class":73},[49,39376,39377],{"class":51,"line":17301},[49,39378,38657],{"class":73},[49,39380,39381],{"class":51,"line":17307},[49,39382,399],{"emptyLinePlaceholder":398},[49,39384,39385],{"class":51,"line":17330},[49,39386,39387],{"class":66},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[49,39389,39390],{"class":51,"line":17336},[49,39391,39392],{"class":66},"        # 循环遍历模型\n",[49,39394,39395,39397,39400,39402,39405],{"class":51,"line":17359},[49,39396,4100],{"class":77},[49,39398,39399],{"class":73}," m ",[49,39401,26732],{"class":77},[49,39403,39404],{"class":159}," self",[49,39406,39407],{"class":73},".modules():\n",[49,39409,39410],{"class":51,"line":17373},[49,39411,39412],{"class":66},"            # print(m)\n",[49,39414,39415,39417,39420],{"class":51,"line":17393},[49,39416,5339],{"class":77},[49,39418,39419],{"class":159}," isinstance",[49,39421,39422],{"class":73},"(m,nn.Conv2d):\n",[49,39424,39425],{"class":51,"line":17399},[49,39426,39427],{"class":66},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[49,39429,39430,39433,39436,39438,39441],{"class":51,"line":17410},[49,39431,39432],{"class":73},"                nn.init.kaiming_normal_(m.weight,",[49,39434,39435],{"class":5913},"nonlinearity",[49,39437,78],{"class":77},[49,39439,39440],{"class":59},"'relu'",[49,39442,847],{"class":73},[49,39444,39445],{"class":51,"line":17433},[49,39446,39447],{"class":66},"                # 判断b参数是否存在\n",[49,39449,39450,39453,39456,39459,39462,39465],{"class":51,"line":17455},[49,39451,39452],{"class":77},"                if",[49,39454,39455],{"class":73}," m.bias ",[49,39457,39458],{"class":77},"is",[49,39460,39461],{"class":77}," not",[49,39463,39464],{"class":159}," None",[49,39466,4436],{"class":73},[49,39468,39469],{"class":51,"line":17460},[49,39470,39471],{"class":66},"                    # 如果参数不存在的化初始化b=0\n",[49,39473,39474,39477,39479],{"class":51,"line":17466},[49,39475,39476],{"class":73},"                    nn.init.constant_(m.bias,",[49,39478,1021],{"class":159},[49,39480,847],{"class":73},[49,39482,39483],{"class":51,"line":17480},[49,39484,39485],{"class":66},"            # 全连接层初始化\n",[49,39487,39488,39491,39493],{"class":51,"line":17493},[49,39489,39490],{"class":77},"            elif",[49,39492,39419],{"class":159},[49,39494,39495],{"class":73},"(m,nn.Linear):\n",[49,39497,39498],{"class":51,"line":17498},[49,39499,39500],{"class":66},"                # 这个初始化方法是利用的是正太分布的方式\n",[49,39502,39503],{"class":51,"line":17512},[49,39504,39505],{"class":66},"                # 均值为0，方差为0.01\n",[49,39507,39508,39511,39513,39515,39518],{"class":51,"line":17517},[49,39509,39510],{"class":73},"                nn.init.normal_(m.weight,",[49,39512,1021],{"class":159},[49,39514,1207],{"class":73},[49,39516,39517],{"class":159},"0.01",[49,39519,847],{"class":73},[49,39521,39522],{"class":51,"line":17523},[49,39523,39524],{"class":66},"                # 初始化b参数\n",[49,39526,39527,39529,39531,39533,39535,39537],{"class":51,"line":17528},[49,39528,39452],{"class":77},[49,39530,39455],{"class":73},[49,39532,39458],{"class":77},[49,39534,39461],{"class":77},[49,39536,39464],{"class":159},[49,39538,4436],{"class":73},[49,39540,39541,39543,39545],{"class":51,"line":17542},[49,39542,39476],{"class":73},[49,39544,1021],{"class":159},[49,39546,847],{"class":73},[49,39548,39549],{"class":51,"line":17547},[49,39550,399],{"emptyLinePlaceholder":398},[49,39552,39553],{"class":51,"line":17552},[49,39554,35696],{"class":66},[49,39556,39557,39559,39561],{"class":51,"line":17566},[49,39558,31332],{"class":77},[49,39560,31624],{"class":55},[49,39562,31627],{"class":73},[49,39564,39565,39567,39569,39571],{"class":51,"line":17578},[49,39566,31632],{"class":73},[49,39568,78],{"class":77},[49,39570,31354],{"class":159},[49,39572,39573],{"class":73},".block1(x)\n",[49,39575,39576,39578,39580,39582],{"class":51,"line":17583},[49,39577,31632],{"class":73},[49,39579,78],{"class":77},[49,39581,31354],{"class":159},[49,39583,39584],{"class":73},".block2(x)\n",[49,39586,39587,39589,39591,39593],{"class":51,"line":17596},[49,39588,31632],{"class":73},[49,39590,78],{"class":77},[49,39592,31354],{"class":159},[49,39594,39595],{"class":73},".block3(x)\n",[49,39597,39598,39600,39602,39604],{"class":51,"line":17601},[49,39599,31632],{"class":73},[49,39601,78],{"class":77},[49,39603,31354],{"class":159},[49,39605,39606],{"class":73},".block4(x)\n",[49,39608,39609,39611,39613,39615],{"class":51,"line":17606},[49,39610,31632],{"class":73},[49,39612,78],{"class":77},[49,39614,31354],{"class":159},[49,39616,39617],{"class":73},".block5(x)\n",[49,39619,39620,39622,39624,39626],{"class":51,"line":17611},[49,39621,31632],{"class":73},[49,39623,78],{"class":77},[49,39625,31354],{"class":159},[49,39627,39628],{"class":73},".block6(x)\n",[49,39630,39631,39633],{"class":51,"line":17624},[49,39632,15449],{"class":77},[49,39634,31740],{"class":73},[49,39636,39637],{"class":51,"line":17629},[49,39638,399],{"emptyLinePlaceholder":398},[49,39640,39641],{"class":51,"line":33164},[49,39642,39643],{"class":66},"# 验证模型\n",[49,39645,39646,39648,39650,39652,39655],{"class":51,"line":33170},[49,39647,2230],{"class":77},[49,39649,31751],{"class":159},[49,39651,3646],{"class":77},[49,39653,39654],{"class":59},"'__main__'",[49,39656,4436],{"class":73},[49,39658,39659,39661,39663,39665,39667,39669,39671,39673,39675],{"class":51,"line":33176},[49,39660,31768],{"class":73},[49,39662,78],{"class":77},[49,39664,30982],{"class":73},[49,39666,31775],{"class":59},[49,39668,2403],{"class":77},[49,39670,31780],{"class":73},[49,39672,2400],{"class":77},[49,39674,31007],{"class":59},[49,39676,847],{"class":73},[49,39678,39679,39681],{"class":51,"line":33182},[49,39680,31830],{"class":159},[49,39682,31016],{"class":73},[49,39684,39685,39687,39689],{"class":51,"line":33188},[49,39686,31820],{"class":73},[49,39688,78],{"class":77},[49,39690,39691],{"class":73},"VGG16().to(device)\n",[49,39693,39694,39696,39698,39700,39702,39704,39706,39708],{"class":51,"line":33199},[49,39695,31830],{"class":159},[49,39697,31833],{"class":73},[49,39699,1047],{"class":159},[49,39701,1207],{"class":73},[49,39703,32032],{"class":159},[49,39705,1207],{"class":73},[49,39707,32032],{"class":159},[49,39709,31846],{"class":73},[30,39711,39712],{"start":63},[33,39713,39714],{},"训练代码",[14,39716,39717],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39719,39720],{},"解决方式:",[14,39722,39723],{},"①权重初始化",[40,39725,39727],{"className":30909,"code":39726,"language":30911,"meta":27,"style":27},"# 权重初始化,保证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",[46,39728,39729,39734,39739,39751,39756,39764,39769,39782,39787,39801,39806,39815,39820,39829,39834,39839,39852,39857,39871],{"__ignoreMap":27},[49,39730,39731],{"class":51,"line":52},[49,39732,39733],{"class":66},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[49,39735,39736],{"class":51,"line":63},[49,39737,39738],{"class":66},"# 循环遍历模型\n",[49,39740,39741,39743,39745,39747,39749],{"class":51,"line":70},[49,39742,3722],{"class":77},[49,39744,39399],{"class":73},[49,39746,26732],{"class":77},[49,39748,39404],{"class":159},[49,39750,39407],{"class":73},[49,39752,39753],{"class":51,"line":219},[49,39754,39755],{"class":66},"    # print(m)\n",[49,39757,39758,39760,39762],{"class":51,"line":233},[49,39759,3798],{"class":77},[49,39761,39419],{"class":159},[49,39763,39422],{"class":73},[49,39765,39766],{"class":51,"line":241},[49,39767,39768],{"class":66},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[49,39770,39771,39774,39776,39778,39780],{"class":51,"line":1920},[49,39772,39773],{"class":73},"        nn.init.kaiming_normal_(m.weight,",[49,39775,39435],{"class":5913},[49,39777,78],{"class":77},[49,39779,39440],{"class":59},[49,39781,847],{"class":73},[49,39783,39784],{"class":51,"line":2011},[49,39785,39786],{"class":66},"        # 判断b参数是否存在\n",[49,39788,39789,39791,39793,39795,39797,39799],{"class":51,"line":2017},[49,39790,3194],{"class":77},[49,39792,39455],{"class":73},[49,39794,39458],{"class":77},[49,39796,39461],{"class":77},[49,39798,39464],{"class":159},[49,39800,4436],{"class":73},[49,39802,39803],{"class":51,"line":2029},[49,39804,39805],{"class":66},"            # 如果参数不存在的化初始化b=0\n",[49,39807,39808,39811,39813],{"class":51,"line":2311},[49,39809,39810],{"class":73},"            nn.init.constant_(m.bias,",[49,39812,1021],{"class":159},[49,39814,847],{"class":73},[49,39816,39817],{"class":51,"line":2316},[49,39818,39819],{"class":66},"    # 全连接层初始化\n",[49,39821,39822,39825,39827],{"class":51,"line":2322},[49,39823,39824],{"class":77},"    elif",[49,39826,39419],{"class":159},[49,39828,39495],{"class":73},[49,39830,39831],{"class":51,"line":2327},[49,39832,39833],{"class":66},"        # 这个初始化方法是利用的是正太分布的方式\n",[49,39835,39836],{"class":51,"line":2341},[49,39837,39838],{"class":66},"        # 均值为0，方差为0.01\n",[49,39840,39841,39844,39846,39848,39850],{"class":51,"line":2346},[49,39842,39843],{"class":73},"        nn.init.normal_(m.weight,",[49,39845,1021],{"class":159},[49,39847,1207],{"class":73},[49,39849,39517],{"class":159},[49,39851,847],{"class":73},[49,39853,39854],{"class":51,"line":2352},[49,39855,39856],{"class":66},"        # 初始化b参数\n",[49,39858,39859,39861,39863,39865,39867,39869],{"class":51,"line":2373},[49,39860,3194],{"class":77},[49,39862,39455],{"class":73},[49,39864,39458],{"class":77},[49,39866,39461],{"class":77},[49,39868,39464],{"class":159},[49,39870,4436],{"class":73},[49,39872,39873,39875,39877],{"class":51,"line":2378},[49,39874,39810],{"class":73},[49,39876,1021],{"class":159},[49,39878,847],{"class":73},[14,39880,39881],{},"②尽可能地增加批次",[14,39883,39884],{},"训练完整代码：",[40,39886,39887],{"className":30909,"code":38430,"language":30911,"meta":27,"style":27},[46,39888,39889,39895,39905,39915,39925,39929,39945,39953,39971,39975,39979,39989,40025,40029,40065,40069,40097,40101,40105,40115,40151,40155,40191,40195,40223,40227,40231,40241,40277,40281,40317,40321,40357,40361,40389,40393,40397,40407,40443,40447,40483,40487,40523,40527,40555,40559,40563,40573,40609,40613,40649,40653,40689,40693,40721,40725,40729,40739,40743,40747,40751,40771,40775,40787,40791,40803,40807,40811,40815,40819,40831,40835,40843,40847,40859,40863,40877,40881,40889,40893,40901,40905,40909,40921,40925,40939,40947,40951,40955,40963,40973,40983,40993,41003,41013,41023,41029,41033,41037,41049,41069,41075,41083],{"__ignoreMap":27},[49,39890,39891,39893],{"class":51,"line":52},[49,39892,30923],{"class":77},[49,39894,30926],{"class":73},[49,39896,39897,39899,39901,39903],{"class":51,"line":63},[49,39898,31268],{"class":77},[49,39900,38445],{"class":73},[49,39902,30923],{"class":77},[49,39904,38450],{"class":73},[49,39906,39907,39909,39911,39913],{"class":51,"line":70},[49,39908,31268],{"class":77},[49,39910,31271],{"class":73},[49,39912,30923],{"class":77},[49,39914,31276],{"class":73},[49,39916,39917,39919,39921,39923],{"class":51,"line":219},[49,39918,31268],{"class":77},[49,39920,31288],{"class":73},[49,39922,30923],{"class":77},[49,39924,31293],{"class":73},[49,39926,39927],{"class":51,"line":233},[49,39928,399],{"emptyLinePlaceholder":398},[49,39930,39931,39933,39935,39937,39939,39941,39943],{"class":51,"line":241},[49,39932,15391],{"class":77},[49,39934,38481],{"class":55},[49,39936,841],{"class":73},[49,39938,31309],{"class":55},[49,39940,1387],{"class":73},[49,39942,31314],{"class":55},[49,39944,31317],{"class":73},[49,39946,39947,39949,39951],{"class":51,"line":1920},[49,39948,31332],{"class":77},[49,39950,31335],{"class":159},[49,39952,31338],{"class":73},[49,39954,39955,39957,39959,39961,39963,39965,39967,39969],{"class":51,"line":2011},[49,39956,31348],{"class":159},[49,39958,841],{"class":73},[49,39960,38508],{"class":159},[49,39962,13132],{"class":73},[49,39964,31354],{"class":159},[49,39966,31357],{"class":73},[49,39968,31360],{"class":159},[49,39970,2674],{"class":73},[49,39972,39973],{"class":51,"line":2017},[49,39974,38523],{"class":66},[49,39976,39977],{"class":51,"line":2029},[49,39978,38528],{"class":66},[49,39980,39981,39983,39985,39987],{"class":51,"line":2311},[49,39982,31376],{"class":159},[49,39984,38535],{"class":73},[49,39986,78],{"class":77},[49,39988,38540],{"class":73},[49,39990,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019,40021,40023],{"class":51,"line":2316},[49,39992,38545],{"class":73},[49,39994,31387],{"class":5913},[49,39996,78],{"class":77},[49,39998,1047],{"class":159},[49,40000,1207],{"class":73},[49,40002,31396],{"class":5913},[49,40004,78],{"class":77},[49,40006,1033],{"class":159},[49,40008,1207],{"class":73},[49,40010,31405],{"class":5913},[49,40012,78],{"class":77},[49,40014,909],{"class":159},[49,40016,1207],{"class":73},[49,40018,31414],{"class":5913},[49,40020,78],{"class":77},[49,40022,1047],{"class":159},[49,40024,38578],{"class":73},[49,40026,40027],{"class":51,"line":2322},[49,40028,38583],{"class":73},[49,40030,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059,40061,40063],{"class":51,"line":2327},[49,40032,38545],{"class":73},[49,40034,31387],{"class":5913},[49,40036,78],{"class":77},[49,40038,1033],{"class":159},[49,40040,1207],{"class":73},[49,40042,31396],{"class":5913},[49,40044,78],{"class":77},[49,40046,1033],{"class":159},[49,40048,1207],{"class":73},[49,40050,31405],{"class":5913},[49,40052,78],{"class":77},[49,40054,909],{"class":159},[49,40056,1207],{"class":73},[49,40058,31414],{"class":5913},[49,40060,78],{"class":77},[49,40062,1047],{"class":159},[49,40064,38578],{"class":73},[49,40066,40067],{"class":51,"line":2341},[49,40068,38583],{"class":73},[49,40070,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095],{"class":51,"line":2346},[49,40072,38628],{"class":73},[49,40074,31405],{"class":5913},[49,40076,78],{"class":77},[49,40078,915],{"class":159},[49,40080,1207],{"class":73},[49,40082,31460],{"class":5913},[49,40084,78],{"class":77},[49,40086,915],{"class":159},[49,40088,1207],{"class":73},[49,40090,31414],{"class":5913},[49,40092,78],{"class":77},[49,40094,1021],{"class":159},[49,40096,847],{"class":73},[49,40098,40099],{"class":51,"line":2352},[49,40100,38657],{"class":73},[49,40102,40103],{"class":51,"line":2373},[49,40104,38662],{"class":66},[49,40106,40107,40109,40111,40113],{"class":51,"line":2378},[49,40108,31376],{"class":159},[49,40110,38669],{"class":73},[49,40112,78],{"class":77},[49,40114,38540],{"class":73},[49,40116,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149],{"class":51,"line":2392},[49,40118,38545],{"class":73},[49,40120,31387],{"class":5913},[49,40122,78],{"class":77},[49,40124,1033],{"class":159},[49,40126,1207],{"class":73},[49,40128,31396],{"class":5913},[49,40130,78],{"class":77},[49,40132,32601],{"class":159},[49,40134,1207],{"class":73},[49,40136,31405],{"class":5913},[49,40138,78],{"class":77},[49,40140,909],{"class":159},[49,40142,1207],{"class":73},[49,40144,31414],{"class":5913},[49,40146,78],{"class":77},[49,40148,1047],{"class":159},[49,40150,38578],{"class":73},[49,40152,40153],{"class":51,"line":2397},[49,40154,38583],{"class":73},[49,40156,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189],{"class":51,"line":2426},[49,40158,38545],{"class":73},[49,40160,31387],{"class":5913},[49,40162,78],{"class":77},[49,40164,32601],{"class":159},[49,40166,1207],{"class":73},[49,40168,31396],{"class":5913},[49,40170,78],{"class":77},[49,40172,32601],{"class":159},[49,40174,1207],{"class":73},[49,40176,31405],{"class":5913},[49,40178,78],{"class":77},[49,40180,909],{"class":159},[49,40182,1207],{"class":73},[49,40184,31414],{"class":5913},[49,40186,78],{"class":77},[49,40188,1047],{"class":159},[49,40190,38578],{"class":73},[49,40192,40193],{"class":51,"line":2431},[49,40194,38583],{"class":73},[49,40196,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217,40219,40221],{"class":51,"line":2448},[49,40198,38628],{"class":73},[49,40200,31405],{"class":5913},[49,40202,78],{"class":77},[49,40204,915],{"class":159},[49,40206,1207],{"class":73},[49,40208,31460],{"class":5913},[49,40210,78],{"class":77},[49,40212,915],{"class":159},[49,40214,1207],{"class":73},[49,40216,31414],{"class":5913},[49,40218,78],{"class":77},[49,40220,1021],{"class":159},[49,40222,847],{"class":73},[49,40224,40225],{"class":51,"line":2453},[49,40226,38657],{"class":73},[49,40228,40229],{"class":51,"line":2458},[49,40230,38790],{"class":66},[49,40232,40233,40235,40237,40239],{"class":51,"line":2463},[49,40234,31376],{"class":159},[49,40236,38797],{"class":73},[49,40238,78],{"class":77},[49,40240,38540],{"class":73},[49,40242,40243,40245,40247,40249,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275],{"class":51,"line":2477},[49,40244,38545],{"class":73},[49,40246,31387],{"class":5913},[49,40248,78],{"class":77},[49,40250,32601],{"class":159},[49,40252,1207],{"class":73},[49,40254,31396],{"class":5913},[49,40256,78],{"class":77},[49,40258,35401],{"class":159},[49,40260,1207],{"class":73},[49,40262,31405],{"class":5913},[49,40264,78],{"class":77},[49,40266,909],{"class":159},[49,40268,1207],{"class":73},[49,40270,31414],{"class":5913},[49,40272,78],{"class":77},[49,40274,1047],{"class":159},[49,40276,38578],{"class":73},[49,40278,40279],{"class":51,"line":2482},[49,40280,38583],{"class":73},[49,40282,40283,40285,40287,40289,40291,40293,40295,40297,40299,40301,40303,40305,40307,40309,40311,40313,40315],{"class":51,"line":3274},[49,40284,38545],{"class":73},[49,40286,31387],{"class":5913},[49,40288,78],{"class":77},[49,40290,35401],{"class":159},[49,40292,1207],{"class":73},[49,40294,31396],{"class":5913},[49,40296,78],{"class":77},[49,40298,35401],{"class":159},[49,40300,1207],{"class":73},[49,40302,31405],{"class":5913},[49,40304,78],{"class":77},[49,40306,909],{"class":159},[49,40308,1207],{"class":73},[49,40310,31414],{"class":5913},[49,40312,78],{"class":77},[49,40314,1047],{"class":159},[49,40316,38578],{"class":73},[49,40318,40319],{"class":51,"line":3288},[49,40320,38583],{"class":73},[49,40322,40323,40325,40327,40329,40331,40333,40335,40337,40339,40341,40343,40345,40347,40349,40351,40353,40355],{"class":51,"line":3296},[49,40324,38545],{"class":73},[49,40326,31387],{"class":5913},[49,40328,78],{"class":77},[49,40330,35401],{"class":159},[49,40332,1207],{"class":73},[49,40334,31396],{"class":5913},[49,40336,78],{"class":77},[49,40338,35401],{"class":159},[49,40340,1207],{"class":73},[49,40342,31405],{"class":5913},[49,40344,78],{"class":77},[49,40346,909],{"class":159},[49,40348,1207],{"class":73},[49,40350,31414],{"class":5913},[49,40352,78],{"class":77},[49,40354,1047],{"class":159},[49,40356,38578],{"class":73},[49,40358,40359],{"class":51,"line":3301},[49,40360,38583],{"class":73},[49,40362,40363,40365,40367,40369,40371,40373,40375,40377,40379,40381,40383,40385,40387],{"class":51,"line":3307},[49,40364,38628],{"class":73},[49,40366,31405],{"class":5913},[49,40368,78],{"class":77},[49,40370,915],{"class":159},[49,40372,1207],{"class":73},[49,40374,31460],{"class":5913},[49,40376,78],{"class":77},[49,40378,915],{"class":159},[49,40380,1207],{"class":73},[49,40382,31414],{"class":5913},[49,40384,78],{"class":77},[49,40386,1021],{"class":159},[49,40388,847],{"class":73},[49,40390,40391],{"class":51,"line":3313},[49,40392,38657],{"class":73},[49,40394,40395],{"class":51,"line":3318},[49,40396,38958],{"class":66},[49,40398,40399,40401,40403,40405],{"class":51,"line":8645},[49,40400,31376],{"class":159},[49,40402,38965],{"class":73},[49,40404,78],{"class":77},[49,40406,38540],{"class":73},[49,40408,40409,40411,40413,40415,40417,40419,40421,40423,40425,40427,40429,40431,40433,40435,40437,40439,40441],{"class":51,"line":8669},[49,40410,38545],{"class":73},[49,40412,31387],{"class":5913},[49,40414,78],{"class":77},[49,40416,35401],{"class":159},[49,40418,1207],{"class":73},[49,40420,31396],{"class":5913},[49,40422,78],{"class":77},[49,40424,38988],{"class":159},[49,40426,1207],{"class":73},[49,40428,31405],{"class":5913},[49,40430,78],{"class":77},[49,40432,909],{"class":159},[49,40434,1207],{"class":73},[49,40436,31414],{"class":5913},[49,40438,78],{"class":77},[49,40440,1047],{"class":159},[49,40442,38578],{"class":73},[49,40444,40445],{"class":51,"line":8674},[49,40446,38583],{"class":73},[49,40448,40449,40451,40453,40455,40457,40459,40461,40463,40465,40467,40469,40471,40473,40475,40477,40479,40481],{"class":51,"line":8680},[49,40450,38545],{"class":73},[49,40452,31387],{"class":5913},[49,40454,78],{"class":77},[49,40456,38988],{"class":159},[49,40458,1207],{"class":73},[49,40460,31396],{"class":5913},[49,40462,78],{"class":77},[49,40464,38988],{"class":159},[49,40466,1207],{"class":73},[49,40468,31405],{"class":5913},[49,40470,78],{"class":77},[49,40472,909],{"class":159},[49,40474,1207],{"class":73},[49,40476,31414],{"class":5913},[49,40478,78],{"class":77},[49,40480,1047],{"class":159},[49,40482,38578],{"class":73},[49,40484,40485],{"class":51,"line":8707},[49,40486,38583],{"class":73},[49,40488,40489,40491,40493,40495,40497,40499,40501,40503,40505,40507,40509,40511,40513,40515,40517,40519,40521],{"class":51,"line":8712},[49,40490,38545],{"class":73},[49,40492,31387],{"class":5913},[49,40494,78],{"class":77},[49,40496,38988],{"class":159},[49,40498,1207],{"class":73},[49,40500,31396],{"class":5913},[49,40502,78],{"class":77},[49,40504,38988],{"class":159},[49,40506,1207],{"class":73},[49,40508,31405],{"class":5913},[49,40510,78],{"class":77},[49,40512,909],{"class":159},[49,40514,1207],{"class":73},[49,40516,31414],{"class":5913},[49,40518,78],{"class":77},[49,40520,1047],{"class":159},[49,40522,38578],{"class":73},[49,40524,40525],{"class":51,"line":8718},[49,40526,38583],{"class":73},[49,40528,40529,40531,40533,40535,40537,40539,40541,40543,40545,40547,40549,40551,40553],{"class":51,"line":8730},[49,40530,38628],{"class":73},[49,40532,31405],{"class":5913},[49,40534,78],{"class":77},[49,40536,915],{"class":159},[49,40538,1207],{"class":73},[49,40540,31460],{"class":5913},[49,40542,78],{"class":77},[49,40544,915],{"class":159},[49,40546,1207],{"class":73},[49,40548,31414],{"class":5913},[49,40550,78],{"class":77},[49,40552,1021],{"class":159},[49,40554,847],{"class":73},[49,40556,40557],{"class":51,"line":8742},[49,40558,38657],{"class":73},[49,40560,40561],{"class":51,"line":8754},[49,40562,39127],{"class":66},[49,40564,40565,40567,40569,40571],{"class":51,"line":10413},[49,40566,31376],{"class":159},[49,40568,39134],{"class":73},[49,40570,78],{"class":77},[49,40572,38540],{"class":73},[49,40574,40575,40577,40579,40581,40583,40585,40587,40589,40591,40593,40595,40597,40599,40601,40603,40605,40607],{"class":51,"line":10438},[49,40576,38545],{"class":73},[49,40578,31387],{"class":5913},[49,40580,78],{"class":77},[49,40582,38988],{"class":159},[49,40584,1207],{"class":73},[49,40586,31396],{"class":5913},[49,40588,78],{"class":77},[49,40590,38988],{"class":159},[49,40592,1207],{"class":73},[49,40594,31405],{"class":5913},[49,40596,78],{"class":77},[49,40598,909],{"class":159},[49,40600,1207],{"class":73},[49,40602,31414],{"class":5913},[49,40604,78],{"class":77},[49,40606,1047],{"class":159},[49,40608,38578],{"class":73},[49,40610,40611],{"class":51,"line":10461},[49,40612,38583],{"class":73},[49,40614,40615,40617,40619,40621,40623,40625,40627,40629,40631,40633,40635,40637,40639,40641,40643,40645,40647],{"class":51,"line":10485},[49,40616,38545],{"class":73},[49,40618,31387],{"class":5913},[49,40620,78],{"class":77},[49,40622,38988],{"class":159},[49,40624,1207],{"class":73},[49,40626,31396],{"class":5913},[49,40628,78],{"class":77},[49,40630,38988],{"class":159},[49,40632,1207],{"class":73},[49,40634,31405],{"class":5913},[49,40636,78],{"class":77},[49,40638,909],{"class":159},[49,40640,1207],{"class":73},[49,40642,31414],{"class":5913},[49,40644,78],{"class":77},[49,40646,1047],{"class":159},[49,40648,38578],{"class":73},[49,40650,40651],{"class":51,"line":10490},[49,40652,38583],{"class":73},[49,40654,40655,40657,40659,40661,40663,40665,40667,40669,40671,40673,40675,40677,40679,40681,40683,40685,40687],{"class":51,"line":10495},[49,40656,38545],{"class":73},[49,40658,31387],{"class":5913},[49,40660,78],{"class":77},[49,40662,38988],{"class":159},[49,40664,1207],{"class":73},[49,40666,31396],{"class":5913},[49,40668,78],{"class":77},[49,40670,38988],{"class":159},[49,40672,1207],{"class":73},[49,40674,31405],{"class":5913},[49,40676,78],{"class":77},[49,40678,909],{"class":159},[49,40680,1207],{"class":73},[49,40682,31414],{"class":5913},[49,40684,78],{"class":77},[49,40686,1047],{"class":159},[49,40688,38578],{"class":73},[49,40690,40691],{"class":51,"line":10500},[49,40692,38583],{"class":73},[49,40694,40695,40697,40699,40701,40703,40705,40707,40709,40711,40713,40715,40717,40719],{"class":51,"line":10509},[49,40696,38628],{"class":73},[49,40698,31405],{"class":5913},[49,40700,78],{"class":77},[49,40702,915],{"class":159},[49,40704,1207],{"class":73},[49,40706,31460],{"class":5913},[49,40708,78],{"class":77},[49,40710,915],{"class":159},[49,40712,1207],{"class":73},[49,40714,31414],{"class":5913},[49,40716,78],{"class":77},[49,40718,1021],{"class":159},[49,40720,847],{"class":73},[49,40722,40723],{"class":51,"line":10514},[49,40724,38657],{"class":73},[49,40726,40727],{"class":51,"line":10520},[49,40728,39295],{"class":66},[49,40730,40731,40733,40735,40737],{"class":51,"line":10541},[49,40732,31376],{"class":159},[49,40734,39302],{"class":73},[49,40736,78],{"class":77},[49,40738,38540],{"class":73},[49,40740,40741],{"class":51,"line":10547},[49,40742,39311],{"class":66},[49,40744,40745],{"class":51,"line":10561},[49,40746,39316],{"class":66},[49,40748,40749],{"class":51,"line":10567},[49,40750,39321],{"class":73},[49,40752,40753,40755,40757,40759,40761,40763,40765,40767,40769],{"class":51,"line":10594},[49,40754,39326],{"class":73},[49,40756,1198],{"class":159},[49,40758,1284],{"class":77},[49,40760,1198],{"class":159},[49,40762,1284],{"class":77},[49,40764,38988],{"class":159},[49,40766,1207],{"class":73},[49,40768,35401],{"class":159},[49,40770,38578],{"class":73},[49,40772,40773],{"class":51,"line":10603},[49,40774,38583],{"class":73},[49,40776,40777,40779,40781,40783,40785],{"class":51,"line":10609},[49,40778,39326],{"class":73},[49,40780,35401],{"class":159},[49,40782,1207],{"class":73},[49,40784,32601],{"class":159},[49,40786,38578],{"class":73},[49,40788,40789],{"class":51,"line":10617},[49,40790,38583],{"class":73},[49,40792,40793,40795,40797,40799,40801],{"class":51,"line":10622},[49,40794,39326],{"class":73},[49,40796,32601],{"class":159},[49,40798,1207],{"class":73},[49,40800,1275],{"class":159},[49,40802,847],{"class":73},[49,40804,40805],{"class":51,"line":17301},[49,40806,38657],{"class":73},[49,40808,40809],{"class":51,"line":17307},[49,40810,399],{"emptyLinePlaceholder":398},[49,40812,40813],{"class":51,"line":17330},[49,40814,39387],{"class":66},[49,40816,40817],{"class":51,"line":17336},[49,40818,39392],{"class":66},[49,40820,40821,40823,40825,40827,40829],{"class":51,"line":17359},[49,40822,4100],{"class":77},[49,40824,39399],{"class":73},[49,40826,26732],{"class":77},[49,40828,39404],{"class":159},[49,40830,39407],{"class":73},[49,40832,40833],{"class":51,"line":17373},[49,40834,39412],{"class":66},[49,40836,40837,40839,40841],{"class":51,"line":17393},[49,40838,5339],{"class":77},[49,40840,39419],{"class":159},[49,40842,39422],{"class":73},[49,40844,40845],{"class":51,"line":17399},[49,40846,39427],{"class":66},[49,40848,40849,40851,40853,40855,40857],{"class":51,"line":17410},[49,40850,39432],{"class":73},[49,40852,39435],{"class":5913},[49,40854,78],{"class":77},[49,40856,39440],{"class":59},[49,40858,847],{"class":73},[49,40860,40861],{"class":51,"line":17433},[49,40862,39447],{"class":66},[49,40864,40865,40867,40869,40871,40873,40875],{"class":51,"line":17455},[49,40866,39452],{"class":77},[49,40868,39455],{"class":73},[49,40870,39458],{"class":77},[49,40872,39461],{"class":77},[49,40874,39464],{"class":159},[49,40876,4436],{"class":73},[49,40878,40879],{"class":51,"line":17460},[49,40880,39471],{"class":66},[49,40882,40883,40885,40887],{"class":51,"line":17466},[49,40884,39476],{"class":73},[49,40886,1021],{"class":159},[49,40888,847],{"class":73},[49,40890,40891],{"class":51,"line":17480},[49,40892,39485],{"class":66},[49,40894,40895,40897,40899],{"class":51,"line":17493},[49,40896,39490],{"class":77},[49,40898,39419],{"class":159},[49,40900,39495],{"class":73},[49,40902,40903],{"class":51,"line":17498},[49,40904,39500],{"class":66},[49,40906,40907],{"class":51,"line":17512},[49,40908,39505],{"class":66},[49,40910,40911,40913,40915,40917,40919],{"class":51,"line":17517},[49,40912,39510],{"class":73},[49,40914,1021],{"class":159},[49,40916,1207],{"class":73},[49,40918,39517],{"class":159},[49,40920,847],{"class":73},[49,40922,40923],{"class":51,"line":17523},[49,40924,39524],{"class":66},[49,40926,40927,40929,40931,40933,40935,40937],{"class":51,"line":17528},[49,40928,39452],{"class":77},[49,40930,39455],{"class":73},[49,40932,39458],{"class":77},[49,40934,39461],{"class":77},[49,40936,39464],{"class":159},[49,40938,4436],{"class":73},[49,40940,40941,40943,40945],{"class":51,"line":17542},[49,40942,39476],{"class":73},[49,40944,1021],{"class":159},[49,40946,847],{"class":73},[49,40948,40949],{"class":51,"line":17547},[49,40950,399],{"emptyLinePlaceholder":398},[49,40952,40953],{"class":51,"line":17552},[49,40954,35696],{"class":66},[49,40956,40957,40959,40961],{"class":51,"line":17566},[49,40958,31332],{"class":77},[49,40960,31624],{"class":55},[49,40962,31627],{"class":73},[49,40964,40965,40967,40969,40971],{"class":51,"line":17578},[49,40966,31632],{"class":73},[49,40968,78],{"class":77},[49,40970,31354],{"class":159},[49,40972,39573],{"class":73},[49,40974,40975,40977,40979,40981],{"class":51,"line":17583},[49,40976,31632],{"class":73},[49,40978,78],{"class":77},[49,40980,31354],{"class":159},[49,40982,39584],{"class":73},[49,40984,40985,40987,40989,40991],{"class":51,"line":17596},[49,40986,31632],{"class":73},[49,40988,78],{"class":77},[49,40990,31354],{"class":159},[49,40992,39595],{"class":73},[49,40994,40995,40997,40999,41001],{"class":51,"line":17601},[49,40996,31632],{"class":73},[49,40998,78],{"class":77},[49,41000,31354],{"class":159},[49,41002,39606],{"class":73},[49,41004,41005,41007,41009,41011],{"class":51,"line":17606},[49,41006,31632],{"class":73},[49,41008,78],{"class":77},[49,41010,31354],{"class":159},[49,41012,39617],{"class":73},[49,41014,41015,41017,41019,41021],{"class":51,"line":17611},[49,41016,31632],{"class":73},[49,41018,78],{"class":77},[49,41020,31354],{"class":159},[49,41022,39628],{"class":73},[49,41024,41025,41027],{"class":51,"line":17624},[49,41026,15449],{"class":77},[49,41028,31740],{"class":73},[49,41030,41031],{"class":51,"line":17629},[49,41032,399],{"emptyLinePlaceholder":398},[49,41034,41035],{"class":51,"line":33164},[49,41036,39643],{"class":66},[49,41038,41039,41041,41043,41045,41047],{"class":51,"line":33170},[49,41040,2230],{"class":77},[49,41042,31751],{"class":159},[49,41044,3646],{"class":77},[49,41046,39654],{"class":59},[49,41048,4436],{"class":73},[49,41050,41051,41053,41055,41057,41059,41061,41063,41065,41067],{"class":51,"line":33176},[49,41052,31768],{"class":73},[49,41054,78],{"class":77},[49,41056,30982],{"class":73},[49,41058,31775],{"class":59},[49,41060,2403],{"class":77},[49,41062,31780],{"class":73},[49,41064,2400],{"class":77},[49,41066,31007],{"class":59},[49,41068,847],{"class":73},[49,41070,41071,41073],{"class":51,"line":33182},[49,41072,31830],{"class":159},[49,41074,31016],{"class":73},[49,41076,41077,41079,41081],{"class":51,"line":33188},[49,41078,31820],{"class":73},[49,41080,78],{"class":77},[49,41082,39691],{"class":73},[49,41084,41085,41087,41089,41091,41093,41095,41097,41099],{"class":51,"line":33199},[49,41086,31830],{"class":159},[49,41088,31833],{"class":73},[49,41090,1047],{"class":159},[49,41092,1207],{"class":73},[49,41094,32032],{"class":159},[49,41096,1207],{"class":73},[49,41098,32032],{"class":159},[49,41100,31846],{"class":73},[30,41102,41103],{"start":70},[33,41104,41105],{},"测试代码",[40,41107,41109],{"className":30909,"code":41108,"language":30911,"meta":27,"style":27},"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",[46,41110,41111,41117,41127,41137,41141,41151,41162,41166,41170,41174,41182,41198,41208,41224,41234,41248,41252,41262,41272,41282,41288,41292,41296,41304,41308,41324,41332,41336,41340,41348,41356,41360,41364,41368,41372,41378,41382,41392,41400,41408,41412,41416,41420,41428,41432,41448,41452,41456,41460,41472,41476,41488,41492,41496,41508,41512,41522,41526,41530,41542,41546,41555,41559,41563,41571,41575,41583,41587,41591,41595,41599,41603,41619,41627,41631,41635,41683,41689,41693,41703,41711,41719,41723,41727,41731,41735,41743,41747,41763,41767,41775,41783],{"__ignoreMap":27},[49,41112,41113,41115],{"class":51,"line":52},[49,41114,30923],{"class":77},[49,41116,30926],{"class":73},[49,41118,41119,41121,41123,41125],{"class":51,"line":63},[49,41120,30923],{"class":77},[49,41122,31946],{"class":73},[49,41124,31914],{"class":77},[49,41126,31951],{"class":73},[49,41128,41129,41131,41133,41135],{"class":51,"line":70},[49,41130,31268],{"class":77},[49,41132,31929],{"class":73},[49,41134,30923],{"class":77},[49,41136,31934],{"class":73},[49,41138,41139],{"class":51,"line":219},[49,41140,34453],{"class":66},[49,41142,41143,41145,41147,41149],{"class":51,"line":233},[49,41144,31268],{"class":77},[49,41146,31899],{"class":73},[49,41148,30923],{"class":77},[49,41150,31904],{"class":73},[49,41152,41153,41155,41157,41159],{"class":51,"line":241},[49,41154,31268],{"class":77},[49,41156,32445],{"class":73},[49,41158,30923],{"class":77},[49,41160,41161],{"class":159}," VGG16\n",[49,41163,41164],{"class":51,"line":1920},[49,41165,399],{"emptyLinePlaceholder":398},[49,41167,41168],{"class":51,"line":2011},[49,41169,399],{"emptyLinePlaceholder":398},[49,41171,41172],{"class":51,"line":2017},[49,41173,34482],{"class":66},[49,41175,41176,41178,41180],{"class":51,"line":2029},[49,41177,32478],{"class":77},[49,41179,34489],{"class":55},[49,41181,32484],{"class":73},[49,41183,41184,41186,41188,41190,41192,41194,41196],{"class":51,"line":2311},[49,41185,34496],{"class":73},[49,41187,78],{"class":77},[49,41189,31986],{"class":73},[49,41191,31989],{"class":5913},[49,41193,78],{"class":77},[49,41195,31994],{"class":59},[49,41197,31997],{"class":73},[49,41199,41200,41202,41204,41206],{"class":51,"line":2316},[49,41201,34513],{"class":5913},[49,41203,78],{"class":77},[49,41205,34518],{"class":159},[49,41207,31997],{"class":73},[49,41209,41210,41212,41214,41216,41218,41220,41222],{"class":51,"line":2322},[49,41211,34525],{"class":5913},[49,41213,78],{"class":77},[49,41215,32024],{"class":73},[49,41217,32027],{"class":5913},[49,41219,78],{"class":77},[49,41221,32032],{"class":159},[49,41223,32035],{"class":73},[49,41225,41226,41228,41230,41232],{"class":51,"line":2327},[49,41227,34542],{"class":5913},[49,41229,78],{"class":77},[49,41231,32007],{"class":159},[49,41233,847],{"class":73},[49,41235,41236,41238,41240,41242,41244,41246],{"class":51,"line":2341},[49,41237,34553],{"class":73},[49,41239,78],{"class":77},[49,41241,32065],{"class":73},[49,41243,32068],{"class":5913},[49,41245,78],{"class":77},[49,41247,34564],{"class":73},[49,41249,41250],{"class":51,"line":2346},[49,41251,34569],{"class":66},[49,41253,41254,41256,41258,41260],{"class":51,"line":2352},[49,41255,34574],{"class":5913},[49,41257,78],{"class":77},[49,41259,1047],{"class":159},[49,41261,31997],{"class":73},[49,41263,41264,41266,41268,41270],{"class":51,"line":2373},[49,41265,34585],{"class":5913},[49,41267,78],{"class":77},[49,41269,32007],{"class":159},[49,41271,31997],{"class":73},[49,41273,41274,41276,41278,41280],{"class":51,"line":2378},[49,41275,34596],{"class":5913},[49,41277,78],{"class":77},[49,41279,1021],{"class":159},[49,41281,847],{"class":73},[49,41283,41284,41286],{"class":51,"line":2392},[49,41285,4787],{"class":77},[49,41287,34609],{"class":73},[49,41289,41290],{"class":51,"line":2397},[49,41291,399],{"emptyLinePlaceholder":398},[49,41293,41294],{"class":51,"line":2426},[49,41295,34618],{"class":66},[49,41297,41298,41300,41302],{"class":51,"line":2431},[49,41299,32478],{"class":77},[49,41301,34625],{"class":55},[49,41303,34628],{"class":73},[49,41305,41306],{"class":51,"line":2448},[49,41307,34633],{"class":66},[49,41309,41310,41312,41314,41316,41318,41320,41322],{"class":51,"line":2453},[49,41311,31768],{"class":73},[49,41313,78],{"class":77},[49,41315,31775],{"class":59},[49,41317,2403],{"class":77},[49,41319,31780],{"class":73},[49,41321,2400],{"class":77},[49,41323,34650],{"class":59},[49,41325,41326,41328,41330],{"class":51,"line":2458},[49,41327,31820],{"class":73},[49,41329,78],{"class":77},[49,41331,32820],{"class":73},[49,41333,41334],{"class":51,"line":2463},[49,41335,399],{"emptyLinePlaceholder":398},[49,41337,41338],{"class":51,"line":2477},[49,41339,34667],{"class":66},[49,41341,41342,41344,41346],{"class":51,"line":2482},[49,41343,34672],{"class":73},[49,41345,78],{"class":77},[49,41347,32873],{"class":159},[49,41349,41350,41352,41354],{"class":51,"line":3274},[49,41351,34681],{"class":73},[49,41353,78],{"class":77},[49,41355,3782],{"class":159},[49,41357,41358],{"class":51,"line":3288},[49,41359,399],{"emptyLinePlaceholder":398},[49,41361,41362],{"class":51,"line":3296},[49,41363,34694],{"class":66},[49,41365,41366],{"class":51,"line":3301},[49,41367,34699],{"class":66},[49,41369,41370],{"class":51,"line":3307},[49,41371,34704],{"class":66},[49,41373,41374,41376],{"class":51,"line":3313},[49,41375,34709],{"class":77},[49,41377,33415],{"class":73},[49,41379,41380],{"class":51,"line":3318},[49,41381,34716],{"class":66},[49,41383,41384,41386,41388,41390],{"class":51,"line":8645},[49,41385,4100],{"class":77},[49,41387,34723],{"class":73},[49,41389,26732],{"class":77},[49,41391,34728],{"class":73},[49,41393,41394,41396,41398],{"class":51,"line":8669},[49,41395,34733],{"class":73},[49,41397,78],{"class":77},[49,41399,34738],{"class":73},[49,41401,41402,41404,41406],{"class":51,"line":8674},[49,41403,34743],{"class":73},[49,41405,78],{"class":77},[49,41407,34748],{"class":73},[49,41409,41410],{"class":51,"line":8680},[49,41411,34753],{"class":66},[49,41413,41414],{"class":51,"line":8707},[49,41415,33406],{"class":73},[49,41417,41418],{"class":51,"line":8712},[49,41419,34762],{"class":66},[49,41421,41422,41424,41426],{"class":51,"line":8718},[49,41423,33191],{"class":73},[49,41425,78],{"class":77},[49,41427,34771],{"class":73},[49,41429,41430],{"class":51,"line":8730},[49,41431,34776],{"class":66},[49,41433,41434,41436,41438,41440,41442,41444,41446],{"class":51,"line":8742},[49,41435,33208],{"class":73},[49,41437,78],{"class":77},[49,41439,33213],{"class":73},[49,41441,33216],{"class":5913},[49,41443,78],{"class":77},[49,41445,1047],{"class":159},[49,41447,847],{"class":73},[49,41449,41450],{"class":51,"line":8754},[49,41451,34797],{"class":66},[49,41453,41454],{"class":51,"line":10413},[49,41455,34802],{"class":66},[49,41457,41458],{"class":51,"line":10438},[49,41459,34807],{"class":66},[49,41461,41462,41464,41466,41468,41470],{"class":51,"line":10461},[49,41463,34812],{"class":73},[49,41465,10174],{"class":77},[49,41467,33318],{"class":73},[49,41469,3646],{"class":77},[49,41471,34821],{"class":73},[49,41473,41474],{"class":51,"line":10485},[49,41475,34826],{"class":66},[49,41477,41478,41480,41482,41484,41486],{"class":51,"line":10490},[49,41479,34831],{"class":73},[49,41481,10174],{"class":77},[49,41483,34836],{"class":73},[49,41485,1021],{"class":159},[49,41487,847],{"class":73},[49,41489,41490],{"class":51,"line":10495},[49,41491,399],{"emptyLinePlaceholder":398},[49,41493,41494],{"class":51,"line":10500},[49,41495,34849],{"class":66},[49,41497,41498,41500,41502,41504,41506],{"class":51,"line":10509},[49,41499,34854],{"class":73},[49,41501,78],{"class":77},[49,41503,34859],{"class":73},[49,41505,1413],{"class":77},[49,41507,34864],{"class":73},[49,41509,41510],{"class":51,"line":10514},[49,41511,34869],{"class":66},[49,41513,41514,41516,41518,41520],{"class":51,"line":10520},[49,41515,32982],{"class":159},[49,41517,841],{"class":73},[49,41519,34878],{"class":59},[49,41521,34881],{"class":73},[49,41523,41524],{"class":51,"line":10541},[49,41525,399],{"emptyLinePlaceholder":398},[49,41527,41528],{"class":51,"line":10547},[49,41529,34890],{"class":66},[49,41531,41532,41534,41536,41538,41540],{"class":51,"line":10561},[49,41533,2230],{"class":77},[49,41535,31751],{"class":159},[49,41537,3646],{"class":77},[49,41539,31756],{"class":59},[49,41541,4436],{"class":73},[49,41543,41544],{"class":51,"line":10567},[49,41545,34907],{"class":66},[49,41547,41548,41550,41552],{"class":51,"line":10594},[49,41549,31820],{"class":73},[49,41551,78],{"class":77},[49,41553,41554],{"class":73},"VGG16()\n",[49,41556,41557],{"class":51,"line":10603},[49,41558,34920],{"class":66},[49,41560,41561],{"class":51,"line":10609},[49,41562,34925],{"class":66},[49,41564,41565,41567,41569],{"class":51,"line":10617},[49,41566,34930],{"class":73},[49,41568,34933],{"class":59},[49,41570,31028],{"class":73},[49,41572,41573],{"class":51,"line":10622},[49,41574,34940],{"class":66},[49,41576,41577,41579,41581],{"class":51,"line":17301},[49,41578,34553],{"class":73},[49,41580,78],{"class":77},[49,41582,34949],{"class":73},[49,41584,41585],{"class":51,"line":17307},[49,41586,34954],{"class":66},[49,41588,41589],{"class":51,"line":17330},[49,41590,34959],{"class":73},[49,41592,41593],{"class":51,"line":17336},[49,41594,399],{"emptyLinePlaceholder":398},[49,41596,41597],{"class":51,"line":17359},[49,41598,34968],{"class":66},[49,41600,41601],{"class":51,"line":17373},[49,41602,34973],{"class":66},[49,41604,41605,41607,41609,41611,41613,41615,41617],{"class":51,"line":17393},[49,41606,31768],{"class":73},[49,41608,78],{"class":77},[49,41610,31775],{"class":59},[49,41612,2403],{"class":77},[49,41614,31780],{"class":73},[49,41616,2400],{"class":77},[49,41618,34650],{"class":59},[49,41620,41621,41623,41625],{"class":51,"line":17399},[49,41622,31820],{"class":73},[49,41624,78],{"class":77},[49,41626,32820],{"class":73},[49,41628,41629],{"class":51,"line":17410},[49,41630,35002],{"class":66},[49,41632,41633],{"class":51,"line":17433},[49,41634,35007],{"class":66},[49,41636,41637,41639,41641,41643,41645,41647,41649,41651,41653,41655,41657,41659,41661,41663,41665,41667,41669,41671,41673,41675,41677,41679,41681],{"class":51,"line":17455},[49,41638,35012],{"class":73},[49,41640,78],{"class":77},[49,41642,1719],{"class":73},[49,41644,35019],{"class":59},[49,41646,1207],{"class":73},[49,41648,35024],{"class":59},[49,41650,1207],{"class":73},[49,41652,35029],{"class":59},[49,41654,1207],{"class":73},[49,41656,35034],{"class":59},[49,41658,1207],{"class":73},[49,41660,35039],{"class":59},[49,41662,1207],{"class":73},[49,41664,35044],{"class":59},[49,41666,1207],{"class":73},[49,41668,35049],{"class":59},[49,41670,1207],{"class":73},[49,41672,35054],{"class":59},[49,41674,1207],{"class":73},[49,41676,35059],{"class":59},[49,41678,1207],{"class":73},[49,41680,35064],{"class":59},[49,41682,33777],{"class":73},[49,41684,41685,41687],{"class":51,"line":17460},[49,41686,34709],{"class":77},[49,41688,33415],{"class":73},[49,41690,41691],{"class":51,"line":17466},[49,41692,35077],{"class":66},[49,41694,41695,41697,41699,41701],{"class":51,"line":17480},[49,41696,4100],{"class":77},[49,41698,35084],{"class":73},[49,41700,26732],{"class":77},[49,41702,34728],{"class":73},[49,41704,41705,41707,41709],{"class":51,"line":17493},[49,41706,33141],{"class":73},[49,41708,78],{"class":77},[49,41710,33146],{"class":73},[49,41712,41713,41715,41717],{"class":51,"line":17498},[49,41714,33156],{"class":73},[49,41716,78],{"class":77},[49,41718,33161],{"class":73},[49,41720,41721],{"class":51,"line":17512},[49,41722,399],{"emptyLinePlaceholder":398},[49,41724,41725],{"class":51,"line":17517},[49,41726,35113],{"class":66},[49,41728,41729],{"class":51,"line":17523},[49,41730,33406],{"class":73},[49,41732,41733],{"class":51,"line":17528},[49,41734,35122],{"class":66},[49,41736,41737,41739,41741],{"class":51,"line":17542},[49,41738,33191],{"class":73},[49,41740,78],{"class":77},[49,41742,33196],{"class":73},[49,41744,41745],{"class":51,"line":17547},[49,41746,35135],{"class":66},[49,41748,41749,41751,41753,41755,41757,41759,41761],{"class":51,"line":17552},[49,41750,33208],{"class":73},[49,41752,78],{"class":77},[49,41754,33213],{"class":73},[49,41756,33216],{"class":5913},[49,41758,78],{"class":77},[49,41760,1047],{"class":159},[49,41762,847],{"class":73},[49,41764,41765],{"class":51,"line":17566},[49,41766,35156],{"class":66},[49,41768,41769,41771,41773],{"class":51,"line":17578},[49,41770,35161],{"class":73},[49,41772,78],{"class":77},[49,41774,35166],{"class":73},[49,41776,41777,41779,41781],{"class":51,"line":17583},[49,41778,35171],{"class":73},[49,41780,78],{"class":77},[49,41782,35176],{"class":73},[49,41784,41785,41787,41789,41791,41793,41795,41797,41799],{"class":51,"line":17596},[49,41786,35181],{"class":159},[49,41788,841],{"class":73},[49,41790,35186],{"class":59},[49,41792,35189],{"class":73},[49,41794,35192],{"class":59},[49,41796,1207],{"class":73},[49,41798,35197],{"class":59},[49,41800,35200],{"class":73},[18,41802,41804],{"id":41803},"_23googlenet","2.3.GoogLeNet",[130,41806,41808],{"id":41807},"_231原理","2.3.1.原理",[30,41810,41811],{},[33,41812,41813],{},"网络结构",[14,41815,41816],{},[25,41817],{"alt":27,"src":41818},"\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",[14,41820,41821],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41823,41824],{},[25,41825],{"alt":27,"src":41826},"\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",[14,41828,41829],{},[25,41830],{"alt":27,"src":41831},"\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",[14,41833,41834],{},[25,41835],{"alt":27,"src":41836},"\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",[30,41838,41839],{"start":63},[33,41840,41841],{},"1x1卷积的优点",[14,41843,41844],{},[25,41845],{"alt":27,"src":41846},"\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",[30,41848,41849],{"start":70},[33,41850,41851],{},"全局平均池化层优点",[14,41853,41854],{},[25,41855],{"alt":27,"src":41856},"\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",[14,41858,41859],{},[25,41860],{"alt":27,"src":41861},"\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",[30,41863,41864],{"start":219},[33,41865,41866],{},"参数详细描述",[14,41868,41869],{},[25,41870],{"alt":27,"src":41871},"\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",[14,41873,41874],{},[25,41875],{"alt":27,"src":41876},"\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",[14,41878,41879],{},[25,41880],{"alt":27,"src":41881},"\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",[14,41883,41884],{},[25,41885],{"alt":27,"src":41886},"\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",[14,41888,41889],{},[25,41890],{"alt":27,"src":41891},"\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",[14,41893,41894],{},[25,41895],{"alt":27,"src":41896},"\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",[14,41898,41899],{},[25,41900],{"alt":27,"src":41901},"\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",[14,41903,41904],{},[25,41905],{"alt":27,"src":41906},"\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",[14,41908,41909],{},[25,41910],{"alt":27,"src":41911},"\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",[14,41913,41914],{},[25,41915],{"alt":27,"src":41916},"\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",[14,41918,41919],{},[25,41920],{"alt":27,"src":41921},"\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",[14,41923,41924],{},[25,41925],{"alt":27,"src":41926},"\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",[14,41928,41929],{},[25,41930],{"alt":27,"src":41931},"\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",[14,41933,41934],{},[25,41935],{"alt":27,"src":41936},"\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",[14,41938,41939],{},[25,41940],{"alt":27,"src":41941},"\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",[14,41943,41944],{},[25,41945],{"alt":27,"src":41946},"\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",[14,41948,41949],{},[25,41950],{"alt":27,"src":41951},"\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",[14,41953,41954],{},[25,41955],{"alt":27,"src":41956},"\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",[14,41958,41959],{},[25,41960],{"alt":27,"src":41961},"\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",[14,41963,41964],{},[25,41965],{"alt":27,"src":41966},"\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",[14,41968,41969],{},[25,41970],{"alt":27,"src":41971},"\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",[130,41973,41975],{"id":41974},"_232代码实现","2.3.2.代码实现",[30,41977,41978],{},[33,41979,31242],{},[14,41981,41982],{},"根据原理一步一步搭建即可",[40,41984,41986],{"className":30909,"code":41985,"language":30911,"meta":27,"style":27},"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",[46,41987,41988,41994,42004,42014,42018,42035,42044,42059,42069,42074,42107,42112,42149,42196,42201,42237,42284,42289,42294,42329,42361,42365,42373,42389,42413,42438,42459,42464,42479,42483,42487,42492,42509,42514,42523,42538,42549,42593,42597,42625,42629,42640,42668,42672,42709,42713,42741,42745,42756,42792,42824,42852,42856,42867,42901,42933,42965,42998,43032,43060,43064,43075,43108,43140,43154,43158,43171,43175,43180,43192,43200,43222,43227,43232,43237,43242,43247,43252,43266,43274,43283,43296,43311,43320,43324,43332,43343,43354,43365,43376,43387,43393,43397,43402,43414,43434,43443],{"__ignoreMap":27},[49,41989,41990,41992],{"class":51,"line":52},[49,41991,30923],{"class":77},[49,41993,30926],{"class":73},[49,41995,41996,41998,42000,42002],{"class":51,"line":63},[49,41997,31268],{"class":77},[49,41999,31271],{"class":73},[49,42001,30923],{"class":77},[49,42003,31276],{"class":73},[49,42005,42006,42008,42010,42012],{"class":51,"line":70},[49,42007,31268],{"class":77},[49,42009,31288],{"class":73},[49,42011,30923],{"class":77},[49,42013,31293],{"class":73},[49,42015,42016],{"class":51,"line":219},[49,42017,399],{"emptyLinePlaceholder":398},[49,42019,42020,42022,42025,42027,42029,42031,42033],{"class":51,"line":233},[49,42021,15391],{"class":77},[49,42023,42024],{"class":55}," Inception",[49,42026,841],{"class":73},[49,42028,31309],{"class":55},[49,42030,1387],{"class":73},[49,42032,31314],{"class":55},[49,42034,31317],{"class":73},[49,42036,42037,42039,42041],{"class":51,"line":241},[49,42038,31332],{"class":77},[49,42040,31335],{"class":159},[49,42042,42043],{"class":73},"(self,in_channels,c1,c2,c3,c4):\n",[49,42045,42046,42048,42051,42053,42055,42057],{"class":51,"line":1920},[49,42047,31348],{"class":159},[49,42049,42050],{"class":73},"(Inception,",[49,42052,31354],{"class":159},[49,42054,31357],{"class":73},[49,42056,31360],{"class":159},[49,42058,2674],{"class":73},[49,42060,42061,42063,42065,42067],{"class":51,"line":2011},[49,42062,31376],{"class":159},[49,42064,35302],{"class":73},[49,42066,78],{"class":77},[49,42068,35307],{"class":73},[49,42070,42071],{"class":51,"line":2017},[49,42072,42073],{"class":66},"        # 路线1：定义1*1卷积\n",[49,42075,42076,42078,42081,42083,42085,42087,42089,42092,42094,42096,42099,42101,42103,42105],{"class":51,"line":2029},[49,42077,31376],{"class":159},[49,42079,42080],{"class":73},".p1_1",[49,42082,78],{"class":77},[49,42084,31384],{"class":73},[49,42086,31387],{"class":5913},[49,42088,78],{"class":77},[49,42090,42091],{"class":73},"in_channels,",[49,42093,31396],{"class":5913},[49,42095,78],{"class":77},[49,42097,42098],{"class":73},"c1,",[49,42100,31405],{"class":5913},[49,42102,78],{"class":77},[49,42104,1047],{"class":159},[49,42106,847],{"class":73},[49,42108,42109],{"class":51,"line":2311},[49,42110,42111],{"class":66},"        # 路线2：定义1*1卷积和3*3\n",[49,42113,42114,42116,42119,42121,42123,42125,42127,42129,42131,42133,42136,42138,42141,42143,42145,42147],{"class":51,"line":2316},[49,42115,31376],{"class":159},[49,42117,42118],{"class":73},".p2_1",[49,42120,78],{"class":77},[49,42122,31384],{"class":73},[49,42124,31387],{"class":5913},[49,42126,78],{"class":77},[49,42128,42091],{"class":73},[49,42130,31396],{"class":5913},[49,42132,78],{"class":77},[49,42134,42135],{"class":73},"c2[",[49,42137,1021],{"class":159},[49,42139,42140],{"class":73},"],",[49,42142,31405],{"class":5913},[49,42144,78],{"class":77},[49,42146,1047],{"class":159},[49,42148,847],{"class":73},[49,42150,42151,42153,42156,42158,42160,42162,42164,42166,42168,42170,42172,42174,42176,42178,42180,42182,42184,42186,42188,42190,42192,42194],{"class":51,"line":2322},[49,42152,31376],{"class":159},[49,42154,42155],{"class":73},".p2_2",[49,42157,78],{"class":77},[49,42159,31384],{"class":73},[49,42161,31387],{"class":5913},[49,42163,78],{"class":77},[49,42165,42135],{"class":73},[49,42167,1021],{"class":159},[49,42169,42140],{"class":73},[49,42171,31396],{"class":5913},[49,42173,78],{"class":77},[49,42175,42135],{"class":73},[49,42177,1047],{"class":159},[49,42179,42140],{"class":73},[49,42181,31405],{"class":5913},[49,42183,78],{"class":77},[49,42185,909],{"class":159},[49,42187,1207],{"class":73},[49,42189,31414],{"class":5913},[49,42191,78],{"class":77},[49,42193,1047],{"class":159},[49,42195,847],{"class":73},[49,42197,42198],{"class":51,"line":2327},[49,42199,42200],{"class":66},"        # 路线3：定义1*1卷积和5*5\n",[49,42202,42203,42205,42208,42210,42212,42214,42216,42218,42220,42222,42225,42227,42229,42231,42233,42235],{"class":51,"line":2341},[49,42204,31376],{"class":159},[49,42206,42207],{"class":73},".p3_1",[49,42209,78],{"class":77},[49,42211,31384],{"class":73},[49,42213,31387],{"class":5913},[49,42215,78],{"class":77},[49,42217,42091],{"class":73},[49,42219,31396],{"class":5913},[49,42221,78],{"class":77},[49,42223,42224],{"class":73},"c3[",[49,42226,1021],{"class":159},[49,42228,42140],{"class":73},[49,42230,31405],{"class":5913},[49,42232,78],{"class":77},[49,42234,1047],{"class":159},[49,42236,847],{"class":73},[49,42238,42239,42241,42244,42246,42248,42250,42252,42254,42256,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282],{"class":51,"line":2346},[49,42240,31376],{"class":159},[49,42242,42243],{"class":73},".p3_2",[49,42245,78],{"class":77},[49,42247,31384],{"class":73},[49,42249,31387],{"class":5913},[49,42251,78],{"class":77},[49,42253,42224],{"class":73},[49,42255,1021],{"class":159},[49,42257,42140],{"class":73},[49,42259,31396],{"class":5913},[49,42261,78],{"class":77},[49,42263,42224],{"class":73},[49,42265,1047],{"class":159},[49,42267,42140],{"class":73},[49,42269,31405],{"class":5913},[49,42271,78],{"class":77},[49,42273,1148],{"class":159},[49,42275,1207],{"class":73},[49,42277,31414],{"class":5913},[49,42279,78],{"class":77},[49,42281,915],{"class":159},[49,42283,847],{"class":73},[49,42285,42286],{"class":51,"line":2352},[49,42287,42288],{"class":66},"        # 路线4：定义3*3最大池化和1*1卷积\n",[49,42290,42291],{"class":51,"line":2373},[49,42292,42293],{"class":66},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[49,42295,42296,42298,42301,42303,42305,42307,42309,42311,42313,42315,42317,42319,42321,42323,42325,42327],{"class":51,"line":2378},[49,42297,31376],{"class":159},[49,42299,42300],{"class":73},".p4_1",[49,42302,78],{"class":77},[49,42304,35360],{"class":73},[49,42306,31405],{"class":5913},[49,42308,78],{"class":77},[49,42310,909],{"class":159},[49,42312,1207],{"class":73},[49,42314,31460],{"class":5913},[49,42316,78],{"class":77},[49,42318,1047],{"class":159},[49,42320,1207],{"class":73},[49,42322,31414],{"class":5913},[49,42324,78],{"class":77},[49,42326,1047],{"class":159},[49,42328,847],{"class":73},[49,42330,42331,42333,42336,42338,42340,42342,42344,42346,42348,42350,42353,42355,42357,42359],{"class":51,"line":2392},[49,42332,31376],{"class":159},[49,42334,42335],{"class":73},".p4_2",[49,42337,78],{"class":77},[49,42339,31384],{"class":73},[49,42341,31387],{"class":5913},[49,42343,78],{"class":77},[49,42345,42091],{"class":73},[49,42347,31396],{"class":5913},[49,42349,78],{"class":77},[49,42351,42352],{"class":73},"c4,",[49,42354,31405],{"class":5913},[49,42356,78],{"class":77},[49,42358,1047],{"class":159},[49,42360,847],{"class":73},[49,42362,42363],{"class":51,"line":2397},[49,42364,399],{"emptyLinePlaceholder":398},[49,42366,42367,42369,42371],{"class":51,"line":2426},[49,42368,31332],{"class":77},[49,42370,31624],{"class":55},[49,42372,31627],{"class":73},[49,42374,42375,42378,42380,42382,42384,42386],{"class":51,"line":2431},[49,42376,42377],{"class":73},"        p1",[49,42379,78],{"class":77},[49,42381,31354],{"class":159},[49,42383,35715],{"class":73},[49,42385,31354],{"class":159},[49,42387,42388],{"class":73},".p1_1(x))\n",[49,42390,42391,42393,42395,42397,42399,42401,42404,42406,42408,42410],{"class":51,"line":2448},[49,42392,7782],{"class":73},[49,42394,78],{"class":77},[49,42396,31354],{"class":159},[49,42398,35715],{"class":73},[49,42400,31354],{"class":159},[49,42402,42403],{"class":73},".p2_2(",[49,42405,31354],{"class":159},[49,42407,35715],{"class":73},[49,42409,31354],{"class":159},[49,42411,42412],{"class":73},".p2_1(x))))\n",[49,42414,42415,42418,42420,42422,42424,42426,42429,42431,42433,42435],{"class":51,"line":2453},[49,42416,42417],{"class":73},"        p3",[49,42419,78],{"class":77},[49,42421,31354],{"class":159},[49,42423,35715],{"class":73},[49,42425,31354],{"class":159},[49,42427,42428],{"class":73},".p3_2(",[49,42430,31354],{"class":159},[49,42432,35715],{"class":73},[49,42434,31354],{"class":159},[49,42436,42437],{"class":73},".p3_1(x))))\n",[49,42439,42440,42443,42445,42447,42449,42451,42454,42456],{"class":51,"line":2458},[49,42441,42442],{"class":73},"        p4",[49,42444,78],{"class":77},[49,42446,31354],{"class":159},[49,42448,35715],{"class":73},[49,42450,31354],{"class":159},[49,42452,42453],{"class":73},".p4_2(",[49,42455,31354],{"class":159},[49,42457,42458],{"class":73},".p4_1(x)))\n",[49,42460,42461],{"class":51,"line":2463},[49,42462,42463],{"class":66},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[49,42465,42466,42468,42471,42473,42475,42477],{"class":51,"line":2477},[49,42467,15449],{"class":77},[49,42469,42470],{"class":73}," torch.cat((p1,p2,p3,p4),",[49,42472,33216],{"class":5913},[49,42474,78],{"class":77},[49,42476,1047],{"class":159},[49,42478,847],{"class":73},[49,42480,42481],{"class":51,"line":2482},[49,42482,399],{"emptyLinePlaceholder":398},[49,42484,42485],{"class":51,"line":3274},[49,42486,399],{"emptyLinePlaceholder":398},[49,42488,42489],{"class":51,"line":3288},[49,42490,42491],{"class":66},"# 搭建GoogLeNet网络\n",[49,42493,42494,42496,42499,42501,42503,42505,42507],{"class":51,"line":3296},[49,42495,15391],{"class":77},[49,42497,42498],{"class":55}," GoogLeNet",[49,42500,841],{"class":73},[49,42502,31309],{"class":55},[49,42504,1387],{"class":73},[49,42506,31314],{"class":55},[49,42508,31317],{"class":73},[49,42510,42511],{"class":51,"line":3301},[49,42512,42513],{"class":66},"    # 必须把Inception导入到里边\n",[49,42515,42516,42518,42520],{"class":51,"line":3307},[49,42517,31332],{"class":77},[49,42519,31335],{"class":159},[49,42521,42522],{"class":73},"(self,Inception):\n",[49,42524,42525,42527,42530,42532,42534,42536],{"class":51,"line":3313},[49,42526,31348],{"class":159},[49,42528,42529],{"class":73},"(GoogLeNet,",[49,42531,31354],{"class":159},[49,42533,31357],{"class":73},[49,42535,31360],{"class":159},[49,42537,2674],{"class":73},[49,42539,42540,42542,42545,42547],{"class":51,"line":3318},[49,42541,31376],{"class":159},[49,42543,42544],{"class":73},".b1",[49,42546,78],{"class":77},[49,42548,38540],{"class":73},[49,42550,42551,42553,42555,42557,42559,42561,42563,42565,42567,42569,42571,42573,42575,42577,42579,42581,42583,42585,42587,42589,42591],{"class":51,"line":8645},[49,42552,38545],{"class":73},[49,42554,31387],{"class":5913},[49,42556,78],{"class":77},[49,42558,1047],{"class":159},[49,42560,1207],{"class":73},[49,42562,31396],{"class":5913},[49,42564,78],{"class":77},[49,42566,1033],{"class":159},[49,42568,1207],{"class":73},[49,42570,31405],{"class":5913},[49,42572,78],{"class":77},[49,42574,1198],{"class":159},[49,42576,1207],{"class":73},[49,42578,31460],{"class":5913},[49,42580,78],{"class":77},[49,42582,915],{"class":159},[49,42584,1207],{"class":73},[49,42586,31414],{"class":5913},[49,42588,78],{"class":77},[49,42590,909],{"class":159},[49,42592,38578],{"class":73},[49,42594,42595],{"class":51,"line":8669},[49,42596,38583],{"class":73},[49,42598,42599,42601,42603,42605,42607,42609,42611,42613,42615,42617,42619,42621,42623],{"class":51,"line":8674},[49,42600,38628],{"class":73},[49,42602,31405],{"class":5913},[49,42604,78],{"class":77},[49,42606,909],{"class":159},[49,42608,1207],{"class":73},[49,42610,31460],{"class":5913},[49,42612,78],{"class":77},[49,42614,915],{"class":159},[49,42616,1207],{"class":73},[49,42618,31414],{"class":5913},[49,42620,78],{"class":77},[49,42622,1047],{"class":159},[49,42624,847],{"class":73},[49,42626,42627],{"class":51,"line":8680},[49,42628,38657],{"class":73},[49,42630,42631,42633,42636,42638],{"class":51,"line":8707},[49,42632,31376],{"class":159},[49,42634,42635],{"class":73},".b2",[49,42637,78],{"class":77},[49,42639,38540],{"class":73},[49,42641,42642,42644,42646,42648,42650,42652,42654,42656,42658,42660,42662,42664,42666],{"class":51,"line":8712},[49,42643,38545],{"class":73},[49,42645,31387],{"class":5913},[49,42647,78],{"class":77},[49,42649,1033],{"class":159},[49,42651,1207],{"class":73},[49,42653,31396],{"class":5913},[49,42655,78],{"class":77},[49,42657,1033],{"class":159},[49,42659,1207],{"class":73},[49,42661,31405],{"class":5913},[49,42663,78],{"class":77},[49,42665,1047],{"class":159},[49,42667,38578],{"class":73},[49,42669,42670],{"class":51,"line":8718},[49,42671,38583],{"class":73},[49,42673,42674,42676,42678,42680,42682,42684,42686,42688,42691,42693,42695,42697,42699,42701,42703,42705,42707],{"class":51,"line":8730},[49,42675,38545],{"class":73},[49,42677,31387],{"class":5913},[49,42679,78],{"class":77},[49,42681,1033],{"class":159},[49,42683,1207],{"class":73},[49,42685,31396],{"class":5913},[49,42687,78],{"class":77},[49,42689,42690],{"class":159},"192",[49,42692,1207],{"class":73},[49,42694,31405],{"class":5913},[49,42696,78],{"class":77},[49,42698,909],{"class":159},[49,42700,1207],{"class":73},[49,42702,31414],{"class":5913},[49,42704,78],{"class":77},[49,42706,1047],{"class":159},[49,42708,38578],{"class":73},[49,42710,42711],{"class":51,"line":8742},[49,42712,38583],{"class":73},[49,42714,42715,42717,42719,42721,42723,42725,42727,42729,42731,42733,42735,42737,42739],{"class":51,"line":8754},[49,42716,38628],{"class":73},[49,42718,31405],{"class":5913},[49,42720,78],{"class":77},[49,42722,909],{"class":159},[49,42724,1207],{"class":73},[49,42726,31460],{"class":5913},[49,42728,78],{"class":77},[49,42730,915],{"class":159},[49,42732,1207],{"class":73},[49,42734,31414],{"class":5913},[49,42736,78],{"class":77},[49,42738,1047],{"class":159},[49,42740,847],{"class":73},[49,42742,42743],{"class":51,"line":10413},[49,42744,38657],{"class":73},[49,42746,42747,42749,42752,42754],{"class":51,"line":10438},[49,42748,31376],{"class":159},[49,42750,42751],{"class":73},".b3",[49,42753,78],{"class":77},[49,42755,38540],{"class":73},[49,42757,42758,42761,42763,42765,42767,42770,42772,42774,42776,42779,42781,42783,42785,42788,42790],{"class":51,"line":10461},[49,42759,42760],{"class":73},"            Inception(",[49,42762,42690],{"class":159},[49,42764,1207],{"class":73},[49,42766,1033],{"class":159},[49,42768,42769],{"class":73},",(",[49,42771,1039],{"class":159},[49,42773,1207],{"class":73},[49,42775,32601],{"class":159},[49,42777,42778],{"class":73},"),(",[49,42780,1430],{"class":159},[49,42782,1207],{"class":73},[49,42784,1027],{"class":159},[49,42786,42787],{"class":73},"),",[49,42789,1027],{"class":159},[49,42791,38578],{"class":73},[49,42793,42794,42796,42798,42800,42802,42804,42806,42808,42810,42812,42814,42816,42818,42820,42822],{"class":51,"line":10485},[49,42795,42760],{"class":73},[49,42797,35401],{"class":159},[49,42799,1207],{"class":73},[49,42801,32601],{"class":159},[49,42803,42769],{"class":73},[49,42805,32601],{"class":159},[49,42807,1207],{"class":73},[49,42809,42690],{"class":159},[49,42811,42778],{"class":73},[49,42813,1027],{"class":159},[49,42815,1207],{"class":73},[49,42817,1039],{"class":159},[49,42819,42787],{"class":73},[49,42821,1033],{"class":159},[49,42823,38578],{"class":73},[49,42825,42826,42828,42830,42832,42834,42836,42838,42840,42842,42844,42846,42848,42850],{"class":51,"line":10490},[49,42827,38628],{"class":73},[49,42829,31405],{"class":5913},[49,42831,78],{"class":77},[49,42833,909],{"class":159},[49,42835,1207],{"class":73},[49,42837,31460],{"class":5913},[49,42839,78],{"class":77},[49,42841,915],{"class":159},[49,42843,1207],{"class":73},[49,42845,31414],{"class":5913},[49,42847,78],{"class":77},[49,42849,1047],{"class":159},[49,42851,847],{"class":73},[49,42853,42854],{"class":51,"line":10495},[49,42855,38657],{"class":73},[49,42857,42858,42860,42863,42865],{"class":51,"line":10500},[49,42859,31376],{"class":159},[49,42861,42862],{"class":73},".b4",[49,42864,78],{"class":77},[49,42866,38540],{"class":73},[49,42868,42869,42871,42874,42876,42878,42880,42882,42884,42887,42889,42891,42893,42895,42897,42899],{"class":51,"line":10509},[49,42870,42760],{"class":73},[49,42872,42873],{"class":159},"480",[49,42875,1207],{"class":73},[49,42877,42690],{"class":159},[49,42879,42769],{"class":73},[49,42881,1039],{"class":159},[49,42883,1207],{"class":73},[49,42885,42886],{"class":159},"208",[49,42888,42778],{"class":73},[49,42890,1430],{"class":159},[49,42892,1207],{"class":73},[49,42894,1436],{"class":159},[49,42896,42787],{"class":73},[49,42898,1033],{"class":159},[49,42900,38578],{"class":73},[49,42902,42903,42905,42907,42909,42911,42913,42915,42917,42919,42921,42923,42925,42927,42929,42931],{"class":51,"line":10514},[49,42904,42760],{"class":73},[49,42906,38988],{"class":159},[49,42908,1207],{"class":73},[49,42910,21745],{"class":159},[49,42912,42769],{"class":73},[49,42914,1447],{"class":159},[49,42916,1207],{"class":73},[49,42918,32032],{"class":159},[49,42920,42778],{"class":73},[49,42922,1629],{"class":159},[49,42924,1207],{"class":73},[49,42926,1033],{"class":159},[49,42928,42787],{"class":73},[49,42930,1033],{"class":159},[49,42932,38578],{"class":73},[49,42934,42935,42937,42939,42941,42943,42945,42947,42949,42951,42953,42955,42957,42959,42961,42963],{"class":51,"line":10520},[49,42936,42760],{"class":73},[49,42938,38988],{"class":159},[49,42940,1207],{"class":73},[49,42942,32601],{"class":159},[49,42944,42769],{"class":73},[49,42946,32601],{"class":159},[49,42948,1207],{"class":73},[49,42950,35401],{"class":159},[49,42952,42778],{"class":73},[49,42954,1629],{"class":159},[49,42956,1207],{"class":73},[49,42958,1033],{"class":159},[49,42960,42787],{"class":73},[49,42962,1033],{"class":159},[49,42964,38578],{"class":73},[49,42966,42967,42969,42971,42973,42975,42977,42979,42981,42984,42986,42988,42990,42992,42994,42996],{"class":51,"line":10541},[49,42968,42760],{"class":73},[49,42970,38988],{"class":159},[49,42972,1207],{"class":73},[49,42974,1447],{"class":159},[49,42976,42769],{"class":73},[49,42978,32601],{"class":159},[49,42980,1207],{"class":73},[49,42982,42983],{"class":159},"288",[49,42985,42778],{"class":73},[49,42987,1027],{"class":159},[49,42989,1207],{"class":73},[49,42991,1033],{"class":159},[49,42993,42787],{"class":73},[49,42995,1033],{"class":159},[49,42997,38578],{"class":73},[49,42999,43000,43002,43005,43007,43009,43011,43013,43015,43018,43020,43022,43024,43026,43028,43030],{"class":51,"line":10547},[49,43001,42760],{"class":73},[49,43003,43004],{"class":159},"528",[49,43006,1207],{"class":73},[49,43008,35401],{"class":159},[49,43010,42769],{"class":73},[49,43012,21745],{"class":159},[49,43014,1207],{"class":73},[49,43016,43017],{"class":159},"320",[49,43019,42778],{"class":73},[49,43021,1027],{"class":159},[49,43023,1207],{"class":73},[49,43025,32601],{"class":159},[49,43027,42787],{"class":73},[49,43029,32601],{"class":159},[49,43031,38578],{"class":73},[49,43033,43034,43036,43038,43040,43042,43044,43046,43048,43050,43052,43054,43056,43058],{"class":51,"line":10561},[49,43035,38628],{"class":73},[49,43037,31405],{"class":5913},[49,43039,78],{"class":77},[49,43041,909],{"class":159},[49,43043,1207],{"class":73},[49,43045,31460],{"class":5913},[49,43047,78],{"class":77},[49,43049,915],{"class":159},[49,43051,1207],{"class":73},[49,43053,31414],{"class":5913},[49,43055,78],{"class":77},[49,43057,1047],{"class":159},[49,43059,847],{"class":73},[49,43061,43062],{"class":51,"line":10567},[49,43063,38657],{"class":73},[49,43065,43066,43068,43071,43073],{"class":51,"line":10594},[49,43067,31376],{"class":159},[49,43069,43070],{"class":73},".b5",[49,43072,78],{"class":77},[49,43074,38540],{"class":73},[49,43076,43077,43079,43082,43084,43086,43088,43090,43092,43094,43096,43098,43100,43102,43104,43106],{"class":51,"line":10603},[49,43078,42760],{"class":73},[49,43080,43081],{"class":159},"832",[49,43083,1207],{"class":73},[49,43085,35401],{"class":159},[49,43087,42769],{"class":73},[49,43089,21745],{"class":159},[49,43091,1207],{"class":73},[49,43093,43017],{"class":159},[49,43095,42778],{"class":73},[49,43097,1027],{"class":159},[49,43099,1207],{"class":73},[49,43101,32601],{"class":159},[49,43103,42787],{"class":73},[49,43105,32601],{"class":159},[49,43107,38578],{"class":73},[49,43109,43110,43112,43114,43116,43118,43120,43122,43124,43126,43128,43130,43132,43134,43136,43138],{"class":51,"line":10609},[49,43111,42760],{"class":73},[49,43113,43081],{"class":159},[49,43115,1207],{"class":73},[49,43117,35471],{"class":159},[49,43119,42769],{"class":73},[49,43121,42690],{"class":159},[49,43123,1207],{"class":73},[49,43125,35471],{"class":159},[49,43127,42778],{"class":73},[49,43129,1436],{"class":159},[49,43131,1207],{"class":73},[49,43133,32601],{"class":159},[49,43135,42787],{"class":73},[49,43137,32601],{"class":159},[49,43139,38578],{"class":73},[49,43141,43142,43145,43147,43149,43151],{"class":51,"line":10617},[49,43143,43144],{"class":73},"            nn.AdaptiveAvgPool2d((",[49,43146,1047],{"class":159},[49,43148,1207],{"class":73},[49,43150,1047],{"class":159},[49,43152,43153],{"class":73},")),\n",[49,43155,43156],{"class":51,"line":10622},[49,43157,39321],{"class":73},[49,43159,43160,43162,43165,43167,43169],{"class":51,"line":17301},[49,43161,39326],{"class":73},[49,43163,43164],{"class":159},"1024",[49,43166,1207],{"class":73},[49,43168,1275],{"class":159},[49,43170,847],{"class":73},[49,43172,43173],{"class":51,"line":17307},[49,43174,38657],{"class":73},[49,43176,43177],{"class":51,"line":17330},[49,43178,43179],{"class":66},"        # 对模型参数初始化\n",[49,43181,43182,43184,43186,43188,43190],{"class":51,"line":17336},[49,43183,4100],{"class":77},[49,43185,39399],{"class":73},[49,43187,26732],{"class":77},[49,43189,39404],{"class":159},[49,43191,39407],{"class":73},[49,43193,43194,43196,43198],{"class":51,"line":17359},[49,43195,5339],{"class":77},[49,43197,39419],{"class":159},[49,43199,39422],{"class":73},[49,43201,43202,43204,43207,43209,43212,43214,43216,43218,43220],{"class":51,"line":17373},[49,43203,39432],{"class":73},[49,43205,43206],{"class":5913},"mode",[49,43208,78],{"class":77},[49,43210,43211],{"class":59},"'fan_out'",[49,43213,1207],{"class":73},[49,43215,39435],{"class":5913},[49,43217,78],{"class":77},[49,43219,39440],{"class":59},[49,43221,847],{"class":73},[49,43223,43224],{"class":51,"line":17393},[49,43225,43226],{"class":66},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[49,43228,43229],{"class":51,"line":17399},[49,43230,43231],{"class":66},"                # ② mode = 'fan_out'决定使用的fan值：\n",[49,43233,43234],{"class":51,"line":17410},[49,43235,43236],{"class":66},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[49,43238,43239],{"class":51,"line":17433},[49,43240,43241],{"class":66},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[49,43243,43244],{"class":51,"line":17455},[49,43245,43246],{"class":66},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[49,43248,43249],{"class":51,"line":17460},[49,43250,43251],{"class":66},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[49,43253,43254,43256,43258,43260,43262,43264],{"class":51,"line":17466},[49,43255,39452],{"class":77},[49,43257,39455],{"class":73},[49,43259,39458],{"class":77},[49,43261,39461],{"class":77},[49,43263,39464],{"class":159},[49,43265,4436],{"class":73},[49,43267,43268,43270,43272],{"class":51,"line":17480},[49,43269,39476],{"class":73},[49,43271,1021],{"class":159},[49,43273,847],{"class":73},[49,43275,43276,43279,43281],{"class":51,"line":17493},[49,43277,43278],{"class":77},"                elif",[49,43280,39419],{"class":159},[49,43282,39495],{"class":73},[49,43284,43285,43288,43290,43292,43294],{"class":51,"line":17498},[49,43286,43287],{"class":73},"                    nn.init.normal_(m.weight,",[49,43289,1021],{"class":159},[49,43291,1207],{"class":73},[49,43293,39517],{"class":159},[49,43295,847],{"class":73},[49,43297,43298,43301,43303,43305,43307,43309],{"class":51,"line":17512},[49,43299,43300],{"class":77},"                    if",[49,43302,39455],{"class":73},[49,43304,39458],{"class":77},[49,43306,39461],{"class":77},[49,43308,39464],{"class":159},[49,43310,4436],{"class":73},[49,43312,43313,43316,43318],{"class":51,"line":17517},[49,43314,43315],{"class":73},"                        nn.init.constant_(m.bias,",[49,43317,1021],{"class":159},[49,43319,847],{"class":73},[49,43321,43322],{"class":51,"line":17523},[49,43323,35696],{"class":66},[49,43325,43326,43328,43330],{"class":51,"line":17528},[49,43327,31332],{"class":77},[49,43329,31624],{"class":55},[49,43331,31627],{"class":73},[49,43333,43334,43336,43338,43340],{"class":51,"line":17542},[49,43335,31632],{"class":73},[49,43337,78],{"class":77},[49,43339,31354],{"class":159},[49,43341,43342],{"class":73},".b1(x)\n",[49,43344,43345,43347,43349,43351],{"class":51,"line":17547},[49,43346,31632],{"class":73},[49,43348,78],{"class":77},[49,43350,31354],{"class":159},[49,43352,43353],{"class":73},".b2(x)\n",[49,43355,43356,43358,43360,43362],{"class":51,"line":17552},[49,43357,31632],{"class":73},[49,43359,78],{"class":77},[49,43361,31354],{"class":159},[49,43363,43364],{"class":73},".b3(x)\n",[49,43366,43367,43369,43371,43373],{"class":51,"line":17566},[49,43368,31632],{"class":73},[49,43370,78],{"class":77},[49,43372,31354],{"class":159},[49,43374,43375],{"class":73},".b4(x)\n",[49,43377,43378,43380,43382,43384],{"class":51,"line":17578},[49,43379,31632],{"class":73},[49,43381,78],{"class":77},[49,43383,31354],{"class":159},[49,43385,43386],{"class":73},".b5(x)\n",[49,43388,43389,43391],{"class":51,"line":17583},[49,43390,15449],{"class":77},[49,43392,31740],{"class":73},[49,43394,43395],{"class":51,"line":17596},[49,43396,399],{"emptyLinePlaceholder":398},[49,43398,43399],{"class":51,"line":17601},[49,43400,43401],{"class":66},"# 模型展示\n",[49,43403,43404,43406,43408,43410,43412],{"class":51,"line":17606},[49,43405,2230],{"class":77},[49,43407,31751],{"class":159},[49,43409,3646],{"class":77},[49,43411,31756],{"class":59},[49,43413,4436],{"class":73},[49,43415,43416,43418,43420,43422,43424,43426,43428,43430,43432],{"class":51,"line":17611},[49,43417,31768],{"class":73},[49,43419,78],{"class":77},[49,43421,30982],{"class":73},[49,43423,31775],{"class":59},[49,43425,2403],{"class":77},[49,43427,31780],{"class":73},[49,43429,2400],{"class":77},[49,43431,31007],{"class":59},[49,43433,847],{"class":73},[49,43435,43436,43438,43440],{"class":51,"line":17624},[49,43437,31820],{"class":73},[49,43439,78],{"class":77},[49,43441,43442],{"class":73},"GoogLeNet(Inception).to(device)\n",[49,43444,43445,43447,43449,43451,43453,43455,43457,43459],{"class":51,"line":17629},[49,43446,31830],{"class":159},[49,43448,31833],{"class":73},[49,43450,1047],{"class":159},[49,43452,1207],{"class":73},[49,43454,32032],{"class":159},[49,43456,1207],{"class":73},[49,43458,32032],{"class":159},[49,43460,31846],{"class":73},[30,43462,43463],{"start":63},[33,43464,39714],{},[40,43466,43468],{"className":30909,"code":43467,"language":30911,"meta":27,"style":27},"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",[46,43469,43470,43476,43482,43492,43498,43508,43518,43528,43538,43548,43552,43563,43573,43577,43581,43585,43593,43605,43615,43631,43641,43673,43687,43697,43707,43711,43721,43735,43745,43755,43765,43771,43775,43779,43783,43787,43791,43799,43819,43823,43827,43831,43835,43839,43855,43859,43863,43871,43875,43879,43887,43891,43895,43899,43907,43911,43915,43919,43923,43931,43935,43943,43947,43955,43959,43967,43971,43979,43983,43987,43995,43999,44003,44007,44019,44043,44057,44061,44065,44069,44077,44081,44089,44093,44101,44105,44113,44117,44125,44129,44137,44141,44153,44157,44165,44169,44177,44181,44185,44189,44193,44201,44205,44221,44225,44233,44237,44241,44245,44249,44253,44257,44261,44277,44281,44293,44297,44309,44313,44325,44329,44337,44341,44349,44353,44357,44361,44367,44371,44379,44383,44399,44403,44411,44415,44431,44443,44447,44459,44463,44467,44475,44479,44483,44491,44495,44503,44507,44515,44519,44523,44565,44607,44611,44615,44631,44635,44651,44655,44659,44667,44671,44675,44687,44725,44729,44733,44741,44745,44759,44769,44775,44781,44787,44793,44797,44801,44807,44811,44815,44823,44827,44845,44849,44853,44857,44873,44877,44881,44885,44889,44893,44913,44933,44937,44941,44945,44953,44961,44965,44981,45001,45021,45025,45029,45037,45045,45049,45053,45057,45069,45073,45083,45091,45108],{"__ignoreMap":27},[49,43471,43472,43474],{"class":51,"line":52},[49,43473,30923],{"class":77},[49,43475,32353],{"class":73},[49,43477,43478,43480],{"class":51,"line":63},[49,43479,30923],{"class":77},[49,43481,32360],{"class":73},[49,43483,43484,43486,43488,43490],{"class":51,"line":70},[49,43485,30923],{"class":77},[49,43487,32371],{"class":73},[49,43489,31914],{"class":77},[49,43491,32376],{"class":73},[49,43493,43494,43496],{"class":51,"line":219},[49,43495,30923],{"class":77},[49,43497,30926],{"class":73},[49,43499,43500,43502,43504,43506],{"class":51,"line":233},[49,43501,31268],{"class":77},[49,43503,31946],{"class":73},[49,43505,30923],{"class":77},[49,43507,32393],{"class":73},[49,43509,43510,43512,43514,43516],{"class":51,"line":241},[49,43511,31268],{"class":77},[49,43513,31899],{"class":73},[49,43515,30923],{"class":77},[49,43517,31904],{"class":73},[49,43519,43520,43522,43524,43526],{"class":51,"line":1920},[49,43521,31268],{"class":77},[49,43523,31929],{"class":73},[49,43525,30923],{"class":77},[49,43527,31934],{"class":73},[49,43529,43530,43532,43534,43536],{"class":51,"line":2011},[49,43531,30923],{"class":77},[49,43533,31946],{"class":73},[49,43535,31914],{"class":77},[49,43537,31951],{"class":73},[49,43539,43540,43542,43544,43546],{"class":51,"line":2017},[49,43541,30923],{"class":77},[49,43543,31963],{"class":73},[49,43545,31914],{"class":77},[49,43547,31968],{"class":73},[49,43549,43550],{"class":51,"line":2029},[49,43551,32438],{"class":66},[49,43553,43554,43556,43558,43560],{"class":51,"line":2311},[49,43555,31268],{"class":77},[49,43557,32445],{"class":73},[49,43559,30923],{"class":77},[49,43561,43562],{"class":73}," GoogLeNet, Inception\n",[49,43564,43565,43567,43569,43571],{"class":51,"line":2316},[49,43566,31268],{"class":77},[49,43568,31271],{"class":73},[49,43570,30923],{"class":77},[49,43572,31276],{"class":73},[49,43574,43575],{"class":51,"line":2322},[49,43576,399],{"emptyLinePlaceholder":398},[49,43578,43579],{"class":51,"line":2327},[49,43580,399],{"emptyLinePlaceholder":398},[49,43582,43583],{"class":51,"line":2341},[49,43584,32473],{"class":66},[49,43586,43587,43589,43591],{"class":51,"line":2346},[49,43588,32478],{"class":77},[49,43590,32481],{"class":55},[49,43592,32484],{"class":73},[49,43594,43595,43597,43599,43601,43603],{"class":51,"line":2352},[49,43596,32489],{"class":73},[49,43598,78],{"class":77},[49,43600,31986],{"class":73},[49,43602,31994],{"class":59},[49,43604,31997],{"class":73},[49,43606,43607,43609,43611,43613],{"class":51,"line":2373},[49,43608,32502],{"class":5913},[49,43610,78],{"class":77},[49,43612,32007],{"class":159},[49,43614,31997],{"class":73},[49,43616,43617,43619,43621,43623,43625,43627,43629],{"class":51,"line":2378},[49,43618,32513],{"class":5913},[49,43620,78],{"class":77},[49,43622,32024],{"class":73},[49,43624,32027],{"class":5913},[49,43626,78],{"class":77},[49,43628,35980],{"class":159},[49,43630,32035],{"class":73},[49,43632,43633,43635,43637,43639],{"class":51,"line":2392},[49,43634,32530],{"class":5913},[49,43636,78],{"class":77},[49,43638,32007],{"class":159},[49,43640,847],{"class":73},[49,43642,43643,43645,43647,43649,43651,43653,43655,43657,43659,43661,43663,43665,43667,43669,43671],{"class":51,"line":2397},[49,43644,32541],{"class":73},[49,43646,78],{"class":77},[49,43648,32546],{"class":73},[49,43650,32549],{"class":159},[49,43652,841],{"class":73},[49,43654,32554],{"class":159},[49,43656,1284],{"class":77},[49,43658,8055],{"class":159},[49,43660,32561],{"class":73},[49,43662,32549],{"class":159},[49,43664,841],{"class":73},[49,43666,32568],{"class":159},[49,43668,1284],{"class":77},[49,43670,8055],{"class":159},[49,43672,32575],{"class":73},[49,43674,43675,43677,43679,43681,43683,43685],{"class":51,"line":2426},[49,43676,32580],{"class":73},[49,43678,78],{"class":77},[49,43680,32585],{"class":73},[49,43682,32068],{"class":5913},[49,43684,78],{"class":77},[49,43686,32073],{"class":73},[49,43688,43689,43691,43693,43695],{"class":51,"line":2431},[49,43690,32596],{"class":5913},[49,43692,78],{"class":77},[49,43694,1027],{"class":159},[49,43696,31997],{"class":73},[49,43698,43699,43701,43703,43705],{"class":51,"line":2448},[49,43700,32608],{"class":5913},[49,43702,78],{"class":77},[49,43704,32007],{"class":159},[49,43706,31997],{"class":73},[49,43708,43709],{"class":51,"line":2453},[49,43710,32619],{"class":66},[49,43712,43713,43715,43717,43719],{"class":51,"line":2458},[49,43714,32624],{"class":5913},[49,43716,78],{"class":77},[49,43718,1224],{"class":159},[49,43720,847],{"class":73},[49,43722,43723,43725,43727,43729,43731,43733],{"class":51,"line":2463},[49,43724,32635],{"class":73},[49,43726,78],{"class":77},[49,43728,32065],{"class":73},[49,43730,32068],{"class":5913},[49,43732,78],{"class":77},[49,43734,32646],{"class":73},[49,43736,43737,43739,43741,43743],{"class":51,"line":2477},[49,43738,32651],{"class":5913},[49,43740,78],{"class":77},[49,43742,1027],{"class":159},[49,43744,31997],{"class":73},[49,43746,43747,43749,43751,43753],{"class":51,"line":2482},[49,43748,32662],{"class":5913},[49,43750,78],{"class":77},[49,43752,32007],{"class":159},[49,43754,31997],{"class":73},[49,43756,43757,43759,43761,43763],{"class":51,"line":3274},[49,43758,32673],{"class":5913},[49,43760,78],{"class":77},[49,43762,1224],{"class":159},[49,43764,847],{"class":73},[49,43766,43767,43769],{"class":51,"line":3288},[49,43768,4787],{"class":77},[49,43770,32686],{"class":73},[49,43772,43773],{"class":51,"line":3296},[49,43774,399],{"emptyLinePlaceholder":398},[49,43776,43777],{"class":51,"line":3301},[49,43778,32695],{"class":66},[49,43780,43781],{"class":51,"line":3307},[49,43782,32700],{"class":66},[49,43784,43785],{"class":51,"line":3313},[49,43786,399],{"emptyLinePlaceholder":398},[49,43788,43789],{"class":51,"line":3318},[49,43790,32709],{"class":66},[49,43792,43793,43795,43797],{"class":51,"line":8645},[49,43794,32478],{"class":77},[49,43796,32716],{"class":55},[49,43798,32719],{"class":73},[49,43800,43801,43803,43805,43807,43809,43811,43813,43815,43817],{"class":51,"line":8669},[49,43802,31768],{"class":73},[49,43804,78],{"class":77},[49,43806,30982],{"class":73},[49,43808,31775],{"class":59},[49,43810,2403],{"class":77},[49,43812,31780],{"class":73},[49,43814,2400],{"class":77},[49,43816,32738],{"class":59},[49,43818,847],{"class":73},[49,43820,43821],{"class":51,"line":8674},[49,43822,399],{"emptyLinePlaceholder":398},[49,43824,43825],{"class":51,"line":8680},[49,43826,399],{"emptyLinePlaceholder":398},[49,43828,43829],{"class":51,"line":8707},[49,43830,32753],{"class":66},[49,43832,43833],{"class":51,"line":8712},[49,43834,32758],{"class":66},[49,43836,43837],{"class":51,"line":8718},[49,43838,32763],{"class":66},[49,43840,43841,43843,43845,43847,43849,43851,43853],{"class":51,"line":8730},[49,43842,32768],{"class":73},[49,43844,78],{"class":77},[49,43846,32773],{"class":73},[49,43848,32776],{"class":5913},[49,43850,78],{"class":77},[49,43852,32781],{"class":159},[49,43854,847],{"class":73},[49,43856,43857],{"class":51,"line":8742},[49,43858,399],{"emptyLinePlaceholder":398},[49,43860,43861],{"class":51,"line":8754},[49,43862,32792],{"class":66},[49,43864,43865,43867,43869],{"class":51,"line":10413},[49,43866,32797],{"class":73},[49,43868,78],{"class":77},[49,43870,32802],{"class":73},[49,43872,43873],{"class":51,"line":10438},[49,43874,399],{"emptyLinePlaceholder":398},[49,43876,43877],{"class":51,"line":10461},[49,43878,32811],{"class":66},[49,43880,43881,43883,43885],{"class":51,"line":10485},[49,43882,31820],{"class":73},[49,43884,78],{"class":77},[49,43886,32820],{"class":73},[49,43888,43889],{"class":51,"line":10490},[49,43890,32825],{"class":66},[49,43892,43893],{"class":51,"line":10495},[49,43894,32830],{"class":66},[49,43896,43897],{"class":51,"line":10500},[49,43898,32835],{"class":66},[49,43900,43901,43903,43905],{"class":51,"line":10509},[49,43902,32840],{"class":73},[49,43904,78],{"class":77},[49,43906,32845],{"class":73},[49,43908,43909],{"class":51,"line":10514},[49,43910,399],{"emptyLinePlaceholder":398},[49,43912,43913],{"class":51,"line":10520},[49,43914,399],{"emptyLinePlaceholder":398},[49,43916,43917],{"class":51,"line":10541},[49,43918,32858],{"class":66},[49,43920,43921],{"class":51,"line":10547},[49,43922,32863],{"class":66},[49,43924,43925,43927,43929],{"class":51,"line":10561},[49,43926,32868],{"class":73},[49,43928,78],{"class":77},[49,43930,32873],{"class":159},[49,43932,43933],{"class":51,"line":10567},[49,43934,32878],{"class":66},[49,43936,43937,43939,43941],{"class":51,"line":10594},[49,43938,32883],{"class":73},[49,43940,78],{"class":77},[49,43942,32888],{"class":73},[49,43944,43945],{"class":51,"line":10603},[49,43946,32893],{"class":66},[49,43948,43949,43951,43953],{"class":51,"line":10609},[49,43950,32898],{"class":73},[49,43952,78],{"class":77},[49,43954,32888],{"class":73},[49,43956,43957],{"class":51,"line":10617},[49,43958,32907],{"class":66},[49,43960,43961,43963,43965],{"class":51,"line":10622},[49,43962,32912],{"class":73},[49,43964,78],{"class":77},[49,43966,32888],{"class":73},[49,43968,43969],{"class":51,"line":17301},[49,43970,32921],{"class":66},[49,43972,43973,43975,43977],{"class":51,"line":17307},[49,43974,32926],{"class":73},[49,43976,78],{"class":77},[49,43978,32888],{"class":73},[49,43980,43981],{"class":51,"line":17330},[49,43982,399],{"emptyLinePlaceholder":398},[49,43984,43985],{"class":51,"line":17336},[49,43986,32939],{"class":66},[49,43988,43989,43991,43993],{"class":51,"line":17359},[49,43990,32944],{"class":73},[49,43992,78],{"class":77},[49,43994,32949],{"class":73},[49,43996,43997],{"class":51,"line":17373},[49,43998,399],{"emptyLinePlaceholder":398},[49,44000,44001],{"class":51,"line":17393},[49,44002,399],{"emptyLinePlaceholder":398},[49,44004,44005],{"class":51,"line":17399},[49,44006,32962],{"class":66},[49,44008,44009,44011,44013,44015,44017],{"class":51,"line":17410},[49,44010,3898],{"class":77},[49,44012,32969],{"class":73},[49,44014,26732],{"class":77},[49,44016,32974],{"class":159},[49,44018,32977],{"class":73},[49,44020,44021,44023,44025,44027,44029,44031,44033,44035,44037,44039,44041],{"class":51,"line":17433},[49,44022,32982],{"class":159},[49,44024,841],{"class":73},[49,44026,32987],{"class":59},[49,44028,32990],{"class":159},[49,44030,1413],{"class":59},[49,44032,32990],{"class":159},[49,44034,1080],{"class":59},[49,44036,32999],{"class":73},[49,44038,1361],{"class":77},[49,44040,1047],{"class":159},[49,44042,31028],{"class":73},[49,44044,44045,44047,44049,44051,44053,44055],{"class":51,"line":17455},[49,44046,32982],{"class":159},[49,44048,841],{"class":73},[49,44050,33014],{"class":59},[49,44052,1284],{"class":77},[49,44054,1275],{"class":159},[49,44056,847],{"class":73},[49,44058,44059],{"class":51,"line":17460},[49,44060,399],{"emptyLinePlaceholder":398},[49,44062,44063],{"class":51,"line":17466},[49,44064,33029],{"class":66},[49,44066,44067],{"class":51,"line":17480},[49,44068,33034],{"class":66},[49,44070,44071,44073,44075],{"class":51,"line":17493},[49,44072,33039],{"class":73},[49,44074,78],{"class":77},[49,44076,32873],{"class":159},[49,44078,44079],{"class":51,"line":17498},[49,44080,33048],{"class":66},[49,44082,44083,44085,44087],{"class":51,"line":17512},[49,44084,33053],{"class":73},[49,44086,78],{"class":77},[49,44088,3782],{"class":159},[49,44090,44091],{"class":51,"line":17517},[49,44092,33062],{"class":66},[49,44094,44095,44097,44099],{"class":51,"line":17523},[49,44096,33067],{"class":73},[49,44098,78],{"class":77},[49,44100,32873],{"class":159},[49,44102,44103],{"class":51,"line":17528},[49,44104,33076],{"class":66},[49,44106,44107,44109,44111],{"class":51,"line":17542},[49,44108,33081],{"class":73},[49,44110,78],{"class":77},[49,44112,3782],{"class":159},[49,44114,44115],{"class":51,"line":17547},[49,44116,33090],{"class":66},[49,44118,44119,44121,44123],{"class":51,"line":17552},[49,44120,33095],{"class":73},[49,44122,78],{"class":77},[49,44124,3782],{"class":159},[49,44126,44127],{"class":51,"line":17566},[49,44128,33104],{"class":66},[49,44130,44131,44133,44135],{"class":51,"line":17578},[49,44132,33109],{"class":73},[49,44134,78],{"class":77},[49,44136,3782],{"class":159},[49,44138,44139],{"class":51,"line":17583},[49,44140,33118],{"class":66},[49,44142,44143,44145,44147,44149,44151],{"class":51,"line":17596},[49,44144,4100],{"class":77},[49,44146,32132],{"class":73},[49,44148,26732],{"class":77},[49,44150,32137],{"class":159},[49,44152,33131],{"class":73},[49,44154,44155],{"class":51,"line":17601},[49,44156,33136],{"class":66},[49,44158,44159,44161,44163],{"class":51,"line":17606},[49,44160,33141],{"class":73},[49,44162,78],{"class":77},[49,44164,33146],{"class":73},[49,44166,44167],{"class":51,"line":17611},[49,44168,33151],{"class":66},[49,44170,44171,44173,44175],{"class":51,"line":17624},[49,44172,33156],{"class":73},[49,44174,78],{"class":77},[49,44176,33161],{"class":73},[49,44178,44179],{"class":51,"line":17629},[49,44180,33167],{"class":66},[49,44182,44183],{"class":51,"line":33164},[49,44184,33173],{"class":73},[49,44186,44187],{"class":51,"line":33170},[49,44188,33179],{"class":66},[49,44190,44191],{"class":51,"line":33176},[49,44192,33185],{"class":66},[49,44194,44195,44197,44199],{"class":51,"line":33182},[49,44196,33191],{"class":73},[49,44198,78],{"class":77},[49,44200,33196],{"class":73},[49,44202,44203],{"class":51,"line":33188},[49,44204,33202],{"class":66},[49,44206,44207,44209,44211,44213,44215,44217,44219],{"class":51,"line":33199},[49,44208,33208],{"class":73},[49,44210,78],{"class":77},[49,44212,33213],{"class":73},[49,44214,33216],{"class":5913},[49,44216,78],{"class":77},[49,44218,1047],{"class":159},[49,44220,847],{"class":73},[49,44222,44223],{"class":51,"line":33205},[49,44224,33228],{"class":66},[49,44226,44227,44229,44231],{"class":51,"line":33225},[49,44228,33234],{"class":73},[49,44230,78],{"class":77},[49,44232,33239],{"class":73},[49,44234,44235],{"class":51,"line":33231},[49,44236,33245],{"class":66},[49,44238,44239],{"class":51,"line":33242},[49,44240,33251],{"class":73},[49,44242,44243],{"class":51,"line":33248},[49,44244,33257],{"class":66},[49,44246,44247],{"class":51,"line":33254},[49,44248,33263],{"class":73},[49,44250,44251],{"class":51,"line":33260},[49,44252,33269],{"class":66},[49,44254,44255],{"class":51,"line":33266},[49,44256,33275],{"class":73},[49,44258,44259],{"class":51,"line":33272},[49,44260,33281],{"class":66},[49,44262,44263,44265,44267,44269,44271,44273,44275],{"class":51,"line":33278},[49,44264,33287],{"class":73},[49,44266,10174],{"class":77},[49,44268,33292],{"class":73},[49,44270,1284],{"class":77},[49,44272,33297],{"class":73},[49,44274,1021],{"class":159},[49,44276,847],{"class":73},[49,44278,44279],{"class":51,"line":33284},[49,44280,33307],{"class":66},[49,44282,44283,44285,44287,44289,44291],{"class":51,"line":33304},[49,44284,33313],{"class":73},[49,44286,10174],{"class":77},[49,44288,33318],{"class":73},[49,44290,3646],{"class":77},[49,44292,33323],{"class":73},[49,44294,44295],{"class":51,"line":33310},[49,44296,33329],{"class":66},[49,44298,44299,44301,44303,44305,44307],{"class":51,"line":33326},[49,44300,33335],{"class":73},[49,44302,10174],{"class":77},[49,44304,33297],{"class":73},[49,44306,1021],{"class":159},[49,44308,847],{"class":73},[49,44310,44311],{"class":51,"line":33332},[49,44312,33349],{"class":66},[49,44314,44315,44317,44319,44321,44323],{"class":51,"line":33346},[49,44316,4100],{"class":77},[49,44318,33357],{"class":73},[49,44320,26732],{"class":77},[49,44322,32137],{"class":159},[49,44324,33364],{"class":73},[49,44326,44327],{"class":51,"line":33352},[49,44328,33370],{"class":66},[49,44330,44331,44333,44335],{"class":51,"line":33367},[49,44332,33141],{"class":73},[49,44334,78],{"class":77},[49,44336,33146],{"class":73},[49,44338,44339],{"class":51,"line":33373},[49,44340,33385],{"class":66},[49,44342,44343,44345,44347],{"class":51,"line":33382},[49,44344,33156],{"class":73},[49,44346,78],{"class":77},[49,44348,33161],{"class":73},[49,44350,44351],{"class":51,"line":33388},[49,44352,33400],{"class":66},[49,44354,44355],{"class":51,"line":33397},[49,44356,33406],{"class":73},[49,44358,44359],{"class":51,"line":33403},[49,44360,36887],{"class":66},[49,44362,44363,44365],{"class":51,"line":33409},[49,44364,33412],{"class":77},[49,44366,33415],{"class":73},[49,44368,44369],{"class":51,"line":33418},[49,44370,33421],{"class":66},[49,44372,44373,44375,44377],{"class":51,"line":33424},[49,44374,36902],{"class":73},[49,44376,78],{"class":77},[49,44378,33196],{"class":73},[49,44380,44381],{"class":51,"line":33435},[49,44382,33438],{"class":66},[49,44384,44385,44387,44389,44391,44393,44395,44397],{"class":51,"line":33441},[49,44386,36915],{"class":73},[49,44388,78],{"class":77},[49,44390,33213],{"class":73},[49,44392,33216],{"class":5913},[49,44394,78],{"class":77},[49,44396,1047],{"class":159},[49,44398,847],{"class":73},[49,44400,44401],{"class":51,"line":33460},[49,44402,33463],{"class":66},[49,44404,44405,44407,44409],{"class":51,"line":33466},[49,44406,36936],{"class":73},[49,44408,78],{"class":77},[49,44410,33239],{"class":73},[49,44412,44413],{"class":51,"line":33477},[49,44414,33480],{"class":66},[49,44416,44417,44419,44421,44423,44425,44427,44429],{"class":51,"line":33483},[49,44418,36949],{"class":73},[49,44420,10174],{"class":77},[49,44422,36954],{"class":73},[49,44424,1284],{"class":77},[49,44426,33297],{"class":73},[49,44428,1021],{"class":159},[49,44430,847],{"class":73},[49,44432,44433,44435,44437,44439,44441],{"class":51,"line":33503},[49,44434,36967],{"class":73},[49,44436,10174],{"class":77},[49,44438,33318],{"class":73},[49,44440,3646],{"class":77},[49,44442,33323],{"class":73},[49,44444,44445],{"class":51,"line":33519},[49,44446,36980],{"class":66},[49,44448,44449,44451,44453,44455,44457],{"class":51,"line":33525},[49,44450,36985],{"class":73},[49,44452,10174],{"class":77},[49,44454,33297],{"class":73},[49,44456,1021],{"class":159},[49,44458,847],{"class":73},[49,44460,44461],{"class":51,"line":33539},[49,44462,33542],{"class":66},[49,44464,44465],{"class":51,"line":33545},[49,44466,33548],{"class":66},[49,44468,44469,44471,44473],{"class":51,"line":33551},[49,44470,33554],{"class":73},[49,44472,1413],{"class":77},[49,44474,33559],{"class":73},[49,44476,44477],{"class":51,"line":33562},[49,44478,33565],{"class":66},[49,44480,44481],{"class":51,"line":33568},[49,44482,33571],{"class":66},[49,44484,44485,44487,44489],{"class":51,"line":33574},[49,44486,33577],{"class":73},[49,44488,1413],{"class":77},[49,44490,33559],{"class":73},[49,44492,44493],{"class":51,"line":33584},[49,44494,33587],{"class":66},[49,44496,44497,44499,44501],{"class":51,"line":33590},[49,44498,33593],{"class":73},[49,44500,1413],{"class":77},[49,44502,33598],{"class":73},[49,44504,44505],{"class":51,"line":33601},[49,44506,33604],{"class":66},[49,44508,44509,44511,44513],{"class":51,"line":33607},[49,44510,33610],{"class":73},[49,44512,1413],{"class":77},[49,44514,33598],{"class":73},[49,44516,44517],{"class":51,"line":33617},[49,44518,399],{"emptyLinePlaceholder":398},[49,44520,44521],{"class":51,"line":33622},[49,44522,33625],{"class":66},[49,44524,44525,44527,44529,44531,44533,44535,44537,44539,44541,44543,44545,44547,44549,44551,44553,44555,44557,44559,44561,44563],{"class":51,"line":33628},[49,44526,32982],{"class":159},[49,44528,841],{"class":73},[49,44530,4289],{"class":59},[49,44532,32990],{"class":159},[49,44534,33639],{"class":59},[49,44536,1725],{"class":159},[49,44538,33644],{"class":77},[49,44540,1775],{"class":159},[49,44542,33649],{"class":59},[49,44544,1725],{"class":159},[49,44546,33644],{"class":77},[49,44548,1775],{"class":159},[49,44550,4289],{"class":59},[49,44552,33660],{"class":73},[49,44554,1361],{"class":77},[49,44556,1047],{"class":159},[49,44558,33667],{"class":73},[49,44560,1361],{"class":77},[49,44562,1047],{"class":159},[49,44564,33674],{"class":73},[49,44566,44567,44569,44571,44573,44575,44577,44579,44581,44583,44585,44587,44589,44591,44593,44595,44597,44599,44601,44603,44605],{"class":51,"line":33677},[49,44568,32982],{"class":159},[49,44570,841],{"class":73},[49,44572,4289],{"class":59},[49,44574,32990],{"class":159},[49,44576,33688],{"class":59},[49,44578,1725],{"class":159},[49,44580,33644],{"class":77},[49,44582,1775],{"class":159},[49,44584,33697],{"class":59},[49,44586,1725],{"class":159},[49,44588,33644],{"class":77},[49,44590,1775],{"class":159},[49,44592,4289],{"class":59},[49,44594,33708],{"class":73},[49,44596,1361],{"class":77},[49,44598,1047],{"class":159},[49,44600,33715],{"class":73},[49,44602,1361],{"class":77},[49,44604,1047],{"class":159},[49,44606,33674],{"class":73},[49,44608,44609],{"class":51,"line":33724},[49,44610,399],{"emptyLinePlaceholder":398},[49,44612,44613],{"class":51,"line":33729},[49,44614,33732],{"class":66},[49,44616,44617,44619,44621,44623,44625,44627,44629],{"class":51,"line":33735},[49,44618,3194],{"class":77},[49,44620,33740],{"class":73},[49,44622,1361],{"class":77},[49,44624,1047],{"class":159},[49,44626,1769],{"class":73},[49,44628,1789],{"class":77},[49,44630,33751],{"class":73},[49,44632,44633],{"class":51,"line":33754},[49,44634,33757],{"class":66},[49,44636,44637,44639,44641,44643,44645,44647,44649],{"class":51,"line":33760},[49,44638,33763],{"class":73},[49,44640,880],{"class":159},[49,44642,78],{"class":77},[49,44644,33770],{"class":73},[49,44646,1361],{"class":77},[49,44648,1047],{"class":159},[49,44650,33777],{"class":73},[49,44652,44653],{"class":51,"line":33780},[49,44654,33783],{"class":66},[49,44656,44657],{"class":51,"line":33786},[49,44658,33789],{"class":66},[49,44660,44661,44663,44665],{"class":51,"line":33792},[49,44662,33795],{"class":73},[49,44664,78],{"class":77},[49,44666,32845],{"class":73},[49,44668,44669],{"class":51,"line":33802},[49,44670,399],{"emptyLinePlaceholder":398},[49,44672,44673],{"class":51,"line":33807},[49,44674,33810],{"class":66},[49,44676,44677,44679,44681,44683,44685],{"class":51,"line":33813},[49,44678,33816],{"class":73},[49,44680,78],{"class":77},[49,44682,33821],{"class":73},[49,44684,1361],{"class":77},[49,44686,33826],{"class":73},[49,44688,44689,44691,44693,44695,44697,44699,44701,44703,44705,44707,44709,44711,44713,44715,44717,44719,44721,44723],{"class":51,"line":33829},[49,44690,32982],{"class":159},[49,44692,841],{"class":73},[49,44694,33836],{"class":59},[49,44696,1725],{"class":159},[49,44698,33841],{"class":77},[49,44700,1775],{"class":159},[49,44702,1373],{"class":59},[49,44704,1725],{"class":159},[49,44706,33841],{"class":77},[49,44708,1775],{"class":159},[49,44710,33854],{"class":59},[49,44712,33857],{"class":73},[49,44714,33860],{"class":77},[49,44716,1736],{"class":159},[49,44718,33865],{"class":73},[49,44720,1157],{"class":77},[49,44722,1736],{"class":159},[49,44724,31028],{"class":73},[49,44726,44727],{"class":51,"line":33874},[49,44728,37264],{"class":66},[49,44730,44731],{"class":51,"line":33880},[49,44732,37269],{"class":66},[49,44734,44735,44737,44739],{"class":51,"line":33886},[49,44736,37274],{"class":73},[49,44738,33898],{"class":59},[49,44740,847],{"class":73},[49,44742,44743],{"class":51,"line":33892},[49,44744,33918],{"class":66},[49,44746,44747,44749,44751,44753,44755,44757],{"class":51,"line":33903},[49,44748,33924],{"class":73},[49,44750,78],{"class":77},[49,44752,33929],{"class":73},[49,44754,33932],{"class":5913},[49,44756,78],{"class":77},[49,44758,2245],{"class":73},[49,44760,44761,44763,44765,44767],{"class":51,"line":33909},[49,44762,33942],{"class":59},[49,44764,1688],{"class":73},[49,44766,33947],{"class":159},[49,44768,33950],{"class":73},[49,44770,44771,44773],{"class":51,"line":33915},[49,44772,33956],{"class":59},[49,44774,33959],{"class":73},[49,44776,44777,44779],{"class":51,"line":33921},[49,44778,33965],{"class":59},[49,44780,33968],{"class":73},[49,44782,44783,44785],{"class":51,"line":33939},[49,44784,33974],{"class":59},[49,44786,33977],{"class":73},[49,44788,44789,44791],{"class":51,"line":33953},[49,44790,33983],{"class":59},[49,44792,33986],{"class":73},[49,44794,44795],{"class":51,"line":33962},[49,44796,33992],{"class":73},[49,44798,44799],{"class":51,"line":33971},[49,44800,33998],{"class":66},[49,44802,44803,44805],{"class":51,"line":33980},[49,44804,4787],{"class":77},[49,44806,34006],{"class":73},[49,44808,44809],{"class":51,"line":33989},[49,44810,399],{"emptyLinePlaceholder":398},[49,44812,44813],{"class":51,"line":33995},[49,44814,34017],{"class":66},[49,44816,44817,44819,44821],{"class":51,"line":34001},[49,44818,32478],{"class":77},[49,44820,34025],{"class":55},[49,44822,34028],{"class":73},[49,44824,44825],{"class":51,"line":34009},[49,44826,34034],{"class":66},[49,44828,44829,44831,44833,44835,44837,44839,44841,44843],{"class":51,"line":34014},[49,44830,34040],{"class":73},[49,44832,32224],{"class":5913},[49,44834,78],{"class":77},[49,44836,841],{"class":73},[49,44838,1327],{"class":159},[49,44840,1207],{"class":73},[49,44842,1122],{"class":159},[49,44844,31028],{"class":73},[49,44846,44847],{"class":51,"line":34020},[49,44848,34060],{"class":66},[49,44850,44851],{"class":51,"line":34031},[49,44852,34066],{"class":66},[49,44854,44855],{"class":51,"line":34037},[49,44856,34072],{"class":66},[49,44858,44859,44861,44863,44865,44867,44869,44871],{"class":51,"line":34057},[49,44860,32258],{"class":73},[49,44862,1047],{"class":159},[49,44864,1207],{"class":73},[49,44866,915],{"class":159},[49,44868,1207],{"class":73},[49,44870,1047],{"class":159},[49,44872,847],{"class":73},[49,44874,44875],{"class":51,"line":34063},[49,44876,34095],{"class":66},[49,44878,44879],{"class":51,"line":34069},[49,44880,34101],{"class":66},[49,44882,44883],{"class":51,"line":34075},[49,44884,34107],{"class":66},[49,44886,44887],{"class":51,"line":34092},[49,44888,34113],{"class":66},[49,44890,44891],{"class":51,"line":34098},[49,44892,34119],{"class":66},[49,44894,44895,44897,44899,44901,44903,44905,44907,44909,44911],{"class":51,"line":34104},[49,44896,34125],{"class":73},[49,44898,34128],{"class":59},[49,44900,34131],{"class":73},[49,44902,34134],{"class":59},[49,44904,1207],{"class":73},[49,44906,34139],{"class":5913},[49,44908,78],{"class":77},[49,44910,34144],{"class":59},[49,44912,847],{"class":73},[49,44914,44915,44917,44919,44921,44923,44925,44927,44929,44931],{"class":51,"line":34110},[49,44916,34125],{"class":73},[49,44918,34128],{"class":59},[49,44920,34156],{"class":73},[49,44922,34159],{"class":59},[49,44924,1207],{"class":73},[49,44926,34139],{"class":5913},[49,44928,78],{"class":77},[49,44930,34168],{"class":59},[49,44932,847],{"class":73},[49,44934,44935],{"class":51,"line":34116},[49,44936,34176],{"class":66},[49,44938,44939],{"class":51,"line":34122},[49,44940,34182],{"class":73},[49,44942,44943],{"class":51,"line":34149},[49,44944,34188],{"class":66},[49,44946,44947,44949,44951],{"class":51,"line":34173},[49,44948,34194],{"class":73},[49,44950,34197],{"class":59},[49,44952,847],{"class":73},[49,44954,44955,44957,44959],{"class":51,"line":34179},[49,44956,34205],{"class":73},[49,44958,34208],{"class":59},[49,44960,847],{"class":73},[49,44962,44963],{"class":51,"line":34185},[49,44964,34216],{"class":66},[49,44966,44967,44969,44971,44973,44975,44977,44979],{"class":51,"line":34191},[49,44968,32258],{"class":73},[49,44970,1047],{"class":159},[49,44972,1207],{"class":73},[49,44974,915],{"class":159},[49,44976,1207],{"class":73},[49,44978,915],{"class":159},[49,44980,847],{"class":73},[49,44982,44983,44985,44987,44989,44991,44993,44995,44997,44999],{"class":51,"line":34202},[49,44984,34125],{"class":73},[49,44986,34128],{"class":59},[49,44988,34243],{"class":73},[49,44990,34134],{"class":59},[49,44992,1207],{"class":73},[49,44994,34139],{"class":5913},[49,44996,78],{"class":77},[49,44998,34254],{"class":59},[49,45000,847],{"class":73},[49,45002,45003,45005,45007,45009,45011,45013,45015,45017,45019],{"class":51,"line":34213},[49,45004,34125],{"class":73},[49,45006,34128],{"class":59},[49,45008,34266],{"class":73},[49,45010,34159],{"class":59},[49,45012,1207],{"class":73},[49,45014,34139],{"class":5913},[49,45016,78],{"class":77},[49,45018,34277],{"class":59},[49,45020,847],{"class":73},[49,45022,45023],{"class":51,"line":34219},[49,45024,34285],{"class":66},[49,45026,45027],{"class":51,"line":34236},[49,45028,34182],{"class":73},[49,45030,45031,45033,45035],{"class":51,"line":34259},[49,45032,34194],{"class":73},[49,45034,34128],{"class":59},[49,45036,847],{"class":73},[49,45038,45039,45041,45043],{"class":51,"line":34282},[49,45040,34205],{"class":73},[49,45042,34307],{"class":59},[49,45044,847],{"class":73},[49,45046,45047],{"class":51,"line":34288},[49,45048,34315],{"class":73},[49,45050,45051],{"class":51,"line":34293},[49,45052,399],{"emptyLinePlaceholder":398},[49,45054,45055],{"class":51,"line":34302},[49,45056,34326],{"class":66},[49,45058,45059,45061,45063,45065,45067],{"class":51,"line":34312},[49,45060,2230],{"class":77},[49,45062,31751],{"class":159},[49,45064,3646],{"class":77},[49,45066,31756],{"class":59},[49,45068,4436],{"class":73},[49,45070,45071],{"class":51,"line":34318},[49,45072,34345],{"class":66},[49,45074,45075,45078,45080],{"class":51,"line":34323},[49,45076,45077],{"class":73},"    GoogLeNet",[49,45079,78],{"class":77},[49,45081,45082],{"class":73},"GoogLeNet(Inception)\n",[49,45084,45085,45087,45089],{"class":51,"line":34329},[49,45086,34362],{"class":73},[49,45088,78],{"class":77},[49,45090,34367],{"class":73},[49,45092,45093,45095,45097,45100,45102,45104,45106],{"class":51,"line":34342},[49,45094,33924],{"class":73},[49,45096,78],{"class":77},[49,45098,45099],{"class":73},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[49,45101,34380],{"class":5913},[49,45103,78],{"class":77},[49,45105,1780],{"class":159},[49,45107,847],{"class":73},[49,45109,45110],{"class":51,"line":34348},[49,45111,34392],{"class":73},[30,45113,45114],{"start":70},[33,45115,41105],{},[40,45117,45119],{"className":30909,"code":45118,"language":30911,"meta":27,"style":27},"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",[46,45120,45121,45127,45137,45147,45151,45161,45172,45176,45180,45184,45192,45208,45218,45234,45244,45258,45262,45272,45282,45292,45298,45302,45306,45314,45318,45334,45342,45346,45350,45358,45366,45370,45374,45378,45382,45388,45392,45402,45410,45418,45422,45426,45430,45438,45442,45458,45462,45466,45470,45482,45486,45498,45502,45506,45518,45522,45532,45536,45540,45552,45556,45564,45568,45572,45580,45584,45592,45596,45600,45604,45608,45612,45628,45636,45640,45644,45692,45698,45702,45712,45720,45728,45732,45736,45740,45744,45752,45756,45772,45776,45784,45792],{"__ignoreMap":27},[49,45122,45123,45125],{"class":51,"line":52},[49,45124,30923],{"class":77},[49,45126,30926],{"class":73},[49,45128,45129,45131,45133,45135],{"class":51,"line":63},[49,45130,30923],{"class":77},[49,45132,31946],{"class":73},[49,45134,31914],{"class":77},[49,45136,31951],{"class":73},[49,45138,45139,45141,45143,45145],{"class":51,"line":70},[49,45140,31268],{"class":77},[49,45142,31929],{"class":73},[49,45144,30923],{"class":77},[49,45146,31934],{"class":73},[49,45148,45149],{"class":51,"line":219},[49,45150,34453],{"class":66},[49,45152,45153,45155,45157,45159],{"class":51,"line":233},[49,45154,31268],{"class":77},[49,45156,31899],{"class":73},[49,45158,30923],{"class":77},[49,45160,31904],{"class":73},[49,45162,45163,45165,45167,45169],{"class":51,"line":241},[49,45164,31268],{"class":77},[49,45166,32445],{"class":73},[49,45168,30923],{"class":77},[49,45170,45171],{"class":73}," GoogLeNet,Inception\n",[49,45173,45174],{"class":51,"line":1920},[49,45175,399],{"emptyLinePlaceholder":398},[49,45177,45178],{"class":51,"line":2011},[49,45179,399],{"emptyLinePlaceholder":398},[49,45181,45182],{"class":51,"line":2017},[49,45183,34482],{"class":66},[49,45185,45186,45188,45190],{"class":51,"line":2029},[49,45187,32478],{"class":77},[49,45189,34489],{"class":55},[49,45191,32484],{"class":73},[49,45193,45194,45196,45198,45200,45202,45204,45206],{"class":51,"line":2311},[49,45195,34496],{"class":73},[49,45197,78],{"class":77},[49,45199,31986],{"class":73},[49,45201,31989],{"class":5913},[49,45203,78],{"class":77},[49,45205,31994],{"class":59},[49,45207,31997],{"class":73},[49,45209,45210,45212,45214,45216],{"class":51,"line":2316},[49,45211,34513],{"class":5913},[49,45213,78],{"class":77},[49,45215,34518],{"class":159},[49,45217,31997],{"class":73},[49,45219,45220,45222,45224,45226,45228,45230,45232],{"class":51,"line":2322},[49,45221,34525],{"class":5913},[49,45223,78],{"class":77},[49,45225,32024],{"class":73},[49,45227,32027],{"class":5913},[49,45229,78],{"class":77},[49,45231,35980],{"class":159},[49,45233,32035],{"class":73},[49,45235,45236,45238,45240,45242],{"class":51,"line":2327},[49,45237,34542],{"class":5913},[49,45239,78],{"class":77},[49,45241,32007],{"class":159},[49,45243,847],{"class":73},[49,45245,45246,45248,45250,45252,45254,45256],{"class":51,"line":2341},[49,45247,34553],{"class":73},[49,45249,78],{"class":77},[49,45251,32065],{"class":73},[49,45253,32068],{"class":5913},[49,45255,78],{"class":77},[49,45257,34564],{"class":73},[49,45259,45260],{"class":51,"line":2346},[49,45261,34569],{"class":66},[49,45263,45264,45266,45268,45270],{"class":51,"line":2352},[49,45265,34574],{"class":5913},[49,45267,78],{"class":77},[49,45269,1047],{"class":159},[49,45271,31997],{"class":73},[49,45273,45274,45276,45278,45280],{"class":51,"line":2373},[49,45275,34585],{"class":5913},[49,45277,78],{"class":77},[49,45279,32007],{"class":159},[49,45281,31997],{"class":73},[49,45283,45284,45286,45288,45290],{"class":51,"line":2378},[49,45285,34596],{"class":5913},[49,45287,78],{"class":77},[49,45289,1021],{"class":159},[49,45291,847],{"class":73},[49,45293,45294,45296],{"class":51,"line":2392},[49,45295,4787],{"class":77},[49,45297,34609],{"class":73},[49,45299,45300],{"class":51,"line":2397},[49,45301,399],{"emptyLinePlaceholder":398},[49,45303,45304],{"class":51,"line":2426},[49,45305,34618],{"class":66},[49,45307,45308,45310,45312],{"class":51,"line":2431},[49,45309,32478],{"class":77},[49,45311,34625],{"class":55},[49,45313,34628],{"class":73},[49,45315,45316],{"class":51,"line":2448},[49,45317,34633],{"class":66},[49,45319,45320,45322,45324,45326,45328,45330,45332],{"class":51,"line":2453},[49,45321,31768],{"class":73},[49,45323,78],{"class":77},[49,45325,31775],{"class":59},[49,45327,2403],{"class":77},[49,45329,31780],{"class":73},[49,45331,2400],{"class":77},[49,45333,34650],{"class":59},[49,45335,45336,45338,45340],{"class":51,"line":2458},[49,45337,31820],{"class":73},[49,45339,78],{"class":77},[49,45341,32820],{"class":73},[49,45343,45344],{"class":51,"line":2463},[49,45345,399],{"emptyLinePlaceholder":398},[49,45347,45348],{"class":51,"line":2477},[49,45349,34667],{"class":66},[49,45351,45352,45354,45356],{"class":51,"line":2482},[49,45353,34672],{"class":73},[49,45355,78],{"class":77},[49,45357,32873],{"class":159},[49,45359,45360,45362,45364],{"class":51,"line":3274},[49,45361,34681],{"class":73},[49,45363,78],{"class":77},[49,45365,3782],{"class":159},[49,45367,45368],{"class":51,"line":3288},[49,45369,399],{"emptyLinePlaceholder":398},[49,45371,45372],{"class":51,"line":3296},[49,45373,34694],{"class":66},[49,45375,45376],{"class":51,"line":3301},[49,45377,34699],{"class":66},[49,45379,45380],{"class":51,"line":3307},[49,45381,34704],{"class":66},[49,45383,45384,45386],{"class":51,"line":3313},[49,45385,34709],{"class":77},[49,45387,33415],{"class":73},[49,45389,45390],{"class":51,"line":3318},[49,45391,34716],{"class":66},[49,45393,45394,45396,45398,45400],{"class":51,"line":8645},[49,45395,4100],{"class":77},[49,45397,34723],{"class":73},[49,45399,26732],{"class":77},[49,45401,34728],{"class":73},[49,45403,45404,45406,45408],{"class":51,"line":8669},[49,45405,34733],{"class":73},[49,45407,78],{"class":77},[49,45409,34738],{"class":73},[49,45411,45412,45414,45416],{"class":51,"line":8674},[49,45413,34743],{"class":73},[49,45415,78],{"class":77},[49,45417,34748],{"class":73},[49,45419,45420],{"class":51,"line":8680},[49,45421,34753],{"class":66},[49,45423,45424],{"class":51,"line":8707},[49,45425,33406],{"class":73},[49,45427,45428],{"class":51,"line":8712},[49,45429,34762],{"class":66},[49,45431,45432,45434,45436],{"class":51,"line":8718},[49,45433,33191],{"class":73},[49,45435,78],{"class":77},[49,45437,34771],{"class":73},[49,45439,45440],{"class":51,"line":8730},[49,45441,34776],{"class":66},[49,45443,45444,45446,45448,45450,45452,45454,45456],{"class":51,"line":8742},[49,45445,33208],{"class":73},[49,45447,78],{"class":77},[49,45449,33213],{"class":73},[49,45451,33216],{"class":5913},[49,45453,78],{"class":77},[49,45455,1047],{"class":159},[49,45457,847],{"class":73},[49,45459,45460],{"class":51,"line":8754},[49,45461,34797],{"class":66},[49,45463,45464],{"class":51,"line":10413},[49,45465,34802],{"class":66},[49,45467,45468],{"class":51,"line":10438},[49,45469,34807],{"class":66},[49,45471,45472,45474,45476,45478,45480],{"class":51,"line":10461},[49,45473,34812],{"class":73},[49,45475,10174],{"class":77},[49,45477,33318],{"class":73},[49,45479,3646],{"class":77},[49,45481,34821],{"class":73},[49,45483,45484],{"class":51,"line":10485},[49,45485,34826],{"class":66},[49,45487,45488,45490,45492,45494,45496],{"class":51,"line":10490},[49,45489,34831],{"class":73},[49,45491,10174],{"class":77},[49,45493,34836],{"class":73},[49,45495,1021],{"class":159},[49,45497,847],{"class":73},[49,45499,45500],{"class":51,"line":10495},[49,45501,399],{"emptyLinePlaceholder":398},[49,45503,45504],{"class":51,"line":10500},[49,45505,34849],{"class":66},[49,45507,45508,45510,45512,45514,45516],{"class":51,"line":10509},[49,45509,34854],{"class":73},[49,45511,78],{"class":77},[49,45513,34859],{"class":73},[49,45515,1413],{"class":77},[49,45517,34864],{"class":73},[49,45519,45520],{"class":51,"line":10514},[49,45521,34869],{"class":66},[49,45523,45524,45526,45528,45530],{"class":51,"line":10520},[49,45525,32982],{"class":159},[49,45527,841],{"class":73},[49,45529,34878],{"class":59},[49,45531,34881],{"class":73},[49,45533,45534],{"class":51,"line":10541},[49,45535,399],{"emptyLinePlaceholder":398},[49,45537,45538],{"class":51,"line":10547},[49,45539,34890],{"class":66},[49,45541,45542,45544,45546,45548,45550],{"class":51,"line":10561},[49,45543,2230],{"class":77},[49,45545,31751],{"class":159},[49,45547,3646],{"class":77},[49,45549,31756],{"class":59},[49,45551,4436],{"class":73},[49,45553,45554],{"class":51,"line":10567},[49,45555,34907],{"class":66},[49,45557,45558,45560,45562],{"class":51,"line":10594},[49,45559,31820],{"class":73},[49,45561,78],{"class":77},[49,45563,45082],{"class":73},[49,45565,45566],{"class":51,"line":10603},[49,45567,34920],{"class":66},[49,45569,45570],{"class":51,"line":10609},[49,45571,34925],{"class":66},[49,45573,45574,45576,45578],{"class":51,"line":10617},[49,45575,34930],{"class":73},[49,45577,34933],{"class":59},[49,45579,31028],{"class":73},[49,45581,45582],{"class":51,"line":10622},[49,45583,34940],{"class":66},[49,45585,45586,45588,45590],{"class":51,"line":17301},[49,45587,34553],{"class":73},[49,45589,78],{"class":77},[49,45591,34949],{"class":73},[49,45593,45594],{"class":51,"line":17307},[49,45595,34954],{"class":66},[49,45597,45598],{"class":51,"line":17330},[49,45599,34959],{"class":73},[49,45601,45602],{"class":51,"line":17336},[49,45603,399],{"emptyLinePlaceholder":398},[49,45605,45606],{"class":51,"line":17359},[49,45607,34968],{"class":66},[49,45609,45610],{"class":51,"line":17373},[49,45611,34973],{"class":66},[49,45613,45614,45616,45618,45620,45622,45624,45626],{"class":51,"line":17393},[49,45615,31768],{"class":73},[49,45617,78],{"class":77},[49,45619,31775],{"class":59},[49,45621,2403],{"class":77},[49,45623,31780],{"class":73},[49,45625,2400],{"class":77},[49,45627,34650],{"class":59},[49,45629,45630,45632,45634],{"class":51,"line":17399},[49,45631,31820],{"class":73},[49,45633,78],{"class":77},[49,45635,32820],{"class":73},[49,45637,45638],{"class":51,"line":17410},[49,45639,35002],{"class":66},[49,45641,45642],{"class":51,"line":17433},[49,45643,35007],{"class":66},[49,45645,45646,45648,45650,45652,45654,45656,45658,45660,45662,45664,45666,45668,45670,45672,45674,45676,45678,45680,45682,45684,45686,45688,45690],{"class":51,"line":17455},[49,45647,35012],{"class":73},[49,45649,78],{"class":77},[49,45651,1719],{"class":73},[49,45653,35019],{"class":59},[49,45655,1207],{"class":73},[49,45657,35024],{"class":59},[49,45659,1207],{"class":73},[49,45661,35029],{"class":59},[49,45663,1207],{"class":73},[49,45665,35034],{"class":59},[49,45667,1207],{"class":73},[49,45669,35039],{"class":59},[49,45671,1207],{"class":73},[49,45673,35044],{"class":59},[49,45675,1207],{"class":73},[49,45677,35049],{"class":59},[49,45679,1207],{"class":73},[49,45681,35054],{"class":59},[49,45683,1207],{"class":73},[49,45685,35059],{"class":59},[49,45687,1207],{"class":73},[49,45689,35064],{"class":59},[49,45691,33777],{"class":73},[49,45693,45694,45696],{"class":51,"line":17460},[49,45695,34709],{"class":77},[49,45697,33415],{"class":73},[49,45699,45700],{"class":51,"line":17466},[49,45701,35077],{"class":66},[49,45703,45704,45706,45708,45710],{"class":51,"line":17480},[49,45705,4100],{"class":77},[49,45707,35084],{"class":73},[49,45709,26732],{"class":77},[49,45711,34728],{"class":73},[49,45713,45714,45716,45718],{"class":51,"line":17493},[49,45715,33141],{"class":73},[49,45717,78],{"class":77},[49,45719,33146],{"class":73},[49,45721,45722,45724,45726],{"class":51,"line":17498},[49,45723,33156],{"class":73},[49,45725,78],{"class":77},[49,45727,33161],{"class":73},[49,45729,45730],{"class":51,"line":17512},[49,45731,399],{"emptyLinePlaceholder":398},[49,45733,45734],{"class":51,"line":17517},[49,45735,35113],{"class":66},[49,45737,45738],{"class":51,"line":17523},[49,45739,33406],{"class":73},[49,45741,45742],{"class":51,"line":17528},[49,45743,35122],{"class":66},[49,45745,45746,45748,45750],{"class":51,"line":17542},[49,45747,33191],{"class":73},[49,45749,78],{"class":77},[49,45751,33196],{"class":73},[49,45753,45754],{"class":51,"line":17547},[49,45755,35135],{"class":66},[49,45757,45758,45760,45762,45764,45766,45768,45770],{"class":51,"line":17552},[49,45759,33208],{"class":73},[49,45761,78],{"class":77},[49,45763,33213],{"class":73},[49,45765,33216],{"class":5913},[49,45767,78],{"class":77},[49,45769,1047],{"class":159},[49,45771,847],{"class":73},[49,45773,45774],{"class":51,"line":17566},[49,45775,35156],{"class":66},[49,45777,45778,45780,45782],{"class":51,"line":17578},[49,45779,35161],{"class":73},[49,45781,78],{"class":77},[49,45783,35166],{"class":73},[49,45785,45786,45788,45790],{"class":51,"line":17583},[49,45787,35171],{"class":73},[49,45789,78],{"class":77},[49,45791,35176],{"class":73},[49,45793,45794,45796,45798,45800,45802,45804,45806,45808],{"class":51,"line":17596},[49,45795,35181],{"class":159},[49,45797,841],{"class":73},[49,45799,35186],{"class":59},[49,45801,35189],{"class":73},[49,45803,35192],{"class":59},[49,45805,1207],{"class":73},[49,45807,35197],{"class":59},[49,45809,35200],{"class":73},[18,45811,45813],{"id":45812},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45815,45816],{},"猫狗分类任务",[14,45818,45819],{},"划分数据集和验证集",[40,45821,45823],{"className":30909,"code":45822,"language":30911,"meta":27,"style":27},"# 创建脚本，用于划分数据集和验证集\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",[46,45824,45825,45830,45837,45842,45853,45860,45864,45874,45888,45897,45901,45906,45916,45936,45940,45945,45955,45966,45979,45983,45988,45997,46007,46018,46022,46027,46037,46041,46046,46051,46056,46061,46066,46070,46080,46107,46120,46132,46159,46164,46169,46183,46188,46200,46215,46230,46238,46242,46247,46253,46265,46278,46283,46288,46293,46343,46349,46353],{"__ignoreMap":27},[49,45826,45827],{"class":51,"line":52},[49,45828,45829],{"class":66},"# 创建脚本，用于划分数据集和验证集\n",[49,45831,45832,45834],{"class":51,"line":63},[49,45833,30923],{"class":77},[49,45835,45836],{"class":73}," os\n",[49,45838,45839],{"class":51,"line":70},[49,45840,45841],{"class":66},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[49,45843,45844,45846,45849,45851],{"class":51,"line":219},[49,45845,31268],{"class":77},[49,45847,45848],{"class":73}," shutil ",[49,45850,30923],{"class":77},[49,45852,32353],{"class":73},[49,45854,45855,45857],{"class":51,"line":233},[49,45856,30923],{"class":77},[49,45858,45859],{"class":73}," random\n",[49,45861,45862],{"class":51,"line":241},[49,45863,399],{"emptyLinePlaceholder":398},[49,45865,45866,45868,45871],{"class":51,"line":1920},[49,45867,32478],{"class":77},[49,45869,45870],{"class":55}," mkfile",[49,45872,45873],{"class":73},"(file):\n",[49,45875,45876,45878,45880,45883,45886],{"class":51,"line":2011},[49,45877,3798],{"class":77},[49,45879,39461],{"class":77},[49,45881,45882],{"class":73}," os.path.exists(",[49,45884,45885],{"class":5913},"file",[49,45887,31317],{"class":73},[49,45889,45890,45893,45895],{"class":51,"line":2017},[49,45891,45892],{"class":73},"        os.makedirs(",[49,45894,45885],{"class":5913},[49,45896,847],{"class":73},[49,45898,45899],{"class":51,"line":2029},[49,45900,399],{"emptyLinePlaceholder":398},[49,45902,45903],{"class":51,"line":2311},[49,45904,45905],{"class":66},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[49,45907,45908,45911,45913],{"class":51,"line":2316},[49,45909,45910],{"class":73},"file_path",[49,45912,78],{"class":77},[49,45914,45915],{"class":59},"'data_cat_dog'\n",[49,45917,45918,45921,45923,45926,45928,45931,45933],{"class":51,"line":2322},[49,45919,45920],{"class":73},"flower_class",[49,45922,78],{"class":77},[49,45924,45925],{"class":73},"[cla ",[49,45927,3722],{"class":77},[49,45929,45930],{"class":73}," cla ",[49,45932,26732],{"class":77},[49,45934,45935],{"class":73}," os.listdir(file_path)]\n",[49,45937,45938],{"class":51,"line":2327},[49,45939,399],{"emptyLinePlaceholder":398},[49,45941,45942],{"class":51,"line":2341},[49,45943,45944],{"class":66},"# 创建训练集train文件夹\n",[49,45946,45947,45950,45953],{"class":51,"line":2346},[49,45948,45949],{"class":73},"mkfile(",[49,45951,45952],{"class":59},"'data\u002Ftrain'",[49,45954,847],{"class":73},[49,45956,45957,45959,45961,45963],{"class":51,"line":2352},[49,45958,3722],{"class":77},[49,45960,45930],{"class":73},[49,45962,26732],{"class":77},[49,45964,45965],{"class":73}," flower_class:\n",[49,45967,45968,45971,45974,45976],{"class":51,"line":2373},[49,45969,45970],{"class":73},"    mkfile(",[49,45972,45973],{"class":59},"'data\u002Ftrain\u002F'",[49,45975,1310],{"class":77},[49,45977,45978],{"class":73},"cla)\n",[49,45980,45981],{"class":51,"line":2378},[49,45982,399],{"emptyLinePlaceholder":398},[49,45984,45985],{"class":51,"line":2392},[49,45986,45987],{"class":66},"# 创建验证集val文件夹\n",[49,45989,45990,45992,45995],{"class":51,"line":2397},[49,45991,45949],{"class":73},[49,45993,45994],{"class":59},"'data\u002Ftest'",[49,45996,847],{"class":73},[49,45998,45999,46001,46003,46005],{"class":51,"line":2426},[49,46000,3722],{"class":77},[49,46002,45930],{"class":73},[49,46004,26732],{"class":77},[49,46006,45965],{"class":73},[49,46008,46009,46011,46014,46016],{"class":51,"line":2431},[49,46010,45970],{"class":73},[49,46012,46013],{"class":59},"'data\u002Ftest\u002F'",[49,46015,1310],{"class":77},[49,46017,45978],{"class":73},[49,46019,46020],{"class":51,"line":2448},[49,46021,399],{"emptyLinePlaceholder":398},[49,46023,46024],{"class":51,"line":2453},[49,46025,46026],{"class":66},"# 划分比例，训练集：测试集=9：1\n",[49,46028,46029,46032,46034],{"class":51,"line":2458},[49,46030,46031],{"class":73},"split_rate",[49,46033,78],{"class":77},[49,46035,46036],{"class":159},"0.1\n",[49,46038,46039],{"class":51,"line":2463},[49,46040,399],{"emptyLinePlaceholder":398},[49,46042,46043],{"class":51,"line":2477},[49,46044,46045],{"class":66},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[49,46047,46048],{"class":51,"line":2482},[49,46049,46050],{"class":66},"# cla_path：当前类别的原始图片路径\n",[49,46052,46053],{"class":51,"line":3274},[49,46054,46055],{"class":66},"# images：当前类别下所有图片的文件名列表\n",[49,46057,46058],{"class":51,"line":3288},[49,46059,46060],{"class":66},"# num：该类别图片总数\n",[49,46062,46063],{"class":51,"line":3296},[49,46064,46065],{"class":66},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[49,46067,46068],{"class":51,"line":3301},[49,46069,399],{"emptyLinePlaceholder":398},[49,46071,46072,46074,46076,46078],{"class":51,"line":3307},[49,46073,3722],{"class":77},[49,46075,45930],{"class":73},[49,46077,26732],{"class":77},[49,46079,45965],{"class":73},[49,46081,46082,46085,46087,46090,46092,46095,46098,46100,46102,46104],{"class":51,"line":3313},[49,46083,46084],{"class":73},"    cla_path ",[49,46086,78],{"class":77},[49,46088,46089],{"class":73}," file_path ",[49,46091,1310],{"class":77},[49,46093,46094],{"class":59}," '\u002F'",[49,46096,46097],{"class":77}," +",[49,46099,45930],{"class":73},[49,46101,1310],{"class":77},[49,46103,46094],{"class":59},[49,46105,46106],{"class":66},"  # 某一类别的子目录\n",[49,46108,46109,46112,46114,46117],{"class":51,"line":3318},[49,46110,46111],{"class":73},"    images ",[49,46113,78],{"class":77},[49,46115,46116],{"class":73}," os.listdir(cla_path)  ",[49,46118,46119],{"class":66},"# iamges 列表存储了该目录下所有图像的名称\n",[49,46121,46122,46125,46127,46129],{"class":51,"line":8645},[49,46123,46124],{"class":73},"    num ",[49,46126,78],{"class":77},[49,46128,8028],{"class":159},[49,46130,46131],{"class":73},"(images)\n",[49,46133,46134,46137,46139,46142,46144,46146,46148,46151,46153,46156],{"class":51,"line":8669},[49,46135,46136],{"class":73},"    eval_index ",[49,46138,78],{"class":77},[49,46140,46141],{"class":73}," random.sample(images, ",[49,46143,1322],{"class":5913},[49,46145,78],{"class":77},[49,46147,844],{"class":159},[49,46149,46150],{"class":73},"(num ",[49,46152,1284],{"class":77},[49,46154,46155],{"class":73}," split_rate))  ",[49,46157,46158],{"class":66},"# 从images列表中随机抽取 k 个图像名称\n",[49,46160,46161],{"class":51,"line":8674},[49,46162,46163],{"class":66},"    # 遍历该类别下的所有图片\n",[49,46165,46166],{"class":51,"line":8680},[49,46167,46168],{"class":66},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[49,46170,46171,46173,46176,46178,46180],{"class":51,"line":8707},[49,46172,3898],{"class":77},[49,46174,46175],{"class":73}," index, image ",[49,46177,26732],{"class":77},[49,46179,32137],{"class":159},[49,46181,46182],{"class":73},"(images):\n",[49,46184,46185],{"class":51,"line":8712},[49,46186,46187],{"class":66},"        # eval_index 中保存验证集val的图像名称\n",[49,46189,46190,46192,46195,46197],{"class":51,"line":8718},[49,46191,3194],{"class":77},[49,46193,46194],{"class":73}," image ",[49,46196,26732],{"class":77},[49,46198,46199],{"class":73}," eval_index:\n",[49,46201,46202,46205,46207,46210,46212],{"class":51,"line":8730},[49,46203,46204],{"class":73},"            image_path ",[49,46206,78],{"class":77},[49,46208,46209],{"class":73}," cla_path ",[49,46211,1310],{"class":77},[49,46213,46214],{"class":73}," image\n",[49,46216,46217,46220,46222,46225,46227],{"class":51,"line":8742},[49,46218,46219],{"class":73},"            new_path ",[49,46221,78],{"class":77},[49,46223,46224],{"class":59}," 'data\u002Ftest\u002F'",[49,46226,46097],{"class":77},[49,46228,46229],{"class":73}," cla\n",[49,46231,46232,46235],{"class":51,"line":8754},[49,46233,46234],{"class":73},"            copy(image_path, new_path)  ",[49,46236,46237],{"class":66},"# 将选中的图像复制到新路径\n",[49,46239,46240],{"class":51,"line":10413},[49,46241,399],{"emptyLinePlaceholder":398},[49,46243,46244],{"class":51,"line":10438},[49,46245,46246],{"class":66},"        # 其余的图像保存在训练集train中\n",[49,46248,46249,46251],{"class":51,"line":10461},[49,46250,3231],{"class":77},[49,46252,4436],{"class":73},[49,46254,46255,46257,46259,46261,46263],{"class":51,"line":10485},[49,46256,46204],{"class":73},[49,46258,78],{"class":77},[49,46260,46209],{"class":73},[49,46262,1310],{"class":77},[49,46264,46214],{"class":73},[49,46266,46267,46269,46271,46274,46276],{"class":51,"line":10490},[49,46268,46219],{"class":73},[49,46270,78],{"class":77},[49,46272,46273],{"class":59}," 'data\u002Ftrain\u002F'",[49,46275,46097],{"class":77},[49,46277,46229],{"class":73},[49,46279,46280],{"class":51,"line":10495},[49,46281,46282],{"class":73},"            copy(image_path, new_path)\n",[49,46284,46285],{"class":51,"line":10500},[49,46286,46287],{"class":66},"            # 打印进度条信息\n",[49,46289,46290],{"class":51,"line":10509},[49,46291,46292],{"class":66},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[49,46294,46295,46297,46299,46301,46304,46306,46308,46311,46313,46315,46317,46320,46323,46325,46327,46330,46333,46335,46337,46340],{"class":51,"line":10514},[49,46296,32982],{"class":159},[49,46298,841],{"class":73},[49,46300,1080],{"class":59},[49,46302,46303],{"class":159},"\\r",[49,46305,1719],{"class":59},[49,46307,32990],{"class":159},[49,46309,46310],{"class":59},"] processing [",[49,46312,32990],{"class":159},[49,46314,1413],{"class":59},[49,46316,32990],{"class":159},[49,46318,46319],{"class":59},"]\"",[49,46321,46322],{"class":73},".format(cla, index ",[49,46324,1310],{"class":77},[49,46326,25807],{"class":159},[49,46328,46329],{"class":73},", num), ",[49,46331,46332],{"class":5913},"end",[49,46334,78],{"class":77},[49,46336,8349],{"class":59},[49,46338,46339],{"class":73},")  ",[49,46341,46342],{"class":66},"# processing bar\n",[49,46344,46345,46347],{"class":51,"line":10520},[49,46346,31830],{"class":159},[49,46348,2674],{"class":73},[49,46350,46351],{"class":51,"line":10541},[49,46352,399],{"emptyLinePlaceholder":398},[49,46354,46355,46357,46359,46362],{"class":51,"line":10547},[49,46356,30946],{"class":159},[49,46358,841],{"class":73},[49,46360,46361],{"class":59},"\"processing done!\"",[49,46363,847],{"class":73},[14,46365,46366],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[130,46368,46370],{"id":46369},"_242模型代码","2.4.2.模型代码",[14,46372,46373],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[40,46375,46377],{"className":30909,"code":46376,"language":30911,"meta":27,"style":27},"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",[46,46378,46379,46385,46395,46405,46409,46425,46433,46447,46457,46461,46491,46495,46529,46575,46579,46613,46659,46663,46667,46701,46731,46735,46743,46757,46779,46801,46819,46823,46837,46841,46845,46861,46865,46873,46887,46897,46941,46945,46973,46977,46987,47015,47019,47055,47059,47087,47091,47101,47133,47165,47193,47197,47207,47239,47271,47303,47335,47367,47395,47399,47409,47441,47473,47485,47489,47501,47505,47509,47521,47529,47549,47553,47557,47561,47565,47569,47573,47587,47595,47603,47615,47629,47637,47641,47649,47659,47669,47679,47689,47699,47705,47709,47713,47725,47745,47753],{"__ignoreMap":27},[49,46380,46381,46383],{"class":51,"line":52},[49,46382,30923],{"class":77},[49,46384,30926],{"class":73},[49,46386,46387,46389,46391,46393],{"class":51,"line":63},[49,46388,31268],{"class":77},[49,46390,31271],{"class":73},[49,46392,30923],{"class":77},[49,46394,31276],{"class":73},[49,46396,46397,46399,46401,46403],{"class":51,"line":70},[49,46398,31268],{"class":77},[49,46400,31288],{"class":73},[49,46402,30923],{"class":77},[49,46404,31293],{"class":73},[49,46406,46407],{"class":51,"line":219},[49,46408,399],{"emptyLinePlaceholder":398},[49,46410,46411,46413,46415,46417,46419,46421,46423],{"class":51,"line":233},[49,46412,15391],{"class":77},[49,46414,42024],{"class":55},[49,46416,841],{"class":73},[49,46418,31309],{"class":55},[49,46420,1387],{"class":73},[49,46422,31314],{"class":55},[49,46424,31317],{"class":73},[49,46426,46427,46429,46431],{"class":51,"line":241},[49,46428,31332],{"class":77},[49,46430,31335],{"class":159},[49,46432,42043],{"class":73},[49,46434,46435,46437,46439,46441,46443,46445],{"class":51,"line":1920},[49,46436,31348],{"class":159},[49,46438,42050],{"class":73},[49,46440,31354],{"class":159},[49,46442,31357],{"class":73},[49,46444,31360],{"class":159},[49,46446,2674],{"class":73},[49,46448,46449,46451,46453,46455],{"class":51,"line":2011},[49,46450,31376],{"class":159},[49,46452,35302],{"class":73},[49,46454,78],{"class":77},[49,46456,35307],{"class":73},[49,46458,46459],{"class":51,"line":2017},[49,46460,42073],{"class":66},[49,46462,46463,46465,46467,46469,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489],{"class":51,"line":2029},[49,46464,31376],{"class":159},[49,46466,42080],{"class":73},[49,46468,78],{"class":77},[49,46470,31384],{"class":73},[49,46472,31387],{"class":5913},[49,46474,78],{"class":77},[49,46476,42091],{"class":73},[49,46478,31396],{"class":5913},[49,46480,78],{"class":77},[49,46482,42098],{"class":73},[49,46484,31405],{"class":5913},[49,46486,78],{"class":77},[49,46488,1047],{"class":159},[49,46490,847],{"class":73},[49,46492,46493],{"class":51,"line":2311},[49,46494,42111],{"class":66},[49,46496,46497,46499,46501,46503,46505,46507,46509,46511,46513,46515,46517,46519,46521,46523,46525,46527],{"class":51,"line":2316},[49,46498,31376],{"class":159},[49,46500,42118],{"class":73},[49,46502,78],{"class":77},[49,46504,31384],{"class":73},[49,46506,31387],{"class":5913},[49,46508,78],{"class":77},[49,46510,42091],{"class":73},[49,46512,31396],{"class":5913},[49,46514,78],{"class":77},[49,46516,42135],{"class":73},[49,46518,1021],{"class":159},[49,46520,42140],{"class":73},[49,46522,31405],{"class":5913},[49,46524,78],{"class":77},[49,46526,1047],{"class":159},[49,46528,847],{"class":73},[49,46530,46531,46533,46535,46537,46539,46541,46543,46545,46547,46549,46551,46553,46555,46557,46559,46561,46563,46565,46567,46569,46571,46573],{"class":51,"line":2322},[49,46532,31376],{"class":159},[49,46534,42155],{"class":73},[49,46536,78],{"class":77},[49,46538,31384],{"class":73},[49,46540,31387],{"class":5913},[49,46542,78],{"class":77},[49,46544,42135],{"class":73},[49,46546,1021],{"class":159},[49,46548,42140],{"class":73},[49,46550,31396],{"class":5913},[49,46552,78],{"class":77},[49,46554,42135],{"class":73},[49,46556,1047],{"class":159},[49,46558,42140],{"class":73},[49,46560,31405],{"class":5913},[49,46562,78],{"class":77},[49,46564,909],{"class":159},[49,46566,1207],{"class":73},[49,46568,31414],{"class":5913},[49,46570,78],{"class":77},[49,46572,1047],{"class":159},[49,46574,847],{"class":73},[49,46576,46577],{"class":51,"line":2327},[49,46578,42200],{"class":66},[49,46580,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611],{"class":51,"line":2341},[49,46582,31376],{"class":159},[49,46584,42207],{"class":73},[49,46586,78],{"class":77},[49,46588,31384],{"class":73},[49,46590,31387],{"class":5913},[49,46592,78],{"class":77},[49,46594,42091],{"class":73},[49,46596,31396],{"class":5913},[49,46598,78],{"class":77},[49,46600,42224],{"class":73},[49,46602,1021],{"class":159},[49,46604,42140],{"class":73},[49,46606,31405],{"class":5913},[49,46608,78],{"class":77},[49,46610,1047],{"class":159},[49,46612,847],{"class":73},[49,46614,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643,46645,46647,46649,46651,46653,46655,46657],{"class":51,"line":2346},[49,46616,31376],{"class":159},[49,46618,42243],{"class":73},[49,46620,78],{"class":77},[49,46622,31384],{"class":73},[49,46624,31387],{"class":5913},[49,46626,78],{"class":77},[49,46628,42224],{"class":73},[49,46630,1021],{"class":159},[49,46632,42140],{"class":73},[49,46634,31396],{"class":5913},[49,46636,78],{"class":77},[49,46638,42224],{"class":73},[49,46640,1047],{"class":159},[49,46642,42140],{"class":73},[49,46644,31405],{"class":5913},[49,46646,78],{"class":77},[49,46648,1148],{"class":159},[49,46650,1207],{"class":73},[49,46652,31414],{"class":5913},[49,46654,78],{"class":77},[49,46656,915],{"class":159},[49,46658,847],{"class":73},[49,46660,46661],{"class":51,"line":2352},[49,46662,42288],{"class":66},[49,46664,46665],{"class":51,"line":2373},[49,46666,42293],{"class":66},[49,46668,46669,46671,46673,46675,46677,46679,46681,46683,46685,46687,46689,46691,46693,46695,46697,46699],{"class":51,"line":2378},[49,46670,31376],{"class":159},[49,46672,42300],{"class":73},[49,46674,78],{"class":77},[49,46676,35360],{"class":73},[49,46678,31405],{"class":5913},[49,46680,78],{"class":77},[49,46682,909],{"class":159},[49,46684,1207],{"class":73},[49,46686,31460],{"class":5913},[49,46688,78],{"class":77},[49,46690,1047],{"class":159},[49,46692,1207],{"class":73},[49,46694,31414],{"class":5913},[49,46696,78],{"class":77},[49,46698,1047],{"class":159},[49,46700,847],{"class":73},[49,46702,46703,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729],{"class":51,"line":2392},[49,46704,31376],{"class":159},[49,46706,42335],{"class":73},[49,46708,78],{"class":77},[49,46710,31384],{"class":73},[49,46712,31387],{"class":5913},[49,46714,78],{"class":77},[49,46716,42091],{"class":73},[49,46718,31396],{"class":5913},[49,46720,78],{"class":77},[49,46722,42352],{"class":73},[49,46724,31405],{"class":5913},[49,46726,78],{"class":77},[49,46728,1047],{"class":159},[49,46730,847],{"class":73},[49,46732,46733],{"class":51,"line":2397},[49,46734,399],{"emptyLinePlaceholder":398},[49,46736,46737,46739,46741],{"class":51,"line":2426},[49,46738,31332],{"class":77},[49,46740,31624],{"class":55},[49,46742,31627],{"class":73},[49,46744,46745,46747,46749,46751,46753,46755],{"class":51,"line":2431},[49,46746,42377],{"class":73},[49,46748,78],{"class":77},[49,46750,31354],{"class":159},[49,46752,35715],{"class":73},[49,46754,31354],{"class":159},[49,46756,42388],{"class":73},[49,46758,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777],{"class":51,"line":2448},[49,46760,7782],{"class":73},[49,46762,78],{"class":77},[49,46764,31354],{"class":159},[49,46766,35715],{"class":73},[49,46768,31354],{"class":159},[49,46770,42403],{"class":73},[49,46772,31354],{"class":159},[49,46774,35715],{"class":73},[49,46776,31354],{"class":159},[49,46778,42412],{"class":73},[49,46780,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799],{"class":51,"line":2453},[49,46782,42417],{"class":73},[49,46784,78],{"class":77},[49,46786,31354],{"class":159},[49,46788,35715],{"class":73},[49,46790,31354],{"class":159},[49,46792,42428],{"class":73},[49,46794,31354],{"class":159},[49,46796,35715],{"class":73},[49,46798,31354],{"class":159},[49,46800,42437],{"class":73},[49,46802,46803,46805,46807,46809,46811,46813,46815,46817],{"class":51,"line":2458},[49,46804,42442],{"class":73},[49,46806,78],{"class":77},[49,46808,31354],{"class":159},[49,46810,35715],{"class":73},[49,46812,31354],{"class":159},[49,46814,42453],{"class":73},[49,46816,31354],{"class":159},[49,46818,42458],{"class":73},[49,46820,46821],{"class":51,"line":2463},[49,46822,42463],{"class":66},[49,46824,46825,46827,46829,46831,46833,46835],{"class":51,"line":2477},[49,46826,15449],{"class":77},[49,46828,42470],{"class":73},[49,46830,33216],{"class":5913},[49,46832,78],{"class":77},[49,46834,1047],{"class":159},[49,46836,847],{"class":73},[49,46838,46839],{"class":51,"line":2482},[49,46840,399],{"emptyLinePlaceholder":398},[49,46842,46843],{"class":51,"line":3274},[49,46844,42491],{"class":66},[49,46846,46847,46849,46851,46853,46855,46857,46859],{"class":51,"line":3288},[49,46848,15391],{"class":77},[49,46850,42498],{"class":55},[49,46852,841],{"class":73},[49,46854,31309],{"class":55},[49,46856,1387],{"class":73},[49,46858,31314],{"class":55},[49,46860,31317],{"class":73},[49,46862,46863],{"class":51,"line":3296},[49,46864,42513],{"class":66},[49,46866,46867,46869,46871],{"class":51,"line":3301},[49,46868,31332],{"class":77},[49,46870,31335],{"class":159},[49,46872,42522],{"class":73},[49,46874,46875,46877,46879,46881,46883,46885],{"class":51,"line":3307},[49,46876,31348],{"class":159},[49,46878,42529],{"class":73},[49,46880,31354],{"class":159},[49,46882,31357],{"class":73},[49,46884,31360],{"class":159},[49,46886,2674],{"class":73},[49,46888,46889,46891,46893,46895],{"class":51,"line":3313},[49,46890,31376],{"class":159},[49,46892,42544],{"class":73},[49,46894,78],{"class":77},[49,46896,38540],{"class":73},[49,46898,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937,46939],{"class":51,"line":3318},[49,46900,38545],{"class":73},[49,46902,31387],{"class":5913},[49,46904,78],{"class":77},[49,46906,909],{"class":159},[49,46908,1207],{"class":73},[49,46910,31396],{"class":5913},[49,46912,78],{"class":77},[49,46914,1033],{"class":159},[49,46916,1207],{"class":73},[49,46918,31405],{"class":5913},[49,46920,78],{"class":77},[49,46922,1198],{"class":159},[49,46924,1207],{"class":73},[49,46926,31460],{"class":5913},[49,46928,78],{"class":77},[49,46930,915],{"class":159},[49,46932,1207],{"class":73},[49,46934,31414],{"class":5913},[49,46936,78],{"class":77},[49,46938,909],{"class":159},[49,46940,38578],{"class":73},[49,46942,46943],{"class":51,"line":8645},[49,46944,38583],{"class":73},[49,46946,46947,46949,46951,46953,46955,46957,46959,46961,46963,46965,46967,46969,46971],{"class":51,"line":8669},[49,46948,38628],{"class":73},[49,46950,31405],{"class":5913},[49,46952,78],{"class":77},[49,46954,909],{"class":159},[49,46956,1207],{"class":73},[49,46958,31460],{"class":5913},[49,46960,78],{"class":77},[49,46962,915],{"class":159},[49,46964,1207],{"class":73},[49,46966,31414],{"class":5913},[49,46968,78],{"class":77},[49,46970,1047],{"class":159},[49,46972,847],{"class":73},[49,46974,46975],{"class":51,"line":8674},[49,46976,38657],{"class":73},[49,46978,46979,46981,46983,46985],{"class":51,"line":8680},[49,46980,31376],{"class":159},[49,46982,42635],{"class":73},[49,46984,78],{"class":77},[49,46986,38540],{"class":73},[49,46988,46989,46991,46993,46995,46997,46999,47001,47003,47005,47007,47009,47011,47013],{"class":51,"line":8707},[49,46990,38545],{"class":73},[49,46992,31387],{"class":5913},[49,46994,78],{"class":77},[49,46996,1033],{"class":159},[49,46998,1207],{"class":73},[49,47000,31396],{"class":5913},[49,47002,78],{"class":77},[49,47004,1033],{"class":159},[49,47006,1207],{"class":73},[49,47008,31405],{"class":5913},[49,47010,78],{"class":77},[49,47012,1047],{"class":159},[49,47014,38578],{"class":73},[49,47016,47017],{"class":51,"line":8712},[49,47018,38583],{"class":73},[49,47020,47021,47023,47025,47027,47029,47031,47033,47035,47037,47039,47041,47043,47045,47047,47049,47051,47053],{"class":51,"line":8718},[49,47022,38545],{"class":73},[49,47024,31387],{"class":5913},[49,47026,78],{"class":77},[49,47028,1033],{"class":159},[49,47030,1207],{"class":73},[49,47032,31396],{"class":5913},[49,47034,78],{"class":77},[49,47036,42690],{"class":159},[49,47038,1207],{"class":73},[49,47040,31405],{"class":5913},[49,47042,78],{"class":77},[49,47044,909],{"class":159},[49,47046,1207],{"class":73},[49,47048,31414],{"class":5913},[49,47050,78],{"class":77},[49,47052,1047],{"class":159},[49,47054,38578],{"class":73},[49,47056,47057],{"class":51,"line":8730},[49,47058,38583],{"class":73},[49,47060,47061,47063,47065,47067,47069,47071,47073,47075,47077,47079,47081,47083,47085],{"class":51,"line":8742},[49,47062,38628],{"class":73},[49,47064,31405],{"class":5913},[49,47066,78],{"class":77},[49,47068,909],{"class":159},[49,47070,1207],{"class":73},[49,47072,31460],{"class":5913},[49,47074,78],{"class":77},[49,47076,915],{"class":159},[49,47078,1207],{"class":73},[49,47080,31414],{"class":5913},[49,47082,78],{"class":77},[49,47084,1047],{"class":159},[49,47086,847],{"class":73},[49,47088,47089],{"class":51,"line":8754},[49,47090,38657],{"class":73},[49,47092,47093,47095,47097,47099],{"class":51,"line":10413},[49,47094,31376],{"class":159},[49,47096,42751],{"class":73},[49,47098,78],{"class":77},[49,47100,38540],{"class":73},[49,47102,47103,47105,47107,47109,47111,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131],{"class":51,"line":10438},[49,47104,42760],{"class":73},[49,47106,42690],{"class":159},[49,47108,1207],{"class":73},[49,47110,1033],{"class":159},[49,47112,42769],{"class":73},[49,47114,1039],{"class":159},[49,47116,1207],{"class":73},[49,47118,32601],{"class":159},[49,47120,42778],{"class":73},[49,47122,1430],{"class":159},[49,47124,1207],{"class":73},[49,47126,1027],{"class":159},[49,47128,42787],{"class":73},[49,47130,1027],{"class":159},[49,47132,38578],{"class":73},[49,47134,47135,47137,47139,47141,47143,47145,47147,47149,47151,47153,47155,47157,47159,47161,47163],{"class":51,"line":10461},[49,47136,42760],{"class":73},[49,47138,35401],{"class":159},[49,47140,1207],{"class":73},[49,47142,32601],{"class":159},[49,47144,42769],{"class":73},[49,47146,32601],{"class":159},[49,47148,1207],{"class":73},[49,47150,42690],{"class":159},[49,47152,42778],{"class":73},[49,47154,1027],{"class":159},[49,47156,1207],{"class":73},[49,47158,1039],{"class":159},[49,47160,42787],{"class":73},[49,47162,1033],{"class":159},[49,47164,38578],{"class":73},[49,47166,47167,47169,47171,47173,47175,47177,47179,47181,47183,47185,47187,47189,47191],{"class":51,"line":10485},[49,47168,38628],{"class":73},[49,47170,31405],{"class":5913},[49,47172,78],{"class":77},[49,47174,909],{"class":159},[49,47176,1207],{"class":73},[49,47178,31460],{"class":5913},[49,47180,78],{"class":77},[49,47182,915],{"class":159},[49,47184,1207],{"class":73},[49,47186,31414],{"class":5913},[49,47188,78],{"class":77},[49,47190,1047],{"class":159},[49,47192,847],{"class":73},[49,47194,47195],{"class":51,"line":10490},[49,47196,38657],{"class":73},[49,47198,47199,47201,47203,47205],{"class":51,"line":10495},[49,47200,31376],{"class":159},[49,47202,42862],{"class":73},[49,47204,78],{"class":77},[49,47206,38540],{"class":73},[49,47208,47209,47211,47213,47215,47217,47219,47221,47223,47225,47227,47229,47231,47233,47235,47237],{"class":51,"line":10500},[49,47210,42760],{"class":73},[49,47212,42873],{"class":159},[49,47214,1207],{"class":73},[49,47216,42690],{"class":159},[49,47218,42769],{"class":73},[49,47220,1039],{"class":159},[49,47222,1207],{"class":73},[49,47224,42886],{"class":159},[49,47226,42778],{"class":73},[49,47228,1430],{"class":159},[49,47230,1207],{"class":73},[49,47232,1436],{"class":159},[49,47234,42787],{"class":73},[49,47236,1033],{"class":159},[49,47238,38578],{"class":73},[49,47240,47241,47243,47245,47247,47249,47251,47253,47255,47257,47259,47261,47263,47265,47267,47269],{"class":51,"line":10509},[49,47242,42760],{"class":73},[49,47244,38988],{"class":159},[49,47246,1207],{"class":73},[49,47248,21745],{"class":159},[49,47250,42769],{"class":73},[49,47252,1447],{"class":159},[49,47254,1207],{"class":73},[49,47256,32032],{"class":159},[49,47258,42778],{"class":73},[49,47260,1629],{"class":159},[49,47262,1207],{"class":73},[49,47264,1033],{"class":159},[49,47266,42787],{"class":73},[49,47268,1033],{"class":159},[49,47270,38578],{"class":73},[49,47272,47273,47275,47277,47279,47281,47283,47285,47287,47289,47291,47293,47295,47297,47299,47301],{"class":51,"line":10514},[49,47274,42760],{"class":73},[49,47276,38988],{"class":159},[49,47278,1207],{"class":73},[49,47280,32601],{"class":159},[49,47282,42769],{"class":73},[49,47284,32601],{"class":159},[49,47286,1207],{"class":73},[49,47288,35401],{"class":159},[49,47290,42778],{"class":73},[49,47292,1629],{"class":159},[49,47294,1207],{"class":73},[49,47296,1033],{"class":159},[49,47298,42787],{"class":73},[49,47300,1033],{"class":159},[49,47302,38578],{"class":73},[49,47304,47305,47307,47309,47311,47313,47315,47317,47319,47321,47323,47325,47327,47329,47331,47333],{"class":51,"line":10520},[49,47306,42760],{"class":73},[49,47308,38988],{"class":159},[49,47310,1207],{"class":73},[49,47312,1447],{"class":159},[49,47314,42769],{"class":73},[49,47316,32601],{"class":159},[49,47318,1207],{"class":73},[49,47320,42983],{"class":159},[49,47322,42778],{"class":73},[49,47324,1027],{"class":159},[49,47326,1207],{"class":73},[49,47328,1033],{"class":159},[49,47330,42787],{"class":73},[49,47332,1033],{"class":159},[49,47334,38578],{"class":73},[49,47336,47337,47339,47341,47343,47345,47347,47349,47351,47353,47355,47357,47359,47361,47363,47365],{"class":51,"line":10541},[49,47338,42760],{"class":73},[49,47340,43004],{"class":159},[49,47342,1207],{"class":73},[49,47344,35401],{"class":159},[49,47346,42769],{"class":73},[49,47348,21745],{"class":159},[49,47350,1207],{"class":73},[49,47352,43017],{"class":159},[49,47354,42778],{"class":73},[49,47356,1027],{"class":159},[49,47358,1207],{"class":73},[49,47360,32601],{"class":159},[49,47362,42787],{"class":73},[49,47364,32601],{"class":159},[49,47366,38578],{"class":73},[49,47368,47369,47371,47373,47375,47377,47379,47381,47383,47385,47387,47389,47391,47393],{"class":51,"line":10547},[49,47370,38628],{"class":73},[49,47372,31405],{"class":5913},[49,47374,78],{"class":77},[49,47376,909],{"class":159},[49,47378,1207],{"class":73},[49,47380,31460],{"class":5913},[49,47382,78],{"class":77},[49,47384,915],{"class":159},[49,47386,1207],{"class":73},[49,47388,31414],{"class":5913},[49,47390,78],{"class":77},[49,47392,1047],{"class":159},[49,47394,847],{"class":73},[49,47396,47397],{"class":51,"line":10561},[49,47398,38657],{"class":73},[49,47400,47401,47403,47405,47407],{"class":51,"line":10567},[49,47402,31376],{"class":159},[49,47404,43070],{"class":73},[49,47406,78],{"class":77},[49,47408,38540],{"class":73},[49,47410,47411,47413,47415,47417,47419,47421,47423,47425,47427,47429,47431,47433,47435,47437,47439],{"class":51,"line":10594},[49,47412,42760],{"class":73},[49,47414,43081],{"class":159},[49,47416,1207],{"class":73},[49,47418,35401],{"class":159},[49,47420,42769],{"class":73},[49,47422,21745],{"class":159},[49,47424,1207],{"class":73},[49,47426,43017],{"class":159},[49,47428,42778],{"class":73},[49,47430,1027],{"class":159},[49,47432,1207],{"class":73},[49,47434,32601],{"class":159},[49,47436,42787],{"class":73},[49,47438,32601],{"class":159},[49,47440,38578],{"class":73},[49,47442,47443,47445,47447,47449,47451,47453,47455,47457,47459,47461,47463,47465,47467,47469,47471],{"class":51,"line":10603},[49,47444,42760],{"class":73},[49,47446,43081],{"class":159},[49,47448,1207],{"class":73},[49,47450,35471],{"class":159},[49,47452,42769],{"class":73},[49,47454,42690],{"class":159},[49,47456,1207],{"class":73},[49,47458,35471],{"class":159},[49,47460,42778],{"class":73},[49,47462,1436],{"class":159},[49,47464,1207],{"class":73},[49,47466,32601],{"class":159},[49,47468,42787],{"class":73},[49,47470,32601],{"class":159},[49,47472,38578],{"class":73},[49,47474,47475,47477,47479,47481,47483],{"class":51,"line":10609},[49,47476,43144],{"class":73},[49,47478,1047],{"class":159},[49,47480,1207],{"class":73},[49,47482,1047],{"class":159},[49,47484,43153],{"class":73},[49,47486,47487],{"class":51,"line":10617},[49,47488,39321],{"class":73},[49,47490,47491,47493,47495,47497,47499],{"class":51,"line":10622},[49,47492,39326],{"class":73},[49,47494,43164],{"class":159},[49,47496,1207],{"class":73},[49,47498,915],{"class":159},[49,47500,847],{"class":73},[49,47502,47503],{"class":51,"line":17301},[49,47504,38657],{"class":73},[49,47506,47507],{"class":51,"line":17307},[49,47508,43179],{"class":66},[49,47510,47511,47513,47515,47517,47519],{"class":51,"line":17330},[49,47512,4100],{"class":77},[49,47514,39399],{"class":73},[49,47516,26732],{"class":77},[49,47518,39404],{"class":159},[49,47520,39407],{"class":73},[49,47522,47523,47525,47527],{"class":51,"line":17336},[49,47524,5339],{"class":77},[49,47526,39419],{"class":159},[49,47528,39422],{"class":73},[49,47530,47531,47533,47535,47537,47539,47541,47543,47545,47547],{"class":51,"line":17359},[49,47532,39432],{"class":73},[49,47534,43206],{"class":5913},[49,47536,78],{"class":77},[49,47538,43211],{"class":59},[49,47540,1207],{"class":73},[49,47542,39435],{"class":5913},[49,47544,78],{"class":77},[49,47546,39440],{"class":59},[49,47548,847],{"class":73},[49,47550,47551],{"class":51,"line":17373},[49,47552,43226],{"class":66},[49,47554,47555],{"class":51,"line":17393},[49,47556,43231],{"class":66},[49,47558,47559],{"class":51,"line":17399},[49,47560,43236],{"class":66},[49,47562,47563],{"class":51,"line":17410},[49,47564,43241],{"class":66},[49,47566,47567],{"class":51,"line":17433},[49,47568,43246],{"class":66},[49,47570,47571],{"class":51,"line":17455},[49,47572,43251],{"class":66},[49,47574,47575,47577,47579,47581,47583,47585],{"class":51,"line":17460},[49,47576,39452],{"class":77},[49,47578,39455],{"class":73},[49,47580,39458],{"class":77},[49,47582,39461],{"class":77},[49,47584,39464],{"class":159},[49,47586,4436],{"class":73},[49,47588,47589,47591,47593],{"class":51,"line":17466},[49,47590,39476],{"class":73},[49,47592,1021],{"class":159},[49,47594,847],{"class":73},[49,47596,47597,47599,47601],{"class":51,"line":17480},[49,47598,43278],{"class":77},[49,47600,39419],{"class":159},[49,47602,39495],{"class":73},[49,47604,47605,47607,47609,47611,47613],{"class":51,"line":17493},[49,47606,43287],{"class":73},[49,47608,1021],{"class":159},[49,47610,1207],{"class":73},[49,47612,39517],{"class":159},[49,47614,847],{"class":73},[49,47616,47617,47619,47621,47623,47625,47627],{"class":51,"line":17498},[49,47618,43300],{"class":77},[49,47620,39455],{"class":73},[49,47622,39458],{"class":77},[49,47624,39461],{"class":77},[49,47626,39464],{"class":159},[49,47628,4436],{"class":73},[49,47630,47631,47633,47635],{"class":51,"line":17512},[49,47632,43315],{"class":73},[49,47634,1021],{"class":159},[49,47636,847],{"class":73},[49,47638,47639],{"class":51,"line":17517},[49,47640,35696],{"class":66},[49,47642,47643,47645,47647],{"class":51,"line":17523},[49,47644,31332],{"class":77},[49,47646,31624],{"class":55},[49,47648,31627],{"class":73},[49,47650,47651,47653,47655,47657],{"class":51,"line":17528},[49,47652,31632],{"class":73},[49,47654,78],{"class":77},[49,47656,31354],{"class":159},[49,47658,43342],{"class":73},[49,47660,47661,47663,47665,47667],{"class":51,"line":17542},[49,47662,31632],{"class":73},[49,47664,78],{"class":77},[49,47666,31354],{"class":159},[49,47668,43353],{"class":73},[49,47670,47671,47673,47675,47677],{"class":51,"line":17547},[49,47672,31632],{"class":73},[49,47674,78],{"class":77},[49,47676,31354],{"class":159},[49,47678,43364],{"class":73},[49,47680,47681,47683,47685,47687],{"class":51,"line":17552},[49,47682,31632],{"class":73},[49,47684,78],{"class":77},[49,47686,31354],{"class":159},[49,47688,43375],{"class":73},[49,47690,47691,47693,47695,47697],{"class":51,"line":17566},[49,47692,31632],{"class":73},[49,47694,78],{"class":77},[49,47696,31354],{"class":159},[49,47698,43386],{"class":73},[49,47700,47701,47703],{"class":51,"line":17578},[49,47702,15449],{"class":77},[49,47704,31740],{"class":73},[49,47706,47707],{"class":51,"line":17583},[49,47708,399],{"emptyLinePlaceholder":398},[49,47710,47711],{"class":51,"line":17596},[49,47712,43401],{"class":66},[49,47714,47715,47717,47719,47721,47723],{"class":51,"line":17601},[49,47716,2230],{"class":77},[49,47718,31751],{"class":159},[49,47720,3646],{"class":77},[49,47722,31756],{"class":59},[49,47724,4436],{"class":73},[49,47726,47727,47729,47731,47733,47735,47737,47739,47741,47743],{"class":51,"line":17606},[49,47728,31768],{"class":73},[49,47730,78],{"class":77},[49,47732,30982],{"class":73},[49,47734,31775],{"class":59},[49,47736,2403],{"class":77},[49,47738,31780],{"class":73},[49,47740,2400],{"class":77},[49,47742,31007],{"class":59},[49,47744,847],{"class":73},[49,47746,47747,47749,47751],{"class":51,"line":17611},[49,47748,31820],{"class":73},[49,47750,78],{"class":77},[49,47752,43442],{"class":73},[49,47754,47755,47757,47759,47761,47763,47765,47767,47769],{"class":51,"line":17624},[49,47756,31830],{"class":159},[49,47758,31833],{"class":73},[49,47760,1047],{"class":159},[49,47762,1207],{"class":73},[49,47764,32032],{"class":159},[49,47766,1207],{"class":73},[49,47768,32032],{"class":159},[49,47770,31846],{"class":73},[130,47772,47774],{"id":47773},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47776,47777],{},"计算图片的均值与方差，用于训练中归一化处理操作",[40,47779,47781],{"className":30909,"code":47780,"language":30911,"meta":27,"style":27},"# 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",[46,47782,47783,47788,47801,47806,47812,47817,47827,47831,47836,47846,47850,47855,47865,47882,47886,47891,47903,47915,47946,47955,47965,47975,47979,47984,47999,48003,48008,48013,48018,48028,48033,48058,48062,48067,48082,48086,48099,48103,48108,48113,48118,48123,48128,48138,48148,48171,48179,48187,48195,48199,48211,48215,48220,48224,48228,48235,48255,48279,48286,48300,48305,48310,48314,48328,48332,48344],{"__ignoreMap":27},[49,47784,47785],{"class":51,"line":52},[49,47786,47787],{"class":66},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[49,47789,47790,47792,47795,47798],{"class":51,"line":63},[49,47791,31268],{"class":77},[49,47793,47794],{"class":159}," PIL",[49,47796,47797],{"class":77}," import",[49,47799,47800],{"class":73}," Image\n",[49,47802,47803],{"class":51,"line":70},[49,47804,47805],{"class":66},"# os 用来处理文件夹和文件路径\n",[49,47807,47808,47810],{"class":51,"line":219},[49,47809,30923],{"class":77},[49,47811,45836],{"class":73},[49,47813,47814],{"class":51,"line":233},[49,47815,47816],{"class":66},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[49,47818,47819,47821,47823,47825],{"class":51,"line":241},[49,47820,30923],{"class":77},[49,47822,31911],{"class":73},[49,47824,31914],{"class":77},[49,47826,31917],{"class":73},[49,47828,47829],{"class":51,"line":1920},[49,47830,399],{"emptyLinePlaceholder":398},[49,47832,47833],{"class":51,"line":2011},[49,47834,47835],{"class":66},"# 文件夹路径，包含所有图片文件\n",[49,47837,47838,47841,47843],{"class":51,"line":2017},[49,47839,47840],{"class":73},"folder_path ",[49,47842,78],{"class":77},[49,47844,47845],{"class":59}," 'data_cat_dog'\n",[49,47847,47848],{"class":51,"line":2029},[49,47849,399],{"emptyLinePlaceholder":398},[49,47851,47852],{"class":51,"line":2311},[49,47853,47854],{"class":66},"# 初始化累积变量\n",[49,47856,47857,47860,47862],{"class":51,"line":2316},[49,47858,47859],{"class":73},"total_pixels ",[49,47861,78],{"class":77},[49,47863,47864],{"class":159}," 0\n",[49,47866,47867,47870,47872,47875,47877,47879],{"class":51,"line":2322},[49,47868,47869],{"class":73},"sum_normalized_pixel_values ",[49,47871,78],{"class":77},[49,47873,47874],{"class":73}," np.zeros(",[49,47876,909],{"class":159},[49,47878,46339],{"class":73},[49,47880,47881],{"class":66},"# 如果是RGB图像，需要三个通道的均值和方差\n",[49,47883,47884],{"class":51,"line":2327},[49,47885,399],{"emptyLinePlaceholder":398},[49,47887,47888],{"class":51,"line":2341},[49,47889,47890],{"class":66},"# 遍历文件夹中的图片文件\n",[49,47892,47893,47895,47898,47900],{"class":51,"line":2346},[49,47894,3722],{"class":77},[49,47896,47897],{"class":73}," root, dirs, files ",[49,47899,26732],{"class":77},[49,47901,47902],{"class":73}," os.walk(folder_path):\n",[49,47904,47905,47907,47910,47912],{"class":51,"line":2352},[49,47906,3898],{"class":77},[49,47908,47909],{"class":73}," filename ",[49,47911,26732],{"class":77},[49,47913,47914],{"class":73}," files:\n",[49,47916,47917,47919,47922,47925,47927,47930,47932,47935,47937,47940,47943],{"class":51,"line":2373},[49,47918,3194],{"class":77},[49,47920,47921],{"class":73}," filename.endswith((",[49,47923,47924],{"class":59},"'.jpg'",[49,47926,13132],{"class":73},[49,47928,47929],{"class":59},"'.jpeg'",[49,47931,13132],{"class":73},[49,47933,47934],{"class":59},"'.png'",[49,47936,13132],{"class":73},[49,47938,47939],{"class":59},"'.bmp'",[49,47941,47942],{"class":73},")):  ",[49,47944,47945],{"class":66},"# 可根据实际情况添加其他格式\n",[49,47947,47948,47950,47952],{"class":51,"line":2378},[49,47949,46204],{"class":73},[49,47951,78],{"class":77},[49,47953,47954],{"class":73}," os.path.join(root, filename)\n",[49,47956,47957,47960,47962],{"class":51,"line":2392},[49,47958,47959],{"class":73},"            image ",[49,47961,78],{"class":77},[49,47963,47964],{"class":73}," Image.open(image_path)\n",[49,47966,47967,47970,47972],{"class":51,"line":2397},[49,47968,47969],{"class":73},"            image_array ",[49,47971,78],{"class":77},[49,47973,47974],{"class":73}," np.array(image)\n",[49,47976,47977],{"class":51,"line":2426},[49,47978,399],{"emptyLinePlaceholder":398},[49,47980,47981],{"class":51,"line":2431},[49,47982,47983],{"class":66},"            # 归一化像素值到0-1之间\n",[49,47985,47986,47989,47991,47994,47996],{"class":51,"line":2448},[49,47987,47988],{"class":73},"            normalized_image_array ",[49,47990,78],{"class":77},[49,47992,47993],{"class":73}," image_array ",[49,47995,1413],{"class":77},[49,47997,47998],{"class":159}," 255.0\n",[49,48000,48001],{"class":51,"line":2453},[49,48002,399],{"emptyLinePlaceholder":398},[49,48004,48005],{"class":51,"line":2458},[49,48006,48007],{"class":66},"            # print(image_path)\n",[49,48009,48010],{"class":51,"line":2463},[49,48011,48012],{"class":66},"            # print(normalized_image_array.shape)\n",[49,48014,48015],{"class":51,"line":2477},[49,48016,48017],{"class":66},"            # 累积归一化后的像素值和像素数量\n",[49,48019,48020,48023,48025],{"class":51,"line":2482},[49,48021,48022],{"class":73},"            total_pixels ",[49,48024,10174],{"class":77},[49,48026,48027],{"class":73}," normalized_image_array.size\n",[49,48029,48030],{"class":51,"line":3274},[49,48031,48032],{"class":66},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[49,48034,48035,48038,48040,48043,48046,48048,48050,48052,48054,48056],{"class":51,"line":3288},[49,48036,48037],{"class":73},"            sum_normalized_pixel_values ",[49,48039,10174],{"class":77},[49,48041,48042],{"class":73}," np.sum(normalized_image_array, ",[49,48044,48045],{"class":5913},"axis",[49,48047,78],{"class":77},[49,48049,841],{"class":73},[49,48051,1021],{"class":159},[49,48053,13132],{"class":73},[49,48055,1047],{"class":159},[49,48057,31028],{"class":73},[49,48059,48060],{"class":51,"line":3296},[49,48061,399],{"emptyLinePlaceholder":398},[49,48063,48064],{"class":51,"line":3301},[49,48065,48066],{"class":66},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[49,48068,48069,48072,48074,48077,48079],{"class":51,"line":3307},[49,48070,48071],{"class":73},"mean ",[49,48073,78],{"class":77},[49,48075,48076],{"class":73}," sum_normalized_pixel_values ",[49,48078,1413],{"class":77},[49,48080,48081],{"class":73}," total_pixels\n",[49,48083,48084],{"class":51,"line":3313},[49,48085,399],{"emptyLinePlaceholder":398},[49,48087,48088,48091,48093,48095,48097],{"class":51,"line":3318},[49,48089,48090],{"class":73},"sum_squared_diff ",[49,48092,78],{"class":77},[49,48094,47874],{"class":73},[49,48096,909],{"class":159},[49,48098,847],{"class":73},[49,48100,48101],{"class":51,"line":8645},[49,48102,399],{"emptyLinePlaceholder":398},[49,48104,48105],{"class":51,"line":8669},[49,48106,48107],{"class":66},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[49,48109,48110],{"class":51,"line":8674},[49,48111,48112],{"class":66},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[49,48114,48115],{"class":51,"line":8680},[49,48116,48117],{"class":66},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[49,48119,48120],{"class":51,"line":8707},[49,48121,48122],{"class":66},"# Image.open(image_path)：打开图片\n",[49,48124,48125],{"class":51,"line":8712},[49,48126,48127],{"class":66},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[49,48129,48130,48132,48134,48136],{"class":51,"line":8718},[49,48131,3722],{"class":77},[49,48133,47897],{"class":73},[49,48135,26732],{"class":77},[49,48137,47902],{"class":73},[49,48139,48140,48142,48144,48146],{"class":51,"line":8730},[49,48141,3898],{"class":77},[49,48143,47909],{"class":73},[49,48145,26732],{"class":77},[49,48147,47914],{"class":73},[49,48149,48150,48152,48154,48156,48158,48160,48162,48164,48166,48168],{"class":51,"line":8742},[49,48151,3194],{"class":77},[49,48153,47921],{"class":73},[49,48155,47924],{"class":59},[49,48157,13132],{"class":73},[49,48159,47929],{"class":59},[49,48161,13132],{"class":73},[49,48163,47934],{"class":59},[49,48165,13132],{"class":73},[49,48167,47939],{"class":59},[49,48169,48170],{"class":73},")):\n",[49,48172,48173,48175,48177],{"class":51,"line":8754},[49,48174,46204],{"class":73},[49,48176,78],{"class":77},[49,48178,47954],{"class":73},[49,48180,48181,48183,48185],{"class":51,"line":10413},[49,48182,47959],{"class":73},[49,48184,78],{"class":77},[49,48186,47964],{"class":73},[49,48188,48189,48191,48193],{"class":51,"line":10438},[49,48190,47969],{"class":73},[49,48192,78],{"class":77},[49,48194,47974],{"class":73},[49,48196,48197],{"class":51,"line":10461},[49,48198,47983],{"class":66},[49,48200,48201,48203,48205,48207,48209],{"class":51,"line":10485},[49,48202,47988],{"class":73},[49,48204,78],{"class":77},[49,48206,47993],{"class":73},[49,48208,1413],{"class":77},[49,48210,47998],{"class":159},[49,48212,48213],{"class":51,"line":10490},[49,48214,48012],{"class":66},[49,48216,48217],{"class":51,"line":10495},[49,48218,48219],{"class":66},"            # print(mean.shape)\n",[49,48221,48222],{"class":51,"line":10500},[49,48223,48007],{"class":66},[49,48225,48226],{"class":51,"line":10509},[49,48227,399],{"emptyLinePlaceholder":398},[49,48229,48230,48233],{"class":51,"line":10514},[49,48231,48232],{"class":77},"            try",[49,48234,4436],{"class":73},[49,48236,48237,48240,48242,48245,48247,48250,48252],{"class":51,"line":10520},[49,48238,48239],{"class":73},"                diff ",[49,48241,78],{"class":77},[49,48243,48244],{"class":73}," (normalized_image_array ",[49,48246,1361],{"class":77},[49,48248,48249],{"class":73}," mean) ",[49,48251,11358],{"class":77},[49,48253,48254],{"class":159}," 2\n",[49,48256,48257,48260,48262,48265,48267,48269,48271,48273,48275,48277],{"class":51,"line":10541},[49,48258,48259],{"class":73},"                sum_squared_diff ",[49,48261,10174],{"class":77},[49,48263,48264],{"class":73}," np.sum(diff, ",[49,48266,48045],{"class":5913},[49,48268,78],{"class":77},[49,48270,841],{"class":73},[49,48272,1021],{"class":159},[49,48274,13132],{"class":73},[49,48276,1047],{"class":159},[49,48278,31028],{"class":73},[49,48280,48281,48284],{"class":51,"line":10547},[49,48282,48283],{"class":77},"            except",[49,48285,4436],{"class":73},[49,48287,48288,48291,48293,48295,48298],{"class":51,"line":10561},[49,48289,48290],{"class":159},"                print",[49,48292,841],{"class":73},[49,48294,891],{"class":77},[49,48296,48297],{"class":59},"\"捕获到自定义异常\"",[49,48299,847],{"class":73},[49,48301,48302],{"class":51,"line":10567},[49,48303,48304],{"class":66},"            # diff = (normalized_image_array - mean) ** 2\n",[49,48306,48307],{"class":51,"line":10594},[49,48308,48309],{"class":66},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[49,48311,48312],{"class":51,"line":10603},[49,48313,399],{"emptyLinePlaceholder":398},[49,48315,48316,48319,48321,48324,48326],{"class":51,"line":10609},[49,48317,48318],{"class":73},"variance ",[49,48320,78],{"class":77},[49,48322,48323],{"class":73}," sum_squared_diff ",[49,48325,1413],{"class":77},[49,48327,48081],{"class":73},[49,48329,48330],{"class":51,"line":10617},[49,48331,399],{"emptyLinePlaceholder":398},[49,48333,48334,48336,48338,48341],{"class":51,"line":10622},[49,48335,30946],{"class":159},[49,48337,841],{"class":73},[49,48339,48340],{"class":59},"\"Mean:\"",[49,48342,48343],{"class":73},", mean)\n",[49,48345,48346,48348,48350,48353],{"class":51,"line":17301},[49,48347,30946],{"class":159},[49,48349,841],{"class":73},[49,48351,48352],{"class":59},"\"Variance:\"",[49,48354,48355],{"class":73},", variance)\n",[40,48357,48359],{"className":30909,"code":48358,"language":30911,"meta":27,"style":27},"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",[46,48360,48361,48367,48373,48383,48389,48399,48413,48423,48433,48443,48447,48457,48467,48471,48475,48483,48488,48493,48512,48516,48521,48526,48531,48536,48577,48582,48592,48597,48610,48615,48620,48625,48630,48635,48639,48644,48649,48671,48675,48707,48721,48731,48741,48745,48755,48769,48779,48789,48799,48805,48809,48813,48817,48821,48825,48833,48853,48857,48861,48865,48869,48885,48889,48893,48901,48905,48909,48917,48921,48925,48929,48937,48941,48945,48949,48957,48961,48969,48973,48981,48985,48993,48997,49005,49009,49013,49021,49025,49029,49041,49065,49079,49083,49087,49091,49099,49103,49111,49115,49123,49127,49135,49139,49147,49151,49159,49163,49175,49179,49187,49191,49199,49203,49207,49211,49215,49223,49227,49243,49247,49255,49259,49263,49267,49271,49275,49279,49283,49299,49303,49315,49319,49331,49335,49347,49351,49359,49363,49371,49375,49379,49383,49389,49393,49401,49405,49421,49425,49433,49437,49453,49465,49469,49481,49485,49489,49497,49501,49505,49513,49517,49525,49529,49537,49541,49545,49587,49629,49633,49637,49653,49657,49673,49677,49681,49689,49693,49697,49709,49747,49751,49755,49763,49767,49781,49791,49797,49803,49809,49815,49819,49823,49829,49833,49837,49845,49849,49867,49871,49875,49879,49895,49899,49903,49907,49911,49915,49935,49955,49959,49963,49967,49975,49983,49987,50003,50023,50043,50047,50052,50061,50070,50075,50080,50085,50098,50103,50112,50121,50138],{"__ignoreMap":27},[49,48362,48363,48365],{"class":51,"line":52},[49,48364,30923],{"class":77},[49,48366,32353],{"class":73},[49,48368,48369,48371],{"class":51,"line":63},[49,48370,30923],{"class":77},[49,48372,32360],{"class":73},[49,48374,48375,48377,48379,48381],{"class":51,"line":70},[49,48376,30923],{"class":77},[49,48378,32371],{"class":73},[49,48380,31914],{"class":77},[49,48382,32376],{"class":73},[49,48384,48385,48387],{"class":51,"line":219},[49,48386,30923],{"class":77},[49,48388,30926],{"class":73},[49,48390,48391,48393,48395,48397],{"class":51,"line":233},[49,48392,31268],{"class":77},[49,48394,31946],{"class":73},[49,48396,30923],{"class":77},[49,48398,32393],{"class":73},[49,48400,48401,48403,48405,48407,48410],{"class":51,"line":241},[49,48402,31268],{"class":77},[49,48404,31899],{"class":73},[49,48406,30923],{"class":77},[49,48408,48409],{"class":73}," ImageFolder ",[49,48411,48412],{"class":66},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[49,48414,48415,48417,48419,48421],{"class":51,"line":1920},[49,48416,31268],{"class":77},[49,48418,31929],{"class":73},[49,48420,30923],{"class":77},[49,48422,31934],{"class":73},[49,48424,48425,48427,48429,48431],{"class":51,"line":2011},[49,48426,30923],{"class":77},[49,48428,31946],{"class":73},[49,48430,31914],{"class":77},[49,48432,31951],{"class":73},[49,48434,48435,48437,48439,48441],{"class":51,"line":2017},[49,48436,30923],{"class":77},[49,48438,31963],{"class":73},[49,48440,31914],{"class":77},[49,48442,31968],{"class":73},[49,48444,48445],{"class":51,"line":2029},[49,48446,32438],{"class":66},[49,48448,48449,48451,48453,48455],{"class":51,"line":2311},[49,48450,31268],{"class":77},[49,48452,32445],{"class":73},[49,48454,30923],{"class":77},[49,48456,43562],{"class":73},[49,48458,48459,48461,48463,48465],{"class":51,"line":2316},[49,48460,31268],{"class":77},[49,48462,31271],{"class":73},[49,48464,30923],{"class":77},[49,48466,31276],{"class":73},[49,48468,48469],{"class":51,"line":2322},[49,48470,399],{"emptyLinePlaceholder":398},[49,48472,48473],{"class":51,"line":2327},[49,48474,32473],{"class":66},[49,48476,48477,48479,48481],{"class":51,"line":2341},[49,48478,32478],{"class":77},[49,48480,32481],{"class":55},[49,48482,32484],{"class":73},[49,48484,48485],{"class":51,"line":2346},[49,48486,48487],{"class":66},"    # 导入自己的数据集，并进行数据处理\n",[49,48489,48490],{"class":51,"line":2352},[49,48491,48492],{"class":66},"    # 定义数据集的路径\n",[49,48494,48495,48498,48500,48502,48504,48506,48510],{"class":51,"line":2373},[49,48496,48497],{"class":159},"    ROOT_PATH",[49,48499,78],{"class":77},[49,48501,1499],{"class":77},[49,48503,1080],{"class":59},[49,48505,1387],{"class":159},[49,48507,48509],{"class":48508},"sA_wV","\u002Fdata\u002Ftrain",[49,48511,25822],{"class":59},[49,48513,48514],{"class":51,"line":2378},[49,48515,399],{"emptyLinePlaceholder":398},[49,48517,48518],{"class":51,"line":2392},[49,48519,48520],{"class":66},"    # 定义归一化方法\n",[49,48522,48523],{"class":51,"line":2397},[49,48524,48525],{"class":66},"    # 这里需要先计算一下数据集的均值和方差\n",[49,48527,48528],{"class":51,"line":2426},[49,48529,48530],{"class":66},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[49,48532,48533],{"class":51,"line":2431},[49,48534,48535],{"class":66},"    # 第一个参数是均值，第二个参数是方差\n",[49,48537,48538,48541,48543,48546,48549,48551,48554,48556,48559,48562,48565,48567,48570,48572,48575],{"class":51,"line":2448},[49,48539,48540],{"class":73},"    normalize",[49,48542,78],{"class":77},[49,48544,48545],{"class":73},"transforms.Normalize([",[49,48547,48548],{"class":159},"0.162",[49,48550,1207],{"class":73},[49,48552,48553],{"class":159},"0.151",[49,48555,1207],{"class":73},[49,48557,48558],{"class":159},"0.138",[49,48560,48561],{"class":73},"],[",[49,48563,48564],{"class":159},"0.058",[49,48566,1207],{"class":73},[49,48568,48569],{"class":159},"0.052",[49,48571,1207],{"class":73},[49,48573,48574],{"class":159},"0.048",[49,48576,5354],{"class":73},[49,48578,48579],{"class":51,"line":2453},[49,48580,48581],{"class":66},"    # 定义数据集处理方法变量\n",[49,48583,48584,48587,48589],{"class":51,"line":2458},[49,48585,48586],{"class":73},"    train_transform",[49,48588,78],{"class":77},[49,48590,48591],{"class":73},"transforms.Compose([\n",[49,48593,48594],{"class":51,"line":2463},[49,48595,48596],{"class":66},"        # 调整图像大小为224*224\n",[49,48598,48599,48602,48604,48606,48608],{"class":51,"line":2477},[49,48600,48601],{"class":73},"        transforms.Resize((",[49,48603,32032],{"class":159},[49,48605,1207],{"class":73},[49,48607,32032],{"class":159},[49,48609,43153],{"class":73},[49,48611,48612],{"class":51,"line":2482},[49,48613,48614],{"class":66},"        # 将图像转换为张量\n",[49,48616,48617],{"class":51,"line":3274},[49,48618,48619],{"class":73},"        transforms.ToTensor(),\n",[49,48621,48622],{"class":51,"line":3288},[49,48623,48624],{"class":73},"        normalize])\n",[49,48626,48627],{"class":51,"line":3296},[49,48628,48629],{"class":66},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[49,48631,48632],{"class":51,"line":3301},[49,48633,48634],{"class":66},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[49,48636,48637],{"class":51,"line":3307},[49,48638,399],{"emptyLinePlaceholder":398},[49,48640,48641],{"class":51,"line":3313},[49,48642,48643],{"class":66},"    # 加载数据集\n",[49,48645,48646],{"class":51,"line":3318},[49,48647,48648],{"class":66},"    # 传入数据集路径与处理方法\n",[49,48650,48651,48653,48655,48658,48661,48663,48666,48668],{"class":51,"line":8645},[49,48652,32489],{"class":73},[49,48654,78],{"class":77},[49,48656,48657],{"class":73},"ImageFolder(",[49,48659,48660],{"class":159},"ROOT_PATH",[49,48662,1207],{"class":73},[49,48664,48665],{"class":5913},"transform",[49,48667,78],{"class":77},[49,48669,48670],{"class":73},"train_transform)\n",[49,48672,48673],{"class":51,"line":8669},[49,48674,399],{"emptyLinePlaceholder":398},[49,48676,48677,48679,48681,48683,48685,48687,48689,48691,48693,48695,48697,48699,48701,48703,48705],{"class":51,"line":8674},[49,48678,32541],{"class":73},[49,48680,78],{"class":77},[49,48682,32546],{"class":73},[49,48684,32549],{"class":159},[49,48686,841],{"class":73},[49,48688,32554],{"class":159},[49,48690,1284],{"class":77},[49,48692,8055],{"class":159},[49,48694,32561],{"class":73},[49,48696,32549],{"class":159},[49,48698,841],{"class":73},[49,48700,32568],{"class":159},[49,48702,1284],{"class":77},[49,48704,8055],{"class":159},[49,48706,32575],{"class":73},[49,48708,48709,48711,48713,48715,48717,48719],{"class":51,"line":8680},[49,48710,32580],{"class":73},[49,48712,78],{"class":77},[49,48714,32585],{"class":73},[49,48716,32068],{"class":5913},[49,48718,78],{"class":77},[49,48720,32073],{"class":73},[49,48722,48723,48725,48727,48729],{"class":51,"line":8707},[49,48724,32596],{"class":5913},[49,48726,78],{"class":77},[49,48728,1027],{"class":159},[49,48730,31997],{"class":73},[49,48732,48733,48735,48737,48739],{"class":51,"line":8712},[49,48734,32608],{"class":5913},[49,48736,78],{"class":77},[49,48738,32007],{"class":159},[49,48740,31997],{"class":73},[49,48742,48743],{"class":51,"line":8718},[49,48744,32619],{"class":66},[49,48746,48747,48749,48751,48753],{"class":51,"line":8730},[49,48748,32624],{"class":5913},[49,48750,78],{"class":77},[49,48752,1224],{"class":159},[49,48754,847],{"class":73},[49,48756,48757,48759,48761,48763,48765,48767],{"class":51,"line":8742},[49,48758,32635],{"class":73},[49,48760,78],{"class":77},[49,48762,32065],{"class":73},[49,48764,32068],{"class":5913},[49,48766,78],{"class":77},[49,48768,32646],{"class":73},[49,48770,48771,48773,48775,48777],{"class":51,"line":8754},[49,48772,32651],{"class":5913},[49,48774,78],{"class":77},[49,48776,1027],{"class":159},[49,48778,31997],{"class":73},[49,48780,48781,48783,48785,48787],{"class":51,"line":10413},[49,48782,32662],{"class":5913},[49,48784,78],{"class":77},[49,48786,32007],{"class":159},[49,48788,31997],{"class":73},[49,48790,48791,48793,48795,48797],{"class":51,"line":10438},[49,48792,32673],{"class":5913},[49,48794,78],{"class":77},[49,48796,1224],{"class":159},[49,48798,847],{"class":73},[49,48800,48801,48803],{"class":51,"line":10461},[49,48802,4787],{"class":77},[49,48804,32686],{"class":73},[49,48806,48807],{"class":51,"line":10485},[49,48808,399],{"emptyLinePlaceholder":398},[49,48810,48811],{"class":51,"line":10490},[49,48812,32695],{"class":66},[49,48814,48815],{"class":51,"line":10495},[49,48816,32700],{"class":66},[49,48818,48819],{"class":51,"line":10500},[49,48820,399],{"emptyLinePlaceholder":398},[49,48822,48823],{"class":51,"line":10509},[49,48824,32709],{"class":66},[49,48826,48827,48829,48831],{"class":51,"line":10514},[49,48828,32478],{"class":77},[49,48830,32716],{"class":55},[49,48832,32719],{"class":73},[49,48834,48835,48837,48839,48841,48843,48845,48847,48849,48851],{"class":51,"line":10520},[49,48836,31768],{"class":73},[49,48838,78],{"class":77},[49,48840,30982],{"class":73},[49,48842,31775],{"class":59},[49,48844,2403],{"class":77},[49,48846,31780],{"class":73},[49,48848,2400],{"class":77},[49,48850,32738],{"class":59},[49,48852,847],{"class":73},[49,48854,48855],{"class":51,"line":10541},[49,48856,399],{"emptyLinePlaceholder":398},[49,48858,48859],{"class":51,"line":10547},[49,48860,32753],{"class":66},[49,48862,48863],{"class":51,"line":10561},[49,48864,32758],{"class":66},[49,48866,48867],{"class":51,"line":10567},[49,48868,32763],{"class":66},[49,48870,48871,48873,48875,48877,48879,48881,48883],{"class":51,"line":10594},[49,48872,32768],{"class":73},[49,48874,78],{"class":77},[49,48876,32773],{"class":73},[49,48878,32776],{"class":5913},[49,48880,78],{"class":77},[49,48882,32781],{"class":159},[49,48884,847],{"class":73},[49,48886,48887],{"class":51,"line":10603},[49,48888,399],{"emptyLinePlaceholder":398},[49,48890,48891],{"class":51,"line":10609},[49,48892,32792],{"class":66},[49,48894,48895,48897,48899],{"class":51,"line":10617},[49,48896,32797],{"class":73},[49,48898,78],{"class":77},[49,48900,32802],{"class":73},[49,48902,48903],{"class":51,"line":10622},[49,48904,399],{"emptyLinePlaceholder":398},[49,48906,48907],{"class":51,"line":17301},[49,48908,32811],{"class":66},[49,48910,48911,48913,48915],{"class":51,"line":17307},[49,48912,31820],{"class":73},[49,48914,78],{"class":77},[49,48916,32820],{"class":73},[49,48918,48919],{"class":51,"line":17330},[49,48920,32825],{"class":66},[49,48922,48923],{"class":51,"line":17336},[49,48924,32830],{"class":66},[49,48926,48927],{"class":51,"line":17359},[49,48928,32835],{"class":66},[49,48930,48931,48933,48935],{"class":51,"line":17373},[49,48932,32840],{"class":73},[49,48934,78],{"class":77},[49,48936,32845],{"class":73},[49,48938,48939],{"class":51,"line":17393},[49,48940,399],{"emptyLinePlaceholder":398},[49,48942,48943],{"class":51,"line":17399},[49,48944,32858],{"class":66},[49,48946,48947],{"class":51,"line":17410},[49,48948,32863],{"class":66},[49,48950,48951,48953,48955],{"class":51,"line":17433},[49,48952,32868],{"class":73},[49,48954,78],{"class":77},[49,48956,32873],{"class":159},[49,48958,48959],{"class":51,"line":17455},[49,48960,32878],{"class":66},[49,48962,48963,48965,48967],{"class":51,"line":17460},[49,48964,32883],{"class":73},[49,48966,78],{"class":77},[49,48968,32888],{"class":73},[49,48970,48971],{"class":51,"line":17466},[49,48972,32893],{"class":66},[49,48974,48975,48977,48979],{"class":51,"line":17480},[49,48976,32898],{"class":73},[49,48978,78],{"class":77},[49,48980,32888],{"class":73},[49,48982,48983],{"class":51,"line":17493},[49,48984,32907],{"class":66},[49,48986,48987,48989,48991],{"class":51,"line":17498},[49,48988,32912],{"class":73},[49,48990,78],{"class":77},[49,48992,32888],{"class":73},[49,48994,48995],{"class":51,"line":17512},[49,48996,32921],{"class":66},[49,48998,48999,49001,49003],{"class":51,"line":17517},[49,49000,32926],{"class":73},[49,49002,78],{"class":77},[49,49004,32888],{"class":73},[49,49006,49007],{"class":51,"line":17523},[49,49008,399],{"emptyLinePlaceholder":398},[49,49010,49011],{"class":51,"line":17528},[49,49012,32939],{"class":66},[49,49014,49015,49017,49019],{"class":51,"line":17542},[49,49016,32944],{"class":73},[49,49018,78],{"class":77},[49,49020,32949],{"class":73},[49,49022,49023],{"class":51,"line":17547},[49,49024,399],{"emptyLinePlaceholder":398},[49,49026,49027],{"class":51,"line":17552},[49,49028,32962],{"class":66},[49,49030,49031,49033,49035,49037,49039],{"class":51,"line":17566},[49,49032,3898],{"class":77},[49,49034,32969],{"class":73},[49,49036,26732],{"class":77},[49,49038,32974],{"class":159},[49,49040,32977],{"class":73},[49,49042,49043,49045,49047,49049,49051,49053,49055,49057,49059,49061,49063],{"class":51,"line":17578},[49,49044,32982],{"class":159},[49,49046,841],{"class":73},[49,49048,32987],{"class":59},[49,49050,32990],{"class":159},[49,49052,1413],{"class":59},[49,49054,32990],{"class":159},[49,49056,1080],{"class":59},[49,49058,32999],{"class":73},[49,49060,1361],{"class":77},[49,49062,1047],{"class":159},[49,49064,31028],{"class":73},[49,49066,49067,49069,49071,49073,49075,49077],{"class":51,"line":17583},[49,49068,32982],{"class":159},[49,49070,841],{"class":73},[49,49072,33014],{"class":59},[49,49074,1284],{"class":77},[49,49076,1275],{"class":159},[49,49078,847],{"class":73},[49,49080,49081],{"class":51,"line":17596},[49,49082,399],{"emptyLinePlaceholder":398},[49,49084,49085],{"class":51,"line":17601},[49,49086,33029],{"class":66},[49,49088,49089],{"class":51,"line":17606},[49,49090,33034],{"class":66},[49,49092,49093,49095,49097],{"class":51,"line":17611},[49,49094,33039],{"class":73},[49,49096,78],{"class":77},[49,49098,32873],{"class":159},[49,49100,49101],{"class":51,"line":17624},[49,49102,33048],{"class":66},[49,49104,49105,49107,49109],{"class":51,"line":17629},[49,49106,33053],{"class":73},[49,49108,78],{"class":77},[49,49110,3782],{"class":159},[49,49112,49113],{"class":51,"line":33164},[49,49114,33062],{"class":66},[49,49116,49117,49119,49121],{"class":51,"line":33170},[49,49118,33067],{"class":73},[49,49120,78],{"class":77},[49,49122,32873],{"class":159},[49,49124,49125],{"class":51,"line":33176},[49,49126,33076],{"class":66},[49,49128,49129,49131,49133],{"class":51,"line":33182},[49,49130,33081],{"class":73},[49,49132,78],{"class":77},[49,49134,3782],{"class":159},[49,49136,49137],{"class":51,"line":33188},[49,49138,33090],{"class":66},[49,49140,49141,49143,49145],{"class":51,"line":33199},[49,49142,33095],{"class":73},[49,49144,78],{"class":77},[49,49146,3782],{"class":159},[49,49148,49149],{"class":51,"line":33205},[49,49150,33104],{"class":66},[49,49152,49153,49155,49157],{"class":51,"line":33225},[49,49154,33109],{"class":73},[49,49156,78],{"class":77},[49,49158,3782],{"class":159},[49,49160,49161],{"class":51,"line":33231},[49,49162,33118],{"class":66},[49,49164,49165,49167,49169,49171,49173],{"class":51,"line":33242},[49,49166,4100],{"class":77},[49,49168,32132],{"class":73},[49,49170,26732],{"class":77},[49,49172,32137],{"class":159},[49,49174,33131],{"class":73},[49,49176,49177],{"class":51,"line":33248},[49,49178,33136],{"class":66},[49,49180,49181,49183,49185],{"class":51,"line":33254},[49,49182,33141],{"class":73},[49,49184,78],{"class":77},[49,49186,33146],{"class":73},[49,49188,49189],{"class":51,"line":33260},[49,49190,33151],{"class":66},[49,49192,49193,49195,49197],{"class":51,"line":33266},[49,49194,33156],{"class":73},[49,49196,78],{"class":77},[49,49198,33161],{"class":73},[49,49200,49201],{"class":51,"line":33272},[49,49202,33167],{"class":66},[49,49204,49205],{"class":51,"line":33278},[49,49206,33173],{"class":73},[49,49208,49209],{"class":51,"line":33284},[49,49210,33179],{"class":66},[49,49212,49213],{"class":51,"line":33304},[49,49214,33185],{"class":66},[49,49216,49217,49219,49221],{"class":51,"line":33310},[49,49218,33191],{"class":73},[49,49220,78],{"class":77},[49,49222,33196],{"class":73},[49,49224,49225],{"class":51,"line":33326},[49,49226,33202],{"class":66},[49,49228,49229,49231,49233,49235,49237,49239,49241],{"class":51,"line":33332},[49,49230,33208],{"class":73},[49,49232,78],{"class":77},[49,49234,33213],{"class":73},[49,49236,33216],{"class":5913},[49,49238,78],{"class":77},[49,49240,1047],{"class":159},[49,49242,847],{"class":73},[49,49244,49245],{"class":51,"line":33346},[49,49246,33228],{"class":66},[49,49248,49249,49251,49253],{"class":51,"line":33352},[49,49250,33234],{"class":73},[49,49252,78],{"class":77},[49,49254,33239],{"class":73},[49,49256,49257],{"class":51,"line":33367},[49,49258,33245],{"class":66},[49,49260,49261],{"class":51,"line":33373},[49,49262,33251],{"class":73},[49,49264,49265],{"class":51,"line":33382},[49,49266,33257],{"class":66},[49,49268,49269],{"class":51,"line":33388},[49,49270,33263],{"class":73},[49,49272,49273],{"class":51,"line":33397},[49,49274,33269],{"class":66},[49,49276,49277],{"class":51,"line":33403},[49,49278,33275],{"class":73},[49,49280,49281],{"class":51,"line":33409},[49,49282,33281],{"class":66},[49,49284,49285,49287,49289,49291,49293,49295,49297],{"class":51,"line":33418},[49,49286,33287],{"class":73},[49,49288,10174],{"class":77},[49,49290,33292],{"class":73},[49,49292,1284],{"class":77},[49,49294,33297],{"class":73},[49,49296,1021],{"class":159},[49,49298,847],{"class":73},[49,49300,49301],{"class":51,"line":33424},[49,49302,33307],{"class":66},[49,49304,49305,49307,49309,49311,49313],{"class":51,"line":33435},[49,49306,33313],{"class":73},[49,49308,10174],{"class":77},[49,49310,33318],{"class":73},[49,49312,3646],{"class":77},[49,49314,33323],{"class":73},[49,49316,49317],{"class":51,"line":33441},[49,49318,33329],{"class":66},[49,49320,49321,49323,49325,49327,49329],{"class":51,"line":33460},[49,49322,33335],{"class":73},[49,49324,10174],{"class":77},[49,49326,33297],{"class":73},[49,49328,1021],{"class":159},[49,49330,847],{"class":73},[49,49332,49333],{"class":51,"line":33466},[49,49334,33349],{"class":66},[49,49336,49337,49339,49341,49343,49345],{"class":51,"line":33477},[49,49338,4100],{"class":77},[49,49340,33357],{"class":73},[49,49342,26732],{"class":77},[49,49344,32137],{"class":159},[49,49346,33364],{"class":73},[49,49348,49349],{"class":51,"line":33483},[49,49350,33370],{"class":66},[49,49352,49353,49355,49357],{"class":51,"line":33503},[49,49354,33141],{"class":73},[49,49356,78],{"class":77},[49,49358,33146],{"class":73},[49,49360,49361],{"class":51,"line":33519},[49,49362,33385],{"class":66},[49,49364,49365,49367,49369],{"class":51,"line":33525},[49,49366,33156],{"class":73},[49,49368,78],{"class":77},[49,49370,33161],{"class":73},[49,49372,49373],{"class":51,"line":33539},[49,49374,33400],{"class":66},[49,49376,49377],{"class":51,"line":33545},[49,49378,33406],{"class":73},[49,49380,49381],{"class":51,"line":33551},[49,49382,36887],{"class":66},[49,49384,49385,49387],{"class":51,"line":33562},[49,49386,33412],{"class":77},[49,49388,33415],{"class":73},[49,49390,49391],{"class":51,"line":33568},[49,49392,33421],{"class":66},[49,49394,49395,49397,49399],{"class":51,"line":33574},[49,49396,36902],{"class":73},[49,49398,78],{"class":77},[49,49400,33196],{"class":73},[49,49402,49403],{"class":51,"line":33584},[49,49404,33438],{"class":66},[49,49406,49407,49409,49411,49413,49415,49417,49419],{"class":51,"line":33590},[49,49408,36915],{"class":73},[49,49410,78],{"class":77},[49,49412,33213],{"class":73},[49,49414,33216],{"class":5913},[49,49416,78],{"class":77},[49,49418,1047],{"class":159},[49,49420,847],{"class":73},[49,49422,49423],{"class":51,"line":33601},[49,49424,33463],{"class":66},[49,49426,49427,49429,49431],{"class":51,"line":33607},[49,49428,36936],{"class":73},[49,49430,78],{"class":77},[49,49432,33239],{"class":73},[49,49434,49435],{"class":51,"line":33617},[49,49436,33480],{"class":66},[49,49438,49439,49441,49443,49445,49447,49449,49451],{"class":51,"line":33622},[49,49440,36949],{"class":73},[49,49442,10174],{"class":77},[49,49444,36954],{"class":73},[49,49446,1284],{"class":77},[49,49448,33297],{"class":73},[49,49450,1021],{"class":159},[49,49452,847],{"class":73},[49,49454,49455,49457,49459,49461,49463],{"class":51,"line":33628},[49,49456,36967],{"class":73},[49,49458,10174],{"class":77},[49,49460,33318],{"class":73},[49,49462,3646],{"class":77},[49,49464,33323],{"class":73},[49,49466,49467],{"class":51,"line":33677},[49,49468,36980],{"class":66},[49,49470,49471,49473,49475,49477,49479],{"class":51,"line":33724},[49,49472,36985],{"class":73},[49,49474,10174],{"class":77},[49,49476,33297],{"class":73},[49,49478,1021],{"class":159},[49,49480,847],{"class":73},[49,49482,49483],{"class":51,"line":33729},[49,49484,33542],{"class":66},[49,49486,49487],{"class":51,"line":33735},[49,49488,33548],{"class":66},[49,49490,49491,49493,49495],{"class":51,"line":33754},[49,49492,33554],{"class":73},[49,49494,1413],{"class":77},[49,49496,33559],{"class":73},[49,49498,49499],{"class":51,"line":33760},[49,49500,33565],{"class":66},[49,49502,49503],{"class":51,"line":33780},[49,49504,33571],{"class":66},[49,49506,49507,49509,49511],{"class":51,"line":33786},[49,49508,33577],{"class":73},[49,49510,1413],{"class":77},[49,49512,33559],{"class":73},[49,49514,49515],{"class":51,"line":33792},[49,49516,33587],{"class":66},[49,49518,49519,49521,49523],{"class":51,"line":33802},[49,49520,33593],{"class":73},[49,49522,1413],{"class":77},[49,49524,33598],{"class":73},[49,49526,49527],{"class":51,"line":33807},[49,49528,33604],{"class":66},[49,49530,49531,49533,49535],{"class":51,"line":33813},[49,49532,33610],{"class":73},[49,49534,1413],{"class":77},[49,49536,33598],{"class":73},[49,49538,49539],{"class":51,"line":33829},[49,49540,399],{"emptyLinePlaceholder":398},[49,49542,49543],{"class":51,"line":33874},[49,49544,33625],{"class":66},[49,49546,49547,49549,49551,49553,49555,49557,49559,49561,49563,49565,49567,49569,49571,49573,49575,49577,49579,49581,49583,49585],{"class":51,"line":33880},[49,49548,32982],{"class":159},[49,49550,841],{"class":73},[49,49552,4289],{"class":59},[49,49554,32990],{"class":159},[49,49556,33639],{"class":59},[49,49558,1725],{"class":159},[49,49560,33644],{"class":77},[49,49562,1775],{"class":159},[49,49564,33649],{"class":59},[49,49566,1725],{"class":159},[49,49568,33644],{"class":77},[49,49570,1775],{"class":159},[49,49572,4289],{"class":59},[49,49574,33660],{"class":73},[49,49576,1361],{"class":77},[49,49578,1047],{"class":159},[49,49580,33667],{"class":73},[49,49582,1361],{"class":77},[49,49584,1047],{"class":159},[49,49586,33674],{"class":73},[49,49588,49589,49591,49593,49595,49597,49599,49601,49603,49605,49607,49609,49611,49613,49615,49617,49619,49621,49623,49625,49627],{"class":51,"line":33886},[49,49590,32982],{"class":159},[49,49592,841],{"class":73},[49,49594,4289],{"class":59},[49,49596,32990],{"class":159},[49,49598,33688],{"class":59},[49,49600,1725],{"class":159},[49,49602,33644],{"class":77},[49,49604,1775],{"class":159},[49,49606,33697],{"class":59},[49,49608,1725],{"class":159},[49,49610,33644],{"class":77},[49,49612,1775],{"class":159},[49,49614,4289],{"class":59},[49,49616,33708],{"class":73},[49,49618,1361],{"class":77},[49,49620,1047],{"class":159},[49,49622,33715],{"class":73},[49,49624,1361],{"class":77},[49,49626,1047],{"class":159},[49,49628,33674],{"class":73},[49,49630,49631],{"class":51,"line":33892},[49,49632,399],{"emptyLinePlaceholder":398},[49,49634,49635],{"class":51,"line":33903},[49,49636,33732],{"class":66},[49,49638,49639,49641,49643,49645,49647,49649,49651],{"class":51,"line":33909},[49,49640,3194],{"class":77},[49,49642,33740],{"class":73},[49,49644,1361],{"class":77},[49,49646,1047],{"class":159},[49,49648,1769],{"class":73},[49,49650,1789],{"class":77},[49,49652,33751],{"class":73},[49,49654,49655],{"class":51,"line":33915},[49,49656,33757],{"class":66},[49,49658,49659,49661,49663,49665,49667,49669,49671],{"class":51,"line":33921},[49,49660,33763],{"class":73},[49,49662,880],{"class":159},[49,49664,78],{"class":77},[49,49666,33770],{"class":73},[49,49668,1361],{"class":77},[49,49670,1047],{"class":159},[49,49672,33777],{"class":73},[49,49674,49675],{"class":51,"line":33939},[49,49676,33783],{"class":66},[49,49678,49679],{"class":51,"line":33953},[49,49680,33789],{"class":66},[49,49682,49683,49685,49687],{"class":51,"line":33962},[49,49684,33795],{"class":73},[49,49686,78],{"class":77},[49,49688,32845],{"class":73},[49,49690,49691],{"class":51,"line":33971},[49,49692,399],{"emptyLinePlaceholder":398},[49,49694,49695],{"class":51,"line":33980},[49,49696,33810],{"class":66},[49,49698,49699,49701,49703,49705,49707],{"class":51,"line":33989},[49,49700,33816],{"class":73},[49,49702,78],{"class":77},[49,49704,33821],{"class":73},[49,49706,1361],{"class":77},[49,49708,33826],{"class":73},[49,49710,49711,49713,49715,49717,49719,49721,49723,49725,49727,49729,49731,49733,49735,49737,49739,49741,49743,49745],{"class":51,"line":33995},[49,49712,32982],{"class":159},[49,49714,841],{"class":73},[49,49716,33836],{"class":59},[49,49718,1725],{"class":159},[49,49720,33841],{"class":77},[49,49722,1775],{"class":159},[49,49724,1373],{"class":59},[49,49726,1725],{"class":159},[49,49728,33841],{"class":77},[49,49730,1775],{"class":159},[49,49732,33854],{"class":59},[49,49734,33857],{"class":73},[49,49736,33860],{"class":77},[49,49738,1736],{"class":159},[49,49740,33865],{"class":73},[49,49742,1157],{"class":77},[49,49744,1736],{"class":159},[49,49746,31028],{"class":73},[49,49748,49749],{"class":51,"line":34001},[49,49750,37264],{"class":66},[49,49752,49753],{"class":51,"line":34009},[49,49754,37269],{"class":66},[49,49756,49757,49759,49761],{"class":51,"line":34014},[49,49758,37274],{"class":73},[49,49760,33898],{"class":59},[49,49762,847],{"class":73},[49,49764,49765],{"class":51,"line":34020},[49,49766,33918],{"class":66},[49,49768,49769,49771,49773,49775,49777,49779],{"class":51,"line":34031},[49,49770,33924],{"class":73},[49,49772,78],{"class":77},[49,49774,33929],{"class":73},[49,49776,33932],{"class":5913},[49,49778,78],{"class":77},[49,49780,2245],{"class":73},[49,49782,49783,49785,49787,49789],{"class":51,"line":34037},[49,49784,33942],{"class":59},[49,49786,1688],{"class":73},[49,49788,33947],{"class":159},[49,49790,33950],{"class":73},[49,49792,49793,49795],{"class":51,"line":34057},[49,49794,33956],{"class":59},[49,49796,33959],{"class":73},[49,49798,49799,49801],{"class":51,"line":34063},[49,49800,33965],{"class":59},[49,49802,33968],{"class":73},[49,49804,49805,49807],{"class":51,"line":34069},[49,49806,33974],{"class":59},[49,49808,33977],{"class":73},[49,49810,49811,49813],{"class":51,"line":34075},[49,49812,33983],{"class":59},[49,49814,33986],{"class":73},[49,49816,49817],{"class":51,"line":34092},[49,49818,33992],{"class":73},[49,49820,49821],{"class":51,"line":34098},[49,49822,33998],{"class":66},[49,49824,49825,49827],{"class":51,"line":34104},[49,49826,4787],{"class":77},[49,49828,34006],{"class":73},[49,49830,49831],{"class":51,"line":34110},[49,49832,399],{"emptyLinePlaceholder":398},[49,49834,49835],{"class":51,"line":34116},[49,49836,34017],{"class":66},[49,49838,49839,49841,49843],{"class":51,"line":34122},[49,49840,32478],{"class":77},[49,49842,34025],{"class":55},[49,49844,34028],{"class":73},[49,49846,49847],{"class":51,"line":34149},[49,49848,34034],{"class":66},[49,49850,49851,49853,49855,49857,49859,49861,49863,49865],{"class":51,"line":34173},[49,49852,34040],{"class":73},[49,49854,32224],{"class":5913},[49,49856,78],{"class":77},[49,49858,841],{"class":73},[49,49860,1327],{"class":159},[49,49862,1207],{"class":73},[49,49864,1122],{"class":159},[49,49866,31028],{"class":73},[49,49868,49869],{"class":51,"line":34179},[49,49870,34060],{"class":66},[49,49872,49873],{"class":51,"line":34185},[49,49874,34066],{"class":66},[49,49876,49877],{"class":51,"line":34191},[49,49878,34072],{"class":66},[49,49880,49881,49883,49885,49887,49889,49891,49893],{"class":51,"line":34202},[49,49882,32258],{"class":73},[49,49884,1047],{"class":159},[49,49886,1207],{"class":73},[49,49888,915],{"class":159},[49,49890,1207],{"class":73},[49,49892,1047],{"class":159},[49,49894,847],{"class":73},[49,49896,49897],{"class":51,"line":34213},[49,49898,34095],{"class":66},[49,49900,49901],{"class":51,"line":34219},[49,49902,34101],{"class":66},[49,49904,49905],{"class":51,"line":34236},[49,49906,34107],{"class":66},[49,49908,49909],{"class":51,"line":34259},[49,49910,34113],{"class":66},[49,49912,49913],{"class":51,"line":34282},[49,49914,34119],{"class":66},[49,49916,49917,49919,49921,49923,49925,49927,49929,49931,49933],{"class":51,"line":34288},[49,49918,34125],{"class":73},[49,49920,34128],{"class":59},[49,49922,34131],{"class":73},[49,49924,34134],{"class":59},[49,49926,1207],{"class":73},[49,49928,34139],{"class":5913},[49,49930,78],{"class":77},[49,49932,34144],{"class":59},[49,49934,847],{"class":73},[49,49936,49937,49939,49941,49943,49945,49947,49949,49951,49953],{"class":51,"line":34293},[49,49938,34125],{"class":73},[49,49940,34128],{"class":59},[49,49942,34156],{"class":73},[49,49944,34159],{"class":59},[49,49946,1207],{"class":73},[49,49948,34139],{"class":5913},[49,49950,78],{"class":77},[49,49952,34168],{"class":59},[49,49954,847],{"class":73},[49,49956,49957],{"class":51,"line":34302},[49,49958,34176],{"class":66},[49,49960,49961],{"class":51,"line":34312},[49,49962,34182],{"class":73},[49,49964,49965],{"class":51,"line":34318},[49,49966,34188],{"class":66},[49,49968,49969,49971,49973],{"class":51,"line":34323},[49,49970,34194],{"class":73},[49,49972,34197],{"class":59},[49,49974,847],{"class":73},[49,49976,49977,49979,49981],{"class":51,"line":34329},[49,49978,34205],{"class":73},[49,49980,34208],{"class":59},[49,49982,847],{"class":73},[49,49984,49985],{"class":51,"line":34342},[49,49986,34216],{"class":66},[49,49988,49989,49991,49993,49995,49997,49999,50001],{"class":51,"line":34348},[49,49990,32258],{"class":73},[49,49992,1047],{"class":159},[49,49994,1207],{"class":73},[49,49996,915],{"class":159},[49,49998,1207],{"class":73},[49,50000,915],{"class":159},[49,50002,847],{"class":73},[49,50004,50005,50007,50009,50011,50013,50015,50017,50019,50021],{"class":51,"line":34359},[49,50006,34125],{"class":73},[49,50008,34128],{"class":59},[49,50010,34243],{"class":73},[49,50012,34134],{"class":59},[49,50014,1207],{"class":73},[49,50016,34139],{"class":5913},[49,50018,78],{"class":77},[49,50020,34254],{"class":59},[49,50022,847],{"class":73},[49,50024,50025,50027,50029,50031,50033,50035,50037,50039,50041],{"class":51,"line":34370},[49,50026,34125],{"class":73},[49,50028,34128],{"class":59},[49,50030,34266],{"class":73},[49,50032,34159],{"class":59},[49,50034,1207],{"class":73},[49,50036,34139],{"class":5913},[49,50038,78],{"class":77},[49,50040,34277],{"class":59},[49,50042,847],{"class":73},[49,50044,50045],{"class":51,"line":34389},[49,50046,34285],{"class":66},[49,50048,50050],{"class":51,"line":50049},219,[49,50051,34182],{"class":73},[49,50053,50055,50057,50059],{"class":51,"line":50054},220,[49,50056,34194],{"class":73},[49,50058,34128],{"class":59},[49,50060,847],{"class":73},[49,50062,50064,50066,50068],{"class":51,"line":50063},221,[49,50065,34205],{"class":73},[49,50067,34307],{"class":59},[49,50069,847],{"class":73},[49,50071,50073],{"class":51,"line":50072},222,[49,50074,34315],{"class":73},[49,50076,50078],{"class":51,"line":50077},223,[49,50079,399],{"emptyLinePlaceholder":398},[49,50081,50083],{"class":51,"line":50082},224,[49,50084,34326],{"class":66},[49,50086,50088,50090,50092,50094,50096],{"class":51,"line":50087},225,[49,50089,2230],{"class":77},[49,50091,31751],{"class":159},[49,50093,3646],{"class":77},[49,50095,31756],{"class":59},[49,50097,4436],{"class":73},[49,50099,50101],{"class":51,"line":50100},226,[49,50102,34345],{"class":66},[49,50104,50106,50108,50110],{"class":51,"line":50105},227,[49,50107,45077],{"class":73},[49,50109,78],{"class":77},[49,50111,45082],{"class":73},[49,50113,50115,50117,50119],{"class":51,"line":50114},228,[49,50116,34362],{"class":73},[49,50118,78],{"class":77},[49,50120,34367],{"class":73},[49,50122,50124,50126,50128,50130,50132,50134,50136],{"class":51,"line":50123},229,[49,50125,33924],{"class":73},[49,50127,78],{"class":77},[49,50129,45099],{"class":73},[49,50131,34380],{"class":5913},[49,50133,78],{"class":77},[49,50135,1736],{"class":159},[49,50137,847],{"class":73},[49,50139,50141],{"class":51,"line":50140},230,[49,50142,34392],{"class":73},[130,50144,50146],{"id":50145},"_242测试代码","2.4.2.测试代码",[14,50148,50149],{},"使用测试集进行测试与推理",[40,50151,50153],{"className":30909,"code":50152,"language":30911,"meta":27,"style":27},"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",[46,50154,50155,50161,50171,50181,50192,50202,50206,50210,50218,50223,50227,50244,50248,50252,50256,50260,50264,50296,50300,50308,50312,50324,50328,50332,50336,50340,50344,50348,50352,50356,50374,50388,50392,50402,50412,50422,50428,50432,50436,50444,50448,50464,50472,50476,50480,50488,50496,50500,50504,50508,50512,50518,50522,50532,50540,50548,50552,50556,50560,50568,50572,50588,50592,50596,50600,50612,50616,50628,50632,50636,50648,50652,50662,50666,50670,50682,50686,50694,50698,50702,50710,50714,50722,50726,50730,50734,50738,50742,50758,50766,50770,50774,50792,50798,50802,50812,50820,50828,50832,50836,50840,50844,50852,50856,50872,50876,50884,50892],{"__ignoreMap":27},[49,50156,50157,50159],{"class":51,"line":52},[49,50158,30923],{"class":77},[49,50160,30926],{"class":73},[49,50162,50163,50165,50167,50169],{"class":51,"line":63},[49,50164,30923],{"class":77},[49,50166,31946],{"class":73},[49,50168,31914],{"class":77},[49,50170,31951],{"class":73},[49,50172,50173,50175,50177,50179],{"class":51,"line":70},[49,50174,31268],{"class":77},[49,50176,31929],{"class":73},[49,50178,30923],{"class":77},[49,50180,31934],{"class":73},[49,50182,50183,50185,50187,50189],{"class":51,"line":219},[49,50184,31268],{"class":77},[49,50186,31899],{"class":73},[49,50188,30923],{"class":77},[49,50190,50191],{"class":73}," ImageFolder\n",[49,50193,50194,50196,50198,50200],{"class":51,"line":233},[49,50195,31268],{"class":77},[49,50197,32445],{"class":73},[49,50199,30923],{"class":77},[49,50201,45171],{"class":73},[49,50203,50204],{"class":51,"line":241},[49,50205,399],{"emptyLinePlaceholder":398},[49,50207,50208],{"class":51,"line":1920},[49,50209,34482],{"class":66},[49,50211,50212,50214,50216],{"class":51,"line":2011},[49,50213,32478],{"class":77},[49,50215,34489],{"class":55},[49,50217,32484],{"class":73},[49,50219,50220],{"class":51,"line":2017},[49,50221,50222],{"class":66},"   # 导入自己的数据集，并进行数据处理\n",[49,50224,50225],{"class":51,"line":2029},[49,50226,48492],{"class":66},[49,50228,50229,50231,50233,50235,50237,50239,50242],{"class":51,"line":2311},[49,50230,48497],{"class":159},[49,50232,78],{"class":77},[49,50234,1499],{"class":77},[49,50236,1080],{"class":59},[49,50238,1387],{"class":159},[49,50240,50241],{"class":48508},"\u002Fdata\u002Ftest",[49,50243,25822],{"class":59},[49,50245,50246],{"class":51,"line":2316},[49,50247,399],{"emptyLinePlaceholder":398},[49,50249,50250],{"class":51,"line":2322},[49,50251,48520],{"class":66},[49,50253,50254],{"class":51,"line":2327},[49,50255,48525],{"class":66},[49,50257,50258],{"class":51,"line":2341},[49,50259,48530],{"class":66},[49,50261,50262],{"class":51,"line":2346},[49,50263,48535],{"class":66},[49,50265,50266,50268,50270,50272,50274,50276,50278,50280,50282,50284,50286,50288,50290,50292,50294],{"class":51,"line":2352},[49,50267,48540],{"class":73},[49,50269,78],{"class":77},[49,50271,48545],{"class":73},[49,50273,48548],{"class":159},[49,50275,1207],{"class":73},[49,50277,48553],{"class":159},[49,50279,1207],{"class":73},[49,50281,48558],{"class":159},[49,50283,48561],{"class":73},[49,50285,48564],{"class":159},[49,50287,1207],{"class":73},[49,50289,48569],{"class":159},[49,50291,1207],{"class":73},[49,50293,48574],{"class":159},[49,50295,5354],{"class":73},[49,50297,50298],{"class":51,"line":2373},[49,50299,48581],{"class":66},[49,50301,50302,50304,50306],{"class":51,"line":2378},[49,50303,48586],{"class":73},[49,50305,78],{"class":77},[49,50307,48591],{"class":73},[49,50309,50310],{"class":51,"line":2392},[49,50311,48596],{"class":66},[49,50313,50314,50316,50318,50320,50322],{"class":51,"line":2397},[49,50315,48601],{"class":73},[49,50317,32032],{"class":159},[49,50319,1207],{"class":73},[49,50321,32032],{"class":159},[49,50323,43153],{"class":73},[49,50325,50326],{"class":51,"line":2426},[49,50327,48614],{"class":66},[49,50329,50330],{"class":51,"line":2431},[49,50331,48619],{"class":73},[49,50333,50334],{"class":51,"line":2448},[49,50335,48624],{"class":73},[49,50337,50338],{"class":51,"line":2453},[49,50339,48629],{"class":66},[49,50341,50342],{"class":51,"line":2458},[49,50343,48634],{"class":66},[49,50345,50346],{"class":51,"line":2463},[49,50347,399],{"emptyLinePlaceholder":398},[49,50349,50350],{"class":51,"line":2477},[49,50351,48643],{"class":66},[49,50353,50354],{"class":51,"line":2482},[49,50355,48648],{"class":66},[49,50357,50358,50360,50362,50364,50366,50368,50370,50372],{"class":51,"line":3274},[49,50359,34496],{"class":73},[49,50361,78],{"class":77},[49,50363,48657],{"class":73},[49,50365,48660],{"class":159},[49,50367,1207],{"class":73},[49,50369,48665],{"class":5913},[49,50371,78],{"class":77},[49,50373,48670],{"class":73},[49,50375,50376,50378,50380,50382,50384,50386],{"class":51,"line":3288},[49,50377,34553],{"class":73},[49,50379,78],{"class":77},[49,50381,32065],{"class":73},[49,50383,32068],{"class":5913},[49,50385,78],{"class":77},[49,50387,34564],{"class":73},[49,50389,50390],{"class":51,"line":3296},[49,50391,34569],{"class":66},[49,50393,50394,50396,50398,50400],{"class":51,"line":3301},[49,50395,34574],{"class":5913},[49,50397,78],{"class":77},[49,50399,1047],{"class":159},[49,50401,31997],{"class":73},[49,50403,50404,50406,50408,50410],{"class":51,"line":3307},[49,50405,34585],{"class":5913},[49,50407,78],{"class":77},[49,50409,32007],{"class":159},[49,50411,31997],{"class":73},[49,50413,50414,50416,50418,50420],{"class":51,"line":3313},[49,50415,34596],{"class":5913},[49,50417,78],{"class":77},[49,50419,1021],{"class":159},[49,50421,847],{"class":73},[49,50423,50424,50426],{"class":51,"line":3318},[49,50425,4787],{"class":77},[49,50427,34609],{"class":73},[49,50429,50430],{"class":51,"line":8645},[49,50431,399],{"emptyLinePlaceholder":398},[49,50433,50434],{"class":51,"line":8669},[49,50435,34618],{"class":66},[49,50437,50438,50440,50442],{"class":51,"line":8674},[49,50439,32478],{"class":77},[49,50441,34625],{"class":55},[49,50443,34628],{"class":73},[49,50445,50446],{"class":51,"line":8680},[49,50447,34633],{"class":66},[49,50449,50450,50452,50454,50456,50458,50460,50462],{"class":51,"line":8707},[49,50451,31768],{"class":73},[49,50453,78],{"class":77},[49,50455,31775],{"class":59},[49,50457,2403],{"class":77},[49,50459,31780],{"class":73},[49,50461,2400],{"class":77},[49,50463,34650],{"class":59},[49,50465,50466,50468,50470],{"class":51,"line":8712},[49,50467,31820],{"class":73},[49,50469,78],{"class":77},[49,50471,32820],{"class":73},[49,50473,50474],{"class":51,"line":8718},[49,50475,399],{"emptyLinePlaceholder":398},[49,50477,50478],{"class":51,"line":8730},[49,50479,34667],{"class":66},[49,50481,50482,50484,50486],{"class":51,"line":8742},[49,50483,34672],{"class":73},[49,50485,78],{"class":77},[49,50487,32873],{"class":159},[49,50489,50490,50492,50494],{"class":51,"line":8754},[49,50491,34681],{"class":73},[49,50493,78],{"class":77},[49,50495,3782],{"class":159},[49,50497,50498],{"class":51,"line":10413},[49,50499,399],{"emptyLinePlaceholder":398},[49,50501,50502],{"class":51,"line":10438},[49,50503,34694],{"class":66},[49,50505,50506],{"class":51,"line":10461},[49,50507,34699],{"class":66},[49,50509,50510],{"class":51,"line":10485},[49,50511,34704],{"class":66},[49,50513,50514,50516],{"class":51,"line":10490},[49,50515,34709],{"class":77},[49,50517,33415],{"class":73},[49,50519,50520],{"class":51,"line":10495},[49,50521,34716],{"class":66},[49,50523,50524,50526,50528,50530],{"class":51,"line":10500},[49,50525,4100],{"class":77},[49,50527,34723],{"class":73},[49,50529,26732],{"class":77},[49,50531,34728],{"class":73},[49,50533,50534,50536,50538],{"class":51,"line":10509},[49,50535,34733],{"class":73},[49,50537,78],{"class":77},[49,50539,34738],{"class":73},[49,50541,50542,50544,50546],{"class":51,"line":10514},[49,50543,34743],{"class":73},[49,50545,78],{"class":77},[49,50547,34748],{"class":73},[49,50549,50550],{"class":51,"line":10520},[49,50551,34753],{"class":66},[49,50553,50554],{"class":51,"line":10541},[49,50555,33406],{"class":73},[49,50557,50558],{"class":51,"line":10547},[49,50559,34762],{"class":66},[49,50561,50562,50564,50566],{"class":51,"line":10561},[49,50563,33191],{"class":73},[49,50565,78],{"class":77},[49,50567,34771],{"class":73},[49,50569,50570],{"class":51,"line":10567},[49,50571,34776],{"class":66},[49,50573,50574,50576,50578,50580,50582,50584,50586],{"class":51,"line":10594},[49,50575,33208],{"class":73},[49,50577,78],{"class":77},[49,50579,33213],{"class":73},[49,50581,33216],{"class":5913},[49,50583,78],{"class":77},[49,50585,1047],{"class":159},[49,50587,847],{"class":73},[49,50589,50590],{"class":51,"line":10603},[49,50591,34797],{"class":66},[49,50593,50594],{"class":51,"line":10609},[49,50595,34802],{"class":66},[49,50597,50598],{"class":51,"line":10617},[49,50599,34807],{"class":66},[49,50601,50602,50604,50606,50608,50610],{"class":51,"line":10622},[49,50603,34812],{"class":73},[49,50605,10174],{"class":77},[49,50607,33318],{"class":73},[49,50609,3646],{"class":77},[49,50611,34821],{"class":73},[49,50613,50614],{"class":51,"line":17301},[49,50615,34826],{"class":66},[49,50617,50618,50620,50622,50624,50626],{"class":51,"line":17307},[49,50619,34831],{"class":73},[49,50621,10174],{"class":77},[49,50623,34836],{"class":73},[49,50625,1021],{"class":159},[49,50627,847],{"class":73},[49,50629,50630],{"class":51,"line":17330},[49,50631,399],{"emptyLinePlaceholder":398},[49,50633,50634],{"class":51,"line":17336},[49,50635,34849],{"class":66},[49,50637,50638,50640,50642,50644,50646],{"class":51,"line":17359},[49,50639,34854],{"class":73},[49,50641,78],{"class":77},[49,50643,34859],{"class":73},[49,50645,1413],{"class":77},[49,50647,34864],{"class":73},[49,50649,50650],{"class":51,"line":17373},[49,50651,34869],{"class":66},[49,50653,50654,50656,50658,50660],{"class":51,"line":17393},[49,50655,32982],{"class":159},[49,50657,841],{"class":73},[49,50659,34878],{"class":59},[49,50661,34881],{"class":73},[49,50663,50664],{"class":51,"line":17399},[49,50665,399],{"emptyLinePlaceholder":398},[49,50667,50668],{"class":51,"line":17410},[49,50669,34890],{"class":66},[49,50671,50672,50674,50676,50678,50680],{"class":51,"line":17433},[49,50673,2230],{"class":77},[49,50675,31751],{"class":159},[49,50677,3646],{"class":77},[49,50679,31756],{"class":59},[49,50681,4436],{"class":73},[49,50683,50684],{"class":51,"line":17455},[49,50685,34907],{"class":66},[49,50687,50688,50690,50692],{"class":51,"line":17460},[49,50689,31820],{"class":73},[49,50691,78],{"class":77},[49,50693,45082],{"class":73},[49,50695,50696],{"class":51,"line":17466},[49,50697,34920],{"class":66},[49,50699,50700],{"class":51,"line":17480},[49,50701,34925],{"class":66},[49,50703,50704,50706,50708],{"class":51,"line":17493},[49,50705,34930],{"class":73},[49,50707,34933],{"class":59},[49,50709,31028],{"class":73},[49,50711,50712],{"class":51,"line":17498},[49,50713,34940],{"class":66},[49,50715,50716,50718,50720],{"class":51,"line":17512},[49,50717,34553],{"class":73},[49,50719,78],{"class":77},[49,50721,34949],{"class":73},[49,50723,50724],{"class":51,"line":17517},[49,50725,34954],{"class":66},[49,50727,50728],{"class":51,"line":17523},[49,50729,34959],{"class":73},[49,50731,50732],{"class":51,"line":17528},[49,50733,399],{"emptyLinePlaceholder":398},[49,50735,50736],{"class":51,"line":17542},[49,50737,34968],{"class":66},[49,50739,50740],{"class":51,"line":17547},[49,50741,34973],{"class":66},[49,50743,50744,50746,50748,50750,50752,50754,50756],{"class":51,"line":17552},[49,50745,31768],{"class":73},[49,50747,78],{"class":77},[49,50749,31775],{"class":59},[49,50751,2403],{"class":77},[49,50753,31780],{"class":73},[49,50755,2400],{"class":77},[49,50757,34650],{"class":59},[49,50759,50760,50762,50764],{"class":51,"line":17566},[49,50761,31820],{"class":73},[49,50763,78],{"class":77},[49,50765,32820],{"class":73},[49,50767,50768],{"class":51,"line":17578},[49,50769,35002],{"class":66},[49,50771,50772],{"class":51,"line":17583},[49,50773,35007],{"class":66},[49,50775,50776,50778,50780,50782,50785,50787,50790],{"class":51,"line":17596},[49,50777,35012],{"class":73},[49,50779,78],{"class":77},[49,50781,1719],{"class":73},[49,50783,50784],{"class":59},"'猫'",[49,50786,1207],{"class":73},[49,50788,50789],{"class":59},"'狗'",[49,50791,33777],{"class":73},[49,50793,50794,50796],{"class":51,"line":17601},[49,50795,34709],{"class":77},[49,50797,33415],{"class":73},[49,50799,50800],{"class":51,"line":17606},[49,50801,35077],{"class":66},[49,50803,50804,50806,50808,50810],{"class":51,"line":17611},[49,50805,4100],{"class":77},[49,50807,35084],{"class":73},[49,50809,26732],{"class":77},[49,50811,34728],{"class":73},[49,50813,50814,50816,50818],{"class":51,"line":17624},[49,50815,33141],{"class":73},[49,50817,78],{"class":77},[49,50819,33146],{"class":73},[49,50821,50822,50824,50826],{"class":51,"line":17629},[49,50823,33156],{"class":73},[49,50825,78],{"class":77},[49,50827,33161],{"class":73},[49,50829,50830],{"class":51,"line":33164},[49,50831,399],{"emptyLinePlaceholder":398},[49,50833,50834],{"class":51,"line":33170},[49,50835,35113],{"class":66},[49,50837,50838],{"class":51,"line":33176},[49,50839,33406],{"class":73},[49,50841,50842],{"class":51,"line":33182},[49,50843,35122],{"class":66},[49,50845,50846,50848,50850],{"class":51,"line":33188},[49,50847,33191],{"class":73},[49,50849,78],{"class":77},[49,50851,33196],{"class":73},[49,50853,50854],{"class":51,"line":33199},[49,50855,35135],{"class":66},[49,50857,50858,50860,50862,50864,50866,50868,50870],{"class":51,"line":33205},[49,50859,33208],{"class":73},[49,50861,78],{"class":77},[49,50863,33213],{"class":73},[49,50865,33216],{"class":5913},[49,50867,78],{"class":77},[49,50869,1047],{"class":159},[49,50871,847],{"class":73},[49,50873,50874],{"class":51,"line":33225},[49,50875,35156],{"class":66},[49,50877,50878,50880,50882],{"class":51,"line":33231},[49,50879,35161],{"class":73},[49,50881,78],{"class":77},[49,50883,35166],{"class":73},[49,50885,50886,50888,50890],{"class":51,"line":33242},[49,50887,35171],{"class":73},[49,50889,78],{"class":77},[49,50891,35176],{"class":73},[49,50893,50894,50896,50898,50900,50902,50904,50906,50908],{"class":51,"line":33248},[49,50895,35181],{"class":159},[49,50897,841],{"class":73},[49,50899,35186],{"class":59},[49,50901,35189],{"class":73},[49,50903,35192],{"class":59},[49,50905,1207],{"class":73},[49,50907,35197],{"class":59},[49,50909,35200],{"class":73},[757,50911,50912],{},"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":27,"searchDepth":63,"depth":63,"links":50914},[50915,50916,50917,50918],{"id":31122,"depth":70,"text":31123},{"id":38370,"depth":70,"text":38371},{"id":41803,"depth":70,"text":41804},{"id":45812,"depth":70,"text":45813},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31114,"description":24072},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50925,"title":50926,"body":50927,"description":24072,"extension":766,"meta":50934,"navigation":398,"path":50935,"seo":50936,"stem":50937,"__hash__":50938},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50928,"toc":50932},[50929],[10,50930,50926],{"id":50931},"_3yolo模型学习",{"title":27,"searchDepth":63,"depth":63,"links":50933},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50926,"description":24072},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50940,"title":50941,"body":50942,"description":50949,"extension":766,"meta":50950,"navigation":398,"path":50952,"seo":50953,"stem":50954,"__hash__":50955},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50943,"toc":50947},[50944],[14,50945,50946],{},"yolo模型还未补充",{"title":27,"searchDepth":63,"depth":63,"links":50948},[],"深度学习学习",{"category":50951},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50941,"description":50949},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50957,"title":50958,"body":50959,"description":24072,"extension":766,"meta":50984,"navigation":398,"path":50985,"seo":50986,"stem":50987,"__hash__":50988},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50960,"toc":50982},[50961,50964,50967,50972,50979],[10,50962,50958],{"id":50963},"_1工具",[14,50965,50966],{},"提示错误插件：有问题会提前报错",[14,50968,50969],{},[25,50970],{"alt":27,"src":50971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50973,50974],{},[124,50975,50978],{"href":50976,"rel":50977},"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",[128],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50980,50981],{},"alt键加上下箭头可以实现语句的移动",{"title":27,"searchDepth":63,"depth":63,"links":50983},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50958,"description":24072},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50990,"title":50991,"body":50992,"description":24072,"extension":766,"meta":53856,"navigation":398,"path":53857,"seo":53858,"stem":53859,"__hash__":53860},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50993,"toc":53807},[50994,50997,51001,51005,51010,51013,51018,51022,51029,51034,51041,51046,51053,51058,51062,51067,51070,51074,51079,51083,51088,51091,51094,51097,51100,51103,51106,51109,51112,51117,51122,51127,51131,51134,51137,51141,51146,51149,51157,51162,51179,51187,51192,51197,51202,51207,51212,51215,51220,51225,51229,51238,51243,51248,51252,51257,51260,51264,51269,51277,51282,51287,51290,51295,51300,51305,51308,51311,51314,51319,51324,51327,51332,51335,51340,51343,51346,51349,51354,51357,51360,51375,51380,51385,51390,51393,51396,51399,51413,51416,51421,51426,51429,51432,51435,51438,51441,51444,51447,51451,51455,51460,51464,51467,51472,51477,51480,51485,51488,51492,51497,51500,51503,51506,51509,51512,51515,51518,51521,51524,51528,51533,51538,51543,51546,51549,51553,51558,51561,51565,51568,51571,51576,51579,51582,51586,51590,51593,51598,51603,51606,51635,51640,51645,51650,51655,51659,51664,51668,51673,51676,51680,51684,51689,51693,51698,51703,51707,51712,51715,51717,51720,51725,51729,51734,51738,51742,51747,51752,51757,51762,51766,51771,51776,51781,51784,51787,51792,51795,51800,51805,51810,51815,51819,52626,52630,52973,52978,52981,52984,52987,52990,52993,52996,52999,53002,53004,53007,53009,53012,53016,53021,53024,53027,53030,53034,53039,53044,53064,53067,53071,53076,53081,53098,53102,53131,53135,53157,53159,53198,53206,53212,53216,53219,53222,53227,53232,53235,53238,53241,53246,53251,53254,53257,53260,53263,53266,53269,53272,53275,53278,53281,53284,53286,53289,53292,53295,53298,53301,53304,53307,53310,53314,53319,53322,53327,53330,53333,53336,53339,53342,53345,53348,53350,53353,53356,53359,53362,53365,53368,53372,53375,53384,53387,53392,53395,53400,53403,53406,53409,53412,53415,53418,53421,53425,53429,53432,53435,53440,53445,53450,53454,53459,53464,53467,53470,53473,53476,53479,53484,53487,53492,53494,53499,53502,53506,53511,53514,53517,53522,53526,53529,53534,53537,53540,53569,53574,53577,53580,53583,53586,53589,53593,53596,53682,53686,53689,53694,53699,53706,53709,53712,53715,53718,53721,53726,53731,53734,53737,53740,53743,53746,53749,53752,53755,53758,53760,53763,53767,53772,53777,53782,53785,53790,53795,53798,53801,53804],[10,50995,50991],{"id":50996},"_2基础语法",[782,50998,51000],{"id":50999},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[18,51002,51004],{"id":51003},"_211-js组成","2.1.1 js组成",[30,51006,51007],{},[33,51008,51009],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,51011,51012],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[30,51014,51015],{"start":63},[33,51016,51017],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[18,51019,51021],{"id":51020},"_212-js书写位置","2.1.2 js书写位置",[30,51023,51024],{},[33,51025,51026],{},[112,51027,51028],{},"内部 JavaScript",[14,51030,51031],{},[25,51032],{"alt":27,"src":51033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[30,51035,51036],{"start":63},[33,51037,51038],{},[112,51039,51040],{},"外部 JavaScript",[14,51042,51043],{},[25,51044],{"alt":27,"src":51045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[30,51047,51048],{"start":70},[33,51049,51050],{},[112,51051,51052],{},"内联 JavaScript",[14,51054,51055],{},[25,51056],{"alt":27,"src":51057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[18,51059,51061],{"id":51060},"_213-javascript注释","2.1.3 JavaScript注释",[14,51063,51064],{},[25,51065],{"alt":27,"src":51066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,51068,51069],{},"alt+shift+a一定要记住！",[18,51071,51073],{"id":51072},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,51075,51076],{},[25,51077],{"alt":27,"src":51078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[18,51080,51082],{"id":51081},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[30,51084,51085],{},[33,51086,51087],{},"输出语法：",[14,51089,51090],{},"①document.write('要出的内容')",[14,51092,51093],{},"向body内输出内容；",[14,51095,51096],{},"如果输出的内容写的是标签，也会被解析cheng",[14,51098,51099],{},"②alert('要出的内容')",[14,51101,51102],{},"页面弹出警告对话框",[14,51104,51105],{},"③console.log('控制台打印')",[14,51107,51108],{},"控制台输出语法，程序员调试使用",[14,51110,51111],{},"输入log就行，自动生成：",[14,51113,51114],{},[25,51115],{"alt":27,"src":51116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[30,51118,51119],{"start":63},[33,51120,51121],{},"输入语法：",[14,51123,51124],{},[25,51125],{"alt":27,"src":51126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[18,51128,51130],{"id":51129},"_2116-字面量","21.1.6 字面量",[14,51132,51133],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,51135,51136],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[782,51138,51140],{"id":51139},"_22-变量","2.2 变量",[30,51142,51143],{},[33,51144,51145],{},"变量声明",[14,51147,51148],{},"let 变量名",[742,51150,51151,51154],{},[33,51152,51153],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[33,51155,51156],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[30,51158,51159],{"start":63},[33,51160,51161],{},"变量赋值",[40,51163,51167],{"className":51164,"code":51165,"language":51166,"meta":27,"style":27},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[46,51168,51169,51174],{"__ignoreMap":27},[49,51170,51171],{"class":51,"line":52},[49,51172,51173],{"class":73},"let age\n",[49,51175,51176],{"class":51,"line":63},[49,51177,51178],{"class":73},"age=18\n",[30,51180,51181,51184],{"start":70},[33,51182,51183],{},"连这些（变量的初始化）：let age=18",[33,51185,51186],{},"更新变量",[14,51188,51189],{},[25,51190],{"alt":27,"src":51191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[30,51193,51194],{"start":233},[33,51195,51196],{},"声明多个变量",[14,51198,51199],{},[25,51200],{"alt":27,"src":51201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[30,51203,51204],{"start":241},[33,51205,51206],{},"变量命名规则与规范",[14,51208,51209],{},[25,51210],{"alt":27,"src":51211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,51213,51214],{},"遵守小驼峰！",[30,51216,51217],{"start":1920},[33,51218,51219],{},"变量拓展-let和var的区别",[14,51221,51222],{},[25,51223],{"alt":27,"src":51224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[782,51226,51228],{"id":51227},"_23-数组","2.3 数组",[40,51230,51232],{"className":51164,"code":51231,"language":51166,"meta":27,"style":27},"let arr = []\n",[46,51233,51234],{"__ignoreMap":27},[49,51235,51236],{"class":51,"line":52},[49,51237,51231],{"class":73},[14,51239,51240],{},[25,51241],{"alt":27,"src":51242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,51244,51245],{},[25,51246],{"alt":27,"src":51247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[782,51249,51251],{"id":51250},"_24-常量","2.4 常量",[14,51253,51254],{},[25,51255],{"alt":27,"src":51256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,51258,51259],{},"const — 类似于 let ，但是变量的值无法被修改",[782,51261,51263],{"id":51262},"_25-数据类型","2.5 数据类型",[14,51265,51266],{},[25,51267],{"alt":27,"src":51268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[30,51270,51271,51274],{},[33,51272,51273],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[33,51275,51276],{},"算数运算符：",[14,51278,51279],{},[25,51280],{"alt":27,"src":51281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[30,51283,51284],{"start":70},[33,51285,51286],{},"数字类型（Number）",[14,51288,51289],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,51291,51292],{},[25,51293],{"alt":27,"src":51294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[30,51296,51297],{"start":219},[33,51298,51299],{},"字符串类型（string）",[14,51301,51302],{},[25,51303],{"alt":27,"src":51304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,51306,51307],{},"反引号也是可以使用的",[14,51309,51310],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,51312,51313],{},"例如：document.write(\"我今年\"+age+\"岁\")",[30,51315,51316],{"start":233},[33,51317,51318],{},"模板字符串",[14,51320,51321],{},[25,51322],{"alt":27,"src":51323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,51325,51326],{},"类似于python的字符串格式化",[30,51328,51329],{"start":241},[33,51330,51331],{},"布尔类型",[14,51333,51334],{},"true 和 false",[30,51336,51337],{"start":1920},[33,51338,51339],{},"未定义类型（underfined）",[14,51341,51342],{},"表示没有赋值",[14,51344,51345],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,51347,51348],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[30,51350,51351],{"start":2011},[33,51352,51353],{},"null（空类型）",[14,51355,51356],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,51358,51359],{},"赋值了，但是内容为空",[40,51361,51363],{"className":51164,"code":51362,"language":51166,"meta":27,"style":27},"typeof null\n输出的是'object'，是一个对象数据类型\n",[46,51364,51365,51370],{"__ignoreMap":27},[49,51366,51367],{"class":51,"line":52},[49,51368,51369],{"class":73},"typeof null\n",[49,51371,51372],{"class":51,"line":63},[49,51373,51374],{"class":73},"输出的是'object'，是一个对象数据类型\n",[30,51376,51377],{"start":2017},[33,51378,51379],{},"控制台检测数据类型",[14,51381,51382],{},[25,51383],{"alt":27,"src":51384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[30,51386,51387],{"start":2029},[33,51388,51389],{},"类型转换",[14,51391,51392],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,51394,51395],{},"转换方式：隐式转换和显示转换",[14,51397,51398],{},"①隐式转换",[742,51400,51401,51404,51407,51410],{},[33,51402,51403],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[33,51405,51406],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[33,51408,51409],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[33,51411,51412],{},"任何数据和字符串相加结果都是字符串",[14,51414,51415],{},"②显示转换",[14,51417,51418],{},[25,51419],{"alt":27,"src":51420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,51422,51423],{},[25,51424],{"alt":27,"src":51425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,51427,51428],{},"在输入的时候要用好隐式转换，简单写起来",[14,51430,51431],{},"let num = +prompt(’请输入数字：‘)",[14,51433,51434],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,51436,51437],{},"console.log(parseInt('12.333px'))",[14,51439,51440],{},"输出为：12",[14,51442,51443],{},"console.log(parseInt('a'a'a12.333px'))",[14,51445,51446],{},"输出：NaN",[782,51448,51450],{"id":51449},"_26-运算符","2.6 运算符",[18,51452,51454],{"id":51453},"_261-赋值运算符","2.6.1 赋值运算符",[14,51456,51457],{},[25,51458],{"alt":27,"src":51459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[18,51461,51463],{"id":51462},"_262-一元运算符","2.6.2 一元运算符",[14,51465,51466],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51468,51469],{},[25,51470],{"alt":27,"src":51471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51473,51474],{},[25,51475],{"alt":27,"src":51476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51478,51479],{},"两者的区别：",[14,51481,51482],{},[25,51483],{"alt":27,"src":51484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51486,51487],{},"前置先自加；后置后加，代码执行完之后再加",[18,51489,51491],{"id":51490},"_263-比较运算符","2.6.3 比较运算符",[14,51493,51494],{},[25,51495],{"alt":27,"src":51496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51498,51499],{},"比较运算符也有隐式转换",[14,51501,51502],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51504,51505],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51507,51508],{},"要使用三等，开发的时候",[14,51510,51511],{},"NaN不等于任何人，包括它自己",[14,51513,51514],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51516,51517],{},"7\u002F10=0.7",[14,51519,51520],{},"最后：0.5+0.2=0.7",[14,51522,51523],{},"字符串比较，比较的是字符对应的ASCII码",[18,51525,51527],{"id":51526},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51529,51530],{},[25,51531],{"alt":27,"src":51532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51534,51535],{},[25,51536],{"alt":27,"src":51537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51539,51540],{},[25,51541],{"alt":27,"src":51542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51544,51545],{},"上述题目选D",[14,51547,51548],{},"与真2假1；或真1假2",[18,51550,51552],{"id":51551},"_265-运算符优先级","2.6.5 运算符优先级",[14,51554,51555],{},[25,51556],{"alt":27,"src":51557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51559,51560],{},"先算逻辑与，后算逻辑或",[782,51562,51564],{"id":51563},"_27-语句","2.7 语句",[14,51566,51567],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51569,51570],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51572,51573],{},[25,51574],{"alt":27,"src":51575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51577,51578],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51580,51581],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[18,51583,51585],{"id":51584},"_271-分支语句","2.7.1 分支语句",[130,51587,51589],{"id":51588},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51591,51592],{},"if语句单行简单的话，可以不写{}，写在一行就行",[30,51594,51595],{},[33,51596,51597],{},"单分支语句",[14,51599,51600],{},[25,51601],{"alt":27,"src":51602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51604,51605],{},"除了0，所有数字都为真",[40,51607,51609],{"className":51164,"code":51608,"language":51166,"meta":27,"style":27},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[46,51610,51611,51616,51621,51626,51630],{"__ignoreMap":27},[49,51612,51613],{"class":51,"line":52},[49,51614,51615],{"class":73},"if（0) {\n",[49,51617,51618],{"class":51,"line":63},[49,51619,51620],{"class":73},"    let a=1\n",[49,51622,51623],{"class":51,"line":70},[49,51624,51625],{"class":73},"    alert(typeof a)\n",[49,51627,51628],{"class":51,"line":219},[49,51629,2264],{"class":73},[49,51631,51632],{"class":51,"line":233},[49,51633,51634],{"class":73},"不输出，括号为假\n",[30,51636,51637],{"start":63},[33,51638,51639],{},"双分支语句",[14,51641,51642],{},[25,51643],{"alt":27,"src":51644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[30,51646,51647],{"start":70},[33,51648,51649],{},"多分支语句",[14,51651,51652],{},[25,51653],{"alt":27,"src":51654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[130,51656,51658],{"id":51657},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51660,51661],{},[25,51662],{"alt":27,"src":51663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[130,51665,51667],{"id":51666},"_2713-switch语句","2.7.1.3 switch语句",[14,51669,51670],{},[25,51671],{"alt":27,"src":51672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51674,51675],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[18,51677,51679],{"id":51678},"_272-循环语句","2.7.2 循环语句",[130,51681,51683],{"id":51682},"_2721-断点演示","2.7.2.1 断点演示",[14,51685,51686],{},[25,51687],{"alt":27,"src":51688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[130,51690,51692],{"id":51691},"_2722-while循环","2.7.2.2 while循环",[14,51694,51695],{},[25,51696],{"alt":27,"src":51697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51699,51700],{},[25,51701],{"alt":27,"src":51702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[130,51704,51706],{"id":51705},"_2723-for循环","2.7.2.3 for循环",[14,51708,51709],{},[25,51710],{"alt":27,"src":51711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51713,51714],{},"for(;;) {",[14,51716,1775],{},[14,51718,51719],{},"表示无限循环",[14,51721,51722],{},[25,51723],{"alt":27,"src":51724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[130,51726,51728],{"id":51727},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51730,51731],{},[25,51732],{"alt":27,"src":51733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[782,51735,51737],{"id":51736},"_28-数组","2.8 数组",[18,51739,51741],{"id":51740},"_281-基础认识","2.8.1 基础认识",[14,51743,51744],{},[25,51745],{"alt":27,"src":51746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51748,51749],{},[25,51750],{"alt":27,"src":51751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51753,51754],{},[25,51755],{"alt":27,"src":51756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51758,51759],{},[25,51760],{"alt":27,"src":51761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[18,51763,51765],{"id":51764},"_282-操作数组","2.8.2 操作数组",[14,51767,51768],{},[25,51769],{"alt":27,"src":51770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[30,51772,51773],{},[33,51774,51775],{},"添加元素",[14,51777,51778],{},[25,51779],{"alt":27,"src":51780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51782,51783],{},"console.log(arr.push('green'))",[14,51785,51786],{},"输出结果：为新数组的长度",[14,51788,51789],{},[25,51790],{"alt":27,"src":51791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51793,51794],{},"push用的非常多，一定要记住",[30,51796,51797],{},[33,51798,51799],{},"删除元素",[14,51801,51802],{},[25,51803],{"alt":27,"src":51804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51806,51807],{},[25,51808],{"alt":27,"src":51809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51811,51812],{},[25,51813],{"alt":27,"src":51814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[18,51816,51818],{"id":51817},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[40,51820,51822],{"className":51164,"code":51821,"language":51166,"meta":27,"style":27},"\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",[46,51823,51824,51839,51855,51859,51868,51886,51910,51932,51946,51954,51961,51973,51984,51988,51992,51999,52011,52026,52039,52058,52075,52090,52102,52114,52126,52130,52134,52145,52155,52167,52179,52191,52202,52206,52210,52222,52226,52240,52244,52248,52259,52273,52285,52299,52303,52312,52321,52325,52334,52338,52347,52352,52357,52370,52398,52403,52408,52433,52438,52442,52447,52452,52467,52471,52476,52506,52518,52534,52550,52564,52569,52576,52580,52585,52598,52606,52614,52618],{"__ignoreMap":27},[49,51825,51826,51829,51833,51836],{"class":51,"line":52},[49,51827,51828],{"class":73},"\u003C!",[49,51830,51832],{"class":51831},"s9eBZ","DOCTYPE",[49,51834,51835],{"class":55}," html",[49,51837,51838],{"class":73},">\n",[49,51840,51841,51843,51845,51848,51850,51853],{"class":51,"line":63},[49,51842,1739],{"class":73},[49,51844,51166],{"class":51831},[49,51846,51847],{"class":55}," lang",[49,51849,78],{"class":73},[49,51851,51852],{"class":59},"\"en\"",[49,51854,51838],{"class":73},[49,51856,51857],{"class":51,"line":70},[49,51858,399],{"emptyLinePlaceholder":398},[49,51860,51861,51863,51866],{"class":51,"line":219},[49,51862,1739],{"class":73},[49,51864,51865],{"class":51831},"head",[49,51867,51838],{"class":73},[49,51869,51870,51873,51876,51879,51881,51884],{"class":51,"line":233},[49,51871,51872],{"class":73},"    \u003C",[49,51874,51875],{"class":51831},"meta",[49,51877,51878],{"class":55}," charset",[49,51880,78],{"class":73},[49,51882,51883],{"class":59},"\"UTF-8\"",[49,51885,51838],{"class":73},[49,51887,51888,51890,51892,51895,51897,51900,51903,51905,51908],{"class":51,"line":241},[49,51889,51872],{"class":73},[49,51891,51875],{"class":51831},[49,51893,51894],{"class":55}," http-equiv",[49,51896,78],{"class":73},[49,51898,51899],{"class":59},"\"X-UA-Compatible\"",[49,51901,51902],{"class":55}," content",[49,51904,78],{"class":73},[49,51906,51907],{"class":59},"\"IE=edge\"",[49,51909,51838],{"class":73},[49,51911,51912,51914,51916,51918,51920,51923,51925,51927,51930],{"class":51,"line":1920},[49,51913,51872],{"class":73},[49,51915,51875],{"class":51831},[49,51917,15617],{"class":55},[49,51919,78],{"class":73},[49,51921,51922],{"class":59},"\"viewport\"",[49,51924,51902],{"class":55},[49,51926,78],{"class":73},[49,51928,51929],{"class":59},"\"width=device-width, initial-scale=1.0\"",[49,51931,51838],{"class":73},[49,51933,51934,51936,51939,51942,51944],{"class":51,"line":2011},[49,51935,51872],{"class":73},[49,51937,51938],{"class":51831},"title",[49,51940,51941],{"class":73},">Document\u003C\u002F",[49,51943,51938],{"class":51831},[49,51945,51838],{"class":73},[49,51947,51948,51950,51952],{"class":51,"line":2017},[49,51949,51872],{"class":73},[49,51951,757],{"class":51831},[49,51953,51838],{"class":73},[49,51955,51956,51959],{"class":51,"line":2029},[49,51957,51958],{"class":51831},"        *",[49,51960,16269],{"class":73},[49,51962,51963,51966,51969,51971],{"class":51,"line":2311},[49,51964,51965],{"class":159},"            margin",[49,51967,51968],{"class":73},": ",[49,51970,1021],{"class":159},[49,51972,1990],{"class":73},[49,51974,51975,51978,51980,51982],{"class":51,"line":2316},[49,51976,51977],{"class":159},"            padding",[49,51979,51968],{"class":73},[49,51981,1021],{"class":159},[49,51983,1990],{"class":73},[49,51985,51986],{"class":51,"line":2322},[49,51987,3226],{"class":73},[49,51989,51990],{"class":51,"line":2327},[49,51991,399],{"emptyLinePlaceholder":398},[49,51993,51994,51997],{"class":51,"line":2341},[49,51995,51996],{"class":55},"        .box",[49,51998,16269],{"class":73},[49,52000,52001,52004,52006,52009],{"class":51,"line":2346},[49,52002,52003],{"class":159},"            display",[49,52005,51968],{"class":73},[49,52007,52008],{"class":159},"flex",[49,52010,1990],{"class":73},[49,52012,52013,52016,52018,52021,52024],{"class":51,"line":2352},[49,52014,52015],{"class":159},"            width",[49,52017,51968],{"class":73},[49,52019,52020],{"class":159},"700",[49,52022,52023],{"class":77},"px",[49,52025,1990],{"class":73},[49,52027,52028,52031,52033,52035,52037],{"class":51,"line":2373},[49,52029,52030],{"class":159},"            height",[49,52032,51968],{"class":73},[49,52034,4670],{"class":159},[49,52036,52023],{"class":77},[49,52038,1990],{"class":73},[49,52040,52041,52044,52046,52048,52050,52053,52056],{"class":51,"line":2378},[49,52042,52043],{"class":159},"            border-left",[49,52045,51968],{"class":73},[49,52047,1047],{"class":159},[49,52049,52023],{"class":77},[49,52051,52052],{"class":159}," solid",[49,52054,52055],{"class":159}," pink",[49,52057,1990],{"class":73},[49,52059,52060,52063,52065,52067,52069,52071,52073],{"class":51,"line":2392},[49,52061,52062],{"class":159},"            border-bottom",[49,52064,51968],{"class":73},[49,52066,1047],{"class":159},[49,52068,52023],{"class":77},[49,52070,52052],{"class":159},[49,52072,52055],{"class":159},[49,52074,1990],{"class":73},[49,52076,52077,52079,52081,52083,52085,52088],{"class":51,"line":2397},[49,52078,51965],{"class":159},[49,52080,51968],{"class":73},[49,52082,1485],{"class":159},[49,52084,52023],{"class":77},[49,52086,52087],{"class":159}," auto",[49,52089,1990],{"class":73},[49,52091,52092,52095,52097,52100],{"class":51,"line":2426},[49,52093,52094],{"class":159},"            justify-content",[49,52096,51968],{"class":73},[49,52098,52099],{"class":159},"space-around",[49,52101,1990],{"class":73},[49,52103,52104,52107,52109,52112],{"class":51,"line":2431},[49,52105,52106],{"class":159},"            align-items",[49,52108,51968],{"class":73},[49,52110,52111],{"class":159},"flex-end",[49,52113,1990],{"class":73},[49,52115,52116,52119,52121,52124],{"class":51,"line":2448},[49,52117,52118],{"class":159},"            text-align",[49,52120,51968],{"class":73},[49,52122,52123],{"class":159},"center",[49,52125,1990],{"class":73},[49,52127,52128],{"class":51,"line":2453},[49,52129,3226],{"class":73},[49,52131,52132],{"class":51,"line":2458},[49,52133,399],{"emptyLinePlaceholder":398},[49,52135,52136,52138,52140,52143],{"class":51,"line":2463},[49,52137,51996],{"class":55},[49,52139,1789],{"class":77},[49,52141,52142],{"class":51831},"div",[49,52144,16269],{"class":73},[49,52146,52147,52149,52151,52153],{"class":51,"line":2477},[49,52148,52003],{"class":159},[49,52150,51968],{"class":73},[49,52152,52008],{"class":159},[49,52154,1990],{"class":73},[49,52156,52157,52159,52161,52163,52165],{"class":51,"line":2482},[49,52158,52015],{"class":159},[49,52160,51968],{"class":73},[49,52162,1485],{"class":159},[49,52164,52023],{"class":77},[49,52166,1990],{"class":73},[49,52168,52169,52172,52174,52177],{"class":51,"line":3274},[49,52170,52171],{"class":159},"            background-color",[49,52173,51968],{"class":73},[49,52175,52176],{"class":159},"pink",[49,52178,1990],{"class":73},[49,52180,52181,52184,52186,52189],{"class":51,"line":3288},[49,52182,52183],{"class":159},"            flex-direction",[49,52185,51968],{"class":73},[49,52187,52188],{"class":159},"column",[49,52190,1990],{"class":73},[49,52192,52193,52195,52197,52200],{"class":51,"line":3296},[49,52194,52094],{"class":159},[49,52196,51968],{"class":73},[49,52198,52199],{"class":159},"space-between",[49,52201,1990],{"class":73},[49,52203,52204],{"class":51,"line":3301},[49,52205,3226],{"class":73},[49,52207,52208],{"class":51,"line":3307},[49,52209,399],{"emptyLinePlaceholder":398},[49,52211,52212,52214,52217,52220],{"class":51,"line":3313},[49,52213,51996],{"class":55},[49,52215,52216],{"class":51831}," div",[49,52218,52219],{"class":51831}," span",[49,52221,16269],{"class":73},[49,52223,52224],{"class":51,"line":3318},[49,52225,399],{"emptyLinePlaceholder":398},[49,52227,52228,52231,52233,52236,52238],{"class":51,"line":8645},[49,52229,52230],{"class":159},"            margin-top",[49,52232,51968],{"class":73},[49,52234,52235],{"class":159},"-20",[49,52237,52023],{"class":77},[49,52239,1990],{"class":73},[49,52241,52242],{"class":51,"line":8669},[49,52243,3226],{"class":73},[49,52245,52246],{"class":51,"line":8674},[49,52247,399],{"emptyLinePlaceholder":398},[49,52249,52250,52252,52254,52257],{"class":51,"line":8680},[49,52251,51996],{"class":55},[49,52253,52216],{"class":51831},[49,52255,52256],{"class":51831}," h4",[49,52258,16269],{"class":73},[49,52260,52261,52264,52266,52269,52271],{"class":51,"line":8707},[49,52262,52263],{"class":159},"            margin-bottom",[49,52265,51968],{"class":73},[49,52267,52268],{"class":159},"-35",[49,52270,52023],{"class":77},[49,52272,1990],{"class":73},[49,52274,52275,52277,52279,52281,52283],{"class":51,"line":8712},[49,52276,52015],{"class":159},[49,52278,51968],{"class":73},[49,52280,1185],{"class":159},[49,52282,52023],{"class":77},[49,52284,1990],{"class":73},[49,52286,52287,52290,52292,52295,52297],{"class":51,"line":8718},[49,52288,52289],{"class":159},"            margin-left",[49,52291,51968],{"class":73},[49,52293,52294],{"class":159},"-10",[49,52296,52023],{"class":77},[49,52298,1990],{"class":73},[49,52300,52301],{"class":51,"line":8730},[49,52302,3226],{"class":73},[49,52304,52305,52308,52310],{"class":51,"line":8742},[49,52306,52307],{"class":73},"    \u003C\u002F",[49,52309,757],{"class":51831},[49,52311,51838],{"class":73},[49,52313,52314,52317,52319],{"class":51,"line":8754},[49,52315,52316],{"class":73},"\u003C\u002F",[49,52318,51865],{"class":51831},[49,52320,51838],{"class":73},[49,52322,52323],{"class":51,"line":10413},[49,52324,399],{"emptyLinePlaceholder":398},[49,52326,52327,52329,52332],{"class":51,"line":10438},[49,52328,1739],{"class":73},[49,52330,52331],{"class":51831},"body",[49,52333,51838],{"class":73},[49,52335,52336],{"class":51,"line":10461},[49,52337,399],{"emptyLinePlaceholder":398},[49,52339,52340,52342,52345],{"class":51,"line":10485},[49,52341,51872],{"class":73},[49,52343,52344],{"class":51831},"script",[49,52346,51838],{"class":73},[49,52348,52349],{"class":51,"line":10490},[49,52350,52351],{"class":66},"        \u002F\u002F 1. 四次弹框效果\n",[49,52353,52354],{"class":51,"line":10495},[49,52355,52356],{"class":66},"        \u002F\u002F 声明一个新的数组\n",[49,52358,52359,52362,52365,52367],{"class":51,"line":10500},[49,52360,52361],{"class":77},"        let",[49,52363,52364],{"class":73}," arr ",[49,52366,78],{"class":77},[49,52368,52369],{"class":73}," []\n",[49,52371,52372,52374,52376,52379,52381,52383,52385,52387,52389,52392,52394,52396],{"class":51,"line":10509},[49,52373,4100],{"class":77},[49,52375,2357],{"class":73},[49,52377,52378],{"class":77},"let",[49,52380,10135],{"class":73},[49,52382,78],{"class":77},[49,52384,25807],{"class":159},[49,52386,10142],{"class":73},[49,52388,2287],{"class":77},[49,52390,52391],{"class":159}," 4",[49,52393,3911],{"class":73},[49,52395,2990],{"class":77},[49,52397,13139],{"class":73},[49,52399,52400],{"class":51,"line":10514},[49,52401,52402],{"class":66},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[49,52404,52405],{"class":51,"line":10520},[49,52406,52407],{"class":66},"            \u002F\u002F arr.push(num)\n",[49,52409,52410,52413,52416,52418,52421,52423,52426,52428,52431],{"class":51,"line":10541},[49,52411,52412],{"class":73},"            arr.",[49,52414,52415],{"class":55},"push",[49,52417,841],{"class":73},[49,52419,52420],{"class":55},"prompt",[49,52422,841],{"class":73},[49,52424,52425],{"class":59},"`请输入第${",[49,52427,1270],{"class":73},[49,52429,52430],{"class":59},"}季度的数据:`",[49,52432,31028],{"class":73},[49,52434,52435],{"class":51,"line":10547},[49,52436,52437],{"class":66},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[49,52439,52440],{"class":51,"line":10561},[49,52441,3226],{"class":73},[49,52443,52444],{"class":51,"line":10567},[49,52445,52446],{"class":66},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[49,52448,52449],{"class":51,"line":10594},[49,52450,52451],{"class":66},"        \u002F\u002F 盒子开头\n",[49,52453,52454,52457,52460,52462,52465],{"class":51,"line":10603},[49,52455,52456],{"class":73},"        document.",[49,52458,52459],{"class":55},"write",[49,52461,841],{"class":73},[49,52463,52464],{"class":59},"` \u003Cdiv class=\"box\">`",[49,52466,847],{"class":73},[49,52468,52469],{"class":51,"line":10609},[49,52470,399],{"emptyLinePlaceholder":398},[49,52472,52473],{"class":51,"line":10617},[49,52474,52475],{"class":66},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[49,52477,52478,52480,52482,52484,52486,52488,52490,52492,52494,52497,52500,52502,52504],{"class":51,"line":10622},[49,52479,4100],{"class":77},[49,52481,2357],{"class":73},[49,52483,52378],{"class":77},[49,52485,10135],{"class":73},[49,52487,78],{"class":77},[49,52489,4790],{"class":159},[49,52491,10142],{"class":73},[49,52493,1739],{"class":77},[49,52495,52496],{"class":73}," arr.",[49,52498,52499],{"class":159},"length",[49,52501,3911],{"class":73},[49,52503,2990],{"class":77},[49,52505,13139],{"class":73},[49,52507,52508,52511,52513,52515],{"class":51,"line":17301},[49,52509,52510],{"class":73},"            document.",[49,52512,52459],{"class":55},[49,52514,841],{"class":73},[49,52516,52517],{"class":59},"`\n",[49,52519,52520,52523,52525,52527,52529,52531],{"class":51,"line":17307},[49,52521,52522],{"class":59},"              \u003Cdiv style=\"height: ${",[49,52524,4577],{"class":73},[49,52526,1719],{"class":59},[49,52528,1270],{"class":73},[49,52530,1769],{"class":59},[49,52532,52533],{"class":59},"}px;\">\n",[49,52535,52536,52539,52541,52543,52545,52547],{"class":51,"line":17330},[49,52537,52538],{"class":59},"                \u003Cspan>${",[49,52540,4577],{"class":73},[49,52542,1719],{"class":59},[49,52544,1270],{"class":73},[49,52546,1769],{"class":59},[49,52548,52549],{"class":59},"}\u003C\u002Fspan>\n",[49,52551,52552,52555,52557,52559,52561],{"class":51,"line":17336},[49,52553,52554],{"class":59},"                \u003Ch4>第${",[49,52556,1270],{"class":73},[49,52558,46097],{"class":77},[49,52560,25807],{"class":159},[49,52562,52563],{"class":59},"}季度\u003C\u002Fh4>\n",[49,52565,52566],{"class":51,"line":17359},[49,52567,52568],{"class":59},"              \u003C\u002Fdiv>          \n",[49,52570,52571,52574],{"class":51,"line":17373},[49,52572,52573],{"class":59},"            `",[49,52575,847],{"class":73},[49,52577,52578],{"class":51,"line":17393},[49,52579,3226],{"class":73},[49,52581,52582],{"class":51,"line":17399},[49,52583,52584],{"class":66},"        \u002F\u002F 盒子结尾\n",[49,52586,52587,52589,52591,52593,52596],{"class":51,"line":17410},[49,52588,52456],{"class":73},[49,52590,52459],{"class":55},[49,52592,841],{"class":73},[49,52594,52595],{"class":59},"` \u003C\u002Fdiv>`",[49,52597,847],{"class":73},[49,52599,52600,52602,52604],{"class":51,"line":17433},[49,52601,52307],{"class":73},[49,52603,52344],{"class":51831},[49,52605,51838],{"class":73},[49,52607,52608,52610,52612],{"class":51,"line":17455},[49,52609,52316],{"class":73},[49,52611,52331],{"class":51831},[49,52613,51838],{"class":73},[49,52615,52616],{"class":51,"line":17460},[49,52617,399],{"emptyLinePlaceholder":398},[49,52619,52620,52622,52624],{"class":51,"line":17466},[49,52621,52316],{"class":73},[49,52623,51166],{"class":51831},[49,52625,51838],{"class":73},[18,52627,52629],{"id":52628},"_284-冒泡排序","2.8.4 冒泡排序",[40,52631,52633],{"className":51164,"code":52632,"language":51166,"meta":27,"style":27},"\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",[46,52634,52635,52645,52659,52663,52671,52686,52706,52718,52726,52730,52738,52746,52778,52811,52848,52853,52872,52877,52890,52905,52921,52925,52930,52934,52944,52953,52961,52965],{"__ignoreMap":27},[49,52636,52637,52639,52641,52643],{"class":51,"line":52},[49,52638,51828],{"class":73},[49,52640,51832],{"class":51831},[49,52642,51835],{"class":55},[49,52644,51838],{"class":73},[49,52646,52647,52649,52651,52653,52655,52657],{"class":51,"line":63},[49,52648,1739],{"class":73},[49,52650,51166],{"class":51831},[49,52652,51847],{"class":55},[49,52654,78],{"class":73},[49,52656,51852],{"class":59},[49,52658,51838],{"class":73},[49,52660,52661],{"class":51,"line":70},[49,52662,399],{"emptyLinePlaceholder":398},[49,52664,52665,52667,52669],{"class":51,"line":219},[49,52666,1739],{"class":73},[49,52668,51865],{"class":51831},[49,52670,51838],{"class":73},[49,52672,52673,52676,52678,52680,52682,52684],{"class":51,"line":233},[49,52674,52675],{"class":73},"  \u003C",[49,52677,51875],{"class":51831},[49,52679,51878],{"class":55},[49,52681,78],{"class":73},[49,52683,51883],{"class":59},[49,52685,51838],{"class":73},[49,52687,52688,52690,52692,52694,52696,52698,52700,52702,52704],{"class":51,"line":241},[49,52689,52675],{"class":73},[49,52691,51875],{"class":51831},[49,52693,15617],{"class":55},[49,52695,78],{"class":73},[49,52697,51922],{"class":59},[49,52699,51902],{"class":55},[49,52701,78],{"class":73},[49,52703,51929],{"class":59},[49,52705,51838],{"class":73},[49,52707,52708,52710,52712,52714,52716],{"class":51,"line":1920},[49,52709,52675],{"class":73},[49,52711,51938],{"class":51831},[49,52713,51941],{"class":73},[49,52715,51938],{"class":51831},[49,52717,51838],{"class":73},[49,52719,52720,52722,52724],{"class":51,"line":2011},[49,52721,52316],{"class":73},[49,52723,51865],{"class":51831},[49,52725,51838],{"class":73},[49,52727,52728],{"class":51,"line":2017},[49,52729,399],{"emptyLinePlaceholder":398},[49,52731,52732,52734,52736],{"class":51,"line":2029},[49,52733,1739],{"class":73},[49,52735,52331],{"class":51831},[49,52737,51838],{"class":73},[49,52739,52740,52742,52744],{"class":51,"line":2311},[49,52741,52675],{"class":73},[49,52743,52344],{"class":51831},[49,52745,51838],{"class":73},[49,52747,52748,52751,52753,52755,52758,52760,52762,52764,52766,52768,52770,52772,52774,52776],{"class":51,"line":2316},[49,52749,52750],{"class":77},"    let",[49,52752,52364],{"class":73},[49,52754,78],{"class":77},[49,52756,52757],{"class":73}," [",[49,52759,1148],{"class":159},[49,52761,13132],{"class":73},[49,52763,1122],{"class":159},[49,52765,13132],{"class":73},[49,52767,909],{"class":159},[49,52769,13132],{"class":73},[49,52771,915],{"class":159},[49,52773,13132],{"class":73},[49,52775,1047],{"class":159},[49,52777,33777],{"class":73},[49,52779,52780,52782,52784,52786,52788,52790,52792,52794,52796,52798,52800,52803,52805,52807,52809],{"class":51,"line":2322},[49,52781,3898],{"class":77},[49,52783,2357],{"class":73},[49,52785,52378],{"class":77},[49,52787,10135],{"class":73},[49,52789,78],{"class":77},[49,52791,4790],{"class":159},[49,52793,10142],{"class":73},[49,52795,1739],{"class":77},[49,52797,52496],{"class":73},[49,52799,52499],{"class":159},[49,52801,52802],{"class":77}," -",[49,52804,25807],{"class":159},[49,52806,3911],{"class":73},[49,52808,2990],{"class":77},[49,52810,13139],{"class":73},[49,52812,52813,52816,52818,52820,52822,52824,52826,52828,52830,52832,52834,52836,52838,52840,52842,52844,52846],{"class":51,"line":2327},[49,52814,52815],{"class":77},"      for",[49,52817,2357],{"class":73},[49,52819,52378],{"class":77},[49,52821,10197],{"class":73},[49,52823,78],{"class":77},[49,52825,4790],{"class":159},[49,52827,10204],{"class":73},[49,52829,1739],{"class":77},[49,52831,52496],{"class":73},[49,52833,52499],{"class":159},[49,52835,52802],{"class":77},[49,52837,10135],{"class":73},[49,52839,1361],{"class":77},[49,52841,25807],{"class":159},[49,52843,10211],{"class":73},[49,52845,2990],{"class":77},[49,52847,13139],{"class":73},[49,52849,52850],{"class":51,"line":2341},[49,52851,52852],{"class":66},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[49,52854,52855,52857,52860,52862,52865,52867,52869],{"class":51,"line":2346},[49,52856,3194],{"class":77},[49,52858,52859],{"class":73}," (arr[j] ",[49,52861,1789],{"class":77},[49,52863,52864],{"class":73}," arr[j ",[49,52866,1310],{"class":77},[49,52868,25807],{"class":159},[49,52870,52871],{"class":73},"]) {\n",[49,52873,52874],{"class":51,"line":2352},[49,52875,52876],{"class":66},"          \u002F\u002F 交换两个变量\n",[49,52878,52879,52882,52885,52887],{"class":51,"line":2373},[49,52880,52881],{"class":77},"          let",[49,52883,52884],{"class":73}," tmp ",[49,52886,78],{"class":77},[49,52888,52889],{"class":73}," arr[j]\n",[49,52891,52892,52895,52897,52899,52901,52903],{"class":51,"line":2378},[49,52893,52894],{"class":73},"          arr[j] ",[49,52896,78],{"class":77},[49,52898,52864],{"class":73},[49,52900,1310],{"class":77},[49,52902,25807],{"class":159},[49,52904,33777],{"class":73},[49,52906,52907,52910,52912,52914,52916,52918],{"class":51,"line":2392},[49,52908,52909],{"class":73},"          arr[j ",[49,52911,1310],{"class":77},[49,52913,25807],{"class":159},[49,52915,5140],{"class":73},[49,52917,78],{"class":77},[49,52919,52920],{"class":73}," tmp\n",[49,52922,52923],{"class":51,"line":2397},[49,52924,3226],{"class":73},[49,52926,52927],{"class":51,"line":2426},[49,52928,52929],{"class":73},"      }\n",[49,52931,52932],{"class":51,"line":2431},[49,52933,2885],{"class":73},[49,52935,52936,52939,52941],{"class":51,"line":2448},[49,52937,52938],{"class":73},"    document.",[49,52940,52459],{"class":55},[49,52942,52943],{"class":73},"(arr)\n",[49,52945,52946,52949,52951],{"class":51,"line":2453},[49,52947,52948],{"class":73},"  \u003C\u002F",[49,52950,52344],{"class":51831},[49,52952,51838],{"class":73},[49,52954,52955,52957,52959],{"class":51,"line":2458},[49,52956,52316],{"class":73},[49,52958,52331],{"class":51831},[49,52960,51838],{"class":73},[49,52962,52963],{"class":51,"line":2463},[49,52964,399],{"emptyLinePlaceholder":398},[49,52966,52967,52969,52971],{"class":51,"line":2477},[49,52968,52316],{"class":73},[49,52970,51166],{"class":51831},[49,52972,51838],{"class":73},[14,52974,52975],{},[25,52976],{"alt":27,"src":52977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52979,52980],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52982,52983],{},"let arr = [4, 2, 5, 1, 3]",[14,52985,52986],{},"\u002F\u002F 1.升序排列写法",[14,52988,52989],{},"arr.sort(function (a, b) {",[14,52991,52992],{},"return a - b",[14,52994,52995],{},"})",[14,52997,52998],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,53000,53001],{},"\u002F\u002F 降序排列写法",[14,53003,52989],{},[14,53005,53006],{},"return b - a",[14,53008,52995],{},[14,53010,53011],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[782,53013,53015],{"id":53014},"_29-函数","2.9 函数",[14,53017,53018],{},[25,53019],{"alt":27,"src":53020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,53022,53023],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,53025,53026],{},"函数的声明用function",[14,53028,53029],{},"函数里边可以嵌套函数",[18,53031,53033],{"id":53032},"_291-函数传参","2.9.1 函数传参",[14,53035,53036],{},[25,53037],{"alt":27,"src":53038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,53040,53041],{},[25,53042],{"alt":27,"src":53043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[742,53045,53046,53049,53052,53055,53058,53061],{},[33,53047,53048],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[33,53050,53051],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[33,53053,53054],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[33,53056,53057],{},"开发中尽量保持形参和实参个数一致",[33,53059,53060],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[33,53062,53063],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,53065,53066],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[18,53068,53070],{"id":53069},"_292-函数的返回值","2.9.2 函数的返回值",[14,53072,53073],{},[25,53074],{"alt":27,"src":53075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,53077,53078],{},[25,53079],{"alt":27,"src":53080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[742,53082,53083,53086,53089,53092,53095],{},[33,53084,53085],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[33,53087,53088],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[33,53090,53091],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[33,53093,53094],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[33,53096,53097],{},"断点调试:进入函数内部看执行过程F11",[18,53099,53101],{"id":53100},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[40,53103,53105],{"className":51164,"code":53104,"language":51166,"meta":27,"style":27},"    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",[46,53106,53107,53112,53117,53121,53126],{"__ignoreMap":27},[49,53108,53109],{"class":51,"line":52},[49,53110,53111],{"class":73},"    function fn(a, b) {\n",[49,53113,53114],{"class":51,"line":63},[49,53115,53116],{"class":73},"      console.log(a + b);\n",[49,53118,53119],{"class":51,"line":70},[49,53120,2885],{"class":73},[49,53122,53123],{"class":51,"line":219},[49,53124,53125],{"class":73},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[49,53127,53128],{"class":51,"line":233},[49,53129,53130],{"class":73},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[18,53132,53134],{"id":53133},"_294-作用域","2.9.4 作用域",[742,53136,53137,53143,53148,53151,53154],{},[33,53138,53139,53140],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[112,53141,53142],{},"作用域",[33,53144,53145],{},[112,53146,53147],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[33,53149,53150],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[33,53152,53153],{},"函数内部可以直接所使用全局变量",[33,53155,53156],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,53158,15330],{},[40,53160,53162],{"className":51164,"code":53161,"language":51166,"meta":27,"style":27},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[46,53163,53164,53169,53174,53178,53183,53188,53193],{"__ignoreMap":27},[49,53165,53166],{"class":51,"line":52},[49,53167,53168],{"class":73},"    function fun() {\n",[49,53170,53171],{"class":51,"line":63},[49,53172,53173],{"class":73},"      num = 10\n",[49,53175,53176],{"class":51,"line":70},[49,53177,2885],{"class":73},[49,53179,53180],{"class":51,"line":219},[49,53181,53182],{"class":73},"    fun()\n",[49,53184,53185],{"class":51,"line":233},[49,53186,53187],{"class":73},"    console.log(num)\n",[49,53189,53190],{"class":51,"line":241},[49,53191,53192],{"class":73},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[49,53194,53195],{"class":51,"line":1920},[49,53196,53197],{"class":73},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[742,53199,53200,53203],{},[33,53201,53202],{},"函数内部的形参可以看做是局部变量",[33,53204,53205],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,53207,53208,53209],{},"变量访问原则： ",[112,53210,53211],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[18,53213,53215],{"id":53214},"_295-匿名函数","2.9.5 匿名函数",[14,53217,53218],{},"函数可以分为具名函数和匿名函数",[14,53220,53221],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[30,53223,53224],{},[33,53225,53226],{},"函数表达式",[14,53228,53229],{},[25,53230],{"alt":27,"src":53231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,53233,53234],{},"里边也可以写参数",[14,53236,53237],{},"具名函数调用位置可以随意调整；",[14,53239,53240],{},"匿名函数函数表达式形式只能在声明后才可以使用",[30,53242,53243],{"start":63},[33,53244,53245],{},"立即执行函数",[14,53247,53248],{},[25,53249],{"alt":27,"src":53250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,53252,53253],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,53255,53256],{},"写法：两个小括号，然后在第一个小括号中写function",[14,53258,53259],{},"(function () {})();",[14,53261,53262],{},"不要落下最后的;",[14,53264,53265],{},"立即执行函数必须要加;",[14,53267,53268],{},"分号写前写后都没问题",[14,53270,53271],{},"写前：",[14,53273,53274],{},"(function() {})()",[14,53276,53277],{},";(function () {})();",[14,53279,53280],{},"写后:",[14,53282,53283],{},"(function() {})();",[14,53285,53259],{},[14,53287,53288],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,53290,53291],{},"还有一种写法：",[14,53293,53294],{},"(function(){}());",[14,53296,53297],{},"或者:",[14,53299,53300],{},"!function(){}();",[14,53302,53303],{},"立即执行函数有时候也是可以加名字的：",[14,53305,53306],{},"(function flexible(window,document) {}(window,document));",[14,53308,53309],{},"省一些调用方法",[18,53311,53313],{"id":53312},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,53315,53316],{},[25,53317],{"alt":27,"src":53318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,53320,53321],{},"这样就不用非得给x,y初始化了",[14,53323,53324],{},[25,53325],{"alt":27,"src":53326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,53328,53329],{},"代码执行时先看左边",[14,53331,53332],{},"例如：console.log(false && 3+5)",[14,53334,53335],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,53337,53338],{},"&&都是真时，就返回最后一个真值",[14,53340,53341],{},"console.log(11 && 22)",[14,53343,53344],{},"输出22",[14,53346,53347],{},"逻辑与：遇真则真",[14,53349,15330],{},[14,53351,53352],{},"let age=1",[14,53354,53355],{},"console.log(11 || age++)",[14,53357,53358],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,53360,53361],{},"console.log(11 || 22)",[14,53363,53364],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,53366,53367],{},"||如果都是假的话，就取最后一个假的值了",[18,53369,53371],{"id":53370},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,53373,53374],{},"显示转换：",[14,53376,53377,53380,53381],{},[112,53378,53379],{},"记忆","： ",[112,53382,53383],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,53385,53386],{},"空字符串为假，其他字符串全为真",[14,53388,53389],{},[25,53390],{"alt":27,"src":53391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,53393,53394],{},"隐式转换：",[14,53396,53397],{},[25,53398],{"alt":27,"src":53399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,53401,53402],{},"隐式转换:",[14,53404,53405],{},"null+3=3",[14,53407,53408],{},"undefined+3=NaN",[14,53410,53411],{},"null==undefined 输出true,他两个都当0看",[14,53413,53414],{},"null===undefined 输出false",[14,53416,53417],{},"undefined做任何操作都是NaN",[14,53419,53420],{},"NaN不等于NaN，NaN表示计算错误",[782,53422,53424],{"id":53423},"_210-对象","2.10 对象",[18,53426,53428],{"id":53427},"_2101-对象的介绍","2.10.1 对象的介绍",[14,53430,53431],{},"对象也是一种数据类型，里边的数据是无序的",[14,53433,53434],{},"对象由属性和方法组成",[14,53436,53437],{},[25,53438],{"alt":27,"src":53439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,53441,53442],{},[25,53443],{"alt":27,"src":53444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,53446,53447],{},[25,53448],{"alt":27,"src":53449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[18,53451,53453],{"id":53452},"_2102-对象属性","2.10.2 对象属性",[14,53455,53456],{},[25,53457],{"alt":27,"src":53458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[30,53460,53461],{},[33,53462,53463],{},"查询对象",[14,53465,53466],{},"对象名.属性 goods.uname",[14,53468,53469],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53471,53472],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53474,53475],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53477,53478],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[30,53480,53481],{"start":63},[33,53482,53483],{},"重新赋值",[14,53485,53486],{},"对象名.属性=新值",[30,53488,53489],{"start":70},[33,53490,53491],{},"增加新数据",[14,53493,53486],{},[30,53495,53496],{"start":219},[33,53497,53498],{},"删除对象中的属性",[14,53500,53501],{},"delete 对象名.属性",[18,53503,53505],{"id":53504},"_2103-对象方法","2.10.3 对象方法",[14,53507,53508],{},[25,53509],{"alt":27,"src":53510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53512,53513],{},"后边跟的是匿名函数",[14,53515,53516],{},"对象外面的叫函数；对象内部的叫方法",[14,53518,53519],{},[25,53520],{"alt":27,"src":53521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[18,53523,53525],{"id":53524},"_2104-遍历对象","2.10.4 遍历对象",[14,53527,53528],{},"理解为加括号的python字典遍历",[14,53530,53531],{},[25,53532],{"alt":27,"src":53533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53535,53536],{},"k是字符串类型",[14,53538,53539],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[40,53541,53543],{"className":51164,"code":53542,"language":51166,"meta":27,"style":27},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[46,53544,53545,53550,53555,53560,53565],{"__ignoreMap":27},[49,53546,53547],{"class":51,"line":52},[49,53548,53549],{"class":73},"   let arr = [1, 2, 3]\n",[49,53551,53552],{"class":51,"line":63},[49,53553,53554],{"class":73},"    for (let k in arr) {\n",[49,53556,53557],{"class":51,"line":70},[49,53558,53559],{"class":73},"      console.log(k)\n",[49,53561,53562],{"class":51,"line":219},[49,53563,53564],{"class":73},"      console.log(arr[k])\n",[49,53566,53567],{"class":51,"line":233},[49,53568,2885],{"class":73},[14,53570,53571],{},[25,53572],{"alt":27,"src":53573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53575,53576],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53578,53579],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53581,53582],{},"for in 得到的k是属性名",[52344,53584,53585],{},"\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",[14,53587,53588],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[18,53590,53592],{"id":53591},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53594,53595],{},"数组中放对象信息",[40,53597,53601],{"className":53598,"code":53599,"language":53600,"meta":27,"style":27},"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",[46,53602,53603,53611,53616,53621,53626,53631,53636,53641,53646,53651,53656,53661,53666,53670,53674],{"__ignoreMap":27},[49,53604,53605,53607,53609],{"class":51,"line":52},[49,53606,1739],{"class":73},[49,53608,52344],{"class":51831},[49,53610,51838],{"class":73},[49,53612,53613],{"class":51,"line":63},[49,53614,53615],{"class":73},"    let students = [\n",[49,53617,53618],{"class":51,"line":70},[49,53619,53620],{"class":73},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[49,53622,53623],{"class":51,"line":219},[49,53624,53625],{"class":73},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[49,53627,53628],{"class":51,"line":233},[49,53629,53630],{"class":73},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[49,53632,53633],{"class":51,"line":241},[49,53634,53635],{"class":73},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[49,53637,53638],{"class":51,"line":1920},[49,53639,53640],{"class":73},"    ]\n",[49,53642,53643],{"class":51,"line":2011},[49,53644,53645],{"class":73},"    for (let i = 0; i \u003C students.length; i++) {\n",[49,53647,53648],{"class":51,"line":2017},[49,53649,53650],{"class":73},"      for (let k in students[i]) {\n",[49,53652,53653],{"class":51,"line":2029},[49,53654,53655],{"class":73},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[49,53657,53658],{"class":51,"line":2311},[49,53659,53660],{"class":73},"        \u002F\u002F输出每个人的名字：\n",[49,53662,53663],{"class":51,"line":2316},[49,53664,53665],{"class":73},"        \u002F\u002Fconsole.log(students[i].name)\n",[49,53667,53668],{"class":51,"line":2322},[49,53669,52929],{"class":73},[49,53671,53672],{"class":51,"line":2327},[49,53673,2885],{"class":73},[49,53675,53676,53678,53680],{"class":51,"line":2341},[49,53677,52948],{"class":73},[49,53679,52344],{"class":51831},[49,53681,51838],{"class":73},[18,53683,53685],{"id":53684},"_2106-内置对象","2.10.6 内置对象",[14,53687,53688],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[30,53690,53691],{},[33,53692,53693],{},"数学对象Math",[14,53695,53696],{},[25,53697],{"alt":27,"src":53698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53700,53701],{},[124,53702,53705],{"href":53703,"rel":53704},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[128],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53707,53708],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53710,53711],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53713,53714],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53716,53717],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53719,53720],{},"null属于对象数据类型",[30,53722,53723],{"start":63},[33,53724,53725],{},"生成任意范围随机数",[14,53727,53728],{},[25,53729],{"alt":27,"src":53730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53732,53733],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53735,53736],{},"乘以几就取不到几",[14,53738,53739],{},"取数组中的随机元素：",[14,53741,53742],{},"let arr = ['red', 'green', 'blue']",[14,53744,53745],{},"let random = Math.floor(Math.random() * arr.length)",[14,53747,53748],{},"console.log(arr[random])",[14,53750,53751],{},"这个函数得到的是全闭区间",[14,53753,53754],{},"function getRandom(N, M) {",[14,53756,53757],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53759,1775],{},[14,53761,53762],{},"console.log(getRandom(4, 8))",[18,53764,53766],{"id":53765},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53768,53769],{},[25,53770],{"alt":27,"src":53771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53773,53774],{},[25,53775],{"alt":27,"src":53776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53778,53779],{},[25,53780],{"alt":27,"src":53781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53783,53784],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53786,53787],{},[25,53788],{"alt":27,"src":53789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53791,53792],{},[25,53793],{"alt":27,"src":53794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53796,53797],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53799,53800],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53802,53803],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[757,53805,53806],{},"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":27,"searchDepth":63,"depth":63,"links":53808},[53809,53817,53818,53819,53820,53821,53828,53832,53838,53847],{"id":50999,"depth":63,"text":51000,"children":53810},[53811,53812,53813,53814,53815,53816],{"id":51003,"depth":70,"text":51004},{"id":51020,"depth":70,"text":51021},{"id":51060,"depth":70,"text":51061},{"id":51072,"depth":70,"text":51073},{"id":51081,"depth":70,"text":51082},{"id":51129,"depth":70,"text":51130},{"id":51139,"depth":63,"text":51140},{"id":51227,"depth":63,"text":51228},{"id":51250,"depth":63,"text":51251},{"id":51262,"depth":63,"text":51263},{"id":51449,"depth":63,"text":51450,"children":53822},[53823,53824,53825,53826,53827],{"id":51453,"depth":70,"text":51454},{"id":51462,"depth":70,"text":51463},{"id":51490,"depth":70,"text":51491},{"id":51526,"depth":70,"text":51527},{"id":51551,"depth":70,"text":51552},{"id":51563,"depth":63,"text":51564,"children":53829},[53830,53831],{"id":51584,"depth":70,"text":51585},{"id":51678,"depth":70,"text":51679},{"id":51736,"depth":63,"text":51737,"children":53833},[53834,53835,53836,53837],{"id":51740,"depth":70,"text":51741},{"id":51764,"depth":70,"text":51765},{"id":51817,"depth":70,"text":51818},{"id":52628,"depth":70,"text":52629},{"id":53014,"depth":63,"text":53015,"children":53839},[53840,53841,53842,53843,53844,53845,53846],{"id":53032,"depth":70,"text":53033},{"id":53069,"depth":70,"text":53070},{"id":53100,"depth":70,"text":53101},{"id":53133,"depth":70,"text":53134},{"id":53214,"depth":70,"text":53215},{"id":53312,"depth":70,"text":53313},{"id":53370,"depth":70,"text":53371},{"id":53423,"depth":63,"text":53424,"children":53848},[53849,53850,53851,53852,53853,53854,53855],{"id":53427,"depth":70,"text":53428},{"id":53452,"depth":70,"text":53453},{"id":53504,"depth":70,"text":53505},{"id":53524,"depth":70,"text":53525},{"id":53591,"depth":70,"text":53592},{"id":53684,"depth":70,"text":53685},{"id":53765,"depth":70,"text":53766},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50991,"description":24072},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53862,"title":53863,"body":53864,"description":24072,"extension":766,"meta":77204,"navigation":398,"path":77205,"seo":77206,"stem":77207,"__hash__":77208},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53865,"toc":77144},[53866,53869,53872,53875,53880,53883,53886,53889,53893,53897,53903,53908,53916,53923,53926,53930,53935,53940,53945,53948,53951,53962,53965,53969,53972,53975,53980,53985,53990,53993,53996,54088,54091,54096,54099,54104,54107,54110,54115,54118,54123,54127,54130,54144,54148,54153,54156,54159,54163,54168,54171,54175,54179,54184,54188,54193,54196,54199,54202,54205,54208,54211,54216,54221,54249,54252,54255,54258,54263,54266,54269,54272,54275,54279,54308,54312,54317,54322,54325,54328,54331,54336,54451,54456,54461,54622,54627,54630,54634,54639,54644,54647,54650,54653,54656,54659,54662,54665,54668,54671,54674,54677,54680,54683,54686,54688,54691,54694,54697,54702,54706,55103,55106,55112,55116,55121,56403,56408,56411,56414,56417,56422,57618,57622,57628,57633,57636,57641,57646,57650,57654,57659,57662,57667,57670,57673,57677,58585,58588,58592,58813,58816,58819,58822,59048,59051,59275,59278,59282,59287,59290,59293,59521,59524,59557,59560,59564,59569,59573,59576,59579,59582,59585,59588,59591,59594,59599,60879,60883,60886,61979,61983,61986,61989,61992,61995,61999,62002,62005,62007,62015,63496,63500,63503,63506,63509,63718,63721,63725,63729,63734,63739,63742,63745,63750,63754,63759,63762,63871,63875,63880,63885,63888,63891,63895,63900,63905,63910,63913,63916,63927,63930,63935,63940,63943,63946,64019,64023,64028,64031,64033,64044,64048,64053,65379,65382,65385,65388,65390,65393,65396,65399,65402,65405,65408,65411,65414,65417,65420,65423,65426,65428,65430,65433,65437,66531,66534,66537,66553,66567,66570,66575,66581,66586,66590,66594,66599,66603,66608,67050,67055,67058,67062,67067,67070,67073,67077,67082,67086,67091,67096,67100,67105,67110,67113,67118,67123,67127,67132,67137,67241,67244,67248,67253,67619,67622,67625,67628,67631,67634,67637,67640,67643,68939,68943,68948,68953,68956,68959,68962,68965,68967,68972,68977,68980,68984,68989,68994,68999,69002,69005,69008,69011,69014,69019,69022,69026,69031,69036,69040,69045,69048,69053,69056,69059,69062,69065,69068,69073,69076,69079,69082,69085,69089,69094,69097,69101,69106,69109,69112,69116,69145,69148,69152,69156,69161,69165,69170,69173,69176,69179,69182,69185,69188,69191,69194,69197,69200,69203,69206,69209,69212,69216,69221,69226,69229,69233,69237,69242,69245,69249,69252,69255,69260,69265,69270,69275,69280,69283,69286,69291,69296,69300,69305,69308,69313,69316,69319,69322,69325,69330,69333,69342,69346,69351,69354,69357,69361,69364,69369,69373,69376,69382,69388,69392,69418,69421,70982,70985,71481,71484,71489,71494,71499,71503,71508,71513,71518,71522,71527,71530,71533,71536,71539,71543,71546,71551,71554,71559,71563,71568,71571,71576,71581,71586,71589,71592,71597,71602,71605,71608,71612,71615,71620,71623,71628,71631,71636,71641,71646,71649,71654,71719,71722,71733,71737,71742,71914,71918,71923,71926,71929,71932,71936,71947,71951,71954,71959,71964,71967,71970,71973,71976,71979,71981,71984,71987,71990,71995,71998,72003,72006,72010,72013,72016,72030,72034,72037,72092,72097,72100,72103,72108,72111,72115,72120,72250,72254,72259,72264,72345,72350,72354,72357,72362,72367,72373,72376,72379,72382,72386,72391,72394,72405,72409,72426,75473,75477,75480,75483,75486,75507,75511,75514,75522,75525,75530,75533,75536,75541,75546,75550,75571,75575,75580,75583,75586,75589,75592,75596,75601,75604,75608,75613,75616,75621,75624,75629,75632,75637,76840,76844,76849,76852,76857,77141],[10,53867,53863],{"id":53868},"_3web-apis",[14,53870,53871],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53873,53874],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53876,53877],{},[25,53878],{"alt":27,"src":53879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53881,53882],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53884,53885],{},"建议数组和对象使用 const 来声明",[14,53887,53888],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[782,53890,53892],{"id":53891},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[18,53894,53896],{"id":53895},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53898,53899,53902],{},[46,53900,53901],{},"document"," = HTML 文件解析后的对象化表示；",[14,53904,53905,53907],{},[46,53906,53901],{}," ≠ HTML 文件本身",[14,53909,53910,53915],{},[112,53911,53912],{},[46,53913,53914],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53917,53918,53922],{},[112,53919,53920],{},[46,53921,53901],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53924,53925],{},"document实际上为window.document的简写",[18,53927,53929],{"id":53928},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53931,53932],{},[25,53933],{"alt":27,"src":53934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53936,53937],{},[25,53938],{"alt":27,"src":53939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53941,53942],{},[25,53943],{"alt":27,"src":53944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53946,53947],{},"console.dir()",[14,53949,53950],{},"dir用来打印对象",[742,53952,53953,53956,53959],{},[33,53954,53955],{},"任何一个标签，都是一个对象",[33,53957,53958],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[33,53960,53961],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53963,53964],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[18,53966,53968],{"id":53967},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53970,53971],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53973,53974],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53976,53977],{},[112,53978,53979],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[30,53981,53982],{},[33,53983,53984],{},"利用CSS选择器来获取标签元素",[14,53986,53987],{},[25,53988],{"alt":27,"src":53989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53991,53992],{},"里边的选择器必须必须加引号！！！",[14,53994,53995],{},"只选择第一个元素",[40,53997,53999],{"className":53598,"code":53998,"language":53600,"meta":27,"style":27},"\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",[46,54000,54001,54009,54030,54049,54057,54062,54067,54072,54080],{"__ignoreMap":27},[49,54002,54003,54005,54007],{"class":51,"line":52},[49,54004,1739],{"class":73},[49,54006,52331],{"class":51831},[49,54008,51838],{"class":73},[49,54010,54011,54013,54015,54018,54020,54023,54026,54028],{"class":51,"line":63},[49,54012,52675],{"class":73},[49,54014,52142],{"class":51831},[49,54016,54017],{"class":55}," class",[49,54019,78],{"class":73},[49,54021,54022],{"class":59},"\"box\"",[49,54024,54025],{"class":73},">123\u003C\u002F",[49,54027,52142],{"class":51831},[49,54029,51838],{"class":73},[49,54031,54032,54034,54036,54038,54040,54042,54045,54047],{"class":51,"line":70},[49,54033,52675],{"class":73},[49,54035,52142],{"class":51831},[49,54037,54017],{"class":55},[49,54039,78],{"class":73},[49,54041,54022],{"class":59},[49,54043,54044],{"class":73},">456\u003C\u002F",[49,54046,52142],{"class":51831},[49,54048,51838],{"class":73},[49,54050,54051,54053,54055],{"class":51,"line":219},[49,54052,52675],{"class":73},[49,54054,52344],{"class":51831},[49,54056,51838],{"class":73},[49,54058,54059],{"class":51,"line":233},[49,54060,54061],{"class":73},"    \u002F\u002F 1.获取匹配的第一个元素\n",[49,54063,54064],{"class":51,"line":241},[49,54065,54066],{"class":73},"    const box = document.querySelector('div')\n",[49,54068,54069],{"class":51,"line":1920},[49,54070,54071],{"class":73},"    console.dir(box)\n",[49,54073,54074,54076,54078],{"class":51,"line":2011},[49,54075,52948],{"class":73},[49,54077,52344],{"class":51831},[49,54079,51838],{"class":73},[49,54081,54082,54084,54086],{"class":51,"line":2017},[49,54083,52316],{"class":73},[49,54085,52331],{"class":51831},[49,54087,51838],{"class":73},[14,54089,54090],{},"只选123，不选456",[14,54092,54093],{},[25,54094],{"alt":27,"src":54095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,54097,54098],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,54100,54101],{},[25,54102],{"alt":27,"src":54103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,54105,54106],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,54108,54109],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[30,54111,54112],{"start":63},[33,54113,54114],{},"其他方法来获取标签元素",[14,54116,54117],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,54119,54120],{},[25,54121],{"alt":27,"src":54122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[18,54124,54126],{"id":54125},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,54128,54129],{},"设置修改DOM元素内容有两种方式：",[742,54131,54132,54135,54138,54141],{},[33,54133,54134],{},"元素.innerText=''",[33,54136,54137],{},"元素.innerHTML=''",[33,54139,54140],{},"不写字符串输出数字也是可以的",[33,54142,54143],{},"元素.innerHtml=1",[130,54145,54147],{"id":54146},"_3131-innertext","3.1.3.1 innerText",[14,54149,54150],{},[25,54151],{"alt":27,"src":54152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,54154,54155],{},"思路：实现了修改盒子中的内容！",[14,54157,54158],{},"它只显示纯文本，不解析标签",[130,54160,54162],{"id":54161},"_3132-innerhtml","3.1.3.2 innerHTML",[14,54164,54165],{},[25,54166],{"alt":27,"src":54167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,54169,54170],{},"相比于innerText，他的强大之处在于可以解析标签",[18,54172,54174],{"id":54173},"_314-操作元素属性","3.1.4 操作元素属性",[130,54176,54178],{"id":54177},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,54180,54181],{},[25,54182],{"alt":27,"src":54183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[130,54185,54187],{"id":54186},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,54189,54190],{},[25,54191],{"alt":27,"src":54192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,54194,54195],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,54197,54198],{},"div.style.backgroundColor = 'hotpink'",[14,54200,54201],{},"如果按照css的写法，-表示减，就会出错",[14,54203,54204],{},"body元素不需要再获取，直接用就行！！！！！！",[14,54206,54207],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,54209,54210],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,54212,54213],{},[25,54214],{"alt":27,"src":54215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,54217,54218],{},[25,54219],{"alt":27,"src":54220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[30,54222,54223,54226,54229,54232,54235,54238],{},[33,54224,54225],{},"className这个方式就是修改很多样式的时候来使用的！",[33,54227,54228],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[33,54230,54231],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[33,54233,54234],{},"className为属性名，如果还用class的话就导致与关键字冲突",[33,54236,54237],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[33,54239,54240,54241,54246],{},"解析标签的时候就变为了",[52142,54242],{"className":54243},[54244,54245],"nav","box",[54247,54248],"br",{},[14,54250,54251],{},"例子：",[52142,54253],{"className":54254},[54244],[52344,54256,54257],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,54259,54260],{},[25,54261],{"alt":27,"src":54262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,54264,54265],{},"追加和删除类名用classList",[14,54267,54268],{},"常用于类似于开关的操作",[14,54270,54271],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,54273,54274],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[130,54276,54278],{"id":54277},"_3143-牢记点","3.1.4.3 牢记点",[30,54280,54281,54284,54287,54290,54293,54296,54299,54302,54305],{},[33,54282,54283],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[33,54285,54286],{},"使用style属性操作css时不要忘记引号",[33,54288,54289],{},"使用className或者classList时也不要忘记引号",[33,54291,54292],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[33,54294,54295],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[33,54297,54298],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[33,54300,54301],{},"若： let arr=['1','2',3] arr[0]=1",[33,54303,54304],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[33,54306,54307],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[18,54309,54311],{"id":54310},"_315-操作表单元素","3.1.5 操作表单元素",[30,54313,54314],{},[33,54315,54316],{},"天生的属性",[14,54318,54319],{},[25,54320],{"alt":27,"src":54321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,54323,54324],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,54326,54327],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,54329,54330],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,54332,54333],{},[25,54334],{"alt":27,"src":54335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[40,54337,54339],{"className":51164,"code":54338,"language":51166,"meta":27,"style":27},"在复选框中如果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",[46,54340,54341,54346,54378,54383,54388,54393,54398,54402,54407,54412,54429,54441,54446],{"__ignoreMap":27},[49,54342,54343],{"class":51,"line":52},[49,54344,54345],{"class":73},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[49,54347,54348,54350,54353,54356,54358,54361,54363,54365,54367,54369,54371,54373,54376],{"class":51,"line":63},[49,54349,1739],{"class":73},[49,54351,54352],{"class":51831},"input",[49,54354,54355],{"class":55}," type",[49,54357,78],{"class":73},[49,54359,54360],{"class":59},"\"checkbox\"",[49,54362,15617],{"class":55},[49,54364,78],{"class":73},[49,54366,8349],{"class":59},[49,54368,15656],{"class":55},[49,54370,78],{"class":73},[49,54372,8349],{"class":59},[49,54374,54375],{"class":55}," checked",[49,54377,51838],{"class":73},[49,54379,54380],{"class":51,"line":70},[49,54381,54382],{"class":73},"不选的话：\n",[49,54384,54385],{"class":51,"line":219},[49,54386,54387],{"class":73},"const input = document.querySelector('input')\n",[49,54389,54390],{"class":51,"line":233},[49,54391,54392],{"class":73},"input.checked=false\n",[49,54394,54395],{"class":51,"line":241},[49,54396,54397],{"class":73},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[49,54399,54400],{"class":51,"line":1920},[49,54401,399],{"emptyLinePlaceholder":398},[49,54403,54404],{"class":51,"line":2011},[49,54405,54406],{"class":73},"禁用按钮：\n",[49,54408,54409],{"class":51,"line":2017},[49,54410,54411],{"class":73},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[49,54413,54414,54416,54419,54422,54425,54427],{"class":51,"line":2029},[49,54415,1739],{"class":73},[49,54417,54418],{"class":51831},"button",[49,54420,54421],{"class":55}," disabled",[49,54423,54424],{"class":73},">点击\u003C\u002F",[49,54426,54418],{"class":51831},[49,54428,51838],{"class":73},[49,54430,54431,54433,54435,54437,54439],{"class":51,"line":2311},[49,54432,1739],{"class":73},[49,54434,54418],{"class":51831},[49,54436,54424],{"class":73},[49,54438,54418],{"class":51831},[49,54440,51838],{"class":73},[49,54442,54443],{"class":51,"line":2316},[49,54444,54445],{"class":73},"const bt = document.querySelector('button')\n",[49,54447,54448],{"class":51,"line":2322},[49,54449,54450],{"class":73},"bt.disabled = false\n",[30,54452,54453],{"start":63},[33,54454,54455],{},"自定义属性",[14,54457,54458],{},[25,54459],{"alt":27,"src":54460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[40,54462,54464],{"className":53598,"code":54463,"language":53600,"meta":27,"style":27},"\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",[46,54465,54466,54474,54502,54521,54540,54559,54578,54586,54591,54596,54601,54606,54614],{"__ignoreMap":27},[49,54467,54468,54470,54472],{"class":51,"line":52},[49,54469,1739],{"class":73},[49,54471,52331],{"class":51831},[49,54473,51838],{"class":73},[49,54475,54476,54478,54480,54483,54485,54487,54490,54492,54495,54498,54500],{"class":51,"line":63},[49,54477,52675],{"class":73},[49,54479,52142],{"class":51831},[49,54481,54482],{"class":55}," data-id",[49,54484,78],{"class":73},[49,54486,4375],{"class":59},[49,54488,54489],{"class":55}," data-spm",[49,54491,78],{"class":73},[49,54493,54494],{"class":59},"\"我不知道\"",[49,54496,54497],{"class":73},">1\u003C\u002F",[49,54499,52142],{"class":51831},[49,54501,51838],{"class":73},[49,54503,54504,54506,54508,54510,54512,54514,54517,54519],{"class":51,"line":70},[49,54505,52675],{"class":73},[49,54507,52142],{"class":51831},[49,54509,54482],{"class":55},[49,54511,78],{"class":73},[49,54513,4398],{"class":59},[49,54515,54516],{"class":73},">2\u003C\u002F",[49,54518,52142],{"class":51831},[49,54520,51838],{"class":73},[49,54522,54523,54525,54527,54529,54531,54533,54536,54538],{"class":51,"line":219},[49,54524,52675],{"class":73},[49,54526,52142],{"class":51831},[49,54528,54482],{"class":55},[49,54530,78],{"class":73},[49,54532,4411],{"class":59},[49,54534,54535],{"class":73},">3\u003C\u002F",[49,54537,52142],{"class":51831},[49,54539,51838],{"class":73},[49,54541,54542,54544,54546,54548,54550,54552,54555,54557],{"class":51,"line":233},[49,54543,52675],{"class":73},[49,54545,52142],{"class":51831},[49,54547,54482],{"class":55},[49,54549,78],{"class":73},[49,54551,4424],{"class":59},[49,54553,54554],{"class":73},">4\u003C\u002F",[49,54556,52142],{"class":51831},[49,54558,51838],{"class":73},[49,54560,54561,54563,54565,54567,54569,54571,54574,54576],{"class":51,"line":241},[49,54562,52675],{"class":73},[49,54564,52142],{"class":51831},[49,54566,54482],{"class":55},[49,54568,78],{"class":73},[49,54570,4445],{"class":59},[49,54572,54573],{"class":73},">5\u003C\u002F",[49,54575,52142],{"class":51831},[49,54577,51838],{"class":73},[49,54579,54580,54582,54584],{"class":51,"line":1920},[49,54581,52675],{"class":73},[49,54583,52344],{"class":51831},[49,54585,51838],{"class":73},[49,54587,54588],{"class":51,"line":2011},[49,54589,54590],{"class":73},"    const one = document.querySelector('div')\n",[49,54592,54593],{"class":51,"line":2017},[49,54594,54595],{"class":73},"    console.log(one.dataset)\n",[49,54597,54598],{"class":51,"line":2029},[49,54599,54600],{"class":73},"    console.log(one.dataset.id)\n",[49,54602,54603],{"class":51,"line":2311},[49,54604,54605],{"class":73},"    console.log(one.dataset.spm)\n",[49,54607,54608,54610,54612],{"class":51,"line":2316},[49,54609,52948],{"class":73},[49,54611,52344],{"class":51831},[49,54613,51838],{"class":73},[49,54615,54616,54618,54620],{"class":51,"line":2322},[49,54617,52316],{"class":73},[49,54619,52331],{"class":51831},[49,54621,51838],{"class":73},[14,54623,54624],{},[25,54625],{"alt":27,"src":54626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54628,54629],{},"document.querySelector选择的是第一个对象（元素）",[18,54631,54633],{"id":54632},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54635,54636],{},[25,54637],{"alt":27,"src":54638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54640,54641],{},[25,54642],{"alt":27,"src":54643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54645,54646],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52344,54648,54649],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54651,54652],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52344,54654,54655],{},"\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",[14,54657,54658],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54660,54661],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54663,54664],{},"单位为毫秒！！！",[14,54666,54667],{},"可以搭配匿名函数来用！！！",[14,54669,54670],{},"setInterval(function () {",[14,54672,54673],{},"alert('两秒执行一次')",[14,54675,54676],{},"}, 2000)",[14,54678,54679],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54681,54682],{},"function fn() {",[14,54684,54685],{},"document.write(1)",[14,54687,1775],{},[14,54689,54690],{},"setInterval(fn, 1000)",[14,54692,54693],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54695,54696],{},"setInterval('fn()', 1000)",[14,54698,54699],{},[25,54700],{"alt":27,"src":54701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[130,54703,54705],{"id":54704},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[40,54707,54709],{"className":51164,"code":54708,"language":51166,"meta":27,"style":27},"\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",[46,54710,54711,54721,54735,54739,54747,54761,54781,54793,54801,54805,54813,54850,54855,54860,54865,54873,54881,54903,54911,54916,54938,54943,54948,54959,54964,54984,54992,55007,55022,55033,55038,55048,55058,55062,55071,55075,55083,55091,55095],{"__ignoreMap":27},[49,54712,54713,54715,54717,54719],{"class":51,"line":52},[49,54714,51828],{"class":73},[49,54716,51832],{"class":51831},[49,54718,51835],{"class":55},[49,54720,51838],{"class":73},[49,54722,54723,54725,54727,54729,54731,54733],{"class":51,"line":63},[49,54724,1739],{"class":73},[49,54726,51166],{"class":51831},[49,54728,51847],{"class":55},[49,54730,78],{"class":73},[49,54732,51852],{"class":59},[49,54734,51838],{"class":73},[49,54736,54737],{"class":51,"line":70},[49,54738,399],{"emptyLinePlaceholder":398},[49,54740,54741,54743,54745],{"class":51,"line":219},[49,54742,1739],{"class":73},[49,54744,51865],{"class":51831},[49,54746,51838],{"class":73},[49,54748,54749,54751,54753,54755,54757,54759],{"class":51,"line":233},[49,54750,52675],{"class":73},[49,54752,51875],{"class":51831},[49,54754,51878],{"class":55},[49,54756,78],{"class":73},[49,54758,51883],{"class":59},[49,54760,51838],{"class":73},[49,54762,54763,54765,54767,54769,54771,54773,54775,54777,54779],{"class":51,"line":241},[49,54764,52675],{"class":73},[49,54766,51875],{"class":51831},[49,54768,15617],{"class":55},[49,54770,78],{"class":73},[49,54772,51922],{"class":59},[49,54774,51902],{"class":55},[49,54776,78],{"class":73},[49,54778,51929],{"class":59},[49,54780,51838],{"class":73},[49,54782,54783,54785,54787,54789,54791],{"class":51,"line":1920},[49,54784,52675],{"class":73},[49,54786,51938],{"class":51831},[49,54788,51941],{"class":73},[49,54790,51938],{"class":51831},[49,54792,51838],{"class":73},[49,54794,54795,54797,54799],{"class":51,"line":2011},[49,54796,52316],{"class":73},[49,54798,51865],{"class":51831},[49,54800,51838],{"class":73},[49,54802,54803],{"class":51,"line":2017},[49,54804,399],{"emptyLinePlaceholder":398},[49,54806,54807,54809,54811],{"class":51,"line":2029},[49,54808,1739],{"class":73},[49,54810,52331],{"class":51831},[49,54812,51838],{"class":73},[49,54814,54815,54817,54820,54822,54824,54826,54828,54830,54832,54835,54837,54840,54843,54845,54848],{"class":51,"line":2311},[49,54816,52675],{"class":73},[49,54818,54819],{"class":51831},"textarea",[49,54821,15617],{"class":55},[49,54823,78],{"class":73},[49,54825,8349],{"class":59},[49,54827,15656],{"class":55},[49,54829,78],{"class":73},[49,54831,8349],{"class":59},[49,54833,54834],{"class":55}," cols",[49,54836,78],{"class":73},[49,54838,54839],{"class":59},"\"30\"",[49,54841,54842],{"class":55}," rows",[49,54844,78],{"class":73},[49,54846,54847],{"class":59},"\"10\"",[49,54849,51838],{"class":73},[49,54851,54852],{"class":51,"line":2316},[49,54853,54854],{"class":73},"        用户注册协议\n",[49,54856,54857],{"class":51,"line":2322},[49,54858,54859],{"class":73},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[49,54861,54862],{"class":51,"line":2327},[49,54863,54864],{"class":73},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[49,54866,54867,54869,54871],{"class":51,"line":2341},[49,54868,52307],{"class":73},[49,54870,54819],{"class":51831},[49,54872,51838],{"class":73},[49,54874,54875,54877,54879],{"class":51,"line":2346},[49,54876,52675],{"class":73},[49,54878,54247],{"class":51831},[49,54880,51838],{"class":73},[49,54882,54883,54885,54887,54889,54891,54894,54896,54899,54901],{"class":51,"line":2352},[49,54884,52675],{"class":73},[49,54886,54418],{"class":51831},[49,54888,54017],{"class":55},[49,54890,78],{"class":73},[49,54892,54893],{"class":59},"\"btn\"",[49,54895,54421],{"class":55},[49,54897,54898],{"class":73},">我已经阅读用户协议(5)\u003C\u002F",[49,54900,54418],{"class":51831},[49,54902,51838],{"class":73},[49,54904,54905,54907,54909],{"class":51,"line":2373},[49,54906,52675],{"class":73},[49,54908,52344],{"class":51831},[49,54910,51838],{"class":73},[49,54912,54913],{"class":51,"line":2378},[49,54914,54915],{"class":66},"    \u002F\u002F 1. 获取元素\n",[49,54917,54918,54920,54923,54925,54928,54931,54933,54936],{"class":51,"line":2392},[49,54919,11918],{"class":77},[49,54921,54922],{"class":159}," btn",[49,54924,14261],{"class":77},[49,54926,54927],{"class":73}," document.",[49,54929,54930],{"class":55},"querySelector",[49,54932,841],{"class":73},[49,54934,54935],{"class":59},"'.btn'",[49,54937,847],{"class":73},[49,54939,54940],{"class":51,"line":2397},[49,54941,54942],{"class":66},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[49,54944,54945],{"class":51,"line":2426},[49,54946,54947],{"class":66},"    \u002F\u002F 2. 倒计时\n",[49,54949,54950,54952,54954,54956],{"class":51,"line":2431},[49,54951,52750],{"class":77},[49,54953,10135],{"class":73},[49,54955,78],{"class":77},[49,54957,54958],{"class":159}," 5\n",[49,54960,54961],{"class":51,"line":2448},[49,54962,54963],{"class":66},"    \u002F\u002F 2.1 开启定时器\n",[49,54965,54966,54968,54971,54973,54976,54978,54981],{"class":51,"line":2453},[49,54967,52750],{"class":77},[49,54969,54970],{"class":73}," n ",[49,54972,78],{"class":77},[49,54974,54975],{"class":55}," setInterval",[49,54977,841],{"class":73},[49,54979,54980],{"class":77},"function",[49,54982,54983],{"class":73}," () {\n",[49,54985,54986,54989],{"class":51,"line":2458},[49,54987,54988],{"class":73},"      i",[49,54990,54991],{"class":77},"--\n",[49,54993,54994,54997,54999,55002,55004],{"class":51,"line":2463},[49,54995,54996],{"class":73},"      btn.innerHTML ",[49,54998,78],{"class":77},[49,55000,55001],{"class":59}," `我已经阅读用户协议(${",[49,55003,1270],{"class":73},[49,55005,55006],{"class":59},"})`\n",[49,55008,55009,55012,55015,55018,55020],{"class":51,"line":2477},[49,55010,55011],{"class":77},"      if",[49,55013,55014],{"class":73}," (i ",[49,55016,55017],{"class":77},"===",[49,55019,4790],{"class":159},[49,55021,13139],{"class":73},[49,55023,55024,55027,55030],{"class":51,"line":2482},[49,55025,55026],{"class":55},"        clearInterval",[49,55028,55029],{"class":73},"(n)  ",[49,55031,55032],{"class":66},"\u002F\u002F 关闭定时器\n",[49,55034,55035],{"class":51,"line":3274},[49,55036,55037],{"class":66},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[49,55039,55040,55043,55045],{"class":51,"line":3288},[49,55041,55042],{"class":73},"        btn.disabled ",[49,55044,78],{"class":77},[49,55046,55047],{"class":159}," false\n",[49,55049,55050,55053,55055],{"class":51,"line":3296},[49,55051,55052],{"class":73},"        btn.innerHTML ",[49,55054,78],{"class":77},[49,55056,55057],{"class":59}," '同意'\n",[49,55059,55060],{"class":51,"line":3301},[49,55061,52929],{"class":73},[49,55063,55064,55067,55069],{"class":51,"line":3307},[49,55065,55066],{"class":73},"    }, ",[49,55068,7107],{"class":159},[49,55070,847],{"class":73},[49,55072,55073],{"class":51,"line":3313},[49,55074,399],{"emptyLinePlaceholder":398},[49,55076,55077,55079,55081],{"class":51,"line":3318},[49,55078,52948],{"class":73},[49,55080,52344],{"class":51831},[49,55082,51838],{"class":73},[49,55084,55085,55087,55089],{"class":51,"line":8645},[49,55086,52316],{"class":73},[49,55088,52331],{"class":51831},[49,55090,51838],{"class":73},[49,55092,55093],{"class":51,"line":8669},[49,55094,399],{"emptyLinePlaceholder":398},[49,55096,55097,55099,55101],{"class":51,"line":8674},[49,55098,52316],{"class":73},[49,55100,51166],{"class":51831},[49,55102,51838],{"class":73},[14,55104,55105],{},"不要一直想着用死循环,避免死循环",[14,55107,55108,55111],{},[46,55109,55110],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[130,55113,55115],{"id":55114},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[30,55117,55118],{},[33,55119,55120],{},"法1",[40,55122,55124],{"className":51164,"code":55123,"language":51166,"meta":27,"style":27},"\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",[46,55125,55126,55136,55150,55154,55162,55176,55196,55208,55216,55222,55233,55244,55248,55252,55259,55271,55275,55279,55286,55298,55312,55325,55339,55343,55347,55354,55365,55376,55387,55399,55411,55423,55427,55431,55439,55449,55462,55474,55487,55491,55495,55502,55512,55524,55536,55547,55558,55568,55580,55592,55596,55600,55609,55621,55633,55661,55674,55678,55682,55689,55700,55704,55712,55720,55724,55732,55746,55761,55785,55793,55808,55821,55829,55850,55862,55874,55886,55898,55910,55922,55934,55943,55951,55959,55967,55979,56002,56021,56040,56059,56078,56097,56116,56136,56140,56160,56179,56199,56220,56231,56248,56258,56268,56278,56283,56288,56293,56298,56323,56336,56340,56363,56367,56375,56383,56391,56395],{"__ignoreMap":27},[49,55127,55128,55130,55132,55134],{"class":51,"line":52},[49,55129,51828],{"class":73},[49,55131,51832],{"class":51831},[49,55133,51835],{"class":55},[49,55135,51838],{"class":73},[49,55137,55138,55140,55142,55144,55146,55148],{"class":51,"line":63},[49,55139,1739],{"class":73},[49,55141,51166],{"class":51831},[49,55143,51847],{"class":55},[49,55145,78],{"class":73},[49,55147,51852],{"class":59},[49,55149,51838],{"class":73},[49,55151,55152],{"class":51,"line":70},[49,55153,399],{"emptyLinePlaceholder":398},[49,55155,55156,55158,55160],{"class":51,"line":219},[49,55157,1739],{"class":73},[49,55159,51865],{"class":51831},[49,55161,51838],{"class":73},[49,55163,55164,55166,55168,55170,55172,55174],{"class":51,"line":233},[49,55165,52675],{"class":73},[49,55167,51875],{"class":51831},[49,55169,51878],{"class":55},[49,55171,78],{"class":73},[49,55173,51883],{"class":59},[49,55175,51838],{"class":73},[49,55177,55178,55180,55182,55184,55186,55188,55190,55192,55194],{"class":51,"line":241},[49,55179,52675],{"class":73},[49,55181,51875],{"class":51831},[49,55183,15617],{"class":55},[49,55185,78],{"class":73},[49,55187,51922],{"class":59},[49,55189,51902],{"class":55},[49,55191,78],{"class":73},[49,55193,51929],{"class":59},[49,55195,51838],{"class":73},[49,55197,55198,55200,55202,55204,55206],{"class":51,"line":1920},[49,55199,52675],{"class":73},[49,55201,51938],{"class":51831},[49,55203,51941],{"class":73},[49,55205,51938],{"class":51831},[49,55207,51838],{"class":73},[49,55209,55210,55212,55214],{"class":51,"line":2011},[49,55211,52675],{"class":73},[49,55213,757],{"class":51831},[49,55215,51838],{"class":73},[49,55217,55218,55220],{"class":51,"line":2017},[49,55219,7100],{"class":51831},[49,55221,16269],{"class":73},[49,55223,55224,55227,55229,55231],{"class":51,"line":2029},[49,55225,55226],{"class":159},"      padding",[49,55228,51968],{"class":73},[49,55230,1021],{"class":159},[49,55232,1990],{"class":73},[49,55234,55235,55238,55240,55242],{"class":51,"line":2311},[49,55236,55237],{"class":159},"      margin",[49,55239,51968],{"class":73},[49,55241,1021],{"class":159},[49,55243,1990],{"class":73},[49,55245,55246],{"class":51,"line":2316},[49,55247,2885],{"class":73},[49,55249,55250],{"class":51,"line":2322},[49,55251,399],{"emptyLinePlaceholder":398},[49,55253,55254,55257],{"class":51,"line":2327},[49,55255,55256],{"class":51831},"    li",[49,55258,16269],{"class":73},[49,55260,55261,55264,55266,55269],{"class":51,"line":2341},[49,55262,55263],{"class":159},"      list-style",[49,55265,51968],{"class":73},[49,55267,55268],{"class":159},"none",[49,55270,1990],{"class":73},[49,55272,55273],{"class":51,"line":2346},[49,55274,2885],{"class":73},[49,55276,55277],{"class":51,"line":2352},[49,55278,399],{"emptyLinePlaceholder":398},[49,55280,55281,55284],{"class":51,"line":2373},[49,55282,55283],{"class":55},"    .box",[49,55285,16269],{"class":73},[49,55287,55288,55291,55293,55296],{"class":51,"line":2378},[49,55289,55290],{"class":159},"      position",[49,55292,51968],{"class":73},[49,55294,55295],{"class":159},"relative",[49,55297,1990],{"class":73},[49,55299,55300,55303,55305,55308,55310],{"class":51,"line":2392},[49,55301,55302],{"class":159},"      width",[49,55304,51968],{"class":73},[49,55306,55307],{"class":159},"976",[49,55309,52023],{"class":77},[49,55311,1990],{"class":73},[49,55313,55314,55317,55319,55321,55323],{"class":51,"line":2397},[49,55315,55316],{"class":159},"      height",[49,55318,51968],{"class":73},[49,55320,2238],{"class":159},[49,55322,52023],{"class":77},[49,55324,1990],{"class":73},[49,55326,55327,55329,55331,55333,55335,55337],{"class":51,"line":2426},[49,55328,55237],{"class":159},[49,55330,51968],{"class":73},[49,55332,1140],{"class":159},[49,55334,52023],{"class":77},[49,55336,52087],{"class":159},[49,55338,1990],{"class":73},[49,55340,55341],{"class":51,"line":2431},[49,55342,2885],{"class":73},[49,55344,55345],{"class":51,"line":2448},[49,55346,399],{"emptyLinePlaceholder":398},[49,55348,55349,55352],{"class":51,"line":2453},[49,55350,55351],{"class":55},"    .slider-footer",[49,55353,16269],{"class":73},[49,55355,55356,55358,55360,55363],{"class":51,"line":2458},[49,55357,55290],{"class":159},[49,55359,51968],{"class":73},[49,55361,55362],{"class":159},"absolute",[49,55364,1990],{"class":73},[49,55366,55367,55370,55372,55374],{"class":51,"line":2463},[49,55368,55369],{"class":159},"      left",[49,55371,51968],{"class":73},[49,55373,1021],{"class":159},[49,55375,1990],{"class":73},[49,55377,55378,55381,55383,55385],{"class":51,"line":2477},[49,55379,55380],{"class":159},"      bottom",[49,55382,51968],{"class":73},[49,55384,1021],{"class":159},[49,55386,1990],{"class":73},[49,55388,55389,55391,55393,55395,55397],{"class":51,"line":2482},[49,55390,55302],{"class":159},[49,55392,51968],{"class":73},[49,55394,1140],{"class":159},[49,55396,1157],{"class":77},[49,55398,1990],{"class":73},[49,55400,55401,55403,55405,55407,55409],{"class":51,"line":3274},[49,55402,55316],{"class":159},[49,55404,51968],{"class":73},[49,55406,1404],{"class":159},[49,55408,1157],{"class":77},[49,55410,1990],{"class":73},[49,55412,55413,55416,55418,55421],{"class":51,"line":3288},[49,55414,55415],{"class":159},"      background-color",[49,55417,51968],{"class":73},[49,55419,55420],{"class":159},"skyblue",[49,55422,1990],{"class":73},[49,55424,55425],{"class":51,"line":3296},[49,55426,2885],{"class":73},[49,55428,55429],{"class":51,"line":3301},[49,55430,399],{"emptyLinePlaceholder":398},[49,55432,55433,55435,55437],{"class":51,"line":3307},[49,55434,55351],{"class":55},[49,55436,7522],{"class":51831},[49,55438,16269],{"class":73},[49,55440,55441,55443,55445,55447],{"class":51,"line":3313},[49,55442,55290],{"class":159},[49,55444,51968],{"class":73},[49,55446,55362],{"class":159},[49,55448,1990],{"class":73},[49,55450,55451,55454,55456,55458,55460],{"class":51,"line":3318},[49,55452,55453],{"class":159},"      font-size",[49,55455,51968],{"class":73},[49,55457,1730],{"class":159},[49,55459,52023],{"class":77},[49,55461,1990],{"class":73},[49,55463,55464,55466,55468,55470,55472],{"class":51,"line":8645},[49,55465,55369],{"class":159},[49,55467,51968],{"class":73},[49,55469,1529],{"class":159},[49,55471,52023],{"class":77},[49,55473,1990],{"class":73},[49,55475,55476,55479,55481,55483,55485],{"class":51,"line":8669},[49,55477,55478],{"class":159},"      top",[49,55480,51968],{"class":73},[49,55482,1148],{"class":159},[49,55484,52023],{"class":77},[49,55486,1990],{"class":73},[49,55488,55489],{"class":51,"line":8674},[49,55490,2885],{"class":73},[49,55492,55493],{"class":51,"line":8680},[49,55494,399],{"emptyLinePlaceholder":398},[49,55496,55497,55500],{"class":51,"line":8707},[49,55498,55499],{"class":51831},"    ul",[49,55501,16269],{"class":73},[49,55503,55504,55506,55508,55510],{"class":51,"line":8712},[49,55505,55290],{"class":159},[49,55507,51968],{"class":73},[49,55509,55362],{"class":159},[49,55511,1990],{"class":73},[49,55513,55514,55516,55518,55520,55522],{"class":51,"line":8718},[49,55515,55478],{"class":159},[49,55517,51968],{"class":73},[49,55519,1610],{"class":159},[49,55521,52023],{"class":77},[49,55523,1990],{"class":73},[49,55525,55526,55528,55530,55532,55534],{"class":51,"line":8730},[49,55527,55369],{"class":159},[49,55529,51968],{"class":73},[49,55531,1529],{"class":159},[49,55533,52023],{"class":77},[49,55535,1990],{"class":73},[49,55537,55538,55541,55543,55545],{"class":51,"line":8742},[49,55539,55540],{"class":159},"      display",[49,55542,51968],{"class":73},[49,55544,52008],{"class":159},[49,55546,1990],{"class":73},[49,55548,55549,55552,55554,55556],{"class":51,"line":8754},[49,55550,55551],{"class":159},"      justify-content",[49,55553,51968],{"class":73},[49,55555,52199],{"class":159},[49,55557,1990],{"class":73},[49,55559,55560,55562,55564,55566],{"class":51,"line":10413},[49,55561,55290],{"class":159},[49,55563,51968],{"class":73},[49,55565,55362],{"class":159},[49,55567,1990],{"class":73},[49,55569,55570,55572,55574,55576,55578],{"class":51,"line":10438},[49,55571,55302],{"class":159},[49,55573,51968],{"class":73},[49,55575,4689],{"class":159},[49,55577,52023],{"class":77},[49,55579,1990],{"class":73},[49,55581,55582,55584,55586,55588,55590],{"class":51,"line":10461},[49,55583,55316],{"class":159},[49,55585,51968],{"class":73},[49,55587,1529],{"class":159},[49,55589,52023],{"class":77},[49,55591,1990],{"class":73},[49,55593,55594],{"class":51,"line":10485},[49,55595,2885],{"class":73},[49,55597,55598],{"class":51,"line":10490},[49,55599,399],{"emptyLinePlaceholder":398},[49,55601,55602,55604,55607],{"class":51,"line":10495},[49,55603,55499],{"class":51831},[49,55605,55606],{"class":51831}," li",[49,55608,16269],{"class":73},[49,55610,55611,55613,55615,55617,55619],{"class":51,"line":10500},[49,55612,55302],{"class":159},[49,55614,51968],{"class":73},[49,55616,1529],{"class":159},[49,55618,52023],{"class":77},[49,55620,1990],{"class":73},[49,55622,55623,55625,55627,55629,55631],{"class":51,"line":10509},[49,55624,55316],{"class":159},[49,55626,51968],{"class":73},[49,55628,1529],{"class":159},[49,55630,52023],{"class":77},[49,55632,1990],{"class":73},[49,55634,55635,55637,55639,55642,55644,55646,55648,55650,55652,55654,55656,55659],{"class":51,"line":10514},[49,55636,55415],{"class":159},[49,55638,51968],{"class":73},[49,55640,55641],{"class":159},"rgba",[49,55643,841],{"class":73},[49,55645,1021],{"class":159},[49,55647,13132],{"class":73},[49,55649,1021],{"class":159},[49,55651,13132],{"class":73},[49,55653,1021],{"class":159},[49,55655,13132],{"class":73},[49,55657,55658],{"class":159},".4",[49,55660,3416],{"class":73},[49,55662,55663,55666,55668,55670,55672],{"class":51,"line":10520},[49,55664,55665],{"class":159},"      border-radius",[49,55667,51968],{"class":73},[49,55669,1275],{"class":159},[49,55671,52023],{"class":77},[49,55673,1990],{"class":73},[49,55675,55676],{"class":51,"line":10541},[49,55677,2885],{"class":73},[49,55679,55680],{"class":51,"line":10547},[49,55681,399],{"emptyLinePlaceholder":398},[49,55683,55684,55687],{"class":51,"line":10561},[49,55685,55686],{"class":55},"    .activate",[49,55688,16269],{"class":73},[49,55690,55691,55693,55695,55698],{"class":51,"line":10567},[49,55692,55415],{"class":159},[49,55694,51968],{"class":73},[49,55696,55697],{"class":159},"#f7f7f7",[49,55699,1990],{"class":73},[49,55701,55702],{"class":51,"line":10594},[49,55703,2885],{"class":73},[49,55705,55706,55708,55710],{"class":51,"line":10603},[49,55707,52948],{"class":73},[49,55709,757],{"class":51831},[49,55711,51838],{"class":73},[49,55713,55714,55716,55718],{"class":51,"line":10609},[49,55715,52316],{"class":73},[49,55717,51865],{"class":51831},[49,55719,51838],{"class":73},[49,55721,55722],{"class":51,"line":10617},[49,55723,399],{"emptyLinePlaceholder":398},[49,55725,55726,55728,55730],{"class":51,"line":10622},[49,55727,1739],{"class":73},[49,55729,52331],{"class":51831},[49,55731,51838],{"class":73},[49,55733,55734,55736,55738,55740,55742,55744],{"class":51,"line":17301},[49,55735,52675],{"class":73},[49,55737,52142],{"class":51831},[49,55739,54017],{"class":55},[49,55741,78],{"class":73},[49,55743,54022],{"class":59},[49,55745,51838],{"class":73},[49,55747,55748,55750,55752,55754,55756,55759],{"class":51,"line":17307},[49,55749,51872],{"class":73},[49,55751,52142],{"class":51831},[49,55753,54017],{"class":55},[49,55755,78],{"class":73},[49,55757,55758],{"class":59},"\"slider-wrapper\"",[49,55760,51838],{"class":73},[49,55762,55763,55766,55768,55771,55773,55776,55779,55781,55783],{"class":51,"line":17330},[49,55764,55765],{"class":73},"      \u003C",[49,55767,25],{"class":51831},[49,55769,55770],{"class":55}," src",[49,55772,78],{"class":73},[49,55774,55775],{"class":59},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[49,55777,55778],{"class":55}," alt",[49,55780,78],{"class":73},[49,55782,8349],{"class":59},[49,55784,51838],{"class":73},[49,55786,55787,55789,55791],{"class":51,"line":17336},[49,55788,52307],{"class":73},[49,55790,52142],{"class":51831},[49,55792,51838],{"class":73},[49,55794,55795,55797,55799,55801,55803,55806],{"class":51,"line":17359},[49,55796,51872],{"class":73},[49,55798,52142],{"class":51831},[49,55800,54017],{"class":55},[49,55802,78],{"class":73},[49,55804,55805],{"class":59},"\"slider-footer\"",[49,55807,51838],{"class":73},[49,55809,55810,55812,55814,55817,55819],{"class":51,"line":17373},[49,55811,55765],{"class":73},[49,55813,14],{"class":51831},[49,55815,55816],{"class":73},">对人类来说会不会太超前了?\u003C\u002F",[49,55818,14],{"class":51831},[49,55820,51838],{"class":73},[49,55822,55823,55825,55827],{"class":51,"line":17393},[49,55824,55765],{"class":73},[49,55826,742],{"class":51831},[49,55828,51838],{"class":73},[49,55830,55831,55834,55836,55838,55840,55843,55846,55848],{"class":51,"line":17399},[49,55832,55833],{"class":73},"        \u003C",[49,55835,33],{"class":51831},[49,55837,54017],{"class":55},[49,55839,78],{"class":73},[49,55841,55842],{"class":59},"\"activate\"",[49,55844,55845],{"class":73},">\u003C\u002F",[49,55847,33],{"class":51831},[49,55849,51838],{"class":73},[49,55851,55852,55854,55856,55858,55860],{"class":51,"line":17410},[49,55853,55833],{"class":73},[49,55855,33],{"class":51831},[49,55857,55845],{"class":73},[49,55859,33],{"class":51831},[49,55861,51838],{"class":73},[49,55863,55864,55866,55868,55870,55872],{"class":51,"line":17433},[49,55865,55833],{"class":73},[49,55867,33],{"class":51831},[49,55869,55845],{"class":73},[49,55871,33],{"class":51831},[49,55873,51838],{"class":73},[49,55875,55876,55878,55880,55882,55884],{"class":51,"line":17455},[49,55877,55833],{"class":73},[49,55879,33],{"class":51831},[49,55881,55845],{"class":73},[49,55883,33],{"class":51831},[49,55885,51838],{"class":73},[49,55887,55888,55890,55892,55894,55896],{"class":51,"line":17460},[49,55889,55833],{"class":73},[49,55891,33],{"class":51831},[49,55893,55845],{"class":73},[49,55895,33],{"class":51831},[49,55897,51838],{"class":73},[49,55899,55900,55902,55904,55906,55908],{"class":51,"line":17466},[49,55901,55833],{"class":73},[49,55903,33],{"class":51831},[49,55905,55845],{"class":73},[49,55907,33],{"class":51831},[49,55909,51838],{"class":73},[49,55911,55912,55914,55916,55918,55920],{"class":51,"line":17480},[49,55913,55833],{"class":73},[49,55915,33],{"class":51831},[49,55917,55845],{"class":73},[49,55919,33],{"class":51831},[49,55921,51838],{"class":73},[49,55923,55924,55926,55928,55930,55932],{"class":51,"line":17493},[49,55925,55833],{"class":73},[49,55927,33],{"class":51831},[49,55929,55845],{"class":73},[49,55931,33],{"class":51831},[49,55933,51838],{"class":73},[49,55935,55936,55939,55941],{"class":51,"line":17498},[49,55937,55938],{"class":73},"      \u003C\u002F",[49,55940,742],{"class":51831},[49,55942,51838],{"class":73},[49,55944,55945,55947,55949],{"class":51,"line":17512},[49,55946,52307],{"class":73},[49,55948,52142],{"class":51831},[49,55950,51838],{"class":73},[49,55952,55953,55955,55957],{"class":51,"line":17517},[49,55954,52948],{"class":73},[49,55956,52142],{"class":51831},[49,55958,51838],{"class":73},[49,55960,55961,55963,55965],{"class":51,"line":17523},[49,55962,52675],{"class":73},[49,55964,52344],{"class":51831},[49,55966,51838],{"class":73},[49,55968,55969,55971,55974,55976],{"class":51,"line":17528},[49,55970,11918],{"class":77},[49,55972,55973],{"class":159}," arrImage",[49,55975,14261],{"class":77},[49,55977,55978],{"class":73}," [\n",[49,55980,55981,55984,55987,55990,55993,55996,55999],{"class":51,"line":17542},[49,55982,55983],{"class":73},"      { url: ",[49,55985,55986],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[49,55988,55989],{"class":73},", title: ",[49,55991,55992],{"class":59},"'对人类来说会不会太超前了?'",[49,55994,55995],{"class":73},", color: ",[49,55997,55998],{"class":59},"'rgba(100,67,68)'",[49,56000,56001],{"class":73}," },\n",[49,56003,56004,56006,56009,56011,56014,56016,56019],{"class":51,"line":17547},[49,56005,55983],{"class":73},[49,56007,56008],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[49,56010,55989],{"class":73},[49,56012,56013],{"class":59},"'开启剑与雪的黑暗传说!'",[49,56015,55995],{"class":73},[49,56017,56018],{"class":59},"'rgba(43,35,26)'",[49,56020,56001],{"class":73},[49,56022,56023,56025,56028,56030,56033,56035,56038],{"class":51,"line":17552},[49,56024,55983],{"class":73},[49,56026,56027],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[49,56029,55989],{"class":73},[49,56031,56032],{"class":59},"'真正的jo厨出现了!'",[49,56034,55995],{"class":73},[49,56036,56037],{"class":59},"'rgba(36,31,33)'",[49,56039,56001],{"class":73},[49,56041,56042,56044,56047,56049,56052,56054,56057],{"class":51,"line":17566},[49,56043,55983],{"class":73},[49,56045,56046],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[49,56048,55989],{"class":73},[49,56050,56051],{"class":59},"'李玉刚:让世界通过b站看到东方大国文化'",[49,56053,55995],{"class":73},[49,56055,56056],{"class":59},"'rgba(139,98,66)'",[49,56058,56001],{"class":73},[49,56060,56061,56063,56066,56068,56071,56073,56076],{"class":51,"line":17578},[49,56062,55983],{"class":73},[49,56064,56065],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[49,56067,55989],{"class":73},[49,56069,56070],{"class":59},"'快来分享你的寒假日常吧'",[49,56072,55995],{"class":73},[49,56074,56075],{"class":59},"'rgba(67,90,92)'",[49,56077,56001],{"class":73},[49,56079,56080,56082,56085,56087,56090,56092,56095],{"class":51,"line":17583},[49,56081,55983],{"class":73},[49,56083,56084],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[49,56086,55989],{"class":73},[49,56088,56089],{"class":59},"'哔哩哔哩小年YEAR'",[49,56091,55995],{"class":73},[49,56093,56094],{"class":59},"'rgba(166,131,143)'",[49,56096,56001],{"class":73},[49,56098,56099,56101,56104,56106,56109,56111,56114],{"class":51,"line":17596},[49,56100,55983],{"class":73},[49,56102,56103],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[49,56105,55989],{"class":73},[49,56107,56108],{"class":59},"'一站式解决你的电脑配置问题'",[49,56110,55995],{"class":73},[49,56112,56113],{"class":59},"'rgba(53,29,25)'",[49,56115,56001],{"class":73},[49,56117,56118,56120,56123,56125,56128,56130,56133],{"class":51,"line":17601},[49,56119,55983],{"class":73},[49,56121,56122],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[49,56124,55989],{"class":73},[49,56126,56127],{"class":59},"'谁不想和小猫咪贴贴呢?'",[49,56129,55995],{"class":73},[49,56131,56132],{"class":59},"'rgba(99,72,114)'",[49,56134,56135],{"class":73}," }\n",[49,56137,56138],{"class":51,"line":17606},[49,56139,53640],{"class":73},[49,56141,56142,56144,56147,56149,56151,56153,56155,56158],{"class":51,"line":17611},[49,56143,11918],{"class":77},[49,56145,56146],{"class":159}," img",[49,56148,14261],{"class":77},[49,56150,54927],{"class":73},[49,56152,54930],{"class":55},[49,56154,841],{"class":73},[49,56156,56157],{"class":59},"'.slider-wrapper img'",[49,56159,847],{"class":73},[49,56161,56162,56164,56166,56168,56170,56172,56174,56177],{"class":51,"line":17624},[49,56163,11918],{"class":77},[49,56165,7522],{"class":159},[49,56167,14261],{"class":77},[49,56169,54927],{"class":73},[49,56171,54930],{"class":55},[49,56173,841],{"class":73},[49,56175,56176],{"class":59},"'.slider-footer p'",[49,56178,847],{"class":73},[49,56180,56181,56183,56186,56188,56190,56192,56194,56197],{"class":51,"line":17629},[49,56182,11918],{"class":77},[49,56184,56185],{"class":159}," color",[49,56187,14261],{"class":77},[49,56189,54927],{"class":73},[49,56191,54930],{"class":55},[49,56193,841],{"class":73},[49,56195,56196],{"class":59},"'.slider-footer'",[49,56198,847],{"class":73},[49,56200,56201,56203,56206,56208,56210,56213,56215,56218],{"class":51,"line":33164},[49,56202,11918],{"class":77},[49,56204,56205],{"class":159}," lis",[49,56207,14261],{"class":77},[49,56209,54927],{"class":73},[49,56211,56212],{"class":55},"querySelectorAll",[49,56214,841],{"class":73},[49,56216,56217],{"class":59},"'.slider-footer ul li'",[49,56219,847],{"class":73},[49,56221,56222,56224,56226,56228],{"class":51,"line":33170},[49,56223,52750],{"class":77},[49,56225,10135],{"class":73},[49,56227,78],{"class":77},[49,56229,56230],{"class":159}," 1\n",[49,56232,56233,56235,56238,56240,56242,56244,56246],{"class":51,"line":33176},[49,56234,52750],{"class":77},[49,56236,56237],{"class":73}," timer ",[49,56239,78],{"class":77},[49,56241,54975],{"class":55},[49,56243,841],{"class":73},[49,56245,54980],{"class":77},[49,56247,54983],{"class":73},[49,56249,56250,56253,56255],{"class":51,"line":33182},[49,56251,56252],{"class":73},"      img.src ",[49,56254,78],{"class":77},[49,56256,56257],{"class":73}," arrImage[i].url\n",[49,56259,56260,56263,56265],{"class":51,"line":33188},[49,56261,56262],{"class":73},"      p.innerHTML ",[49,56264,78],{"class":77},[49,56266,56267],{"class":73}," arrImage[i].title\n",[49,56269,56270,56273,56275],{"class":51,"line":33199},[49,56271,56272],{"class":73},"      color.style.backgroundColor ",[49,56274,78],{"class":77},[49,56276,56277],{"class":73}," arrImage[i].color\n",[49,56279,56280],{"class":51,"line":33205},[49,56281,56282],{"class":66},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[49,56284,56285],{"class":51,"line":33225},[49,56286,56287],{"class":66},"      \u002F\u002F li.classList.add('activate')\n",[49,56289,56290],{"class":51,"line":33231},[49,56291,56292],{"class":66},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[49,56294,56295],{"class":51,"line":33242},[49,56296,56297],{"class":66},"      \u002F\u002F lis[i].classList.remove('activate')\n",[49,56299,56300,56303,56305,56307,56310,56313,56316,56318,56321],{"class":51,"line":33248},[49,56301,56302],{"class":73},"      document.",[49,56304,54930],{"class":55},[49,56306,841],{"class":73},[49,56308,56309],{"class":59},"'.activate'",[49,56311,56312],{"class":73},")?.classList.",[49,56314,56315],{"class":55},"toggle",[49,56317,841],{"class":73},[49,56319,56320],{"class":59},"'activate'",[49,56322,847],{"class":73},[49,56324,56325,56328,56330,56332,56334],{"class":51,"line":33254},[49,56326,56327],{"class":73},"      lis[i].classList.",[49,56329,6031],{"class":55},[49,56331,841],{"class":73},[49,56333,56320],{"class":59},[49,56335,847],{"class":73},[49,56337,56338],{"class":51,"line":33260},[49,56339,399],{"emptyLinePlaceholder":398},[49,56341,56342,56345,56347,56349,56351,56353,56355,56357,56360],{"class":51,"line":33266},[49,56343,56344],{"class":73},"      i ",[49,56346,78],{"class":77},[49,56348,55014],{"class":73},[49,56350,1310],{"class":77},[49,56352,25807],{"class":159},[49,56354,14411],{"class":73},[49,56356,1157],{"class":77},[49,56358,56359],{"class":73}," arrImage.",[49,56361,56362],{"class":159},"length\n",[49,56364,56365],{"class":51,"line":33272},[49,56366,399],{"emptyLinePlaceholder":398},[49,56368,56369,56371,56373],{"class":51,"line":33278},[49,56370,55066],{"class":73},[49,56372,7107],{"class":159},[49,56374,847],{"class":73},[49,56376,56377,56379,56381],{"class":51,"line":33284},[49,56378,52948],{"class":73},[49,56380,52344],{"class":51831},[49,56382,51838],{"class":73},[49,56384,56385,56387,56389],{"class":51,"line":33304},[49,56386,52316],{"class":73},[49,56388,52331],{"class":51831},[49,56390,51838],{"class":73},[49,56392,56393],{"class":51,"line":33310},[49,56394,399],{"emptyLinePlaceholder":398},[49,56396,56397,56399,56401],{"class":51,"line":33326},[49,56398,52316],{"class":73},[49,56400,51166],{"class":51831},[49,56402,51838],{"class":73},[14,56404,56405],{},[25,56406],{"alt":27,"src":56407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,56409,56410],{},"?.就是短路保护,确保输出正常进行",[14,56412,56413],{},"不要忘记取余%,有时候可以用",[14,56415,56416],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[30,56418,56419],{"start":63},[33,56420,56421],{},"法2",[40,56423,56425],{"className":51164,"code":56424,"language":51166,"meta":27,"style":27},"\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",[46,56426,56427,56437,56451,56455,56463,56477,56497,56509,56517,56523,56533,56543,56547,56551,56557,56567,56571,56575,56581,56591,56603,56615,56629,56633,56637,56643,56653,56663,56673,56685,56697,56707,56711,56715,56723,56733,56745,56757,56769,56773,56777,56783,56793,56805,56817,56827,56837,56847,56859,56871,56875,56879,56887,56899,56911,56937,56949,56953,56957,56963,56973,56977,56985,56993,56997,57005,57019,57033,57053,57061,57075,57087,57095,57113,57125,57137,57149,57161,57173,57185,57197,57205,57213,57221,57229,57240,57256,57272,57288,57304,57320,57336,57352,57368,57372,57377,57395,57413,57423,57428,57433,57444,57450,57465,57474,57478,57483,57492,57497,57506,57511,57516,57521,57544,57574,57578,57586,57590,57598,57606,57610],{"__ignoreMap":27},[49,56428,56429,56431,56433,56435],{"class":51,"line":52},[49,56430,51828],{"class":73},[49,56432,51832],{"class":51831},[49,56434,51835],{"class":55},[49,56436,51838],{"class":73},[49,56438,56439,56441,56443,56445,56447,56449],{"class":51,"line":63},[49,56440,1739],{"class":73},[49,56442,51166],{"class":51831},[49,56444,51847],{"class":55},[49,56446,78],{"class":73},[49,56448,51852],{"class":59},[49,56450,51838],{"class":73},[49,56452,56453],{"class":51,"line":70},[49,56454,399],{"emptyLinePlaceholder":398},[49,56456,56457,56459,56461],{"class":51,"line":219},[49,56458,1739],{"class":73},[49,56460,51865],{"class":51831},[49,56462,51838],{"class":73},[49,56464,56465,56467,56469,56471,56473,56475],{"class":51,"line":233},[49,56466,52675],{"class":73},[49,56468,51875],{"class":51831},[49,56470,51878],{"class":55},[49,56472,78],{"class":73},[49,56474,51883],{"class":59},[49,56476,51838],{"class":73},[49,56478,56479,56481,56483,56485,56487,56489,56491,56493,56495],{"class":51,"line":241},[49,56480,52675],{"class":73},[49,56482,51875],{"class":51831},[49,56484,15617],{"class":55},[49,56486,78],{"class":73},[49,56488,51922],{"class":59},[49,56490,51902],{"class":55},[49,56492,78],{"class":73},[49,56494,51929],{"class":59},[49,56496,51838],{"class":73},[49,56498,56499,56501,56503,56505,56507],{"class":51,"line":1920},[49,56500,52675],{"class":73},[49,56502,51938],{"class":51831},[49,56504,51941],{"class":73},[49,56506,51938],{"class":51831},[49,56508,51838],{"class":73},[49,56510,56511,56513,56515],{"class":51,"line":2011},[49,56512,52675],{"class":73},[49,56514,757],{"class":51831},[49,56516,51838],{"class":73},[49,56518,56519,56521],{"class":51,"line":2017},[49,56520,7100],{"class":51831},[49,56522,16269],{"class":73},[49,56524,56525,56527,56529,56531],{"class":51,"line":2029},[49,56526,55226],{"class":159},[49,56528,51968],{"class":73},[49,56530,1021],{"class":159},[49,56532,1990],{"class":73},[49,56534,56535,56537,56539,56541],{"class":51,"line":2311},[49,56536,55237],{"class":159},[49,56538,51968],{"class":73},[49,56540,1021],{"class":159},[49,56542,1990],{"class":73},[49,56544,56545],{"class":51,"line":2316},[49,56546,2885],{"class":73},[49,56548,56549],{"class":51,"line":2322},[49,56550,399],{"emptyLinePlaceholder":398},[49,56552,56553,56555],{"class":51,"line":2327},[49,56554,55256],{"class":51831},[49,56556,16269],{"class":73},[49,56558,56559,56561,56563,56565],{"class":51,"line":2341},[49,56560,55263],{"class":159},[49,56562,51968],{"class":73},[49,56564,55268],{"class":159},[49,56566,1990],{"class":73},[49,56568,56569],{"class":51,"line":2346},[49,56570,2885],{"class":73},[49,56572,56573],{"class":51,"line":2352},[49,56574,399],{"emptyLinePlaceholder":398},[49,56576,56577,56579],{"class":51,"line":2373},[49,56578,55283],{"class":55},[49,56580,16269],{"class":73},[49,56582,56583,56585,56587,56589],{"class":51,"line":2378},[49,56584,55290],{"class":159},[49,56586,51968],{"class":73},[49,56588,55295],{"class":159},[49,56590,1990],{"class":73},[49,56592,56593,56595,56597,56599,56601],{"class":51,"line":2392},[49,56594,55302],{"class":159},[49,56596,51968],{"class":73},[49,56598,55307],{"class":159},[49,56600,52023],{"class":77},[49,56602,1990],{"class":73},[49,56604,56605,56607,56609,56611,56613],{"class":51,"line":2397},[49,56606,55316],{"class":159},[49,56608,51968],{"class":73},[49,56610,2238],{"class":159},[49,56612,52023],{"class":77},[49,56614,1990],{"class":73},[49,56616,56617,56619,56621,56623,56625,56627],{"class":51,"line":2426},[49,56618,55237],{"class":159},[49,56620,51968],{"class":73},[49,56622,1140],{"class":159},[49,56624,52023],{"class":77},[49,56626,52087],{"class":159},[49,56628,1990],{"class":73},[49,56630,56631],{"class":51,"line":2431},[49,56632,2885],{"class":73},[49,56634,56635],{"class":51,"line":2448},[49,56636,399],{"emptyLinePlaceholder":398},[49,56638,56639,56641],{"class":51,"line":2453},[49,56640,55351],{"class":55},[49,56642,16269],{"class":73},[49,56644,56645,56647,56649,56651],{"class":51,"line":2458},[49,56646,55290],{"class":159},[49,56648,51968],{"class":73},[49,56650,55362],{"class":159},[49,56652,1990],{"class":73},[49,56654,56655,56657,56659,56661],{"class":51,"line":2463},[49,56656,55369],{"class":159},[49,56658,51968],{"class":73},[49,56660,1021],{"class":159},[49,56662,1990],{"class":73},[49,56664,56665,56667,56669,56671],{"class":51,"line":2477},[49,56666,55380],{"class":159},[49,56668,51968],{"class":73},[49,56670,1021],{"class":159},[49,56672,1990],{"class":73},[49,56674,56675,56677,56679,56681,56683],{"class":51,"line":2482},[49,56676,55302],{"class":159},[49,56678,51968],{"class":73},[49,56680,1140],{"class":159},[49,56682,1157],{"class":77},[49,56684,1990],{"class":73},[49,56686,56687,56689,56691,56693,56695],{"class":51,"line":3274},[49,56688,55316],{"class":159},[49,56690,51968],{"class":73},[49,56692,1404],{"class":159},[49,56694,1157],{"class":77},[49,56696,1990],{"class":73},[49,56698,56699,56701,56703,56705],{"class":51,"line":3288},[49,56700,55415],{"class":159},[49,56702,51968],{"class":73},[49,56704,55420],{"class":159},[49,56706,1990],{"class":73},[49,56708,56709],{"class":51,"line":3296},[49,56710,2885],{"class":73},[49,56712,56713],{"class":51,"line":3301},[49,56714,399],{"emptyLinePlaceholder":398},[49,56716,56717,56719,56721],{"class":51,"line":3307},[49,56718,55351],{"class":55},[49,56720,7522],{"class":51831},[49,56722,16269],{"class":73},[49,56724,56725,56727,56729,56731],{"class":51,"line":3313},[49,56726,55290],{"class":159},[49,56728,51968],{"class":73},[49,56730,55362],{"class":159},[49,56732,1990],{"class":73},[49,56734,56735,56737,56739,56741,56743],{"class":51,"line":3318},[49,56736,55453],{"class":159},[49,56738,51968],{"class":73},[49,56740,1730],{"class":159},[49,56742,52023],{"class":77},[49,56744,1990],{"class":73},[49,56746,56747,56749,56751,56753,56755],{"class":51,"line":8645},[49,56748,55369],{"class":159},[49,56750,51968],{"class":73},[49,56752,1529],{"class":159},[49,56754,52023],{"class":77},[49,56756,1990],{"class":73},[49,56758,56759,56761,56763,56765,56767],{"class":51,"line":8669},[49,56760,55478],{"class":159},[49,56762,51968],{"class":73},[49,56764,1148],{"class":159},[49,56766,52023],{"class":77},[49,56768,1990],{"class":73},[49,56770,56771],{"class":51,"line":8674},[49,56772,2885],{"class":73},[49,56774,56775],{"class":51,"line":8680},[49,56776,399],{"emptyLinePlaceholder":398},[49,56778,56779,56781],{"class":51,"line":8707},[49,56780,55499],{"class":51831},[49,56782,16269],{"class":73},[49,56784,56785,56787,56789,56791],{"class":51,"line":8712},[49,56786,55290],{"class":159},[49,56788,51968],{"class":73},[49,56790,55362],{"class":159},[49,56792,1990],{"class":73},[49,56794,56795,56797,56799,56801,56803],{"class":51,"line":8718},[49,56796,55478],{"class":159},[49,56798,51968],{"class":73},[49,56800,1610],{"class":159},[49,56802,52023],{"class":77},[49,56804,1990],{"class":73},[49,56806,56807,56809,56811,56813,56815],{"class":51,"line":8730},[49,56808,55369],{"class":159},[49,56810,51968],{"class":73},[49,56812,1529],{"class":159},[49,56814,52023],{"class":77},[49,56816,1990],{"class":73},[49,56818,56819,56821,56823,56825],{"class":51,"line":8742},[49,56820,55540],{"class":159},[49,56822,51968],{"class":73},[49,56824,52008],{"class":159},[49,56826,1990],{"class":73},[49,56828,56829,56831,56833,56835],{"class":51,"line":8754},[49,56830,55551],{"class":159},[49,56832,51968],{"class":73},[49,56834,52199],{"class":159},[49,56836,1990],{"class":73},[49,56838,56839,56841,56843,56845],{"class":51,"line":10413},[49,56840,55290],{"class":159},[49,56842,51968],{"class":73},[49,56844,55362],{"class":159},[49,56846,1990],{"class":73},[49,56848,56849,56851,56853,56855,56857],{"class":51,"line":10438},[49,56850,55302],{"class":159},[49,56852,51968],{"class":73},[49,56854,4689],{"class":159},[49,56856,52023],{"class":77},[49,56858,1990],{"class":73},[49,56860,56861,56863,56865,56867,56869],{"class":51,"line":10461},[49,56862,55316],{"class":159},[49,56864,51968],{"class":73},[49,56866,1529],{"class":159},[49,56868,52023],{"class":77},[49,56870,1990],{"class":73},[49,56872,56873],{"class":51,"line":10485},[49,56874,2885],{"class":73},[49,56876,56877],{"class":51,"line":10490},[49,56878,399],{"emptyLinePlaceholder":398},[49,56880,56881,56883,56885],{"class":51,"line":10495},[49,56882,55499],{"class":51831},[49,56884,55606],{"class":51831},[49,56886,16269],{"class":73},[49,56888,56889,56891,56893,56895,56897],{"class":51,"line":10500},[49,56890,55302],{"class":159},[49,56892,51968],{"class":73},[49,56894,1529],{"class":159},[49,56896,52023],{"class":77},[49,56898,1990],{"class":73},[49,56900,56901,56903,56905,56907,56909],{"class":51,"line":10509},[49,56902,55316],{"class":159},[49,56904,51968],{"class":73},[49,56906,1529],{"class":159},[49,56908,52023],{"class":77},[49,56910,1990],{"class":73},[49,56912,56913,56915,56917,56919,56921,56923,56925,56927,56929,56931,56933,56935],{"class":51,"line":10514},[49,56914,55415],{"class":159},[49,56916,51968],{"class":73},[49,56918,55641],{"class":159},[49,56920,841],{"class":73},[49,56922,1021],{"class":159},[49,56924,13132],{"class":73},[49,56926,1021],{"class":159},[49,56928,13132],{"class":73},[49,56930,1021],{"class":159},[49,56932,13132],{"class":73},[49,56934,55658],{"class":159},[49,56936,3416],{"class":73},[49,56938,56939,56941,56943,56945,56947],{"class":51,"line":10520},[49,56940,55665],{"class":159},[49,56942,51968],{"class":73},[49,56944,1275],{"class":159},[49,56946,52023],{"class":77},[49,56948,1990],{"class":73},[49,56950,56951],{"class":51,"line":10541},[49,56952,2885],{"class":73},[49,56954,56955],{"class":51,"line":10547},[49,56956,399],{"emptyLinePlaceholder":398},[49,56958,56959,56961],{"class":51,"line":10561},[49,56960,55686],{"class":55},[49,56962,16269],{"class":73},[49,56964,56965,56967,56969,56971],{"class":51,"line":10567},[49,56966,55415],{"class":159},[49,56968,51968],{"class":73},[49,56970,55697],{"class":159},[49,56972,1990],{"class":73},[49,56974,56975],{"class":51,"line":10594},[49,56976,2885],{"class":73},[49,56978,56979,56981,56983],{"class":51,"line":10603},[49,56980,52948],{"class":73},[49,56982,757],{"class":51831},[49,56984,51838],{"class":73},[49,56986,56987,56989,56991],{"class":51,"line":10609},[49,56988,52316],{"class":73},[49,56990,51865],{"class":51831},[49,56992,51838],{"class":73},[49,56994,56995],{"class":51,"line":10617},[49,56996,399],{"emptyLinePlaceholder":398},[49,56998,56999,57001,57003],{"class":51,"line":10622},[49,57000,1739],{"class":73},[49,57002,52331],{"class":51831},[49,57004,51838],{"class":73},[49,57006,57007,57009,57011,57013,57015,57017],{"class":51,"line":17301},[49,57008,52675],{"class":73},[49,57010,52142],{"class":51831},[49,57012,54017],{"class":55},[49,57014,78],{"class":73},[49,57016,54022],{"class":59},[49,57018,51838],{"class":73},[49,57020,57021,57023,57025,57027,57029,57031],{"class":51,"line":17307},[49,57022,51872],{"class":73},[49,57024,52142],{"class":51831},[49,57026,54017],{"class":55},[49,57028,78],{"class":73},[49,57030,55758],{"class":59},[49,57032,51838],{"class":73},[49,57034,57035,57037,57039,57041,57043,57045,57047,57049,57051],{"class":51,"line":17330},[49,57036,55765],{"class":73},[49,57038,25],{"class":51831},[49,57040,55770],{"class":55},[49,57042,78],{"class":73},[49,57044,55775],{"class":59},[49,57046,55778],{"class":55},[49,57048,78],{"class":73},[49,57050,8349],{"class":59},[49,57052,51838],{"class":73},[49,57054,57055,57057,57059],{"class":51,"line":17336},[49,57056,52307],{"class":73},[49,57058,52142],{"class":51831},[49,57060,51838],{"class":73},[49,57062,57063,57065,57067,57069,57071,57073],{"class":51,"line":17359},[49,57064,51872],{"class":73},[49,57066,52142],{"class":51831},[49,57068,54017],{"class":55},[49,57070,78],{"class":73},[49,57072,55805],{"class":59},[49,57074,51838],{"class":73},[49,57076,57077,57079,57081,57083,57085],{"class":51,"line":17373},[49,57078,55765],{"class":73},[49,57080,14],{"class":51831},[49,57082,55816],{"class":73},[49,57084,14],{"class":51831},[49,57086,51838],{"class":73},[49,57088,57089,57091,57093],{"class":51,"line":17393},[49,57090,55765],{"class":73},[49,57092,742],{"class":51831},[49,57094,51838],{"class":73},[49,57096,57097,57099,57101,57103,57105,57107,57109,57111],{"class":51,"line":17399},[49,57098,55833],{"class":73},[49,57100,33],{"class":51831},[49,57102,54017],{"class":55},[49,57104,78],{"class":73},[49,57106,55842],{"class":59},[49,57108,55845],{"class":73},[49,57110,33],{"class":51831},[49,57112,51838],{"class":73},[49,57114,57115,57117,57119,57121,57123],{"class":51,"line":17410},[49,57116,55833],{"class":73},[49,57118,33],{"class":51831},[49,57120,55845],{"class":73},[49,57122,33],{"class":51831},[49,57124,51838],{"class":73},[49,57126,57127,57129,57131,57133,57135],{"class":51,"line":17433},[49,57128,55833],{"class":73},[49,57130,33],{"class":51831},[49,57132,55845],{"class":73},[49,57134,33],{"class":51831},[49,57136,51838],{"class":73},[49,57138,57139,57141,57143,57145,57147],{"class":51,"line":17455},[49,57140,55833],{"class":73},[49,57142,33],{"class":51831},[49,57144,55845],{"class":73},[49,57146,33],{"class":51831},[49,57148,51838],{"class":73},[49,57150,57151,57153,57155,57157,57159],{"class":51,"line":17460},[49,57152,55833],{"class":73},[49,57154,33],{"class":51831},[49,57156,55845],{"class":73},[49,57158,33],{"class":51831},[49,57160,51838],{"class":73},[49,57162,57163,57165,57167,57169,57171],{"class":51,"line":17466},[49,57164,55833],{"class":73},[49,57166,33],{"class":51831},[49,57168,55845],{"class":73},[49,57170,33],{"class":51831},[49,57172,51838],{"class":73},[49,57174,57175,57177,57179,57181,57183],{"class":51,"line":17480},[49,57176,55833],{"class":73},[49,57178,33],{"class":51831},[49,57180,55845],{"class":73},[49,57182,33],{"class":51831},[49,57184,51838],{"class":73},[49,57186,57187,57189,57191,57193,57195],{"class":51,"line":17493},[49,57188,55833],{"class":73},[49,57190,33],{"class":51831},[49,57192,55845],{"class":73},[49,57194,33],{"class":51831},[49,57196,51838],{"class":73},[49,57198,57199,57201,57203],{"class":51,"line":17498},[49,57200,55938],{"class":73},[49,57202,742],{"class":51831},[49,57204,51838],{"class":73},[49,57206,57207,57209,57211],{"class":51,"line":17512},[49,57208,52307],{"class":73},[49,57210,52142],{"class":51831},[49,57212,51838],{"class":73},[49,57214,57215,57217,57219],{"class":51,"line":17517},[49,57216,52948],{"class":73},[49,57218,52142],{"class":51831},[49,57220,51838],{"class":73},[49,57222,57223,57225,57227],{"class":51,"line":17523},[49,57224,52675],{"class":73},[49,57226,52344],{"class":51831},[49,57228,51838],{"class":73},[49,57230,57231,57233,57236,57238],{"class":51,"line":17528},[49,57232,11918],{"class":77},[49,57234,57235],{"class":159}," sliderData",[49,57237,14261],{"class":77},[49,57239,55978],{"class":73},[49,57241,57242,57244,57246,57248,57250,57252,57254],{"class":51,"line":17542},[49,57243,55983],{"class":73},[49,57245,55986],{"class":59},[49,57247,55989],{"class":73},[49,57249,55992],{"class":59},[49,57251,55995],{"class":73},[49,57253,55998],{"class":59},[49,57255,56001],{"class":73},[49,57257,57258,57260,57262,57264,57266,57268,57270],{"class":51,"line":17547},[49,57259,55983],{"class":73},[49,57261,56008],{"class":59},[49,57263,55989],{"class":73},[49,57265,56013],{"class":59},[49,57267,55995],{"class":73},[49,57269,56018],{"class":59},[49,57271,56001],{"class":73},[49,57273,57274,57276,57278,57280,57282,57284,57286],{"class":51,"line":17552},[49,57275,55983],{"class":73},[49,57277,56027],{"class":59},[49,57279,55989],{"class":73},[49,57281,56032],{"class":59},[49,57283,55995],{"class":73},[49,57285,56037],{"class":59},[49,57287,56001],{"class":73},[49,57289,57290,57292,57294,57296,57298,57300,57302],{"class":51,"line":17566},[49,57291,55983],{"class":73},[49,57293,56046],{"class":59},[49,57295,55989],{"class":73},[49,57297,56051],{"class":59},[49,57299,55995],{"class":73},[49,57301,56056],{"class":59},[49,57303,56001],{"class":73},[49,57305,57306,57308,57310,57312,57314,57316,57318],{"class":51,"line":17578},[49,57307,55983],{"class":73},[49,57309,56065],{"class":59},[49,57311,55989],{"class":73},[49,57313,56070],{"class":59},[49,57315,55995],{"class":73},[49,57317,56075],{"class":59},[49,57319,56001],{"class":73},[49,57321,57322,57324,57326,57328,57330,57332,57334],{"class":51,"line":17583},[49,57323,55983],{"class":73},[49,57325,56084],{"class":59},[49,57327,55989],{"class":73},[49,57329,56089],{"class":59},[49,57331,55995],{"class":73},[49,57333,56094],{"class":59},[49,57335,56001],{"class":73},[49,57337,57338,57340,57342,57344,57346,57348,57350],{"class":51,"line":17596},[49,57339,55983],{"class":73},[49,57341,56103],{"class":59},[49,57343,55989],{"class":73},[49,57345,56108],{"class":59},[49,57347,55995],{"class":73},[49,57349,56113],{"class":59},[49,57351,56001],{"class":73},[49,57353,57354,57356,57358,57360,57362,57364,57366],{"class":51,"line":17601},[49,57355,55983],{"class":73},[49,57357,56122],{"class":59},[49,57359,55989],{"class":73},[49,57361,56127],{"class":59},[49,57363,55995],{"class":73},[49,57365,56132],{"class":59},[49,57367,56135],{"class":73},[49,57369,57370],{"class":51,"line":17606},[49,57371,53640],{"class":73},[49,57373,57374],{"class":51,"line":17611},[49,57375,57376],{"class":66},"    \u002F\u002F 1.获取元素\n",[49,57378,57379,57381,57383,57385,57387,57389,57391,57393],{"class":51,"line":17624},[49,57380,11918],{"class":77},[49,57382,56146],{"class":159},[49,57384,14261],{"class":77},[49,57386,54927],{"class":73},[49,57388,54930],{"class":55},[49,57390,841],{"class":73},[49,57392,56157],{"class":59},[49,57394,847],{"class":73},[49,57396,57397,57399,57401,57403,57405,57407,57409,57411],{"class":51,"line":17629},[49,57398,11918],{"class":77},[49,57400,7522],{"class":159},[49,57402,14261],{"class":77},[49,57404,54927],{"class":73},[49,57406,54930],{"class":55},[49,57408,841],{"class":73},[49,57410,56176],{"class":59},[49,57412,847],{"class":73},[49,57414,57415,57417,57419,57421],{"class":51,"line":33164},[49,57416,52750],{"class":77},[49,57418,10135],{"class":73},[49,57420,78],{"class":77},[49,57422,47864],{"class":159},[49,57424,57425],{"class":51,"line":33170},[49,57426,57427],{"class":66},"    \u002F\u002F 2.开启定时器\n",[49,57429,57430],{"class":51,"line":33176},[49,57431,57432],{"class":66},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[49,57434,57435,57438,57440,57442],{"class":51,"line":33182},[49,57436,57437],{"class":55},"    setInterval",[49,57439,841],{"class":73},[49,57441,54980],{"class":77},[49,57443,54983],{"class":73},[49,57445,57446,57448],{"class":51,"line":33188},[49,57447,54988],{"class":73},[49,57449,3399],{"class":77},[49,57451,57452,57454,57456,57458,57461,57463],{"class":51,"line":33199},[49,57453,55011],{"class":77},[49,57455,55014],{"class":73},[49,57457,2409],{"class":77},[49,57459,57460],{"class":73}," sliderData.",[49,57462,52499],{"class":159},[49,57464,13139],{"class":73},[49,57466,57467,57470,57472],{"class":51,"line":33205},[49,57468,57469],{"class":73},"        i ",[49,57471,78],{"class":77},[49,57473,47864],{"class":159},[49,57475,57476],{"class":51,"line":33225},[49,57477,52929],{"class":73},[49,57479,57480],{"class":51,"line":33231},[49,57481,57482],{"class":66},"      \u002F\u002F 更换图片路径\n",[49,57484,57485,57487,57489],{"class":51,"line":33242},[49,57486,56252],{"class":73},[49,57488,78],{"class":77},[49,57490,57491],{"class":73}," sliderData[i].url\n",[49,57493,57494],{"class":51,"line":33248},[49,57495,57496],{"class":66},"      \u002F\u002F 把文字写到p里面\n",[49,57498,57499,57501,57503],{"class":51,"line":33254},[49,57500,56262],{"class":73},[49,57502,78],{"class":77},[49,57504,57505],{"class":73}," sliderData[i].title\n",[49,57507,57508],{"class":51,"line":33260},[49,57509,57510],{"class":66},"      \u002F\u002F 小圆点\n",[49,57512,57513],{"class":51,"line":33266},[49,57514,57515],{"class":66},"      \u002F\u002F 先删除以前的active\n",[49,57517,57518],{"class":51,"line":33272},[49,57519,57520],{"class":66},"      \u002F\u002F 只让当前li添加active\n",[49,57522,57523,57525,57527,57529,57532,57535,57538,57540,57542],{"class":51,"line":33278},[49,57524,56302],{"class":73},[49,57526,54930],{"class":55},[49,57528,841],{"class":73},[49,57530,57531],{"class":59},"'.slider-footer .activate'",[49,57533,57534],{"class":73},").classList.",[49,57536,57537],{"class":55},"remove",[49,57539,841],{"class":73},[49,57541,56320],{"class":59},[49,57543,847],{"class":73},[49,57545,57546,57548,57550,57552,57555,57557,57559,57561,57564,57566,57568,57570,57572],{"class":51,"line":33284},[49,57547,56302],{"class":73},[49,57549,54930],{"class":55},[49,57551,841],{"class":73},[49,57553,57554],{"class":59},"`.slider-footer ul li:nth-child(${",[49,57556,1270],{"class":73},[49,57558,46097],{"class":77},[49,57560,25807],{"class":159},[49,57562,57563],{"class":59},"})`",[49,57565,57534],{"class":73},[49,57567,6031],{"class":55},[49,57569,841],{"class":73},[49,57571,56320],{"class":59},[49,57573,847],{"class":73},[49,57575,57576],{"class":51,"line":33304},[49,57577,399],{"emptyLinePlaceholder":398},[49,57579,57580,57582,57584],{"class":51,"line":33310},[49,57581,55066],{"class":73},[49,57583,7107],{"class":159},[49,57585,847],{"class":73},[49,57587,57588],{"class":51,"line":33326},[49,57589,399],{"emptyLinePlaceholder":398},[49,57591,57592,57594,57596],{"class":51,"line":33332},[49,57593,52948],{"class":73},[49,57595,52344],{"class":51831},[49,57597,51838],{"class":73},[49,57599,57600,57602,57604],{"class":51,"line":33346},[49,57601,52316],{"class":73},[49,57603,52331],{"class":51831},[49,57605,51838],{"class":73},[49,57607,57608],{"class":51,"line":33352},[49,57609,399],{"emptyLinePlaceholder":398},[49,57611,57612,57614,57616],{"class":51,"line":33367},[49,57613,52316],{"class":73},[49,57615,51166],{"class":51831},[49,57617,51838],{"class":73},[18,57619,57621],{"id":57620},"_317-重要知识点","3.1.7 重要知识点",[14,57623,57624,57625],{},"浏览器在渲染文本时， ",[112,57626,57627],{},"没有空格或换行符就没有“断行点”",[14,57629,57630],{},[25,57631],{"alt":27,"src":57632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57634,57635],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57637,57638],{},[25,57639],{"alt":27,"src":57640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57642,57643],{},[25,57644],{"alt":27,"src":57645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[782,57647,57649],{"id":57648},"_32-dom事件基础","3.2 DOM事件基础",[18,57651,57653],{"id":57652},"_321-事件监听","3.2.1 事件监听",[14,57655,57656],{},[25,57657],{"alt":27,"src":57658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57660,57661],{},"事件监听有响应的发生",[14,57663,57664],{},[25,57665],{"alt":27,"src":57666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57668,57669],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57671,57672],{},"对于有名函数,要执行的函数名后边不要加()",[18,57674,57676],{"id":57675},"_322-随机点名案例","3.2.2 随机点名案例",[40,57678,57680],{"className":51164,"code":57679,"language":51166,"meta":27,"style":27},"\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",[46,57681,57682,57692,57706,57710,57718,57732,57752,57764,57772,57778,57788,57798,57802,57806,57813,57824,57828,57832,57838,57850,57864,57874,57886,57899,57903,57907,57914,57918,57931,57943,57955,57959,57963,57967,57974,57984,57988,57992,58001,58013,58025,58040,58044,58052,58060,58064,58072,58085,58099,58112,58132,58140,58155,58175,58195,58203,58207,58215,58220,58256,58276,58281,58300,58305,58316,58321,58332,58337,58356,58371,58376,58402,58412,58421,58426,58442,58447,58452,58457,58472,58476,58480,58485,58504,58521,58529,58534,58549,58553,58557,58565,58573,58577],{"__ignoreMap":27},[49,57683,57684,57686,57688,57690],{"class":51,"line":52},[49,57685,51828],{"class":73},[49,57687,51832],{"class":51831},[49,57689,51835],{"class":55},[49,57691,51838],{"class":73},[49,57693,57694,57696,57698,57700,57702,57704],{"class":51,"line":63},[49,57695,1739],{"class":73},[49,57697,51166],{"class":51831},[49,57699,51847],{"class":55},[49,57701,78],{"class":73},[49,57703,51852],{"class":59},[49,57705,51838],{"class":73},[49,57707,57708],{"class":51,"line":70},[49,57709,399],{"emptyLinePlaceholder":398},[49,57711,57712,57714,57716],{"class":51,"line":219},[49,57713,1739],{"class":73},[49,57715,51865],{"class":51831},[49,57717,51838],{"class":73},[49,57719,57720,57722,57724,57726,57728,57730],{"class":51,"line":233},[49,57721,52675],{"class":73},[49,57723,51875],{"class":51831},[49,57725,51878],{"class":55},[49,57727,78],{"class":73},[49,57729,51883],{"class":59},[49,57731,51838],{"class":73},[49,57733,57734,57736,57738,57740,57742,57744,57746,57748,57750],{"class":51,"line":241},[49,57735,52675],{"class":73},[49,57737,51875],{"class":51831},[49,57739,15617],{"class":55},[49,57741,78],{"class":73},[49,57743,51922],{"class":59},[49,57745,51902],{"class":55},[49,57747,78],{"class":73},[49,57749,51929],{"class":59},[49,57751,51838],{"class":73},[49,57753,57754,57756,57758,57760,57762],{"class":51,"line":1920},[49,57755,52675],{"class":73},[49,57757,51938],{"class":51831},[49,57759,51941],{"class":73},[49,57761,51938],{"class":51831},[49,57763,51838],{"class":73},[49,57765,57766,57768,57770],{"class":51,"line":2011},[49,57767,52675],{"class":73},[49,57769,757],{"class":51831},[49,57771,51838],{"class":73},[49,57773,57774,57776],{"class":51,"line":2017},[49,57775,7100],{"class":51831},[49,57777,16269],{"class":73},[49,57779,57780,57782,57784,57786],{"class":51,"line":2029},[49,57781,55237],{"class":159},[49,57783,51968],{"class":73},[49,57785,1021],{"class":159},[49,57787,1990],{"class":73},[49,57789,57790,57792,57794,57796],{"class":51,"line":2311},[49,57791,55226],{"class":159},[49,57793,51968],{"class":73},[49,57795,1021],{"class":159},[49,57797,1990],{"class":73},[49,57799,57800],{"class":51,"line":2316},[49,57801,2885],{"class":73},[49,57803,57804],{"class":51,"line":2322},[49,57805,399],{"emptyLinePlaceholder":398},[49,57807,57808,57811],{"class":51,"line":2327},[49,57809,57810],{"class":51831},"    h2",[49,57812,16269],{"class":73},[49,57814,57815,57818,57820,57822],{"class":51,"line":2341},[49,57816,57817],{"class":159},"      text-align",[49,57819,51968],{"class":73},[49,57821,52123],{"class":159},[49,57823,1990],{"class":73},[49,57825,57826],{"class":51,"line":2346},[49,57827,2885],{"class":73},[49,57829,57830],{"class":51,"line":2352},[49,57831,399],{"emptyLinePlaceholder":398},[49,57833,57834,57836],{"class":51,"line":2373},[49,57835,55283],{"class":55},[49,57837,16269],{"class":73},[49,57839,57840,57842,57844,57846,57848],{"class":51,"line":2378},[49,57841,55302],{"class":159},[49,57843,51968],{"class":73},[49,57845,2238],{"class":159},[49,57847,52023],{"class":77},[49,57849,1990],{"class":73},[49,57851,57852,57854,57856,57858,57860,57862],{"class":51,"line":2392},[49,57853,55237],{"class":159},[49,57855,51968],{"class":73},[49,57857,1485],{"class":159},[49,57859,52023],{"class":77},[49,57861,52087],{"class":159},[49,57863,1990],{"class":73},[49,57865,57866,57868,57870,57872],{"class":51,"line":2397},[49,57867,55540],{"class":159},[49,57869,51968],{"class":73},[49,57871,52008],{"class":159},[49,57873,1990],{"class":73},[49,57875,57876,57878,57880,57882,57884],{"class":51,"line":2426},[49,57877,55453],{"class":159},[49,57879,51968],{"class":73},[49,57881,1654],{"class":159},[49,57883,52023],{"class":77},[49,57885,1990],{"class":73},[49,57887,57888,57891,57893,57895,57897],{"class":51,"line":2431},[49,57889,57890],{"class":159},"      line-height",[49,57892,51968],{"class":73},[49,57894,1230],{"class":159},[49,57896,52023],{"class":77},[49,57898,1990],{"class":73},[49,57900,57901],{"class":51,"line":2448},[49,57902,2885],{"class":73},[49,57904,57905],{"class":51,"line":2453},[49,57906,399],{"emptyLinePlaceholder":398},[49,57908,57909,57912],{"class":51,"line":2458},[49,57910,57911],{"class":55},"    .qs",[49,57913,16269],{"class":73},[49,57915,57916],{"class":51,"line":2463},[49,57917,399],{"emptyLinePlaceholder":398},[49,57919,57920,57922,57924,57927,57929],{"class":51,"line":2477},[49,57921,55302],{"class":159},[49,57923,51968],{"class":73},[49,57925,57926],{"class":159},"450",[49,57928,52023],{"class":77},[49,57930,1990],{"class":73},[49,57932,57933,57935,57937,57939,57941],{"class":51,"line":2482},[49,57934,55316],{"class":159},[49,57936,51968],{"class":73},[49,57938,1230],{"class":159},[49,57940,52023],{"class":77},[49,57942,1990],{"class":73},[49,57944,57945,57948,57950,57953],{"class":51,"line":3274},[49,57946,57947],{"class":159},"      color",[49,57949,51968],{"class":73},[49,57951,57952],{"class":159},"red",[49,57954,1990],{"class":73},[49,57956,57957],{"class":51,"line":3288},[49,57958,399],{"emptyLinePlaceholder":398},[49,57960,57961],{"class":51,"line":3296},[49,57962,2885],{"class":73},[49,57964,57965],{"class":51,"line":3301},[49,57966,399],{"emptyLinePlaceholder":398},[49,57968,57969,57972],{"class":51,"line":3307},[49,57970,57971],{"class":55},"    .btns",[49,57973,16269],{"class":73},[49,57975,57976,57978,57980,57982],{"class":51,"line":3313},[49,57977,57817],{"class":159},[49,57979,51968],{"class":73},[49,57981,52123],{"class":159},[49,57983,1990],{"class":73},[49,57985,57986],{"class":51,"line":3318},[49,57987,2885],{"class":73},[49,57989,57990],{"class":51,"line":8645},[49,57991,399],{"emptyLinePlaceholder":398},[49,57993,57994,57996,57999],{"class":51,"line":8669},[49,57995,57971],{"class":55},[49,57997,57998],{"class":51831}," button",[49,58000,16269],{"class":73},[49,58002,58003,58005,58007,58009,58011],{"class":51,"line":8674},[49,58004,55302],{"class":159},[49,58006,51968],{"class":73},[49,58008,1646],{"class":159},[49,58010,52023],{"class":77},[49,58012,1990],{"class":73},[49,58014,58015,58017,58019,58021,58023],{"class":51,"line":8680},[49,58016,55316],{"class":159},[49,58018,51968],{"class":73},[49,58020,1102],{"class":159},[49,58022,52023],{"class":77},[49,58024,1990],{"class":73},[49,58026,58027,58029,58031,58033,58036,58038],{"class":51,"line":8707},[49,58028,55237],{"class":159},[49,58030,51968],{"class":73},[49,58032,1021],{"class":159},[49,58034,58035],{"class":159}," 50",[49,58037,52023],{"class":77},[49,58039,1990],{"class":73},[49,58041,58042],{"class":51,"line":8712},[49,58043,2885],{"class":73},[49,58045,58046,58048,58050],{"class":51,"line":8718},[49,58047,52948],{"class":73},[49,58049,757],{"class":51831},[49,58051,51838],{"class":73},[49,58053,58054,58056,58058],{"class":51,"line":8730},[49,58055,52316],{"class":73},[49,58057,51865],{"class":51831},[49,58059,51838],{"class":73},[49,58061,58062],{"class":51,"line":8742},[49,58063,399],{"emptyLinePlaceholder":398},[49,58065,58066,58068,58070],{"class":51,"line":8754},[49,58067,1739],{"class":73},[49,58069,52331],{"class":51831},[49,58071,51838],{"class":73},[49,58073,58074,58076,58078,58081,58083],{"class":51,"line":10413},[49,58075,52675],{"class":73},[49,58077,782],{"class":51831},[49,58079,58080],{"class":73},">随机点名\u003C\u002F",[49,58082,782],{"class":51831},[49,58084,51838],{"class":73},[49,58086,58087,58089,58091,58093,58095,58097],{"class":51,"line":10438},[49,58088,52675],{"class":73},[49,58090,52142],{"class":51831},[49,58092,54017],{"class":55},[49,58094,78],{"class":73},[49,58096,54022],{"class":59},[49,58098,51838],{"class":73},[49,58100,58101,58103,58105,58108,58110],{"class":51,"line":10461},[49,58102,51872],{"class":73},[49,58104,49],{"class":51831},[49,58106,58107],{"class":73},">名字是：\u003C\u002F",[49,58109,49],{"class":51831},[49,58111,51838],{"class":73},[49,58113,58114,58116,58118,58120,58122,58125,58128,58130],{"class":51,"line":10485},[49,58115,51872],{"class":73},[49,58117,52142],{"class":51831},[49,58119,54017],{"class":55},[49,58121,78],{"class":73},[49,58123,58124],{"class":59},"\"qs\"",[49,58126,58127],{"class":73},">这里显示姓名\u003C\u002F",[49,58129,52142],{"class":51831},[49,58131,51838],{"class":73},[49,58133,58134,58136,58138],{"class":51,"line":10490},[49,58135,52948],{"class":73},[49,58137,52142],{"class":51831},[49,58139,51838],{"class":73},[49,58141,58142,58144,58146,58148,58150,58153],{"class":51,"line":10495},[49,58143,52675],{"class":73},[49,58145,52142],{"class":51831},[49,58147,54017],{"class":55},[49,58149,78],{"class":73},[49,58151,58152],{"class":59},"\"btns\"",[49,58154,51838],{"class":73},[49,58156,58157,58159,58161,58163,58165,58168,58171,58173],{"class":51,"line":10500},[49,58158,51872],{"class":73},[49,58160,54418],{"class":51831},[49,58162,54017],{"class":55},[49,58164,78],{"class":73},[49,58166,58167],{"class":59},"\"start\"",[49,58169,58170],{"class":73},">开始\u003C\u002F",[49,58172,54418],{"class":51831},[49,58174,51838],{"class":73},[49,58176,58177,58179,58181,58183,58185,58188,58191,58193],{"class":51,"line":10509},[49,58178,51872],{"class":73},[49,58180,54418],{"class":51831},[49,58182,54017],{"class":55},[49,58184,78],{"class":73},[49,58186,58187],{"class":59},"\"end\"",[49,58189,58190],{"class":73},">结束\u003C\u002F",[49,58192,54418],{"class":51831},[49,58194,51838],{"class":73},[49,58196,58197,58199,58201],{"class":51,"line":10514},[49,58198,52948],{"class":73},[49,58200,52142],{"class":51831},[49,58202,51838],{"class":73},[49,58204,58205],{"class":51,"line":10520},[49,58206,399],{"emptyLinePlaceholder":398},[49,58208,58209,58211,58213],{"class":51,"line":10541},[49,58210,52675],{"class":73},[49,58212,52344],{"class":51831},[49,58214,51838],{"class":73},[49,58216,58217],{"class":51,"line":10547},[49,58218,58219],{"class":66},"    \u002F\u002F 数据数组\n",[49,58221,58222,58224,58227,58229,58231,58234,58236,58239,58241,58244,58246,58249,58251,58254],{"class":51,"line":10561},[49,58223,11918],{"class":77},[49,58225,58226],{"class":159}," arr",[49,58228,14261],{"class":77},[49,58230,52757],{"class":73},[49,58232,58233],{"class":59},"'马超'",[49,58235,13132],{"class":73},[49,58237,58238],{"class":59},"'黄忠'",[49,58240,13132],{"class":73},[49,58242,58243],{"class":59},"'赵云'",[49,58245,13132],{"class":73},[49,58247,58248],{"class":59},"'关羽'",[49,58250,13132],{"class":73},[49,58252,58253],{"class":59},"'张飞'",[49,58255,33777],{"class":73},[49,58257,58258,58260,58263,58265,58267,58269,58271,58274],{"class":51,"line":10567},[49,58259,11918],{"class":77},[49,58261,58262],{"class":159}," qs",[49,58264,14261],{"class":77},[49,58266,54927],{"class":73},[49,58268,54930],{"class":55},[49,58270,841],{"class":73},[49,58272,58273],{"class":59},"'.qs'",[49,58275,847],{"class":73},[49,58277,58278],{"class":51,"line":10594},[49,58279,58280],{"class":66},"    \u002F\u002F 1.业务1.开始按钮模块\n",[49,58282,58283,58285,58287,58289,58291,58293,58295,58298],{"class":51,"line":10603},[49,58284,11918],{"class":77},[49,58286,4881],{"class":159},[49,58288,14261],{"class":77},[49,58290,54927],{"class":73},[49,58292,54930],{"class":55},[49,58294,841],{"class":73},[49,58296,58297],{"class":59},"'.start'",[49,58299,847],{"class":73},[49,58301,58302],{"class":51,"line":10609},[49,58303,58304],{"class":66},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[49,58306,58307,58309,58312,58314],{"class":51,"line":10617},[49,58308,52750],{"class":77},[49,58310,58311],{"class":73}," timerId ",[49,58313,78],{"class":77},[49,58315,47864],{"class":159},[49,58317,58318],{"class":51,"line":10622},[49,58319,58320],{"class":66},"    \u002F\u002F 随机号要全局变量\n",[49,58322,58323,58325,58328,58330],{"class":51,"line":17301},[49,58324,52750],{"class":77},[49,58326,58327],{"class":73}," random ",[49,58329,78],{"class":77},[49,58331,47864],{"class":159},[49,58333,58334],{"class":51,"line":17307},[49,58335,58336],{"class":66},"    \u002F\u002F 1.1 添加点击事件\n",[49,58338,58339,58342,58345,58347,58350,58352,58354],{"class":51,"line":17330},[49,58340,58341],{"class":73},"    start.",[49,58343,58344],{"class":55},"addEventListener",[49,58346,841],{"class":73},[49,58348,58349],{"class":59},"'click'",[49,58351,13132],{"class":73},[49,58353,54980],{"class":77},[49,58355,54983],{"class":73},[49,58357,58358,58361,58363,58365,58367,58369],{"class":51,"line":17336},[49,58359,58360],{"class":73},"      timerId ",[49,58362,78],{"class":77},[49,58364,54975],{"class":55},[49,58366,841],{"class":73},[49,58368,54980],{"class":77},[49,58370,54983],{"class":73},[49,58372,58373],{"class":51,"line":17359},[49,58374,58375],{"class":66},"        \u002F\u002F 随机数\n",[49,58377,58378,58381,58383,58386,58389,58392,58394,58396,58398,58400],{"class":51,"line":17373},[49,58379,58380],{"class":73},"        random ",[49,58382,78],{"class":77},[49,58384,58385],{"class":55}," parseInt",[49,58387,58388],{"class":73},"(Math.",[49,58390,58391],{"class":55},"random",[49,58393,13747],{"class":73},[49,58395,1284],{"class":77},[49,58397,52496],{"class":73},[49,58399,52499],{"class":159},[49,58401,847],{"class":73},[49,58403,58404,58407,58409],{"class":51,"line":17393},[49,58405,58406],{"class":73},"        qs.innerHTML ",[49,58408,78],{"class":77},[49,58410,58411],{"class":73}," arr[random]\n",[49,58413,58414,58417,58419],{"class":51,"line":17399},[49,58415,58416],{"class":73},"      }, ",[49,58418,1102],{"class":159},[49,58420,847],{"class":73},[49,58422,58423],{"class":51,"line":17410},[49,58424,58425],{"class":66},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[49,58427,58428,58430,58433,58435,58438,58440],{"class":51,"line":17433},[49,58429,55011],{"class":77},[49,58431,58432],{"class":73}," (arr.",[49,58434,52499],{"class":159},[49,58436,58437],{"class":77}," ===",[49,58439,25807],{"class":159},[49,58441,13139],{"class":73},[49,58443,58444],{"class":51,"line":17455},[49,58445,58446],{"class":66},"        \u002F\u002F start.disabled = true\n",[49,58448,58449],{"class":51,"line":17460},[49,58450,58451],{"class":66},"        \u002F\u002F end.disabled = true\n",[49,58453,58454],{"class":51,"line":17466},[49,58455,58456],{"class":66},"        \u002F\u002F 可以合起来写\n",[49,58458,58459,58462,58464,58467,58469],{"class":51,"line":17480},[49,58460,58461],{"class":73},"        start.disabled ",[49,58463,78],{"class":77},[49,58465,58466],{"class":73}," end.disabled ",[49,58468,78],{"class":77},[49,58470,58471],{"class":159}," true\n",[49,58473,58474],{"class":51,"line":17493},[49,58475,52929],{"class":73},[49,58477,58478],{"class":51,"line":17498},[49,58479,33992],{"class":73},[49,58481,58482],{"class":51,"line":17512},[49,58483,58484],{"class":66},"    \u002F\u002F 1.2 关闭按钮模块\n",[49,58486,58487,58489,58491,58493,58495,58497,58499,58502],{"class":51,"line":17517},[49,58488,11918],{"class":77},[49,58490,4897],{"class":159},[49,58492,14261],{"class":77},[49,58494,54927],{"class":73},[49,58496,54930],{"class":55},[49,58498,841],{"class":73},[49,58500,58501],{"class":59},"'.end'",[49,58503,847],{"class":73},[49,58505,58506,58509,58511,58513,58515,58517,58519],{"class":51,"line":17523},[49,58507,58508],{"class":73},"    end.",[49,58510,58344],{"class":55},[49,58512,841],{"class":73},[49,58514,58349],{"class":59},[49,58516,13132],{"class":73},[49,58518,54980],{"class":77},[49,58520,54983],{"class":73},[49,58522,58523,58526],{"class":51,"line":17528},[49,58524,58525],{"class":55},"      clearInterval",[49,58527,58528],{"class":73},"(timerId)\n",[49,58530,58531],{"class":51,"line":17542},[49,58532,58533],{"class":66},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[49,58535,58536,58539,58542,58545,58547],{"class":51,"line":17547},[49,58537,58538],{"class":73},"      arr.",[49,58540,58541],{"class":55},"splice",[49,58543,58544],{"class":73},"(random, ",[49,58546,1047],{"class":159},[49,58548,847],{"class":73},[49,58550,58551],{"class":51,"line":17552},[49,58552,33992],{"class":73},[49,58554,58555],{"class":51,"line":17566},[49,58556,399],{"emptyLinePlaceholder":398},[49,58558,58559,58561,58563],{"class":51,"line":17578},[49,58560,52948],{"class":73},[49,58562,52344],{"class":51831},[49,58564,51838],{"class":73},[49,58566,58567,58569,58571],{"class":51,"line":17583},[49,58568,52316],{"class":73},[49,58570,52331],{"class":51831},[49,58572,51838],{"class":73},[49,58574,58575],{"class":51,"line":17596},[49,58576,399],{"emptyLinePlaceholder":398},[49,58578,58579,58581,58583],{"class":51,"line":17601},[49,58580,52316],{"class":73},[49,58582,51166],{"class":51831},[49,58584,51838],{"class":73},[14,58586,58587],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[18,58589,58591],{"id":58590},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[40,58593,58595],{"className":51164,"code":58594,"language":51166,"meta":27,"style":27},"\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",[46,58596,58597,58607,58621,58625,58633,58647,58667,58679,58687,58691,58699,58711,58719,58738,58755,58771,58781,58785,58793,58801,58805],{"__ignoreMap":27},[49,58598,58599,58601,58603,58605],{"class":51,"line":52},[49,58600,51828],{"class":73},[49,58602,51832],{"class":51831},[49,58604,51835],{"class":55},[49,58606,51838],{"class":73},[49,58608,58609,58611,58613,58615,58617,58619],{"class":51,"line":63},[49,58610,1739],{"class":73},[49,58612,51166],{"class":51831},[49,58614,51847],{"class":55},[49,58616,78],{"class":73},[49,58618,51852],{"class":59},[49,58620,51838],{"class":73},[49,58622,58623],{"class":51,"line":70},[49,58624,399],{"emptyLinePlaceholder":398},[49,58626,58627,58629,58631],{"class":51,"line":219},[49,58628,1739],{"class":73},[49,58630,51865],{"class":51831},[49,58632,51838],{"class":73},[49,58634,58635,58637,58639,58641,58643,58645],{"class":51,"line":233},[49,58636,52675],{"class":73},[49,58638,51875],{"class":51831},[49,58640,51878],{"class":55},[49,58642,78],{"class":73},[49,58644,51883],{"class":59},[49,58646,51838],{"class":73},[49,58648,58649,58651,58653,58655,58657,58659,58661,58663,58665],{"class":51,"line":241},[49,58650,52675],{"class":73},[49,58652,51875],{"class":51831},[49,58654,15617],{"class":55},[49,58656,78],{"class":73},[49,58658,51922],{"class":59},[49,58660,51902],{"class":55},[49,58662,78],{"class":73},[49,58664,51929],{"class":59},[49,58666,51838],{"class":73},[49,58668,58669,58671,58673,58675,58677],{"class":51,"line":1920},[49,58670,52675],{"class":73},[49,58672,51938],{"class":51831},[49,58674,51941],{"class":73},[49,58676,51938],{"class":51831},[49,58678,51838],{"class":73},[49,58680,58681,58683,58685],{"class":51,"line":2011},[49,58682,52316],{"class":73},[49,58684,51865],{"class":51831},[49,58686,51838],{"class":73},[49,58688,58689],{"class":51,"line":2017},[49,58690,399],{"emptyLinePlaceholder":398},[49,58692,58693,58695,58697],{"class":51,"line":2029},[49,58694,1739],{"class":73},[49,58696,52331],{"class":51831},[49,58698,51838],{"class":73},[49,58700,58701,58703,58705,58707,58709],{"class":51,"line":2311},[49,58702,52675],{"class":73},[49,58704,54418],{"class":51831},[49,58706,54424],{"class":73},[49,58708,54418],{"class":51831},[49,58710,51838],{"class":73},[49,58712,58713,58715,58717],{"class":51,"line":2316},[49,58714,52675],{"class":73},[49,58716,52344],{"class":51831},[49,58718,51838],{"class":73},[49,58720,58721,58723,58725,58727,58729,58731,58733,58736],{"class":51,"line":2322},[49,58722,11918],{"class":77},[49,58724,54922],{"class":159},[49,58726,14261],{"class":77},[49,58728,54927],{"class":73},[49,58730,54930],{"class":55},[49,58732,841],{"class":73},[49,58734,58735],{"class":59},"'button'",[49,58737,847],{"class":73},[49,58739,58740,58743,58745,58747,58749,58751,58753],{"class":51,"line":2327},[49,58741,58742],{"class":73},"    btn.",[49,58744,58344],{"class":55},[49,58746,841],{"class":73},[49,58748,58349],{"class":59},[49,58750,13132],{"class":73},[49,58752,54980],{"class":77},[49,58754,54983],{"class":73},[49,58756,58757,58760,58762,58764,58767,58769],{"class":51,"line":2341},[49,58758,58759],{"class":77},"      const",[49,58761,2938],{"class":159},[49,58763,14261],{"class":77},[49,58765,58766],{"class":73}," Math.",[49,58768,58391],{"class":55},[49,58770,2674],{"class":73},[49,58772,58773,58776,58779],{"class":51,"line":2346},[49,58774,58775],{"class":73},"      console.",[49,58777,58778],{"class":55},"log",[49,58780,854],{"class":73},[49,58782,58783],{"class":51,"line":2352},[49,58784,33992],{"class":73},[49,58786,58787,58789,58791],{"class":51,"line":2373},[49,58788,52948],{"class":73},[49,58790,52344],{"class":51831},[49,58792,51838],{"class":73},[49,58794,58795,58797,58799],{"class":51,"line":2378},[49,58796,52316],{"class":73},[49,58798,52331],{"class":51831},[49,58800,51838],{"class":73},[49,58802,58803],{"class":51,"line":2392},[49,58804,399],{"emptyLinePlaceholder":398},[49,58806,58807,58809,58811],{"class":51,"line":2397},[49,58808,52316],{"class":73},[49,58810,51166],{"class":51831},[49,58812,51838],{"class":73},[14,58814,58815],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58817,58818],{},"常量不可以重新赋值",[14,58820,58821],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[40,58823,58825],{"className":51164,"code":58824,"language":51166,"meta":27,"style":27},"\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",[46,58826,58827,58837,58851,58855,58863,58877,58897,58909,58917,58921,58929,58941,58949,58960,58978,58994,59008,59016,59020,59028,59036,59040],{"__ignoreMap":27},[49,58828,58829,58831,58833,58835],{"class":51,"line":52},[49,58830,51828],{"class":73},[49,58832,51832],{"class":51831},[49,58834,51835],{"class":55},[49,58836,51838],{"class":73},[49,58838,58839,58841,58843,58845,58847,58849],{"class":51,"line":63},[49,58840,1739],{"class":73},[49,58842,51166],{"class":51831},[49,58844,51847],{"class":55},[49,58846,78],{"class":73},[49,58848,51852],{"class":59},[49,58850,51838],{"class":73},[49,58852,58853],{"class":51,"line":70},[49,58854,399],{"emptyLinePlaceholder":398},[49,58856,58857,58859,58861],{"class":51,"line":219},[49,58858,1739],{"class":73},[49,58860,51865],{"class":51831},[49,58862,51838],{"class":73},[49,58864,58865,58867,58869,58871,58873,58875],{"class":51,"line":233},[49,58866,52675],{"class":73},[49,58868,51875],{"class":51831},[49,58870,51878],{"class":55},[49,58872,78],{"class":73},[49,58874,51883],{"class":59},[49,58876,51838],{"class":73},[49,58878,58879,58881,58883,58885,58887,58889,58891,58893,58895],{"class":51,"line":241},[49,58880,52675],{"class":73},[49,58882,51875],{"class":51831},[49,58884,15617],{"class":55},[49,58886,78],{"class":73},[49,58888,51922],{"class":59},[49,58890,51902],{"class":55},[49,58892,78],{"class":73},[49,58894,51929],{"class":59},[49,58896,51838],{"class":73},[49,58898,58899,58901,58903,58905,58907],{"class":51,"line":1920},[49,58900,52675],{"class":73},[49,58902,51938],{"class":51831},[49,58904,51941],{"class":73},[49,58906,51938],{"class":51831},[49,58908,51838],{"class":73},[49,58910,58911,58913,58915],{"class":51,"line":2011},[49,58912,52316],{"class":73},[49,58914,51865],{"class":51831},[49,58916,51838],{"class":73},[49,58918,58919],{"class":51,"line":2017},[49,58920,399],{"emptyLinePlaceholder":398},[49,58922,58923,58925,58927],{"class":51,"line":2029},[49,58924,1739],{"class":73},[49,58926,52331],{"class":51831},[49,58928,51838],{"class":73},[49,58930,58931,58933,58935,58937,58939],{"class":51,"line":2311},[49,58932,52675],{"class":73},[49,58934,54418],{"class":51831},[49,58936,54424],{"class":73},[49,58938,54418],{"class":51831},[49,58940,51838],{"class":73},[49,58942,58943,58945,58947],{"class":51,"line":2316},[49,58944,52675],{"class":73},[49,58946,52344],{"class":51831},[49,58948,51838],{"class":73},[49,58950,58951,58953,58955,58957],{"class":51,"line":2322},[49,58952,11918],{"class":77},[49,58954,2938],{"class":159},[49,58956,14261],{"class":77},[49,58958,58959],{"class":159}," 10\n",[49,58961,58962,58964,58966,58968,58970,58972,58974,58976],{"class":51,"line":2327},[49,58963,11918],{"class":77},[49,58965,54922],{"class":159},[49,58967,14261],{"class":77},[49,58969,54927],{"class":73},[49,58971,54930],{"class":55},[49,58973,841],{"class":73},[49,58975,58735],{"class":59},[49,58977,847],{"class":73},[49,58979,58980,58982,58984,58986,58988,58990,58992],{"class":51,"line":2341},[49,58981,58742],{"class":73},[49,58983,58344],{"class":55},[49,58985,841],{"class":73},[49,58987,58349],{"class":59},[49,58989,13132],{"class":73},[49,58991,54980],{"class":77},[49,58993,54983],{"class":73},[49,58995,58996,58998,59000,59002,59004,59006],{"class":51,"line":2346},[49,58997,58759],{"class":77},[49,58999,2938],{"class":159},[49,59001,14261],{"class":77},[49,59003,58766],{"class":73},[49,59005,58391],{"class":55},[49,59007,2674],{"class":73},[49,59009,59010,59012,59014],{"class":51,"line":2352},[49,59011,58775],{"class":73},[49,59013,58778],{"class":55},[49,59015,854],{"class":73},[49,59017,59018],{"class":51,"line":2373},[49,59019,33992],{"class":73},[49,59021,59022,59024,59026],{"class":51,"line":2378},[49,59023,52948],{"class":73},[49,59025,52344],{"class":51831},[49,59027,51838],{"class":73},[49,59029,59030,59032,59034],{"class":51,"line":2392},[49,59031,52316],{"class":73},[49,59033,52331],{"class":51831},[49,59035,51838],{"class":73},[49,59037,59038],{"class":51,"line":2397},[49,59039,399],{"emptyLinePlaceholder":398},[49,59041,59042,59044,59046],{"class":51,"line":2426},[49,59043,52316],{"class":73},[49,59045,51166],{"class":51831},[49,59047,51838],{"class":73},[14,59049,59050],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[40,59052,59054],{"className":51164,"code":59053,"language":51166,"meta":27,"style":27},"\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",[46,59055,59056,59066,59080,59084,59092,59106,59126,59138,59146,59150,59158,59170,59178,59188,59206,59222,59235,59243,59247,59255,59263,59267],{"__ignoreMap":27},[49,59057,59058,59060,59062,59064],{"class":51,"line":52},[49,59059,51828],{"class":73},[49,59061,51832],{"class":51831},[49,59063,51835],{"class":55},[49,59065,51838],{"class":73},[49,59067,59068,59070,59072,59074,59076,59078],{"class":51,"line":63},[49,59069,1739],{"class":73},[49,59071,51166],{"class":51831},[49,59073,51847],{"class":55},[49,59075,78],{"class":73},[49,59077,51852],{"class":59},[49,59079,51838],{"class":73},[49,59081,59082],{"class":51,"line":70},[49,59083,399],{"emptyLinePlaceholder":398},[49,59085,59086,59088,59090],{"class":51,"line":219},[49,59087,1739],{"class":73},[49,59089,51865],{"class":51831},[49,59091,51838],{"class":73},[49,59093,59094,59096,59098,59100,59102,59104],{"class":51,"line":233},[49,59095,52675],{"class":73},[49,59097,51875],{"class":51831},[49,59099,51878],{"class":55},[49,59101,78],{"class":73},[49,59103,51883],{"class":59},[49,59105,51838],{"class":73},[49,59107,59108,59110,59112,59114,59116,59118,59120,59122,59124],{"class":51,"line":241},[49,59109,52675],{"class":73},[49,59111,51875],{"class":51831},[49,59113,15617],{"class":55},[49,59115,78],{"class":73},[49,59117,51922],{"class":59},[49,59119,51902],{"class":55},[49,59121,78],{"class":73},[49,59123,51929],{"class":59},[49,59125,51838],{"class":73},[49,59127,59128,59130,59132,59134,59136],{"class":51,"line":1920},[49,59129,52675],{"class":73},[49,59131,51938],{"class":51831},[49,59133,51941],{"class":73},[49,59135,51938],{"class":51831},[49,59137,51838],{"class":73},[49,59139,59140,59142,59144],{"class":51,"line":2011},[49,59141,52316],{"class":73},[49,59143,51865],{"class":51831},[49,59145,51838],{"class":73},[49,59147,59148],{"class":51,"line":2017},[49,59149,399],{"emptyLinePlaceholder":398},[49,59151,59152,59154,59156],{"class":51,"line":2029},[49,59153,1739],{"class":73},[49,59155,52331],{"class":51831},[49,59157,51838],{"class":73},[49,59159,59160,59162,59164,59166,59168],{"class":51,"line":2311},[49,59161,52675],{"class":73},[49,59163,54418],{"class":51831},[49,59165,54424],{"class":73},[49,59167,54418],{"class":51831},[49,59169,51838],{"class":73},[49,59171,59172,59174,59176],{"class":51,"line":2316},[49,59173,52675],{"class":73},[49,59175,52344],{"class":51831},[49,59177,51838],{"class":73},[49,59179,59180,59182,59184,59186],{"class":51,"line":2322},[49,59181,11918],{"class":77},[49,59183,2938],{"class":159},[49,59185,14261],{"class":77},[49,59187,58959],{"class":159},[49,59189,59190,59192,59194,59196,59198,59200,59202,59204],{"class":51,"line":2327},[49,59191,11918],{"class":77},[49,59193,54922],{"class":159},[49,59195,14261],{"class":77},[49,59197,54927],{"class":73},[49,59199,54930],{"class":55},[49,59201,841],{"class":73},[49,59203,58735],{"class":59},[49,59205,847],{"class":73},[49,59207,59208,59210,59212,59214,59216,59218,59220],{"class":51,"line":2341},[49,59209,58742],{"class":73},[49,59211,58344],{"class":55},[49,59213,841],{"class":73},[49,59215,58349],{"class":59},[49,59217,13132],{"class":73},[49,59219,54980],{"class":77},[49,59221,54983],{"class":73},[49,59223,59224,59227,59229,59231,59233],{"class":51,"line":2346},[49,59225,59226],{"class":73},"      num ",[49,59228,78],{"class":77},[49,59230,58766],{"class":73},[49,59232,58391],{"class":55},[49,59234,2674],{"class":73},[49,59236,59237,59239,59241],{"class":51,"line":2352},[49,59238,58775],{"class":73},[49,59240,58778],{"class":55},[49,59242,854],{"class":73},[49,59244,59245],{"class":51,"line":2373},[49,59246,33992],{"class":73},[49,59248,59249,59251,59253],{"class":51,"line":2378},[49,59250,52948],{"class":73},[49,59252,52344],{"class":51831},[49,59254,51838],{"class":73},[49,59256,59257,59259,59261],{"class":51,"line":2392},[49,59258,52316],{"class":73},[49,59260,52331],{"class":51831},[49,59262,51838],{"class":73},[49,59264,59265],{"class":51,"line":2397},[49,59266,399],{"emptyLinePlaceholder":398},[49,59268,59269,59271,59273],{"class":51,"line":2426},[49,59270,52316],{"class":73},[49,59272,51166],{"class":51831},[49,59274,51838],{"class":73},[14,59276,59277],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[18,59279,59281],{"id":59280},"_324-事件监听版本","3.2.4 事件监听版本",[14,59283,59284],{},[25,59285],{"alt":27,"src":59286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,59288,59289],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,59291,59292],{},"这种方式会覆盖前边的事件监听:",[40,59294,59296],{"className":51164,"code":59295,"language":51166,"meta":27,"style":27},"\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",[46,59297,59298,59308,59322,59326,59334,59348,59368,59380,59388,59392,59400,59412,59420,59438,59452,59463,59467,59479,59489,59493,59501,59509,59513],{"__ignoreMap":27},[49,59299,59300,59302,59304,59306],{"class":51,"line":52},[49,59301,51828],{"class":73},[49,59303,51832],{"class":51831},[49,59305,51835],{"class":55},[49,59307,51838],{"class":73},[49,59309,59310,59312,59314,59316,59318,59320],{"class":51,"line":63},[49,59311,1739],{"class":73},[49,59313,51166],{"class":51831},[49,59315,51847],{"class":55},[49,59317,78],{"class":73},[49,59319,51852],{"class":59},[49,59321,51838],{"class":73},[49,59323,59324],{"class":51,"line":70},[49,59325,399],{"emptyLinePlaceholder":398},[49,59327,59328,59330,59332],{"class":51,"line":219},[49,59329,1739],{"class":73},[49,59331,51865],{"class":51831},[49,59333,51838],{"class":73},[49,59335,59336,59338,59340,59342,59344,59346],{"class":51,"line":233},[49,59337,52675],{"class":73},[49,59339,51875],{"class":51831},[49,59341,51878],{"class":55},[49,59343,78],{"class":73},[49,59345,51883],{"class":59},[49,59347,51838],{"class":73},[49,59349,59350,59352,59354,59356,59358,59360,59362,59364,59366],{"class":51,"line":241},[49,59351,52675],{"class":73},[49,59353,51875],{"class":51831},[49,59355,15617],{"class":55},[49,59357,78],{"class":73},[49,59359,51922],{"class":59},[49,59361,51902],{"class":55},[49,59363,78],{"class":73},[49,59365,51929],{"class":59},[49,59367,51838],{"class":73},[49,59369,59370,59372,59374,59376,59378],{"class":51,"line":1920},[49,59371,52675],{"class":73},[49,59373,51938],{"class":51831},[49,59375,51941],{"class":73},[49,59377,51938],{"class":51831},[49,59379,51838],{"class":73},[49,59381,59382,59384,59386],{"class":51,"line":2011},[49,59383,52316],{"class":73},[49,59385,51865],{"class":51831},[49,59387,51838],{"class":73},[49,59389,59390],{"class":51,"line":2017},[49,59391,399],{"emptyLinePlaceholder":398},[49,59393,59394,59396,59398],{"class":51,"line":2029},[49,59395,1739],{"class":73},[49,59397,52331],{"class":51831},[49,59399,51838],{"class":73},[49,59401,59402,59404,59406,59408,59410],{"class":51,"line":2311},[49,59403,52675],{"class":73},[49,59405,54418],{"class":51831},[49,59407,54424],{"class":73},[49,59409,54418],{"class":51831},[49,59411,51838],{"class":73},[49,59413,59414,59416,59418],{"class":51,"line":2316},[49,59415,52675],{"class":73},[49,59417,52344],{"class":51831},[49,59419,51838],{"class":73},[49,59421,59422,59424,59426,59428,59430,59432,59434,59436],{"class":51,"line":2322},[49,59423,11918],{"class":77},[49,59425,54922],{"class":159},[49,59427,14261],{"class":77},[49,59429,54927],{"class":73},[49,59431,54930],{"class":55},[49,59433,841],{"class":73},[49,59435,58735],{"class":59},[49,59437,847],{"class":73},[49,59439,59440,59442,59445,59447,59450],{"class":51,"line":2327},[49,59441,58742],{"class":73},[49,59443,59444],{"class":55},"onclick",[49,59446,14261],{"class":77},[49,59448,59449],{"class":77}," function",[49,59451,54983],{"class":73},[49,59453,59454,59457,59459,59461],{"class":51,"line":2341},[49,59455,59456],{"class":55},"      alert",[49,59458,841],{"class":73},[49,59460,1301],{"class":159},[49,59462,847],{"class":73},[49,59464,59465],{"class":51,"line":2346},[49,59466,2885],{"class":73},[49,59468,59469,59471,59473,59475,59477],{"class":51,"line":2352},[49,59470,58742],{"class":73},[49,59472,59444],{"class":55},[49,59474,14261],{"class":77},[49,59476,59449],{"class":77},[49,59478,54983],{"class":73},[49,59480,59481,59483,59485,59487],{"class":51,"line":2373},[49,59482,59456],{"class":55},[49,59484,841],{"class":73},[49,59486,1579],{"class":159},[49,59488,847],{"class":73},[49,59490,59491],{"class":51,"line":2378},[49,59492,2885],{"class":73},[49,59494,59495,59497,59499],{"class":51,"line":2392},[49,59496,52948],{"class":73},[49,59498,52344],{"class":51831},[49,59500,51838],{"class":73},[49,59502,59503,59505,59507],{"class":51,"line":2397},[49,59504,52316],{"class":73},[49,59506,52331],{"class":51831},[49,59508,51838],{"class":73},[49,59510,59511],{"class":51,"line":2426},[49,59512,399],{"emptyLinePlaceholder":398},[49,59514,59515,59517,59519],{"class":51,"line":2431},[49,59516,52316],{"class":73},[49,59518,51166],{"class":51831},[49,59520,51838],{"class":73},[14,59522,59523],{},"只要点击就输出结果为22,前边11被覆盖了",[40,59525,59527],{"className":51164,"code":59526,"language":51166,"meta":27,"style":27},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[46,59528,59529,59534,59539,59543,59548,59553],{"__ignoreMap":27},[49,59530,59531],{"class":51,"line":52},[49,59532,59533],{"class":73},"  btn.addEventListener('click', function () {\n",[49,59535,59536],{"class":51,"line":63},[49,59537,59538],{"class":73},"      alert(11)\n",[49,59540,59541],{"class":51,"line":70},[49,59542,33992],{"class":73},[49,59544,59545],{"class":51,"line":219},[49,59546,59547],{"class":73},"    btn.addEventListener('click', function () {\n",[49,59549,59550],{"class":51,"line":233},[49,59551,59552],{"class":73},"      alert(22)\n",[49,59554,59555],{"class":51,"line":241},[49,59556,33992],{"class":73},[14,59558,59559],{},"点击第一次输出11,第二次点击为22",[18,59561,59563],{"id":59562},"_325-事件类型","3.2.5 事件类型",[14,59565,59566],{},[25,59567],{"alt":27,"src":59568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[130,59570,59572],{"id":59571},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59574,59575],{},"补充知识:",[14,59577,59578],{},"轮播图自动播放模块,可以使用",[14,59580,59581],{},"let timerId = setInterval(function () {",[14,59583,59584],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59586,59587],{},"用js方法模拟进行点击事件,click必须加()",[14,59589,59590],{},"next.click()",[14,59592,59593],{},"}, 1000)",[14,59595,59596],{},[25,59597],{"alt":27,"src":59598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[40,59600,59602],{"className":53598,"code":59601,"language":53600,"meta":27,"style":27},"\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",[46,59603,59604,59608,59618,59632,59636,59644,59659,59679,59699,59712,59720,59725,59730,59734,59738,59743,59748,59753,59758,59762,59766,59771,59776,59781,59785,59789,59794,59798,59803,59808,59812,59816,59821,59826,59831,59836,59841,59845,59849,59854,59859,59864,59869,59874,59878,59882,59887,59892,59897,59902,59907,59912,59917,59922,59927,59932,59936,59940,59945,59950,59954,59958,59963,59968,59972,59977,59982,59986,59990,59995,59999,60004,60009,60013,60018,60022,60026,60031,60036,60041,60046,60051,60056,60061,60065,60069,60073,60078,60083,60088,60093,60097,60105,60113,60117,60125,60140,60154,60175,60183,60197,60210,60225,60244,60256,60268,60280,60292,60304,60316,60328,60336,60351,60375,60399,60407,60415,60423,60431,60436,60441,60446,60451,60456,60461,60466,60471,60476,60481,60485,60490,60495,60500,60505,60510,60515,60520,60525,60530,60534,60539,60544,60549,60554,60559,60564,60569,60574,60579,60584,60589,60594,60598,60602,60607,60612,60617,60621,60626,60631,60636,60641,60646,60650,60655,60659,60663,60667,60671,60675,60679,60684,60689,60694,60699,60704,60709,60714,60719,60724,60728,60732,60737,60742,60747,60752,60757,60761,60766,60771,60776,60781,60786,60791,60795,60799,60804,60808,60813,60817,60822,60827,60832,60837,60842,60847,60851,60859,60867,60871],{"__ignoreMap":27},[49,59605,59606],{"class":51,"line":52},[49,59607,399],{"emptyLinePlaceholder":398},[49,59609,59610,59612,59614,59616],{"class":51,"line":63},[49,59611,51828],{"class":73},[49,59613,51832],{"class":77},[49,59615,51835],{"class":159},[49,59617,51838],{"class":73},[49,59619,59620,59622,59624,59626,59628,59630],{"class":51,"line":70},[49,59621,1739],{"class":73},[49,59623,51166],{"class":51831},[49,59625,51847],{"class":55},[49,59627,78],{"class":73},[49,59629,51852],{"class":59},[49,59631,51838],{"class":73},[49,59633,59634],{"class":51,"line":219},[49,59635,399],{"emptyLinePlaceholder":398},[49,59637,59638,59640,59642],{"class":51,"line":233},[49,59639,1739],{"class":73},[49,59641,51865],{"class":51831},[49,59643,51838],{"class":73},[49,59645,59646,59648,59650,59652,59654,59656],{"class":51,"line":241},[49,59647,52675],{"class":73},[49,59649,51875],{"class":51831},[49,59651,51878],{"class":55},[49,59653,78],{"class":73},[49,59655,51883],{"class":59},[49,59657,59658],{"class":73}," \u002F>\n",[49,59660,59661,59663,59665,59667,59669,59671,59673,59675,59677],{"class":51,"line":1920},[49,59662,52675],{"class":73},[49,59664,51875],{"class":51831},[49,59666,51894],{"class":55},[49,59668,78],{"class":73},[49,59670,51899],{"class":59},[49,59672,51902],{"class":55},[49,59674,78],{"class":73},[49,59676,51907],{"class":59},[49,59678,59658],{"class":73},[49,59680,59681,59683,59685,59687,59689,59691,59693,59695,59697],{"class":51,"line":2011},[49,59682,52675],{"class":73},[49,59684,51875],{"class":51831},[49,59686,15617],{"class":55},[49,59688,78],{"class":73},[49,59690,51922],{"class":59},[49,59692,51902],{"class":55},[49,59694,78],{"class":73},[49,59696,51929],{"class":59},[49,59698,59658],{"class":73},[49,59700,59701,59703,59705,59708,59710],{"class":51,"line":2017},[49,59702,52675],{"class":73},[49,59704,51938],{"class":51831},[49,59706,59707],{"class":73},">轮播图点击切换\u003C\u002F",[49,59709,51938],{"class":51831},[49,59711,51838],{"class":73},[49,59713,59714,59716,59718],{"class":51,"line":2029},[49,59715,52675],{"class":73},[49,59717,757],{"class":51831},[49,59719,51838],{"class":73},[49,59721,59722],{"class":51,"line":2311},[49,59723,59724],{"class":73},"    * {\n",[49,59726,59727],{"class":51,"line":2316},[49,59728,59729],{"class":73},"      box-sizing: border-box;\n",[49,59731,59732],{"class":51,"line":2322},[49,59733,2885],{"class":73},[49,59735,59736],{"class":51,"line":2327},[49,59737,399],{"emptyLinePlaceholder":398},[49,59739,59740],{"class":51,"line":2341},[49,59741,59742],{"class":73},"    .slider {\n",[49,59744,59745],{"class":51,"line":2346},[49,59746,59747],{"class":73},"      width: 560px;\n",[49,59749,59750],{"class":51,"line":2352},[49,59751,59752],{"class":73},"      height: 400px;\n",[49,59754,59755],{"class":51,"line":2373},[49,59756,59757],{"class":73},"      overflow: hidden;\n",[49,59759,59760],{"class":51,"line":2378},[49,59761,2885],{"class":73},[49,59763,59764],{"class":51,"line":2392},[49,59765,399],{"emptyLinePlaceholder":398},[49,59767,59768],{"class":51,"line":2397},[49,59769,59770],{"class":73},"    .slider-wrapper {\n",[49,59772,59773],{"class":51,"line":2426},[49,59774,59775],{"class":73},"      width: 100%;\n",[49,59777,59778],{"class":51,"line":2431},[49,59779,59780],{"class":73},"      height: 320px;\n",[49,59782,59783],{"class":51,"line":2448},[49,59784,2885],{"class":73},[49,59786,59787],{"class":51,"line":2453},[49,59788,399],{"emptyLinePlaceholder":398},[49,59790,59791],{"class":51,"line":2458},[49,59792,59793],{"class":73},"    .slider-wrapper img {\n",[49,59795,59796],{"class":51,"line":2463},[49,59797,59775],{"class":73},[49,59799,59800],{"class":51,"line":2477},[49,59801,59802],{"class":73},"      height: 100%;\n",[49,59804,59805],{"class":51,"line":2482},[49,59806,59807],{"class":73},"      display: block;\n",[49,59809,59810],{"class":51,"line":3274},[49,59811,2885],{"class":73},[49,59813,59814],{"class":51,"line":3288},[49,59815,399],{"emptyLinePlaceholder":398},[49,59817,59818],{"class":51,"line":3296},[49,59819,59820],{"class":73},"    .slider-footer {\n",[49,59822,59823],{"class":51,"line":3301},[49,59824,59825],{"class":73},"      height: 80px;\n",[49,59827,59828],{"class":51,"line":3307},[49,59829,59830],{"class":73},"      background-color: rgb(100, 67, 68);\n",[49,59832,59833],{"class":51,"line":3313},[49,59834,59835],{"class":73},"      padding: 12px 12px 0 12px;\n",[49,59837,59838],{"class":51,"line":3318},[49,59839,59840],{"class":73},"      position: relative;\n",[49,59842,59843],{"class":51,"line":8645},[49,59844,2885],{"class":73},[49,59846,59847],{"class":51,"line":8669},[49,59848,399],{"emptyLinePlaceholder":398},[49,59850,59851],{"class":51,"line":8674},[49,59852,59853],{"class":73},"    .slider-footer .toggle {\n",[49,59855,59856],{"class":51,"line":8680},[49,59857,59858],{"class":73},"      position: absolute;\n",[49,59860,59861],{"class":51,"line":8707},[49,59862,59863],{"class":73},"      right: 0;\n",[49,59865,59866],{"class":51,"line":8712},[49,59867,59868],{"class":73},"      top: 12px;\n",[49,59870,59871],{"class":51,"line":8718},[49,59872,59873],{"class":73},"      display: flex;\n",[49,59875,59876],{"class":51,"line":8730},[49,59877,2885],{"class":73},[49,59879,59880],{"class":51,"line":8742},[49,59881,399],{"emptyLinePlaceholder":398},[49,59883,59884],{"class":51,"line":8754},[49,59885,59886],{"class":73},"    .slider-footer .toggle button {\n",[49,59888,59889],{"class":51,"line":10413},[49,59890,59891],{"class":73},"      margin-right: 12px;\n",[49,59893,59894],{"class":51,"line":10438},[49,59895,59896],{"class":73},"      width: 28px;\n",[49,59898,59899],{"class":51,"line":10461},[49,59900,59901],{"class":73},"      height: 28px;\n",[49,59903,59904],{"class":51,"line":10485},[49,59905,59906],{"class":73},"      appearance: none;\n",[49,59908,59909],{"class":51,"line":10490},[49,59910,59911],{"class":73},"      border: none;\n",[49,59913,59914],{"class":51,"line":10495},[49,59915,59916],{"class":73},"      background: rgba(255, 255, 255, 0.1);\n",[49,59918,59919],{"class":51,"line":10500},[49,59920,59921],{"class":73},"      color: #fff;\n",[49,59923,59924],{"class":51,"line":10509},[49,59925,59926],{"class":73},"      border-radius: 4px;\n",[49,59928,59929],{"class":51,"line":10514},[49,59930,59931],{"class":73},"      cursor: pointer;\n",[49,59933,59934],{"class":51,"line":10520},[49,59935,2885],{"class":73},[49,59937,59938],{"class":51,"line":10541},[49,59939,399],{"emptyLinePlaceholder":398},[49,59941,59942],{"class":51,"line":10547},[49,59943,59944],{"class":73},"    .slider-footer .toggle button:hover {\n",[49,59946,59947],{"class":51,"line":10561},[49,59948,59949],{"class":73},"      background: rgba(255, 255, 255, 0.2);\n",[49,59951,59952],{"class":51,"line":10567},[49,59953,2885],{"class":73},[49,59955,59956],{"class":51,"line":10594},[49,59957,399],{"emptyLinePlaceholder":398},[49,59959,59960],{"class":51,"line":10603},[49,59961,59962],{"class":73},"    .slider-footer p {\n",[49,59964,59965],{"class":51,"line":10609},[49,59966,59967],{"class":73},"      margin: 0;\n",[49,59969,59970],{"class":51,"line":10617},[49,59971,59921],{"class":73},[49,59973,59974],{"class":51,"line":10622},[49,59975,59976],{"class":73},"      font-size: 18px;\n",[49,59978,59979],{"class":51,"line":17301},[49,59980,59981],{"class":73},"      margin-bottom: 10px;\n",[49,59983,59984],{"class":51,"line":17307},[49,59985,2885],{"class":73},[49,59987,59988],{"class":51,"line":17330},[49,59989,399],{"emptyLinePlaceholder":398},[49,59991,59992],{"class":51,"line":17336},[49,59993,59994],{"class":73},"    .slider-indicator {\n",[49,59996,59997],{"class":51,"line":17359},[49,59998,59967],{"class":73},[49,60000,60001],{"class":51,"line":17373},[49,60002,60003],{"class":73},"      padding: 0;\n",[49,60005,60006],{"class":51,"line":17393},[49,60007,60008],{"class":73},"      list-style: none;\n",[49,60010,60011],{"class":51,"line":17399},[49,60012,59873],{"class":73},[49,60014,60015],{"class":51,"line":17410},[49,60016,60017],{"class":73},"      align-items: center;\n",[49,60019,60020],{"class":51,"line":17433},[49,60021,2885],{"class":73},[49,60023,60024],{"class":51,"line":17455},[49,60025,399],{"emptyLinePlaceholder":398},[49,60027,60028],{"class":51,"line":17460},[49,60029,60030],{"class":73},"    .slider-indicator li {\n",[49,60032,60033],{"class":51,"line":17466},[49,60034,60035],{"class":73},"      width: 8px;\n",[49,60037,60038],{"class":51,"line":17480},[49,60039,60040],{"class":73},"      height: 8px;\n",[49,60042,60043],{"class":51,"line":17493},[49,60044,60045],{"class":73},"      margin: 4px;\n",[49,60047,60048],{"class":51,"line":17498},[49,60049,60050],{"class":73},"      border-radius: 50%;\n",[49,60052,60053],{"class":51,"line":17512},[49,60054,60055],{"class":73},"      background: #fff;\n",[49,60057,60058],{"class":51,"line":17517},[49,60059,60060],{"class":73},"      opacity: 0.4;\n",[49,60062,60063],{"class":51,"line":17523},[49,60064,59931],{"class":73},[49,60066,60067],{"class":51,"line":17528},[49,60068,2885],{"class":73},[49,60070,60071],{"class":51,"line":17542},[49,60072,399],{"emptyLinePlaceholder":398},[49,60074,60075],{"class":51,"line":17547},[49,60076,60077],{"class":73},"    .slider-indicator li.active {\n",[49,60079,60080],{"class":51,"line":17552},[49,60081,60082],{"class":73},"      width: 12px;\n",[49,60084,60085],{"class":51,"line":17566},[49,60086,60087],{"class":73},"      height: 12px;\n",[49,60089,60090],{"class":51,"line":17578},[49,60091,60092],{"class":73},"      opacity: 1;\n",[49,60094,60095],{"class":51,"line":17583},[49,60096,2885],{"class":73},[49,60098,60099,60101,60103],{"class":51,"line":17596},[49,60100,52948],{"class":73},[49,60102,757],{"class":51831},[49,60104,51838],{"class":73},[49,60106,60107,60109,60111],{"class":51,"line":17601},[49,60108,52316],{"class":73},[49,60110,51865],{"class":51831},[49,60112,51838],{"class":73},[49,60114,60115],{"class":51,"line":17606},[49,60116,399],{"emptyLinePlaceholder":398},[49,60118,60119,60121,60123],{"class":51,"line":17611},[49,60120,1739],{"class":73},[49,60122,52331],{"class":51831},[49,60124,51838],{"class":73},[49,60126,60127,60129,60131,60133,60135,60138],{"class":51,"line":17624},[49,60128,52675],{"class":73},[49,60130,52142],{"class":51831},[49,60132,54017],{"class":55},[49,60134,78],{"class":73},[49,60136,60137],{"class":59},"\"slider\"",[49,60139,51838],{"class":73},[49,60141,60142,60144,60146,60148,60150,60152],{"class":51,"line":17629},[49,60143,51872],{"class":73},[49,60145,52142],{"class":51831},[49,60147,54017],{"class":55},[49,60149,78],{"class":73},[49,60151,55758],{"class":59},[49,60153,51838],{"class":73},[49,60155,60156,60158,60160,60162,60164,60167,60169,60171,60173],{"class":51,"line":33164},[49,60157,55765],{"class":73},[49,60159,25],{"class":51831},[49,60161,55770],{"class":55},[49,60163,78],{"class":73},[49,60165,60166],{"class":59},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[49,60168,55778],{"class":55},[49,60170,78],{"class":73},[49,60172,8349],{"class":59},[49,60174,59658],{"class":73},[49,60176,60177,60179,60181],{"class":51,"line":33170},[49,60178,52307],{"class":73},[49,60180,52142],{"class":51831},[49,60182,51838],{"class":73},[49,60184,60185,60187,60189,60191,60193,60195],{"class":51,"line":33176},[49,60186,51872],{"class":73},[49,60188,52142],{"class":51831},[49,60190,54017],{"class":55},[49,60192,78],{"class":73},[49,60194,55805],{"class":59},[49,60196,51838],{"class":73},[49,60198,60199,60201,60203,60206,60208],{"class":51,"line":33182},[49,60200,55765],{"class":73},[49,60202,14],{"class":51831},[49,60204,60205],{"class":73},">对人类来说会不会太超前了？\u003C\u002F",[49,60207,14],{"class":51831},[49,60209,51838],{"class":73},[49,60211,60212,60214,60216,60218,60220,60223],{"class":51,"line":33188},[49,60213,55765],{"class":73},[49,60215,742],{"class":51831},[49,60217,54017],{"class":55},[49,60219,78],{"class":73},[49,60221,60222],{"class":59},"\"slider-indicator\"",[49,60224,51838],{"class":73},[49,60226,60227,60229,60231,60233,60235,60238,60240,60242],{"class":51,"line":33199},[49,60228,55833],{"class":73},[49,60230,33],{"class":51831},[49,60232,54017],{"class":55},[49,60234,78],{"class":73},[49,60236,60237],{"class":59},"\"active\"",[49,60239,55845],{"class":73},[49,60241,33],{"class":51831},[49,60243,51838],{"class":73},[49,60245,60246,60248,60250,60252,60254],{"class":51,"line":33205},[49,60247,55833],{"class":73},[49,60249,33],{"class":51831},[49,60251,55845],{"class":73},[49,60253,33],{"class":51831},[49,60255,51838],{"class":73},[49,60257,60258,60260,60262,60264,60266],{"class":51,"line":33225},[49,60259,55833],{"class":73},[49,60261,33],{"class":51831},[49,60263,55845],{"class":73},[49,60265,33],{"class":51831},[49,60267,51838],{"class":73},[49,60269,60270,60272,60274,60276,60278],{"class":51,"line":33231},[49,60271,55833],{"class":73},[49,60273,33],{"class":51831},[49,60275,55845],{"class":73},[49,60277,33],{"class":51831},[49,60279,51838],{"class":73},[49,60281,60282,60284,60286,60288,60290],{"class":51,"line":33242},[49,60283,55833],{"class":73},[49,60285,33],{"class":51831},[49,60287,55845],{"class":73},[49,60289,33],{"class":51831},[49,60291,51838],{"class":73},[49,60293,60294,60296,60298,60300,60302],{"class":51,"line":33248},[49,60295,55833],{"class":73},[49,60297,33],{"class":51831},[49,60299,55845],{"class":73},[49,60301,33],{"class":51831},[49,60303,51838],{"class":73},[49,60305,60306,60308,60310,60312,60314],{"class":51,"line":33254},[49,60307,55833],{"class":73},[49,60309,33],{"class":51831},[49,60311,55845],{"class":73},[49,60313,33],{"class":51831},[49,60315,51838],{"class":73},[49,60317,60318,60320,60322,60324,60326],{"class":51,"line":33260},[49,60319,55833],{"class":73},[49,60321,33],{"class":51831},[49,60323,55845],{"class":73},[49,60325,33],{"class":51831},[49,60327,51838],{"class":73},[49,60329,60330,60332,60334],{"class":51,"line":33266},[49,60331,55938],{"class":73},[49,60333,742],{"class":51831},[49,60335,51838],{"class":73},[49,60337,60338,60340,60342,60344,60346,60349],{"class":51,"line":33272},[49,60339,55765],{"class":73},[49,60341,52142],{"class":51831},[49,60343,54017],{"class":55},[49,60345,78],{"class":73},[49,60347,60348],{"class":59},"\"toggle\"",[49,60350,51838],{"class":73},[49,60352,60353,60355,60357,60359,60361,60364,60366,60369,60371,60373],{"class":51,"line":33278},[49,60354,55833],{"class":73},[49,60356,54418],{"class":51831},[49,60358,54017],{"class":55},[49,60360,78],{"class":73},[49,60362,60363],{"class":59},"\"prev\"",[49,60365,1789],{"class":73},[49,60367,60368],{"class":159},"&lt;",[49,60370,52316],{"class":73},[49,60372,54418],{"class":51831},[49,60374,51838],{"class":73},[49,60376,60377,60379,60381,60383,60385,60388,60390,60393,60395,60397],{"class":51,"line":33284},[49,60378,55833],{"class":73},[49,60380,54418],{"class":51831},[49,60382,54017],{"class":55},[49,60384,78],{"class":73},[49,60386,60387],{"class":59},"\"next\"",[49,60389,1789],{"class":73},[49,60391,60392],{"class":159},"&gt;",[49,60394,52316],{"class":73},[49,60396,54418],{"class":51831},[49,60398,51838],{"class":73},[49,60400,60401,60403,60405],{"class":51,"line":33304},[49,60402,55938],{"class":73},[49,60404,52142],{"class":51831},[49,60406,51838],{"class":73},[49,60408,60409,60411,60413],{"class":51,"line":33310},[49,60410,52307],{"class":73},[49,60412,52142],{"class":51831},[49,60414,51838],{"class":73},[49,60416,60417,60419,60421],{"class":51,"line":33326},[49,60418,52948],{"class":73},[49,60420,52142],{"class":51831},[49,60422,51838],{"class":73},[49,60424,60425,60427,60429],{"class":51,"line":33332},[49,60426,52675],{"class":73},[49,60428,52344],{"class":51831},[49,60430,51838],{"class":73},[49,60432,60433],{"class":51,"line":33346},[49,60434,60435],{"class":73},"    \u002F\u002F 1. 初始数据\n",[49,60437,60438],{"class":51,"line":33352},[49,60439,60440],{"class":73},"    const data = [\n",[49,60442,60443],{"class":51,"line":33367},[49,60444,60445],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[49,60447,60448],{"class":51,"line":33373},[49,60449,60450],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[49,60452,60453],{"class":51,"line":33382},[49,60454,60455],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[49,60457,60458],{"class":51,"line":33388},[49,60459,60460],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[49,60462,60463],{"class":51,"line":33397},[49,60464,60465],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[49,60467,60468],{"class":51,"line":33403},[49,60469,60470],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[49,60472,60473],{"class":51,"line":33409},[49,60474,60475],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[49,60477,60478],{"class":51,"line":33418},[49,60479,60480],{"class":73},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[49,60482,60483],{"class":51,"line":33424},[49,60484,53640],{"class":73},[49,60486,60487],{"class":51,"line":33435},[49,60488,60489],{"class":73},"    \u002F\u002F 获取元素\n",[49,60491,60492],{"class":51,"line":33441},[49,60493,60494],{"class":73},"    const img = document.querySelector('.slider-wrapper img')\n",[49,60496,60497],{"class":51,"line":33460},[49,60498,60499],{"class":73},"    const p = document.querySelector('.slider-footer p')\n",[49,60501,60502],{"class":51,"line":33466},[49,60503,60504],{"class":73},"    const footer = document.querySelector('.slider-footer')\n",[49,60506,60507],{"class":51,"line":33477},[49,60508,60509],{"class":73},"    \u002F\u002F 1. 右按钮业务\n",[49,60511,60512],{"class":51,"line":33483},[49,60513,60514],{"class":73},"    \u002F\u002F 1.1 获取右侧按钮 \n",[49,60516,60517],{"class":51,"line":33503},[49,60518,60519],{"class":73},"    const next = document.querySelector('.next')\n",[49,60521,60522],{"class":51,"line":33519},[49,60523,60524],{"class":73},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[49,60526,60527],{"class":51,"line":33525},[49,60528,60529],{"class":73},"    \u002F\u002F 1.2 注册点击事件\n",[49,60531,60532],{"class":51,"line":33539},[49,60533,399],{"emptyLinePlaceholder":398},[49,60535,60536],{"class":51,"line":33545},[49,60537,60538],{"class":73},"    next.addEventListener('click', function () {\n",[49,60540,60541],{"class":51,"line":33551},[49,60542,60543],{"class":73},"      \u002F\u002F console.log(11)\n",[49,60545,60546],{"class":51,"line":33562},[49,60547,60548],{"class":73},"      i++\n",[49,60550,60551],{"class":51,"line":33568},[49,60552,60553],{"class":73},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[49,60555,60556],{"class":51,"line":33574},[49,60557,60558],{"class":73},"      \u002F\u002F if (i >= 8) {\n",[49,60560,60561],{"class":51,"line":33584},[49,60562,60563],{"class":73},"      \u002F\u002F   i = 0\n",[49,60565,60566],{"class":51,"line":33590},[49,60567,60568],{"class":73},"      \u002F\u002F }\n",[49,60570,60571],{"class":51,"line":33601},[49,60572,60573],{"class":73},"      i = i >= data.length ? 0 : i\n",[49,60575,60576],{"class":51,"line":33607},[49,60577,60578],{"class":73},"      \u002F\u002F 1.3 得到对应的对象\n",[49,60580,60581],{"class":51,"line":33617},[49,60582,60583],{"class":73},"      \u002F\u002F console.log(data[i])\n",[49,60585,60586],{"class":51,"line":33622},[49,60587,60588],{"class":73},"      \u002F\u002F 调用函数\n",[49,60590,60591],{"class":51,"line":33628},[49,60592,60593],{"class":73},"      toggle()\n",[49,60595,60596],{"class":51,"line":33677},[49,60597,33992],{"class":73},[49,60599,60600],{"class":51,"line":33724},[49,60601,399],{"emptyLinePlaceholder":398},[49,60603,60604],{"class":51,"line":33729},[49,60605,60606],{"class":73},"    \u002F\u002F 2. 左侧按钮业务\n",[49,60608,60609],{"class":51,"line":33735},[49,60610,60611],{"class":73},"    \u002F\u002F 2.1 获取左侧按钮 \n",[49,60613,60614],{"class":51,"line":33754},[49,60615,60616],{"class":73},"    const prev = document.querySelector('.prev')\n",[49,60618,60619],{"class":51,"line":33760},[49,60620,60529],{"class":73},[49,60622,60623],{"class":51,"line":33780},[49,60624,60625],{"class":73},"    prev.addEventListener('click', function () {\n",[49,60627,60628],{"class":51,"line":33786},[49,60629,60630],{"class":73},"      i--\n",[49,60632,60633],{"class":51,"line":33792},[49,60634,60635],{"class":73},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[49,60637,60638],{"class":51,"line":33802},[49,60639,60640],{"class":73},"      \u002F\u002F if (i \u003C 0) {\n",[49,60642,60643],{"class":51,"line":33807},[49,60644,60645],{"class":73},"      \u002F\u002F   i = 7\n",[49,60647,60648],{"class":51,"line":33813},[49,60649,60568],{"class":73},[49,60651,60652],{"class":51,"line":33829},[49,60653,60654],{"class":73},"      i = i \u003C 0 ? data.length - 1 : i\n",[49,60656,60657],{"class":51,"line":33874},[49,60658,60578],{"class":73},[49,60660,60661],{"class":51,"line":33880},[49,60662,60583],{"class":73},[49,60664,60665],{"class":51,"line":33886},[49,60666,60588],{"class":73},[49,60668,60669],{"class":51,"line":33892},[49,60670,60593],{"class":73},[49,60672,60673],{"class":51,"line":33903},[49,60674,33992],{"class":73},[49,60676,60677],{"class":51,"line":33909},[49,60678,399],{"emptyLinePlaceholder":398},[49,60680,60681],{"class":51,"line":33915},[49,60682,60683],{"class":73},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[49,60685,60686],{"class":51,"line":33921},[49,60687,60688],{"class":73},"    function toggle() {\n",[49,60690,60691],{"class":51,"line":33939},[49,60692,60693],{"class":73},"      \u002F\u002F 1.4 渲染对应的数据\n",[49,60695,60696],{"class":51,"line":33953},[49,60697,60698],{"class":73},"      img.src = data[i].url\n",[49,60700,60701],{"class":51,"line":33962},[49,60702,60703],{"class":73},"      p.innerHTML = data[i].title\n",[49,60705,60706],{"class":51,"line":33971},[49,60707,60708],{"class":73},"      footer.style.backgroundColor = data[i].color\n",[49,60710,60711],{"class":51,"line":33980},[49,60712,60713],{"class":73},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[49,60715,60716],{"class":51,"line":33989},[49,60717,60718],{"class":73},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[49,60720,60721],{"class":51,"line":33995},[49,60722,60723],{"class":73},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[49,60725,60726],{"class":51,"line":34001},[49,60727,2885],{"class":73},[49,60729,60730],{"class":51,"line":34009},[49,60731,399],{"emptyLinePlaceholder":398},[49,60733,60734],{"class":51,"line":34014},[49,60735,60736],{"class":73},"    \u002F\u002F 3. 自动播放模块\n",[49,60738,60739],{"class":51,"line":34020},[49,60740,60741],{"class":73},"    let timerId = setInterval(function () {\n",[49,60743,60744],{"class":51,"line":34031},[49,60745,60746],{"class":73},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[49,60748,60749],{"class":51,"line":34037},[49,60750,60751],{"class":73},"      next.click()\n",[49,60753,60754],{"class":51,"line":34057},[49,60755,60756],{"class":73},"    }, 1000)\n",[49,60758,60759],{"class":51,"line":34063},[49,60760,399],{"emptyLinePlaceholder":398},[49,60762,60763],{"class":51,"line":34069},[49,60764,60765],{"class":73},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[49,60767,60768],{"class":51,"line":34075},[49,60769,60770],{"class":73},"    const slider = document.querySelector('.slider')\n",[49,60772,60773],{"class":51,"line":34092},[49,60774,60775],{"class":73},"    \u002F\u002F 注册事件\n",[49,60777,60778],{"class":51,"line":34098},[49,60779,60780],{"class":73},"    slider.addEventListener('mouseenter', function () {\n",[49,60782,60783],{"class":51,"line":34104},[49,60784,60785],{"class":73},"      \u002F\u002F 停止定时器\n",[49,60787,60788],{"class":51,"line":34110},[49,60789,60790],{"class":73},"      clearInterval(timerId)\n",[49,60792,60793],{"class":51,"line":34116},[49,60794,33992],{"class":73},[49,60796,60797],{"class":51,"line":34122},[49,60798,399],{"emptyLinePlaceholder":398},[49,60800,60801],{"class":51,"line":34149},[49,60802,60803],{"class":73},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[49,60805,60806],{"class":51,"line":34173},[49,60807,60775],{"class":73},[49,60809,60810],{"class":51,"line":34179},[49,60811,60812],{"class":73},"    slider.addEventListener('mouseleave', function () {\n",[49,60814,60815],{"class":51,"line":34185},[49,60816,60785],{"class":73},[49,60818,60819],{"class":51,"line":34191},[49,60820,60821],{"class":73},"      if (timerId) clearInterval(timerId)\n",[49,60823,60824],{"class":51,"line":34202},[49,60825,60826],{"class":73},"      \u002F\u002F 开启定时器\n",[49,60828,60829],{"class":51,"line":34213},[49,60830,60831],{"class":73},"      timerId = setInterval(function () {\n",[49,60833,60834],{"class":51,"line":34219},[49,60835,60836],{"class":73},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[49,60838,60839],{"class":51,"line":34236},[49,60840,60841],{"class":73},"        next.click()\n",[49,60843,60844],{"class":51,"line":34259},[49,60845,60846],{"class":73},"      }, 1000)\n",[49,60848,60849],{"class":51,"line":34282},[49,60850,33992],{"class":73},[49,60852,60853,60855,60857],{"class":51,"line":34288},[49,60854,52948],{"class":73},[49,60856,52344],{"class":51831},[49,60858,51838],{"class":73},[49,60860,60861,60863,60865],{"class":51,"line":34293},[49,60862,52316],{"class":73},[49,60864,52331],{"class":51831},[49,60866,51838],{"class":73},[49,60868,60869],{"class":51,"line":34302},[49,60870,399],{"emptyLinePlaceholder":398},[49,60872,60873,60875,60877],{"class":51,"line":34312},[49,60874,52316],{"class":73},[49,60876,51166],{"class":51831},[49,60878,51838],{"class":73},[130,60880,60882],{"id":60881},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60884,60885],{},"小米搜索框案例：",[40,60887,60889],{"className":51164,"code":60888,"language":51166,"meta":27,"style":27},"\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",[46,60890,60891,60901,60915,60919,60927,60941,60961,60981,60993,61001,61007,61017,61027,61039,61043,61047,61054,61058,61069,61073,61077,61084,61095,61108,61122,61126,61130,61139,61151,61163,61177,61190,61203,61221,61232,61236,61240,61249,61266,61270,61274,61281,61291,61301,61312,61325,61337,61353,61364,61376,61380,61384,61392,61403,61420,61432,61444,61455,61459,61463,61474,61485,61489,61497,61501,61509,61513,61521,61536,61559,61574,61605,61632,61659,61686,61713,61740,61767,61776,61784,61792,61797,61817,61837,61842,61847,61865,61870,61880,61885,61899,61904,61909,61926,61935,61947,61951,61959,61967,61971],{"__ignoreMap":27},[49,60892,60893,60895,60897,60899],{"class":51,"line":52},[49,60894,51828],{"class":73},[49,60896,51832],{"class":51831},[49,60898,51835],{"class":55},[49,60900,51838],{"class":73},[49,60902,60903,60905,60907,60909,60911,60913],{"class":51,"line":63},[49,60904,1739],{"class":73},[49,60906,51166],{"class":51831},[49,60908,51847],{"class":55},[49,60910,78],{"class":73},[49,60912,51852],{"class":59},[49,60914,51838],{"class":73},[49,60916,60917],{"class":51,"line":70},[49,60918,399],{"emptyLinePlaceholder":398},[49,60920,60921,60923,60925],{"class":51,"line":219},[49,60922,1739],{"class":73},[49,60924,51865],{"class":51831},[49,60926,51838],{"class":73},[49,60928,60929,60931,60933,60935,60937,60939],{"class":51,"line":233},[49,60930,51872],{"class":73},[49,60932,51875],{"class":51831},[49,60934,51878],{"class":55},[49,60936,78],{"class":73},[49,60938,51883],{"class":59},[49,60940,51838],{"class":73},[49,60942,60943,60945,60947,60949,60951,60953,60955,60957,60959],{"class":51,"line":241},[49,60944,51872],{"class":73},[49,60946,51875],{"class":51831},[49,60948,51894],{"class":55},[49,60950,78],{"class":73},[49,60952,51899],{"class":59},[49,60954,51902],{"class":55},[49,60956,78],{"class":73},[49,60958,51907],{"class":59},[49,60960,51838],{"class":73},[49,60962,60963,60965,60967,60969,60971,60973,60975,60977,60979],{"class":51,"line":1920},[49,60964,51872],{"class":73},[49,60966,51875],{"class":51831},[49,60968,15617],{"class":55},[49,60970,78],{"class":73},[49,60972,51922],{"class":59},[49,60974,51902],{"class":55},[49,60976,78],{"class":73},[49,60978,51929],{"class":59},[49,60980,51838],{"class":73},[49,60982,60983,60985,60987,60989,60991],{"class":51,"line":2011},[49,60984,51872],{"class":73},[49,60986,51938],{"class":51831},[49,60988,51941],{"class":73},[49,60990,51938],{"class":51831},[49,60992,51838],{"class":73},[49,60994,60995,60997,60999],{"class":51,"line":2017},[49,60996,51872],{"class":73},[49,60998,757],{"class":51831},[49,61000,51838],{"class":73},[49,61002,61003,61005],{"class":51,"line":2029},[49,61004,51958],{"class":51831},[49,61006,16269],{"class":73},[49,61008,61009,61011,61013,61015],{"class":51,"line":2311},[49,61010,51965],{"class":159},[49,61012,51968],{"class":73},[49,61014,1021],{"class":159},[49,61016,1990],{"class":73},[49,61018,61019,61021,61023,61025],{"class":51,"line":2316},[49,61020,51977],{"class":159},[49,61022,51968],{"class":73},[49,61024,1021],{"class":159},[49,61026,1990],{"class":73},[49,61028,61029,61032,61034,61037],{"class":51,"line":2322},[49,61030,61031],{"class":159},"            box-sizing",[49,61033,51968],{"class":73},[49,61035,61036],{"class":159},"border-box",[49,61038,1990],{"class":73},[49,61040,61041],{"class":51,"line":2327},[49,61042,3226],{"class":73},[49,61044,61045],{"class":51,"line":2341},[49,61046,399],{"emptyLinePlaceholder":398},[49,61048,61049,61052],{"class":51,"line":2346},[49,61050,61051],{"class":51831},"        ul",[49,61053,16269],{"class":73},[49,61055,61056],{"class":51,"line":2352},[49,61057,399],{"emptyLinePlaceholder":398},[49,61059,61060,61063,61065,61067],{"class":51,"line":2373},[49,61061,61062],{"class":159},"            list-style",[49,61064,51968],{"class":73},[49,61066,55268],{"class":159},[49,61068,1990],{"class":73},[49,61070,61071],{"class":51,"line":2378},[49,61072,3226],{"class":73},[49,61074,61075],{"class":51,"line":2392},[49,61076,399],{"emptyLinePlaceholder":398},[49,61078,61079,61082],{"class":51,"line":2397},[49,61080,61081],{"class":55},"        .mi",[49,61083,16269],{"class":73},[49,61085,61086,61089,61091,61093],{"class":51,"line":2426},[49,61087,61088],{"class":159},"            position",[49,61090,51968],{"class":73},[49,61092,55295],{"class":159},[49,61094,1990],{"class":73},[49,61096,61097,61099,61101,61104,61106],{"class":51,"line":2431},[49,61098,52015],{"class":159},[49,61100,51968],{"class":73},[49,61102,61103],{"class":159},"223",[49,61105,52023],{"class":77},[49,61107,1990],{"class":73},[49,61109,61110,61112,61114,61116,61118,61120],{"class":51,"line":2448},[49,61111,51965],{"class":159},[49,61113,51968],{"class":73},[49,61115,1140],{"class":159},[49,61117,52023],{"class":77},[49,61119,52087],{"class":159},[49,61121,1990],{"class":73},[49,61123,61124],{"class":51,"line":2453},[49,61125,3226],{"class":73},[49,61127,61128],{"class":51,"line":2458},[49,61129,399],{"emptyLinePlaceholder":398},[49,61131,61132,61134,61137],{"class":51,"line":2463},[49,61133,61081],{"class":55},[49,61135,61136],{"class":51831}," input",[49,61138,16269],{"class":73},[49,61140,61141,61143,61145,61147,61149],{"class":51,"line":2477},[49,61142,52015],{"class":159},[49,61144,51968],{"class":73},[49,61146,61103],{"class":159},[49,61148,52023],{"class":77},[49,61150,1990],{"class":73},[49,61152,61153,61155,61157,61159,61161],{"class":51,"line":2482},[49,61154,52030],{"class":159},[49,61156,51968],{"class":73},[49,61158,1436],{"class":159},[49,61160,52023],{"class":77},[49,61162,1990],{"class":73},[49,61164,61165,61167,61169,61171,61173,61175],{"class":51,"line":3274},[49,61166,51977],{"class":159},[49,61168,51968],{"class":73},[49,61170,1021],{"class":159},[49,61172,2736],{"class":159},[49,61174,52023],{"class":77},[49,61176,1990],{"class":73},[49,61178,61179,61182,61184,61186,61188],{"class":51,"line":3288},[49,61180,61181],{"class":159},"            font-size",[49,61183,51968],{"class":73},[49,61185,1378],{"class":159},[49,61187,52023],{"class":77},[49,61189,1990],{"class":73},[49,61191,61192,61195,61197,61199,61201],{"class":51,"line":3296},[49,61193,61194],{"class":159},"            line-height",[49,61196,51968],{"class":73},[49,61198,1436],{"class":159},[49,61200,52023],{"class":77},[49,61202,1990],{"class":73},[49,61204,61205,61208,61210,61212,61214,61216,61219],{"class":51,"line":3301},[49,61206,61207],{"class":159},"            border",[49,61209,51968],{"class":73},[49,61211,1047],{"class":159},[49,61213,52023],{"class":77},[49,61215,52052],{"class":159},[49,61217,61218],{"class":159}," #e0e0e0",[49,61220,1990],{"class":73},[49,61222,61223,61226,61228,61230],{"class":51,"line":3307},[49,61224,61225],{"class":159},"            outline",[49,61227,51968],{"class":73},[49,61229,55268],{"class":159},[49,61231,1990],{"class":73},[49,61233,61234],{"class":51,"line":3313},[49,61235,3226],{"class":73},[49,61237,61238],{"class":51,"line":3318},[49,61239,399],{"emptyLinePlaceholder":398},[49,61241,61242,61244,61247],{"class":51,"line":8645},[49,61243,61081],{"class":55},[49,61245,61246],{"class":55}," .search",[49,61248,16269],{"class":73},[49,61250,61251,61253,61255,61257,61259,61261,61264],{"class":51,"line":8669},[49,61252,61207],{"class":159},[49,61254,51968],{"class":73},[49,61256,1047],{"class":159},[49,61258,52023],{"class":77},[49,61260,52052],{"class":159},[49,61262,61263],{"class":159}," #ff6700",[49,61265,1990],{"class":73},[49,61267,61268],{"class":51,"line":8674},[49,61269,3226],{"class":73},[49,61271,61272],{"class":51,"line":8680},[49,61273,399],{"emptyLinePlaceholder":398},[49,61275,61276,61279],{"class":51,"line":8707},[49,61277,61278],{"class":55},"        .result-list",[49,61280,16269],{"class":73},[49,61282,61283,61285,61287,61289],{"class":51,"line":8712},[49,61284,52003],{"class":159},[49,61286,51968],{"class":73},[49,61288,55268],{"class":159},[49,61290,1990],{"class":73},[49,61292,61293,61295,61297,61299],{"class":51,"line":8718},[49,61294,61088],{"class":159},[49,61296,51968],{"class":73},[49,61298,55362],{"class":159},[49,61300,1990],{"class":73},[49,61302,61303,61306,61308,61310],{"class":51,"line":8730},[49,61304,61305],{"class":159},"            left",[49,61307,51968],{"class":73},[49,61309,1021],{"class":159},[49,61311,1990],{"class":73},[49,61313,61314,61317,61319,61321,61323],{"class":51,"line":8742},[49,61315,61316],{"class":159},"            top",[49,61318,51968],{"class":73},[49,61320,1436],{"class":159},[49,61322,52023],{"class":77},[49,61324,1990],{"class":73},[49,61326,61327,61329,61331,61333,61335],{"class":51,"line":8754},[49,61328,52015],{"class":159},[49,61330,51968],{"class":73},[49,61332,61103],{"class":159},[49,61334,52023],{"class":77},[49,61336,1990],{"class":73},[49,61338,61339,61341,61343,61345,61347,61349,61351],{"class":51,"line":10413},[49,61340,61207],{"class":159},[49,61342,51968],{"class":73},[49,61344,1047],{"class":159},[49,61346,52023],{"class":77},[49,61348,52052],{"class":159},[49,61350,61263],{"class":159},[49,61352,1990],{"class":73},[49,61354,61355,61358,61360,61362],{"class":51,"line":10438},[49,61356,61357],{"class":159},"            border-top",[49,61359,51968],{"class":73},[49,61361,1021],{"class":159},[49,61363,1990],{"class":73},[49,61365,61366,61369,61371,61374],{"class":51,"line":10461},[49,61367,61368],{"class":159},"            background",[49,61370,51968],{"class":73},[49,61372,61373],{"class":159},"#fff",[49,61375,1990],{"class":73},[49,61377,61378],{"class":51,"line":10485},[49,61379,3226],{"class":73},[49,61381,61382],{"class":51,"line":10490},[49,61383,399],{"emptyLinePlaceholder":398},[49,61385,61386,61388,61390],{"class":51,"line":10495},[49,61387,61278],{"class":55},[49,61389,2098],{"class":51831},[49,61391,16269],{"class":73},[49,61393,61394,61396,61398,61401],{"class":51,"line":10500},[49,61395,52003],{"class":159},[49,61397,51968],{"class":73},[49,61399,61400],{"class":159},"block",[49,61402,1990],{"class":73},[49,61404,61405,61407,61409,61411,61413,61416,61418],{"class":51,"line":10509},[49,61406,51977],{"class":159},[49,61408,51968],{"class":73},[49,61410,1173],{"class":159},[49,61412,52023],{"class":77},[49,61414,61415],{"class":159}," 15",[49,61417,52023],{"class":77},[49,61419,1990],{"class":73},[49,61421,61422,61424,61426,61428,61430],{"class":51,"line":10514},[49,61423,61181],{"class":159},[49,61425,51968],{"class":73},[49,61427,1327],{"class":159},[49,61429,52023],{"class":77},[49,61431,1990],{"class":73},[49,61433,61434,61437,61439,61442],{"class":51,"line":10520},[49,61435,61436],{"class":159},"            color",[49,61438,51968],{"class":73},[49,61440,61441],{"class":159},"#424242",[49,61443,1990],{"class":73},[49,61445,61446,61449,61451,61453],{"class":51,"line":10541},[49,61447,61448],{"class":159},"            text-decoration",[49,61450,51968],{"class":73},[49,61452,55268],{"class":159},[49,61454,1990],{"class":73},[49,61456,61457],{"class":51,"line":10547},[49,61458,3226],{"class":73},[49,61460,61461],{"class":51,"line":10561},[49,61462,399],{"emptyLinePlaceholder":398},[49,61464,61465,61467,61469,61472],{"class":51,"line":10567},[49,61466,61278],{"class":55},[49,61468,2098],{"class":51831},[49,61470,61471],{"class":55},":hover",[49,61473,16269],{"class":73},[49,61475,61476,61478,61480,61483],{"class":51,"line":10594},[49,61477,52171],{"class":159},[49,61479,51968],{"class":73},[49,61481,61482],{"class":159},"#eee",[49,61484,1990],{"class":73},[49,61486,61487],{"class":51,"line":10603},[49,61488,3226],{"class":73},[49,61490,61491,61493,61495],{"class":51,"line":10609},[49,61492,52307],{"class":73},[49,61494,757],{"class":51831},[49,61496,51838],{"class":73},[49,61498,61499],{"class":51,"line":10617},[49,61500,399],{"emptyLinePlaceholder":398},[49,61502,61503,61505,61507],{"class":51,"line":10622},[49,61504,52316],{"class":73},[49,61506,51865],{"class":51831},[49,61508,51838],{"class":73},[49,61510,61511],{"class":51,"line":17301},[49,61512,399],{"emptyLinePlaceholder":398},[49,61514,61515,61517,61519],{"class":51,"line":17307},[49,61516,1739],{"class":73},[49,61518,52331],{"class":51831},[49,61520,51838],{"class":73},[49,61522,61523,61525,61527,61529,61531,61534],{"class":51,"line":17330},[49,61524,51872],{"class":73},[49,61526,52142],{"class":51831},[49,61528,54017],{"class":55},[49,61530,78],{"class":73},[49,61532,61533],{"class":59},"\"mi\"",[49,61535,51838],{"class":73},[49,61537,61538,61540,61542,61544,61546,61549,61552,61554,61557],{"class":51,"line":17336},[49,61539,55833],{"class":73},[49,61541,54352],{"class":51831},[49,61543,54355],{"class":55},[49,61545,78],{"class":73},[49,61547,61548],{"class":59},"\"search\"",[49,61550,61551],{"class":55}," placeholder",[49,61553,78],{"class":73},[49,61555,61556],{"class":59},"\"小米笔记本\"",[49,61558,51838],{"class":73},[49,61560,61561,61563,61565,61567,61569,61572],{"class":51,"line":17359},[49,61562,55833],{"class":73},[49,61564,742],{"class":51831},[49,61566,54017],{"class":55},[49,61568,78],{"class":73},[49,61570,61571],{"class":59},"\"result-list\"",[49,61573,51838],{"class":73},[49,61575,61576,61579,61581,61584,61586,61589,61591,61594,61597,61599,61601,61603],{"class":51,"line":17373},[49,61577,61578],{"class":73},"            \u003C",[49,61580,33],{"class":51831},[49,61582,61583],{"class":73},">\u003C",[49,61585,124],{"class":51831},[49,61587,61588],{"class":55}," href",[49,61590,78],{"class":73},[49,61592,61593],{"class":59},"\"#\"",[49,61595,61596],{"class":73},">全部商品\u003C\u002F",[49,61598,124],{"class":51831},[49,61600,55845],{"class":73},[49,61602,33],{"class":51831},[49,61604,51838],{"class":73},[49,61606,61607,61609,61611,61613,61615,61617,61619,61621,61624,61626,61628,61630],{"class":51,"line":17393},[49,61608,61578],{"class":73},[49,61610,33],{"class":51831},[49,61612,61583],{"class":73},[49,61614,124],{"class":51831},[49,61616,61588],{"class":55},[49,61618,78],{"class":73},[49,61620,61593],{"class":59},[49,61622,61623],{"class":73},">小米11\u003C\u002F",[49,61625,124],{"class":51831},[49,61627,55845],{"class":73},[49,61629,33],{"class":51831},[49,61631,51838],{"class":73},[49,61633,61634,61636,61638,61640,61642,61644,61646,61648,61651,61653,61655,61657],{"class":51,"line":17399},[49,61635,61578],{"class":73},[49,61637,33],{"class":51831},[49,61639,61583],{"class":73},[49,61641,124],{"class":51831},[49,61643,61588],{"class":55},[49,61645,78],{"class":73},[49,61647,61593],{"class":59},[49,61649,61650],{"class":73},">小米10S\u003C\u002F",[49,61652,124],{"class":51831},[49,61654,55845],{"class":73},[49,61656,33],{"class":51831},[49,61658,51838],{"class":73},[49,61660,61661,61663,61665,61667,61669,61671,61673,61675,61678,61680,61682,61684],{"class":51,"line":17410},[49,61662,61578],{"class":73},[49,61664,33],{"class":51831},[49,61666,61583],{"class":73},[49,61668,124],{"class":51831},[49,61670,61588],{"class":55},[49,61672,78],{"class":73},[49,61674,61593],{"class":59},[49,61676,61677],{"class":73},">小米笔记本\u003C\u002F",[49,61679,124],{"class":51831},[49,61681,55845],{"class":73},[49,61683,33],{"class":51831},[49,61685,51838],{"class":73},[49,61687,61688,61690,61692,61694,61696,61698,61700,61702,61705,61707,61709,61711],{"class":51,"line":17433},[49,61689,61578],{"class":73},[49,61691,33],{"class":51831},[49,61693,61583],{"class":73},[49,61695,124],{"class":51831},[49,61697,61588],{"class":55},[49,61699,78],{"class":73},[49,61701,61593],{"class":59},[49,61703,61704],{"class":73},">小米手机\u003C\u002F",[49,61706,124],{"class":51831},[49,61708,55845],{"class":73},[49,61710,33],{"class":51831},[49,61712,51838],{"class":73},[49,61714,61715,61717,61719,61721,61723,61725,61727,61729,61732,61734,61736,61738],{"class":51,"line":17455},[49,61716,61578],{"class":73},[49,61718,33],{"class":51831},[49,61720,61583],{"class":73},[49,61722,124],{"class":51831},[49,61724,61588],{"class":55},[49,61726,78],{"class":73},[49,61728,61593],{"class":59},[49,61730,61731],{"class":73},">黑鲨4\u003C\u002F",[49,61733,124],{"class":51831},[49,61735,55845],{"class":73},[49,61737,33],{"class":51831},[49,61739,51838],{"class":73},[49,61741,61742,61744,61746,61748,61750,61752,61754,61756,61759,61761,61763,61765],{"class":51,"line":17460},[49,61743,61578],{"class":73},[49,61745,33],{"class":51831},[49,61747,61583],{"class":73},[49,61749,124],{"class":51831},[49,61751,61588],{"class":55},[49,61753,78],{"class":73},[49,61755,61593],{"class":59},[49,61757,61758],{"class":73},">空调\u003C\u002F",[49,61760,124],{"class":51831},[49,61762,55845],{"class":73},[49,61764,33],{"class":51831},[49,61766,51838],{"class":73},[49,61768,61769,61772,61774],{"class":51,"line":17466},[49,61770,61771],{"class":73},"        \u003C\u002F",[49,61773,742],{"class":51831},[49,61775,51838],{"class":73},[49,61777,61778,61780,61782],{"class":51,"line":17480},[49,61779,52307],{"class":73},[49,61781,52142],{"class":51831},[49,61783,51838],{"class":73},[49,61785,61786,61788,61790],{"class":51,"line":17493},[49,61787,51872],{"class":73},[49,61789,52344],{"class":51831},[49,61791,51838],{"class":73},[49,61793,61794],{"class":51,"line":17498},[49,61795,61796],{"class":66},"        \u002F\u002F 1. 获取元素\n",[49,61798,61799,61802,61804,61806,61808,61810,61812,61815],{"class":51,"line":17512},[49,61800,61801],{"class":77},"        const",[49,61803,61136],{"class":159},[49,61805,14261],{"class":77},[49,61807,54927],{"class":73},[49,61809,54930],{"class":55},[49,61811,841],{"class":73},[49,61813,61814],{"class":59},"'[type=search]'",[49,61816,847],{"class":73},[49,61818,61819,61821,61824,61826,61828,61830,61832,61835],{"class":51,"line":17517},[49,61820,61801],{"class":77},[49,61822,61823],{"class":159}," ul",[49,61825,14261],{"class":77},[49,61827,54927],{"class":73},[49,61829,54930],{"class":55},[49,61831,841],{"class":73},[49,61833,61834],{"class":59},"'.result-list'",[49,61836,847],{"class":73},[49,61838,61839],{"class":51,"line":17523},[49,61840,61841],{"class":66},"        \u002F\u002F console.log(input)\n",[49,61843,61844],{"class":51,"line":17528},[49,61845,61846],{"class":66},"        \u002F\u002F 2. 监听事件 获得焦点\n",[49,61848,61849,61852,61854,61856,61859,61861,61863],{"class":51,"line":17542},[49,61850,61851],{"class":73},"        input.",[49,61853,58344],{"class":55},[49,61855,841],{"class":73},[49,61857,61858],{"class":59},"'focus'",[49,61860,13132],{"class":73},[49,61862,54980],{"class":77},[49,61864,54983],{"class":73},[49,61866,61867],{"class":51,"line":17547},[49,61868,61869],{"class":66},"            \u002F\u002F ul显示\n",[49,61871,61872,61875,61877],{"class":51,"line":17552},[49,61873,61874],{"class":73},"            ul.style.display ",[49,61876,78],{"class":77},[49,61878,61879],{"class":59}," 'block'\n",[49,61881,61882],{"class":51,"line":17566},[49,61883,61884],{"class":66},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[49,61886,61887,61890,61892,61894,61897],{"class":51,"line":17578},[49,61888,61889],{"class":73},"            input.classList.",[49,61891,6031],{"class":55},[49,61893,841],{"class":73},[49,61895,61896],{"class":59},"'search'",[49,61898,847],{"class":73},[49,61900,61901],{"class":51,"line":17583},[49,61902,61903],{"class":73},"        })\n",[49,61905,61906],{"class":51,"line":17596},[49,61907,61908],{"class":66},"        \u002F\u002F 3. 监听事件 失去焦点\n",[49,61910,61911,61913,61915,61917,61920,61922,61924],{"class":51,"line":17601},[49,61912,61851],{"class":73},[49,61914,58344],{"class":55},[49,61916,841],{"class":73},[49,61918,61919],{"class":59},"'blur'",[49,61921,13132],{"class":73},[49,61923,54980],{"class":77},[49,61925,54983],{"class":73},[49,61927,61928,61930,61932],{"class":51,"line":17606},[49,61929,61874],{"class":73},[49,61931,78],{"class":77},[49,61933,61934],{"class":59}," 'none'\n",[49,61936,61937,61939,61941,61943,61945],{"class":51,"line":17611},[49,61938,61889],{"class":73},[49,61940,57537],{"class":55},[49,61942,841],{"class":73},[49,61944,61896],{"class":59},[49,61946,847],{"class":73},[49,61948,61949],{"class":51,"line":17624},[49,61950,61903],{"class":73},[49,61952,61953,61955,61957],{"class":51,"line":17629},[49,61954,52307],{"class":73},[49,61956,52344],{"class":51831},[49,61958,51838],{"class":73},[49,61960,61961,61963,61965],{"class":51,"line":33164},[49,61962,52316],{"class":73},[49,61964,52331],{"class":51831},[49,61966,51838],{"class":73},[49,61968,61969],{"class":51,"line":33170},[49,61970,399],{"emptyLinePlaceholder":398},[49,61972,61973,61975,61977],{"class":51,"line":33176},[49,61974,52316],{"class":73},[49,61976,51166],{"class":51831},[49,61978,51838],{"class":73},[130,61980,61982],{"id":61981},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61984,61985],{},"评论字数统计案例",[14,61987,61988],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61990,61991],{},"牢记focus伪类选择器",[51875,61993],{"charSet":61994},"UTF-8",[51875,61996],{"name":61997,"content":61998},"viewport","width=device-width, initial-scale=1.0",[51938,62000,62001],{},"Document",[757,62003,62004],{},"\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",[54352,62006],{"type":5884},[742,62008,62009,62012],{},[33,62010,62011],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[33,62013,62014],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[40,62016,62018],{"className":51164,"code":62017,"language":51166,"meta":27,"style":27},"\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",[46,62019,62020,62030,62044,62048,62056,62070,62090,62110,62123,62131,62138,62151,62165,62175,62185,62189,62193,62200,62212,62224,62236,62248,62277,62290,62294,62298,62307,62318,62330,62341,62352,62364,62375,62387,62403,62415,62419,62423,62434,62445,62455,62467,62471,62475,62483,62494,62504,62515,62527,62540,62552,62564,62568,62572,62581,62593,62604,62617,62628,62642,62646,62650,62657,62669,62681,62691,62695,62699,62708,62720,62730,62734,62738,62749,62759,62778,62791,62795,62799,62809,62819,62823,62827,62838,62849,62861,62873,62877,62881,62892,62903,62917,62921,62925,62936,62946,62958,62962,62970,62978,62982,62990,63005,63024,63064,63077,63085,63099,63119,63127,63142,63165,63183,63198,63218,63238,63258,63266,63274,63282,63290,63310,63330,63335,63352,63361,63365,63370,63386,63394,63398,63403,63420,63425,63450,63454,63458,63463,63468,63476,63484,63488],{"__ignoreMap":27},[49,62021,62022,62024,62026,62028],{"class":51,"line":52},[49,62023,51828],{"class":73},[49,62025,51832],{"class":51831},[49,62027,51835],{"class":55},[49,62029,51838],{"class":73},[49,62031,62032,62034,62036,62038,62040,62042],{"class":51,"line":63},[49,62033,1739],{"class":73},[49,62035,51166],{"class":51831},[49,62037,51847],{"class":55},[49,62039,78],{"class":73},[49,62041,51852],{"class":59},[49,62043,51838],{"class":73},[49,62045,62046],{"class":51,"line":70},[49,62047,399],{"emptyLinePlaceholder":398},[49,62049,62050,62052,62054],{"class":51,"line":219},[49,62051,1739],{"class":73},[49,62053,51865],{"class":51831},[49,62055,51838],{"class":73},[49,62057,62058,62060,62062,62064,62066,62068],{"class":51,"line":233},[49,62059,52675],{"class":73},[49,62061,51875],{"class":51831},[49,62063,51878],{"class":55},[49,62065,78],{"class":73},[49,62067,51883],{"class":59},[49,62069,51838],{"class":73},[49,62071,62072,62074,62076,62078,62080,62082,62084,62086,62088],{"class":51,"line":241},[49,62073,52675],{"class":73},[49,62075,51875],{"class":51831},[49,62077,51894],{"class":55},[49,62079,78],{"class":73},[49,62081,51899],{"class":59},[49,62083,51902],{"class":55},[49,62085,78],{"class":73},[49,62087,51907],{"class":59},[49,62089,51838],{"class":73},[49,62091,62092,62094,62096,62098,62100,62102,62104,62106,62108],{"class":51,"line":1920},[49,62093,52675],{"class":73},[49,62095,51875],{"class":51831},[49,62097,15617],{"class":55},[49,62099,78],{"class":73},[49,62101,51922],{"class":59},[49,62103,51902],{"class":55},[49,62105,78],{"class":73},[49,62107,51929],{"class":59},[49,62109,51838],{"class":73},[49,62111,62112,62114,62116,62119,62121],{"class":51,"line":2011},[49,62113,52675],{"class":73},[49,62115,51938],{"class":51831},[49,62117,62118],{"class":73},">评论回车发布\u003C\u002F",[49,62120,51938],{"class":51831},[49,62122,51838],{"class":73},[49,62124,62125,62127,62129],{"class":51,"line":2017},[49,62126,52675],{"class":73},[49,62128,757],{"class":51831},[49,62130,51838],{"class":73},[49,62132,62133,62136],{"class":51,"line":2029},[49,62134,62135],{"class":55},"    .wrapper",[49,62137,16269],{"class":73},[49,62139,62140,62143,62145,62147,62149],{"class":51,"line":2311},[49,62141,62142],{"class":159},"      min-width",[49,62144,51968],{"class":73},[49,62146,4684],{"class":159},[49,62148,52023],{"class":77},[49,62150,1990],{"class":73},[49,62152,62153,62156,62158,62161,62163],{"class":51,"line":2316},[49,62154,62155],{"class":159},"      max-width",[49,62157,51968],{"class":73},[49,62159,62160],{"class":159},"800",[49,62162,52023],{"class":77},[49,62164,1990],{"class":73},[49,62166,62167,62169,62171,62173],{"class":51,"line":2322},[49,62168,55540],{"class":159},[49,62170,51968],{"class":73},[49,62172,52008],{"class":159},[49,62174,1990],{"class":73},[49,62176,62177,62179,62181,62183],{"class":51,"line":2327},[49,62178,55551],{"class":159},[49,62180,51968],{"class":73},[49,62182,52111],{"class":159},[49,62184,1990],{"class":73},[49,62186,62187],{"class":51,"line":2341},[49,62188,2885],{"class":73},[49,62190,62191],{"class":51,"line":2346},[49,62192,399],{"emptyLinePlaceholder":398},[49,62194,62195,62198],{"class":51,"line":2352},[49,62196,62197],{"class":55},"    .avatar",[49,62199,16269],{"class":73},[49,62201,62202,62204,62206,62208,62210],{"class":51,"line":2373},[49,62203,55302],{"class":159},[49,62205,51968],{"class":73},[49,62207,1436],{"class":159},[49,62209,52023],{"class":77},[49,62211,1990],{"class":73},[49,62213,62214,62216,62218,62220,62222],{"class":51,"line":2378},[49,62215,55316],{"class":159},[49,62217,51968],{"class":73},[49,62219,1436],{"class":159},[49,62221,52023],{"class":77},[49,62223,1990],{"class":73},[49,62225,62226,62228,62230,62232,62234],{"class":51,"line":2392},[49,62227,55665],{"class":159},[49,62229,51968],{"class":73},[49,62231,1485],{"class":159},[49,62233,1157],{"class":77},[49,62235,1990],{"class":73},[49,62237,62238,62241,62243,62246],{"class":51,"line":2397},[49,62239,62240],{"class":159},"      overflow",[49,62242,51968],{"class":73},[49,62244,62245],{"class":159},"hidden",[49,62247,1990],{"class":73},[49,62249,62250,62253,62255,62258,62260,62263,62265,62268,62270,62272,62275],{"class":51,"line":2426},[49,62251,62252],{"class":159},"      background",[49,62254,51968],{"class":73},[49,62256,62257],{"class":159},"url",[49,62259,841],{"class":73},[49,62261,62262],{"class":5913},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[49,62264,14411],{"class":73},[49,62266,62267],{"class":159},"no-repeat",[49,62269,17841],{"class":159},[49,62271,25668],{"class":73},[49,62273,62274],{"class":159},"cover",[49,62276,1990],{"class":73},[49,62278,62279,62282,62284,62286,62288],{"class":51,"line":2431},[49,62280,62281],{"class":159},"      margin-right",[49,62283,51968],{"class":73},[49,62285,1529],{"class":159},[49,62287,52023],{"class":77},[49,62289,1990],{"class":73},[49,62291,62292],{"class":51,"line":2448},[49,62293,2885],{"class":73},[49,62295,62296],{"class":51,"line":2453},[49,62297,399],{"emptyLinePlaceholder":398},[49,62299,62300,62302,62305],{"class":51,"line":2458},[49,62301,62135],{"class":55},[49,62303,62304],{"class":51831}," textarea",[49,62306,16269],{"class":73},[49,62308,62309,62312,62314,62316],{"class":51,"line":2463},[49,62310,62311],{"class":159},"      outline",[49,62313,51968],{"class":73},[49,62315,55268],{"class":159},[49,62317,1990],{"class":73},[49,62319,62320,62323,62325,62328],{"class":51,"line":2477},[49,62321,62322],{"class":159},"      border-color",[49,62324,51968],{"class":73},[49,62326,62327],{"class":159},"transparent",[49,62329,1990],{"class":73},[49,62331,62332,62335,62337,62339],{"class":51,"line":2482},[49,62333,62334],{"class":159},"      resize",[49,62336,51968],{"class":73},[49,62338,55268],{"class":159},[49,62340,1990],{"class":73},[49,62342,62343,62345,62347,62350],{"class":51,"line":3274},[49,62344,62252],{"class":159},[49,62346,51968],{"class":73},[49,62348,62349],{"class":159},"#f5f5f5",[49,62351,1990],{"class":73},[49,62353,62354,62356,62358,62360,62362],{"class":51,"line":3288},[49,62355,55665],{"class":159},[49,62357,51968],{"class":73},[49,62359,1122],{"class":159},[49,62361,52023],{"class":77},[49,62363,1990],{"class":73},[49,62365,62366,62369,62371,62373],{"class":51,"line":3296},[49,62367,62368],{"class":159},"      flex",[49,62370,51968],{"class":73},[49,62372,1047],{"class":159},[49,62374,1990],{"class":73},[49,62376,62377,62379,62381,62383,62385],{"class":51,"line":3301},[49,62378,55226],{"class":159},[49,62380,51968],{"class":73},[49,62382,1275],{"class":159},[49,62384,52023],{"class":77},[49,62386,1990],{"class":73},[49,62388,62389,62392,62394,62396,62399,62401],{"class":51,"line":3307},[49,62390,62391],{"class":159},"      transition",[49,62393,51968],{"class":73},[49,62395,28652],{"class":159},[49,62397,62398],{"class":159}," 0.5",[49,62400,1524],{"class":77},[49,62402,1990],{"class":73},[49,62404,62405,62407,62409,62411,62413],{"class":51,"line":3313},[49,62406,55316],{"class":159},[49,62408,51968],{"class":73},[49,62410,1780],{"class":159},[49,62412,52023],{"class":77},[49,62414,1990],{"class":73},[49,62416,62417],{"class":51,"line":3318},[49,62418,2885],{"class":73},[49,62420,62421],{"class":51,"line":8645},[49,62422,399],{"emptyLinePlaceholder":398},[49,62424,62425,62427,62429,62432],{"class":51,"line":8669},[49,62426,62135],{"class":55},[49,62428,62304],{"class":51831},[49,62430,62431],{"class":55},":focus",[49,62433,16269],{"class":73},[49,62435,62436,62438,62440,62443],{"class":51,"line":8674},[49,62437,62322],{"class":159},[49,62439,51968],{"class":73},[49,62441,62442],{"class":159},"#e4e4e4",[49,62444,1990],{"class":73},[49,62446,62447,62449,62451,62453],{"class":51,"line":8680},[49,62448,62252],{"class":159},[49,62450,51968],{"class":73},[49,62452,61373],{"class":159},[49,62454,1990],{"class":73},[49,62456,62457,62459,62461,62463,62465],{"class":51,"line":8707},[49,62458,55316],{"class":159},[49,62460,51968],{"class":73},[49,62462,1485],{"class":159},[49,62464,52023],{"class":77},[49,62466,1990],{"class":73},[49,62468,62469],{"class":51,"line":8712},[49,62470,2885],{"class":73},[49,62472,62473],{"class":51,"line":8718},[49,62474,399],{"emptyLinePlaceholder":398},[49,62476,62477,62479,62481],{"class":51,"line":8730},[49,62478,62135],{"class":55},[49,62480,57998],{"class":51831},[49,62482,16269],{"class":73},[49,62484,62485,62487,62489,62492],{"class":51,"line":8742},[49,62486,62252],{"class":159},[49,62488,51968],{"class":73},[49,62490,62491],{"class":159},"#00aeec",[49,62493,1990],{"class":73},[49,62495,62496,62498,62500,62502],{"class":51,"line":8754},[49,62497,57947],{"class":159},[49,62499,51968],{"class":73},[49,62501,61373],{"class":159},[49,62503,1990],{"class":73},[49,62505,62506,62509,62511,62513],{"class":51,"line":10413},[49,62507,62508],{"class":159},"      border",[49,62510,51968],{"class":73},[49,62512,55268],{"class":159},[49,62514,1990],{"class":73},[49,62516,62517,62519,62521,62523,62525],{"class":51,"line":10438},[49,62518,55665],{"class":159},[49,62520,51968],{"class":73},[49,62522,1122],{"class":159},[49,62524,52023],{"class":77},[49,62526,1990],{"class":73},[49,62528,62529,62532,62534,62536,62538],{"class":51,"line":10461},[49,62530,62531],{"class":159},"      margin-left",[49,62533,51968],{"class":73},[49,62535,1275],{"class":159},[49,62537,52023],{"class":77},[49,62539,1990],{"class":73},[49,62541,62542,62544,62546,62548,62550],{"class":51,"line":10485},[49,62543,55302],{"class":159},[49,62545,51968],{"class":73},[49,62547,1185],{"class":159},[49,62549,52023],{"class":77},[49,62551,1990],{"class":73},[49,62553,62554,62557,62559,62562],{"class":51,"line":10490},[49,62555,62556],{"class":159},"      cursor",[49,62558,51968],{"class":73},[49,62560,62561],{"class":159},"pointer",[49,62563,1990],{"class":73},[49,62565,62566],{"class":51,"line":10495},[49,62567,2885],{"class":73},[49,62569,62570],{"class":51,"line":10500},[49,62571,399],{"emptyLinePlaceholder":398},[49,62573,62574,62576,62579],{"class":51,"line":10509},[49,62575,62135],{"class":55},[49,62577,62578],{"class":55}," .total",[49,62580,16269],{"class":73},[49,62582,62583,62585,62587,62589,62591],{"class":51,"line":10514},[49,62584,62281],{"class":159},[49,62586,51968],{"class":73},[49,62588,1441],{"class":159},[49,62590,52023],{"class":77},[49,62592,1990],{"class":73},[49,62594,62595,62597,62599,62602],{"class":51,"line":10520},[49,62596,57947],{"class":159},[49,62598,51968],{"class":73},[49,62600,62601],{"class":159},"#999",[49,62603,1990],{"class":73},[49,62605,62606,62609,62611,62613,62615],{"class":51,"line":10541},[49,62607,62608],{"class":159},"      margin-top",[49,62610,51968],{"class":73},[49,62612,1148],{"class":159},[49,62614,52023],{"class":77},[49,62616,1990],{"class":73},[49,62618,62619,62622,62624,62626],{"class":51,"line":10547},[49,62620,62621],{"class":159},"      opacity",[49,62623,51968],{"class":73},[49,62625,1021],{"class":159},[49,62627,1990],{"class":73},[49,62629,62630,62632,62634,62636,62638,62640],{"class":51,"line":10561},[49,62631,62391],{"class":159},[49,62633,51968],{"class":73},[49,62635,28652],{"class":159},[49,62637,62398],{"class":159},[49,62639,1524],{"class":77},[49,62641,1990],{"class":73},[49,62643,62644],{"class":51,"line":10567},[49,62645,2885],{"class":73},[49,62647,62648],{"class":51,"line":10594},[49,62649,399],{"emptyLinePlaceholder":398},[49,62651,62652,62655],{"class":51,"line":10603},[49,62653,62654],{"class":55},"    .list",[49,62656,16269],{"class":73},[49,62658,62659,62661,62663,62665,62667],{"class":51,"line":10609},[49,62660,62142],{"class":159},[49,62662,51968],{"class":73},[49,62664,4684],{"class":159},[49,62666,52023],{"class":77},[49,62668,1990],{"class":73},[49,62670,62671,62673,62675,62677,62679],{"class":51,"line":10617},[49,62672,62155],{"class":159},[49,62674,51968],{"class":73},[49,62676,62160],{"class":159},[49,62678,52023],{"class":77},[49,62680,1990],{"class":73},[49,62682,62683,62685,62687,62689],{"class":51,"line":10622},[49,62684,55540],{"class":159},[49,62686,51968],{"class":73},[49,62688,52008],{"class":159},[49,62690,1990],{"class":73},[49,62692,62693],{"class":51,"line":17301},[49,62694,2885],{"class":73},[49,62696,62697],{"class":51,"line":17307},[49,62698,399],{"emptyLinePlaceholder":398},[49,62700,62701,62703,62706],{"class":51,"line":17330},[49,62702,62654],{"class":55},[49,62704,62705],{"class":55}," .item",[49,62707,16269],{"class":73},[49,62709,62710,62712,62714,62716,62718],{"class":51,"line":17336},[49,62711,55302],{"class":159},[49,62713,51968],{"class":73},[49,62715,1140],{"class":159},[49,62717,1157],{"class":77},[49,62719,1990],{"class":73},[49,62721,62722,62724,62726,62728],{"class":51,"line":17359},[49,62723,55540],{"class":159},[49,62725,51968],{"class":73},[49,62727,52008],{"class":159},[49,62729,1990],{"class":73},[49,62731,62732],{"class":51,"line":17373},[49,62733,2885],{"class":73},[49,62735,62736],{"class":51,"line":17393},[49,62737,399],{"emptyLinePlaceholder":398},[49,62739,62740,62742,62744,62747],{"class":51,"line":17399},[49,62741,62654],{"class":55},[49,62743,62705],{"class":55},[49,62745,62746],{"class":55}," .info",[49,62748,16269],{"class":73},[49,62750,62751,62753,62755,62757],{"class":51,"line":17410},[49,62752,62368],{"class":159},[49,62754,51968],{"class":73},[49,62756,1047],{"class":159},[49,62758,1990],{"class":73},[49,62760,62761,62764,62766,62768,62770,62773,62776],{"class":51,"line":17433},[49,62762,62763],{"class":159},"      border-bottom",[49,62765,51968],{"class":73},[49,62767,1047],{"class":159},[49,62769,52023],{"class":77},[49,62771,62772],{"class":159}," dashed",[49,62774,62775],{"class":159}," #e4e4e4",[49,62777,1990],{"class":73},[49,62779,62780,62783,62785,62787,62789],{"class":51,"line":17455},[49,62781,62782],{"class":159},"      padding-bottom",[49,62784,51968],{"class":73},[49,62786,1275],{"class":159},[49,62788,52023],{"class":77},[49,62790,1990],{"class":73},[49,62792,62793],{"class":51,"line":17460},[49,62794,2885],{"class":73},[49,62796,62797],{"class":51,"line":17466},[49,62798,399],{"emptyLinePlaceholder":398},[49,62800,62801,62803,62805,62807],{"class":51,"line":17480},[49,62802,62654],{"class":55},[49,62804,62705],{"class":55},[49,62806,7522],{"class":51831},[49,62808,16269],{"class":73},[49,62810,62811,62813,62815,62817],{"class":51,"line":17493},[49,62812,55237],{"class":159},[49,62814,51968],{"class":73},[49,62816,1021],{"class":159},[49,62818,1990],{"class":73},[49,62820,62821],{"class":51,"line":17498},[49,62822,2885],{"class":73},[49,62824,62825],{"class":51,"line":17512},[49,62826,399],{"emptyLinePlaceholder":398},[49,62828,62829,62831,62833,62836],{"class":51,"line":17517},[49,62830,62654],{"class":55},[49,62832,62705],{"class":55},[49,62834,62835],{"class":55}," .name",[49,62837,16269],{"class":73},[49,62839,62840,62842,62844,62847],{"class":51,"line":17523},[49,62841,57947],{"class":159},[49,62843,51968],{"class":73},[49,62845,62846],{"class":159},"#FB7299",[49,62848,1990],{"class":73},[49,62850,62851,62853,62855,62857,62859],{"class":51,"line":17528},[49,62852,55453],{"class":159},[49,62854,51968],{"class":73},[49,62856,1378],{"class":159},[49,62858,52023],{"class":77},[49,62860,1990],{"class":73},[49,62862,62863,62866,62868,62871],{"class":51,"line":17542},[49,62864,62865],{"class":159},"      font-weight",[49,62867,51968],{"class":73},[49,62869,62870],{"class":159},"bold",[49,62872,1990],{"class":73},[49,62874,62875],{"class":51,"line":17547},[49,62876,2885],{"class":73},[49,62878,62879],{"class":51,"line":17552},[49,62880,399],{"emptyLinePlaceholder":398},[49,62882,62883,62885,62887,62890],{"class":51,"line":17566},[49,62884,62654],{"class":55},[49,62886,62705],{"class":55},[49,62888,62889],{"class":55}," .text",[49,62891,16269],{"class":73},[49,62893,62894,62896,62898,62901],{"class":51,"line":17578},[49,62895,57947],{"class":159},[49,62897,51968],{"class":73},[49,62899,62900],{"class":159},"#333",[49,62902,1990],{"class":73},[49,62904,62905,62907,62909,62911,62913,62915],{"class":51,"line":17583},[49,62906,55226],{"class":159},[49,62908,51968],{"class":73},[49,62910,1275],{"class":159},[49,62912,52023],{"class":77},[49,62914,4790],{"class":159},[49,62916,1990],{"class":73},[49,62918,62919],{"class":51,"line":17596},[49,62920,2885],{"class":73},[49,62922,62923],{"class":51,"line":17601},[49,62924,399],{"emptyLinePlaceholder":398},[49,62926,62927,62929,62931,62934],{"class":51,"line":17606},[49,62928,62654],{"class":55},[49,62930,62705],{"class":55},[49,62932,62933],{"class":55}," .time",[49,62935,16269],{"class":73},[49,62937,62938,62940,62942,62944],{"class":51,"line":17611},[49,62939,57947],{"class":159},[49,62941,51968],{"class":73},[49,62943,62601],{"class":159},[49,62945,1990],{"class":73},[49,62947,62948,62950,62952,62954,62956],{"class":51,"line":17624},[49,62949,55453],{"class":159},[49,62951,51968],{"class":73},[49,62953,1327],{"class":159},[49,62955,52023],{"class":77},[49,62957,1990],{"class":73},[49,62959,62960],{"class":51,"line":17629},[49,62961,2885],{"class":73},[49,62963,62964,62966,62968],{"class":51,"line":33164},[49,62965,52948],{"class":73},[49,62967,757],{"class":51831},[49,62969,51838],{"class":73},[49,62971,62972,62974,62976],{"class":51,"line":33170},[49,62973,52316],{"class":73},[49,62975,51865],{"class":51831},[49,62977,51838],{"class":73},[49,62979,62980],{"class":51,"line":33176},[49,62981,399],{"emptyLinePlaceholder":398},[49,62983,62984,62986,62988],{"class":51,"line":33182},[49,62985,1739],{"class":73},[49,62987,52331],{"class":51831},[49,62989,51838],{"class":73},[49,62991,62992,62994,62996,62998,63000,63003],{"class":51,"line":33188},[49,62993,52675],{"class":73},[49,62995,52142],{"class":51831},[49,62997,54017],{"class":55},[49,62999,78],{"class":73},[49,63001,63002],{"class":59},"\"wrapper\"",[49,63004,51838],{"class":73},[49,63006,63007,63009,63011,63013,63015,63018,63020,63022],{"class":51,"line":33199},[49,63008,51872],{"class":73},[49,63010,1270],{"class":51831},[49,63012,54017],{"class":55},[49,63014,78],{"class":73},[49,63016,63017],{"class":59},"\"avatar\"",[49,63019,55845],{"class":73},[49,63021,1270],{"class":51831},[49,63023,51838],{"class":73},[49,63025,63026,63028,63030,63032,63034,63037,63039,63041,63044,63046,63048,63050,63053,63055,63058,63060,63062],{"class":51,"line":33205},[49,63027,51872],{"class":73},[49,63029,54819],{"class":51831},[49,63031,15656],{"class":55},[49,63033,78],{"class":73},[49,63035,63036],{"class":59},"\"tx\"",[49,63038,61551],{"class":55},[49,63040,78],{"class":73},[49,63042,63043],{"class":59},"\"发一条友善的评论\"",[49,63045,54842],{"class":55},[49,63047,78],{"class":73},[49,63049,4398],{"class":59},[49,63051,63052],{"class":55}," maxlength",[49,63054,78],{"class":73},[49,63056,63057],{"class":59},"\"200\"",[49,63059,55845],{"class":73},[49,63061,54819],{"class":51831},[49,63063,51838],{"class":73},[49,63065,63066,63068,63070,63073,63075],{"class":51,"line":33225},[49,63067,51872],{"class":73},[49,63069,54418],{"class":51831},[49,63071,63072],{"class":73},">发布\u003C\u002F",[49,63074,54418],{"class":51831},[49,63076,51838],{"class":73},[49,63078,63079,63081,63083],{"class":51,"line":33231},[49,63080,52948],{"class":73},[49,63082,52142],{"class":51831},[49,63084,51838],{"class":73},[49,63086,63087,63089,63091,63093,63095,63097],{"class":51,"line":33242},[49,63088,52675],{"class":73},[49,63090,52142],{"class":51831},[49,63092,54017],{"class":55},[49,63094,78],{"class":73},[49,63096,63002],{"class":59},[49,63098,51838],{"class":73},[49,63100,63101,63103,63105,63107,63109,63112,63115,63117],{"class":51,"line":33248},[49,63102,51872],{"class":73},[49,63104,49],{"class":51831},[49,63106,54017],{"class":55},[49,63108,78],{"class":73},[49,63110,63111],{"class":59},"\"total\"",[49,63113,63114],{"class":73},">0\u002F200字\u003C\u002F",[49,63116,49],{"class":51831},[49,63118,51838],{"class":73},[49,63120,63121,63123,63125],{"class":51,"line":33254},[49,63122,52948],{"class":73},[49,63124,52142],{"class":51831},[49,63126,51838],{"class":73},[49,63128,63129,63131,63133,63135,63137,63140],{"class":51,"line":33260},[49,63130,52675],{"class":73},[49,63132,52142],{"class":51831},[49,63134,54017],{"class":55},[49,63136,78],{"class":73},[49,63138,63139],{"class":59},"\"list\"",[49,63141,51838],{"class":73},[49,63143,63144,63146,63148,63150,63152,63155,63158,63160,63163],{"class":51,"line":33266},[49,63145,51872],{"class":73},[49,63147,52142],{"class":51831},[49,63149,54017],{"class":55},[49,63151,78],{"class":73},[49,63153,63154],{"class":59},"\"item\"",[49,63156,63157],{"class":55}," style",[49,63159,78],{"class":73},[49,63161,63162],{"class":59},"\"display: none;\"",[49,63164,51838],{"class":73},[49,63166,63167,63169,63171,63173,63175,63177,63179,63181],{"class":51,"line":33272},[49,63168,55765],{"class":73},[49,63170,1270],{"class":51831},[49,63172,54017],{"class":55},[49,63174,78],{"class":73},[49,63176,63017],{"class":59},[49,63178,55845],{"class":73},[49,63180,1270],{"class":51831},[49,63182,51838],{"class":73},[49,63184,63185,63187,63189,63191,63193,63196],{"class":51,"line":33278},[49,63186,55765],{"class":73},[49,63188,52142],{"class":51831},[49,63190,54017],{"class":55},[49,63192,78],{"class":73},[49,63194,63195],{"class":59},"\"info\"",[49,63197,51838],{"class":73},[49,63199,63200,63202,63204,63206,63208,63211,63214,63216],{"class":51,"line":33284},[49,63201,55833],{"class":73},[49,63203,14],{"class":51831},[49,63205,54017],{"class":55},[49,63207,78],{"class":73},[49,63209,63210],{"class":59},"\"name\"",[49,63212,63213],{"class":73},">清风徐来\u003C\u002F",[49,63215,14],{"class":51831},[49,63217,51838],{"class":73},[49,63219,63220,63222,63224,63226,63228,63231,63234,63236],{"class":51,"line":33304},[49,63221,55833],{"class":73},[49,63223,14],{"class":51831},[49,63225,54017],{"class":55},[49,63227,78],{"class":73},[49,63229,63230],{"class":59},"\"text\"",[49,63232,63233],{"class":73},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[49,63235,14],{"class":51831},[49,63237,51838],{"class":73},[49,63239,63240,63242,63244,63246,63248,63251,63254,63256],{"class":51,"line":33310},[49,63241,55833],{"class":73},[49,63243,14],{"class":51831},[49,63245,54017],{"class":55},[49,63247,78],{"class":73},[49,63249,63250],{"class":59},"\"time\"",[49,63252,63253],{"class":73},">2022-10-10 20:29:21\u003C\u002F",[49,63255,14],{"class":51831},[49,63257,51838],{"class":73},[49,63259,63260,63262,63264],{"class":51,"line":33326},[49,63261,55938],{"class":73},[49,63263,52142],{"class":51831},[49,63265,51838],{"class":73},[49,63267,63268,63270,63272],{"class":51,"line":33332},[49,63269,52307],{"class":73},[49,63271,52142],{"class":51831},[49,63273,51838],{"class":73},[49,63275,63276,63278,63280],{"class":51,"line":33346},[49,63277,52948],{"class":73},[49,63279,52142],{"class":51831},[49,63281,51838],{"class":73},[49,63283,63284,63286,63288],{"class":51,"line":33352},[49,63285,52675],{"class":73},[49,63287,52344],{"class":51831},[49,63289,51838],{"class":73},[49,63291,63292,63294,63297,63299,63301,63303,63305,63308],{"class":51,"line":33367},[49,63293,11918],{"class":77},[49,63295,63296],{"class":159}," tx",[49,63298,14261],{"class":77},[49,63300,54927],{"class":73},[49,63302,54930],{"class":55},[49,63304,841],{"class":73},[49,63306,63307],{"class":59},"'#tx'",[49,63309,847],{"class":73},[49,63311,63312,63314,63317,63319,63321,63323,63325,63328],{"class":51,"line":33373},[49,63313,11918],{"class":77},[49,63315,63316],{"class":159}," total",[49,63318,14261],{"class":77},[49,63320,54927],{"class":73},[49,63322,54930],{"class":55},[49,63324,841],{"class":73},[49,63326,63327],{"class":59},"'.total'",[49,63329,847],{"class":73},[49,63331,63332],{"class":51,"line":33382},[49,63333,63334],{"class":66},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[49,63336,63337,63340,63342,63344,63346,63348,63350],{"class":51,"line":33388},[49,63338,63339],{"class":73},"    tx.",[49,63341,58344],{"class":55},[49,63343,841],{"class":73},[49,63345,61858],{"class":59},[49,63347,13132],{"class":73},[49,63349,54980],{"class":77},[49,63351,54983],{"class":73},[49,63353,63354,63357,63359],{"class":51,"line":33397},[49,63355,63356],{"class":73},"      total.style.opacity ",[49,63358,78],{"class":77},[49,63360,56230],{"class":159},[49,63362,63363],{"class":51,"line":33403},[49,63364,33992],{"class":73},[49,63366,63367],{"class":51,"line":33409},[49,63368,63369],{"class":66},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[49,63371,63372,63374,63376,63378,63380,63382,63384],{"class":51,"line":33418},[49,63373,63339],{"class":73},[49,63375,58344],{"class":55},[49,63377,841],{"class":73},[49,63379,61919],{"class":59},[49,63381,13132],{"class":73},[49,63383,54980],{"class":77},[49,63385,54983],{"class":73},[49,63387,63388,63390,63392],{"class":51,"line":33424},[49,63389,63356],{"class":73},[49,63391,78],{"class":77},[49,63393,47864],{"class":159},[49,63395,63396],{"class":51,"line":33435},[49,63397,33992],{"class":73},[49,63399,63400],{"class":51,"line":33441},[49,63401,63402],{"class":66},"    \u002F\u002F 3. 检测用户输入\n",[49,63404,63405,63407,63409,63411,63414,63416,63418],{"class":51,"line":33460},[49,63406,63339],{"class":73},[49,63408,58344],{"class":55},[49,63410,841],{"class":73},[49,63412,63413],{"class":59},"'input'",[49,63415,13132],{"class":73},[49,63417,54980],{"class":77},[49,63419,54983],{"class":73},[49,63421,63422],{"class":51,"line":33466},[49,63423,63424],{"class":66},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[49,63426,63427,63430,63432,63435,63438,63440,63443,63445,63447],{"class":51,"line":33477},[49,63428,63429],{"class":73},"      total.innerHTML ",[49,63431,78],{"class":77},[49,63433,63434],{"class":59}," `${",[49,63436,63437],{"class":73},"tx",[49,63439,1387],{"class":59},[49,63441,63442],{"class":73},"value",[49,63444,1387],{"class":59},[49,63446,52499],{"class":159},[49,63448,63449],{"class":59},"}\u002F200字`\n",[49,63451,63452],{"class":51,"line":33483},[49,63453,33992],{"class":73},[49,63455,63456],{"class":51,"line":33503},[49,63457,399],{"emptyLinePlaceholder":398},[49,63459,63460],{"class":51,"line":33519},[49,63461,63462],{"class":66},"    \u002F\u002F const str = 'andy'\n",[49,63464,63465],{"class":51,"line":33525},[49,63466,63467],{"class":66},"    \u002F\u002F console.log(str.length)\n",[49,63469,63470,63472,63474],{"class":51,"line":33539},[49,63471,52948],{"class":73},[49,63473,52344],{"class":51831},[49,63475,51838],{"class":73},[49,63477,63478,63480,63482],{"class":51,"line":33545},[49,63479,52316],{"class":73},[49,63481,52331],{"class":51831},[49,63483,51838],{"class":73},[49,63485,63486],{"class":51,"line":33551},[49,63487,399],{"emptyLinePlaceholder":398},[49,63489,63490,63492,63494],{"class":51,"line":33562},[49,63491,52316],{"class":73},[49,63493,51166],{"class":51831},[49,63495,51838],{"class":73},[130,63497,63499],{"id":63498},"_3254-change事件","3.2.5.4 change事件",[14,63501,63502],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63504,63505],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63507,63508],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[40,63510,63512],{"className":51164,"code":63511,"language":51166,"meta":27,"style":27},"\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",[46,63513,63514,63524,63538,63542,63550,63564,63584,63596,63604,63608,63616,63630,63638,63656,63674,63686,63690,63698,63706,63710],{"__ignoreMap":27},[49,63515,63516,63518,63520,63522],{"class":51,"line":52},[49,63517,51828],{"class":73},[49,63519,51832],{"class":51831},[49,63521,51835],{"class":55},[49,63523,51838],{"class":73},[49,63525,63526,63528,63530,63532,63534,63536],{"class":51,"line":63},[49,63527,1739],{"class":73},[49,63529,51166],{"class":51831},[49,63531,51847],{"class":55},[49,63533,78],{"class":73},[49,63535,51852],{"class":59},[49,63537,51838],{"class":73},[49,63539,63540],{"class":51,"line":70},[49,63541,399],{"emptyLinePlaceholder":398},[49,63543,63544,63546,63548],{"class":51,"line":219},[49,63545,1739],{"class":73},[49,63547,51865],{"class":51831},[49,63549,51838],{"class":73},[49,63551,63552,63554,63556,63558,63560,63562],{"class":51,"line":233},[49,63553,52675],{"class":73},[49,63555,51875],{"class":51831},[49,63557,51878],{"class":55},[49,63559,78],{"class":73},[49,63561,51883],{"class":59},[49,63563,51838],{"class":73},[49,63565,63566,63568,63570,63572,63574,63576,63578,63580,63582],{"class":51,"line":241},[49,63567,52675],{"class":73},[49,63569,51875],{"class":51831},[49,63571,15617],{"class":55},[49,63573,78],{"class":73},[49,63575,51922],{"class":59},[49,63577,51902],{"class":55},[49,63579,78],{"class":73},[49,63581,51929],{"class":59},[49,63583,51838],{"class":73},[49,63585,63586,63588,63590,63592,63594],{"class":51,"line":1920},[49,63587,52675],{"class":73},[49,63589,51938],{"class":51831},[49,63591,51941],{"class":73},[49,63593,51938],{"class":51831},[49,63595,51838],{"class":73},[49,63597,63598,63600,63602],{"class":51,"line":2011},[49,63599,52316],{"class":73},[49,63601,51865],{"class":51831},[49,63603,51838],{"class":73},[49,63605,63606],{"class":51,"line":2017},[49,63607,399],{"emptyLinePlaceholder":398},[49,63609,63610,63612,63614],{"class":51,"line":2029},[49,63611,1739],{"class":73},[49,63613,52331],{"class":51831},[49,63615,51838],{"class":73},[49,63617,63618,63620,63622,63624,63626,63628],{"class":51,"line":2311},[49,63619,52675],{"class":73},[49,63621,54352],{"class":51831},[49,63623,54355],{"class":55},[49,63625,78],{"class":73},[49,63627,63230],{"class":59},[49,63629,51838],{"class":73},[49,63631,63632,63634,63636],{"class":51,"line":2316},[49,63633,52675],{"class":73},[49,63635,52344],{"class":51831},[49,63637,51838],{"class":73},[49,63639,63640,63642,63644,63646,63648,63650,63652,63654],{"class":51,"line":2322},[49,63641,11918],{"class":77},[49,63643,61136],{"class":159},[49,63645,14261],{"class":77},[49,63647,54927],{"class":73},[49,63649,54930],{"class":55},[49,63651,841],{"class":73},[49,63653,63413],{"class":59},[49,63655,847],{"class":73},[49,63657,63658,63661,63663,63665,63668,63670,63672],{"class":51,"line":2327},[49,63659,63660],{"class":73},"    input.",[49,63662,58344],{"class":55},[49,63664,841],{"class":73},[49,63666,63667],{"class":59},"'change'",[49,63669,13132],{"class":73},[49,63671,54980],{"class":77},[49,63673,54983],{"class":73},[49,63675,63676,63678,63680,63682,63684],{"class":51,"line":2341},[49,63677,58775],{"class":73},[49,63679,58778],{"class":55},[49,63681,841],{"class":73},[49,63683,1422],{"class":159},[49,63685,847],{"class":73},[49,63687,63688],{"class":51,"line":2346},[49,63689,33992],{"class":73},[49,63691,63692,63694,63696],{"class":51,"line":2352},[49,63693,52948],{"class":73},[49,63695,52344],{"class":51831},[49,63697,51838],{"class":73},[49,63699,63700,63702,63704],{"class":51,"line":2373},[49,63701,52316],{"class":73},[49,63703,52331],{"class":51831},[49,63705,51838],{"class":73},[49,63707,63708],{"class":51,"line":2378},[49,63709,399],{"emptyLinePlaceholder":398},[49,63711,63712,63714,63716],{"class":51,"line":2392},[49,63713,52316],{"class":73},[49,63715,51166],{"class":51831},[49,63717,51838],{"class":73},[14,63719,63720],{},"总结：内容发生改变才回去触发",[18,63722,63724],{"id":63723},"_326-事件对象","3.2.6 事件对象",[130,63726,63728],{"id":63727},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63730,63731],{},[25,63732],{"alt":27,"src":63733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63735,63736],{},[25,63737],{"alt":27,"src":63738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63740,63741],{},"点击一次，就输出了事件对象，它是个对象",[14,63743,63744],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63746,63747],{},[25,63748],{"alt":27,"src":63749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[130,63751,63753],{"id":63752},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63755,63756],{},[25,63757],{"alt":27,"src":63758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63760,63761],{},"实现按特殊字符才是实现打印输出效果：",[40,63763,63765],{"className":53598,"code":63764,"language":53600,"meta":27,"style":27},"\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",[46,63766,63767,63775,63780,63794,63802,63807,63812,63817,63822,63827,63832,63837,63842,63847,63851,63855,63863],{"__ignoreMap":27},[49,63768,63769,63771,63773],{"class":51,"line":52},[49,63770,1739],{"class":73},[49,63772,52331],{"class":51831},[49,63774,51838],{"class":73},[49,63776,63777],{"class":51,"line":63},[49,63778,63779],{"class":66},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[49,63781,63782,63784,63786,63788,63790,63792],{"class":51,"line":70},[49,63783,52675],{"class":73},[49,63785,54352],{"class":51831},[49,63787,54355],{"class":55},[49,63789,78],{"class":73},[49,63791,63230],{"class":59},[49,63793,51838],{"class":73},[49,63795,63796,63798,63800],{"class":51,"line":219},[49,63797,52675],{"class":73},[49,63799,52344],{"class":51831},[49,63801,51838],{"class":73},[49,63803,63804],{"class":51,"line":233},[49,63805,63806],{"class":73},"    \u002F\u002F const btn = document.querySelector('button')\n",[49,63808,63809],{"class":51,"line":241},[49,63810,63811],{"class":73},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[49,63813,63814],{"class":51,"line":1920},[49,63815,63816],{"class":73},"    \u002F\u002F   console.log(e);\n",[49,63818,63819],{"class":51,"line":2011},[49,63820,63821],{"class":73},"    \u002F\u002F })\n",[49,63823,63824],{"class":51,"line":2017},[49,63825,63826],{"class":73},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[49,63828,63829],{"class":51,"line":2029},[49,63830,63831],{"class":73},"    const input = document.querySelector('input')\n",[49,63833,63834],{"class":51,"line":2311},[49,63835,63836],{"class":73},"    input.addEventListener('keyup', function (e) {\n",[49,63838,63839],{"class":51,"line":2316},[49,63840,63841],{"class":73},"      if (e.key === 'Enter') {\n",[49,63843,63844],{"class":51,"line":2322},[49,63845,63846],{"class":73},"        console.log('我按下了回车键')\n",[49,63848,63849],{"class":51,"line":2327},[49,63850,52929],{"class":73},[49,63852,63853],{"class":51,"line":2341},[49,63854,33992],{"class":73},[49,63856,63857,63859,63861],{"class":51,"line":2346},[49,63858,52948],{"class":73},[49,63860,52344],{"class":51831},[49,63862,51838],{"class":73},[49,63864,63865,63867,63869],{"class":51,"line":2352},[49,63866,52316],{"class":73},[49,63868,52331],{"class":51831},[49,63870,51838],{"class":73},[130,63872,63874],{"id":63873},"_3263-trim方法","3.2.6.3 trim方法",[14,63876,63877],{},[25,63878],{"alt":27,"src":63879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63881,63882],{},[25,63883],{"alt":27,"src":63884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63886,63887],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63889,63890],{},"str.trim()",[18,63892,63894],{"id":63893},"_327-环境对象","3.2.7 环境对象",[14,63896,63897],{},[25,63898],{"alt":27,"src":63899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63901,63902],{},[25,63903],{"alt":27,"src":63904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63906,63907],{},[25,63908],{"alt":27,"src":63909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63911,63912],{},"实际函数调用是window.fn()",[14,63914,63915],{},"普通函数里面this指向的是window",[742,63917,63918,63921,63924],{},[33,63919,63920],{},"在普通函数下，this指向的是window",[33,63922,63923],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[33,63925,63926],{},"箭头函数没有this",[14,63928,63929],{},"粗略记法就是：谁调用，this就指向谁",[14,63931,63932],{},[25,63933],{"alt":27,"src":63934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63936,63937],{},[25,63938],{"alt":27,"src":63939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63941,63942],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63944,63945],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[40,63947,63949],{"className":53598,"code":63948,"language":53600,"meta":27,"style":27},"\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",[46,63950,63951,63959,63971,63979,63984,63989,63994,63999,64003,64011],{"__ignoreMap":27},[49,63952,63953,63955,63957],{"class":51,"line":52},[49,63954,1739],{"class":73},[49,63956,52331],{"class":51831},[49,63958,51838],{"class":73},[49,63960,63961,63963,63965,63967,63969],{"class":51,"line":63},[49,63962,52675],{"class":73},[49,63964,54418],{"class":51831},[49,63966,54424],{"class":73},[49,63968,54418],{"class":51831},[49,63970,51838],{"class":73},[49,63972,63973,63975,63977],{"class":51,"line":70},[49,63974,52675],{"class":73},[49,63976,52344],{"class":51831},[49,63978,51838],{"class":73},[49,63980,63981],{"class":51,"line":219},[49,63982,63983],{"class":73},"    const button = document.querySelector('button')\n",[49,63985,63986],{"class":51,"line":233},[49,63987,63988],{"class":73},"    button.addEventListener('click', function () {\n",[49,63990,63991],{"class":51,"line":241},[49,63992,63993],{"class":73},"      \u002F\u002F console.log(this);\n",[49,63995,63996],{"class":51,"line":1920},[49,63997,63998],{"class":73},"      this.style.color = 'pink'\n",[49,64000,64001],{"class":51,"line":2011},[49,64002,33992],{"class":73},[49,64004,64005,64007,64009],{"class":51,"line":2017},[49,64006,52948],{"class":73},[49,64008,52344],{"class":51831},[49,64010,51838],{"class":73},[49,64012,64013,64015,64017],{"class":51,"line":2029},[49,64014,52316],{"class":73},[49,64016,52331],{"class":51831},[49,64018,51838],{"class":73},[18,64020,64022],{"id":64021},"_328-回调函数","3.2.8 回调函数",[14,64024,64025],{},[25,64026],{"alt":27,"src":64027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,64029,64030],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,64032,12029],{},[742,64034,64035,64038,64041],{},[33,64036,64037],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[33,64039,64040],{},"回调函数本质还是函数，只不过把它当成参数使用",[33,64042,64043],{},"使用匿名函数做为回调函数比较常见",[18,64045,64047],{"id":64046},"_329-tab栏切换","3.2.9 tab栏切换",[14,64049,64050],{},[25,64051],{"alt":27,"src":64052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[40,64054,64056],{"className":51164,"code":64055,"language":51166,"meta":27,"style":27},"\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",[46,64057,64058,64068,64082,64086,64094,64108,64128,64148,64161,64169,64175,64185,64195,64199,64203,64210,64223,64236,64248,64264,64268,64272,64279,64291,64303,64315,64325,64335,64339,64343,64352,64364,64375,64387,64391,64395,64403,64413,64423,64433,64437,64441,64451,64465,64477,64481,64485,64497,64508,64525,64535,64539,64543,64558,64569,64579,64583,64587,64594,64609,64613,64617,64625,64635,64639,64643,64652,64662,64666,64674,64682,64686,64694,64709,64724,64737,64745,64779,64806,64833,64860,64887,64895,64903,64918,64955,64990,65025,65060,65095,65103,65111,65119,65124,65129,65149,65154,65183,65188,65193,65211,65216,65221,65226,65248,65253,65269,65273,65278,65283,65304,65309,65338,65342,65347,65351,65359,65367,65371],{"__ignoreMap":27},[49,64059,64060,64062,64064,64066],{"class":51,"line":52},[49,64061,51828],{"class":73},[49,64063,51832],{"class":51831},[49,64065,51835],{"class":55},[49,64067,51838],{"class":73},[49,64069,64070,64072,64074,64076,64078,64080],{"class":51,"line":63},[49,64071,1739],{"class":73},[49,64073,51166],{"class":51831},[49,64075,51847],{"class":55},[49,64077,78],{"class":73},[49,64079,51852],{"class":59},[49,64081,51838],{"class":73},[49,64083,64084],{"class":51,"line":70},[49,64085,399],{"emptyLinePlaceholder":398},[49,64087,64088,64090,64092],{"class":51,"line":219},[49,64089,1739],{"class":73},[49,64091,51865],{"class":51831},[49,64093,51838],{"class":73},[49,64095,64096,64098,64100,64102,64104,64106],{"class":51,"line":233},[49,64097,52675],{"class":73},[49,64099,51875],{"class":51831},[49,64101,51878],{"class":55},[49,64103,78],{"class":73},[49,64105,51883],{"class":59},[49,64107,59658],{"class":73},[49,64109,64110,64112,64114,64116,64118,64120,64122,64124,64126],{"class":51,"line":241},[49,64111,52675],{"class":73},[49,64113,51875],{"class":51831},[49,64115,51894],{"class":55},[49,64117,78],{"class":73},[49,64119,51899],{"class":59},[49,64121,51902],{"class":55},[49,64123,78],{"class":73},[49,64125,51907],{"class":59},[49,64127,59658],{"class":73},[49,64129,64130,64132,64134,64136,64138,64140,64142,64144,64146],{"class":51,"line":1920},[49,64131,52675],{"class":73},[49,64133,51875],{"class":51831},[49,64135,15617],{"class":55},[49,64137,78],{"class":73},[49,64139,51922],{"class":59},[49,64141,51902],{"class":55},[49,64143,78],{"class":73},[49,64145,51929],{"class":59},[49,64147,59658],{"class":73},[49,64149,64150,64152,64154,64157,64159],{"class":51,"line":2011},[49,64151,52675],{"class":73},[49,64153,51938],{"class":51831},[49,64155,64156],{"class":73},">tab栏切换\u003C\u002F",[49,64158,51938],{"class":51831},[49,64160,51838],{"class":73},[49,64162,64163,64165,64167],{"class":51,"line":2017},[49,64164,52675],{"class":73},[49,64166,757],{"class":51831},[49,64168,51838],{"class":73},[49,64170,64171,64173],{"class":51,"line":2029},[49,64172,7100],{"class":51831},[49,64174,16269],{"class":73},[49,64176,64177,64179,64181,64183],{"class":51,"line":2311},[49,64178,55237],{"class":159},[49,64180,51968],{"class":73},[49,64182,1021],{"class":159},[49,64184,1990],{"class":73},[49,64186,64187,64189,64191,64193],{"class":51,"line":2316},[49,64188,55226],{"class":159},[49,64190,51968],{"class":73},[49,64192,1021],{"class":159},[49,64194,1990],{"class":73},[49,64196,64197],{"class":51,"line":2322},[49,64198,2885],{"class":73},[49,64200,64201],{"class":51,"line":2327},[49,64202,399],{"emptyLinePlaceholder":398},[49,64204,64205,64208],{"class":51,"line":2341},[49,64206,64207],{"class":55},"    .tab",[49,64209,16269],{"class":73},[49,64211,64212,64214,64216,64219,64221],{"class":51,"line":2346},[49,64213,55302],{"class":159},[49,64215,51968],{"class":73},[49,64217,64218],{"class":159},"590",[49,64220,52023],{"class":77},[49,64222,1990],{"class":73},[49,64224,64225,64227,64229,64232,64234],{"class":51,"line":2352},[49,64226,55316],{"class":159},[49,64228,51968],{"class":73},[49,64230,64231],{"class":159},"340",[49,64233,52023],{"class":77},[49,64235,1990],{"class":73},[49,64237,64238,64240,64242,64244,64246],{"class":51,"line":2373},[49,64239,55237],{"class":159},[49,64241,51968],{"class":73},[49,64243,1529],{"class":159},[49,64245,52023],{"class":77},[49,64247,1990],{"class":73},[49,64249,64250,64252,64254,64256,64258,64260,64262],{"class":51,"line":2378},[49,64251,62508],{"class":159},[49,64253,51968],{"class":73},[49,64255,1047],{"class":159},[49,64257,52023],{"class":77},[49,64259,52052],{"class":159},[49,64261,62775],{"class":159},[49,64263,1990],{"class":73},[49,64265,64266],{"class":51,"line":2392},[49,64267,2885],{"class":73},[49,64269,64270],{"class":51,"line":2397},[49,64271,399],{"emptyLinePlaceholder":398},[49,64273,64274,64277],{"class":51,"line":2426},[49,64275,64276],{"class":55},"    .tab-nav",[49,64278,16269],{"class":73},[49,64280,64281,64283,64285,64287,64289],{"class":51,"line":2431},[49,64282,55302],{"class":159},[49,64284,51968],{"class":73},[49,64286,1140],{"class":159},[49,64288,1157],{"class":77},[49,64290,1990],{"class":73},[49,64292,64293,64295,64297,64299,64301],{"class":51,"line":2448},[49,64294,55316],{"class":159},[49,64296,51968],{"class":73},[49,64298,1736],{"class":159},[49,64300,52023],{"class":77},[49,64302,1990],{"class":73},[49,64304,64305,64307,64309,64311,64313],{"class":51,"line":2453},[49,64306,57890],{"class":159},[49,64308,51968],{"class":73},[49,64310,1736],{"class":159},[49,64312,52023],{"class":77},[49,64314,1990],{"class":73},[49,64316,64317,64319,64321,64323],{"class":51,"line":2458},[49,64318,55540],{"class":159},[49,64320,51968],{"class":73},[49,64322,52008],{"class":159},[49,64324,1990],{"class":73},[49,64326,64327,64329,64331,64333],{"class":51,"line":2463},[49,64328,55551],{"class":159},[49,64330,51968],{"class":73},[49,64332,52199],{"class":159},[49,64334,1990],{"class":73},[49,64336,64337],{"class":51,"line":2477},[49,64338,2885],{"class":73},[49,64340,64341],{"class":51,"line":2482},[49,64342,399],{"emptyLinePlaceholder":398},[49,64344,64345,64347,64350],{"class":51,"line":3274},[49,64346,64276],{"class":55},[49,64348,64349],{"class":51831}," h3",[49,64351,16269],{"class":73},[49,64353,64354,64356,64358,64360,64362],{"class":51,"line":3288},[49,64355,55453],{"class":159},[49,64357,51968],{"class":73},[49,64359,1629],{"class":159},[49,64361,52023],{"class":77},[49,64363,1990],{"class":73},[49,64365,64366,64368,64370,64373],{"class":51,"line":3296},[49,64367,62865],{"class":159},[49,64369,51968],{"class":73},[49,64371,64372],{"class":159},"normal",[49,64374,1990],{"class":73},[49,64376,64377,64379,64381,64383,64385],{"class":51,"line":3301},[49,64378,62531],{"class":159},[49,64380,51968],{"class":73},[49,64382,1529],{"class":159},[49,64384,52023],{"class":77},[49,64386,1990],{"class":73},[49,64388,64389],{"class":51,"line":3307},[49,64390,2885],{"class":73},[49,64392,64393],{"class":51,"line":3313},[49,64394,399],{"emptyLinePlaceholder":398},[49,64396,64397,64399,64401],{"class":51,"line":3318},[49,64398,64276],{"class":55},[49,64400,61823],{"class":51831},[49,64402,16269],{"class":73},[49,64404,64405,64407,64409,64411],{"class":51,"line":8645},[49,64406,55263],{"class":159},[49,64408,51968],{"class":73},[49,64410,55268],{"class":159},[49,64412,1990],{"class":73},[49,64414,64415,64417,64419,64421],{"class":51,"line":8669},[49,64416,55540],{"class":159},[49,64418,51968],{"class":73},[49,64420,52008],{"class":159},[49,64422,1990],{"class":73},[49,64424,64425,64427,64429,64431],{"class":51,"line":8674},[49,64426,55551],{"class":159},[49,64428,51968],{"class":73},[49,64430,52111],{"class":159},[49,64432,1990],{"class":73},[49,64434,64435],{"class":51,"line":8680},[49,64436,2885],{"class":73},[49,64438,64439],{"class":51,"line":8707},[49,64440,399],{"emptyLinePlaceholder":398},[49,64442,64443,64445,64447,64449],{"class":51,"line":8712},[49,64444,64276],{"class":55},[49,64446,61823],{"class":51831},[49,64448,55606],{"class":51831},[49,64450,16269],{"class":73},[49,64452,64453,64455,64457,64459,64461,64463],{"class":51,"line":8718},[49,64454,55237],{"class":159},[49,64456,51968],{"class":73},[49,64458,1021],{"class":159},[49,64460,9647],{"class":159},[49,64462,52023],{"class":77},[49,64464,1990],{"class":73},[49,64466,64467,64469,64471,64473,64475],{"class":51,"line":8730},[49,64468,55453],{"class":159},[49,64470,51968],{"class":73},[49,64472,1378],{"class":159},[49,64474,52023],{"class":77},[49,64476,1990],{"class":73},[49,64478,64479],{"class":51,"line":8742},[49,64480,2885],{"class":73},[49,64482,64483],{"class":51,"line":8754},[49,64484,399],{"emptyLinePlaceholder":398},[49,64486,64487,64489,64491,64493,64495],{"class":51,"line":10413},[49,64488,64276],{"class":55},[49,64490,61823],{"class":51831},[49,64492,55606],{"class":51831},[49,64494,2098],{"class":51831},[49,64496,16269],{"class":73},[49,64498,64499,64502,64504,64506],{"class":51,"line":10438},[49,64500,64501],{"class":159},"      text-decoration",[49,64503,51968],{"class":73},[49,64505,55268],{"class":159},[49,64507,1990],{"class":73},[49,64509,64510,64512,64514,64516,64518,64520,64523],{"class":51,"line":10461},[49,64511,62763],{"class":159},[49,64513,51968],{"class":73},[49,64515,915],{"class":159},[49,64517,52023],{"class":77},[49,64519,52052],{"class":159},[49,64521,64522],{"class":159}," transparent",[49,64524,1990],{"class":73},[49,64526,64527,64529,64531,64533],{"class":51,"line":10485},[49,64528,57947],{"class":159},[49,64530,51968],{"class":73},[49,64532,62900],{"class":159},[49,64534,1990],{"class":73},[49,64536,64537],{"class":51,"line":10490},[49,64538,2885],{"class":73},[49,64540,64541],{"class":51,"line":10495},[49,64542,399],{"emptyLinePlaceholder":398},[49,64544,64545,64547,64549,64551,64553,64556],{"class":51,"line":10500},[49,64546,64276],{"class":55},[49,64548,61823],{"class":51831},[49,64550,55606],{"class":51831},[49,64552,2098],{"class":51831},[49,64554,64555],{"class":55},".active",[49,64557,16269],{"class":73},[49,64559,64560,64562,64564,64567],{"class":51,"line":10509},[49,64561,62322],{"class":159},[49,64563,51968],{"class":73},[49,64565,64566],{"class":159},"#e1251b",[49,64568,1990],{"class":73},[49,64570,64571,64573,64575,64577],{"class":51,"line":10514},[49,64572,57947],{"class":159},[49,64574,51968],{"class":73},[49,64576,64566],{"class":159},[49,64578,1990],{"class":73},[49,64580,64581],{"class":51,"line":10520},[49,64582,2885],{"class":73},[49,64584,64585],{"class":51,"line":10541},[49,64586,399],{"emptyLinePlaceholder":398},[49,64588,64589,64592],{"class":51,"line":10547},[49,64590,64591],{"class":55},"    .tab-content",[49,64593,16269],{"class":73},[49,64595,64596,64598,64600,64602,64605,64607],{"class":51,"line":10561},[49,64597,55226],{"class":159},[49,64599,51968],{"class":73},[49,64601,1021],{"class":159},[49,64603,64604],{"class":159}," 16",[49,64606,52023],{"class":77},[49,64608,1990],{"class":73},[49,64610,64611],{"class":51,"line":10567},[49,64612,2885],{"class":73},[49,64614,64615],{"class":51,"line":10594},[49,64616,399],{"emptyLinePlaceholder":398},[49,64618,64619,64621,64623],{"class":51,"line":10603},[49,64620,64591],{"class":55},[49,64622,62705],{"class":55},[49,64624,16269],{"class":73},[49,64626,64627,64629,64631,64633],{"class":51,"line":10609},[49,64628,55540],{"class":159},[49,64630,51968],{"class":73},[49,64632,55268],{"class":159},[49,64634,1990],{"class":73},[49,64636,64637],{"class":51,"line":10617},[49,64638,2885],{"class":73},[49,64640,64641],{"class":51,"line":10622},[49,64642,399],{"emptyLinePlaceholder":398},[49,64644,64645,64647,64650],{"class":51,"line":17301},[49,64646,64591],{"class":55},[49,64648,64649],{"class":55}," .item.active",[49,64651,16269],{"class":73},[49,64653,64654,64656,64658,64660],{"class":51,"line":17307},[49,64655,55540],{"class":159},[49,64657,51968],{"class":73},[49,64659,61400],{"class":159},[49,64661,1990],{"class":73},[49,64663,64664],{"class":51,"line":17330},[49,64665,2885],{"class":73},[49,64667,64668,64670,64672],{"class":51,"line":17336},[49,64669,52948],{"class":73},[49,64671,757],{"class":51831},[49,64673,51838],{"class":73},[49,64675,64676,64678,64680],{"class":51,"line":17359},[49,64677,52316],{"class":73},[49,64679,51865],{"class":51831},[49,64681,51838],{"class":73},[49,64683,64684],{"class":51,"line":17373},[49,64685,399],{"emptyLinePlaceholder":398},[49,64687,64688,64690,64692],{"class":51,"line":17393},[49,64689,1739],{"class":73},[49,64691,52331],{"class":51831},[49,64693,51838],{"class":73},[49,64695,64696,64698,64700,64702,64704,64707],{"class":51,"line":17399},[49,64697,52675],{"class":73},[49,64699,52142],{"class":51831},[49,64701,54017],{"class":55},[49,64703,78],{"class":73},[49,64705,64706],{"class":59},"\"tab\"",[49,64708,51838],{"class":73},[49,64710,64711,64713,64715,64717,64719,64722],{"class":51,"line":17410},[49,64712,51872],{"class":73},[49,64714,52142],{"class":51831},[49,64716,54017],{"class":55},[49,64718,78],{"class":73},[49,64720,64721],{"class":59},"\"tab-nav\"",[49,64723,51838],{"class":73},[49,64725,64726,64728,64730,64733,64735],{"class":51,"line":17433},[49,64727,55765],{"class":73},[49,64729,18],{"class":51831},[49,64731,64732],{"class":73},">每日特价\u003C\u002F",[49,64734,18],{"class":51831},[49,64736,51838],{"class":73},[49,64738,64739,64741,64743],{"class":51,"line":17455},[49,64740,55765],{"class":73},[49,64742,742],{"class":51831},[49,64744,51838],{"class":73},[49,64746,64747,64749,64751,64753,64755,64757,64759,64761,64763,64765,64768,64771,64773,64775,64777],{"class":51,"line":17460},[49,64748,55833],{"class":73},[49,64750,33],{"class":51831},[49,64752,61583],{"class":73},[49,64754,124],{"class":51831},[49,64756,54017],{"class":55},[49,64758,78],{"class":73},[49,64760,60237],{"class":59},[49,64762,61588],{"class":55},[49,64764,78],{"class":73},[49,64766,64767],{"class":59},"\"javascript:;\"",[49,64769,64770],{"class":73},">精选\u003C\u002F",[49,64772,124],{"class":51831},[49,64774,55845],{"class":73},[49,64776,33],{"class":51831},[49,64778,51838],{"class":73},[49,64780,64781,64783,64785,64787,64789,64791,64793,64795,64798,64800,64802,64804],{"class":51,"line":17466},[49,64782,55833],{"class":73},[49,64784,33],{"class":51831},[49,64786,61583],{"class":73},[49,64788,124],{"class":51831},[49,64790,61588],{"class":55},[49,64792,78],{"class":73},[49,64794,64767],{"class":59},[49,64796,64797],{"class":73},">美食\u003C\u002F",[49,64799,124],{"class":51831},[49,64801,55845],{"class":73},[49,64803,33],{"class":51831},[49,64805,51838],{"class":73},[49,64807,64808,64810,64812,64814,64816,64818,64820,64822,64825,64827,64829,64831],{"class":51,"line":17480},[49,64809,55833],{"class":73},[49,64811,33],{"class":51831},[49,64813,61583],{"class":73},[49,64815,124],{"class":51831},[49,64817,61588],{"class":55},[49,64819,78],{"class":73},[49,64821,64767],{"class":59},[49,64823,64824],{"class":73},">百货\u003C\u002F",[49,64826,124],{"class":51831},[49,64828,55845],{"class":73},[49,64830,33],{"class":51831},[49,64832,51838],{"class":73},[49,64834,64835,64837,64839,64841,64843,64845,64847,64849,64852,64854,64856,64858],{"class":51,"line":17493},[49,64836,55833],{"class":73},[49,64838,33],{"class":51831},[49,64840,61583],{"class":73},[49,64842,124],{"class":51831},[49,64844,61588],{"class":55},[49,64846,78],{"class":73},[49,64848,64767],{"class":59},[49,64850,64851],{"class":73},">个护\u003C\u002F",[49,64853,124],{"class":51831},[49,64855,55845],{"class":73},[49,64857,33],{"class":51831},[49,64859,51838],{"class":73},[49,64861,64862,64864,64866,64868,64870,64872,64874,64876,64879,64881,64883,64885],{"class":51,"line":17498},[49,64863,55833],{"class":73},[49,64865,33],{"class":51831},[49,64867,61583],{"class":73},[49,64869,124],{"class":51831},[49,64871,61588],{"class":55},[49,64873,78],{"class":73},[49,64875,64767],{"class":59},[49,64877,64878],{"class":73},">预告\u003C\u002F",[49,64880,124],{"class":51831},[49,64882,55845],{"class":73},[49,64884,33],{"class":51831},[49,64886,51838],{"class":73},[49,64888,64889,64891,64893],{"class":51,"line":17512},[49,64890,55938],{"class":73},[49,64892,742],{"class":51831},[49,64894,51838],{"class":73},[49,64896,64897,64899,64901],{"class":51,"line":17517},[49,64898,52307],{"class":73},[49,64900,52142],{"class":51831},[49,64902,51838],{"class":73},[49,64904,64905,64907,64909,64911,64913,64916],{"class":51,"line":17523},[49,64906,51872],{"class":73},[49,64908,52142],{"class":51831},[49,64910,54017],{"class":55},[49,64912,78],{"class":73},[49,64914,64915],{"class":59},"\"tab-content\"",[49,64917,51838],{"class":73},[49,64919,64920,64922,64924,64926,64928,64931,64933,64935,64937,64939,64942,64944,64946,64948,64951,64953],{"class":51,"line":17528},[49,64921,55765],{"class":73},[49,64923,52142],{"class":51831},[49,64925,54017],{"class":55},[49,64927,78],{"class":73},[49,64929,64930],{"class":59},"\"item active\"",[49,64932,61583],{"class":73},[49,64934,25],{"class":51831},[49,64936,55770],{"class":55},[49,64938,78],{"class":73},[49,64940,64941],{"class":59},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[49,64943,55778],{"class":55},[49,64945,78],{"class":73},[49,64947,8349],{"class":59},[49,64949,64950],{"class":73}," \u002F>\u003C\u002F",[49,64952,52142],{"class":51831},[49,64954,51838],{"class":73},[49,64956,64957,64959,64961,64963,64965,64967,64969,64971,64973,64975,64978,64980,64982,64984,64986,64988],{"class":51,"line":17542},[49,64958,55765],{"class":73},[49,64960,52142],{"class":51831},[49,64962,54017],{"class":55},[49,64964,78],{"class":73},[49,64966,63154],{"class":59},[49,64968,61583],{"class":73},[49,64970,25],{"class":51831},[49,64972,55770],{"class":55},[49,64974,78],{"class":73},[49,64976,64977],{"class":59},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[49,64979,55778],{"class":55},[49,64981,78],{"class":73},[49,64983,8349],{"class":59},[49,64985,64950],{"class":73},[49,64987,52142],{"class":51831},[49,64989,51838],{"class":73},[49,64991,64992,64994,64996,64998,65000,65002,65004,65006,65008,65010,65013,65015,65017,65019,65021,65023],{"class":51,"line":17547},[49,64993,55765],{"class":73},[49,64995,52142],{"class":51831},[49,64997,54017],{"class":55},[49,64999,78],{"class":73},[49,65001,63154],{"class":59},[49,65003,61583],{"class":73},[49,65005,25],{"class":51831},[49,65007,55770],{"class":55},[49,65009,78],{"class":73},[49,65011,65012],{"class":59},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[49,65014,55778],{"class":55},[49,65016,78],{"class":73},[49,65018,8349],{"class":59},[49,65020,64950],{"class":73},[49,65022,52142],{"class":51831},[49,65024,51838],{"class":73},[49,65026,65027,65029,65031,65033,65035,65037,65039,65041,65043,65045,65048,65050,65052,65054,65056,65058],{"class":51,"line":17552},[49,65028,55765],{"class":73},[49,65030,52142],{"class":51831},[49,65032,54017],{"class":55},[49,65034,78],{"class":73},[49,65036,63154],{"class":59},[49,65038,61583],{"class":73},[49,65040,25],{"class":51831},[49,65042,55770],{"class":55},[49,65044,78],{"class":73},[49,65046,65047],{"class":59},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[49,65049,55778],{"class":55},[49,65051,78],{"class":73},[49,65053,8349],{"class":59},[49,65055,64950],{"class":73},[49,65057,52142],{"class":51831},[49,65059,51838],{"class":73},[49,65061,65062,65064,65066,65068,65070,65072,65074,65076,65078,65080,65083,65085,65087,65089,65091,65093],{"class":51,"line":17566},[49,65063,55765],{"class":73},[49,65065,52142],{"class":51831},[49,65067,54017],{"class":55},[49,65069,78],{"class":73},[49,65071,63154],{"class":59},[49,65073,61583],{"class":73},[49,65075,25],{"class":51831},[49,65077,55770],{"class":55},[49,65079,78],{"class":73},[49,65081,65082],{"class":59},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[49,65084,55778],{"class":55},[49,65086,78],{"class":73},[49,65088,8349],{"class":59},[49,65090,64950],{"class":73},[49,65092,52142],{"class":51831},[49,65094,51838],{"class":73},[49,65096,65097,65099,65101],{"class":51,"line":17578},[49,65098,52307],{"class":73},[49,65100,52142],{"class":51831},[49,65102,51838],{"class":73},[49,65104,65105,65107,65109],{"class":51,"line":17583},[49,65106,52948],{"class":73},[49,65108,52142],{"class":51831},[49,65110,51838],{"class":73},[49,65112,65113,65115,65117],{"class":51,"line":17596},[49,65114,52675],{"class":73},[49,65116,52344],{"class":51831},[49,65118,51838],{"class":73},[49,65120,65121],{"class":51,"line":17601},[49,65122,65123],{"class":66},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[49,65125,65126],{"class":51,"line":17606},[49,65127,65128],{"class":66},"    \u002F\u002F 1.1 获取 a 元素 \n",[49,65130,65131,65133,65136,65138,65140,65142,65144,65147],{"class":51,"line":17611},[49,65132,11918],{"class":77},[49,65134,65135],{"class":159}," as",[49,65137,14261],{"class":77},[49,65139,54927],{"class":73},[49,65141,56212],{"class":55},[49,65143,841],{"class":73},[49,65145,65146],{"class":59},"'.tab-nav a'",[49,65148,847],{"class":73},[49,65150,65151],{"class":51,"line":17624},[49,65152,65153],{"class":66},"    \u002F\u002F console.log(as) \n",[49,65155,65156,65158,65160,65162,65164,65166,65168,65170,65172,65175,65177,65179,65181],{"class":51,"line":17629},[49,65157,3898],{"class":77},[49,65159,2357],{"class":73},[49,65161,52378],{"class":77},[49,65163,10135],{"class":73},[49,65165,78],{"class":77},[49,65167,4790],{"class":159},[49,65169,10142],{"class":73},[49,65171,1739],{"class":77},[49,65173,65174],{"class":73}," as.",[49,65176,52499],{"class":159},[49,65178,3911],{"class":73},[49,65180,2990],{"class":77},[49,65182,13139],{"class":73},[49,65184,65185],{"class":51,"line":33164},[49,65186,65187],{"class":66},"      \u002F\u002F console.log(as[i])\n",[49,65189,65190],{"class":51,"line":33170},[49,65191,65192],{"class":66},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[49,65194,65195,65198,65200,65202,65205,65207,65209],{"class":51,"line":33176},[49,65196,65197],{"class":73},"      as[i].",[49,65199,58344],{"class":55},[49,65201,841],{"class":73},[49,65203,65204],{"class":59},"'mouseenter'",[49,65206,13132],{"class":73},[49,65208,54980],{"class":77},[49,65210,54983],{"class":73},[49,65212,65213],{"class":51,"line":33182},[49,65214,65215],{"class":66},"        \u002F\u002F console.log('鼠标经过')\n",[49,65217,65218],{"class":51,"line":33188},[49,65219,65220],{"class":66},"        \u002F\u002F 排他思想  \n",[49,65222,65223],{"class":51,"line":33199},[49,65224,65225],{"class":66},"        \u002F\u002F 干掉别人 移除类active\n",[49,65227,65228,65230,65232,65234,65237,65239,65241,65243,65246],{"class":51,"line":33205},[49,65229,52456],{"class":73},[49,65231,54930],{"class":55},[49,65233,841],{"class":73},[49,65235,65236],{"class":59},"'.tab-nav .active'",[49,65238,57534],{"class":73},[49,65240,57537],{"class":55},[49,65242,841],{"class":73},[49,65244,65245],{"class":59},"'active'",[49,65247,847],{"class":73},[49,65249,65250],{"class":51,"line":33225},[49,65251,65252],{"class":66},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[49,65254,65255,65258,65261,65263,65265,65267],{"class":51,"line":33231},[49,65256,65257],{"class":159},"        this",[49,65259,65260],{"class":73},".classList.",[49,65262,6031],{"class":55},[49,65264,841],{"class":73},[49,65266,65245],{"class":59},[49,65268,847],{"class":73},[49,65270,65271],{"class":51,"line":33242},[49,65272,399],{"emptyLinePlaceholder":398},[49,65274,65275],{"class":51,"line":33248},[49,65276,65277],{"class":66},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[49,65279,65280],{"class":51,"line":33254},[49,65281,65282],{"class":66},"        \u002F\u002F 干掉别人\n",[49,65284,65285,65287,65289,65291,65294,65296,65298,65300,65302],{"class":51,"line":33260},[49,65286,52456],{"class":73},[49,65288,54930],{"class":55},[49,65290,841],{"class":73},[49,65292,65293],{"class":59},"'.tab-content .active'",[49,65295,57534],{"class":73},[49,65297,57537],{"class":55},[49,65299,841],{"class":73},[49,65301,65245],{"class":59},[49,65303,847],{"class":73},[49,65305,65306],{"class":51,"line":33266},[49,65307,65308],{"class":66},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[49,65310,65311,65313,65315,65317,65320,65322,65324,65326,65328,65330,65332,65334,65336],{"class":51,"line":33272},[49,65312,52456],{"class":73},[49,65314,54930],{"class":55},[49,65316,841],{"class":73},[49,65318,65319],{"class":59},"`.tab-content .item:nth-child(${",[49,65321,1270],{"class":73},[49,65323,46097],{"class":77},[49,65325,25807],{"class":159},[49,65327,57563],{"class":59},[49,65329,57534],{"class":73},[49,65331,6031],{"class":55},[49,65333,841],{"class":73},[49,65335,65245],{"class":59},[49,65337,847],{"class":73},[49,65339,65340],{"class":51,"line":33278},[49,65341,399],{"emptyLinePlaceholder":398},[49,65343,65344],{"class":51,"line":33284},[49,65345,65346],{"class":73},"      })\n",[49,65348,65349],{"class":51,"line":33304},[49,65350,2885],{"class":73},[49,65352,65353,65355,65357],{"class":51,"line":33310},[49,65354,52948],{"class":73},[49,65356,52344],{"class":51831},[49,65358,51838],{"class":73},[49,65360,65361,65363,65365],{"class":51,"line":33326},[49,65362,52316],{"class":73},[49,65364,52331],{"class":51831},[49,65366,51838],{"class":73},[49,65368,65369],{"class":51,"line":33332},[49,65370,399],{"emptyLinePlaceholder":398},[49,65372,65373,65375,65377],{"class":51,"line":33346},[49,65374,52316],{"class":73},[49,65376,51166],{"class":51831},[49,65378,51838],{"class":73},[14,65380,65381],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,65383,65384],{},"在监听事件中，this指向的就是他的调用者",[14,65386,65387],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,65389,54251],{},[14,65391,65392],{},"(function () {",[14,65394,65395],{},"const list = document.querySelector('.xtx-elevator-list')",[14,65397,65398],{},"list.addEventListener('click', function (e) {",[14,65400,65401],{},"if (e.target.tagName === 'A') {",[14,65403,65404],{},"\u002F\u002F 排他思想",[14,65406,65407],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,65409,65410],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,65412,65413],{},"\u002F\u002F console.log(old);",[14,65415,65416],{},"\u002F\u002F 判断",[14,65418,65419],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,65421,65422],{},"if (old) old.classList.remove('active')",[14,65424,65425],{},"e.target.classList.add('active')",[14,65427,1775],{},[14,65429,52995],{},[14,65431,65432],{},"})();",[18,65434,65436],{"id":65435},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[40,65438,65440],{"className":51164,"code":65439,"language":51166,"meta":27,"style":27},"\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",[46,65441,65442,65452,65456,65464,65468,65482,65496,65508,65516,65522,65532,65542,65546,65550,65557,65569,65580,65597,65610,65624,65634,65638,65642,65649,65660,65678,65688,65700,65704,65708,65715,65732,65743,65755,65759,65763,65770,65782,65786,65794,65802,65806,65814,65822,65830,65845,65889,65897,65910,65923,65936,65944,65952,65960,65988,65996,66008,66021,66034,66042,66050,66058,66084,66092,66105,66117,66130,66138,66146,66154,66180,66188,66201,66213,66226,66234,66242,66250,66255,66275,66280,66300,66305,66322,66327,66335,66340,66369,66382,66386,66390,66395,66399,66427,66432,66449,66454,66459,66464,66469,66495,66499,66503,66511,66519,66523],{"__ignoreMap":27},[49,65443,65444,65446,65448,65450],{"class":51,"line":52},[49,65445,51828],{"class":73},[49,65447,51832],{"class":51831},[49,65449,51835],{"class":55},[49,65451,51838],{"class":73},[49,65453,65454],{"class":51,"line":63},[49,65455,399],{"emptyLinePlaceholder":398},[49,65457,65458,65460,65462],{"class":51,"line":70},[49,65459,1739],{"class":73},[49,65461,51166],{"class":51831},[49,65463,51838],{"class":73},[49,65465,65466],{"class":51,"line":219},[49,65467,399],{"emptyLinePlaceholder":398},[49,65469,65470,65472,65474,65476,65478,65480],{"class":51,"line":233},[49,65471,1739],{"class":73},[49,65473,51865],{"class":51831},[49,65475,51847],{"class":55},[49,65477,78],{"class":73},[49,65479,51852],{"class":59},[49,65481,51838],{"class":73},[49,65483,65484,65486,65488,65490,65492,65494],{"class":51,"line":241},[49,65485,52675],{"class":73},[49,65487,51875],{"class":51831},[49,65489,51878],{"class":55},[49,65491,78],{"class":73},[49,65493,51883],{"class":59},[49,65495,51838],{"class":73},[49,65497,65498,65500,65502,65504,65506],{"class":51,"line":1920},[49,65499,52675],{"class":73},[49,65501,51938],{"class":51831},[49,65503,55845],{"class":73},[49,65505,51938],{"class":51831},[49,65507,51838],{"class":73},[49,65509,65510,65512,65514],{"class":51,"line":2011},[49,65511,52675],{"class":73},[49,65513,757],{"class":51831},[49,65515,51838],{"class":73},[49,65517,65518,65520],{"class":51,"line":2017},[49,65519,7100],{"class":51831},[49,65521,16269],{"class":73},[49,65523,65524,65526,65528,65530],{"class":51,"line":2029},[49,65525,55237],{"class":159},[49,65527,51968],{"class":73},[49,65529,1021],{"class":159},[49,65531,1990],{"class":73},[49,65533,65534,65536,65538,65540],{"class":51,"line":2311},[49,65535,55226],{"class":159},[49,65537,51968],{"class":73},[49,65539,1021],{"class":159},[49,65541,1990],{"class":73},[49,65543,65544],{"class":51,"line":2316},[49,65545,2885],{"class":73},[49,65547,65548],{"class":51,"line":2322},[49,65549,399],{"emptyLinePlaceholder":398},[49,65551,65552,65555],{"class":51,"line":2327},[49,65553,65554],{"class":51831},"    table",[49,65556,16269],{"class":73},[49,65558,65559,65562,65564,65567],{"class":51,"line":2341},[49,65560,65561],{"class":159},"      border-collapse",[49,65563,51968],{"class":73},[49,65565,65566],{"class":159},"collapse",[49,65568,1990],{"class":73},[49,65570,65571,65574,65576,65578],{"class":51,"line":2346},[49,65572,65573],{"class":159},"      border-spacing",[49,65575,51968],{"class":73},[49,65577,1021],{"class":159},[49,65579,1990],{"class":73},[49,65581,65582,65584,65586,65588,65590,65592,65595],{"class":51,"line":2352},[49,65583,62508],{"class":159},[49,65585,51968],{"class":73},[49,65587,1047],{"class":159},[49,65589,52023],{"class":77},[49,65591,52052],{"class":159},[49,65593,65594],{"class":159}," #c0c0c0",[49,65596,1990],{"class":73},[49,65598,65599,65601,65603,65606,65608],{"class":51,"line":2373},[49,65600,55302],{"class":159},[49,65602,51968],{"class":73},[49,65604,65605],{"class":159},"500",[49,65607,52023],{"class":77},[49,65609,1990],{"class":73},[49,65611,65612,65614,65616,65618,65620,65622],{"class":51,"line":2378},[49,65613,55237],{"class":159},[49,65615,51968],{"class":73},[49,65617,1140],{"class":159},[49,65619,52023],{"class":77},[49,65621,52087],{"class":159},[49,65623,1990],{"class":73},[49,65625,65626,65628,65630,65632],{"class":51,"line":2392},[49,65627,57817],{"class":159},[49,65629,51968],{"class":73},[49,65631,52123],{"class":159},[49,65633,1990],{"class":73},[49,65635,65636],{"class":51,"line":2397},[49,65637,2885],{"class":73},[49,65639,65640],{"class":51,"line":2426},[49,65641,399],{"emptyLinePlaceholder":398},[49,65643,65644,65647],{"class":51,"line":2431},[49,65645,65646],{"class":51831},"    th",[49,65648,16269],{"class":73},[49,65650,65651,65653,65655,65658],{"class":51,"line":2448},[49,65652,55415],{"class":159},[49,65654,51968],{"class":73},[49,65656,65657],{"class":159},"#09c",[49,65659,1990],{"class":73},[49,65661,65662,65665,65667,65669,65671,65673,65676],{"class":51,"line":2453},[49,65663,65664],{"class":159},"      font",[49,65666,51968],{"class":73},[49,65668,62870],{"class":159},[49,65670,64604],{"class":159},[49,65672,52023],{"class":77},[49,65674,65675],{"class":59}," \"微软雅黑\"",[49,65677,1990],{"class":73},[49,65679,65680,65682,65684,65686],{"class":51,"line":2458},[49,65681,57947],{"class":159},[49,65683,51968],{"class":73},[49,65685,61373],{"class":159},[49,65687,1990],{"class":73},[49,65689,65690,65692,65694,65696,65698],{"class":51,"line":2463},[49,65691,55316],{"class":159},[49,65693,51968],{"class":73},[49,65695,1629],{"class":159},[49,65697,52023],{"class":77},[49,65699,1990],{"class":73},[49,65701,65702],{"class":51,"line":2477},[49,65703,2885],{"class":73},[49,65705,65706],{"class":51,"line":2482},[49,65707,399],{"emptyLinePlaceholder":398},[49,65709,65710,65713],{"class":51,"line":3274},[49,65711,65712],{"class":51831},"    td",[49,65714,16269],{"class":73},[49,65716,65717,65719,65721,65723,65725,65727,65730],{"class":51,"line":3288},[49,65718,62508],{"class":159},[49,65720,51968],{"class":73},[49,65722,1047],{"class":159},[49,65724,52023],{"class":77},[49,65726,52052],{"class":159},[49,65728,65729],{"class":159}," #d0d0d0",[49,65731,1990],{"class":73},[49,65733,65734,65736,65738,65741],{"class":51,"line":3296},[49,65735,57947],{"class":159},[49,65737,51968],{"class":73},[49,65739,65740],{"class":159},"#404060",[49,65742,1990],{"class":73},[49,65744,65745,65747,65749,65751,65753],{"class":51,"line":3301},[49,65746,55226],{"class":159},[49,65748,51968],{"class":73},[49,65750,1275],{"class":159},[49,65752,52023],{"class":77},[49,65754,1990],{"class":73},[49,65756,65757],{"class":51,"line":3307},[49,65758,2885],{"class":73},[49,65760,65761],{"class":51,"line":3313},[49,65762,399],{"emptyLinePlaceholder":398},[49,65764,65765,65768],{"class":51,"line":3318},[49,65766,65767],{"class":55},"    .allCheck",[49,65769,16269],{"class":73},[49,65771,65772,65774,65776,65778,65780],{"class":51,"line":8645},[49,65773,55302],{"class":159},[49,65775,51968],{"class":73},[49,65777,1441],{"class":159},[49,65779,52023],{"class":77},[49,65781,1990],{"class":73},[49,65783,65784],{"class":51,"line":8669},[49,65785,2885],{"class":73},[49,65787,65788,65790,65792],{"class":51,"line":8674},[49,65789,52948],{"class":73},[49,65791,757],{"class":51831},[49,65793,51838],{"class":73},[49,65795,65796,65798,65800],{"class":51,"line":8680},[49,65797,52316],{"class":73},[49,65799,51865],{"class":51831},[49,65801,51838],{"class":73},[49,65803,65804],{"class":51,"line":8707},[49,65805,399],{"emptyLinePlaceholder":398},[49,65807,65808,65810,65812],{"class":51,"line":8712},[49,65809,1739],{"class":73},[49,65811,52331],{"class":51831},[49,65813,51838],{"class":73},[49,65815,65816,65818,65820],{"class":51,"line":8718},[49,65817,52675],{"class":73},[49,65819,610],{"class":51831},[49,65821,51838],{"class":73},[49,65823,65824,65826,65828],{"class":51,"line":8730},[49,65825,51872],{"class":73},[49,65827,616],{"class":51831},[49,65829,51838],{"class":73},[49,65831,65832,65834,65836,65838,65840,65843],{"class":51,"line":8742},[49,65833,55765],{"class":73},[49,65835,619],{"class":51831},[49,65837,54017],{"class":55},[49,65839,78],{"class":73},[49,65841,65842],{"class":59},"\"allCheck\"",[49,65844,51838],{"class":73},[49,65846,65847,65849,65851,65853,65855,65857,65859,65861,65863,65865,65867,65870,65873,65875,65877,65879,65882,65885,65887],{"class":51,"line":8754},[49,65848,55833],{"class":73},[49,65850,54352],{"class":51831},[49,65852,54355],{"class":55},[49,65854,78],{"class":73},[49,65856,54360],{"class":59},[49,65858,15617],{"class":55},[49,65860,78],{"class":73},[49,65862,8349],{"class":59},[49,65864,15656],{"class":55},[49,65866,78],{"class":73},[49,65868,65869],{"class":59},"\"checkAll\"",[49,65871,65872],{"class":73},"> \u003C",[49,65874,49],{"class":51831},[49,65876,54017],{"class":55},[49,65878,78],{"class":73},[49,65880,65881],{"class":59},"\"all\"",[49,65883,65884],{"class":73},">全选\u003C\u002F",[49,65886,49],{"class":51831},[49,65888,51838],{"class":73},[49,65890,65891,65893,65895],{"class":51,"line":10413},[49,65892,55938],{"class":73},[49,65894,619],{"class":51831},[49,65896,51838],{"class":73},[49,65898,65899,65901,65903,65906,65908],{"class":51,"line":10438},[49,65900,55765],{"class":73},[49,65902,619],{"class":51831},[49,65904,65905],{"class":73},">商品\u003C\u002F",[49,65907,619],{"class":51831},[49,65909,51838],{"class":73},[49,65911,65912,65914,65916,65919,65921],{"class":51,"line":10461},[49,65913,55765],{"class":73},[49,65915,619],{"class":51831},[49,65917,65918],{"class":73},">商家\u003C\u002F",[49,65920,619],{"class":51831},[49,65922,51838],{"class":73},[49,65924,65925,65927,65929,65932,65934],{"class":51,"line":10485},[49,65926,55765],{"class":73},[49,65928,619],{"class":51831},[49,65930,65931],{"class":73},">价格\u003C\u002F",[49,65933,619],{"class":51831},[49,65935,51838],{"class":73},[49,65937,65938,65940,65942],{"class":51,"line":10490},[49,65939,52307],{"class":73},[49,65941,616],{"class":51831},[49,65943,51838],{"class":73},[49,65945,65946,65948,65950],{"class":51,"line":10495},[49,65947,51872],{"class":73},[49,65949,616],{"class":51831},[49,65951,51838],{"class":73},[49,65953,65954,65956,65958],{"class":51,"line":10500},[49,65955,55765],{"class":73},[49,65957,638],{"class":51831},[49,65959,51838],{"class":73},[49,65961,65962,65964,65966,65968,65970,65972,65974,65976,65979,65981,65983,65986],{"class":51,"line":10509},[49,65963,55833],{"class":73},[49,65965,54352],{"class":51831},[49,65967,54355],{"class":55},[49,65969,78],{"class":73},[49,65971,54360],{"class":59},[49,65973,15617],{"class":55},[49,65975,78],{"class":73},[49,65977,65978],{"class":59},"\"check\"",[49,65980,54017],{"class":55},[49,65982,78],{"class":73},[49,65984,65985],{"class":59},"\"ck\"",[49,65987,51838],{"class":73},[49,65989,65990,65992,65994],{"class":51,"line":10514},[49,65991,55938],{"class":73},[49,65993,638],{"class":51831},[49,65995,51838],{"class":73},[49,65997,65998,66000,66002,66004,66006],{"class":51,"line":10520},[49,65999,55765],{"class":73},[49,66001,638],{"class":51831},[49,66003,61704],{"class":73},[49,66005,638],{"class":51831},[49,66007,51838],{"class":73},[49,66009,66010,66012,66014,66017,66019],{"class":51,"line":10541},[49,66011,55765],{"class":73},[49,66013,638],{"class":51831},[49,66015,66016],{"class":73},">小米\u003C\u002F",[49,66018,638],{"class":51831},[49,66020,51838],{"class":73},[49,66022,66023,66025,66027,66030,66032],{"class":51,"line":10547},[49,66024,55765],{"class":73},[49,66026,638],{"class":51831},[49,66028,66029],{"class":73},">￥1999\u003C\u002F",[49,66031,638],{"class":51831},[49,66033,51838],{"class":73},[49,66035,66036,66038,66040],{"class":51,"line":10561},[49,66037,52307],{"class":73},[49,66039,616],{"class":51831},[49,66041,51838],{"class":73},[49,66043,66044,66046,66048],{"class":51,"line":10567},[49,66045,51872],{"class":73},[49,66047,616],{"class":51831},[49,66049,51838],{"class":73},[49,66051,66052,66054,66056],{"class":51,"line":10594},[49,66053,55765],{"class":73},[49,66055,638],{"class":51831},[49,66057,51838],{"class":73},[49,66059,66060,66062,66064,66066,66068,66070,66072,66074,66076,66078,66080,66082],{"class":51,"line":10603},[49,66061,55833],{"class":73},[49,66063,54352],{"class":51831},[49,66065,54355],{"class":55},[49,66067,78],{"class":73},[49,66069,54360],{"class":59},[49,66071,15617],{"class":55},[49,66073,78],{"class":73},[49,66075,65978],{"class":59},[49,66077,54017],{"class":55},[49,66079,78],{"class":73},[49,66081,65985],{"class":59},[49,66083,51838],{"class":73},[49,66085,66086,66088,66090],{"class":51,"line":10609},[49,66087,55938],{"class":73},[49,66089,638],{"class":51831},[49,66091,51838],{"class":73},[49,66093,66094,66096,66098,66101,66103],{"class":51,"line":10617},[49,66095,55765],{"class":73},[49,66097,638],{"class":51831},[49,66099,66100],{"class":73},">小米净水器\u003C\u002F",[49,66102,638],{"class":51831},[49,66104,51838],{"class":73},[49,66106,66107,66109,66111,66113,66115],{"class":51,"line":10622},[49,66108,55765],{"class":73},[49,66110,638],{"class":51831},[49,66112,66016],{"class":73},[49,66114,638],{"class":51831},[49,66116,51838],{"class":73},[49,66118,66119,66121,66123,66126,66128],{"class":51,"line":17301},[49,66120,55765],{"class":73},[49,66122,638],{"class":51831},[49,66124,66125],{"class":73},">￥4999\u003C\u002F",[49,66127,638],{"class":51831},[49,66129,51838],{"class":73},[49,66131,66132,66134,66136],{"class":51,"line":17307},[49,66133,52307],{"class":73},[49,66135,616],{"class":51831},[49,66137,51838],{"class":73},[49,66139,66140,66142,66144],{"class":51,"line":17330},[49,66141,51872],{"class":73},[49,66143,616],{"class":51831},[49,66145,51838],{"class":73},[49,66147,66148,66150,66152],{"class":51,"line":17336},[49,66149,55765],{"class":73},[49,66151,638],{"class":51831},[49,66153,51838],{"class":73},[49,66155,66156,66158,66160,66162,66164,66166,66168,66170,66172,66174,66176,66178],{"class":51,"line":17359},[49,66157,55833],{"class":73},[49,66159,54352],{"class":51831},[49,66161,54355],{"class":55},[49,66163,78],{"class":73},[49,66165,54360],{"class":59},[49,66167,15617],{"class":55},[49,66169,78],{"class":73},[49,66171,65978],{"class":59},[49,66173,54017],{"class":55},[49,66175,78],{"class":73},[49,66177,65985],{"class":59},[49,66179,51838],{"class":73},[49,66181,66182,66184,66186],{"class":51,"line":17373},[49,66183,55938],{"class":73},[49,66185,638],{"class":51831},[49,66187,51838],{"class":73},[49,66189,66190,66192,66194,66197,66199],{"class":51,"line":17393},[49,66191,55765],{"class":73},[49,66193,638],{"class":51831},[49,66195,66196],{"class":73},">小米电视\u003C\u002F",[49,66198,638],{"class":51831},[49,66200,51838],{"class":73},[49,66202,66203,66205,66207,66209,66211],{"class":51,"line":17399},[49,66204,55765],{"class":73},[49,66206,638],{"class":51831},[49,66208,66016],{"class":73},[49,66210,638],{"class":51831},[49,66212,51838],{"class":73},[49,66214,66215,66217,66219,66222,66224],{"class":51,"line":17410},[49,66216,55765],{"class":73},[49,66218,638],{"class":51831},[49,66220,66221],{"class":73},">￥5999\u003C\u002F",[49,66223,638],{"class":51831},[49,66225,51838],{"class":73},[49,66227,66228,66230,66232],{"class":51,"line":17433},[49,66229,52307],{"class":73},[49,66231,616],{"class":51831},[49,66233,51838],{"class":73},[49,66235,66236,66238,66240],{"class":51,"line":17455},[49,66237,52948],{"class":73},[49,66239,610],{"class":51831},[49,66241,51838],{"class":73},[49,66243,66244,66246,66248],{"class":51,"line":17460},[49,66245,52675],{"class":73},[49,66247,52344],{"class":51831},[49,66249,51838],{"class":73},[49,66251,66252],{"class":51,"line":17466},[49,66253,66254],{"class":66},"    \u002F\u002F 1. 获取大复选框\n",[49,66256,66257,66259,66262,66264,66266,66268,66270,66273],{"class":51,"line":17480},[49,66258,11918],{"class":77},[49,66260,66261],{"class":159}," checkAll",[49,66263,14261],{"class":77},[49,66265,54927],{"class":73},[49,66267,54930],{"class":55},[49,66269,841],{"class":73},[49,66271,66272],{"class":59},"'#checkAll'",[49,66274,847],{"class":73},[49,66276,66277],{"class":51,"line":17493},[49,66278,66279],{"class":66},"    \u002F\u002F 2. 获取所有的小复选框\n",[49,66281,66282,66284,66287,66289,66291,66293,66295,66298],{"class":51,"line":17498},[49,66283,11918],{"class":77},[49,66285,66286],{"class":159}," cks",[49,66288,14261],{"class":77},[49,66290,54927],{"class":73},[49,66292,56212],{"class":55},[49,66294,841],{"class":73},[49,66296,66297],{"class":59},"'.ck'",[49,66299,847],{"class":73},[49,66301,66302],{"class":51,"line":17512},[49,66303,66304],{"class":66},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[49,66306,66307,66310,66312,66314,66316,66318,66320],{"class":51,"line":17517},[49,66308,66309],{"class":73},"    checkAll.",[49,66311,58344],{"class":55},[49,66313,841],{"class":73},[49,66315,58349],{"class":59},[49,66317,13132],{"class":73},[49,66319,54980],{"class":77},[49,66321,54983],{"class":73},[49,66323,66324],{"class":51,"line":17523},[49,66325,66326],{"class":66},"      \u002F\u002F 得到当前大复选框的选中状态\n",[49,66328,66329,66332],{"class":51,"line":17528},[49,66330,66331],{"class":66},"      \u002F\u002F console.log(checkAll.checked)",[49,66333,66334],{"class":66},"  \u002F\u002F 得到 是 true 或者是 false\n",[49,66336,66337],{"class":51,"line":17542},[49,66338,66339],{"class":66},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[49,66341,66342,66344,66346,66348,66350,66352,66354,66356,66358,66361,66363,66365,66367],{"class":51,"line":17547},[49,66343,52815],{"class":77},[49,66345,2357],{"class":73},[49,66347,52378],{"class":77},[49,66349,10135],{"class":73},[49,66351,78],{"class":77},[49,66353,4790],{"class":159},[49,66355,10142],{"class":73},[49,66357,1739],{"class":77},[49,66359,66360],{"class":73}," cks.",[49,66362,52499],{"class":159},[49,66364,3911],{"class":73},[49,66366,2990],{"class":77},[49,66368,13139],{"class":73},[49,66370,66371,66374,66376,66379],{"class":51,"line":17552},[49,66372,66373],{"class":73},"        cks[i].checked ",[49,66375,78],{"class":77},[49,66377,66378],{"class":159}," this",[49,66380,66381],{"class":73},".checked\n",[49,66383,66384],{"class":51,"line":17566},[49,66385,52929],{"class":73},[49,66387,66388],{"class":51,"line":17578},[49,66389,33992],{"class":73},[49,66391,66392],{"class":51,"line":17583},[49,66393,66394],{"class":66},"    \u002F\u002F 5. 小复选框控制大复选框\n",[49,66396,66397],{"class":51,"line":17596},[49,66398,399],{"emptyLinePlaceholder":398},[49,66400,66401,66403,66405,66407,66409,66411,66413,66415,66417,66419,66421,66423,66425],{"class":51,"line":17601},[49,66402,3898],{"class":77},[49,66404,2357],{"class":73},[49,66406,52378],{"class":77},[49,66408,10135],{"class":73},[49,66410,78],{"class":77},[49,66412,4790],{"class":159},[49,66414,10142],{"class":73},[49,66416,1739],{"class":77},[49,66418,66360],{"class":73},[49,66420,52499],{"class":159},[49,66422,3911],{"class":73},[49,66424,2990],{"class":77},[49,66426,13139],{"class":73},[49,66428,66429],{"class":51,"line":17606},[49,66430,66431],{"class":66},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[49,66433,66434,66437,66439,66441,66443,66445,66447],{"class":51,"line":17611},[49,66435,66436],{"class":73},"      cks[i].",[49,66438,58344],{"class":55},[49,66440,841],{"class":73},[49,66442,58349],{"class":59},[49,66444,13132],{"class":73},[49,66446,54980],{"class":77},[49,66448,54983],{"class":73},[49,66450,66451],{"class":51,"line":17624},[49,66452,66453],{"class":66},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[49,66455,66456],{"class":51,"line":17629},[49,66457,66458],{"class":66},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[49,66460,66461],{"class":51,"line":33164},[49,66462,66463],{"class":66},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[49,66465,66466],{"class":51,"line":33170},[49,66467,66468],{"class":66},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[49,66470,66471,66474,66476,66478,66480,66482,66485,66487,66489,66491,66493],{"class":51,"line":33176},[49,66472,66473],{"class":73},"        checkAll.checked ",[49,66475,78],{"class":77},[49,66477,54927],{"class":73},[49,66479,56212],{"class":55},[49,66481,841],{"class":73},[49,66483,66484],{"class":59},"'.ck:checked'",[49,66486,31357],{"class":73},[49,66488,52499],{"class":159},[49,66490,58437],{"class":77},[49,66492,66360],{"class":73},[49,66494,56362],{"class":159},[49,66496,66497],{"class":51,"line":33182},[49,66498,65346],{"class":73},[49,66500,66501],{"class":51,"line":33188},[49,66502,2885],{"class":73},[49,66504,66505,66507,66509],{"class":51,"line":33199},[49,66506,52948],{"class":73},[49,66508,52344],{"class":51831},[49,66510,51838],{"class":73},[49,66512,66513,66515,66517],{"class":51,"line":33205},[49,66514,52316],{"class":73},[49,66516,52331],{"class":51831},[49,66518,51838],{"class":73},[49,66520,66521],{"class":51,"line":33225},[49,66522,399],{"emptyLinePlaceholder":398},[49,66524,66525,66527,66529],{"class":51,"line":33231},[49,66526,52316],{"class":73},[49,66528,51166],{"class":51831},[49,66530,51838],{"class":73},[14,66532,66533],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66535,66536],{},"用好之间比较得到的布尔值！！！",[14,66538,66539,66540,66543,66544,2357,66547,1413,66549,66552],{},"在 JS 里访问的时候，",[46,66541,66542],{},"checkbox.checked"," 是一个 ",[112,66545,66546],{},"布尔值",[46,66548,2062],{},[46,66550,66551],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66554,66555,66556,66559,66560],{},"HTML 的 ",[46,66557,66558],{},"checked=\"checked\""," 只是 ",[112,66561,66562,66563,66566],{},"初始值；JS 的 ",[46,66564,66565],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66568,66569],{},"：checked是一个伪类选择器",[14,66571,66572],{},[25,66573],{"alt":27,"src":66574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66576,66577,66580],{},[66578,66579],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66582,66583],{},[25,66584],{"alt":27,"src":66585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[782,66587,66589],{"id":66588},"_33-dom事件进阶","3.3 DOM事件进阶",[18,66591,66593],{"id":66592},"_331-事件流","3.3.1 事件流",[14,66595,66596],{},[25,66597],{"alt":27,"src":66598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[130,66600,66602],{"id":66601},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66604,66605],{},[25,66606],{"alt":27,"src":66607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[40,66609,66611],{"className":51164,"code":66610,"language":51166,"meta":27,"style":27},"\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",[46,66612,66613,66623,66637,66641,66649,66663,66683,66695,66703,66710,66722,66734,66744,66748,66752,66759,66771,66783,66793,66797,66805,66813,66817,66825,66840,66859,66867,66875,66895,66915,66931,66942,66950,66967,66978,66986,67003,67014,67022,67030,67038,67042],{"__ignoreMap":27},[49,66614,66615,66617,66619,66621],{"class":51,"line":52},[49,66616,51828],{"class":73},[49,66618,51832],{"class":51831},[49,66620,51835],{"class":55},[49,66622,51838],{"class":73},[49,66624,66625,66627,66629,66631,66633,66635],{"class":51,"line":63},[49,66626,1739],{"class":73},[49,66628,51166],{"class":51831},[49,66630,51847],{"class":55},[49,66632,78],{"class":73},[49,66634,51852],{"class":59},[49,66636,51838],{"class":73},[49,66638,66639],{"class":51,"line":70},[49,66640,399],{"emptyLinePlaceholder":398},[49,66642,66643,66645,66647],{"class":51,"line":219},[49,66644,1739],{"class":73},[49,66646,51865],{"class":51831},[49,66648,51838],{"class":73},[49,66650,66651,66653,66655,66657,66659,66661],{"class":51,"line":233},[49,66652,52675],{"class":73},[49,66654,51875],{"class":51831},[49,66656,51878],{"class":55},[49,66658,78],{"class":73},[49,66660,51883],{"class":59},[49,66662,51838],{"class":73},[49,66664,66665,66667,66669,66671,66673,66675,66677,66679,66681],{"class":51,"line":241},[49,66666,52675],{"class":73},[49,66668,51875],{"class":51831},[49,66670,15617],{"class":55},[49,66672,78],{"class":73},[49,66674,51922],{"class":59},[49,66676,51902],{"class":55},[49,66678,78],{"class":73},[49,66680,51929],{"class":59},[49,66682,51838],{"class":73},[49,66684,66685,66687,66689,66691,66693],{"class":51,"line":1920},[49,66686,52675],{"class":73},[49,66688,51938],{"class":51831},[49,66690,51941],{"class":73},[49,66692,51938],{"class":51831},[49,66694,51838],{"class":73},[49,66696,66697,66699,66701],{"class":51,"line":2011},[49,66698,52675],{"class":73},[49,66700,757],{"class":51831},[49,66702,51838],{"class":73},[49,66704,66705,66708],{"class":51,"line":2017},[49,66706,66707],{"class":55},"    .father",[49,66709,16269],{"class":73},[49,66711,66712,66714,66716,66718,66720],{"class":51,"line":2029},[49,66713,55302],{"class":159},[49,66715,51968],{"class":73},[49,66717,65605],{"class":159},[49,66719,52023],{"class":77},[49,66721,1990],{"class":73},[49,66723,66724,66726,66728,66730,66732],{"class":51,"line":2311},[49,66725,55316],{"class":159},[49,66727,51968],{"class":73},[49,66729,65605],{"class":159},[49,66731,52023],{"class":77},[49,66733,1990],{"class":73},[49,66735,66736,66738,66740,66742],{"class":51,"line":2316},[49,66737,55415],{"class":159},[49,66739,51968],{"class":73},[49,66741,52176],{"class":159},[49,66743,1990],{"class":73},[49,66745,66746],{"class":51,"line":2322},[49,66747,2885],{"class":73},[49,66749,66750],{"class":51,"line":2327},[49,66751,399],{"emptyLinePlaceholder":398},[49,66753,66754,66757],{"class":51,"line":2341},[49,66755,66756],{"class":55},"    .son",[49,66758,16269],{"class":73},[49,66760,66761,66763,66765,66767,66769],{"class":51,"line":2346},[49,66762,55302],{"class":159},[49,66764,51968],{"class":73},[49,66766,2421],{"class":159},[49,66768,52023],{"class":77},[49,66770,1990],{"class":73},[49,66772,66773,66775,66777,66779,66781],{"class":51,"line":2352},[49,66774,55316],{"class":159},[49,66776,51968],{"class":73},[49,66778,2421],{"class":159},[49,66780,52023],{"class":77},[49,66782,1990],{"class":73},[49,66784,66785,66787,66789,66791],{"class":51,"line":2373},[49,66786,55415],{"class":159},[49,66788,51968],{"class":73},[49,66790,55420],{"class":159},[49,66792,1990],{"class":73},[49,66794,66795],{"class":51,"line":2378},[49,66796,2885],{"class":73},[49,66798,66799,66801,66803],{"class":51,"line":2392},[49,66800,52948],{"class":73},[49,66802,757],{"class":51831},[49,66804,51838],{"class":73},[49,66806,66807,66809,66811],{"class":51,"line":2397},[49,66808,52316],{"class":73},[49,66810,51865],{"class":51831},[49,66812,51838],{"class":73},[49,66814,66815],{"class":51,"line":2426},[49,66816,399],{"emptyLinePlaceholder":398},[49,66818,66819,66821,66823],{"class":51,"line":2431},[49,66820,1739],{"class":73},[49,66822,52331],{"class":51831},[49,66824,51838],{"class":73},[49,66826,66827,66829,66831,66833,66835,66838],{"class":51,"line":2448},[49,66828,52675],{"class":73},[49,66830,52142],{"class":51831},[49,66832,54017],{"class":55},[49,66834,78],{"class":73},[49,66836,66837],{"class":59},"\"father\"",[49,66839,51838],{"class":73},[49,66841,66842,66844,66846,66848,66850,66853,66855,66857],{"class":51,"line":2453},[49,66843,51872],{"class":73},[49,66845,52142],{"class":51831},[49,66847,54017],{"class":55},[49,66849,78],{"class":73},[49,66851,66852],{"class":59},"\"son\"",[49,66854,55845],{"class":73},[49,66856,52142],{"class":51831},[49,66858,51838],{"class":73},[49,66860,66861,66863,66865],{"class":51,"line":2458},[49,66862,52948],{"class":73},[49,66864,52142],{"class":51831},[49,66866,51838],{"class":73},[49,66868,66869,66871,66873],{"class":51,"line":2463},[49,66870,52675],{"class":73},[49,66872,52344],{"class":51831},[49,66874,51838],{"class":73},[49,66876,66877,66879,66882,66884,66886,66888,66890,66893],{"class":51,"line":2477},[49,66878,11918],{"class":77},[49,66880,66881],{"class":159}," fa",[49,66883,14261],{"class":77},[49,66885,54927],{"class":73},[49,66887,54930],{"class":55},[49,66889,841],{"class":73},[49,66891,66892],{"class":59},"'.father'",[49,66894,847],{"class":73},[49,66896,66897,66899,66902,66904,66906,66908,66910,66913],{"class":51,"line":2482},[49,66898,11918],{"class":77},[49,66900,66901],{"class":159}," son",[49,66903,14261],{"class":77},[49,66905,54927],{"class":73},[49,66907,54930],{"class":55},[49,66909,841],{"class":73},[49,66911,66912],{"class":59},"'.son'",[49,66914,847],{"class":73},[49,66916,66917,66919,66921,66923,66925,66927,66929],{"class":51,"line":3274},[49,66918,52938],{"class":73},[49,66920,58344],{"class":55},[49,66922,841],{"class":73},[49,66924,58349],{"class":59},[49,66926,13132],{"class":73},[49,66928,54980],{"class":77},[49,66930,54983],{"class":73},[49,66932,66933,66935,66937,66940],{"class":51,"line":3288},[49,66934,59456],{"class":55},[49,66936,841],{"class":73},[49,66938,66939],{"class":59},"'woshiu1'",[49,66941,847],{"class":73},[49,66943,66944,66946,66948],{"class":51,"line":3296},[49,66945,55066],{"class":73},[49,66947,2062],{"class":159},[49,66949,847],{"class":73},[49,66951,66952,66955,66957,66959,66961,66963,66965],{"class":51,"line":3301},[49,66953,66954],{"class":73},"    fa.",[49,66956,58344],{"class":55},[49,66958,841],{"class":73},[49,66960,58349],{"class":59},[49,66962,13132],{"class":73},[49,66964,54980],{"class":77},[49,66966,54983],{"class":73},[49,66968,66969,66971,66973,66976],{"class":51,"line":3307},[49,66970,59456],{"class":55},[49,66972,841],{"class":73},[49,66974,66975],{"class":59},"'1'",[49,66977,847],{"class":73},[49,66979,66980,66982,66984],{"class":51,"line":3313},[49,66981,55066],{"class":73},[49,66983,2062],{"class":159},[49,66985,847],{"class":73},[49,66987,66988,66991,66993,66995,66997,66999,67001],{"class":51,"line":3318},[49,66989,66990],{"class":73},"    son.",[49,66992,58344],{"class":55},[49,66994,841],{"class":73},[49,66996,58349],{"class":59},[49,66998,13132],{"class":73},[49,67000,54980],{"class":77},[49,67002,54983],{"class":73},[49,67004,67005,67007,67009,67012],{"class":51,"line":8645},[49,67006,59456],{"class":55},[49,67008,841],{"class":73},[49,67010,67011],{"class":59},"'2'",[49,67013,847],{"class":73},[49,67015,67016,67018,67020],{"class":51,"line":8669},[49,67017,55066],{"class":73},[49,67019,2062],{"class":159},[49,67021,847],{"class":73},[49,67023,67024,67026,67028],{"class":51,"line":8674},[49,67025,52948],{"class":73},[49,67027,52344],{"class":51831},[49,67029,51838],{"class":73},[49,67031,67032,67034,67036],{"class":51,"line":8680},[49,67033,52316],{"class":73},[49,67035,52331],{"class":51831},[49,67037,51838],{"class":73},[49,67039,67040],{"class":51,"line":8707},[49,67041,399],{"emptyLinePlaceholder":398},[49,67043,67044,67046,67048],{"class":51,"line":8712},[49,67045,52316],{"class":73},[49,67047,51166],{"class":51831},[49,67049,51838],{"class":73},[14,67051,67052],{},[25,67053],{"alt":27,"src":67054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,67056,67057],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[130,67059,67061],{"id":67060},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,67063,67064],{},[25,67065],{"alt":27,"src":67066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,67068,67069],{},"反着来",[14,67071,67072],{},"注意是同名事件，比如都是‘click’",[130,67074,67076],{"id":67075},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,67078,67079],{},[25,67080],{"alt":27,"src":67081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[130,67083,67085],{"id":67084},"_3314-解绑事件","3.3.1.4 解绑事件",[14,67087,67088],{},[25,67089],{"alt":27,"src":67090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,67092,67093],{},[25,67094],{"alt":27,"src":67095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[130,67097,67099],{"id":67098},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[30,67101,67102],{},[33,67103,67104],{},"事件类型的区别",[14,67106,67107],{},[25,67108],{"alt":27,"src":67109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,67111,67112],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[30,67114,67115],{"start":63},[33,67116,67117],{},"注册事件的区别",[14,67119,67120],{},[25,67121],{"alt":27,"src":67122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[130,67124,67126],{"id":67125},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,67128,67129],{},[25,67130],{"alt":27,"src":67131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,67133,67134],{},[25,67135],{"alt":27,"src":67136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[40,67138,67140],{"className":53598,"code":67139,"language":53600,"meta":27,"style":27},"\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",[46,67141,67142,67150,67167,67190,67198,67203,67208,67213,67217,67225,67233],{"__ignoreMap":27},[49,67143,67144,67146,67148],{"class":51,"line":52},[49,67145,1739],{"class":73},[49,67147,52331],{"class":51831},[49,67149,51838],{"class":73},[49,67151,67152,67154,67157,67160,67162,67165],{"class":51,"line":63},[49,67153,52675],{"class":73},[49,67155,67156],{"class":51831},"form",[49,67158,67159],{"class":55}," action",[49,67161,78],{"class":73},[49,67163,67164],{"class":59},"\"http:\u002F\u002Fwww.itcast.cn\"",[49,67166,51838],{"class":73},[49,67168,67169,67171,67173,67175,67177,67180,67183,67185,67188],{"class":51,"line":70},[49,67170,51872],{"class":73},[49,67172,54352],{"class":51831},[49,67174,54355],{"class":55},[49,67176,78],{"class":73},[49,67178,67179],{"class":59},"\"submit\"",[49,67181,67182],{"class":55}," value",[49,67184,78],{"class":73},[49,67186,67187],{"class":59},"\"免费注册\"",[49,67189,51838],{"class":73},[49,67191,67192,67194,67196],{"class":51,"line":219},[49,67193,51872],{"class":73},[49,67195,52344],{"class":51831},[49,67197,51838],{"class":73},[49,67199,67200],{"class":51,"line":233},[49,67201,67202],{"class":73},"      const form = document.querySelector('form')\n",[49,67204,67205],{"class":51,"line":241},[49,67206,67207],{"class":73},"      form.addEventListener('submit', function (e) {\n",[49,67209,67210],{"class":51,"line":1920},[49,67211,67212],{"class":73},"        e.preventDefault()\n",[49,67214,67215],{"class":51,"line":2011},[49,67216,65346],{"class":73},[49,67218,67219,67221,67223],{"class":51,"line":2017},[49,67220,52307],{"class":73},[49,67222,52344],{"class":51831},[49,67224,51838],{"class":73},[49,67226,67227,67229,67231],{"class":51,"line":2029},[49,67228,52948],{"class":73},[49,67230,67156],{"class":51831},[49,67232,51838],{"class":73},[49,67234,67235,67237,67239],{"class":51,"line":2311},[49,67236,52316],{"class":73},[49,67238,52331],{"class":51831},[49,67240,51838],{"class":73},[14,67242,67243],{},"点击不在跳转！！！",[18,67245,67247],{"id":67246},"_332-事件委托","3.3.2 事件委托",[14,67249,67250],{},[25,67251],{"alt":27,"src":67252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[40,67254,67256],{"className":51164,"code":67255,"language":51166,"meta":27,"style":27},"\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",[46,67257,67258,67268,67282,67286,67294,67308,67328,67340,67348,67352,67360,67368,67380,67392,67404,67416,67428,67441,67449,67457,67462,67481,67502,67507,67512,67517,67522,67531,67535,67545,67549,67554,67559,67573,67583,67587,67591,67599,67607,67611],{"__ignoreMap":27},[49,67259,67260,67262,67264,67266],{"class":51,"line":52},[49,67261,51828],{"class":73},[49,67263,51832],{"class":51831},[49,67265,51835],{"class":55},[49,67267,51838],{"class":73},[49,67269,67270,67272,67274,67276,67278,67280],{"class":51,"line":63},[49,67271,1739],{"class":73},[49,67273,51166],{"class":51831},[49,67275,51847],{"class":55},[49,67277,78],{"class":73},[49,67279,51852],{"class":59},[49,67281,51838],{"class":73},[49,67283,67284],{"class":51,"line":70},[49,67285,399],{"emptyLinePlaceholder":398},[49,67287,67288,67290,67292],{"class":51,"line":219},[49,67289,1739],{"class":73},[49,67291,51865],{"class":51831},[49,67293,51838],{"class":73},[49,67295,67296,67298,67300,67302,67304,67306],{"class":51,"line":233},[49,67297,52675],{"class":73},[49,67299,51875],{"class":51831},[49,67301,51878],{"class":55},[49,67303,78],{"class":73},[49,67305,51883],{"class":59},[49,67307,51838],{"class":73},[49,67309,67310,67312,67314,67316,67318,67320,67322,67324,67326],{"class":51,"line":241},[49,67311,52675],{"class":73},[49,67313,51875],{"class":51831},[49,67315,15617],{"class":55},[49,67317,78],{"class":73},[49,67319,51922],{"class":59},[49,67321,51902],{"class":55},[49,67323,78],{"class":73},[49,67325,51929],{"class":59},[49,67327,51838],{"class":73},[49,67329,67330,67332,67334,67336,67338],{"class":51,"line":1920},[49,67331,52675],{"class":73},[49,67333,51938],{"class":51831},[49,67335,51941],{"class":73},[49,67337,51938],{"class":51831},[49,67339,51838],{"class":73},[49,67341,67342,67344,67346],{"class":51,"line":2011},[49,67343,52316],{"class":73},[49,67345,51865],{"class":51831},[49,67347,51838],{"class":73},[49,67349,67350],{"class":51,"line":2017},[49,67351,399],{"emptyLinePlaceholder":398},[49,67353,67354,67356,67358],{"class":51,"line":2029},[49,67355,1739],{"class":73},[49,67357,52331],{"class":51831},[49,67359,51838],{"class":73},[49,67361,67362,67364,67366],{"class":51,"line":2311},[49,67363,52675],{"class":73},[49,67365,742],{"class":51831},[49,67367,51838],{"class":73},[49,67369,67370,67372,67374,67376,67378],{"class":51,"line":2316},[49,67371,51872],{"class":73},[49,67373,33],{"class":51831},[49,67375,54497],{"class":73},[49,67377,33],{"class":51831},[49,67379,51838],{"class":73},[49,67381,67382,67384,67386,67388,67390],{"class":51,"line":2322},[49,67383,51872],{"class":73},[49,67385,33],{"class":51831},[49,67387,54516],{"class":73},[49,67389,33],{"class":51831},[49,67391,51838],{"class":73},[49,67393,67394,67396,67398,67400,67402],{"class":51,"line":2327},[49,67395,51872],{"class":73},[49,67397,33],{"class":51831},[49,67399,54535],{"class":73},[49,67401,33],{"class":51831},[49,67403,51838],{"class":73},[49,67405,67406,67408,67410,67412,67414],{"class":51,"line":2341},[49,67407,51872],{"class":73},[49,67409,33],{"class":51831},[49,67411,54554],{"class":73},[49,67413,33],{"class":51831},[49,67415,51838],{"class":73},[49,67417,67418,67420,67422,67424,67426],{"class":51,"line":2346},[49,67419,51872],{"class":73},[49,67421,33],{"class":51831},[49,67423,54573],{"class":73},[49,67425,33],{"class":51831},[49,67427,51838],{"class":73},[49,67429,67430,67432,67434,67437,67439],{"class":51,"line":2352},[49,67431,51872],{"class":73},[49,67433,14],{"class":51831},[49,67435,67436],{"class":73},">我不需要变色\u003C\u002F",[49,67438,14],{"class":51831},[49,67440,51838],{"class":73},[49,67442,67443,67445,67447],{"class":51,"line":2373},[49,67444,52948],{"class":73},[49,67446,742],{"class":51831},[49,67448,51838],{"class":73},[49,67450,67451,67453,67455],{"class":51,"line":2378},[49,67452,52675],{"class":73},[49,67454,52344],{"class":51831},[49,67456,51838],{"class":73},[49,67458,67459],{"class":51,"line":2392},[49,67460,67461],{"class":66},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[49,67463,67464,67466,67468,67470,67472,67474,67476,67479],{"class":51,"line":2397},[49,67465,11918],{"class":77},[49,67467,61823],{"class":159},[49,67469,14261],{"class":77},[49,67471,54927],{"class":73},[49,67473,54930],{"class":55},[49,67475,841],{"class":73},[49,67477,67478],{"class":59},"'ul'",[49,67480,847],{"class":73},[49,67482,67483,67486,67488,67490,67492,67494,67496,67498,67500],{"class":51,"line":2426},[49,67484,67485],{"class":73},"    ul.",[49,67487,58344],{"class":55},[49,67489,841],{"class":73},[49,67491,58349],{"class":59},[49,67493,13132],{"class":73},[49,67495,54980],{"class":77},[49,67497,2357],{"class":73},[49,67499,912],{"class":5913},[49,67501,13139],{"class":73},[49,67503,67504],{"class":51,"line":2431},[49,67505,67506],{"class":66},"      \u002F\u002F alert(1)\n",[49,67508,67509],{"class":51,"line":2448},[49,67510,67511],{"class":66},"      \u002F\u002F e.target就是我们点击的对象\n",[49,67513,67514],{"class":51,"line":2453},[49,67515,67516],{"class":66},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[49,67518,67519],{"class":51,"line":2458},[49,67520,67521],{"class":66},"      \u002F\u002F e.target.style.color = 'red'\n",[49,67523,67524,67526,67528],{"class":51,"line":2463},[49,67525,58775],{"class":73},[49,67527,58778],{"class":55},[49,67529,67530],{"class":73},"(e)\n",[49,67532,67533],{"class":51,"line":2477},[49,67534,399],{"emptyLinePlaceholder":398},[49,67536,67537,67539,67542],{"class":51,"line":2482},[49,67538,58775],{"class":73},[49,67540,67541],{"class":55},"dir",[49,67543,67544],{"class":73},"(e.target)\n",[49,67546,67547],{"class":51,"line":3274},[49,67548,399],{"emptyLinePlaceholder":398},[49,67550,67551],{"class":51,"line":3288},[49,67552,67553],{"class":66},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[49,67555,67556],{"class":51,"line":3296},[49,67557,67558],{"class":66},"      \u002F\u002F 通过tagName来进行判断\n",[49,67560,67561,67563,67566,67568,67571],{"class":51,"line":3301},[49,67562,55011],{"class":77},[49,67564,67565],{"class":73}," (e.target.tagName ",[49,67567,55017],{"class":77},[49,67569,67570],{"class":59}," 'LI'",[49,67572,13139],{"class":73},[49,67574,67575,67578,67580],{"class":51,"line":3307},[49,67576,67577],{"class":73},"        e.target.style.color ",[49,67579,78],{"class":77},[49,67581,67582],{"class":59}," 'red'\n",[49,67584,67585],{"class":51,"line":3313},[49,67586,52929],{"class":73},[49,67588,67589],{"class":51,"line":3318},[49,67590,33992],{"class":73},[49,67592,67593,67595,67597],{"class":51,"line":8645},[49,67594,52948],{"class":73},[49,67596,52344],{"class":51831},[49,67598,51838],{"class":73},[49,67600,67601,67603,67605],{"class":51,"line":8669},[49,67602,52316],{"class":73},[49,67604,52331],{"class":51831},[49,67606,51838],{"class":73},[49,67608,67609],{"class":51,"line":8674},[49,67610,399],{"emptyLinePlaceholder":398},[49,67612,67613,67615,67617],{"class":51,"line":8680},[49,67614,52316],{"class":73},[49,67616,51166],{"class":51831},[49,67618,51838],{"class":73},[14,67620,67621],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67623,67624],{},"if(e.target.ragName==='P') {}",[14,67626,67627],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67629,67630],{},"通过事件委托的方式实现tab栏切换改造：",[14,67632,67633],{},"一定要记住自定义属性！！！！！！",[14,67635,67636],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67638,67639],{},"id是自定义的属性名",[14,67641,67642],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[40,67644,67646],{"className":51164,"code":67645,"language":51166,"meta":27,"style":27},"\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",[46,67647,67648,67658,67672,67676,67684,67698,67718,67738,67750,67758,67764,67774,67784,67788,67792,67798,67810,67822,67834,67850,67854,67858,67864,67876,67888,67900,67910,67920,67924,67928,67936,67948,67958,67970,67974,67978,67986,67996,68006,68016,68020,68024,68034,68048,68060,68064,68068,68080,68090,68106,68116,68120,68124,68138,68148,68158,68162,68166,68172,68186,68190,68194,68202,68212,68216,68220,68229,68239,68243,68251,68259,68263,68271,68285,68299,68311,68319,68358,68390,68422,68454,68486,68494,68502,68516,68550,68584,68618,68652,68686,68694,68702,68710,68715,68720,68739,68744,68764,68772,68777,68790,68811,68824,68828,68833,68838,68851,68871,68899,68903,68907,68911,68919,68927,68931],{"__ignoreMap":27},[49,67649,67650,67652,67654,67656],{"class":51,"line":52},[49,67651,51828],{"class":73},[49,67653,51832],{"class":51831},[49,67655,51835],{"class":55},[49,67657,51838],{"class":73},[49,67659,67660,67662,67664,67666,67668,67670],{"class":51,"line":63},[49,67661,1739],{"class":73},[49,67663,51166],{"class":51831},[49,67665,51847],{"class":55},[49,67667,78],{"class":73},[49,67669,51852],{"class":59},[49,67671,51838],{"class":73},[49,67673,67674],{"class":51,"line":70},[49,67675,399],{"emptyLinePlaceholder":398},[49,67677,67678,67680,67682],{"class":51,"line":219},[49,67679,1739],{"class":73},[49,67681,51865],{"class":51831},[49,67683,51838],{"class":73},[49,67685,67686,67688,67690,67692,67694,67696],{"class":51,"line":233},[49,67687,52675],{"class":73},[49,67689,51875],{"class":51831},[49,67691,51878],{"class":55},[49,67693,78],{"class":73},[49,67695,51883],{"class":59},[49,67697,59658],{"class":73},[49,67699,67700,67702,67704,67706,67708,67710,67712,67714,67716],{"class":51,"line":241},[49,67701,52675],{"class":73},[49,67703,51875],{"class":51831},[49,67705,51894],{"class":55},[49,67707,78],{"class":73},[49,67709,51899],{"class":59},[49,67711,51902],{"class":55},[49,67713,78],{"class":73},[49,67715,51907],{"class":59},[49,67717,59658],{"class":73},[49,67719,67720,67722,67724,67726,67728,67730,67732,67734,67736],{"class":51,"line":1920},[49,67721,52675],{"class":73},[49,67723,51875],{"class":51831},[49,67725,15617],{"class":55},[49,67727,78],{"class":73},[49,67729,51922],{"class":59},[49,67731,51902],{"class":55},[49,67733,78],{"class":73},[49,67735,51929],{"class":59},[49,67737,59658],{"class":73},[49,67739,67740,67742,67744,67746,67748],{"class":51,"line":2011},[49,67741,52675],{"class":73},[49,67743,51938],{"class":51831},[49,67745,64156],{"class":73},[49,67747,51938],{"class":51831},[49,67749,51838],{"class":73},[49,67751,67752,67754,67756],{"class":51,"line":2017},[49,67753,52675],{"class":73},[49,67755,757],{"class":51831},[49,67757,51838],{"class":73},[49,67759,67760,67762],{"class":51,"line":2029},[49,67761,7100],{"class":51831},[49,67763,16269],{"class":73},[49,67765,67766,67768,67770,67772],{"class":51,"line":2311},[49,67767,55237],{"class":159},[49,67769,51968],{"class":73},[49,67771,1021],{"class":159},[49,67773,1990],{"class":73},[49,67775,67776,67778,67780,67782],{"class":51,"line":2316},[49,67777,55226],{"class":159},[49,67779,51968],{"class":73},[49,67781,1021],{"class":159},[49,67783,1990],{"class":73},[49,67785,67786],{"class":51,"line":2322},[49,67787,2885],{"class":73},[49,67789,67790],{"class":51,"line":2327},[49,67791,399],{"emptyLinePlaceholder":398},[49,67793,67794,67796],{"class":51,"line":2341},[49,67795,64207],{"class":55},[49,67797,16269],{"class":73},[49,67799,67800,67802,67804,67806,67808],{"class":51,"line":2346},[49,67801,55302],{"class":159},[49,67803,51968],{"class":73},[49,67805,64218],{"class":159},[49,67807,52023],{"class":77},[49,67809,1990],{"class":73},[49,67811,67812,67814,67816,67818,67820],{"class":51,"line":2352},[49,67813,55316],{"class":159},[49,67815,51968],{"class":73},[49,67817,64231],{"class":159},[49,67819,52023],{"class":77},[49,67821,1990],{"class":73},[49,67823,67824,67826,67828,67830,67832],{"class":51,"line":2373},[49,67825,55237],{"class":159},[49,67827,51968],{"class":73},[49,67829,1529],{"class":159},[49,67831,52023],{"class":77},[49,67833,1990],{"class":73},[49,67835,67836,67838,67840,67842,67844,67846,67848],{"class":51,"line":2378},[49,67837,62508],{"class":159},[49,67839,51968],{"class":73},[49,67841,1047],{"class":159},[49,67843,52023],{"class":77},[49,67845,52052],{"class":159},[49,67847,62775],{"class":159},[49,67849,1990],{"class":73},[49,67851,67852],{"class":51,"line":2392},[49,67853,2885],{"class":73},[49,67855,67856],{"class":51,"line":2397},[49,67857,399],{"emptyLinePlaceholder":398},[49,67859,67860,67862],{"class":51,"line":2426},[49,67861,64276],{"class":55},[49,67863,16269],{"class":73},[49,67865,67866,67868,67870,67872,67874],{"class":51,"line":2431},[49,67867,55302],{"class":159},[49,67869,51968],{"class":73},[49,67871,1140],{"class":159},[49,67873,1157],{"class":77},[49,67875,1990],{"class":73},[49,67877,67878,67880,67882,67884,67886],{"class":51,"line":2448},[49,67879,55316],{"class":159},[49,67881,51968],{"class":73},[49,67883,1736],{"class":159},[49,67885,52023],{"class":77},[49,67887,1990],{"class":73},[49,67889,67890,67892,67894,67896,67898],{"class":51,"line":2453},[49,67891,57890],{"class":159},[49,67893,51968],{"class":73},[49,67895,1736],{"class":159},[49,67897,52023],{"class":77},[49,67899,1990],{"class":73},[49,67901,67902,67904,67906,67908],{"class":51,"line":2458},[49,67903,55540],{"class":159},[49,67905,51968],{"class":73},[49,67907,52008],{"class":159},[49,67909,1990],{"class":73},[49,67911,67912,67914,67916,67918],{"class":51,"line":2463},[49,67913,55551],{"class":159},[49,67915,51968],{"class":73},[49,67917,52199],{"class":159},[49,67919,1990],{"class":73},[49,67921,67922],{"class":51,"line":2477},[49,67923,2885],{"class":73},[49,67925,67926],{"class":51,"line":2482},[49,67927,399],{"emptyLinePlaceholder":398},[49,67929,67930,67932,67934],{"class":51,"line":3274},[49,67931,64276],{"class":55},[49,67933,64349],{"class":51831},[49,67935,16269],{"class":73},[49,67937,67938,67940,67942,67944,67946],{"class":51,"line":3288},[49,67939,55453],{"class":159},[49,67941,51968],{"class":73},[49,67943,1629],{"class":159},[49,67945,52023],{"class":77},[49,67947,1990],{"class":73},[49,67949,67950,67952,67954,67956],{"class":51,"line":3296},[49,67951,62865],{"class":159},[49,67953,51968],{"class":73},[49,67955,64372],{"class":159},[49,67957,1990],{"class":73},[49,67959,67960,67962,67964,67966,67968],{"class":51,"line":3301},[49,67961,62531],{"class":159},[49,67963,51968],{"class":73},[49,67965,1529],{"class":159},[49,67967,52023],{"class":77},[49,67969,1990],{"class":73},[49,67971,67972],{"class":51,"line":3307},[49,67973,2885],{"class":73},[49,67975,67976],{"class":51,"line":3313},[49,67977,399],{"emptyLinePlaceholder":398},[49,67979,67980,67982,67984],{"class":51,"line":3318},[49,67981,64276],{"class":55},[49,67983,61823],{"class":51831},[49,67985,16269],{"class":73},[49,67987,67988,67990,67992,67994],{"class":51,"line":8645},[49,67989,55263],{"class":159},[49,67991,51968],{"class":73},[49,67993,55268],{"class":159},[49,67995,1990],{"class":73},[49,67997,67998,68000,68002,68004],{"class":51,"line":8669},[49,67999,55540],{"class":159},[49,68001,51968],{"class":73},[49,68003,52008],{"class":159},[49,68005,1990],{"class":73},[49,68007,68008,68010,68012,68014],{"class":51,"line":8674},[49,68009,55551],{"class":159},[49,68011,51968],{"class":73},[49,68013,52111],{"class":159},[49,68015,1990],{"class":73},[49,68017,68018],{"class":51,"line":8680},[49,68019,2885],{"class":73},[49,68021,68022],{"class":51,"line":8707},[49,68023,399],{"emptyLinePlaceholder":398},[49,68025,68026,68028,68030,68032],{"class":51,"line":8712},[49,68027,64276],{"class":55},[49,68029,61823],{"class":51831},[49,68031,55606],{"class":51831},[49,68033,16269],{"class":73},[49,68035,68036,68038,68040,68042,68044,68046],{"class":51,"line":8718},[49,68037,55237],{"class":159},[49,68039,51968],{"class":73},[49,68041,1021],{"class":159},[49,68043,9647],{"class":159},[49,68045,52023],{"class":77},[49,68047,1990],{"class":73},[49,68049,68050,68052,68054,68056,68058],{"class":51,"line":8730},[49,68051,55453],{"class":159},[49,68053,51968],{"class":73},[49,68055,1378],{"class":159},[49,68057,52023],{"class":77},[49,68059,1990],{"class":73},[49,68061,68062],{"class":51,"line":8742},[49,68063,2885],{"class":73},[49,68065,68066],{"class":51,"line":8754},[49,68067,399],{"emptyLinePlaceholder":398},[49,68069,68070,68072,68074,68076,68078],{"class":51,"line":10413},[49,68071,64276],{"class":55},[49,68073,61823],{"class":51831},[49,68075,55606],{"class":51831},[49,68077,2098],{"class":51831},[49,68079,16269],{"class":73},[49,68081,68082,68084,68086,68088],{"class":51,"line":10438},[49,68083,64501],{"class":159},[49,68085,51968],{"class":73},[49,68087,55268],{"class":159},[49,68089,1990],{"class":73},[49,68091,68092,68094,68096,68098,68100,68102,68104],{"class":51,"line":10461},[49,68093,62763],{"class":159},[49,68095,51968],{"class":73},[49,68097,915],{"class":159},[49,68099,52023],{"class":77},[49,68101,52052],{"class":159},[49,68103,64522],{"class":159},[49,68105,1990],{"class":73},[49,68107,68108,68110,68112,68114],{"class":51,"line":10485},[49,68109,57947],{"class":159},[49,68111,51968],{"class":73},[49,68113,62900],{"class":159},[49,68115,1990],{"class":73},[49,68117,68118],{"class":51,"line":10490},[49,68119,2885],{"class":73},[49,68121,68122],{"class":51,"line":10495},[49,68123,399],{"emptyLinePlaceholder":398},[49,68125,68126,68128,68130,68132,68134,68136],{"class":51,"line":10500},[49,68127,64276],{"class":55},[49,68129,61823],{"class":51831},[49,68131,55606],{"class":51831},[49,68133,2098],{"class":51831},[49,68135,64555],{"class":55},[49,68137,16269],{"class":73},[49,68139,68140,68142,68144,68146],{"class":51,"line":10509},[49,68141,62322],{"class":159},[49,68143,51968],{"class":73},[49,68145,64566],{"class":159},[49,68147,1990],{"class":73},[49,68149,68150,68152,68154,68156],{"class":51,"line":10514},[49,68151,57947],{"class":159},[49,68153,51968],{"class":73},[49,68155,64566],{"class":159},[49,68157,1990],{"class":73},[49,68159,68160],{"class":51,"line":10520},[49,68161,2885],{"class":73},[49,68163,68164],{"class":51,"line":10541},[49,68165,399],{"emptyLinePlaceholder":398},[49,68167,68168,68170],{"class":51,"line":10547},[49,68169,64591],{"class":55},[49,68171,16269],{"class":73},[49,68173,68174,68176,68178,68180,68182,68184],{"class":51,"line":10561},[49,68175,55226],{"class":159},[49,68177,51968],{"class":73},[49,68179,1021],{"class":159},[49,68181,64604],{"class":159},[49,68183,52023],{"class":77},[49,68185,1990],{"class":73},[49,68187,68188],{"class":51,"line":10567},[49,68189,2885],{"class":73},[49,68191,68192],{"class":51,"line":10594},[49,68193,399],{"emptyLinePlaceholder":398},[49,68195,68196,68198,68200],{"class":51,"line":10603},[49,68197,64591],{"class":55},[49,68199,62705],{"class":55},[49,68201,16269],{"class":73},[49,68203,68204,68206,68208,68210],{"class":51,"line":10609},[49,68205,55540],{"class":159},[49,68207,51968],{"class":73},[49,68209,55268],{"class":159},[49,68211,1990],{"class":73},[49,68213,68214],{"class":51,"line":10617},[49,68215,2885],{"class":73},[49,68217,68218],{"class":51,"line":10622},[49,68219,399],{"emptyLinePlaceholder":398},[49,68221,68222,68224,68227],{"class":51,"line":17301},[49,68223,64591],{"class":55},[49,68225,68226],{"class":55}," .active",[49,68228,16269],{"class":73},[49,68230,68231,68233,68235,68237],{"class":51,"line":17307},[49,68232,55540],{"class":159},[49,68234,51968],{"class":73},[49,68236,61400],{"class":159},[49,68238,1990],{"class":73},[49,68240,68241],{"class":51,"line":17330},[49,68242,2885],{"class":73},[49,68244,68245,68247,68249],{"class":51,"line":17336},[49,68246,52948],{"class":73},[49,68248,757],{"class":51831},[49,68250,51838],{"class":73},[49,68252,68253,68255,68257],{"class":51,"line":17359},[49,68254,52316],{"class":73},[49,68256,51865],{"class":51831},[49,68258,51838],{"class":73},[49,68260,68261],{"class":51,"line":17373},[49,68262,399],{"emptyLinePlaceholder":398},[49,68264,68265,68267,68269],{"class":51,"line":17393},[49,68266,1739],{"class":73},[49,68268,52331],{"class":51831},[49,68270,51838],{"class":73},[49,68272,68273,68275,68277,68279,68281,68283],{"class":51,"line":17399},[49,68274,52675],{"class":73},[49,68276,52142],{"class":51831},[49,68278,54017],{"class":55},[49,68280,78],{"class":73},[49,68282,64706],{"class":59},[49,68284,51838],{"class":73},[49,68286,68287,68289,68291,68293,68295,68297],{"class":51,"line":17410},[49,68288,51872],{"class":73},[49,68290,52142],{"class":51831},[49,68292,54017],{"class":55},[49,68294,78],{"class":73},[49,68296,64721],{"class":59},[49,68298,51838],{"class":73},[49,68300,68301,68303,68305,68307,68309],{"class":51,"line":17433},[49,68302,55765],{"class":73},[49,68304,18],{"class":51831},[49,68306,64732],{"class":73},[49,68308,18],{"class":51831},[49,68310,51838],{"class":73},[49,68312,68313,68315,68317],{"class":51,"line":17455},[49,68314,55765],{"class":73},[49,68316,742],{"class":51831},[49,68318,51838],{"class":73},[49,68320,68321,68323,68325,68327,68329,68331,68333,68335,68337,68339,68341,68343,68345,68348,68350,68352,68354,68356],{"class":51,"line":17460},[49,68322,55833],{"class":73},[49,68324,33],{"class":51831},[49,68326,61583],{"class":73},[49,68328,124],{"class":51831},[49,68330,54017],{"class":55},[49,68332,78],{"class":73},[49,68334,60237],{"class":59},[49,68336,61588],{"class":55},[49,68338,78],{"class":73},[49,68340,64767],{"class":59},[49,68342,54482],{"class":55},[49,68344,78],{"class":73},[49,68346,68347],{"class":59},"\"0\"",[49,68349,64770],{"class":73},[49,68351,124],{"class":51831},[49,68353,55845],{"class":73},[49,68355,33],{"class":51831},[49,68357,51838],{"class":73},[49,68359,68360,68362,68364,68366,68368,68370,68372,68374,68376,68378,68380,68382,68384,68386,68388],{"class":51,"line":17466},[49,68361,55833],{"class":73},[49,68363,33],{"class":51831},[49,68365,61583],{"class":73},[49,68367,124],{"class":51831},[49,68369,61588],{"class":55},[49,68371,78],{"class":73},[49,68373,64767],{"class":59},[49,68375,54482],{"class":55},[49,68377,78],{"class":73},[49,68379,4375],{"class":59},[49,68381,64797],{"class":73},[49,68383,124],{"class":51831},[49,68385,55845],{"class":73},[49,68387,33],{"class":51831},[49,68389,51838],{"class":73},[49,68391,68392,68394,68396,68398,68400,68402,68404,68406,68408,68410,68412,68414,68416,68418,68420],{"class":51,"line":17480},[49,68393,55833],{"class":73},[49,68395,33],{"class":51831},[49,68397,61583],{"class":73},[49,68399,124],{"class":51831},[49,68401,61588],{"class":55},[49,68403,78],{"class":73},[49,68405,64767],{"class":59},[49,68407,54482],{"class":55},[49,68409,78],{"class":73},[49,68411,4398],{"class":59},[49,68413,64824],{"class":73},[49,68415,124],{"class":51831},[49,68417,55845],{"class":73},[49,68419,33],{"class":51831},[49,68421,51838],{"class":73},[49,68423,68424,68426,68428,68430,68432,68434,68436,68438,68440,68442,68444,68446,68448,68450,68452],{"class":51,"line":17493},[49,68425,55833],{"class":73},[49,68427,33],{"class":51831},[49,68429,61583],{"class":73},[49,68431,124],{"class":51831},[49,68433,61588],{"class":55},[49,68435,78],{"class":73},[49,68437,64767],{"class":59},[49,68439,54482],{"class":55},[49,68441,78],{"class":73},[49,68443,4411],{"class":59},[49,68445,64851],{"class":73},[49,68447,124],{"class":51831},[49,68449,55845],{"class":73},[49,68451,33],{"class":51831},[49,68453,51838],{"class":73},[49,68455,68456,68458,68460,68462,68464,68466,68468,68470,68472,68474,68476,68478,68480,68482,68484],{"class":51,"line":17498},[49,68457,55833],{"class":73},[49,68459,33],{"class":51831},[49,68461,61583],{"class":73},[49,68463,124],{"class":51831},[49,68465,61588],{"class":55},[49,68467,78],{"class":73},[49,68469,64767],{"class":59},[49,68471,54482],{"class":55},[49,68473,78],{"class":73},[49,68475,4424],{"class":59},[49,68477,64878],{"class":73},[49,68479,124],{"class":51831},[49,68481,55845],{"class":73},[49,68483,33],{"class":51831},[49,68485,51838],{"class":73},[49,68487,68488,68490,68492],{"class":51,"line":17512},[49,68489,55938],{"class":73},[49,68491,742],{"class":51831},[49,68493,51838],{"class":73},[49,68495,68496,68498,68500],{"class":51,"line":17517},[49,68497,52307],{"class":73},[49,68499,52142],{"class":51831},[49,68501,51838],{"class":73},[49,68503,68504,68506,68508,68510,68512,68514],{"class":51,"line":17523},[49,68505,51872],{"class":73},[49,68507,52142],{"class":51831},[49,68509,54017],{"class":55},[49,68511,78],{"class":73},[49,68513,64915],{"class":59},[49,68515,51838],{"class":73},[49,68517,68518,68520,68522,68524,68526,68528,68530,68532,68534,68536,68538,68540,68542,68544,68546,68548],{"class":51,"line":17528},[49,68519,55765],{"class":73},[49,68521,52142],{"class":51831},[49,68523,54017],{"class":55},[49,68525,78],{"class":73},[49,68527,64930],{"class":59},[49,68529,61583],{"class":73},[49,68531,25],{"class":51831},[49,68533,55770],{"class":55},[49,68535,78],{"class":73},[49,68537,64941],{"class":59},[49,68539,55778],{"class":55},[49,68541,78],{"class":73},[49,68543,8349],{"class":59},[49,68545,64950],{"class":73},[49,68547,52142],{"class":51831},[49,68549,51838],{"class":73},[49,68551,68552,68554,68556,68558,68560,68562,68564,68566,68568,68570,68572,68574,68576,68578,68580,68582],{"class":51,"line":17542},[49,68553,55765],{"class":73},[49,68555,52142],{"class":51831},[49,68557,54017],{"class":55},[49,68559,78],{"class":73},[49,68561,63154],{"class":59},[49,68563,61583],{"class":73},[49,68565,25],{"class":51831},[49,68567,55770],{"class":55},[49,68569,78],{"class":73},[49,68571,64977],{"class":59},[49,68573,55778],{"class":55},[49,68575,78],{"class":73},[49,68577,8349],{"class":59},[49,68579,64950],{"class":73},[49,68581,52142],{"class":51831},[49,68583,51838],{"class":73},[49,68585,68586,68588,68590,68592,68594,68596,68598,68600,68602,68604,68606,68608,68610,68612,68614,68616],{"class":51,"line":17547},[49,68587,55765],{"class":73},[49,68589,52142],{"class":51831},[49,68591,54017],{"class":55},[49,68593,78],{"class":73},[49,68595,63154],{"class":59},[49,68597,61583],{"class":73},[49,68599,25],{"class":51831},[49,68601,55770],{"class":55},[49,68603,78],{"class":73},[49,68605,65012],{"class":59},[49,68607,55778],{"class":55},[49,68609,78],{"class":73},[49,68611,8349],{"class":59},[49,68613,64950],{"class":73},[49,68615,52142],{"class":51831},[49,68617,51838],{"class":73},[49,68619,68620,68622,68624,68626,68628,68630,68632,68634,68636,68638,68640,68642,68644,68646,68648,68650],{"class":51,"line":17552},[49,68621,55765],{"class":73},[49,68623,52142],{"class":51831},[49,68625,54017],{"class":55},[49,68627,78],{"class":73},[49,68629,63154],{"class":59},[49,68631,61583],{"class":73},[49,68633,25],{"class":51831},[49,68635,55770],{"class":55},[49,68637,78],{"class":73},[49,68639,65047],{"class":59},[49,68641,55778],{"class":55},[49,68643,78],{"class":73},[49,68645,8349],{"class":59},[49,68647,64950],{"class":73},[49,68649,52142],{"class":51831},[49,68651,51838],{"class":73},[49,68653,68654,68656,68658,68660,68662,68664,68666,68668,68670,68672,68674,68676,68678,68680,68682,68684],{"class":51,"line":17566},[49,68655,55765],{"class":73},[49,68657,52142],{"class":51831},[49,68659,54017],{"class":55},[49,68661,78],{"class":73},[49,68663,63154],{"class":59},[49,68665,61583],{"class":73},[49,68667,25],{"class":51831},[49,68669,55770],{"class":55},[49,68671,78],{"class":73},[49,68673,65082],{"class":59},[49,68675,55778],{"class":55},[49,68677,78],{"class":73},[49,68679,8349],{"class":59},[49,68681,64950],{"class":73},[49,68683,52142],{"class":51831},[49,68685,51838],{"class":73},[49,68687,68688,68690,68692],{"class":51,"line":17578},[49,68689,52307],{"class":73},[49,68691,52142],{"class":51831},[49,68693,51838],{"class":73},[49,68695,68696,68698,68700],{"class":51,"line":17583},[49,68697,52948],{"class":73},[49,68699,52142],{"class":51831},[49,68701,51838],{"class":73},[49,68703,68704,68706,68708],{"class":51,"line":17596},[49,68705,52675],{"class":73},[49,68707,52344],{"class":51831},[49,68709,51838],{"class":73},[49,68711,68712],{"class":51,"line":17601},[49,68713,68714],{"class":66},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[49,68716,68717],{"class":51,"line":17606},[49,68718,68719],{"class":66},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[49,68721,68722,68724,68726,68728,68730,68732,68734,68737],{"class":51,"line":17611},[49,68723,11918],{"class":77},[49,68725,61823],{"class":159},[49,68727,14261],{"class":77},[49,68729,54927],{"class":73},[49,68731,54930],{"class":55},[49,68733,841],{"class":73},[49,68735,68736],{"class":59},"'.tab-nav ul'",[49,68738,847],{"class":73},[49,68740,68741],{"class":51,"line":17624},[49,68742,68743],{"class":66},"    \u002F\u002F 2.添加事件\n",[49,68745,68746,68748,68750,68752,68754,68756,68758,68760,68762],{"class":51,"line":17629},[49,68747,67485],{"class":73},[49,68749,58344],{"class":55},[49,68751,841],{"class":73},[49,68753,58349],{"class":59},[49,68755,13132],{"class":73},[49,68757,54980],{"class":77},[49,68759,2357],{"class":73},[49,68761,912],{"class":5913},[49,68763,13139],{"class":73},[49,68765,68766,68768,68770],{"class":51,"line":33164},[49,68767,58775],{"class":73},[49,68769,67541],{"class":55},[49,68771,67544],{"class":73},[49,68773,68774],{"class":51,"line":33170},[49,68775,68776],{"class":66},"      \u002F\u002Fe.targer是我们点击的对象\n",[49,68778,68779,68781,68783,68785,68788],{"class":51,"line":33176},[49,68780,55011],{"class":77},[49,68782,67565],{"class":73},[49,68784,55017],{"class":77},[49,68786,68787],{"class":59}," 'A'",[49,68789,13139],{"class":73},[49,68791,68792,68794,68796,68798,68801,68803,68805,68807,68809],{"class":51,"line":33182},[49,68793,52456],{"class":73},[49,68795,54930],{"class":55},[49,68797,841],{"class":73},[49,68799,68800],{"class":59},"'.active'",[49,68802,57534],{"class":73},[49,68804,57537],{"class":55},[49,68806,841],{"class":73},[49,68808,65245],{"class":59},[49,68810,847],{"class":73},[49,68812,68813,68816,68818,68820,68822],{"class":51,"line":33188},[49,68814,68815],{"class":73},"        e.target.classList.",[49,68817,6031],{"class":55},[49,68819,841],{"class":73},[49,68821,65245],{"class":59},[49,68823,847],{"class":73},[49,68825,68826],{"class":51,"line":33199},[49,68827,399],{"emptyLinePlaceholder":398},[49,68829,68830],{"class":51,"line":33205},[49,68831,68832],{"class":66},"        \u002F\u002F 下面大盒子模块\n",[49,68834,68835],{"class":51,"line":33225},[49,68836,68837],{"class":66},"        \u002F\u002F console.log(e.target.dataset.id)\n",[49,68839,68840,68842,68844,68846,68848],{"class":51,"line":33231},[49,68841,61801],{"class":77},[49,68843,3729],{"class":159},[49,68845,14261],{"class":77},[49,68847,46097],{"class":77},[49,68849,68850],{"class":73},"e.target.dataset.id\n",[49,68852,68853,68855,68857,68859,68861,68863,68865,68867,68869],{"class":51,"line":33242},[49,68854,52456],{"class":73},[49,68856,54930],{"class":55},[49,68858,841],{"class":73},[49,68860,65293],{"class":59},[49,68862,57534],{"class":73},[49,68864,57537],{"class":55},[49,68866,841],{"class":73},[49,68868,65245],{"class":59},[49,68870,847],{"class":73},[49,68872,68873,68875,68877,68879,68881,68883,68885,68887,68889,68891,68893,68895,68897],{"class":51,"line":33248},[49,68874,52456],{"class":73},[49,68876,54930],{"class":55},[49,68878,841],{"class":73},[49,68880,65319],{"class":59},[49,68882,1270],{"class":73},[49,68884,46097],{"class":77},[49,68886,25807],{"class":159},[49,68888,57563],{"class":59},[49,68890,57534],{"class":73},[49,68892,6031],{"class":55},[49,68894,841],{"class":73},[49,68896,65245],{"class":59},[49,68898,847],{"class":73},[49,68900,68901],{"class":51,"line":33254},[49,68902,399],{"emptyLinePlaceholder":398},[49,68904,68905],{"class":51,"line":33260},[49,68906,52929],{"class":73},[49,68908,68909],{"class":51,"line":33266},[49,68910,33992],{"class":73},[49,68912,68913,68915,68917],{"class":51,"line":33272},[49,68914,52948],{"class":73},[49,68916,52344],{"class":51831},[49,68918,51838],{"class":73},[49,68920,68921,68923,68925],{"class":51,"line":33278},[49,68922,52316],{"class":73},[49,68924,52331],{"class":51831},[49,68926,51838],{"class":73},[49,68928,68929],{"class":51,"line":33284},[49,68930,399],{"emptyLinePlaceholder":398},[49,68932,68933,68935,68937],{"class":51,"line":33304},[49,68934,52316],{"class":73},[49,68936,51166],{"class":51831},[49,68938,51838],{"class":73},[18,68940,68942],{"id":68941},"_333-页面加载事件","3.3.3 页面加载事件",[30,68944,68945],{},[33,68946,68947],{},"load",[14,68949,68950],{},[25,68951],{"alt":27,"src":68952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68954,68955],{},"window代表整个窗口，比document还要大",[14,68957,68958],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68960,68961],{},"img.addEventListener('load', function () {",[14,68963,68964],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68966,52995],{},[30,68968,68969],{"start":63},[33,68970,68971],{},"DOMContentLoaded",[14,68973,68974],{},[25,68975],{"alt":27,"src":68976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68978,68979],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[18,68981,68983],{"id":68982},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68985,68986],{},[25,68987],{"alt":27,"src":68988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68990,68991],{},[25,68992],{"alt":27,"src":68993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68995,68996],{},[25,68997],{"alt":27,"src":68998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,69000,69001],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,69003,69004],{},"获得的是数字型数据，不带单位",[14,69006,69007],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,69009,69010],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,69012,69013],{},"它是通过document.documentElement来获取",[14,69015,69016],{},[25,69017],{"alt":27,"src":69018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,69020,69021],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[18,69023,69025],{"id":69024},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,69027,69028],{},[25,69029],{"alt":27,"src":69030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,69032,69033],{},[25,69034],{"alt":27,"src":69035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[18,69037,69039],{"id":69038},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,69041,69042],{},[25,69043],{"alt":27,"src":69044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,69046,69047],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,69049,69050],{},[25,69051],{"alt":27,"src":69052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,69054,69055],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,69057,69058],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,69060,69061],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,69063,69064],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,69066,69067],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,69069,69070],{},[25,69071],{"alt":27,"src":69072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,69074,69075],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,69077,69078],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,69080,69081],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,69083,69084],{},"e.pageX-box.getBoundingClientRect()",[18,69086,69088],{"id":69087},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,69090,69091],{},[25,69092],{"alt":27,"src":69093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,69095,69096],{},"这个是相对于视口来说的，它是个方法，不是属性值",[18,69098,69100],{"id":69099},"_338-总结","3.3.8 总结",[14,69102,69103],{},[25,69104],{"alt":27,"src":69105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,69107,69108],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,69110,69111],{},"修改盒子的宽高只能通过width和height来实现",[18,69113,69115],{"id":69114},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[40,69117,69119],{"className":51164,"code":69118,"language":51166,"meta":27,"style":27},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[46,69120,69121,69126,69131,69136,69141],{"__ignoreMap":27},[49,69122,69123],{"class":51,"line":52},[49,69124,69125],{"class":73},"\u002F* 页面滑动 *\u002F\n",[49,69127,69128],{"class":51,"line":63},[49,69129,69130],{"class":73},"html {\n",[49,69132,69133],{"class":51,"line":70},[49,69134,69135],{"class":73},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[49,69137,69138],{"class":51,"line":219},[49,69139,69140],{"class":73},"  scroll-behavior: smooth;\n",[49,69142,69143],{"class":51,"line":233},[49,69144,2264],{"class":73},[14,69146,69147],{},"默认是auto",[18,69149,69151],{"id":69150},"_3310-日期对象","3.3.10 日期对象",[130,69153,69155],{"id":69154},"_33101-实例化","3.3.10.1 实例化",[14,69157,69158],{},[25,69159],{"alt":27,"src":69160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[130,69162,69164],{"id":69163},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,69166,69167],{},[25,69168],{"alt":27,"src":69169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,69171,69172],{},"月份+1",[14,69174,69175],{},"老外认为第一天为0，星期天",[14,69177,69178],{},"方法使用的时候必须要跟括号",[14,69180,69181],{},"快速获得日期",[14,69183,69184],{},"\u002F\u002F 得到年月日",[14,69186,69187],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,69189,69190],{},"\u002F\u002F 得到当地日期",[14,69192,69193],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,69195,69196],{},"\u002F\u002F 得到当地时间",[14,69198,69199],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,69201,69202],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,69204,69205],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52344,69207,69208],{},"\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",[14,69210,69211],{},"学会去封装函数！",[130,69213,69215],{"id":69214},"_33103-时间戳","3.3.10.3 时间戳",[14,69217,69218],{},[25,69219],{"alt":27,"src":69220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,69222,69223],{},[25,69224],{"alt":27,"src":69225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,69227,69228],{},"三种方法记住一个就可以",[18,69230,69232],{"id":69231},"_3311-节点操作","3.3.11 节点操作",[130,69234,69236],{"id":69235},"_33111-dom节点","3.3.11.1 DOM节点",[14,69238,69239],{},[25,69240],{"alt":27,"src":69241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,69243,69244],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[130,69246,69248],{"id":69247},"_33112-查找节点","3.3.11.2 查找节点",[14,69250,69251],{},"前边的document.querySelector()是获取的元素",[14,69253,69254],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,69256,69257],{},[25,69258],{"alt":27,"src":69259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[30,69261,69262],{},[33,69263,69264],{},"父节点",[14,69266,69267],{},[25,69268],{"alt":27,"src":69269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[30,69271,69272],{"start":63},[33,69273,69274],{},"子节点",[14,69276,69277],{},[25,69278],{"alt":27,"src":69279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,69281,69282],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,69284,69285],{},"children获得的是伪数组，是亲儿子",[30,69287,69288],{"start":70},[33,69289,69290],{},"兄弟节点",[14,69292,69293],{},[25,69294],{"alt":27,"src":69295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[130,69297,69299],{"id":69298},"_33113-增加节点","3.3.11.3 增加节点",[14,69301,69302],{},[25,69303],{"alt":27,"src":69304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,69306,69307],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,69309,69310],{},[25,69311],{"alt":27,"src":69312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,69314,69315],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,69317,69318],{},"下面是写法的部分展示，就按照下边的格式来写",[14,69320,69321],{},"例：",[52344,69323,69324],{},"\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",[14,69326,69327],{},[25,69328],{"alt":27,"src":69329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,69331,69332],{},"false只克隆标签，里边的内容不会克隆过来",[40,69334,69336],{"className":51164,"code":69335,"language":51166,"meta":27,"style":27},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[46,69337,69338],{"__ignoreMap":27},[49,69339,69340],{"class":51,"line":52},[49,69341,69335],{"class":73},[130,69343,69345],{"id":69344},"_33114-删除节点","3.3.11.4 删除节点",[14,69347,69348],{},[25,69349],{"alt":27,"src":69350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,69352,69353],{},"父亲删儿子",[14,69355,69356],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[18,69358,69360],{"id":69359},"_3312-m端事件","3.3.12 M端事件",[14,69362,69363],{},"M端就是移动端",[14,69365,69366],{},[25,69367],{"alt":27,"src":69368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[18,69370,69372],{"id":69371},"_3313-插件","3.3.13 插件",[14,69374,69375],{},"要熟悉官网！！！",[14,69377,69378],{},[124,69379,69380],{"href":69380,"rel":69381},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[128],[14,69383,69384],{},[124,69385,69386],{"href":69386,"rel":69387},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[128],[18,69389,69391],{"id":69390},"_3314-学生信息表","3.3.14 学生信息表",[30,69393,69394,69397,69400,69403,69406,69409,69412,69415],{},[33,69395,69396],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[33,69398,69399],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[33,69401,69402],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[33,69404,69405],{},"用好表单元素自带的属性，value,name等",[33,69407,69408],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[33,69410,69411],{},"不要忘记事件对象",[33,69413,69414],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[33,69416,69417],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,69419,69420],{},"结构：",[40,69422,69424],{"className":51164,"code":69423,"language":51166,"meta":27,"style":27},"\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",[46,69425,69426,69436,69450,69454,69462,69476,69496,69517,69530,69554,69562,69566,69574,69587,69608,69636,69664,69669,69691,69711,69730,69738,69766,69788,69808,69828,69848,69868,69888,69896,69916,69924,69928,69941,69949,69957,69965,69978,69991,70004,70017,70030,70043,70056,70064,70072,70080,70085,70090,70095,70100,70105,70110,70115,70120,70125,70130,70135,70140,70145,70153,70161,70169,70173,70193,70212,70232,70252,70272,70292,70296,70301,70321,70326,70336,70341,70346,70366,70388,70393,70403,70407,70411,70416,70421,70450,70464,70479,70483,70487,70491,70496,70507,70520,70525,70530,70535,70540,70545,70549,70554,70559,70568,70573,70578,70590,70595,70602,70606,70611,70621,70626,70636,70641,70669,70690,70700,70720,70738,70755,70772,70789,70806,70810,70820,70825,70830,70835,70846,70850,70854,70858,70863,70868,70889,70901,70906,70911,70916,70930,70935,70942,70946,70950,70958,70962,70970,70974],{"__ignoreMap":27},[49,69427,69428,69430,69432,69434],{"class":51,"line":52},[49,69429,51828],{"class":73},[49,69431,51832],{"class":51831},[49,69433,51835],{"class":55},[49,69435,51838],{"class":73},[49,69437,69438,69440,69442,69444,69446,69448],{"class":51,"line":63},[49,69439,1739],{"class":73},[49,69441,51166],{"class":51831},[49,69443,51847],{"class":55},[49,69445,78],{"class":73},[49,69447,51852],{"class":59},[49,69449,51838],{"class":73},[49,69451,69452],{"class":51,"line":70},[49,69453,399],{"emptyLinePlaceholder":398},[49,69455,69456,69458,69460],{"class":51,"line":219},[49,69457,1739],{"class":73},[49,69459,51865],{"class":51831},[49,69461,51838],{"class":73},[49,69463,69464,69466,69468,69470,69472,69474],{"class":51,"line":233},[49,69465,52675],{"class":73},[49,69467,51875],{"class":51831},[49,69469,51878],{"class":55},[49,69471,78],{"class":73},[49,69473,51883],{"class":59},[49,69475,59658],{"class":73},[49,69477,69478,69480,69482,69484,69486,69488,69490,69492,69494],{"class":51,"line":241},[49,69479,52675],{"class":73},[49,69481,51875],{"class":51831},[49,69483,15617],{"class":55},[49,69485,78],{"class":73},[49,69487,51922],{"class":59},[49,69489,51902],{"class":55},[49,69491,78],{"class":73},[49,69493,51929],{"class":59},[49,69495,59658],{"class":73},[49,69497,69498,69500,69502,69504,69506,69508,69510,69512,69515],{"class":51,"line":1920},[49,69499,52675],{"class":73},[49,69501,51875],{"class":51831},[49,69503,51894],{"class":55},[49,69505,78],{"class":73},[49,69507,51899],{"class":59},[49,69509,51902],{"class":55},[49,69511,78],{"class":73},[49,69513,69514],{"class":59},"\"ie=edge\"",[49,69516,59658],{"class":73},[49,69518,69519,69521,69523,69526,69528],{"class":51,"line":2011},[49,69520,52675],{"class":73},[49,69522,51938],{"class":51831},[49,69524,69525],{"class":73},">学生信息管理\u003C\u002F",[49,69527,51938],{"class":51831},[49,69529,51838],{"class":73},[49,69531,69532,69534,69537,69540,69542,69545,69547,69549,69552],{"class":51,"line":2017},[49,69533,52675],{"class":73},[49,69535,69536],{"class":51831},"link",[49,69538,69539],{"class":55}," rel",[49,69541,78],{"class":73},[49,69543,69544],{"class":59},"\"stylesheet\"",[49,69546,61588],{"class":55},[49,69548,78],{"class":73},[49,69550,69551],{"class":59},"\"css\u002Findex.css\"",[49,69553,59658],{"class":73},[49,69555,69556,69558,69560],{"class":51,"line":2029},[49,69557,52316],{"class":73},[49,69559,51865],{"class":51831},[49,69561,51838],{"class":73},[49,69563,69564],{"class":51,"line":2311},[49,69565,399],{"emptyLinePlaceholder":398},[49,69567,69568,69570,69572],{"class":51,"line":2316},[49,69569,1739],{"class":73},[49,69571,52331],{"class":51831},[49,69573,51838],{"class":73},[49,69575,69576,69578,69580,69583,69585],{"class":51,"line":2322},[49,69577,52675],{"class":73},[49,69579,10],{"class":51831},[49,69581,69582],{"class":73},">新增学员\u003C\u002F",[49,69584,10],{"class":51831},[49,69586,51838],{"class":73},[49,69588,69589,69591,69593,69595,69597,69599,69602,69604,69606],{"class":51,"line":2327},[49,69590,52675],{"class":73},[49,69592,67156],{"class":51831},[49,69594,54017],{"class":55},[49,69596,78],{"class":73},[49,69598,63195],{"class":59},[49,69600,69601],{"class":55}," autocomplete",[49,69603,78],{"class":73},[49,69605,32307],{"class":59},[49,69607,51838],{"class":73},[49,69609,69610,69613,69615,69617,69619,69621,69623,69625,69628,69630,69632,69634],{"class":51,"line":2341},[49,69611,69612],{"class":73},"    姓名：\u003C",[49,69614,54352],{"class":51831},[49,69616,54355],{"class":55},[49,69618,78],{"class":73},[49,69620,63230],{"class":59},[49,69622,54017],{"class":55},[49,69624,78],{"class":73},[49,69626,69627],{"class":59},"\"uname\"",[49,69629,15617],{"class":55},[49,69631,78],{"class":73},[49,69633,69627],{"class":59},[49,69635,59658],{"class":73},[49,69637,69638,69641,69643,69645,69647,69649,69651,69653,69656,69658,69660,69662],{"class":51,"line":2346},[49,69639,69640],{"class":73},"    年龄：\u003C",[49,69642,54352],{"class":51831},[49,69644,54355],{"class":55},[49,69646,78],{"class":73},[49,69648,63230],{"class":59},[49,69650,54017],{"class":55},[49,69652,78],{"class":73},[49,69654,69655],{"class":59},"\"age\"",[49,69657,15617],{"class":55},[49,69659,78],{"class":73},[49,69661,69655],{"class":59},[49,69663,59658],{"class":73},[49,69665,69666],{"class":51,"line":2352},[49,69667,69668],{"class":73},"    性别:\n",[49,69670,69671,69673,69676,69678,69680,69683,69685,69687,69689],{"class":51,"line":2373},[49,69672,51872],{"class":73},[49,69674,69675],{"class":51831},"select",[49,69677,15617],{"class":55},[49,69679,78],{"class":73},[49,69681,69682],{"class":59},"\"gender\"",[49,69684,54017],{"class":55},[49,69686,78],{"class":73},[49,69688,69682],{"class":59},[49,69690,51838],{"class":73},[49,69692,69693,69695,69698,69700,69702,69704,69707,69709],{"class":51,"line":2378},[49,69694,55765],{"class":73},[49,69696,69697],{"class":51831},"option",[49,69699,67182],{"class":55},[49,69701,78],{"class":73},[49,69703,10658],{"class":59},[49,69705,69706],{"class":73},">男\u003C\u002F",[49,69708,69697],{"class":51831},[49,69710,51838],{"class":73},[49,69712,69713,69715,69717,69719,69721,69723,69726,69728],{"class":51,"line":2392},[49,69714,55765],{"class":73},[49,69716,69697],{"class":51831},[49,69718,67182],{"class":55},[49,69720,78],{"class":73},[49,69722,10727],{"class":59},[49,69724,69725],{"class":73},">女\u003C\u002F",[49,69727,69697],{"class":51831},[49,69729,51838],{"class":73},[49,69731,69732,69734,69736],{"class":51,"line":2397},[49,69733,52307],{"class":73},[49,69735,69675],{"class":51831},[49,69737,51838],{"class":73},[49,69739,69740,69743,69745,69747,69749,69751,69753,69755,69758,69760,69762,69764],{"class":51,"line":2426},[49,69741,69742],{"class":73},"    薪资：\u003C",[49,69744,54352],{"class":51831},[49,69746,54355],{"class":55},[49,69748,78],{"class":73},[49,69750,63230],{"class":59},[49,69752,54017],{"class":55},[49,69754,78],{"class":73},[49,69756,69757],{"class":59},"\"salary\"",[49,69759,15617],{"class":55},[49,69761,78],{"class":73},[49,69763,69757],{"class":59},[49,69765,59658],{"class":73},[49,69767,69768,69771,69773,69775,69777,69780,69782,69784,69786],{"class":51,"line":2431},[49,69769,69770],{"class":73},"    就业城市：\u003C",[49,69772,69675],{"class":51831},[49,69774,15617],{"class":55},[49,69776,78],{"class":73},[49,69778,69779],{"class":59},"\"city\"",[49,69781,54017],{"class":55},[49,69783,78],{"class":73},[49,69785,69779],{"class":59},[49,69787,51838],{"class":73},[49,69789,69790,69792,69794,69796,69798,69801,69804,69806],{"class":51,"line":2448},[49,69791,55765],{"class":73},[49,69793,69697],{"class":51831},[49,69795,67182],{"class":55},[49,69797,78],{"class":73},[49,69799,69800],{"class":59},"\"北京\"",[49,69802,69803],{"class":73},">北京\u003C\u002F",[49,69805,69697],{"class":51831},[49,69807,51838],{"class":73},[49,69809,69810,69812,69814,69816,69818,69821,69824,69826],{"class":51,"line":2453},[49,69811,55765],{"class":73},[49,69813,69697],{"class":51831},[49,69815,67182],{"class":55},[49,69817,78],{"class":73},[49,69819,69820],{"class":59},"\"上海\"",[49,69822,69823],{"class":73},">上海\u003C\u002F",[49,69825,69697],{"class":51831},[49,69827,51838],{"class":73},[49,69829,69830,69832,69834,69836,69838,69841,69844,69846],{"class":51,"line":2458},[49,69831,55765],{"class":73},[49,69833,69697],{"class":51831},[49,69835,67182],{"class":55},[49,69837,78],{"class":73},[49,69839,69840],{"class":59},"\"广州\"",[49,69842,69843],{"class":73},">广州\u003C\u002F",[49,69845,69697],{"class":51831},[49,69847,51838],{"class":73},[49,69849,69850,69852,69854,69856,69858,69861,69864,69866],{"class":51,"line":2463},[49,69851,55765],{"class":73},[49,69853,69697],{"class":51831},[49,69855,67182],{"class":55},[49,69857,78],{"class":73},[49,69859,69860],{"class":59},"\"深圳\"",[49,69862,69863],{"class":73},">深圳\u003C\u002F",[49,69865,69697],{"class":51831},[49,69867,51838],{"class":73},[49,69869,69870,69872,69874,69876,69878,69881,69884,69886],{"class":51,"line":2477},[49,69871,55765],{"class":73},[49,69873,69697],{"class":51831},[49,69875,67182],{"class":55},[49,69877,78],{"class":73},[49,69879,69880],{"class":59},"\"曹县\"",[49,69882,69883],{"class":73},">曹县\u003C\u002F",[49,69885,69697],{"class":51831},[49,69887,51838],{"class":73},[49,69889,69890,69892,69894],{"class":51,"line":2482},[49,69891,52307],{"class":73},[49,69893,69675],{"class":51831},[49,69895,51838],{"class":73},[49,69897,69898,69900,69902,69904,69906,69909,69912,69914],{"class":51,"line":3274},[49,69899,51872],{"class":73},[49,69901,54418],{"class":51831},[49,69903,54017],{"class":55},[49,69905,78],{"class":73},[49,69907,69908],{"class":59},"\"add\"",[49,69910,69911],{"class":73},">录入\u003C\u002F",[49,69913,54418],{"class":51831},[49,69915,51838],{"class":73},[49,69917,69918,69920,69922],{"class":51,"line":3288},[49,69919,52948],{"class":73},[49,69921,67156],{"class":51831},[49,69923,51838],{"class":73},[49,69925,69926],{"class":51,"line":3296},[49,69927,399],{"emptyLinePlaceholder":398},[49,69929,69930,69932,69934,69937,69939],{"class":51,"line":3301},[49,69931,52675],{"class":73},[49,69933,10],{"class":51831},[49,69935,69936],{"class":73},">就业榜\u003C\u002F",[49,69938,10],{"class":51831},[49,69940,51838],{"class":73},[49,69942,69943,69945,69947],{"class":51,"line":3307},[49,69944,52675],{"class":73},[49,69946,610],{"class":51831},[49,69948,51838],{"class":73},[49,69950,69951,69953,69955],{"class":51,"line":3313},[49,69952,51872],{"class":73},[49,69954,613],{"class":51831},[49,69956,51838],{"class":73},[49,69958,69959,69961,69963],{"class":51,"line":3318},[49,69960,55765],{"class":73},[49,69962,616],{"class":51831},[49,69964,51838],{"class":73},[49,69966,69967,69969,69971,69974,69976],{"class":51,"line":8645},[49,69968,55833],{"class":73},[49,69970,619],{"class":51831},[49,69972,69973],{"class":73},">序号\u003C\u002F",[49,69975,619],{"class":51831},[49,69977,51838],{"class":73},[49,69979,69980,69982,69984,69987,69989],{"class":51,"line":8669},[49,69981,55833],{"class":73},[49,69983,619],{"class":51831},[49,69985,69986],{"class":73},">姓名\u003C\u002F",[49,69988,619],{"class":51831},[49,69990,51838],{"class":73},[49,69992,69993,69995,69997,70000,70002],{"class":51,"line":8674},[49,69994,55833],{"class":73},[49,69996,619],{"class":51831},[49,69998,69999],{"class":73},">年龄\u003C\u002F",[49,70001,619],{"class":51831},[49,70003,51838],{"class":73},[49,70005,70006,70008,70010,70013,70015],{"class":51,"line":8680},[49,70007,55833],{"class":73},[49,70009,619],{"class":51831},[49,70011,70012],{"class":73},">性别\u003C\u002F",[49,70014,619],{"class":51831},[49,70016,51838],{"class":73},[49,70018,70019,70021,70023,70026,70028],{"class":51,"line":8707},[49,70020,55833],{"class":73},[49,70022,619],{"class":51831},[49,70024,70025],{"class":73},">薪资\u003C\u002F",[49,70027,619],{"class":51831},[49,70029,51838],{"class":73},[49,70031,70032,70034,70036,70039,70041],{"class":51,"line":8712},[49,70033,55833],{"class":73},[49,70035,619],{"class":51831},[49,70037,70038],{"class":73},">就业城市\u003C\u002F",[49,70040,619],{"class":51831},[49,70042,51838],{"class":73},[49,70044,70045,70047,70049,70052,70054],{"class":51,"line":8718},[49,70046,55833],{"class":73},[49,70048,619],{"class":51831},[49,70050,70051],{"class":73},">操作\u003C\u002F",[49,70053,619],{"class":51831},[49,70055,51838],{"class":73},[49,70057,70058,70060,70062],{"class":51,"line":8730},[49,70059,55938],{"class":73},[49,70061,616],{"class":51831},[49,70063,51838],{"class":73},[49,70065,70066,70068,70070],{"class":51,"line":8742},[49,70067,52307],{"class":73},[49,70069,613],{"class":51831},[49,70071,51838],{"class":73},[49,70073,70074,70076,70078],{"class":51,"line":8754},[49,70075,51872],{"class":73},[49,70077,633],{"class":51831},[49,70079,51838],{"class":73},[49,70081,70082],{"class":51,"line":10413},[49,70083,70084],{"class":66},"      \u003C!-- \n",[49,70086,70087],{"class":51,"line":10438},[49,70088,70089],{"class":66},"        \u003Ctr>\n",[49,70091,70092],{"class":51,"line":10461},[49,70093,70094],{"class":66},"          \u003Ctd>1001\u003C\u002Ftd>\n",[49,70096,70097],{"class":51,"line":10485},[49,70098,70099],{"class":66},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[49,70101,70102],{"class":51,"line":10490},[49,70103,70104],{"class":66},"          \u003Ctd>19\u003C\u002Ftd>\n",[49,70106,70107],{"class":51,"line":10495},[49,70108,70109],{"class":66},"          \u003Ctd>男\u003C\u002Ftd>\n",[49,70111,70112],{"class":51,"line":10500},[49,70113,70114],{"class":66},"          \u003Ctd>15000\u003C\u002Ftd>\n",[49,70116,70117],{"class":51,"line":10509},[49,70118,70119],{"class":66},"          \u003Ctd>上海\u003C\u002Ftd>\n",[49,70121,70122],{"class":51,"line":10514},[49,70123,70124],{"class":66},"          \u003Ctd>\n",[49,70126,70127],{"class":51,"line":10520},[49,70128,70129],{"class":66},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[49,70131,70132],{"class":51,"line":10541},[49,70133,70134],{"class":66},"          \u003C\u002Ftd>\n",[49,70136,70137],{"class":51,"line":10547},[49,70138,70139],{"class":66},"        \u003C\u002Ftr> \n",[49,70141,70142],{"class":51,"line":10561},[49,70143,70144],{"class":66},"        -->\n",[49,70146,70147,70149,70151],{"class":51,"line":10567},[49,70148,52307],{"class":73},[49,70150,633],{"class":51831},[49,70152,51838],{"class":73},[49,70154,70155,70157,70159],{"class":51,"line":10594},[49,70156,52948],{"class":73},[49,70158,610],{"class":51831},[49,70160,51838],{"class":73},[49,70162,70163,70165,70167],{"class":51,"line":10603},[49,70164,52675],{"class":73},[49,70166,52344],{"class":51831},[49,70168,51838],{"class":73},[49,70170,70171],{"class":51,"line":10609},[49,70172,60489],{"class":66},[49,70174,70175,70177,70180,70182,70184,70186,70188,70191],{"class":51,"line":10617},[49,70176,11918],{"class":77},[49,70178,70179],{"class":159}," uname",[49,70181,14261],{"class":77},[49,70183,54927],{"class":73},[49,70185,54930],{"class":55},[49,70187,841],{"class":73},[49,70189,70190],{"class":59},"'.uname'",[49,70192,847],{"class":73},[49,70194,70195,70197,70199,70201,70203,70205,70207,70210],{"class":51,"line":10622},[49,70196,11918],{"class":77},[49,70198,16386],{"class":159},[49,70200,14261],{"class":77},[49,70202,54927],{"class":73},[49,70204,54930],{"class":55},[49,70206,841],{"class":73},[49,70208,70209],{"class":59},"'.age'",[49,70211,847],{"class":73},[49,70213,70214,70216,70219,70221,70223,70225,70227,70230],{"class":51,"line":17301},[49,70215,11918],{"class":77},[49,70217,70218],{"class":159}," gender",[49,70220,14261],{"class":77},[49,70222,54927],{"class":73},[49,70224,54930],{"class":55},[49,70226,841],{"class":73},[49,70228,70229],{"class":59},"'.gender'",[49,70231,847],{"class":73},[49,70233,70234,70236,70239,70241,70243,70245,70247,70250],{"class":51,"line":17307},[49,70235,11918],{"class":77},[49,70237,70238],{"class":159}," salary",[49,70240,14261],{"class":77},[49,70242,54927],{"class":73},[49,70244,54930],{"class":55},[49,70246,841],{"class":73},[49,70248,70249],{"class":59},"'.salary'",[49,70251,847],{"class":73},[49,70253,70254,70256,70259,70261,70263,70265,70267,70270],{"class":51,"line":17330},[49,70255,11918],{"class":77},[49,70257,70258],{"class":159}," city",[49,70260,14261],{"class":77},[49,70262,54927],{"class":73},[49,70264,54930],{"class":55},[49,70266,841],{"class":73},[49,70268,70269],{"class":59},"'.city'",[49,70271,847],{"class":73},[49,70273,70274,70276,70279,70281,70283,70285,70287,70290],{"class":51,"line":17336},[49,70275,11918],{"class":77},[49,70277,70278],{"class":159}," tbody",[49,70280,14261],{"class":77},[49,70282,54927],{"class":73},[49,70284,54930],{"class":55},[49,70286,841],{"class":73},[49,70288,70289],{"class":59},"'tbody'",[49,70291,847],{"class":73},[49,70293,70294],{"class":51,"line":17359},[49,70295,399],{"emptyLinePlaceholder":398},[49,70297,70298],{"class":51,"line":17373},[49,70299,70300],{"class":66},"    \u002F\u002F 获取所有带有name属性的元素\n",[49,70302,70303,70305,70308,70310,70312,70314,70316,70319],{"class":51,"line":17393},[49,70304,11918],{"class":77},[49,70306,70307],{"class":159}," items",[49,70309,14261],{"class":77},[49,70311,54927],{"class":73},[49,70313,56212],{"class":55},[49,70315,841],{"class":73},[49,70317,70318],{"class":59},"'[name]'",[49,70320,847],{"class":73},[49,70322,70323],{"class":51,"line":17399},[49,70324,70325],{"class":66},"    \u002F\u002F 声明一个空的数组\n",[49,70327,70328,70330,70332,70334],{"class":51,"line":17410},[49,70329,11918],{"class":77},[49,70331,58226],{"class":159},[49,70333,14261],{"class":77},[49,70335,52369],{"class":73},[49,70337,70338],{"class":51,"line":17433},[49,70339,70340],{"class":66},"    \u002F\u002F 1.录入模块\n",[49,70342,70343],{"class":51,"line":17455},[49,70344,70345],{"class":66},"    \u002F\u002F 1.1这是一个表单提交事件\n",[49,70347,70348,70350,70353,70355,70357,70359,70361,70364],{"class":51,"line":17460},[49,70349,11918],{"class":77},[49,70351,70352],{"class":159}," info",[49,70354,14261],{"class":77},[49,70356,54927],{"class":73},[49,70358,54930],{"class":55},[49,70360,841],{"class":73},[49,70362,70363],{"class":59},"'.info'",[49,70365,847],{"class":73},[49,70367,70368,70371,70373,70375,70378,70380,70382,70384,70386],{"class":51,"line":17466},[49,70369,70370],{"class":73},"    info.",[49,70372,58344],{"class":55},[49,70374,841],{"class":73},[49,70376,70377],{"class":59},"'submit'",[49,70379,13132],{"class":73},[49,70381,54980],{"class":77},[49,70383,2357],{"class":73},[49,70385,912],{"class":5913},[49,70387,13139],{"class":73},[49,70389,70390],{"class":51,"line":17480},[49,70391,70392],{"class":66},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[49,70394,70395,70398,70401],{"class":51,"line":17493},[49,70396,70397],{"class":73},"      e.",[49,70399,70400],{"class":55},"preventDefault",[49,70402,2674],{"class":73},[49,70404,70405],{"class":51,"line":17498},[49,70406,60543],{"class":66},[49,70408,70409],{"class":51,"line":17512},[49,70410,399],{"emptyLinePlaceholder":398},[49,70412,70413],{"class":51,"line":17517},[49,70414,70415],{"class":66},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[49,70417,70418],{"class":51,"line":17523},[49,70419,70420],{"class":66},"      \u002F\u002F 先遍历循环\n",[49,70422,70423,70425,70427,70429,70431,70433,70435,70437,70439,70442,70444,70446,70448],{"class":51,"line":17528},[49,70424,52815],{"class":77},[49,70426,2357],{"class":73},[49,70428,52378],{"class":77},[49,70430,10135],{"class":73},[49,70432,78],{"class":77},[49,70434,4790],{"class":159},[49,70436,10142],{"class":73},[49,70438,1739],{"class":77},[49,70440,70441],{"class":73}," items.",[49,70443,52499],{"class":159},[49,70445,3911],{"class":73},[49,70447,2990],{"class":77},[49,70449,13139],{"class":73},[49,70451,70452,70454,70457,70459,70462],{"class":51,"line":17542},[49,70453,3194],{"class":77},[49,70455,70456],{"class":73}," (items[i].value ",[49,70458,55017],{"class":77},[49,70460,70461],{"class":59}," ''",[49,70463,13139],{"class":73},[49,70465,70466,70469,70472,70474,70477],{"class":51,"line":17547},[49,70467,70468],{"class":77},"          return",[49,70470,70471],{"class":55}," alert",[49,70473,841],{"class":73},[49,70475,70476],{"class":59},"'输入内容不能为空'",[49,70478,847],{"class":73},[49,70480,70481],{"class":51,"line":17552},[49,70482,3226],{"class":73},[49,70484,70485],{"class":51,"line":17566},[49,70486,52929],{"class":73},[49,70488,70489],{"class":51,"line":17578},[49,70490,399],{"emptyLinePlaceholder":398},[49,70492,70493],{"class":51,"line":17583},[49,70494,70495],{"class":66},"      \u002F\u002F 创建新的对象\n",[49,70497,70498,70500,70503,70505],{"class":51,"line":17596},[49,70499,58759],{"class":77},[49,70501,70502],{"class":159}," obj",[49,70504,14261],{"class":77},[49,70506,16269],{"class":73},[49,70508,70509,70512,70514,70516,70518],{"class":51,"line":17601},[49,70510,70511],{"class":73},"        stuID: arr.",[49,70513,52499],{"class":159},[49,70515,46097],{"class":77},[49,70517,25807],{"class":159},[49,70519,31997],{"class":73},[49,70521,70522],{"class":51,"line":17606},[49,70523,70524],{"class":73},"        uname: uname.value,\n",[49,70526,70527],{"class":51,"line":17611},[49,70528,70529],{"class":73},"        age: age.value,\n",[49,70531,70532],{"class":51,"line":17624},[49,70533,70534],{"class":73},"        gender: gender.value,\n",[49,70536,70537],{"class":51,"line":17629},[49,70538,70539],{"class":73},"        salary: salary.value,\n",[49,70541,70542],{"class":51,"line":33164},[49,70543,70544],{"class":73},"        city: city.value\n",[49,70546,70547],{"class":51,"line":33170},[49,70548,52929],{"class":73},[49,70550,70551],{"class":51,"line":33176},[49,70552,70553],{"class":66},"      \u002F\u002F console.log(obj);\n",[49,70555,70556],{"class":51,"line":33182},[49,70557,70558],{"class":66},"      \u002F\u002F 追加到数组里面\n",[49,70560,70561,70563,70565],{"class":51,"line":33188},[49,70562,58538],{"class":73},[49,70564,52415],{"class":55},[49,70566,70567],{"class":73},"(obj)\n",[49,70569,70570],{"class":51,"line":33199},[49,70571,70572],{"class":66},"      \u002F\u002F console.log(arr);\n",[49,70574,70575],{"class":51,"line":33205},[49,70576,70577],{"class":66},"      \u002F\u002F 清空表单  reset重置表单\n",[49,70579,70580,70583,70585,70588],{"class":51,"line":33225},[49,70581,70582],{"class":159},"      this",[49,70584,1387],{"class":73},[49,70586,70587],{"class":55},"reset",[49,70589,2674],{"class":73},[49,70591,70592],{"class":51,"line":33231},[49,70593,70594],{"class":66},"      \u002F\u002F 调用渲染函数\n",[49,70596,70597,70600],{"class":51,"line":33242},[49,70598,70599],{"class":55},"      render",[49,70601,2674],{"class":73},[49,70603,70604],{"class":51,"line":33248},[49,70605,33992],{"class":73},[49,70607,70608],{"class":51,"line":33254},[49,70609,70610],{"class":66},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[49,70612,70613,70616,70619],{"class":51,"line":33260},[49,70614,70615],{"class":77},"    function",[49,70617,70618],{"class":55}," render",[49,70620,11550],{"class":73},[49,70622,70623],{"class":51,"line":33266},[49,70624,70625],{"class":66},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[49,70627,70628,70631,70633],{"class":51,"line":33272},[49,70629,70630],{"class":73},"      tbody.innerHTML ",[49,70632,78],{"class":77},[49,70634,70635],{"class":59}," ''\n",[49,70637,70638],{"class":51,"line":33278},[49,70639,70640],{"class":66},"      \u002F\u002F 遍历数组\n",[49,70642,70643,70645,70647,70649,70651,70653,70655,70657,70659,70661,70663,70665,70667],{"class":51,"line":33284},[49,70644,52815],{"class":77},[49,70646,2357],{"class":73},[49,70648,52378],{"class":77},[49,70650,10135],{"class":73},[49,70652,78],{"class":77},[49,70654,4790],{"class":159},[49,70656,10142],{"class":73},[49,70658,1739],{"class":77},[49,70660,52496],{"class":73},[49,70662,52499],{"class":159},[49,70664,3911],{"class":73},[49,70666,2990],{"class":77},[49,70668,13139],{"class":73},[49,70670,70671,70673,70676,70678,70680,70683,70685,70688],{"class":51,"line":33304},[49,70672,61801],{"class":77},[49,70674,70675],{"class":159}," tr",[49,70677,14261],{"class":77},[49,70679,54927],{"class":73},[49,70681,70682],{"class":55},"createElement",[49,70684,841],{"class":73},[49,70686,70687],{"class":59},"'tr'",[49,70689,847],{"class":73},[49,70691,70692,70695,70697],{"class":51,"line":33310},[49,70693,70694],{"class":73},"        tr.innerHTML ",[49,70696,78],{"class":77},[49,70698,70699],{"class":59}," `\n",[49,70701,70702,70705,70707,70709,70711,70714,70717],{"class":51,"line":33326},[49,70703,70704],{"class":59},"        \u003Ctd>${",[49,70706,4577],{"class":73},[49,70708,1719],{"class":59},[49,70710,1270],{"class":73},[49,70712,70713],{"class":59},"].",[49,70715,70716],{"class":73},"stuID",[49,70718,70719],{"class":59},"}\u003C\u002Ftd>\n",[49,70721,70722,70725,70727,70729,70731,70733,70736],{"class":51,"line":33332},[49,70723,70724],{"class":59},"          \u003Ctd>${",[49,70726,4577],{"class":73},[49,70728,1719],{"class":59},[49,70730,1270],{"class":73},[49,70732,70713],{"class":59},[49,70734,70735],{"class":73},"uname",[49,70737,70719],{"class":59},[49,70739,70740,70742,70744,70746,70748,70750,70753],{"class":51,"line":33346},[49,70741,70724],{"class":59},[49,70743,4577],{"class":73},[49,70745,1719],{"class":59},[49,70747,1270],{"class":73},[49,70749,70713],{"class":59},[49,70751,70752],{"class":73},"age",[49,70754,70719],{"class":59},[49,70756,70757,70759,70761,70763,70765,70767,70770],{"class":51,"line":33352},[49,70758,70724],{"class":59},[49,70760,4577],{"class":73},[49,70762,1719],{"class":59},[49,70764,1270],{"class":73},[49,70766,70713],{"class":59},[49,70768,70769],{"class":73},"gender",[49,70771,70719],{"class":59},[49,70773,70774,70776,70778,70780,70782,70784,70787],{"class":51,"line":33367},[49,70775,70724],{"class":59},[49,70777,4577],{"class":73},[49,70779,1719],{"class":59},[49,70781,1270],{"class":73},[49,70783,70713],{"class":59},[49,70785,70786],{"class":73},"salary",[49,70788,70719],{"class":59},[49,70790,70791,70793,70795,70797,70799,70801,70804],{"class":51,"line":33373},[49,70792,70724],{"class":59},[49,70794,4577],{"class":73},[49,70796,1719],{"class":59},[49,70798,1270],{"class":73},[49,70800,70713],{"class":59},[49,70802,70803],{"class":73},"city",[49,70805,70719],{"class":59},[49,70807,70808],{"class":51,"line":33382},[49,70809,70124],{"class":59},[49,70811,70812,70815,70817],{"class":51,"line":33388},[49,70813,70814],{"class":59},"            \u003Ca href=\"javascript:\" data-id=${",[49,70816,1270],{"class":73},[49,70818,70819],{"class":59},"}>删除\u003C\u002Fa>\n",[49,70821,70822],{"class":51,"line":33397},[49,70823,70824],{"class":59},"          \u003C\u002Ftd> \n",[49,70826,70827],{"class":51,"line":33403},[49,70828,70829],{"class":59},"          `\n",[49,70831,70832],{"class":51,"line":33409},[49,70833,70834],{"class":66},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[49,70836,70837,70840,70843],{"class":51,"line":33418},[49,70838,70839],{"class":73},"        tbody.",[49,70841,70842],{"class":55},"appendChild",[49,70844,70845],{"class":73},"(tr)\n",[49,70847,70848],{"class":51,"line":33424},[49,70849,52929],{"class":73},[49,70851,70852],{"class":51,"line":33435},[49,70853,2885],{"class":73},[49,70855,70856],{"class":51,"line":33441},[49,70857,399],{"emptyLinePlaceholder":398},[49,70859,70860],{"class":51,"line":33460},[49,70861,70862],{"class":66},"    \u002F\u002F 3.删除委托\n",[49,70864,70865],{"class":51,"line":33466},[49,70866,70867],{"class":66},"    \u002F\u002F 3.1 事件委托 tbody\n",[49,70869,70870,70873,70875,70877,70879,70881,70883,70885,70887],{"class":51,"line":33477},[49,70871,70872],{"class":73},"    tbody.",[49,70874,58344],{"class":55},[49,70876,841],{"class":73},[49,70878,58349],{"class":59},[49,70880,13132],{"class":73},[49,70882,54980],{"class":77},[49,70884,2357],{"class":73},[49,70886,912],{"class":5913},[49,70888,13139],{"class":73},[49,70890,70891,70893,70895,70897,70899],{"class":51,"line":33483},[49,70892,55011],{"class":77},[49,70894,67565],{"class":73},[49,70896,55017],{"class":77},[49,70898,68787],{"class":59},[49,70900,13139],{"class":73},[49,70902,70903],{"class":51,"line":33503},[49,70904,70905],{"class":66},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[49,70907,70908],{"class":51,"line":33519},[49,70909,70910],{"class":66},"        \u002F\u002F console.log(e.target.dataset.id);\n",[49,70912,70913],{"class":51,"line":33525},[49,70914,70915],{"class":66},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[49,70917,70918,70921,70923,70926,70928],{"class":51,"line":33539},[49,70919,70920],{"class":73},"        arr.",[49,70922,58541],{"class":55},[49,70924,70925],{"class":73},"(e.target.dataset.id, ",[49,70927,1047],{"class":159},[49,70929,847],{"class":73},[49,70931,70932],{"class":51,"line":33545},[49,70933,70934],{"class":66},"        \u002F\u002F 重新渲染一次\n",[49,70936,70937,70940],{"class":51,"line":33551},[49,70938,70939],{"class":55},"        render",[49,70941,2674],{"class":73},[49,70943,70944],{"class":51,"line":33562},[49,70945,52929],{"class":73},[49,70947,70948],{"class":51,"line":33568},[49,70949,33992],{"class":73},[49,70951,70952,70954,70956],{"class":51,"line":33574},[49,70953,52948],{"class":73},[49,70955,52344],{"class":51831},[49,70957,51838],{"class":73},[49,70959,70960],{"class":51,"line":33584},[49,70961,399],{"emptyLinePlaceholder":398},[49,70963,70964,70966,70968],{"class":51,"line":33590},[49,70965,52316],{"class":73},[49,70967,52331],{"class":51831},[49,70969,51838],{"class":73},[49,70971,70972],{"class":51,"line":33601},[49,70973,399],{"emptyLinePlaceholder":398},[49,70975,70976,70978,70980],{"class":51,"line":33607},[49,70977,52316],{"class":73},[49,70979,51166],{"class":51831},[49,70981,51838],{"class":73},[14,70983,70984],{},"样式：",[40,70986,70990],{"className":70987,"code":70988,"language":70989,"meta":27,"style":27},"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",[46,70991,70992,70997,71007,71016,71020,71024,71029,71039,71044,71048,71053,71063,71068,71077,71081,71085,71090,71095,71105,71115,71120,71124,71129,71138,71148,71153,71163,71173,71177,71182,71190,71194,71199,71204,71209,71217,71226,71230,71235,71244,71248,71253,71262,71266,71271,71280,71289,71297,71301,71306,71315,71325,71334,71344,71350,71359,71369,71379,71383,71388,71397,71405,71415,71423,71432,71441,71451,71459,71463,71468,71477],{"__ignoreMap":27},[49,70993,70994],{"class":51,"line":52},[49,70995,70996],{"class":73},"* {\n",[49,70998,70999,71002,71004],{"class":51,"line":63},[49,71000,71001],{"class":51831},"  margin",[49,71003,51968],{"class":73},[49,71005,71006],{"class":59},"0;\n",[49,71008,71009,71012,71014],{"class":51,"line":70},[49,71010,71011],{"class":59},"  padding",[49,71013,51968],{"class":73},[49,71015,71006],{"class":59},[49,71017,71018],{"class":51,"line":219},[49,71019,2264],{"class":73},[49,71021,71022],{"class":51,"line":233},[49,71023,399],{"emptyLinePlaceholder":398},[49,71025,71026],{"class":51,"line":241},[49,71027,71028],{"class":59},"a {\n",[49,71030,71031,71034,71036],{"class":51,"line":1920},[49,71032,71033],{"class":51831},"  text-decoration",[49,71035,51968],{"class":73},[49,71037,71038],{"class":59},"none;\n",[49,71040,71041],{"class":51,"line":2011},[49,71042,71043],{"class":59},"  color:#721c24;\n",[49,71045,71046],{"class":51,"line":2017},[49,71047,2264],{"class":73},[49,71049,71050],{"class":51,"line":2029},[49,71051,71052],{"class":59},"h1 {\n",[49,71054,71055,71058,71060],{"class":51,"line":2311},[49,71056,71057],{"class":51831},"  text-align",[49,71059,51968],{"class":73},[49,71061,71062],{"class":59},"center;\n",[49,71064,71065],{"class":51,"line":2316},[49,71066,71067],{"class":59},"  color:#333;\n",[49,71069,71070,71072,71074],{"class":51,"line":2322},[49,71071,71001],{"class":51831},[49,71073,51968],{"class":73},[49,71075,71076],{"class":59},"20px 0;\n",[49,71078,71079],{"class":51,"line":2327},[49,71080,3371],{"class":73},[49,71082,71083],{"class":51,"line":2341},[49,71084,2264],{"class":73},[49,71086,71087],{"class":51,"line":2346},[49,71088,71089],{"class":59},"table {\n",[49,71091,71092],{"class":51,"line":2352},[49,71093,71094],{"class":59},"  margin:0 auto;\n",[49,71096,71097,71100,71102],{"class":51,"line":2373},[49,71098,71099],{"class":51831},"  width",[49,71101,51968],{"class":73},[49,71103,71104],{"class":59},"800px;\n",[49,71106,71107,71110,71112],{"class":51,"line":2378},[49,71108,71109],{"class":51831},"  border-collapse",[49,71111,51968],{"class":73},[49,71113,71114],{"class":59},"collapse;\n",[49,71116,71117],{"class":51,"line":2392},[49,71118,71119],{"class":59},"  color:#004085;\n",[49,71121,71122],{"class":51,"line":2397},[49,71123,2264],{"class":73},[49,71125,71126],{"class":51,"line":2426},[49,71127,71128],{"class":59},"th {\n",[49,71130,71131,71133,71135],{"class":51,"line":2431},[49,71132,71011],{"class":51831},[49,71134,51968],{"class":73},[49,71136,71137],{"class":59},"10px;\n",[49,71139,71140,71143,71145],{"class":51,"line":2448},[49,71141,71142],{"class":51831},"  background",[49,71144,51968],{"class":73},[49,71146,71147],{"class":66},"#cfe5ff;\n",[49,71149,71150],{"class":51,"line":2453},[49,71151,71152],{"class":73},"  \n",[49,71154,71155,71158,71160],{"class":51,"line":2458},[49,71156,71157],{"class":51831},"  font-size",[49,71159,51968],{"class":73},[49,71161,71162],{"class":59},"20px;\n",[49,71164,71165,71168,71170],{"class":51,"line":2463},[49,71166,71167],{"class":51831},"  font-weight",[49,71169,51968],{"class":73},[49,71171,71172],{"class":59},"400;\n",[49,71174,71175],{"class":51,"line":2477},[49,71176,2264],{"class":73},[49,71178,71179],{"class":51,"line":2482},[49,71180,71181],{"class":59},"td,th {\n",[49,71183,71184,71187],{"class":51,"line":3274},[49,71185,71186],{"class":59},"  border:1px solid",[49,71188,71189],{"class":66}," #b8daff;\n",[49,71191,71192],{"class":51,"line":3288},[49,71193,2264],{"class":73},[49,71195,71196],{"class":51,"line":3296},[49,71197,71198],{"class":59},"td {\n",[49,71200,71201],{"class":51,"line":3301},[49,71202,71203],{"class":59},"  padding:10px;\n",[49,71205,71206],{"class":51,"line":3307},[49,71207,71208],{"class":59},"  color:#666;\n",[49,71210,71211,71213,71215],{"class":51,"line":3313},[49,71212,71057],{"class":51831},[49,71214,51968],{"class":73},[49,71216,71062],{"class":59},[49,71218,71219,71221,71223],{"class":51,"line":3318},[49,71220,71157],{"class":51831},[49,71222,51968],{"class":73},[49,71224,71225],{"class":59},"16px;\n",[49,71227,71228],{"class":51,"line":8645},[49,71229,2264],{"class":73},[49,71231,71232],{"class":51,"line":8669},[49,71233,71234],{"class":59},"tbody tr {\n",[49,71236,71237,71239,71241],{"class":51,"line":8674},[49,71238,71142],{"class":51831},[49,71240,51968],{"class":73},[49,71242,71243],{"class":66},"#fff;\n",[49,71245,71246],{"class":51,"line":8680},[49,71247,2264],{"class":73},[49,71249,71250],{"class":51,"line":8707},[49,71251,71252],{"class":59},"tbody tr:hover {\n",[49,71254,71255,71257,71259],{"class":51,"line":8712},[49,71256,71142],{"class":51831},[49,71258,51968],{"class":73},[49,71260,71261],{"class":66},"#e1ecf8;\n",[49,71263,71264],{"class":51,"line":8718},[49,71265,2264],{"class":73},[49,71267,71268],{"class":51,"line":8730},[49,71269,71270],{"class":59},".info {\n",[49,71272,71273,71275,71277],{"class":51,"line":8742},[49,71274,71099],{"class":51831},[49,71276,51968],{"class":73},[49,71278,71279],{"class":59},"900px;\n",[49,71281,71282,71284,71286],{"class":51,"line":8754},[49,71283,71001],{"class":51831},[49,71285,51968],{"class":73},[49,71287,71288],{"class":59},"50px auto;\n",[49,71290,71291,71293,71295],{"class":51,"line":10413},[49,71292,71057],{"class":51831},[49,71294,51968],{"class":73},[49,71296,71062],{"class":59},[49,71298,71299],{"class":51,"line":10438},[49,71300,2264],{"class":73},[49,71302,71303],{"class":51,"line":10461},[49,71304,71305],{"class":59},".info  input, .info select {\n",[49,71307,71308,71310,71312],{"class":51,"line":10485},[49,71309,71099],{"class":51831},[49,71311,51968],{"class":73},[49,71313,71314],{"class":59},"80px;\n",[49,71316,71317,71320,71322],{"class":51,"line":10490},[49,71318,71319],{"class":51831},"  height",[49,71321,51968],{"class":73},[49,71323,71324],{"class":59},"27px;\n",[49,71326,71327,71330,71332],{"class":51,"line":10495},[49,71328,71329],{"class":51831},"  outline",[49,71331,51968],{"class":73},[49,71333,71038],{"class":59},[49,71335,71336,71339,71341],{"class":51,"line":10500},[49,71337,71338],{"class":51831},"  border-radius",[49,71340,51968],{"class":73},[49,71342,71343],{"class":59},"5px;\n",[49,71345,71346,71348],{"class":51,"line":10509},[49,71347,71186],{"class":59},[49,71349,71189],{"class":66},[49,71351,71352,71355,71357],{"class":51,"line":10514},[49,71353,71354],{"class":51831},"  padding-left",[49,71356,51968],{"class":73},[49,71358,71343],{"class":59},[49,71360,71361,71364,71366],{"class":51,"line":10520},[49,71362,71363],{"class":51831},"  box-sizing",[49,71365,51968],{"class":73},[49,71367,71368],{"class":59},"border-box;\n",[49,71370,71371,71374,71376],{"class":51,"line":10541},[49,71372,71373],{"class":51831},"  margin-right",[49,71375,51968],{"class":73},[49,71377,71378],{"class":59},"15px;\n",[49,71380,71381],{"class":51,"line":10547},[49,71382,2264],{"class":73},[49,71384,71385],{"class":51,"line":10561},[49,71386,71387],{"class":59},".info button {\n",[49,71389,71390,71392,71394],{"class":51,"line":10567},[49,71391,71099],{"class":51831},[49,71393,51968],{"class":73},[49,71395,71396],{"class":59},"60px;\n",[49,71398,71399,71401,71403],{"class":51,"line":10594},[49,71400,71319],{"class":51831},[49,71402,51968],{"class":73},[49,71404,71324],{"class":59},[49,71406,71407,71410,71412],{"class":51,"line":10603},[49,71408,71409],{"class":51831},"  background-color",[49,71411,51968],{"class":73},[49,71413,71414],{"class":66},"#004085;\n",[49,71416,71417,71419,71421],{"class":51,"line":10609},[49,71418,71329],{"class":51831},[49,71420,51968],{"class":73},[49,71422,71038],{"class":59},[49,71424,71425,71428,71430],{"class":51,"line":10617},[49,71426,71427],{"class":51831},"  border",[49,71429,51968],{"class":73},[49,71431,71006],{"class":59},[49,71433,71434,71437,71439],{"class":51,"line":10622},[49,71435,71436],{"class":51831},"  color",[49,71438,51968],{"class":73},[49,71440,71243],{"class":66},[49,71442,71443,71446,71448],{"class":51,"line":17301},[49,71444,71445],{"class":51831},"  cursor",[49,71447,51968],{"class":73},[49,71449,71450],{"class":59},"pointer;\n",[49,71452,71453,71455,71457],{"class":51,"line":17307},[49,71454,71338],{"class":51831},[49,71456,51968],{"class":73},[49,71458,71343],{"class":59},[49,71460,71461],{"class":51,"line":17330},[49,71462,2264],{"class":73},[49,71464,71465],{"class":51,"line":17336},[49,71466,71467],{"class":59},".info .age {\n",[49,71469,71470,71472,71474],{"class":51,"line":17359},[49,71471,71099],{"class":51831},[49,71473,51968],{"class":73},[49,71475,71476],{"class":59},"50px;\n",[49,71478,71479],{"class":51,"line":17373},[49,71480,2264],{"class":73},[14,71482,71483],{},"思路：",[14,71485,71486],{},[25,71487],{"alt":27,"src":71488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71490,71491],{},[25,71492],{"alt":27,"src":71493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71495,71496],{},[25,71497],{"alt":27,"src":71498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[18,71500,71502],{"id":71501},"_3315-重绘回流","3.3.15 重绘回流",[14,71504,71505],{},[25,71506],{"alt":27,"src":71507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71509,71510],{},[25,71511],{"alt":27,"src":71512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71514,71515],{},[25,71516],{"alt":27,"src":71517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[782,71519,71521],{"id":71520},"_34-bom","3.4 BOM",[14,71523,71524],{},[25,71525],{"alt":27,"src":71526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71528,71529],{},"平时写的document省略了window而已，实际上是window.document",[14,71531,71532],{},"函数也是这样，调用的时候实际为window.fn()",[14,71534,71535],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71537,71538],{},"window大部分情况下可以省略",[18,71540,71542],{"id":71541},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71544,71545],{},"只执行一次",[14,71547,71548],{},[25,71549],{"alt":27,"src":71550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71552,71553],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71555,71556],{},[25,71557],{"alt":27,"src":71558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[18,71560,71562],{"id":71561},"_342-js执行机制","3.4.2 JS执行机制",[14,71564,71565],{},[25,71566],{"alt":27,"src":71567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71569,71570],{},"两个的结果都是1111 3333 2222",[14,71572,71573],{},[25,71574],{"alt":27,"src":71575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71577,71578],{},[25,71579],{"alt":27,"src":71580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71582,71583],{},[25,71584],{"alt":27,"src":71585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71587,71588],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71590,71591],{},"工作流程：",[14,71593,71594],{},[25,71595],{"alt":27,"src":71596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71598,71599],{},[25,71600],{"alt":27,"src":71601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71603,71604],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71606,71607],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[18,71609,71611],{"id":71610},"_343-location对象","3.4.3 location对象",[14,71613,71614],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71616,71617],{},[25,71618],{"alt":27,"src":71619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71621,71622],{},"href可以跳转页面",[30,71624,71625],{},[33,71626,71627],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71629,71630],{},"search得到提交信息之后网站后边的地址",[14,71632,71633],{},[25,71634],{"alt":27,"src":71635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71637,71638],{},[25,71639],{"alt":27,"src":71640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[30,71642,71643],{"start":63},[33,71644,71645],{},"hash:这个获取单页面应用#后边的地址",[14,71647,71648],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71650,71651],{},[25,71652],{"alt":27,"src":71653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[40,71655,71657],{"className":53598,"code":71656,"language":53600,"meta":27,"style":27},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[46,71658,71659,71679,71699],{"__ignoreMap":27},[49,71660,71661,71663,71665,71667,71669,71672,71675,71677],{"class":51,"line":52},[49,71662,52675],{"class":73},[49,71664,124],{"class":51831},[49,71666,61588],{"class":55},[49,71668,78],{"class":73},[49,71670,71671],{"class":59},"\"#\u002Fmy\"",[49,71673,71674],{"class":73},">我的\u003C\u002F",[49,71676,124],{"class":51831},[49,71678,51838],{"class":73},[49,71680,71681,71683,71685,71687,71689,71692,71695,71697],{"class":51,"line":63},[49,71682,52675],{"class":73},[49,71684,124],{"class":51831},[49,71686,61588],{"class":55},[49,71688,78],{"class":73},[49,71690,71691],{"class":59},"\"#\u002Ffriend\"",[49,71693,71694],{"class":73},">关注\u003C\u002F",[49,71696,124],{"class":51831},[49,71698,51838],{"class":73},[49,71700,71701,71703,71705,71707,71709,71712,71715,71717],{"class":51,"line":70},[49,71702,52675],{"class":73},[49,71704,124],{"class":51831},[49,71706,61588],{"class":55},[49,71708,78],{"class":73},[49,71710,71711],{"class":59},"\"#\u002Fdownload\"",[49,71713,71714],{"class":73},">下载\u003C\u002F",[49,71716,124],{"class":51831},[49,71718,51838],{"class":73},[14,71720,71721],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[30,71723,71724],{"start":70},[33,71725,71726,71727,71729,71730,71732],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54247,71728],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54247,71731],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[18,71734,71736],{"id":71735},"_345-navigator对象","3.4.5 navigator对象",[14,71738,71739],{},[25,71740],{"alt":27,"src":71741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[40,71743,71747],{"className":71744,"code":71745,"language":71746,"meta":27,"style":27},"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",[46,71748,71749,71754,71765,71777,71782,71833,71874,71879,71892,71904,71909],{"__ignoreMap":27},[49,71750,71751],{"class":51,"line":52},[49,71752,71753],{"class":66},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[49,71755,71756,71758,71760,71762],{"class":51,"line":63},[49,71757,1056],{"class":77},[49,71759,841],{"class":73},[49,71761,54980],{"class":77},[49,71763,71764],{"class":73}," () { \n",[49,71766,71767,71769,71772,71774],{"class":51,"line":70},[49,71768,7489],{"class":77},[49,71770,71771],{"class":159}," userAgent",[49,71773,14261],{"class":77},[49,71775,71776],{"class":73}," navigator.userAgent \n",[49,71778,71779],{"class":51,"line":219},[49,71780,71781],{"class":66},"\u002F\u002F 验证是否为Android或iPhone \n",[49,71783,71784,71786,71789,71791,71794,71797,71799,71801,71804,71806,71809,71813,71815,71817,71819,71822,71824,71826,71828,71830],{"class":51,"line":233},[49,71785,7489],{"class":77},[49,71787,71788],{"class":159}," android",[49,71790,14261],{"class":77},[49,71792,71793],{"class":73}," userAgent.",[49,71795,71796],{"class":55},"match",[49,71798,841],{"class":73},[49,71800,1413],{"class":59},[49,71802,71803],{"class":48508},"(Android);",[49,71805,1815],{"class":77},[49,71807,71808],{"class":159},"[\\s",[49,71810,71812],{"class":71811},"snhLl","\\\u002F",[49,71814,1769],{"class":159},[49,71816,1310],{"class":77},[49,71818,841],{"class":48508},[49,71820,71821],{"class":159},"[\\d.]",[49,71823,1310],{"class":77},[49,71825,1258],{"class":48508},[49,71827,1815],{"class":77},[49,71829,1413],{"class":59},[49,71831,71832],{"class":73},") \n",[49,71834,71835,71837,71840,71842,71844,71846,71848,71850,71853,71856,71859,71861,71863,71866,71868,71870,71872],{"class":51,"line":241},[49,71836,7489],{"class":77},[49,71838,71839],{"class":159}," iphone",[49,71841,14261],{"class":77},[49,71843,71793],{"class":73},[49,71845,71796],{"class":55},[49,71847,841],{"class":73},[49,71849,1413],{"class":59},[49,71851,71852],{"class":48508},"(iPhone",[49,71854,71855],{"class":159},"\\s",[49,71857,71858],{"class":48508},"OS)",[49,71860,71855],{"class":159},[49,71862,841],{"class":48508},[49,71864,71865],{"class":159},"[\\d_]",[49,71867,1310],{"class":77},[49,71869,1258],{"class":48508},[49,71871,1413],{"class":59},[49,71873,71832],{"class":73},[49,71875,71876],{"class":51,"line":1920},[49,71877,71878],{"class":66},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[49,71880,71881,71883,71886,71889],{"class":51,"line":2011},[49,71882,2230],{"class":77},[49,71884,71885],{"class":73}," (android ",[49,71887,71888],{"class":77},"||",[49,71890,71891],{"class":73}," iphone) { \n",[49,71893,71894,71897,71899,71902],{"class":51,"line":2017},[49,71895,71896],{"class":73},"location.href ",[49,71898,78],{"class":77},[49,71900,71901],{"class":59}," 'http:\u002F\u002Fm.itcast.cn'",[49,71903,3371],{"class":73},[49,71905,71906],{"class":51,"line":2029},[49,71907,71908],{"class":73},"} \n",[49,71910,71911],{"class":51,"line":2311},[49,71912,71913],{"class":73},"})()\n",[18,71915,71917],{"id":71916},"_346-histroy对象","3.4.6 histroy对象",[14,71919,71920],{},[25,71921],{"alt":27,"src":71922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71924,71925],{},"浏览器地址的前进与后退!!!",[14,71927,71928],{},"history.back() 等效于 history.go(-1)",[14,71930,71931],{},"history.forward() 等效于 history.go(1)",[782,71933,71935],{"id":71934},"_35-本地存储","3.5 本地存储",[30,71937,71938,71941,71944],{},[33,71939,71940],{},"数据存储在用户浏览器中",[33,71942,71943],{},"设置、读取方便、甚至页面刷新不丢失数据",[33,71945,71946],{},"容量较大，sessionStorage和localStorage约 5M 左右",[18,71948,71950],{"id":71949},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71952,71953],{},"只能存储字符串",[14,71955,71956],{},[25,71957],{"alt":27,"src":71958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71960,71961],{},[25,71962],{"alt":27,"src":71963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71965,71966],{},"键值对要加引号,不然就会当变量来看了",[14,71968,71969],{},"localStorage.setItem('uname', 'pink')",[14,71971,71972],{},"刷新之后信息不再丢失",[14,71974,71975],{},"操作key,value会跟着变",[14,71977,71978],{},"删除只删除键就可以,即名字",[14,71980,71969],{},[14,71982,71983],{},"改:",[14,71985,71986],{},"localStorage.setItem('uname','red')",[14,71988,71989],{},"有这个键就是改,没有这个键就是改",[14,71991,71992],{},[25,71993],{"alt":27,"src":71994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71996,71997],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71999,72000],{},[25,72001],{"alt":27,"src":72002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,72004,72005],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[18,72007,72009],{"id":72008},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,72011,72012],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,72014,72015],{},"特性:",[30,72017,72018,72021,72024,72027],{},[33,72019,72020],{},"生命周期为关闭浏览器窗口",[33,72022,72023],{},"在同一个窗口(页面)下数据可以共享",[33,72025,72026],{},"以键值对的形式存储使用",[33,72028,72029],{},"用法跟localStorage 基本相同",[18,72031,72033],{"id":72032},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,72035,72036],{},"本地只能存储字符串,无法直接存储复杂数据类型",[40,72038,72040],{"className":53598,"code":72039,"language":53600,"meta":27,"style":27},"\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",[46,72041,72042,72050,72055,72060,72065,72070,72074,72079,72084],{"__ignoreMap":27},[49,72043,72044,72046,72048],{"class":51,"line":52},[49,72045,1739],{"class":73},[49,72047,52344],{"class":51831},[49,72049,51838],{"class":73},[49,72051,72052],{"class":51,"line":63},[49,72053,72054],{"class":73},"    const obj = {\n",[49,72056,72057],{"class":51,"line":70},[49,72058,72059],{"class":73},"      uname: 'pink老师',\n",[49,72061,72062],{"class":51,"line":219},[49,72063,72064],{"class":73},"      age: 18,\n",[49,72066,72067],{"class":51,"line":233},[49,72068,72069],{"class":73},"      gender: '女'\n",[49,72071,72072],{"class":51,"line":241},[49,72073,2885],{"class":73},[49,72075,72076],{"class":51,"line":1920},[49,72077,72078],{"class":73},"    \u002F\u002F 存储复杂数据类型\n",[49,72080,72081],{"class":51,"line":2011},[49,72082,72083],{"class":73},"    localStorage.setItem('obj', obj)\n",[49,72085,72086,72088,72090],{"class":51,"line":2017},[49,72087,52948],{"class":73},[49,72089,52344],{"class":51831},[49,72091,51838],{"class":73},[14,72093,72094],{},[25,72095],{"alt":27,"src":72096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,72098,72099],{},"如果获取一下数据:",[14,72101,72102],{},"log(localStorage.getItem('obj'))",[14,72104,72105],{},[25,72106],{"alt":27,"src":72107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,72109,72110],{},"发现直接存对象是使用不了的!!!",[130,72112,72114],{"id":72113},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,72116,72117],{},[25,72118],{"alt":27,"src":72119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[40,72121,72123],{"className":51164,"code":72122,"language":51166,"meta":27,"style":27},"\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",[46,72124,72125,72133,72143,72153,72162,72170,72174,72178,72204,72223,72231,72235,72240,72245],{"__ignoreMap":27},[49,72126,72127,72129,72131],{"class":51,"line":52},[49,72128,1739],{"class":73},[49,72130,52344],{"class":51831},[49,72132,51838],{"class":73},[49,72134,72135,72137,72139,72141],{"class":51,"line":63},[49,72136,11918],{"class":77},[49,72138,70502],{"class":159},[49,72140,14261],{"class":77},[49,72142,16269],{"class":73},[49,72144,72145,72148,72151],{"class":51,"line":70},[49,72146,72147],{"class":73},"      uname: ",[49,72149,72150],{"class":59},"'pink老师'",[49,72152,31997],{"class":73},[49,72154,72155,72158,72160],{"class":51,"line":219},[49,72156,72157],{"class":73},"      age: ",[49,72159,1479],{"class":159},[49,72161,31997],{"class":73},[49,72163,72164,72167],{"class":51,"line":233},[49,72165,72166],{"class":73},"      gender: ",[49,72168,72169],{"class":59},"'女'\n",[49,72171,72172],{"class":51,"line":241},[49,72173,2885],{"class":73},[49,72175,72176],{"class":51,"line":1920},[49,72177,72078],{"class":66},[49,72179,72180,72183,72186,72188,72191,72193,72196,72198,72201],{"class":51,"line":2011},[49,72181,72182],{"class":73},"  localStorage.",[49,72184,72185],{"class":55},"setItem",[49,72187,841],{"class":73},[49,72189,72190],{"class":59},"'obj'",[49,72192,13132],{"class":73},[49,72194,72195],{"class":159},"JSON",[49,72197,1387],{"class":73},[49,72199,72200],{"class":55},"stringify",[49,72202,72203],{"class":73},"(obj))\n",[49,72205,72206,72209,72211,72214,72217,72219,72221],{"class":51,"line":2017},[49,72207,72208],{"class":73},"  console.",[49,72210,58778],{"class":55},[49,72212,72213],{"class":73},"(localStorage.",[49,72215,72216],{"class":55},"getItem",[49,72218,841],{"class":73},[49,72220,72190],{"class":59},[49,72222,31028],{"class":73},[49,72224,72225,72227,72229],{"class":51,"line":2029},[49,72226,52948],{"class":73},[49,72228,52344],{"class":51831},[49,72230,51838],{"class":73},[49,72232,72233],{"class":51,"line":2311},[49,72234,71152],{"class":73},[49,72236,72237],{"class":51,"line":2316},[49,72238,72239],{"class":73},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[49,72241,72242],{"class":51,"line":2322},[49,72243,72244],{"class":73},"  类型是字符串的\n",[49,72246,72247],{"class":51,"line":2327},[49,72248,72249],{"class":73},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[130,72251,72253],{"id":72252},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,72255,72256],{},[25,72257],{"alt":27,"src":72258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,72260,72261],{},[25,72262],{"alt":27,"src":72263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[40,72265,72267],{"className":53598,"code":72266,"language":53600,"meta":27,"style":27},"  \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",[46,72268,72269,72277,72281,72285,72289,72293,72297,72302,72307,72312,72317,72322,72327,72332,72337],{"__ignoreMap":27},[49,72270,72271,72273,72275],{"class":51,"line":52},[49,72272,52675],{"class":73},[49,72274,52344],{"class":51831},[49,72276,51838],{"class":73},[49,72278,72279],{"class":51,"line":63},[49,72280,72054],{"class":73},[49,72282,72283],{"class":51,"line":70},[49,72284,72059],{"class":73},[49,72286,72287],{"class":51,"line":219},[49,72288,72064],{"class":73},[49,72290,72291],{"class":51,"line":233},[49,72292,72069],{"class":73},[49,72294,72295],{"class":51,"line":241},[49,72296,2885],{"class":73},[49,72298,72299],{"class":51,"line":1920},[49,72300,72301],{"class":73},"    \u002F\u002F 1.存储复杂数据类型\n",[49,72303,72304],{"class":51,"line":2011},[49,72305,72306],{"class":73},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[49,72308,72309],{"class":51,"line":2017},[49,72310,72311],{"class":73},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[49,72313,72314],{"class":51,"line":2029},[49,72315,72316],{"class":73},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[49,72318,72319],{"class":51,"line":2311},[49,72320,72321],{"class":73},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[49,72323,72324],{"class":51,"line":2316},[49,72325,72326],{"class":73},"    \u002F\u002F 取\n",[49,72328,72329],{"class":51,"line":2322},[49,72330,72331],{"class":73},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[49,72333,72334],{"class":51,"line":2327},[49,72335,72336],{"class":73},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[49,72338,72339,72341,72343],{"class":51,"line":2341},[49,72340,52948],{"class":73},[49,72342,52344],{"class":51831},[49,72344,51838],{"class":73},[14,72346,72347],{},[25,72348],{"alt":27,"src":72349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[18,72351,72353],{"id":72352},"_356-数组map方法","3.5.6 数组map方法",[14,72355,72356],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,72358,72359],{},[25,72360],{"alt":27,"src":72361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,72363,72364],{},[25,72365],{"alt":27,"src":72366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,72368,72369,72372],{},[112,72370,72371],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,72374,72375],{},"map有返回值，但是forEach没有返回值",[14,72377,72378],{},"map是个方法。用的时候要加 ()",[14,72380,72381],{},"map返回的是一个数组",[18,72383,72385],{"id":72384},"_357-数组中join方法","3.5.7 数组中join方法",[14,72387,72388],{},[25,72389],{"alt":27,"src":72390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,72392,72393],{},"类似于python中拼接字符串一样！",[30,72395,72396,72399,72402],{},[33,72397,72398],{},"小括号为空则逗号分开",[33,72400,72401],{},"小括号为空字符串 ''，则元素之间没有分隔符",[33,72403,72404],{},"小括号用啥符号就用进行分割",[18,72406,72408],{"id":72407},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[30,72410,72411,72414,72417,72420,72423],{},[33,72412,72413],{},"记住本地时间获取快速方式：new Date().toDateString()",[33,72415,72416],{},"尽量减少DOM操作，用好map+join的渲染方式",[33,72418,72419],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[33,72421,72422],{},"return可以实现函数的结束",[33,72424,72425],{},"禁止跳转是 preventDefault() 不要忘记",[40,72427,72429],{"className":51164,"code":72428,"language":51166,"meta":27,"style":27},"\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",[46,72430,72431,72441,72455,72459,72467,72481,72501,72513,72521,72527,72537,72547,72551,72555,72561,72571,72583,72587,72591,72598,72610,72624,72634,72638,72642,72649,72656,72663,72675,72687,72697,72709,72713,72717,72724,72731,72743,72755,72765,72777,72807,72811,72815,72822,72834,72846,72870,72880,72890,72894,72898,72906,72917,72929,72941,72953,72970,72982,72994,72998,73002,73009,73021,73033,73045,73056,73074,73087,73099,73123,73134,73138,73142,73150,73160,73164,73168,73174,73186,73197,73207,73211,73215,73221,73243,73247,73251,73257,73263,73275,73285,73297,73327,73340,73357,73361,73365,73376,73398,73408,73412,73416,73429,73439,73451,73463,73475,73487,73497,73507,73517,73528,73541,73545,73553,73561,73565,73573,73586,73606,73639,73672,73705,73731,73749,73767,73775,73801,73819,73837,73855,73873,73891,73899,73907,73925,73933,73962,73970,73978,73986,73999,74011,74023,74035,74047,74059,74072,74084,74092,74100,74108,74113,74118,74122,74126,74130,74134,74138,74142,74147,74152,74157,74162,74170,74178,74186,74191,74196,74201,74206,74211,74216,74221,74226,74231,74236,74241,74246,74251,74256,74260,74265,74270,74280,74289,74293,74298,74307,74323,74365,74405,74444,74509,74517,74521,74526,74544,74552,74557,74562,74592,74598,74603,74616,74628,74640,74652,74664,74676,74688,74692,74702,74706,74711,74716,74720,74729,74733,74738,74743,74762,74767,74787,74791,74796,74800,74805,74823,74841,74859,74878,74897,74916,74921,74927,74948,74954,74963,74969,74975,74981,75008,75021,75026,75036,75042,75048,75054,75060,75065,75071,75077,75083,75089,75122,75127,75132,75137,75142,75148,75154,75160,75171,75176,75182,75189,75203,75209,75233,75238,75243,75249,75255,75276,75282,75295,75301,75307,75313,75319,75324,75330,75336,75342,75360,75374,75380,75388,75394,75416,75421,75426,75431,75436,75441,75450,75459,75464],{"__ignoreMap":27},[49,72432,72433,72435,72437,72439],{"class":51,"line":52},[49,72434,51828],{"class":73},[49,72436,51832],{"class":51831},[49,72438,51835],{"class":55},[49,72440,51838],{"class":73},[49,72442,72443,72445,72447,72449,72451,72453],{"class":51,"line":63},[49,72444,1739],{"class":73},[49,72446,51166],{"class":51831},[49,72448,51847],{"class":55},[49,72450,78],{"class":73},[49,72452,51852],{"class":59},[49,72454,51838],{"class":73},[49,72456,72457],{"class":51,"line":70},[49,72458,399],{"emptyLinePlaceholder":398},[49,72460,72461,72463,72465],{"class":51,"line":219},[49,72462,1739],{"class":73},[49,72464,51865],{"class":51831},[49,72466,51838],{"class":73},[49,72468,72469,72471,72473,72475,72477,72479],{"class":51,"line":233},[49,72470,52675],{"class":73},[49,72472,51875],{"class":51831},[49,72474,51878],{"class":55},[49,72476,78],{"class":73},[49,72478,51883],{"class":59},[49,72480,51838],{"class":73},[49,72482,72483,72485,72487,72489,72491,72493,72495,72497,72499],{"class":51,"line":241},[49,72484,52675],{"class":73},[49,72486,51875],{"class":51831},[49,72488,15617],{"class":55},[49,72490,78],{"class":73},[49,72492,51922],{"class":59},[49,72494,51902],{"class":55},[49,72496,78],{"class":73},[49,72498,51929],{"class":59},[49,72500,51838],{"class":73},[49,72502,72503,72505,72507,72509,72511],{"class":51,"line":1920},[49,72504,52675],{"class":73},[49,72506,51938],{"class":51831},[49,72508,51941],{"class":73},[49,72510,51938],{"class":51831},[49,72512,51838],{"class":73},[49,72514,72515,72517,72519],{"class":51,"line":2011},[49,72516,52675],{"class":73},[49,72518,757],{"class":51831},[49,72520,51838],{"class":73},[49,72522,72523,72525],{"class":51,"line":2017},[49,72524,7100],{"class":51831},[49,72526,16269],{"class":73},[49,72528,72529,72531,72533,72535],{"class":51,"line":2029},[49,72530,55226],{"class":159},[49,72532,51968],{"class":73},[49,72534,1021],{"class":159},[49,72536,1990],{"class":73},[49,72538,72539,72541,72543,72545],{"class":51,"line":2311},[49,72540,55237],{"class":159},[49,72542,51968],{"class":73},[49,72544,1021],{"class":159},[49,72546,1990],{"class":73},[49,72548,72549],{"class":51,"line":2316},[49,72550,2885],{"class":73},[49,72552,72553],{"class":51,"line":2322},[49,72554,399],{"emptyLinePlaceholder":398},[49,72556,72557,72559],{"class":51,"line":2327},[49,72558,57810],{"class":51831},[49,72560,16269],{"class":73},[49,72562,72563,72565,72567,72569],{"class":51,"line":2341},[49,72564,57817],{"class":159},[49,72566,51968],{"class":73},[49,72568,52123],{"class":159},[49,72570,1990],{"class":73},[49,72572,72573,72575,72577,72579,72581],{"class":51,"line":2346},[49,72574,62608],{"class":159},[49,72576,51968],{"class":73},[49,72578,1529],{"class":159},[49,72580,52023],{"class":77},[49,72582,1990],{"class":73},[49,72584,72585],{"class":51,"line":2352},[49,72586,2885],{"class":73},[49,72588,72589],{"class":51,"line":2373},[49,72590,399],{"emptyLinePlaceholder":398},[49,72592,72593,72596],{"class":51,"line":2378},[49,72594,72595],{"class":55},"    .info",[49,72597,16269],{"class":73},[49,72599,72600,72602,72604,72606,72608],{"class":51,"line":2392},[49,72601,55302],{"class":159},[49,72603,51968],{"class":73},[49,72605,52020],{"class":159},[49,72607,52023],{"class":77},[49,72609,1990],{"class":73},[49,72611,72612,72614,72616,72618,72620,72622],{"class":51,"line":2397},[49,72613,55237],{"class":159},[49,72615,51968],{"class":73},[49,72617,1275],{"class":159},[49,72619,52023],{"class":77},[49,72621,52087],{"class":159},[49,72623,1990],{"class":73},[49,72625,72626,72628,72630,72632],{"class":51,"line":2426},[49,72627,57817],{"class":159},[49,72629,51968],{"class":73},[49,72631,52123],{"class":159},[49,72633,1990],{"class":73},[49,72635,72636],{"class":51,"line":2431},[49,72637,2885],{"class":73},[49,72639,72640],{"class":51,"line":2448},[49,72641,399],{"emptyLinePlaceholder":398},[49,72643,72644,72647],{"class":51,"line":2453},[49,72645,72646],{"class":55},"    .uname",[49,72648,31997],{"class":73},[49,72650,72651,72654],{"class":51,"line":2458},[49,72652,72653],{"class":55},"    .age",[49,72655,31997],{"class":73},[49,72657,72658,72661],{"class":51,"line":2463},[49,72659,72660],{"class":55},"    .salary",[49,72662,16269],{"class":73},[49,72664,72665,72667,72669,72671,72673],{"class":51,"line":2477},[49,72666,55302],{"class":159},[49,72668,51968],{"class":73},[49,72670,1140],{"class":159},[49,72672,52023],{"class":77},[49,72674,1990],{"class":73},[49,72676,72677,72679,72681,72683,72685],{"class":51,"line":2482},[49,72678,55316],{"class":159},[49,72680,51968],{"class":73},[49,72682,1529],{"class":159},[49,72684,52023],{"class":77},[49,72686,1990],{"class":73},[49,72688,72689,72691,72693,72695],{"class":51,"line":3274},[49,72690,62311],{"class":159},[49,72692,51968],{"class":73},[49,72694,55268],{"class":159},[49,72696,1990],{"class":73},[49,72698,72699,72701,72703,72705,72707],{"class":51,"line":3288},[49,72700,62281],{"class":159},[49,72702,51968],{"class":73},[49,72704,1404],{"class":159},[49,72706,52023],{"class":77},[49,72708,1990],{"class":73},[49,72710,72711],{"class":51,"line":3296},[49,72712,2885],{"class":73},[49,72714,72715],{"class":51,"line":3301},[49,72716,399],{"emptyLinePlaceholder":398},[49,72718,72719,72722],{"class":51,"line":3307},[49,72720,72721],{"class":55},"    .gender",[49,72723,31997],{"class":73},[49,72725,72726,72729],{"class":51,"line":3313},[49,72727,72728],{"class":55},"    .city",[49,72730,16269],{"class":73},[49,72732,72733,72735,72737,72739,72741],{"class":51,"line":3318},[49,72734,55302],{"class":159},[49,72736,51968],{"class":73},[49,72738,1140],{"class":159},[49,72740,52023],{"class":77},[49,72742,1990],{"class":73},[49,72744,72745,72747,72749,72751,72753],{"class":51,"line":8645},[49,72746,55316],{"class":159},[49,72748,51968],{"class":73},[49,72750,1654],{"class":159},[49,72752,52023],{"class":77},[49,72754,1990],{"class":73},[49,72756,72757,72759,72761,72763],{"class":51,"line":8669},[49,72758,62311],{"class":159},[49,72760,51968],{"class":73},[49,72762,55268],{"class":159},[49,72764,1990],{"class":73},[49,72766,72767,72769,72771,72773,72775],{"class":51,"line":8674},[49,72768,62281],{"class":159},[49,72770,51968],{"class":73},[49,72772,1404],{"class":159},[49,72774,52023],{"class":77},[49,72776,1990],{"class":73},[49,72778,72779,72781,72783,72785,72787,72789,72792,72794,72796,72798,72801,72803,72805],{"class":51,"line":8680},[49,72780,62508],{"class":159},[49,72782,51968],{"class":73},[49,72784,1047],{"class":159},[49,72786,52023],{"class":77},[49,72788,52052],{"class":159},[49,72790,72791],{"class":159}," rgb",[49,72793,841],{"class":73},[49,72795,2421],{"class":159},[49,72797,13132],{"class":73},[49,72799,72800],{"class":159},"197",[49,72802,13132],{"class":73},[49,72804,72800],{"class":159},[49,72806,3416],{"class":73},[49,72808,72809],{"class":51,"line":8707},[49,72810,2885],{"class":73},[49,72812,72813],{"class":51,"line":8712},[49,72814,399],{"emptyLinePlaceholder":398},[49,72816,72817,72820],{"class":51,"line":8718},[49,72818,72819],{"class":51831},"    button",[49,72821,16269],{"class":73},[49,72823,72824,72826,72828,72830,72832],{"class":51,"line":8730},[49,72825,55316],{"class":159},[49,72827,51968],{"class":73},[49,72829,1654],{"class":159},[49,72831,52023],{"class":77},[49,72833,1990],{"class":73},[49,72835,72836,72838,72840,72842,72844],{"class":51,"line":8742},[49,72837,55302],{"class":159},[49,72839,51968],{"class":73},[49,72841,1313],{"class":159},[49,72843,52023],{"class":77},[49,72845,1990],{"class":73},[49,72847,72848,72850,72852,72855,72857,72859,72861,72864,72866,72868],{"class":51,"line":8754},[49,72849,55415],{"class":159},[49,72851,51968],{"class":73},[49,72853,72854],{"class":159},"rgb",[49,72856,841],{"class":73},[49,72858,1798],{"class":159},[49,72860,13132],{"class":73},[49,72862,72863],{"class":159},"187",[49,72865,13132],{"class":73},[49,72867,1128],{"class":159},[49,72869,3416],{"class":73},[49,72871,72872,72874,72876,72878],{"class":51,"line":10413},[49,72873,57947],{"class":159},[49,72875,51968],{"class":73},[49,72877,61373],{"class":159},[49,72879,1990],{"class":73},[49,72881,72882,72884,72886,72888],{"class":51,"line":10438},[49,72883,62508],{"class":159},[49,72885,51968],{"class":73},[49,72887,1021],{"class":159},[49,72889,1990],{"class":73},[49,72891,72892],{"class":51,"line":10461},[49,72893,2885],{"class":73},[49,72895,72896],{"class":51,"line":10485},[49,72897,399],{"emptyLinePlaceholder":398},[49,72899,72900,72902,72904],{"class":51,"line":10490},[49,72901,72819],{"class":51831},[49,72903,52219],{"class":51831},[49,72905,16269],{"class":73},[49,72907,72908,72910,72912,72915],{"class":51,"line":10495},[49,72909,55540],{"class":159},[49,72911,51968],{"class":73},[49,72913,72914],{"class":159},"inline-block",[49,72916,1990],{"class":73},[49,72918,72919,72921,72923,72925,72927],{"class":51,"line":10500},[49,72920,55302],{"class":159},[49,72922,51968],{"class":73},[49,72924,1275],{"class":159},[49,72926,52023],{"class":77},[49,72928,1990],{"class":73},[49,72930,72931,72933,72935,72937,72939],{"class":51,"line":10509},[49,72932,55316],{"class":159},[49,72934,51968],{"class":73},[49,72936,1275],{"class":159},[49,72938,52023],{"class":77},[49,72940,1990],{"class":73},[49,72942,72943,72945,72947,72949,72951],{"class":51,"line":10514},[49,72944,57890],{"class":159},[49,72946,51968],{"class":73},[49,72948,1301],{"class":159},[49,72950,52023],{"class":77},[49,72952,1990],{"class":73},[49,72954,72955,72957,72959,72961,72963,72965,72968],{"class":51,"line":10520},[49,72956,62508],{"class":159},[49,72958,51968],{"class":73},[49,72960,1047],{"class":159},[49,72962,52023],{"class":77},[49,72964,52052],{"class":159},[49,72966,72967],{"class":159}," #fff",[49,72969,1990],{"class":73},[49,72971,72972,72974,72976,72978,72980],{"class":51,"line":10541},[49,72973,55665],{"class":159},[49,72975,51968],{"class":73},[49,72977,1148],{"class":159},[49,72979,52023],{"class":77},[49,72981,1990],{"class":73},[49,72983,72984,72986,72988,72990,72992],{"class":51,"line":10547},[49,72985,62281],{"class":159},[49,72987,51968],{"class":73},[49,72989,1047],{"class":159},[49,72991,52023],{"class":77},[49,72993,1990],{"class":73},[49,72995,72996],{"class":51,"line":10561},[49,72997,2885],{"class":73},[49,72999,73000],{"class":51,"line":10567},[49,73001,399],{"emptyLinePlaceholder":398},[49,73003,73004,73007],{"class":51,"line":10594},[49,73005,73006],{"class":55},"    .total",[49,73008,16269],{"class":73},[49,73010,73011,73013,73015,73017,73019],{"class":51,"line":10603},[49,73012,55302],{"class":159},[49,73014,51968],{"class":73},[49,73016,62160],{"class":159},[49,73018,52023],{"class":77},[49,73020,1990],{"class":73},[49,73022,73023,73025,73027,73029,73031],{"class":51,"line":10609},[49,73024,55316],{"class":159},[49,73026,51968],{"class":73},[49,73028,1230],{"class":159},[49,73030,52023],{"class":77},[49,73032,1990],{"class":73},[49,73034,73035,73037,73039,73041,73043],{"class":51,"line":10617},[49,73036,57890],{"class":159},[49,73038,51968],{"class":73},[49,73040,1230],{"class":159},[49,73042,52023],{"class":77},[49,73044,1990],{"class":73},[49,73046,73047,73049,73051,73054],{"class":51,"line":10622},[49,73048,57817],{"class":159},[49,73050,51968],{"class":73},[49,73052,73053],{"class":159},"right",[49,73055,1990],{"class":73},[49,73057,73058,73060,73062,73064,73066,73068,73070,73072],{"class":51,"line":17301},[49,73059,55237],{"class":159},[49,73061,51968],{"class":73},[49,73063,1230],{"class":159},[49,73065,52023],{"class":77},[49,73067,52087],{"class":159},[49,73069,2736],{"class":159},[49,73071,52023],{"class":77},[49,73073,1990],{"class":73},[49,73075,73076,73079,73081,73083,73085],{"class":51,"line":17307},[49,73077,73078],{"class":159},"      padding-right",[49,73080,51968],{"class":73},[49,73082,1275],{"class":159},[49,73084,52023],{"class":77},[49,73086,1990],{"class":73},[49,73088,73089,73091,73093,73095,73097],{"class":51,"line":17330},[49,73090,55453],{"class":159},[49,73092,51968],{"class":73},[49,73094,1352],{"class":159},[49,73096,52023],{"class":77},[49,73098,1990],{"class":73},[49,73100,73101,73103,73105,73107,73109,73112,73114,73117,73119,73121],{"class":51,"line":17336},[49,73102,55415],{"class":159},[49,73104,51968],{"class":73},[49,73106,72854],{"class":159},[49,73108,841],{"class":73},[49,73110,73111],{"class":159},"237",[49,73113,13132],{"class":73},[49,73115,73116],{"class":159},"235",[49,73118,13132],{"class":73},[49,73120,73116],{"class":159},[49,73122,3416],{"class":73},[49,73124,73125,73128,73130,73132],{"class":51,"line":17359},[49,73126,73127],{"class":159},"      box-sizing",[49,73129,51968],{"class":73},[49,73131,61036],{"class":159},[49,73133,1990],{"class":73},[49,73135,73136],{"class":51,"line":17373},[49,73137,2885],{"class":73},[49,73139,73140],{"class":51,"line":17393},[49,73141,399],{"emptyLinePlaceholder":398},[49,73143,73144,73146,73148],{"class":51,"line":17399},[49,73145,73006],{"class":55},[49,73147,52219],{"class":51831},[49,73149,16269],{"class":73},[49,73151,73152,73154,73156,73158],{"class":51,"line":17410},[49,73153,57947],{"class":159},[49,73155,51968],{"class":73},[49,73157,57952],{"class":159},[49,73159,1990],{"class":73},[49,73161,73162],{"class":51,"line":17433},[49,73163,2885],{"class":73},[49,73165,73166],{"class":51,"line":17455},[49,73167,399],{"emptyLinePlaceholder":398},[49,73169,73170,73172],{"class":51,"line":17460},[49,73171,65554],{"class":51831},[49,73173,16269],{"class":73},[49,73175,73176,73178,73180,73182,73184],{"class":51,"line":17466},[49,73177,55302],{"class":159},[49,73179,51968],{"class":73},[49,73181,62160],{"class":159},[49,73183,52023],{"class":77},[49,73185,1990],{"class":73},[49,73187,73188,73190,73192,73195],{"class":51,"line":17480},[49,73189,55237],{"class":159},[49,73191,51968],{"class":73},[49,73193,73194],{"class":159},"auto",[49,73196,1990],{"class":73},[49,73198,73199,73201,73203,73205],{"class":51,"line":17493},[49,73200,65561],{"class":159},[49,73202,51968],{"class":73},[49,73204,65566],{"class":159},[49,73206,1990],{"class":73},[49,73208,73209],{"class":51,"line":17498},[49,73210,2885],{"class":73},[49,73212,73213],{"class":51,"line":17512},[49,73214,399],{"emptyLinePlaceholder":398},[49,73216,73217,73219],{"class":51,"line":17517},[49,73218,65646],{"class":51831},[49,73220,16269],{"class":73},[49,73222,73223,73225,73227,73229,73231,73233,73235,73237,73239,73241],{"class":51,"line":17523},[49,73224,55415],{"class":159},[49,73226,51968],{"class":73},[49,73228,72854],{"class":159},[49,73230,841],{"class":73},[49,73232,73111],{"class":159},[49,73234,13132],{"class":73},[49,73236,73116],{"class":159},[49,73238,13132],{"class":73},[49,73240,73116],{"class":159},[49,73242,3416],{"class":73},[49,73244,73245],{"class":51,"line":17528},[49,73246,2885],{"class":73},[49,73248,73249],{"class":51,"line":17542},[49,73250,399],{"emptyLinePlaceholder":398},[49,73252,73253,73255],{"class":51,"line":17547},[49,73254,65646],{"class":51831},[49,73256,31997],{"class":73},[49,73258,73259,73261],{"class":51,"line":17552},[49,73260,65712],{"class":51831},[49,73262,16269],{"class":73},[49,73264,73265,73267,73269,73271,73273],{"class":51,"line":17566},[49,73266,55316],{"class":159},[49,73268,51968],{"class":73},[49,73270,1102],{"class":159},[49,73272,52023],{"class":77},[49,73274,1990],{"class":73},[49,73276,73277,73279,73281,73283],{"class":51,"line":17578},[49,73278,57817],{"class":159},[49,73280,51968],{"class":73},[49,73282,621],{"class":159},[49,73284,1990],{"class":73},[49,73286,73287,73289,73291,73293,73295],{"class":51,"line":17583},[49,73288,55453],{"class":159},[49,73290,51968],{"class":73},[49,73292,1378],{"class":159},[49,73294,52023],{"class":77},[49,73296,1990],{"class":73},[49,73298,73299,73301,73303,73305,73307,73309,73311,73313,73316,73318,73321,73323,73325],{"class":51,"line":17596},[49,73300,62508],{"class":159},[49,73302,51968],{"class":73},[49,73304,1047],{"class":159},[49,73306,52023],{"class":77},[49,73308,52052],{"class":159},[49,73310,72791],{"class":159},[49,73312,841],{"class":73},[49,73314,73315],{"class":159},"228",[49,73317,13132],{"class":73},[49,73319,73320],{"class":159},"225",[49,73322,13132],{"class":73},[49,73324,73320],{"class":159},[49,73326,3416],{"class":73},[49,73328,73329,73332,73334,73336,73338],{"class":51,"line":17601},[49,73330,73331],{"class":159},"      padding-left",[49,73333,51968],{"class":73},[49,73335,1148],{"class":159},[49,73337,52023],{"class":77},[49,73339,1990],{"class":73},[49,73341,73342,73344,73346,73348,73351,73353,73355],{"class":51,"line":17606},[49,73343,62391],{"class":159},[49,73345,51968],{"class":73},[49,73347,28652],{"class":159},[49,73349,73350],{"class":159}," linear",[49,73352,62398],{"class":159},[49,73354,1524],{"class":77},[49,73356,1990],{"class":73},[49,73358,73359],{"class":51,"line":17611},[49,73360,2885],{"class":73},[49,73362,73363],{"class":51,"line":17624},[49,73364,399],{"emptyLinePlaceholder":398},[49,73366,73367,73370,73372,73374],{"class":51,"line":17629},[49,73368,73369],{"class":51831},"    tbody",[49,73371,70675],{"class":51831},[49,73373,61471],{"class":55},[49,73375,16269],{"class":73},[49,73377,73378,73380,73382,73384,73386,73388,73390,73392,73394,73396],{"class":51,"line":33164},[49,73379,55415],{"class":159},[49,73381,51968],{"class":73},[49,73383,72854],{"class":159},[49,73385,841],{"class":73},[49,73387,73111],{"class":159},[49,73389,13132],{"class":73},[49,73391,73116],{"class":159},[49,73393,13132],{"class":73},[49,73395,73116],{"class":159},[49,73397,3416],{"class":73},[49,73399,73400,73402,73404,73406],{"class":51,"line":33170},[49,73401,62556],{"class":159},[49,73403,51968],{"class":73},[49,73405,62561],{"class":159},[49,73407,1990],{"class":73},[49,73409,73410],{"class":51,"line":33176},[49,73411,2885],{"class":73},[49,73413,73414],{"class":51,"line":33182},[49,73415,399],{"emptyLinePlaceholder":398},[49,73417,73418,73420,73422,73425,73427],{"class":51,"line":33188},[49,73419,73369],{"class":51831},[49,73421,70675],{"class":51831},[49,73423,73424],{"class":51831}," td",[49,73426,2098],{"class":51831},[49,73428,16269],{"class":73},[49,73430,73431,73433,73435,73437],{"class":51,"line":33199},[49,73432,55540],{"class":159},[49,73434,51968],{"class":73},[49,73436,61400],{"class":159},[49,73438,1990],{"class":73},[49,73440,73441,73443,73445,73447,73449],{"class":51,"line":33205},[49,73442,55302],{"class":159},[49,73444,51968],{"class":73},[49,73446,1736],{"class":159},[49,73448,52023],{"class":77},[49,73450,1990],{"class":73},[49,73452,73453,73455,73457,73459,73461],{"class":51,"line":33225},[49,73454,55316],{"class":159},[49,73456,51968],{"class":73},[49,73458,1654],{"class":159},[49,73460,52023],{"class":77},[49,73462,1990],{"class":73},[49,73464,73465,73467,73469,73471,73473],{"class":51,"line":33231},[49,73466,57890],{"class":159},[49,73468,51968],{"class":73},[49,73470,1654],{"class":159},[49,73472,52023],{"class":77},[49,73474,1990],{"class":73},[49,73476,73477,73479,73481,73483,73485],{"class":51,"line":33242},[49,73478,62608],{"class":159},[49,73480,51968],{"class":73},[49,73482,915],{"class":159},[49,73484,52023],{"class":77},[49,73486,1990],{"class":73},[49,73488,73489,73491,73493,73495],{"class":51,"line":33248},[49,73490,57947],{"class":159},[49,73492,51968],{"class":73},[49,73494,61373],{"class":159},[49,73496,1990],{"class":73},[49,73498,73499,73501,73503,73505],{"class":51,"line":33254},[49,73500,57817],{"class":159},[49,73502,51968],{"class":73},[49,73504,52123],{"class":159},[49,73506,1990],{"class":73},[49,73508,73509,73511,73513,73515],{"class":51,"line":33260},[49,73510,64501],{"class":159},[49,73512,51968],{"class":73},[49,73514,55268],{"class":159},[49,73516,1990],{"class":73},[49,73518,73519,73521,73523,73526],{"class":51,"line":33266},[49,73520,55415],{"class":159},[49,73522,51968],{"class":73},[49,73524,73525],{"class":159},"orange",[49,73527,1990],{"class":73},[49,73529,73530,73532,73534,73537,73539],{"class":51,"line":33272},[49,73531,55665],{"class":159},[49,73533,51968],{"class":73},[49,73535,73536],{"class":159},"12.5",[49,73538,52023],{"class":77},[49,73540,1990],{"class":73},[49,73542,73543],{"class":51,"line":33278},[49,73544,2885],{"class":73},[49,73546,73547,73549,73551],{"class":51,"line":33284},[49,73548,52948],{"class":73},[49,73550,757],{"class":51831},[49,73552,51838],{"class":73},[49,73554,73555,73557,73559],{"class":51,"line":33304},[49,73556,52316],{"class":73},[49,73558,51865],{"class":51831},[49,73560,51838],{"class":73},[49,73562,73563],{"class":51,"line":33310},[49,73564,399],{"emptyLinePlaceholder":398},[49,73566,73567,73569,73571],{"class":51,"line":33326},[49,73568,1739],{"class":73},[49,73570,52331],{"class":51831},[49,73572,51838],{"class":73},[49,73574,73575,73577,73579,73582,73584],{"class":51,"line":33332},[49,73576,52675],{"class":73},[49,73578,782],{"class":51831},[49,73580,73581],{"class":73},">学生就业统计表\u003C\u002F",[49,73583,782],{"class":51831},[49,73585,51838],{"class":73},[49,73587,73588,73590,73592,73594,73596,73598,73600,73602,73604],{"class":51,"line":33346},[49,73589,52675],{"class":73},[49,73591,67156],{"class":51831},[49,73593,54017],{"class":55},[49,73595,78],{"class":73},[49,73597,63195],{"class":59},[49,73599,69601],{"class":55},[49,73601,78],{"class":73},[49,73603,32307],{"class":59},[49,73605,51838],{"class":73},[49,73607,73608,73610,73612,73614,73616,73618,73620,73622,73624,73626,73628,73631,73633,73635,73637],{"class":51,"line":33352},[49,73609,51872],{"class":73},[49,73611,54352],{"class":51831},[49,73613,54355],{"class":55},[49,73615,78],{"class":73},[49,73617,63230],{"class":59},[49,73619,15617],{"class":55},[49,73621,78],{"class":73},[49,73623,69627],{"class":59},[49,73625,61551],{"class":55},[49,73627,78],{"class":73},[49,73629,73630],{"class":59},"\"姓名\"",[49,73632,54017],{"class":55},[49,73634,78],{"class":73},[49,73636,69627],{"class":59},[49,73638,51838],{"class":73},[49,73640,73641,73643,73645,73647,73649,73651,73653,73655,73657,73659,73661,73664,73666,73668,73670],{"class":51,"line":33367},[49,73642,51872],{"class":73},[49,73644,54352],{"class":51831},[49,73646,54355],{"class":55},[49,73648,78],{"class":73},[49,73650,63230],{"class":59},[49,73652,15617],{"class":55},[49,73654,78],{"class":73},[49,73656,69655],{"class":59},[49,73658,61551],{"class":55},[49,73660,78],{"class":73},[49,73662,73663],{"class":59},"\"年龄\"",[49,73665,54017],{"class":55},[49,73667,78],{"class":73},[49,73669,69655],{"class":59},[49,73671,51838],{"class":73},[49,73673,73674,73676,73678,73680,73682,73684,73686,73688,73690,73692,73694,73697,73699,73701,73703],{"class":51,"line":33373},[49,73675,51872],{"class":73},[49,73677,54352],{"class":51831},[49,73679,54355],{"class":55},[49,73681,78],{"class":73},[49,73683,63230],{"class":59},[49,73685,15617],{"class":55},[49,73687,78],{"class":73},[49,73689,69757],{"class":59},[49,73691,61551],{"class":55},[49,73693,78],{"class":73},[49,73695,73696],{"class":59},"\"薪资\"",[49,73698,54017],{"class":55},[49,73700,78],{"class":73},[49,73702,69757],{"class":59},[49,73704,51838],{"class":73},[49,73706,73707,73709,73711,73713,73715,73717,73719,73721,73723,73725,73727,73729],{"class":51,"line":33382},[49,73708,51872],{"class":73},[49,73710,69675],{"class":51831},[49,73712,15617],{"class":55},[49,73714,78],{"class":73},[49,73716,69682],{"class":59},[49,73718,15656],{"class":55},[49,73720,78],{"class":73},[49,73722,8349],{"class":59},[49,73724,54017],{"class":55},[49,73726,78],{"class":73},[49,73728,69682],{"class":59},[49,73730,51838],{"class":73},[49,73732,73733,73735,73737,73739,73741,73743,73745,73747],{"class":51,"line":33388},[49,73734,55765],{"class":73},[49,73736,69697],{"class":51831},[49,73738,67182],{"class":55},[49,73740,78],{"class":73},[49,73742,10658],{"class":59},[49,73744,69706],{"class":73},[49,73746,69697],{"class":51831},[49,73748,51838],{"class":73},[49,73750,73751,73753,73755,73757,73759,73761,73763,73765],{"class":51,"line":33397},[49,73752,55765],{"class":73},[49,73754,69697],{"class":51831},[49,73756,67182],{"class":55},[49,73758,78],{"class":73},[49,73760,10727],{"class":59},[49,73762,69725],{"class":73},[49,73764,69697],{"class":51831},[49,73766,51838],{"class":73},[49,73768,73769,73771,73773],{"class":51,"line":33403},[49,73770,52307],{"class":73},[49,73772,69675],{"class":51831},[49,73774,51838],{"class":73},[49,73776,73777,73779,73781,73783,73785,73787,73789,73791,73793,73795,73797,73799],{"class":51,"line":33409},[49,73778,51872],{"class":73},[49,73780,69675],{"class":51831},[49,73782,15617],{"class":55},[49,73784,78],{"class":73},[49,73786,69779],{"class":59},[49,73788,15656],{"class":55},[49,73790,78],{"class":73},[49,73792,8349],{"class":59},[49,73794,54017],{"class":55},[49,73796,78],{"class":73},[49,73798,69779],{"class":59},[49,73800,51838],{"class":73},[49,73802,73803,73805,73807,73809,73811,73813,73815,73817],{"class":51,"line":33418},[49,73804,55765],{"class":73},[49,73806,69697],{"class":51831},[49,73808,67182],{"class":55},[49,73810,78],{"class":73},[49,73812,69800],{"class":59},[49,73814,69803],{"class":73},[49,73816,69697],{"class":51831},[49,73818,51838],{"class":73},[49,73820,73821,73823,73825,73827,73829,73831,73833,73835],{"class":51,"line":33424},[49,73822,55765],{"class":73},[49,73824,69697],{"class":51831},[49,73826,67182],{"class":55},[49,73828,78],{"class":73},[49,73830,69820],{"class":59},[49,73832,69823],{"class":73},[49,73834,69697],{"class":51831},[49,73836,51838],{"class":73},[49,73838,73839,73841,73843,73845,73847,73849,73851,73853],{"class":51,"line":33435},[49,73840,55765],{"class":73},[49,73842,69697],{"class":51831},[49,73844,67182],{"class":55},[49,73846,78],{"class":73},[49,73848,69840],{"class":59},[49,73850,69843],{"class":73},[49,73852,69697],{"class":51831},[49,73854,51838],{"class":73},[49,73856,73857,73859,73861,73863,73865,73867,73869,73871],{"class":51,"line":33441},[49,73858,55765],{"class":73},[49,73860,69697],{"class":51831},[49,73862,67182],{"class":55},[49,73864,78],{"class":73},[49,73866,69860],{"class":59},[49,73868,69863],{"class":73},[49,73870,69697],{"class":51831},[49,73872,51838],{"class":73},[49,73874,73875,73877,73879,73881,73883,73885,73887,73889],{"class":51,"line":33460},[49,73876,55765],{"class":73},[49,73878,69697],{"class":51831},[49,73880,67182],{"class":55},[49,73882,78],{"class":73},[49,73884,69880],{"class":59},[49,73886,69883],{"class":73},[49,73888,69697],{"class":51831},[49,73890,51838],{"class":73},[49,73892,73893,73895,73897],{"class":51,"line":33466},[49,73894,52307],{"class":73},[49,73896,69675],{"class":51831},[49,73898,51838],{"class":73},[49,73900,73901,73903,73905],{"class":51,"line":33477},[49,73902,51872],{"class":73},[49,73904,54418],{"class":51831},[49,73906,51838],{"class":73},[49,73908,73909,73911,73913,73916,73918,73921,73923],{"class":51,"line":33483},[49,73910,55765],{"class":73},[49,73912,49],{"class":51831},[49,73914,73915],{"class":73},">+\u003C\u002F",[49,73917,49],{"class":51831},[49,73919,73920],{"class":73},">添加\u003C\u002F",[49,73922,54418],{"class":51831},[49,73924,51838],{"class":73},[49,73926,73927,73929,73931],{"class":51,"line":33503},[49,73928,52948],{"class":73},[49,73930,67156],{"class":51831},[49,73932,51838],{"class":73},[49,73934,73935,73937,73939,73941,73943,73945,73948,73950,73953,73955,73958,73960],{"class":51,"line":33519},[49,73936,52675],{"class":73},[49,73938,52142],{"class":51831},[49,73940,54017],{"class":55},[49,73942,78],{"class":73},[49,73944,63111],{"class":59},[49,73946,73947],{"class":73},">共有数据 \u003C",[49,73949,49],{"class":51831},[49,73951,73952],{"class":73},">0\u003C\u002F",[49,73954,49],{"class":51831},[49,73956,73957],{"class":73},"> 条\u003C\u002F",[49,73959,52142],{"class":51831},[49,73961,51838],{"class":73},[49,73963,73964,73966,73968],{"class":51,"line":33525},[49,73965,52675],{"class":73},[49,73967,610],{"class":51831},[49,73969,51838],{"class":73},[49,73971,73972,73974,73976],{"class":51,"line":33539},[49,73973,51872],{"class":73},[49,73975,613],{"class":51831},[49,73977,51838],{"class":73},[49,73979,73980,73982,73984],{"class":51,"line":33545},[49,73981,55765],{"class":73},[49,73983,616],{"class":51831},[49,73985,51838],{"class":73},[49,73987,73988,73990,73992,73995,73997],{"class":51,"line":33551},[49,73989,55833],{"class":73},[49,73991,619],{"class":51831},[49,73993,73994],{"class":73},">ID\u003C\u002F",[49,73996,619],{"class":51831},[49,73998,51838],{"class":73},[49,74000,74001,74003,74005,74007,74009],{"class":51,"line":33562},[49,74002,55833],{"class":73},[49,74004,619],{"class":51831},[49,74006,69986],{"class":73},[49,74008,619],{"class":51831},[49,74010,51838],{"class":73},[49,74012,74013,74015,74017,74019,74021],{"class":51,"line":33568},[49,74014,55833],{"class":73},[49,74016,619],{"class":51831},[49,74018,69999],{"class":73},[49,74020,619],{"class":51831},[49,74022,51838],{"class":73},[49,74024,74025,74027,74029,74031,74033],{"class":51,"line":33574},[49,74026,55833],{"class":73},[49,74028,619],{"class":51831},[49,74030,70012],{"class":73},[49,74032,619],{"class":51831},[49,74034,51838],{"class":73},[49,74036,74037,74039,74041,74043,74045],{"class":51,"line":33584},[49,74038,55833],{"class":73},[49,74040,619],{"class":51831},[49,74042,70025],{"class":73},[49,74044,619],{"class":51831},[49,74046,51838],{"class":73},[49,74048,74049,74051,74053,74055,74057],{"class":51,"line":33590},[49,74050,55833],{"class":73},[49,74052,619],{"class":51831},[49,74054,70038],{"class":73},[49,74056,619],{"class":51831},[49,74058,51838],{"class":73},[49,74060,74061,74063,74065,74068,74070],{"class":51,"line":33601},[49,74062,55833],{"class":73},[49,74064,619],{"class":51831},[49,74066,74067],{"class":73},">录入时间\u003C\u002F",[49,74069,619],{"class":51831},[49,74071,51838],{"class":73},[49,74073,74074,74076,74078,74080,74082],{"class":51,"line":33607},[49,74075,55833],{"class":73},[49,74077,619],{"class":51831},[49,74079,70051],{"class":73},[49,74081,619],{"class":51831},[49,74083,51838],{"class":73},[49,74085,74086,74088,74090],{"class":51,"line":33617},[49,74087,55938],{"class":73},[49,74089,616],{"class":51831},[49,74091,51838],{"class":73},[49,74093,74094,74096,74098],{"class":51,"line":33622},[49,74095,52307],{"class":73},[49,74097,613],{"class":51831},[49,74099,51838],{"class":73},[49,74101,74102,74104,74106],{"class":51,"line":33628},[49,74103,51872],{"class":73},[49,74105,633],{"class":51831},[49,74107,51838],{"class":73},[49,74109,74110],{"class":51,"line":33677},[49,74111,74112],{"class":66},"      \u003C!-- \u003Ctr>\n",[49,74114,74115],{"class":51,"line":33724},[49,74116,74117],{"class":66},"        \u003Ctd>1\u003C\u002Ftd>\n",[49,74119,74120],{"class":51,"line":33729},[49,74121,74117],{"class":66},[49,74123,74124],{"class":51,"line":33735},[49,74125,74117],{"class":66},[49,74127,74128],{"class":51,"line":33754},[49,74129,74117],{"class":66},[49,74131,74132],{"class":51,"line":33760},[49,74133,74117],{"class":66},[49,74135,74136],{"class":51,"line":33780},[49,74137,74117],{"class":66},[49,74139,74140],{"class":51,"line":33786},[49,74141,74117],{"class":66},[49,74143,74144],{"class":51,"line":33792},[49,74145,74146],{"class":66},"        \u003Ctd>\n",[49,74148,74149],{"class":51,"line":33802},[49,74150,74151],{"class":66},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[49,74153,74154],{"class":51,"line":33807},[49,74155,74156],{"class":66},"        \u003C\u002Ftd>\n",[49,74158,74159],{"class":51,"line":33813},[49,74160,74161],{"class":66},"      \u003C\u002Ftr> -->\n",[49,74163,74164,74166,74168],{"class":51,"line":33829},[49,74165,52307],{"class":73},[49,74167,633],{"class":51831},[49,74169,51838],{"class":73},[49,74171,74172,74174,74176],{"class":51,"line":33874},[49,74173,52948],{"class":73},[49,74175,610],{"class":51831},[49,74177,51838],{"class":73},[49,74179,74180,74182,74184],{"class":51,"line":33880},[49,74181,52675],{"class":73},[49,74183,52344],{"class":51831},[49,74185,51838],{"class":73},[49,74187,74188],{"class":51,"line":33886},[49,74189,74190],{"class":66},"    \u002F\u002F const initData = [{\n",[49,74192,74193],{"class":51,"line":33892},[49,74194,74195],{"class":66},"    \u002F\u002F   unameId: 1,\n",[49,74197,74198],{"class":51,"line":33903},[49,74199,74200],{"class":66},"    \u002F\u002F   uname: '华晨宇',\n",[49,74202,74203],{"class":51,"line":33909},[49,74204,74205],{"class":66},"    \u002F\u002F   age: 22,\n",[49,74207,74208],{"class":51,"line":33915},[49,74209,74210],{"class":66},"    \u002F\u002F   salary: 12000,\n",[49,74212,74213],{"class":51,"line":33921},[49,74214,74215],{"class":66},"    \u002F\u002F   gender: '男',\n",[49,74217,74218],{"class":51,"line":33939},[49,74219,74220],{"class":66},"    \u002F\u002F   city: '北京',\n",[49,74222,74223],{"class":51,"line":33953},[49,74224,74225],{"class":66},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[49,74227,74228],{"class":51,"line":33962},[49,74229,74230],{"class":66},"    \u002F\u002F }]\n",[49,74232,74233],{"class":51,"line":33971},[49,74234,74235],{"class":66},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[49,74237,74238],{"class":51,"line":33980},[49,74239,74240],{"class":66},"    \u002F\u002F 1.渲染业务\n",[49,74242,74243],{"class":51,"line":33989},[49,74244,74245],{"class":66},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[49,74247,74248],{"class":51,"line":33995},[49,74249,74250],{"class":66},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[49,74252,74253],{"class":51,"line":34001},[49,74254,74255],{"class":66},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[49,74257,74258],{"class":51,"line":34009},[49,74259,399],{"emptyLinePlaceholder":398},[49,74261,74262],{"class":51,"line":34014},[49,74263,74264],{"class":66},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[49,74266,74267],{"class":51,"line":34020},[49,74268,74269],{"class":66},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[49,74271,74272,74274,74276,74278],{"class":51,"line":34031},[49,74273,11918],{"class":77},[49,74275,58226],{"class":159},[49,74277,14261],{"class":77},[49,74279,52369],{"class":73},[49,74281,74282,74285,74287],{"class":51,"line":34037},[49,74283,74284],{"class":73},"    console.",[49,74286,58778],{"class":55},[49,74288,52943],{"class":73},[49,74290,74291],{"class":51,"line":34057},[49,74292,399],{"emptyLinePlaceholder":398},[49,74294,74295],{"class":51,"line":34063},[49,74296,74297],{"class":66},"    \u002F\u002F 时间函数\n",[49,74299,74300,74302,74305],{"class":51,"line":34069},[49,74301,70615],{"class":77},[49,74303,74304],{"class":55}," getTime",[49,74306,11550],{"class":73},[49,74308,74309,74311,74314,74316,74318,74321],{"class":51,"line":34075},[49,74310,58759],{"class":77},[49,74312,74313],{"class":159}," date",[49,74315,14261],{"class":77},[49,74317,12275],{"class":77},[49,74319,74320],{"class":55}," Date",[49,74322,2674],{"class":73},[49,74324,74325,74327,74329,74331,74334,74337,74339,74341,74343,74346,74349,74351,74353,74355,74357,74359,74361,74363],{"class":51,"line":34092},[49,74326,58759],{"class":77},[49,74328,16788],{"class":159},[49,74330,14261],{"class":77},[49,74332,74333],{"class":73}," date.",[49,74335,74336],{"class":55},"getHours",[49,74338,13747],{"class":73},[49,74340,1739],{"class":77},[49,74342,2736],{"class":159},[49,74344,74345],{"class":77}," ?",[49,74347,74348],{"class":59}," '0'",[49,74350,46097],{"class":77},[49,74352,74333],{"class":73},[49,74354,74336],{"class":55},[49,74356,13747],{"class":73},[49,74358,1688],{"class":77},[49,74360,74333],{"class":73},[49,74362,74336],{"class":55},[49,74364,2674],{"class":73},[49,74366,74367,74369,74372,74374,74376,74379,74381,74383,74385,74387,74389,74391,74393,74395,74397,74399,74401,74403],{"class":51,"line":34098},[49,74368,58759],{"class":77},[49,74370,74371],{"class":159}," m",[49,74373,14261],{"class":77},[49,74375,74333],{"class":73},[49,74377,74378],{"class":55},"getMinutes",[49,74380,13747],{"class":73},[49,74382,1739],{"class":77},[49,74384,2736],{"class":159},[49,74386,74345],{"class":77},[49,74388,74348],{"class":59},[49,74390,46097],{"class":77},[49,74392,74333],{"class":73},[49,74394,74378],{"class":55},[49,74396,13747],{"class":73},[49,74398,1688],{"class":77},[49,74400,74333],{"class":73},[49,74402,74378],{"class":55},[49,74404,2674],{"class":73},[49,74406,74407,74409,74411,74413,74415,74418,74420,74422,74424,74426,74428,74430,74432,74434,74436,74438,74440,74442],{"class":51,"line":34104},[49,74408,58759],{"class":77},[49,74410,9125],{"class":159},[49,74412,14261],{"class":77},[49,74414,74333],{"class":73},[49,74416,74417],{"class":55},"getSeconds",[49,74419,13747],{"class":73},[49,74421,1739],{"class":77},[49,74423,2736],{"class":159},[49,74425,74345],{"class":77},[49,74427,74348],{"class":59},[49,74429,46097],{"class":77},[49,74431,74333],{"class":73},[49,74433,74417],{"class":55},[49,74435,13747],{"class":73},[49,74437,1688],{"class":77},[49,74439,74333],{"class":73},[49,74441,74417],{"class":55},[49,74443,2674],{"class":73},[49,74445,74446,74448,74451,74453,74455,74458,74460,74463,74465,74468,74470,74472,74475,74477,74479,74481,74483,74485,74487,74490,74492,74495,74497,74500,74502,74504,74506],{"class":51,"line":34110},[49,74447,58759],{"class":77},[49,74449,74450],{"class":159}," str",[49,74452,14261],{"class":77},[49,74454,63434],{"class":59},[49,74456,74457],{"class":73},"date",[49,74459,1387],{"class":59},[49,74461,74462],{"class":55},"getFullYear",[49,74464,3124],{"class":59},[49,74466,74467],{"class":59},"}\u002F${",[49,74469,74457],{"class":73},[49,74471,1387],{"class":59},[49,74473,74474],{"class":55},"getMonth",[49,74476,13747],{"class":59},[49,74478,1310],{"class":77},[49,74480,25807],{"class":159},[49,74482,74467],{"class":59},[49,74484,74457],{"class":73},[49,74486,1387],{"class":59},[49,74488,74489],{"class":55},"getDate",[49,74491,3124],{"class":59},[49,74493,74494],{"class":59},"} ${",[49,74496,1244],{"class":73},[49,74498,74499],{"class":59},"}:${",[49,74501,1373],{"class":73},[49,74503,74499],{"class":59},[49,74505,1524],{"class":73},[49,74507,74508],{"class":59},"}`\n",[49,74510,74511,74514],{"class":51,"line":34116},[49,74512,74513],{"class":77},"      return",[49,74515,74516],{"class":73}," str\n",[49,74518,74519],{"class":51,"line":34122},[49,74520,2885],{"class":73},[49,74522,74523],{"class":51,"line":34149},[49,74524,74525],{"class":66},"    \u002F\u002F 渲染函数\n",[49,74527,74528,74530,74532,74534,74536,74538,74540,74542],{"class":51,"line":34173},[49,74529,11918],{"class":77},[49,74531,70278],{"class":159},[49,74533,14261],{"class":77},[49,74535,54927],{"class":73},[49,74537,54930],{"class":55},[49,74539,841],{"class":73},[49,74541,70289],{"class":59},[49,74543,847],{"class":73},[49,74545,74546,74548,74550],{"class":51,"line":34179},[49,74547,70615],{"class":77},[49,74549,70618],{"class":55},[49,74551,11550],{"class":73},[49,74553,74554],{"class":51,"line":34185},[49,74555,74556],{"class":66},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[49,74558,74559],{"class":51,"line":34191},[49,74560,74561],{"class":66},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[49,74563,74564,74566,74569,74571,74573,74576,74578,74580,74582,74585,74587,74590],{"class":51,"line":34202},[49,74565,58759],{"class":77},[49,74567,74568],{"class":159}," trArr",[49,74570,14261],{"class":77},[49,74572,52496],{"class":73},[49,74574,74575],{"class":55},"map",[49,74577,841],{"class":73},[49,74579,54980],{"class":77},[49,74581,2357],{"class":73},[49,74583,74584],{"class":5913},"ele",[49,74586,13132],{"class":73},[49,74588,74589],{"class":5913},"index",[49,74591,13139],{"class":73},[49,74593,74594,74596],{"class":51,"line":34213},[49,74595,15449],{"class":77},[49,74597,70699],{"class":59},[49,74599,74600],{"class":51,"line":34219},[49,74601,74602],{"class":59},"      \u003Ctr>\n",[49,74604,74605,74607,74609,74611,74614],{"class":51,"line":34236},[49,74606,70704],{"class":59},[49,74608,74584],{"class":73},[49,74610,1387],{"class":59},[49,74612,74613],{"class":73},"unameId",[49,74615,70719],{"class":59},[49,74617,74618,74620,74622,74624,74626],{"class":51,"line":34259},[49,74619,70704],{"class":59},[49,74621,74584],{"class":73},[49,74623,1387],{"class":59},[49,74625,70735],{"class":73},[49,74627,70719],{"class":59},[49,74629,74630,74632,74634,74636,74638],{"class":51,"line":34282},[49,74631,70704],{"class":59},[49,74633,74584],{"class":73},[49,74635,1387],{"class":59},[49,74637,70752],{"class":73},[49,74639,70719],{"class":59},[49,74641,74642,74644,74646,74648,74650],{"class":51,"line":34288},[49,74643,70704],{"class":59},[49,74645,74584],{"class":73},[49,74647,1387],{"class":59},[49,74649,70769],{"class":73},[49,74651,70719],{"class":59},[49,74653,74654,74656,74658,74660,74662],{"class":51,"line":34293},[49,74655,70704],{"class":59},[49,74657,74584],{"class":73},[49,74659,1387],{"class":59},[49,74661,70786],{"class":73},[49,74663,70719],{"class":59},[49,74665,74666,74668,74670,74672,74674],{"class":51,"line":34302},[49,74667,70704],{"class":59},[49,74669,74584],{"class":73},[49,74671,1387],{"class":59},[49,74673,70803],{"class":73},[49,74675,70719],{"class":59},[49,74677,74678,74680,74682,74684,74686],{"class":51,"line":34312},[49,74679,70704],{"class":59},[49,74681,74584],{"class":73},[49,74683,1387],{"class":59},[49,74685,3085],{"class":73},[49,74687,70719],{"class":59},[49,74689,74690],{"class":51,"line":34318},[49,74691,74146],{"class":59},[49,74693,74694,74697,74699],{"class":51,"line":34323},[49,74695,74696],{"class":59},"          \u003Ca href=\"#\" data-id=\"${",[49,74698,74589],{"class":73},[49,74700,74701],{"class":59},"}\">删除\u003C\u002Fa>\n",[49,74703,74704],{"class":51,"line":34329},[49,74705,74156],{"class":59},[49,74707,74708],{"class":51,"line":34342},[49,74709,74710],{"class":59},"      \u003C\u002Ftr>\n",[49,74712,74713],{"class":51,"line":34348},[49,74714,74715],{"class":59},"  `\n",[49,74717,74718],{"class":51,"line":34359},[49,74719,65346],{"class":73},[49,74721,74722,74724,74726],{"class":51,"line":34370},[49,74723,58775],{"class":73},[49,74725,58778],{"class":55},[49,74727,74728],{"class":73},"(trArr)\n",[49,74730,74731],{"class":51,"line":34389},[49,74732,399],{"emptyLinePlaceholder":398},[49,74734,74735],{"class":51,"line":50049},[49,74736,74737],{"class":66},"      \u002F\u002F (2) 把数组转换为字符串join\n",[49,74739,74740],{"class":51,"line":50054},[49,74741,74742],{"class":66},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[49,74744,74745,74747,74749,74752,74755,74757,74760],{"class":51,"line":50063},[49,74746,70630],{"class":73},[49,74748,78],{"class":77},[49,74750,74751],{"class":73}," trArr.",[49,74753,74754],{"class":55},"join",[49,74756,841],{"class":73},[49,74758,74759],{"class":59},"''",[49,74761,847],{"class":73},[49,74763,74764],{"class":51,"line":50072},[49,74765,74766],{"class":66},"      \u002F\u002F 显示共有几条\n",[49,74768,74769,74771,74773,74775,74778,74781,74783,74785],{"class":51,"line":50077},[49,74770,56302],{"class":73},[49,74772,54930],{"class":55},[49,74774,841],{"class":73},[49,74776,74777],{"class":59},"'.total span'",[49,74779,74780],{"class":73},").innerHTML ",[49,74782,78],{"class":77},[49,74784,52496],{"class":73},[49,74786,56362],{"class":159},[49,74788,74789],{"class":51,"line":50082},[49,74790,2885],{"class":73},[49,74792,74793],{"class":51,"line":50087},[49,74794,74795],{"class":66},"    \u002F\u002F render()\n",[49,74797,74798],{"class":51,"line":50100},[49,74799,399],{"emptyLinePlaceholder":398},[49,74801,74802],{"class":51,"line":50105},[49,74803,74804],{"class":66},"    \u002F\u002F 获取DOM对象\n",[49,74806,74807,74809,74811,74813,74815,74817,74819,74821],{"class":51,"line":50114},[49,74808,11918],{"class":77},[49,74810,70352],{"class":159},[49,74812,14261],{"class":77},[49,74814,54927],{"class":73},[49,74816,54930],{"class":55},[49,74818,841],{"class":73},[49,74820,70363],{"class":59},[49,74822,847],{"class":73},[49,74824,74825,74827,74829,74831,74833,74835,74837,74839],{"class":51,"line":50123},[49,74826,11918],{"class":77},[49,74828,70179],{"class":159},[49,74830,14261],{"class":77},[49,74832,54927],{"class":73},[49,74834,54930],{"class":55},[49,74836,841],{"class":73},[49,74838,70190],{"class":59},[49,74840,847],{"class":73},[49,74842,74843,74845,74847,74849,74851,74853,74855,74857],{"class":51,"line":50140},[49,74844,11918],{"class":77},[49,74846,16386],{"class":159},[49,74848,14261],{"class":77},[49,74850,54927],{"class":73},[49,74852,54930],{"class":55},[49,74854,841],{"class":73},[49,74856,70209],{"class":59},[49,74858,847],{"class":73},[49,74860,74862,74864,74866,74868,74870,74872,74874,74876],{"class":51,"line":74861},231,[49,74863,11918],{"class":77},[49,74865,70238],{"class":159},[49,74867,14261],{"class":77},[49,74869,54927],{"class":73},[49,74871,54930],{"class":55},[49,74873,841],{"class":73},[49,74875,70249],{"class":59},[49,74877,847],{"class":73},[49,74879,74881,74883,74885,74887,74889,74891,74893,74895],{"class":51,"line":74880},232,[49,74882,11918],{"class":77},[49,74884,70218],{"class":159},[49,74886,14261],{"class":77},[49,74888,54927],{"class":73},[49,74890,54930],{"class":55},[49,74892,841],{"class":73},[49,74894,70229],{"class":59},[49,74896,847],{"class":73},[49,74898,74900,74902,74904,74906,74908,74910,74912,74914],{"class":51,"line":74899},233,[49,74901,11918],{"class":77},[49,74903,70258],{"class":159},[49,74905,14261],{"class":77},[49,74907,54927],{"class":73},[49,74909,54930],{"class":55},[49,74911,841],{"class":73},[49,74913,70269],{"class":59},[49,74915,847],{"class":73},[49,74917,74919],{"class":51,"line":74918},234,[49,74920,399],{"emptyLinePlaceholder":398},[49,74922,74924],{"class":51,"line":74923},235,[49,74925,74926],{"class":66},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[49,74928,74930,74932,74934,74936,74938,74940,74942,74944,74946],{"class":51,"line":74929},236,[49,74931,70370],{"class":73},[49,74933,58344],{"class":55},[49,74935,841],{"class":73},[49,74937,70377],{"class":59},[49,74939,13132],{"class":73},[49,74941,54980],{"class":77},[49,74943,2357],{"class":73},[49,74945,912],{"class":5913},[49,74947,13139],{"class":73},[49,74949,74951],{"class":51,"line":74950},237,[49,74952,74953],{"class":66},"      \u002F\u002F 禁止浏览器跳转\n",[49,74955,74957,74959,74961],{"class":51,"line":74956},238,[49,74958,70397],{"class":73},[49,74960,70400],{"class":55},[49,74962,2674],{"class":73},[49,74964,74966],{"class":51,"line":74965},239,[49,74967,74968],{"class":66},"      \u002F\u002F 非空判断\n",[49,74970,74972],{"class":51,"line":74971},240,[49,74973,74974],{"class":66},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[49,74976,74978],{"class":51,"line":74977},241,[49,74979,74980],{"class":66},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[49,74982,74984,74986,74988,74990,74993,74995,74998,75001,75003,75005],{"class":51,"line":74983},242,[49,74985,55011],{"class":77},[49,74987,2357],{"class":73},[49,74989,1056],{"class":77},[49,74991,74992],{"class":73},"uname.value ",[49,74994,71888],{"class":77},[49,74996,74997],{"class":77}," !",[49,74999,75000],{"class":73},"age.value ",[49,75002,71888],{"class":77},[49,75004,74997],{"class":77},[49,75006,75007],{"class":73},"salary.value) {\n",[49,75009,75011,75013,75015,75017,75019],{"class":51,"line":75010},243,[49,75012,15449],{"class":77},[49,75014,70471],{"class":55},[49,75016,841],{"class":73},[49,75018,70476],{"class":59},[49,75020,847],{"class":73},[49,75022,75024],{"class":51,"line":75023},244,[49,75025,52929],{"class":73},[49,75027,75029,75031,75033],{"class":51,"line":75028},245,[49,75030,58538],{"class":73},[49,75032,52415],{"class":55},[49,75034,75035],{"class":73},"({\n",[49,75037,75039],{"class":51,"line":75038},246,[49,75040,75041],{"class":66},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[49,75043,75045],{"class":51,"line":75044},247,[49,75046,75047],{"class":66},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[49,75049,75051],{"class":51,"line":75050},248,[49,75052,75053],{"class":66},"        \u002F\u002F 对象的序号应为数组长度+1\n",[49,75055,75057],{"class":51,"line":75056},249,[49,75058,75059],{"class":66},"        \u002F\u002F unameId: arr.length + 1,\n",[49,75061,75063],{"class":51,"line":75062},250,[49,75064,399],{"emptyLinePlaceholder":398},[49,75066,75068],{"class":51,"line":75067},251,[49,75069,75070],{"class":66},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[49,75072,75074],{"class":51,"line":75073},252,[49,75075,75076],{"class":66},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[49,75078,75080],{"class":51,"line":75079},253,[49,75081,75082],{"class":66},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[49,75084,75086],{"class":51,"line":75085},254,[49,75087,75088],{"class":66},"        \u002F\u002F 0当假看\n",[49,75090,75092,75095,75097,75099,75102,75104,75106,75108,75111,75113,75115,75118,75120],{"class":51,"line":75091},255,[49,75093,75094],{"class":73},"        unameId: arr.",[49,75096,52499],{"class":159},[49,75098,74345],{"class":77},[49,75100,75101],{"class":73}," arr[arr.",[49,75103,52499],{"class":159},[49,75105,52802],{"class":77},[49,75107,25807],{"class":159},[49,75109,75110],{"class":73},"].unameId ",[49,75112,1310],{"class":77},[49,75114,25807],{"class":159},[49,75116,75117],{"class":77}," :",[49,75119,25807],{"class":159},[49,75121,31997],{"class":73},[49,75123,75125],{"class":51,"line":75124},256,[49,75126,70524],{"class":73},[49,75128,75130],{"class":51,"line":75129},257,[49,75131,70529],{"class":73},[49,75133,75135],{"class":51,"line":75134},258,[49,75136,70539],{"class":73},[49,75138,75140],{"class":51,"line":75139},259,[49,75141,70534],{"class":73},[49,75143,75145],{"class":51,"line":75144},260,[49,75146,75147],{"class":73},"        city: city.value,\n",[49,75149,75151],{"class":51,"line":75150},261,[49,75152,75153],{"class":66},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[49,75155,75157],{"class":51,"line":75156},262,[49,75158,75159],{"class":66},"        \u002F\u002F time: new Date().toDateString()\n",[49,75161,75163,75166,75169],{"class":51,"line":75162},263,[49,75164,75165],{"class":73},"        time: ",[49,75167,75168],{"class":55},"getTime",[49,75170,2674],{"class":73},[49,75172,75174],{"class":51,"line":75173},264,[49,75175,65346],{"class":73},[49,75177,75179],{"class":51,"line":75178},265,[49,75180,75181],{"class":66},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[49,75183,75185,75187],{"class":51,"line":75184},266,[49,75186,70599],{"class":55},[49,75188,2674],{"class":73},[49,75190,75192,75194,75196,75198,75200],{"class":51,"line":75191},267,[49,75193,70582],{"class":159},[49,75195,1387],{"class":73},[49,75197,70587],{"class":55},[49,75199,13747],{"class":73},[49,75201,75202],{"class":66},"\u002F\u002F重置表单\n",[49,75204,75206],{"class":51,"line":75205},268,[49,75207,75208],{"class":66},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[49,75210,75212,75215,75217,75219,75222,75224,75226,75228,75230],{"class":51,"line":75211},269,[49,75213,75214],{"class":73},"      localStorage.",[49,75216,72185],{"class":55},[49,75218,841],{"class":73},[49,75220,75221],{"class":59},"'data'",[49,75223,13132],{"class":73},[49,75225,72195],{"class":159},[49,75227,1387],{"class":73},[49,75229,72200],{"class":55},[49,75231,75232],{"class":73},"(arr))\n",[49,75234,75236],{"class":51,"line":75235},270,[49,75237,33992],{"class":73},[49,75239,75241],{"class":51,"line":75240},271,[49,75242,399],{"emptyLinePlaceholder":398},[49,75244,75246],{"class":51,"line":75245},272,[49,75247,75248],{"class":66},"    \u002F\u002F 3.删除业务\n",[49,75250,75252],{"class":51,"line":75251},273,[49,75253,75254],{"class":66},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[49,75256,75258,75260,75262,75264,75266,75268,75270,75272,75274],{"class":51,"line":75257},274,[49,75259,70872],{"class":73},[49,75261,58344],{"class":55},[49,75263,841],{"class":73},[49,75265,58349],{"class":59},[49,75267,13132],{"class":73},[49,75269,54980],{"class":77},[49,75271,2357],{"class":73},[49,75273,912],{"class":5913},[49,75275,13139],{"class":73},[49,75277,75279],{"class":51,"line":75278},275,[49,75280,75281],{"class":66},"      \u002F\u002F 判断是否点击的是删除按钮\n",[49,75283,75285,75287,75289,75291,75293],{"class":51,"line":75284},276,[49,75286,55011],{"class":77},[49,75288,67565],{"class":73},[49,75290,55017],{"class":77},[49,75292,68787],{"class":59},[49,75294,13139],{"class":73},[49,75296,75298],{"class":51,"line":75297},277,[49,75299,75300],{"class":66},"        \u002F\u002F alert(1)\n",[49,75302,75304],{"class":51,"line":75303},278,[49,75305,75306],{"class":66},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[49,75308,75310],{"class":51,"line":75309},279,[49,75311,75312],{"class":66},"        \u002F\u002F console.log(e.target)\n",[49,75314,75316],{"class":51,"line":75315},280,[49,75317,75318],{"class":66},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[49,75320,75322],{"class":51,"line":75321},281,[49,75323,399],{"emptyLinePlaceholder":398},[49,75325,75327],{"class":51,"line":75326},282,[49,75328,75329],{"class":66},"        \u002F\u002F 确认框，确然是否真的要删除\n",[49,75331,75333],{"class":51,"line":75332},283,[49,75334,75335],{"class":66},"        \u002F\u002F confirm()为确认框\n",[49,75337,75339],{"class":51,"line":75338},284,[49,75340,75341],{"class":66},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[49,75343,75345,75347,75349,75352,75354,75357],{"class":51,"line":75344},285,[49,75346,3194],{"class":77},[49,75348,2357],{"class":73},[49,75350,75351],{"class":55},"confirm",[49,75353,841],{"class":73},[49,75355,75356],{"class":59},"'您确定要删除这条数据吗？'",[49,75358,75359],{"class":73},")) {\n",[49,75361,75363,75366,75368,75370,75372],{"class":51,"line":75362},286,[49,75364,75365],{"class":73},"          arr.",[49,75367,58541],{"class":55},[49,75369,70925],{"class":73},[49,75371,1047],{"class":159},[49,75373,847],{"class":73},[49,75375,75377],{"class":51,"line":75376},287,[49,75378,75379],{"class":66},"          \u002F\u002F 3.4 重新渲染页面\n",[49,75381,75383,75386],{"class":51,"line":75382},288,[49,75384,75385],{"class":55},"          render",[49,75387,2674],{"class":73},[49,75389,75391],{"class":51,"line":75390},289,[49,75392,75393],{"class":66},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[49,75395,75397,75400,75402,75404,75406,75408,75410,75412,75414],{"class":51,"line":75396},290,[49,75398,75399],{"class":73},"          localStorage.",[49,75401,72185],{"class":55},[49,75403,841],{"class":73},[49,75405,75221],{"class":59},[49,75407,13132],{"class":73},[49,75409,72195],{"class":159},[49,75411,1387],{"class":73},[49,75413,72200],{"class":55},[49,75415,75232],{"class":73},[49,75417,75419],{"class":51,"line":75418},291,[49,75420,3226],{"class":73},[49,75422,75424],{"class":51,"line":75423},292,[49,75425,52929],{"class":73},[49,75427,75429],{"class":51,"line":75428},293,[49,75430,399],{"emptyLinePlaceholder":398},[49,75432,75434],{"class":51,"line":75433},294,[49,75435,33992],{"class":73},[49,75437,75439],{"class":51,"line":75438},295,[49,75440,399],{"emptyLinePlaceholder":398},[49,75442,75444,75446,75448],{"class":51,"line":75443},296,[49,75445,52948],{"class":73},[49,75447,52344],{"class":51831},[49,75449,51838],{"class":73},[49,75451,75453,75455,75457],{"class":51,"line":75452},297,[49,75454,52316],{"class":73},[49,75456,52331],{"class":51831},[49,75458,51838],{"class":73},[49,75460,75462],{"class":51,"line":75461},298,[49,75463,399],{"emptyLinePlaceholder":398},[49,75465,75467,75469,75471],{"class":51,"line":75466},299,[49,75468,52316],{"class":73},[49,75470,51166],{"class":51831},[49,75472,51838],{"class":73},[782,75474,75476],{"id":75475},"_36-正则表达式","3.6 正则表达式",[14,75478,75479],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75481,75482],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75484,75485],{},"正则表达式的作用：",[742,75487,75488,75495,75501],{},[33,75489,75490,75491,75494],{},"表单验证（ ",[112,75492,75493],{},"匹配"," ）",[33,75496,75497,75498,75494],{},"过滤敏感词（ ",[112,75499,75500],{},"替换",[33,75502,75503,75504,75494],{},"字符串中提取我们想要的部分（ ",[112,75505,75506],{},"提取",[18,75508,75510],{"id":75509},"_361-语法","3.6.1 语法",[14,75512,75513],{},"正则表达式使用步骤：",[30,75515,75516,75519],{},[33,75517,75518],{},"定义规则",[33,75520,75521],{},"查找是否匹配",[14,75523,75524],{},"正则表达式里边不需要写引号",[14,75526,75527],{},[25,75528],{"alt":27,"src":75529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75531,75532],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75534,75535],{},"reg.test(str)",[14,75537,75538],{},[25,75539],{"alt":27,"src":75540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75542,75543],{},[25,75544],{"alt":27,"src":75545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[18,75547,75549],{"id":75548},"_362-元字符","3.6.2 元字符",[30,75551,75552,75555,75558,75561,75568],{},[33,75553,75554],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[33,75556,75557],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[33,75559,75560],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[33,75562,75563,75564],{},"正则验证工具：",[124,75565,75566],{"href":75566,"rel":75567},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[128],[33,75569,75570],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[130,75572,75574],{"id":75573},"_3621-边界符","3.6.2.1 边界符",[14,75576,75577],{},[25,75578],{"alt":27,"src":75579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75581,75582],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75584,75585],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75587,75588],{},"只匹配一次",[14,75590,75591],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[130,75593,75595],{"id":75594},"_3622-量词","3.6.2.2 量词",[14,75597,75598],{},[25,75599],{"alt":27,"src":75600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75602,75603],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[130,75605,75607],{"id":75606},"_3623-元字符","3.6.2.3 元字符",[14,75609,75610],{},[25,75611],{"alt":27,"src":75612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75614,75615],{},"匹配的是a或b或c []只选一个",[14,75617,75618],{},[25,75619],{"alt":27,"src":75620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75622,75623],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75625,75626],{},[25,75627],{"alt":27,"src":75628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75630,75631],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75633,75634],{},[25,75635],{"alt":27,"src":75636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[40,75638,75640],{"className":51164,"code":75639,"language":51166,"meta":27,"style":27},"\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",[46,75641,75642,75652,75666,75670,75678,75692,75712,75724,75732,75736,75744,75752,75757,75788,75815,75843,75847,75852,75880,75911,75916,75921,75952,75984,76016,76020,76025,76056,76086,76116,76120,76125,76156,76187,76217,76247,76251,76256,76289,76293,76298,76329,76360,76364,76369,76400,76430,76461,76465,76470,76502,76533,76564,76591,76622,76654,76687,76718,76749,76781,76812,76820,76828,76832],{"__ignoreMap":27},[49,75643,75644,75646,75648,75650],{"class":51,"line":52},[49,75645,51828],{"class":73},[49,75647,51832],{"class":51831},[49,75649,51835],{"class":55},[49,75651,51838],{"class":73},[49,75653,75654,75656,75658,75660,75662,75664],{"class":51,"line":63},[49,75655,1739],{"class":73},[49,75657,51166],{"class":51831},[49,75659,51847],{"class":55},[49,75661,78],{"class":73},[49,75663,51852],{"class":59},[49,75665,51838],{"class":73},[49,75667,75668],{"class":51,"line":70},[49,75669,399],{"emptyLinePlaceholder":398},[49,75671,75672,75674,75676],{"class":51,"line":219},[49,75673,1739],{"class":73},[49,75675,51865],{"class":51831},[49,75677,51838],{"class":73},[49,75679,75680,75682,75684,75686,75688,75690],{"class":51,"line":233},[49,75681,52675],{"class":73},[49,75683,51875],{"class":51831},[49,75685,51878],{"class":55},[49,75687,78],{"class":73},[49,75689,51883],{"class":59},[49,75691,51838],{"class":73},[49,75693,75694,75696,75698,75700,75702,75704,75706,75708,75710],{"class":51,"line":241},[49,75695,52675],{"class":73},[49,75697,51875],{"class":51831},[49,75699,15617],{"class":55},[49,75701,78],{"class":73},[49,75703,51922],{"class":59},[49,75705,51902],{"class":55},[49,75707,78],{"class":73},[49,75709,51929],{"class":59},[49,75711,51838],{"class":73},[49,75713,75714,75716,75718,75720,75722],{"class":51,"line":1920},[49,75715,52675],{"class":73},[49,75717,51938],{"class":51831},[49,75719,51941],{"class":73},[49,75721,51938],{"class":51831},[49,75723,51838],{"class":73},[49,75725,75726,75728,75730],{"class":51,"line":2011},[49,75727,52316],{"class":73},[49,75729,51865],{"class":51831},[49,75731,51838],{"class":73},[49,75733,75734],{"class":51,"line":2017},[49,75735,399],{"emptyLinePlaceholder":398},[49,75737,75738,75740,75742],{"class":51,"line":2029},[49,75739,1739],{"class":73},[49,75741,52331],{"class":51831},[49,75743,51838],{"class":73},[49,75745,75746,75748,75750],{"class":51,"line":2311},[49,75747,52675],{"class":73},[49,75749,52344],{"class":51831},[49,75751,51838],{"class":73},[49,75753,75754],{"class":51,"line":2316},[49,75755,75756],{"class":66},"    \u002F\u002F 元字符中\n",[49,75758,75759,75761,75763,75765,75767,75770,75772,75774,75777,75779,75782,75785],{"class":51,"line":2322},[49,75760,74284],{"class":73},[49,75762,58778],{"class":55},[49,75764,841],{"class":73},[49,75766,1413],{"class":59},[49,75768,75769],{"class":48508},"哈",[49,75771,1413],{"class":59},[49,75773,1387],{"class":73},[49,75775,75776],{"class":55},"test",[49,75778,841],{"class":73},[49,75780,75781],{"class":59},"'哈'",[49,75783,75784],{"class":73},"))  ",[49,75786,75787],{"class":66},"\u002F\u002Ftrue\n",[49,75789,75790,75792,75794,75796,75798,75800,75802,75804,75806,75808,75811,75813],{"class":51,"line":2327},[49,75791,74284],{"class":73},[49,75793,58778],{"class":55},[49,75795,841],{"class":73},[49,75797,1413],{"class":59},[49,75799,75769],{"class":48508},[49,75801,1413],{"class":59},[49,75803,1387],{"class":73},[49,75805,75776],{"class":55},[49,75807,841],{"class":73},[49,75809,75810],{"class":59},"'哈哈'",[49,75812,75784],{"class":73},[49,75814,75787],{"class":66},[49,75816,75817,75819,75821,75823,75825,75827,75829,75831,75833,75835,75838,75841],{"class":51,"line":2341},[49,75818,74284],{"class":73},[49,75820,58778],{"class":55},[49,75822,841],{"class":73},[49,75824,1413],{"class":59},[49,75826,75769],{"class":48508},[49,75828,1413],{"class":59},[49,75830,1387],{"class":73},[49,75832,75776],{"class":55},[49,75834,841],{"class":73},[49,75836,75837],{"class":59},"'二哈'",[49,75839,75840],{"class":73},"))   ",[49,75842,75787],{"class":66},[49,75844,75845],{"class":51,"line":2346},[49,75846,399],{"emptyLinePlaceholder":398},[49,75848,75849],{"class":51,"line":2352},[49,75850,75851],{"class":66},"    \u002F\u002F 1.边界符\n",[49,75853,75854,75856,75858,75860,75862,75864,75866,75868,75870,75872,75874,75876,75878],{"class":51,"line":2373},[49,75855,74284],{"class":73},[49,75857,58778],{"class":55},[49,75859,841],{"class":73},[49,75861,1413],{"class":59},[49,75863,1795],{"class":77},[49,75865,75769],{"class":48508},[49,75867,1413],{"class":59},[49,75869,1387],{"class":73},[49,75871,75776],{"class":55},[49,75873,841],{"class":73},[49,75875,75781],{"class":59},[49,75877,75784],{"class":73},[49,75879,75787],{"class":66},[49,75881,75882,75884,75886,75888,75890,75892,75894,75896,75898,75900,75902,75904,75906,75908],{"class":51,"line":2378},[49,75883,74284],{"class":73},[49,75885,58778],{"class":55},[49,75887,841],{"class":73},[49,75889,1413],{"class":59},[49,75891,1795],{"class":77},[49,75893,75769],{"class":48508},[49,75895,1131],{"class":77},[49,75897,1413],{"class":59},[49,75899,1387],{"class":73},[49,75901,75776],{"class":55},[49,75903,841],{"class":73},[49,75905,75810],{"class":59},[49,75907,75784],{"class":73},[49,75909,75910],{"class":66},"\u002F\u002Ffalse\n",[49,75912,75913],{"class":51,"line":2392},[49,75914,75915],{"class":66},"    \u002F\u002F 2.量词\n",[49,75917,75918],{"class":51,"line":2397},[49,75919,75920],{"class":66},"    \u002F\u002F 量词 * 类似于 >= 0\n",[49,75922,75923,75925,75927,75929,75931,75933,75935,75938,75940,75942,75944,75946,75948,75950],{"class":51,"line":2426},[49,75924,74284],{"class":73},[49,75926,58778],{"class":55},[49,75928,841],{"class":73},[49,75930,1413],{"class":59},[49,75932,1795],{"class":77},[49,75934,75769],{"class":48508},[49,75936,75937],{"class":77},"*$",[49,75939,1413],{"class":59},[49,75941,1387],{"class":73},[49,75943,75776],{"class":55},[49,75945,841],{"class":73},[49,75947,75810],{"class":59},[49,75949,75784],{"class":73},[49,75951,75787],{"class":66},[49,75953,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972,75974,75976,75979,75981],{"class":51,"line":2431},[49,75955,74284],{"class":73},[49,75957,58778],{"class":55},[49,75959,841],{"class":73},[49,75961,1413],{"class":59},[49,75963,1795],{"class":77},[49,75965,75769],{"class":48508},[49,75967,75937],{"class":77},[49,75969,1413],{"class":59},[49,75971,1387],{"class":73},[49,75973,75776],{"class":55},[49,75975,841],{"class":73},[49,75977,75978],{"class":59},"'二哈好傻'",[49,75980,75784],{"class":73},[49,75982,75983],{"class":66},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[49,75985,75986,75988,75990,75992,75994,75996,75998,76000,76002,76004,76006,76008,76011,76013],{"class":51,"line":2448},[49,75987,74284],{"class":73},[49,75989,58778],{"class":55},[49,75991,841],{"class":73},[49,75993,1413],{"class":59},[49,75995,1795],{"class":77},[49,75997,75769],{"class":48508},[49,75999,75937],{"class":77},[49,76001,1413],{"class":59},[49,76003,1387],{"class":73},[49,76005,75776],{"class":55},[49,76007,841],{"class":73},[49,76009,76010],{"class":59},"'哈好哈'",[49,76012,75840],{"class":73},[49,76014,76015],{"class":66},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[49,76017,76018],{"class":51,"line":2453},[49,76019,399],{"emptyLinePlaceholder":398},[49,76021,76022],{"class":51,"line":2458},[49,76023,76024],{"class":66},"    \u002F\u002F +类似于>=1\n",[49,76026,76027,76029,76031,76033,76035,76037,76039,76042,76044,76046,76048,76050,76052,76054],{"class":51,"line":2463},[49,76028,74284],{"class":73},[49,76030,58778],{"class":55},[49,76032,841],{"class":73},[49,76034,1413],{"class":59},[49,76036,1795],{"class":77},[49,76038,75769],{"class":48508},[49,76040,76041],{"class":77},"+$",[49,76043,1413],{"class":59},[49,76045,1387],{"class":73},[49,76047,75776],{"class":55},[49,76049,841],{"class":73},[49,76051,75810],{"class":59},[49,76053,75784],{"class":73},[49,76055,75787],{"class":66},[49,76057,76058,76060,76062,76064,76066,76068,76070,76072,76074,76076,76078,76080,76082,76084],{"class":51,"line":2477},[49,76059,74284],{"class":73},[49,76061,58778],{"class":55},[49,76063,841],{"class":73},[49,76065,1413],{"class":59},[49,76067,1795],{"class":77},[49,76069,75769],{"class":48508},[49,76071,76041],{"class":77},[49,76073,1413],{"class":59},[49,76075,1387],{"class":73},[49,76077,75776],{"class":55},[49,76079,841],{"class":73},[49,76081,75978],{"class":59},[49,76083,75784],{"class":73},[49,76085,75983],{"class":66},[49,76087,76088,76090,76092,76094,76096,76098,76100,76102,76104,76106,76108,76110,76112,76114],{"class":51,"line":2482},[49,76089,74284],{"class":73},[49,76091,58778],{"class":55},[49,76093,841],{"class":73},[49,76095,1413],{"class":59},[49,76097,1795],{"class":77},[49,76099,75769],{"class":48508},[49,76101,76041],{"class":77},[49,76103,1413],{"class":59},[49,76105,1387],{"class":73},[49,76107,75776],{"class":55},[49,76109,841],{"class":73},[49,76111,76010],{"class":59},[49,76113,75840],{"class":73},[49,76115,75910],{"class":66},[49,76117,76118],{"class":51,"line":3274},[49,76119,399],{"emptyLinePlaceholder":398},[49,76121,76122],{"class":51,"line":3288},[49,76123,76124],{"class":66},"    \u002F\u002F ?类似于0次或一次\n",[49,76126,76127,76129,76131,76133,76135,76137,76140,76142,76144,76146,76148,76150,76152,76154],{"class":51,"line":3296},[49,76128,74284],{"class":73},[49,76130,58778],{"class":55},[49,76132,841],{"class":73},[49,76134,1413],{"class":59},[49,76136,1795],{"class":77},[49,76138,76139],{"class":48508},"哈？",[49,76141,1131],{"class":77},[49,76143,1413],{"class":59},[49,76145,1387],{"class":73},[49,76147,75776],{"class":55},[49,76149,841],{"class":73},[49,76151,74759],{"class":59},[49,76153,75840],{"class":73},[49,76155,75787],{"class":66},[49,76157,76158,76160,76162,76164,76166,76168,76170,76173,76175,76177,76179,76181,76183,76185],{"class":51,"line":3301},[49,76159,74284],{"class":73},[49,76161,58778],{"class":55},[49,76163,841],{"class":73},[49,76165,1413],{"class":59},[49,76167,1795],{"class":77},[49,76169,75769],{"class":48508},[49,76171,76172],{"class":77},"?$",[49,76174,1413],{"class":59},[49,76176,1387],{"class":73},[49,76178,75776],{"class":55},[49,76180,841],{"class":73},[49,76182,75810],{"class":59},[49,76184,75784],{"class":73},[49,76186,75910],{"class":66},[49,76188,76189,76191,76193,76195,76197,76199,76201,76203,76205,76207,76209,76211,76213,76215],{"class":51,"line":3307},[49,76190,74284],{"class":73},[49,76192,58778],{"class":55},[49,76194,841],{"class":73},[49,76196,1413],{"class":59},[49,76198,1795],{"class":77},[49,76200,75769],{"class":48508},[49,76202,76172],{"class":77},[49,76204,1413],{"class":59},[49,76206,1387],{"class":73},[49,76208,75776],{"class":55},[49,76210,841],{"class":73},[49,76212,75978],{"class":59},[49,76214,75784],{"class":73},[49,76216,75983],{"class":66},[49,76218,76219,76221,76223,76225,76227,76229,76231,76233,76235,76237,76239,76241,76243,76245],{"class":51,"line":3313},[49,76220,74284],{"class":73},[49,76222,58778],{"class":55},[49,76224,841],{"class":73},[49,76226,1413],{"class":59},[49,76228,1795],{"class":77},[49,76230,75769],{"class":48508},[49,76232,76172],{"class":77},[49,76234,1413],{"class":59},[49,76236,1387],{"class":73},[49,76238,75776],{"class":55},[49,76240,841],{"class":73},[49,76242,76010],{"class":59},[49,76244,75784],{"class":73},[49,76246,75910],{"class":66},[49,76248,76249],{"class":51,"line":3318},[49,76250,399],{"emptyLinePlaceholder":398},[49,76252,76253],{"class":51,"line":8645},[49,76254,76255],{"class":66},"    \u002F\u002F {n}写几，就必须出现几次\n",[49,76257,76258,76260,76262,76264,76266,76268,76270,76273,76275,76277,76279,76281,76284,76287],{"class":51,"line":8669},[49,76259,74284],{"class":73},[49,76261,58778],{"class":55},[49,76263,841],{"class":73},[49,76265,1413],{"class":59},[49,76267,1795],{"class":77},[49,76269,75769],{"class":48508},[49,76271,76272],{"class":77},"{4}$",[49,76274,1413],{"class":59},[49,76276,1387],{"class":73},[49,76278,75776],{"class":55},[49,76280,841],{"class":73},[49,76282,76283],{"class":59},"'哈哈哈哈'",[49,76285,76286],{"class":73},")) ",[49,76288,75787],{"class":66},[49,76290,76291],{"class":51,"line":8674},[49,76292,399],{"emptyLinePlaceholder":398},[49,76294,76295],{"class":51,"line":8680},[49,76296,76297],{"class":66},"    \u002F\u002F {n,}大于等于n次\n",[49,76299,76300,76302,76304,76306,76308,76310,76312,76315,76317,76319,76321,76323,76325,76327],{"class":51,"line":8707},[49,76301,74284],{"class":73},[49,76303,58778],{"class":55},[49,76305,841],{"class":73},[49,76307,1413],{"class":59},[49,76309,1795],{"class":77},[49,76311,75769],{"class":48508},[49,76313,76314],{"class":77},"{4,}$",[49,76316,1413],{"class":59},[49,76318,1387],{"class":73},[49,76320,75776],{"class":55},[49,76322,841],{"class":73},[49,76324,76283],{"class":59},[49,76326,76286],{"class":73},[49,76328,75787],{"class":66},[49,76330,76331,76333,76335,76337,76339,76341,76343,76345,76347,76349,76351,76353,76356,76358],{"class":51,"line":8712},[49,76332,74284],{"class":73},[49,76334,58778],{"class":55},[49,76336,841],{"class":73},[49,76338,1413],{"class":59},[49,76340,1795],{"class":77},[49,76342,75769],{"class":48508},[49,76344,76314],{"class":77},[49,76346,1413],{"class":59},[49,76348,1387],{"class":73},[49,76350,75776],{"class":55},[49,76352,841],{"class":73},[49,76354,76355],{"class":59},"'哈哈哈哈哈'",[49,76357,76286],{"class":73},[49,76359,75787],{"class":66},[49,76361,76362],{"class":51,"line":8718},[49,76363,399],{"emptyLinePlaceholder":398},[49,76365,76366],{"class":51,"line":8730},[49,76367,76368],{"class":66},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[49,76370,76371,76373,76375,76377,76379,76381,76383,76386,76388,76390,76392,76394,76396,76398],{"class":51,"line":8742},[49,76372,74284],{"class":73},[49,76374,58778],{"class":55},[49,76376,841],{"class":73},[49,76378,1413],{"class":59},[49,76380,1795],{"class":77},[49,76382,75769],{"class":48508},[49,76384,76385],{"class":77},"{4,6}$",[49,76387,1413],{"class":59},[49,76389,1387],{"class":73},[49,76391,75776],{"class":55},[49,76393,841],{"class":73},[49,76395,76283],{"class":59},[49,76397,76286],{"class":73},[49,76399,75787],{"class":66},[49,76401,76402,76404,76406,76408,76410,76412,76414,76416,76418,76420,76422,76424,76426,76428],{"class":51,"line":8754},[49,76403,74284],{"class":73},[49,76405,58778],{"class":55},[49,76407,841],{"class":73},[49,76409,1413],{"class":59},[49,76411,1795],{"class":77},[49,76413,75769],{"class":48508},[49,76415,76385],{"class":77},[49,76417,1413],{"class":59},[49,76419,1387],{"class":73},[49,76421,75776],{"class":55},[49,76423,841],{"class":73},[49,76425,76355],{"class":59},[49,76427,76286],{"class":73},[49,76429,75787],{"class":66},[49,76431,76432,76434,76436,76438,76440,76442,76444,76446,76448,76450,76452,76454,76457,76459],{"class":51,"line":10413},[49,76433,74284],{"class":73},[49,76435,58778],{"class":55},[49,76437,841],{"class":73},[49,76439,1413],{"class":59},[49,76441,1795],{"class":77},[49,76443,75769],{"class":48508},[49,76445,76385],{"class":77},[49,76447,1413],{"class":59},[49,76449,1387],{"class":73},[49,76451,75776],{"class":55},[49,76453,841],{"class":73},[49,76455,76456],{"class":59},"'哈哈哈哈哈哈哈'",[49,76458,76286],{"class":73},[49,76460,75910],{"class":66},[49,76462,76463],{"class":51,"line":10438},[49,76464,399],{"emptyLinePlaceholder":398},[49,76466,76467],{"class":51,"line":10461},[49,76468,76469],{"class":66},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[49,76471,76472,76474,76476,76478,76480,76482,76485,76487,76489,76491,76493,76495,76498,76500],{"class":51,"line":10485},[49,76473,74284],{"class":73},[49,76475,58778],{"class":55},[49,76477,841],{"class":73},[49,76479,1413],{"class":59},[49,76481,1795],{"class":77},[49,76483,76484],{"class":159},"[abc]",[49,76486,1131],{"class":77},[49,76488,1413],{"class":59},[49,76490,1387],{"class":73},[49,76492,75776],{"class":55},[49,76494,841],{"class":73},[49,76496,76497],{"class":59},"'a'",[49,76499,75784],{"class":73},[49,76501,75787],{"class":66},[49,76503,76504,76506,76508,76510,76512,76514,76516,76518,76520,76522,76524,76526,76529,76531],{"class":51,"line":10490},[49,76505,74284],{"class":73},[49,76507,58778],{"class":55},[49,76509,841],{"class":73},[49,76511,1413],{"class":59},[49,76513,1795],{"class":77},[49,76515,76484],{"class":159},[49,76517,1131],{"class":77},[49,76519,1413],{"class":59},[49,76521,1387],{"class":73},[49,76523,75776],{"class":55},[49,76525,841],{"class":73},[49,76527,76528],{"class":59},"'b'",[49,76530,75784],{"class":73},[49,76532,75787],{"class":66},[49,76534,76535,76537,76539,76541,76543,76545,76547,76549,76551,76553,76555,76557,76560,76562],{"class":51,"line":10495},[49,76536,74284],{"class":73},[49,76538,58778],{"class":55},[49,76540,841],{"class":73},[49,76542,1413],{"class":59},[49,76544,1795],{"class":77},[49,76546,76484],{"class":159},[49,76548,1131],{"class":77},[49,76550,1413],{"class":59},[49,76552,1387],{"class":73},[49,76554,75776],{"class":55},[49,76556,841],{"class":73},[49,76558,76559],{"class":59},"'c'",[49,76561,75784],{"class":73},[49,76563,75787],{"class":66},[49,76565,76566,76568,76570,76572,76574,76576,76578,76580,76582,76584,76587,76589],{"class":51,"line":10500},[49,76567,74284],{"class":73},[49,76569,58778],{"class":55},[49,76571,841],{"class":73},[49,76573,1413],{"class":59},[49,76575,76484],{"class":159},[49,76577,1413],{"class":59},[49,76579,1387],{"class":73},[49,76581,75776],{"class":55},[49,76583,841],{"class":73},[49,76585,76586],{"class":59},"'ab'",[49,76588,75784],{"class":73},[49,76590,75787],{"class":66},[49,76592,76593,76595,76597,76599,76601,76603,76605,76607,76609,76611,76613,76615,76617,76619],{"class":51,"line":10509},[49,76594,74284],{"class":73},[49,76596,58778],{"class":55},[49,76598,841],{"class":73},[49,76600,1413],{"class":59},[49,76602,1795],{"class":77},[49,76604,76484],{"class":159},[49,76606,1131],{"class":77},[49,76608,1413],{"class":59},[49,76610,1387],{"class":73},[49,76612,75776],{"class":55},[49,76614,841],{"class":73},[49,76616,76586],{"class":59},[49,76618,75784],{"class":73},[49,76620,76621],{"class":66},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[49,76623,76624,76626,76628,76630,76632,76634,76636,76639,76641,76643,76645,76647,76649,76651],{"class":51,"line":10514},[49,76625,74284],{"class":73},[49,76627,58778],{"class":55},[49,76629,841],{"class":73},[49,76631,1413],{"class":59},[49,76633,1795],{"class":77},[49,76635,76484],{"class":159},[49,76637,76638],{"class":77},"{2}$",[49,76640,1413],{"class":59},[49,76642,1387],{"class":73},[49,76644,75776],{"class":55},[49,76646,841],{"class":73},[49,76648,76586],{"class":59},[49,76650,75784],{"class":73},[49,76652,76653],{"class":66},"\u002F\u002Ftrue   可以选两个\n",[49,76655,76656,76658,76660,76662,76664,76666,76669,76671,76673,76675,76677,76679,76682,76684],{"class":51,"line":10520},[49,76657,74284],{"class":73},[49,76659,58778],{"class":55},[49,76661,841],{"class":73},[49,76663,1413],{"class":59},[49,76665,1795],{"class":77},[49,76667,76668],{"class":159},"[a-z]",[49,76670,1131],{"class":77},[49,76672,1413],{"class":59},[49,76674,1387],{"class":73},[49,76676,75776],{"class":55},[49,76678,841],{"class":73},[49,76680,76681],{"class":59},"'p'",[49,76683,75840],{"class":73},[49,76685,76686],{"class":66},"\u002F\u002Ftrue   依然只能选一个\n",[49,76688,76689,76691,76693,76695,76697,76699,76702,76704,76706,76708,76710,76712,76714,76716],{"class":51,"line":10541},[49,76690,74284],{"class":73},[49,76692,58778],{"class":55},[49,76694,841],{"class":73},[49,76696,1413],{"class":59},[49,76698,1795],{"class":77},[49,76700,76701],{"class":159},"[A-Z]",[49,76703,1131],{"class":77},[49,76705,1413],{"class":59},[49,76707,1387],{"class":73},[49,76709,75776],{"class":55},[49,76711,841],{"class":73},[49,76713,76681],{"class":59},[49,76715,75840],{"class":73},[49,76717,75910],{"class":66},[49,76719,76720,76722,76724,76726,76728,76730,76732,76734,76736,76738,76740,76742,76745,76747],{"class":51,"line":10547},[49,76721,74284],{"class":73},[49,76723,58778],{"class":55},[49,76725,841],{"class":73},[49,76727,1413],{"class":59},[49,76729,1795],{"class":77},[49,76731,76701],{"class":159},[49,76733,1131],{"class":77},[49,76735,1413],{"class":59},[49,76737,1387],{"class":73},[49,76739,75776],{"class":55},[49,76741,841],{"class":73},[49,76743,76744],{"class":59},"'P'",[49,76746,75840],{"class":73},[49,76748,75787],{"class":66},[49,76750,76751,76753,76755,76757,76759,76761,76764,76766,76768,76770,76772,76774,76777,76779],{"class":51,"line":10561},[49,76752,74284],{"class":73},[49,76754,58778],{"class":55},[49,76756,841],{"class":73},[49,76758,1413],{"class":59},[49,76760,1795],{"class":77},[49,76762,76763],{"class":159},"[0-9]",[49,76765,1131],{"class":77},[49,76767,1413],{"class":59},[49,76769,1387],{"class":73},[49,76771,75776],{"class":55},[49,76773,841],{"class":73},[49,76775,76776],{"class":59},"'0'",[49,76778,75840],{"class":73},[49,76780,75787],{"class":66},[49,76782,76783,76785,76787,76789,76791,76793,76796,76798,76800,76802,76804,76806,76808,76810],{"class":51,"line":10567},[49,76784,74284],{"class":73},[49,76786,58778],{"class":55},[49,76788,841],{"class":73},[49,76790,1413],{"class":59},[49,76792,1795],{"class":77},[49,76794,76795],{"class":159},"[a-zA-Z0-9]",[49,76797,1131],{"class":77},[49,76799,1413],{"class":59},[49,76801,1387],{"class":73},[49,76803,75776],{"class":55},[49,76805,841],{"class":73},[49,76807,76681],{"class":59},[49,76809,75784],{"class":73},[49,76811,75787],{"class":66},[49,76813,76814,76816,76818],{"class":51,"line":10594},[49,76815,52948],{"class":73},[49,76817,52344],{"class":51831},[49,76819,51838],{"class":73},[49,76821,76822,76824,76826],{"class":51,"line":10603},[49,76823,52316],{"class":73},[49,76825,52331],{"class":51831},[49,76827,51838],{"class":73},[49,76829,76830],{"class":51,"line":10609},[49,76831,399],{"emptyLinePlaceholder":398},[49,76833,76834,76836,76838],{"class":51,"line":10617},[49,76835,52316],{"class":73},[49,76837,51166],{"class":51831},[49,76839,51838],{"class":73},[130,76841,76843],{"id":76842},"_3624-修饰符","3.6.2.4 修饰符",[14,76845,76846],{},[25,76847],{"alt":27,"src":76848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76850,76851],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76853,76854],{},[25,76855],{"alt":27,"src":76856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[40,76858,76860],{"className":51164,"code":76859,"language":51166,"meta":27,"style":27},"\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",[46,76861,76862,76872,76886,76894,76908,76928,76940,76948,76956,76964,76996,77027,77032,77064,77075,77108,77117,77125,77133],{"__ignoreMap":27},[49,76863,76864,76866,76868,76870],{"class":51,"line":52},[49,76865,51828],{"class":73},[49,76867,51832],{"class":51831},[49,76869,51835],{"class":55},[49,76871,51838],{"class":73},[49,76873,76874,76876,76878,76880,76882,76884],{"class":51,"line":63},[49,76875,1739],{"class":73},[49,76877,51166],{"class":51831},[49,76879,51847],{"class":55},[49,76881,78],{"class":73},[49,76883,51852],{"class":59},[49,76885,51838],{"class":73},[49,76887,76888,76890,76892],{"class":51,"line":70},[49,76889,1739],{"class":73},[49,76891,51865],{"class":51831},[49,76893,51838],{"class":73},[49,76895,76896,76898,76900,76902,76904,76906],{"class":51,"line":219},[49,76897,52675],{"class":73},[49,76899,51875],{"class":51831},[49,76901,51878],{"class":55},[49,76903,78],{"class":73},[49,76905,51883],{"class":59},[49,76907,51838],{"class":73},[49,76909,76910,76912,76914,76916,76918,76920,76922,76924,76926],{"class":51,"line":233},[49,76911,52675],{"class":73},[49,76913,51875],{"class":51831},[49,76915,15617],{"class":55},[49,76917,78],{"class":73},[49,76919,51922],{"class":59},[49,76921,51902],{"class":55},[49,76923,78],{"class":73},[49,76925,51929],{"class":59},[49,76927,51838],{"class":73},[49,76929,76930,76932,76934,76936,76938],{"class":51,"line":241},[49,76931,52675],{"class":73},[49,76933,51938],{"class":51831},[49,76935,51941],{"class":73},[49,76937,51938],{"class":51831},[49,76939,51838],{"class":73},[49,76941,76942,76944,76946],{"class":51,"line":1920},[49,76943,52316],{"class":73},[49,76945,51865],{"class":51831},[49,76947,51838],{"class":73},[49,76949,76950,76952,76954],{"class":51,"line":2011},[49,76951,1739],{"class":73},[49,76953,52331],{"class":51831},[49,76955,51838],{"class":73},[49,76957,76958,76960,76962],{"class":51,"line":2017},[49,76959,52675],{"class":73},[49,76961,52344],{"class":51831},[49,76963,51838],{"class":73},[49,76965,76966,76968,76970,76972,76974,76976,76979,76981,76983,76985,76987,76989,76992,76994],{"class":51,"line":2029},[49,76967,74284],{"class":73},[49,76969,58778],{"class":55},[49,76971,841],{"class":73},[49,76973,1413],{"class":59},[49,76975,1795],{"class":77},[49,76977,76978],{"class":48508},"java",[49,76980,1131],{"class":77},[49,76982,1413],{"class":59},[49,76984,1387],{"class":73},[49,76986,75776],{"class":55},[49,76988,841],{"class":73},[49,76990,76991],{"class":59},"'java'",[49,76993,76286],{"class":73},[49,76995,75787],{"class":66},[49,76997,76998,77000,77002,77004,77006,77008,77010,77012,77014,77016,77018,77020,77023,77025],{"class":51,"line":2311},[49,76999,74284],{"class":73},[49,77001,58778],{"class":55},[49,77003,841],{"class":73},[49,77005,1413],{"class":59},[49,77007,1795],{"class":77},[49,77009,76978],{"class":48508},[49,77011,1131],{"class":77},[49,77013,1413],{"class":59},[49,77015,1387],{"class":73},[49,77017,75776],{"class":55},[49,77019,841],{"class":73},[49,77021,77022],{"class":59},"'Java'",[49,77024,76286],{"class":73},[49,77026,75910],{"class":66},[49,77028,77029],{"class":51,"line":2316},[49,77030,77031],{"class":66},"    \u002F\u002F 不区分大小写、\n",[49,77033,77034,77036,77038,77040,77042,77044,77046,77048,77050,77052,77054,77056,77058,77060,77062],{"class":51,"line":2322},[49,77035,74284],{"class":73},[49,77037,58778],{"class":55},[49,77039,841],{"class":73},[49,77041,1413],{"class":59},[49,77043,1795],{"class":77},[49,77045,76978],{"class":48508},[49,77047,1131],{"class":77},[49,77049,1413],{"class":59},[49,77051,1270],{"class":77},[49,77053,1387],{"class":73},[49,77055,75776],{"class":55},[49,77057,841],{"class":73},[49,77059,77022],{"class":59},[49,77061,76286],{"class":73},[49,77063,75787],{"class":66},[49,77065,77066,77068,77070,77072],{"class":51,"line":2327},[49,77067,11918],{"class":77},[49,77069,74450],{"class":159},[49,77071,14261],{"class":77},[49,77073,77074],{"class":59}," 'java是一门编程语言，学完java工资很高'\n",[49,77076,77077,77079,77082,77084,77087,77090,77092,77094,77096,77098,77101,77103,77106],{"class":51,"line":2341},[49,77078,11918],{"class":77},[49,77080,77081],{"class":159}," result",[49,77083,14261],{"class":77},[49,77085,77086],{"class":73}," str.",[49,77088,77089],{"class":55},"replace",[49,77091,841],{"class":73},[49,77093,1413],{"class":59},[49,77095,76978],{"class":48508},[49,77097,1413],{"class":59},[49,77099,77100],{"class":77},"ig",[49,77102,13132],{"class":73},[49,77104,77105],{"class":59},"'前端'",[49,77107,847],{"class":73},[49,77109,77110,77112,77114],{"class":51,"line":2346},[49,77111,74284],{"class":73},[49,77113,58778],{"class":55},[49,77115,77116],{"class":73},"(result)\n",[49,77118,77119,77121,77123],{"class":51,"line":2352},[49,77120,52948],{"class":73},[49,77122,52344],{"class":51831},[49,77124,51838],{"class":73},[49,77126,77127,77129,77131],{"class":51,"line":2373},[49,77128,52316],{"class":73},[49,77130,52331],{"class":51831},[49,77132,51838],{"class":73},[49,77134,77135,77137,77139],{"class":51,"line":2378},[49,77136,52316],{"class":73},[49,77138,51166],{"class":51831},[49,77140,51838],{"class":73},[757,77142,77143],{},"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":27,"searchDepth":63,"depth":63,"links":77145},[77146,77156,77168,77185,77192,77200],{"id":53891,"depth":63,"text":53892,"children":77147},[77148,77149,77150,77151,77152,77153,77154,77155],{"id":53895,"depth":70,"text":53896},{"id":53928,"depth":70,"text":53929},{"id":53967,"depth":70,"text":53968},{"id":54125,"depth":70,"text":54126},{"id":54173,"depth":70,"text":54174},{"id":54310,"depth":70,"text":54311},{"id":54632,"depth":70,"text":54633},{"id":57620,"depth":70,"text":57621},{"id":57648,"depth":63,"text":57649,"children":77157},[77158,77159,77160,77161,77162,77163,77164,77165,77166,77167],{"id":57652,"depth":70,"text":57653},{"id":57675,"depth":70,"text":57676},{"id":58590,"depth":70,"text":58591},{"id":59280,"depth":70,"text":59281},{"id":59562,"depth":70,"text":59563},{"id":63723,"depth":70,"text":63724},{"id":63893,"depth":70,"text":63894},{"id":64021,"depth":70,"text":64022},{"id":64046,"depth":70,"text":64047},{"id":65435,"depth":70,"text":65436},{"id":66588,"depth":63,"text":66589,"children":77169},[77170,77171,77172,77173,77174,77175,77176,77177,77178,77179,77180,77181,77182,77183,77184],{"id":66592,"depth":70,"text":66593},{"id":67246,"depth":70,"text":67247},{"id":68941,"depth":70,"text":68942},{"id":68982,"depth":70,"text":68983},{"id":69024,"depth":70,"text":69025},{"id":69038,"depth":70,"text":69039},{"id":69087,"depth":70,"text":69088},{"id":69099,"depth":70,"text":69100},{"id":69114,"depth":70,"text":69115},{"id":69150,"depth":70,"text":69151},{"id":69231,"depth":70,"text":69232},{"id":69359,"depth":70,"text":69360},{"id":69371,"depth":70,"text":69372},{"id":69390,"depth":70,"text":69391},{"id":71501,"depth":70,"text":71502},{"id":71520,"depth":63,"text":71521,"children":77186},[77187,77188,77189,77190,77191],{"id":71541,"depth":70,"text":71542},{"id":71561,"depth":70,"text":71562},{"id":71610,"depth":70,"text":71611},{"id":71735,"depth":70,"text":71736},{"id":71916,"depth":70,"text":71917},{"id":71934,"depth":63,"text":71935,"children":77193},[77194,77195,77196,77197,77198,77199],{"id":71949,"depth":70,"text":71950},{"id":72008,"depth":70,"text":72009},{"id":72032,"depth":70,"text":72033},{"id":72352,"depth":70,"text":72353},{"id":72384,"depth":70,"text":72385},{"id":72407,"depth":70,"text":72408},{"id":75475,"depth":63,"text":75476,"children":77201},[77202,77203],{"id":75509,"depth":70,"text":75510},{"id":75548,"depth":70,"text":75549},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53863,"description":24072},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77210,"title":77211,"body":77212,"description":24072,"extension":766,"meta":93349,"navigation":398,"path":93350,"seo":93351,"stem":93352,"__hash__":93353},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77213,"toc":93285},[77214,77217,77220,77224,77228,77233,77238,77249,77253,77258,77261,77265,77268,77273,77277,77281,77284,77289,77292,77296,77299,77307,77310,77314,77319,77324,77327,77331,77336,77341,77344,77348,77353,77356,77361,77364,77369,77372,77377,77382,77385,77388,77392,77397,77402,77405,77409,77413,77416,77419,77422,77426,77430,77435,77440,77443,77447,77452,77457,77460,77463,77466,77469,77472,77475,77478,77481,77484,77489,77493,77498,77503,77506,77509,77512,77515,77518,77521,77524,77527,77531,77535,77538,77541,77544,77549,77551,77554,77557,77560,77563,77566,77569,77572,77575,77578,77581,77584,77587,77590,77595,77600,77605,77608,77612,77615,77620,77624,77626,77637,77642,77743,77746,77749,77752,77755,77758,77761,77764,77767,77769,77772,77775,77778,77781,77784,77786,77789,77792,77795,77798,77801,77804,77806,77809,77811,77813,77816,77820,77824,77827,77830,77833,77836,77839,77842,77845,77848,77851,77856,77976,77979,77982,77987,77990,77993,77996,77999,78004,78007,78010,78013,78016,78021,78024,78124,78189,78263,78267,78270,78273,78277,78280,78294,78323,78326,78329,78332,78335,78338,78341,78344,78346,78349,78352,78355,78358,78362,78367,78371,78376,78451,78454,78637,78640,78643,78646,78649,78652,78654,78657,78660,78663,78666,78669,78672,78674,78678,78681,78686,78689,78692,78695,78698,78700,78705,78708,78711,78714,78717,78719,78724,78727,78730,78732,78734,78737,78741,78744,78747,78752,78755,78758,78761,78811,78816,78820,78825,78828,78897,78900,78909,78913,78918,78921,78924,78932,78935,78952,80754,80758,80762,80767,80770,80774,80780,80786,80938,80943,80948,80951,80954,80957,80960,80963,80966,80969,80972,80975,80978,80981,80984,80989,80993,80996,81007,81011,81016,81019,81022,81025,81028,81031,81033,81036,81039,81042,81045,81047,81064,81067,81071,81074,81079,81084,81087,81090,81094,81097,81100,81109,81112,81116,81119,81124,81129,81196,81200,81203,81206,81211,81216,81302,81307,81311,81314,81317,81332,81335,81340,81344,81349,81458,81461,81472,81622,81626,81631,81740,81744,81749,81754,81759,81762,81769,81789,81825,81989,81994,81997,82002,82009,82012,82015,82018,82077,82133,82189,82193,82198,82513,82516,82520,82523,82528,82637,82642,82646,82651,82655,82726,82730,82732,82735,82738,82776,83052,83056,83073,83139,83173,83177,83180,83185,83214,83221,83230,83235,83250,83255,83264,83267,83404,83408,83470,83474,83479,83724,83728,83733,83736,83739,83742,83745,83749,83754,85335,85339,85343,85349,85352,85357,85361,85364,85369,85372,85383,85387,85392,85396,85401,85406,85409,85414,85418,85422,85425,85430,85435,85438,85441,85444,85566,85571,85673,85676,85679,85683,85688,85860,85865,85869,85872,85877,85943,85948,85951,86082,86085,86090,86093,86096,86187,86192,86195,86198,86201,86204,86209,86214,86217,86222,86227,86232,86236,86239,86242,86247,86252,86257,86262,86316,86319,86322,86327,86330,86333,86338,86343,86348,86352,86357,86371,86376,86379,86384,86388,86393,86398,86403,86408,86413,86418,86423,86428,86431,86435,86440,86443,86446,86449,86454,86459,86462,86465,86469,86472,86475,86480,86485,86490,86495,86498,86503,86508,86569,86574,86577,86582,87823,87828,87832,87836,87841,87844,87849,87854,87857,87862,87864,87869,87873,87876,87879,87890,87894,87899,87904,87959,87964,87969,87974,88185,88190,88194,88199,88202,88204,88207,88210,88657,88662,88669,88675,88678,88681,88945,88950,88954,89219,89224,89228,89233,89238,89243,89248,89579,89582,89587,89592,89595,89599,89603,89608,89613,89618,89623,89628,89633,89637,89640,89645,89650,89653,89727,89732,89737,89742,89744,89747,90117,90122,90127,90132,90135,90138,90240,90245,90250,90353,90357,90362,90366,90370,90375,90380,90383,90388,90391,90394,90787,90792,90795,90798,90801,90804,91324,91328,91333,91338,91343,91346,91351,91354,91357,91739,91744,91746,91748,91751,91754,92266,92270,92331,92334,92337,92340,92344,92347,92352,92357,93282],[10,77215,77211],{"id":77216},"_4js进阶",[14,77218,77219],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[782,77221,77223],{"id":77222},"_41-作用域","4.1 作用域",[18,77225,77227],{"id":77226},"_411-局部作用域","4.1.1 局部作用域",[14,77229,77230],{},[25,77231],{"alt":27,"src":77232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,77234,77235],{},[25,77236],{"alt":27,"src":77237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[742,77239,77240,77243,77246],{},[33,77241,77242],{},"函数作用域在函数内部",[33,77244,77245],{},"块级作用域在{}",[33,77247,77248],{},"对象的那个{}不是作用域，不是块作用域",[18,77250,77252],{"id":77251},"_412-全局作用域","4.1.2 全局作用域",[14,77254,77255],{},[25,77256],{"alt":27,"src":77257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,77259,77260],{},"window.a=10不要这样写",[18,77262,77264],{"id":77263},"_413-作用域链","4.1.3 作用域链",[14,77266,77267],{},"变量查找机制",[14,77269,77270],{},[25,77271],{"alt":27,"src":77272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[782,77274,77276],{"id":77275},"_42-垃圾回收机制","4.2 垃圾回收机制",[18,77278,77280],{"id":77279},"_421-大体介绍","4.2.1 大体介绍",[14,77282,77283],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,77285,77286],{},[25,77287],{"alt":27,"src":77288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,77290,77291],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[18,77293,77295],{"id":77294},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,77297,77298],{},"堆栈空间分配区别：",[30,77300,77301,77304],{},[33,77302,77303],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[33,77305,77306],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,77308,77309],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[130,77311,77313],{"id":77312},"_4221-引用计数","4.2.2.1 引用计数",[14,77315,77316],{},[25,77317],{"alt":27,"src":77318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,77320,77321],{},[25,77322],{"alt":27,"src":77323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,77325,77326],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[130,77328,77330],{"id":77329},"_4222-标记清除法","4.2.2.2 标记清除法",[14,77332,77333],{},[25,77334],{"alt":27,"src":77335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,77337,77338],{},[25,77339],{"alt":27,"src":77340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,77342,77343],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[782,77345,77347],{"id":77346},"_43-闭包","4.3 闭包",[14,77349,77350],{},[25,77351],{"alt":27,"src":77352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,77354,77355],{},"闭包：内层函数+外层函数的变量",[14,77357,77358],{},[25,77359],{"alt":27,"src":77360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,77362,77363],{},"closure就是闭包",[14,77365,77366],{},[25,77367],{"alt":27,"src":77368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,77370,77371],{},"内层函数必须包含外层函数的变量才是闭包",[14,77373,77374],{},[25,77375],{"alt":27,"src":77376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,77378,77379],{},[25,77380],{"alt":27,"src":77381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,77383,77384],{},"闭包可能会引起内存泄漏",[14,77386,77387],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[782,77389,77391],{"id":77390},"_44-变量提升","4.4 变量提升",[14,77393,77394],{},[25,77395],{"alt":27,"src":77396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,77398,77399],{},[25,77400],{"alt":27,"src":77401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,77403,77404],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[782,77406,77408],{"id":77407},"_45-函数进阶","4.5 函数进阶",[18,77410,77412],{"id":77411},"_451-函数提升","4.5.1 函数提升",[14,77414,77415],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,77417,77418],{},"只提升函数声明，不提升函数调用",[52344,77420,77421],{},"\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",[18,77423,77425],{"id":77424},"_452-函数参数","4.5.2 函数参数",[130,77427,77429],{"id":77428},"_4521-动态参数","4.5.2.1 动态参数",[14,77431,77432],{},[25,77433],{"alt":27,"src":77434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,77436,77437],{},[25,77438],{"alt":27,"src":77439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,77441,77442],{},"箭头函数里边没有arguments",[130,77444,77446],{"id":77445},"_4522-剩余参数","4.5.2.2 剩余参数",[14,77448,77449],{},[25,77450],{"alt":27,"src":77451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,77453,77454],{},[25,77455],{"alt":27,"src":77456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,77458,77459],{},"剩余参数使用的时候不需要写...",[14,77461,77462],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77464,77465],{},"  function getSum(a,b,...arr) {",[14,77467,77468],{},"  console.log(11)",[14,77470,77471],{},"  }",[14,77473,77474],{},"  getSum(1,2,3,4)",[14,77476,77477],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77479,77480],{},"  getSum(1,2)",[14,77482,77483],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77485,77486],{},[25,77487],{"alt":27,"src":77488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[130,77490,77492],{"id":77491},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77494,77495],{},[25,77496],{"alt":27,"src":77497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77499,77500],{},[25,77501],{"alt":27,"src":77502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77504,77505],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77507,77508],{},"展开运算符可以用于数组之间的合并：",[14,77510,77511],{},"const arr1 = [1, 2, 3]",[14,77513,77514],{},"const arr2 = [3, 4, 5]",[14,77516,77517],{},"const arr = [...arr1, ...arr2]",[14,77519,77520],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77522,77523],{},"剩余参数：函数参数使用，得到真数组",[14,77525,77526],{},"展开运算符：数组中使用，数组展开",[18,77528,77530],{"id":77529},"_453-箭头函数","4.5.3 箭头函数",[130,77532,77534],{"id":77533},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77536,77537],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77539,77540],{},"它不是万能的！！！",[14,77542,77543],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77545,77546],{},[25,77547],{"alt":27,"src":77548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77550,870],{},[14,77552,77553],{},"① 只有一个形参的时候，可以省略小括号：",[14,77555,77556],{},"const fn=x=>{console.log(x)}",[14,77558,77559],{},"② 只有一行代码时可以省略大括号：",[14,77561,77562],{},"const fn=x=>console.log(11)",[14,77564,77565],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77567,77568],{},"const fn=x=>x+x",[14,77570,77571],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77573,77574],{},"⑤ 阻止表单默认提交：",[14,77576,77577],{},"const form = document.querySelector('form')",[14,77579,77580],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77582,77583],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77585,77586],{},"const fn=uname=>({uname:uname})",[14,77588,77589],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77591,77592],{},[25,77593],{"alt":27,"src":77594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77596,77597],{},[25,77598],{"alt":27,"src":77599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77601,77602],{},[25,77603],{"alt":27,"src":77604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77606,77607],{},"一定不要忘记用()，有()就理解为自带return",[130,77609,77611],{"id":77610},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77613,77614],{},"箭头函数是没有动态参数的arguments",[14,77616,77617],{},[25,77618],{"alt":27,"src":77619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[130,77621,77623],{"id":77622},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77625,12029],{},[30,77627,77628,77631,77634],{},[33,77629,77630],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[33,77632,77633],{},"事件回调函数使用箭头函数时，this 为全局的 window",[33,77635,77636],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77638,77639],{},[25,77640],{"alt":27,"src":77641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[40,77643,77645],{"className":53598,"code":77644,"language":53600,"meta":27,"style":27},"  \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",[46,77646,77647,77655,77660,77665,77670,77675,77680,77684,77689,77693,77697,77702,77707,77712,77716,77720,77725,77730,77735],{"__ignoreMap":27},[49,77648,77649,77651,77653],{"class":51,"line":52},[49,77650,52675],{"class":73},[49,77652,52344],{"class":51831},[49,77654,51838],{"class":73},[49,77656,77657],{"class":51,"line":63},[49,77658,77659],{"class":73},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[49,77661,77662],{"class":51,"line":70},[49,77663,77664],{"class":73},"    console.log(this) \u002F\u002F指向window\n",[49,77666,77667],{"class":51,"line":219},[49,77668,77669],{"class":73},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[49,77671,77672],{"class":51,"line":233},[49,77673,77674],{"class":73},"    function fn() {\n",[49,77676,77677],{"class":51,"line":241},[49,77678,77679],{"class":73},"      console.log(this)  \u002F\u002F指向window\n",[49,77681,77682],{"class":51,"line":1920},[49,77683,2885],{"class":73},[49,77685,77686],{"class":51,"line":2011},[49,77687,77688],{"class":73},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[49,77690,77691],{"class":51,"line":2017},[49,77692,399],{"emptyLinePlaceholder":398},[49,77694,77695],{"class":51,"line":2029},[49,77696,72054],{"class":73},[49,77698,77699],{"class":51,"line":2311},[49,77700,77701],{"class":73},"      name: 'andy',\n",[49,77703,77704],{"class":51,"line":2316},[49,77705,77706],{"class":73},"      sayHai: function () {\n",[49,77708,77709],{"class":51,"line":2322},[49,77710,77711],{"class":73},"        console.log(this)\n",[49,77713,77714],{"class":51,"line":2327},[49,77715,52929],{"class":73},[49,77717,77718],{"class":51,"line":2341},[49,77719,2885],{"class":73},[49,77721,77722],{"class":51,"line":2346},[49,77723,77724],{"class":73},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[49,77726,77727],{"class":51,"line":2352},[49,77728,77729],{"class":73},"    \u002F\u002F 2.箭头函数的this\n",[49,77731,77732],{"class":51,"line":2373},[49,77733,77734],{"class":73},"    const fn = () => console.log(this)\n",[49,77736,77737,77739,77741],{"class":51,"line":2378},[49,77738,52948],{"class":73},[49,77740,52344],{"class":51831},[49,77742,51838],{"class":73},[14,77744,77745],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77747,77748],{},"const fn = () => console.log(this)",[14,77750,77751],{},"fn() \u002F\u002F指向window",[14,77753,77754],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77756,77757],{},"①",[14,77759,77760],{},"const obj = {",[14,77762,77763],{},"uname: 'pink老师',",[14,77765,77766],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77768,1775],{},[14,77770,77771],{},"调用对象里边的函数",[14,77773,77774],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77776,77777],{},"obj.sayHai()",[14,77779,77780],{},"②",[14,77782,77783],{},"const obj1 = {",[14,77785,77763],{},[14,77787,77788],{},"sayHai: function () {",[14,77790,77791],{},"let i = 10",[14,77793,77794],{},"const count = () => {",[14,77796,77797],{},"console.log(this)",[14,77799,77800],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77802,77803],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77805,1775],{},[14,77807,77808],{},"count()",[14,77810,1775],{},[14,77812,1775],{},[14,77814,77815],{},"obj1.sayHai()",[782,77817,77819],{"id":77818},"_46-解构赋值","4.6 解构赋值",[18,77821,77823],{"id":77822},"_461-数组解构","4.6.1 数组解构",[14,77825,77826],{},"以前要是使用数组中的值的话：",[14,77828,77829],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77831,77832],{},"const arr=[100,60,80]",[14,77834,77835],{},"const max=arr[0]",[14,77837,77838],{},"const min=arr[1]",[14,77840,77841],{},"const avg=arr[2]",[14,77843,77844],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77846,77847],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77849,77850],{},"这个写法就类似于上边的那种用很多const的方法",[14,77852,77853],{},[25,77854],{"alt":27,"src":77855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[40,77857,77859],{"className":51164,"code":77858,"language":51166,"meta":27,"style":27},"①变量之间交换值:\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",[46,77860,77861,77866,77871,77876,77881,77886,77890,77894,77899,77903,77908,77913,77917,77922,77927,77938,77948,77953,77958,77963,77967,77971],{"__ignoreMap":27},[49,77862,77863],{"class":51,"line":52},[49,77864,77865],{"class":73},"①变量之间交换值:\n",[49,77867,77868],{"class":51,"line":63},[49,77869,77870],{"class":73},"let a=1\n",[49,77872,77873],{"class":51,"line":70},[49,77874,77875],{"class":73},"let b=2;\n",[49,77877,77878],{"class":51,"line":219},[49,77879,77880],{"class":73},"必须加这行代码，不然就会报错\n",[49,77882,77883],{"class":51,"line":233},[49,77884,77885],{"class":73},"[b,a]=[a,b]\n",[49,77887,77888],{"class":51,"line":241},[49,77889,399],{"emptyLinePlaceholder":398},[49,77891,77892],{"class":51,"line":1920},[49,77893,399],{"emptyLinePlaceholder":398},[49,77895,77896],{"class":51,"line":2011},[49,77897,77898],{"class":73},"可以写成下面的方式：\n",[49,77900,77901],{"class":51,"line":2017},[49,77902,77870],{"class":73},[49,77904,77905],{"class":51,"line":2029},[49,77906,77907],{"class":73},"let b=2\n",[49,77909,77910],{"class":51,"line":2311},[49,77911,77912],{"class":73},";[b,a]=[a,b]\n",[49,77914,77915],{"class":51,"line":2316},[49,77916,399],{"emptyLinePlaceholder":398},[49,77918,77919],{"class":51,"line":2322},[49,77920,77921],{"class":73},"②排序\n",[49,77923,77924],{"class":51,"line":2327},[49,77925,77926],{"class":73},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[49,77928,77929,77932,77935],{"class":51,"line":2341},[49,77930,77931],{"class":73},"for (let i = 0; i ",[49,77933,1739],{"class":77934},"s7hpK",[49,77936,77937],{"class":73}," arr1.length; i++) {\n",[49,77939,77940,77943,77945],{"class":51,"line":2346},[49,77941,77942],{"class":73},"   for (let j = 0; j ",[49,77944,1739],{"class":77934},[49,77946,77947],{"class":73}," arr1.length - 1; j++) {\n",[49,77949,77950],{"class":51,"line":2352},[49,77951,77952],{"class":73},"      if (arr1[j] > arr1[j + 1]) {\n",[49,77954,77955],{"class":51,"line":2373},[49,77956,77957],{"class":73},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[49,77959,77960],{"class":51,"line":2378},[49,77961,77962],{"class":73},"       }\n",[49,77964,77965],{"class":51,"line":2392},[49,77966,5006],{"class":73},[49,77968,77969],{"class":51,"line":2397},[49,77970,2264],{"class":73},[49,77972,77973],{"class":51,"line":2426},[49,77974,77975],{"class":73},"console.log(arr1)\n",[14,77977,77978],{},"数组解构的细节：",[14,77980,77981],{},"①变量多，单元值少",[14,77983,77984],{},[25,77985],{"alt":27,"src":77986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77988,77989],{},"防止出现undefined的方法：",[14,77991,77992],{},"const [a=0,b=0] =[1]",[14,77994,77995],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77997,77998],{},"②变量少，单元值多",[14,78000,78001],{},[25,78002],{"alt":27,"src":78003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,78005,78006],{},"此时可以使用剩余参数来接收多余的值",[14,78008,78009],{},"const [a,b,...c]=[1,2,3,4]",[14,78011,78012],{},"console.log(c) 输出[3,4]",[14,78014,78015],{},"③可以按需导入，忽略某些返回值",[14,78017,78018],{},[25,78019],{"alt":27,"src":78020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,78022,78023],{},"④支持多维数组的结构",[40,78025,78029],{"className":78026,"code":78027,"language":78028,"meta":27,"style":27},"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",[46,78030,78031,78059,78075,78090,78105],{"__ignoreMap":27},[49,78032,78033,78035,78037,78039,78041,78043,78045,78047,78050,78052,78054,78056],{"class":51,"line":52},[49,78034,7489],{"class":77},[49,78036,52364],{"class":73},[49,78038,78],{"class":77},[49,78040,52757],{"class":73},[49,78042,1047],{"class":159},[49,78044,13132],{"class":73},[49,78046,915],{"class":159},[49,78048,78049],{"class":73},", [",[49,78051,909],{"class":159},[49,78053,13132],{"class":73},[49,78055,1122],{"class":159},[49,78057,78058],{"class":73},"]]\n",[49,78060,78061,78064,78066,78068,78070,78072],{"class":51,"line":63},[49,78062,78063],{"class":73},"console.",[49,78065,58778],{"class":55},[49,78067,4548],{"class":73},[49,78069,1021],{"class":159},[49,78071,4913],{"class":73},[49,78073,78074],{"class":66},"  \u002F\u002F1\n",[49,78076,78077,78079,78081,78083,78085,78087],{"class":51,"line":70},[49,78078,78063],{"class":73},[49,78080,58778],{"class":55},[49,78082,4548],{"class":73},[49,78084,1047],{"class":159},[49,78086,4913],{"class":73},[49,78088,78089],{"class":66},"  \u002F\u002F2\n",[49,78091,78092,78094,78096,78098,78100,78102],{"class":51,"line":219},[49,78093,78063],{"class":73},[49,78095,58778],{"class":55},[49,78097,4548],{"class":73},[49,78099,915],{"class":159},[49,78101,4913],{"class":73},[49,78103,78104],{"class":66},"  \u002F\u002F[3,4]\n",[49,78106,78107,78109,78111,78113,78115,78117,78119,78121],{"class":51,"line":233},[49,78108,78063],{"class":73},[49,78110,58778],{"class":55},[49,78112,4548],{"class":73},[49,78114,915],{"class":159},[49,78116,5598],{"class":73},[49,78118,1021],{"class":159},[49,78120,4913],{"class":73},[49,78122,78123],{"class":66},"  \u002F\u002F3\n",[40,78125,78127],{"className":78026,"code":78126,"language":78028,"meta":27,"style":27},"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",[46,78128,78129,78156,78167,78178],{"__ignoreMap":27},[49,78130,78131,78133,78136,78138,78140,78142,78144,78146,78148,78150,78152,78154],{"class":51,"line":52},[49,78132,7489],{"class":77},[49,78134,78135],{"class":73}," [a, b, c] ",[49,78137,78],{"class":77},[49,78139,52757],{"class":73},[49,78141,1047],{"class":159},[49,78143,13132],{"class":73},[49,78145,915],{"class":159},[49,78147,78049],{"class":73},[49,78149,909],{"class":159},[49,78151,13132],{"class":73},[49,78153,1122],{"class":159},[49,78155,78058],{"class":73},[49,78157,78158,78160,78162,78165],{"class":51,"line":63},[49,78159,78063],{"class":73},[49,78161,58778],{"class":55},[49,78163,78164],{"class":73},"(a)",[49,78166,78074],{"class":66},[49,78168,78169,78171,78173,78176],{"class":51,"line":70},[49,78170,78063],{"class":73},[49,78172,58778],{"class":55},[49,78174,78175],{"class":73},"(b)",[49,78177,78089],{"class":66},[49,78179,78180,78182,78184,78187],{"class":51,"line":219},[49,78181,78063],{"class":73},[49,78183,58778],{"class":55},[49,78185,78186],{"class":73},"(c)",[49,78188,78104],{"class":66},[40,78190,78192],{"className":78026,"code":78191,"language":78028,"meta":27,"style":27},"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",[46,78193,78194,78221,78231,78241,78251],{"__ignoreMap":27},[49,78195,78196,78198,78201,78203,78205,78207,78209,78211,78213,78215,78217,78219],{"class":51,"line":52},[49,78197,7489],{"class":77},[49,78199,78200],{"class":73}," [a, b, [c, d]] ",[49,78202,78],{"class":77},[49,78204,52757],{"class":73},[49,78206,1047],{"class":159},[49,78208,13132],{"class":73},[49,78210,915],{"class":159},[49,78212,78049],{"class":73},[49,78214,909],{"class":159},[49,78216,13132],{"class":73},[49,78218,1122],{"class":159},[49,78220,78058],{"class":73},[49,78222,78223,78225,78227,78229],{"class":51,"line":63},[49,78224,78063],{"class":73},[49,78226,58778],{"class":55},[49,78228,78164],{"class":73},[49,78230,78074],{"class":66},[49,78232,78233,78235,78237,78239],{"class":51,"line":70},[49,78234,78063],{"class":73},[49,78236,58778],{"class":55},[49,78238,78175],{"class":73},[49,78240,78089],{"class":66},[49,78242,78243,78245,78247,78249],{"class":51,"line":219},[49,78244,78063],{"class":73},[49,78246,58778],{"class":55},[49,78248,78186],{"class":73},[49,78250,78123],{"class":66},[49,78252,78253,78255,78257,78260],{"class":51,"line":233},[49,78254,78063],{"class":73},[49,78256,58778],{"class":55},[49,78258,78259],{"class":73},"(d)",[49,78261,78262],{"class":66},"  \u002F\u002F4\n",[18,78264,78266],{"id":78265},"_462-对象解构","4.6.2 对象解构",[14,78268,78269],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,78271,78272],{},"用的非常非常多！！！！！！",[130,78274,78276],{"id":78275},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,78278,78279],{},"基本语法：",[30,78281,78282,78285,78288,78291],{},[33,78283,78284],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[33,78286,78287],{},"对象属性的值将被赋值给与属性名相同的变量",[33,78289,78290],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[33,78292,78293],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[40,78295,78297],{"className":51164,"code":78296,"language":51166,"meta":27,"style":27},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[46,78298,78299,78304,78309,78314,78318],{"__ignoreMap":27},[49,78300,78301],{"class":51,"line":52},[49,78302,78303],{"class":73},"const obj = {\n",[49,78305,78306],{"class":51,"line":63},[49,78307,78308],{"class":73},"   uname: 'pink老师',\n",[49,78310,78311],{"class":51,"line":70},[49,78312,78313],{"class":73},"   age: 18,\n",[49,78315,78316],{"class":51,"line":219},[49,78317,2264],{"class":73},[49,78319,78320],{"class":51,"line":233},[49,78321,78322],{"class":73},"const { uname, age } = obj\n",[14,78324,78325],{},"上方代码这样写等价于：",[14,78327,78328],{},"const uname等价于obj.uname",[14,78330,78331],{},"变量名可以重新改名：",[14,78333,78334],{},"const uname='red老师'",[14,78336,78337],{},"const user={",[14,78339,78340],{},"  uname:'pink老师',",[14,78342,78343],{},"  age:18",[14,78345,1775],{},[14,78347,78348],{},"const {uname,age}=user",[14,78350,78351],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,78353,78354],{},"const {旧变量名：新变量名}=对象",[14,78356,78357],{},"const {uname:username,age}=user",[130,78359,78361],{"id":78360},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,78363,78364],{},[25,78365],{"alt":27,"src":78366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[130,78368,78370],{"id":78369},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,78372,78373],{},[25,78374],{"alt":27,"src":78375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[40,78377,78379],{"className":53598,"code":78378,"language":53600,"meta":27,"style":27},"  \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",[46,78380,78381,78389,78394,78399,78404,78409,78414,78419,78424,78429,78433,78438,78443],{"__ignoreMap":27},[49,78382,78383,78385,78387],{"class":51,"line":52},[49,78384,52675],{"class":73},[49,78386,52344],{"class":51831},[49,78388,51838],{"class":73},[49,78390,78391],{"class":51,"line":63},[49,78392,78393],{"class":73},"    const pig = {\n",[49,78395,78396],{"class":51,"line":70},[49,78397,78398],{"class":73},"      name: '佩奇',\n",[49,78400,78401],{"class":51,"line":219},[49,78402,78403],{"class":73},"      family: {\n",[49,78405,78406],{"class":51,"line":233},[49,78407,78408],{"class":73},"        mother: '猪妈妈',\n",[49,78410,78411],{"class":51,"line":241},[49,78412,78413],{"class":73},"        father: '猪爸爸',\n",[49,78415,78416],{"class":51,"line":1920},[49,78417,78418],{"class":73},"        sister: '乔治'\n",[49,78420,78421],{"class":51,"line":2011},[49,78422,78423],{"class":73},"      },\n",[49,78425,78426],{"class":51,"line":2017},[49,78427,78428],{"class":73},"      age: 6\n",[49,78430,78431],{"class":51,"line":2029},[49,78432,2885],{"class":73},[49,78434,78435],{"class":51,"line":2311},[49,78436,78437],{"class":73},"    \u002F\u002F 多级对象解构\n",[49,78439,78440],{"class":51,"line":2316},[49,78441,78442],{"class":73},"    const { name, family: { mother, father, sister }, age } = pig\n",[49,78444,78445,78447,78449],{"class":51,"line":2322},[49,78446,52948],{"class":73},[49,78448,52344],{"class":51831},[49,78450,51838],{"class":73},[14,78452,78453],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[40,78455,78458],{"className":78456,"code":78457,"language":76978,"meta":27,"style":27},"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",[46,78459,78460,78465,78476,78488,78500,78509,78513,78524,78536,78546,78551,78555,78565,78576,78585,78589,78593,78604,78615,78624,78628,78633],{"__ignoreMap":27},[49,78461,78462],{"class":51,"line":52},[49,78463,78464],{"class":66},"    \u002F\u002F 这是后台传递过来的数据\n",[49,78466,78467,78469,78472,78474],{"class":51,"line":63},[49,78468,11918],{"class":77},[49,78470,78471],{"class":73}," msg ",[49,78473,78],{"class":77},[49,78475,16269],{"class":73},[49,78477,78478,78481,78483,78486],{"class":51,"line":70},[49,78479,78480],{"class":59},"      \"code\"",[49,78482,1688],{"class":77},[49,78484,78485],{"class":159}," 200",[49,78487,31997],{"class":73},[49,78489,78490,78493,78495,78498],{"class":51,"line":219},[49,78491,78492],{"class":59},"      \"msg\"",[49,78494,1688],{"class":77},[49,78496,78497],{"class":59}," \"获取新闻列表成功\"",[49,78499,31997],{"class":73},[49,78501,78502,78505,78507],{"class":51,"line":233},[49,78503,78504],{"class":59},"      \"data\"",[49,78506,1688],{"class":77},[49,78508,55978],{"class":73},[49,78510,78511],{"class":51,"line":241},[49,78512,3207],{"class":73},[49,78514,78515,78518,78520,78522],{"class":51,"line":1920},[49,78516,78517],{"class":59},"          \"id\"",[49,78519,1688],{"class":77},[49,78521,25807],{"class":159},[49,78523,31997],{"class":73},[49,78525,78526,78529,78531,78534],{"class":51,"line":2011},[49,78527,78528],{"class":59},"          \"title\"",[49,78530,1688],{"class":77},[49,78532,78533],{"class":59}," \"5G商用自己，三大运用商收入下降\"",[49,78535,31997],{"class":73},[49,78537,78538,78541,78543],{"class":51,"line":2017},[49,78539,78540],{"class":59},"          \"count\"",[49,78542,1688],{"class":77},[49,78544,78545],{"class":159}," 58\n",[49,78547,78548],{"class":51,"line":2029},[49,78549,78550],{"class":73},"        },\n",[49,78552,78553],{"class":51,"line":2311},[49,78554,3207],{"class":73},[49,78556,78557,78559,78561,78563],{"class":51,"line":2316},[49,78558,78517],{"class":59},[49,78560,1688],{"class":77},[49,78562,15452],{"class":159},[49,78564,31997],{"class":73},[49,78566,78567,78569,78571,78574],{"class":51,"line":2322},[49,78568,78528],{"class":59},[49,78570,1688],{"class":77},[49,78572,78573],{"class":59}," \"国际媒体头条速览\"",[49,78575,31997],{"class":73},[49,78577,78578,78580,78582],{"class":51,"line":2327},[49,78579,78540],{"class":59},[49,78581,1688],{"class":77},[49,78583,78584],{"class":159}," 56\n",[49,78586,78587],{"class":51,"line":2341},[49,78588,78550],{"class":73},[49,78590,78591],{"class":51,"line":2346},[49,78592,3207],{"class":73},[49,78594,78595,78597,78599,78602],{"class":51,"line":2352},[49,78596,78517],{"class":59},[49,78598,1688],{"class":77},[49,78600,78601],{"class":159}," 3",[49,78603,31997],{"class":73},[49,78605,78606,78608,78610,78613],{"class":51,"line":2373},[49,78607,78528],{"class":59},[49,78609,1688],{"class":77},[49,78611,78612],{"class":59}," \"乌克兰和俄罗斯持续冲突\"",[49,78614,31997],{"class":73},[49,78616,78617,78619,78621],{"class":51,"line":2378},[49,78618,78540],{"class":59},[49,78620,1688],{"class":77},[49,78622,78623],{"class":159}," 1669\n",[49,78625,78626],{"class":51,"line":2392},[49,78627,78550],{"class":73},[49,78629,78630],{"class":51,"line":2397},[49,78631,78632],{"class":73},"      ]\n",[49,78634,78635],{"class":51,"line":2426},[49,78636,2885],{"class":73},[14,78638,78639],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78641,78642],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78644,78645],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78647,78648],{},"function({data}) {",[14,78650,78651],{},"console.log(data)",[14,78653,1775],{},[14,78655,78656],{},"render(msg)",[14,78658,78659],{},"实参传递给形参的时候解构了",[14,78661,78662],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78664,78665],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78667,78668],{},"function render({data:mydata}) {",[14,78670,78671],{},"  console.log(data)",[14,78673,1775],{},[18,78675,78677],{"id":78676},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78679,78680],{},"有两种情况：一个是数组结构，一个是立即执行函数",[30,78682,78683],{},[33,78684,78685],{},"如果对一个数组进行遍历，有两种方式：",[14,78687,78688],{},"①法1",[14,78690,78691],{},"const arr=[1,2,3]",[14,78693,78694],{},"arr.map(function(item,index) {",[14,78696,78697],{},"  console.log(item)",[14,78699,52995],{},[14,78701,78702],{},[25,78703],{"alt":27,"src":78704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78706,78707],{},"②法2",[14,78709,78710],{},"const str='pink'",[14,78712,78713],{},"[1,2,3].map(function(item,index) {",[14,78715,78716],{},"console.log(item)",[14,78718,52995],{},[14,78720,78721],{},[25,78722],{"alt":27,"src":78723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78725,78726],{},"此时会报错",[14,78728,78729],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78731,78716],{},[14,78733,52995],{},[14,78735,78736],{},"内部会当成这样处理，所以我们用分号进行隔开",[782,78738,78740],{"id":78739},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78742,78743],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78745,78746],{},"可以理解为加强版的for循环",[14,78748,78749],{},[25,78750],{"alt":27,"src":78751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78753,78754],{},"里边不写return，不返回数组，只遍历不返回",[14,78756,78757],{},"map是返回数组",[14,78759,78760],{},"forEach主要用于遍历数组对象",[40,78762,78764],{"className":53598,"code":78763,"language":53600,"meta":27,"style":27},"  \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",[46,78765,78766,78774,78779,78784,78789,78794,78798,78803],{"__ignoreMap":27},[49,78767,78768,78770,78772],{"class":51,"line":52},[49,78769,52675],{"class":73},[49,78771,52344],{"class":51831},[49,78773,51838],{"class":73},[49,78775,78776],{"class":51,"line":63},[49,78777,78778],{"class":73},"    const arr = ['red', 'green', 'pink']\n",[49,78780,78781],{"class":51,"line":70},[49,78782,78783],{"class":73},"    const result = arr.forEach(function (item, index) {\n",[49,78785,78786],{"class":51,"line":219},[49,78787,78788],{"class":73},"      console.log(item)\n",[49,78790,78791],{"class":51,"line":233},[49,78792,78793],{"class":73},"      console.log(index)\n",[49,78795,78796],{"class":51,"line":241},[49,78797,33992],{"class":73},[49,78799,78800],{"class":51,"line":1920},[49,78801,78802],{"class":73},"    console.log(result)\n",[49,78804,78805,78807,78809],{"class":51,"line":2011},[49,78806,52948],{"class":73},[49,78808,52344],{"class":51831},[49,78810,51838],{"class":73},[14,78812,78813],{},[25,78814],{"alt":27,"src":78815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[782,78817,78819],{"id":78818},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78821,78822],{},[25,78823],{"alt":27,"src":78824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78826,78827],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[40,78829,78831],{"className":53598,"code":78830,"language":53600,"meta":27,"style":27},"\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",[46,78832,78833,78841,78849,78854,78859,78863,78867,78872,78876,78881,78889],{"__ignoreMap":27},[49,78834,78835,78837,78839],{"class":51,"line":52},[49,78836,1739],{"class":73},[49,78838,52331],{"class":51831},[49,78840,51838],{"class":73},[49,78842,78843,78845,78847],{"class":51,"line":63},[49,78844,52675],{"class":73},[49,78846,52344],{"class":51831},[49,78848,51838],{"class":73},[49,78850,78851],{"class":51,"line":70},[49,78852,78853],{"class":73},"    const arr = [10, 20, 30]\n",[49,78855,78856],{"class":51,"line":219},[49,78857,78858],{"class":73},"    const newArr = arr.filter(function (item, index) {\n",[49,78860,78861],{"class":51,"line":233},[49,78862,78788],{"class":73},[49,78864,78865],{"class":51,"line":241},[49,78866,78793],{"class":73},[49,78868,78869],{"class":51,"line":1920},[49,78870,78871],{"class":73},"      return item >= 20\n",[49,78873,78874],{"class":51,"line":2011},[49,78875,33992],{"class":73},[49,78877,78878],{"class":51,"line":2017},[49,78879,78880],{"class":73},"    console.log(newArr)\n",[49,78882,78883,78885,78887],{"class":51,"line":2029},[49,78884,52948],{"class":73},[49,78886,52344],{"class":51831},[49,78888,51838],{"class":73},[49,78890,78891,78893,78895],{"class":51,"line":2311},[49,78892,52316],{"class":73},[49,78894,52331],{"class":51831},[49,78896,51838],{"class":73},[14,78898,78899],{},"这个也可以写成箭头函数：",[40,78901,78903],{"className":51164,"code":78902,"language":51166,"meta":27,"style":27},"const newArr = arr.filter(item => item >= 20)\n",[46,78904,78905],{"__ignoreMap":27},[49,78906,78907],{"class":51,"line":52},[49,78908,78902],{"class":73},[782,78910,78912],{"id":78911},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78914,78915],{},[25,78916],{"alt":27,"src":78917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78919,78920],{},"步骤：",[14,78922,78923],{},"①：渲染页面模块",[742,78925,78926,78929],{},[33,78927,78928],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[33,78930,78931],{},"用forEach+字符串的形式",[14,78933,78934],{},"②：点击不同需求，显示不同页面内容",[742,78936,78937,78940,78943,78946,78949],{},[33,78938,78939],{},"点击采取事件委托方式 .filter",[33,78941,78942],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[33,78944,78945],{},"筛选条件是根据点击的 data-index 来判断",[33,78947,78948],{},"可以使用对象解构，把事件对象解构",[33,78950,78951],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[40,78953,78955],{"className":51164,"code":78954,"language":51166,"meta":27,"style":27},"\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",[46,78956,78957,78967,78981,78985,78993,79007,79027,79039,79047,79053,79063,79073,79083,79087,79091,79097,79110,79122,79132,79144,79148,79152,79159,79172,79184,79201,79219,79232,79236,79240,79252,79262,79266,79270,79277,79318,79345,79355,79359,79363,79371,79383,79387,79391,79399,79411,79423,79434,79438,79442,79451,79463,79474,79478,79482,79491,79503,79515,79519,79523,79530,79540,79552,79564,79579,79583,79587,79595,79611,79621,79631,79641,79653,79657,79661,79671,79682,79692,79696,79704,79712,79716,79724,79739,79765,79790,79815,79834,79842,79856,79861,79866,79871,79876,79881,79889,79897,79902,79913,79918,79928,79938,79948,79958,79962,79966,79975,79984,79993,80002,80006,80010,80019,80028,80037,80046,80050,80054,80063,80072,80081,80090,80094,80098,80107,80116,80125,80134,80138,80142,80151,80160,80169,80178,80182,80186,80195,80204,80213,80222,80226,80230,80239,80248,80256,80265,80269,80273,80277,80282,80294,80299,80311,80315,80332,80360,80369,80374,80384,80394,80403,80408,80413,80417,80422,80439,80443,80448,80456,80461,80488,80493,80513,80518,80530,80535,80540,80545,80556,80570,80607,80625,80658,80675,80699,80703,80708,80714,80718,80722,80726,80734,80742,80746],{"__ignoreMap":27},[49,78958,78959,78961,78963,78965],{"class":51,"line":52},[49,78960,51828],{"class":73},[49,78962,51832],{"class":51831},[49,78964,51835],{"class":55},[49,78966,51838],{"class":73},[49,78968,78969,78971,78973,78975,78977,78979],{"class":51,"line":63},[49,78970,1739],{"class":73},[49,78972,51166],{"class":51831},[49,78974,51847],{"class":55},[49,78976,78],{"class":73},[49,78978,51852],{"class":59},[49,78980,51838],{"class":73},[49,78982,78983],{"class":51,"line":70},[49,78984,399],{"emptyLinePlaceholder":398},[49,78986,78987,78989,78991],{"class":51,"line":219},[49,78988,1739],{"class":73},[49,78990,51865],{"class":51831},[49,78992,51838],{"class":73},[49,78994,78995,78997,78999,79001,79003,79005],{"class":51,"line":233},[49,78996,52675],{"class":73},[49,78998,51875],{"class":51831},[49,79000,51878],{"class":55},[49,79002,78],{"class":73},[49,79004,51883],{"class":59},[49,79006,51838],{"class":73},[49,79008,79009,79011,79013,79015,79017,79019,79021,79023,79025],{"class":51,"line":241},[49,79010,52675],{"class":73},[49,79012,51875],{"class":51831},[49,79014,15617],{"class":55},[49,79016,78],{"class":73},[49,79018,51922],{"class":59},[49,79020,51902],{"class":55},[49,79022,78],{"class":73},[49,79024,51929],{"class":59},[49,79026,51838],{"class":73},[49,79028,79029,79031,79033,79035,79037],{"class":51,"line":1920},[49,79030,52675],{"class":73},[49,79032,51938],{"class":51831},[49,79034,51941],{"class":73},[49,79036,51938],{"class":51831},[49,79038,51838],{"class":73},[49,79040,79041,79043,79045],{"class":51,"line":2011},[49,79042,52675],{"class":73},[49,79044,757],{"class":51831},[49,79046,51838],{"class":73},[49,79048,79049,79051],{"class":51,"line":2017},[49,79050,7100],{"class":51831},[49,79052,16269],{"class":73},[49,79054,79055,79057,79059,79061],{"class":51,"line":2029},[49,79056,55226],{"class":159},[49,79058,51968],{"class":73},[49,79060,1021],{"class":159},[49,79062,1990],{"class":73},[49,79064,79065,79067,79069,79071],{"class":51,"line":2311},[49,79066,55237],{"class":159},[49,79068,51968],{"class":73},[49,79070,1021],{"class":159},[49,79072,1990],{"class":73},[49,79074,79075,79077,79079,79081],{"class":51,"line":2316},[49,79076,73127],{"class":159},[49,79078,51968],{"class":73},[49,79080,61036],{"class":159},[49,79082,1990],{"class":73},[49,79084,79085],{"class":51,"line":2322},[49,79086,2885],{"class":73},[49,79088,79089],{"class":51,"line":2327},[49,79090,399],{"emptyLinePlaceholder":398},[49,79092,79093,79095],{"class":51,"line":2341},[49,79094,62654],{"class":55},[49,79096,16269],{"class":73},[49,79098,79099,79101,79103,79106,79108],{"class":51,"line":2346},[49,79100,55302],{"class":159},[49,79102,51968],{"class":73},[49,79104,79105],{"class":159},"990",[49,79107,52023],{"class":77},[49,79109,1990],{"class":73},[49,79111,79112,79114,79116,79118,79120],{"class":51,"line":2352},[49,79113,55237],{"class":159},[49,79115,51968],{"class":73},[49,79117,1021],{"class":159},[49,79119,52087],{"class":159},[49,79121,1990],{"class":73},[49,79123,79124,79126,79128,79130],{"class":51,"line":2373},[49,79125,55540],{"class":159},[49,79127,51968],{"class":73},[49,79129,52008],{"class":159},[49,79131,1990],{"class":73},[49,79133,79134,79137,79139,79142],{"class":51,"line":2378},[49,79135,79136],{"class":159},"      flex-wrap",[49,79138,51968],{"class":73},[49,79140,79141],{"class":159},"wrap",[49,79143,1990],{"class":73},[49,79145,79146],{"class":51,"line":2392},[49,79147,2885],{"class":73},[49,79149,79150],{"class":51,"line":2397},[49,79151,399],{"emptyLinePlaceholder":398},[49,79153,79154,79157],{"class":51,"line":2426},[49,79155,79156],{"class":55},"    .item",[49,79158,16269],{"class":73},[49,79160,79161,79163,79165,79168,79170],{"class":51,"line":2431},[49,79162,55302],{"class":159},[49,79164,51968],{"class":73},[49,79166,79167],{"class":159},"240",[49,79169,52023],{"class":77},[49,79171,1990],{"class":73},[49,79173,79174,79176,79178,79180,79182],{"class":51,"line":2448},[49,79175,62531],{"class":159},[49,79177,51968],{"class":73},[49,79179,1275],{"class":159},[49,79181,52023],{"class":77},[49,79183,1990],{"class":73},[49,79185,79186,79188,79190,79192,79194,79197,79199],{"class":51,"line":2453},[49,79187,55226],{"class":159},[49,79189,51968],{"class":73},[49,79191,1529],{"class":159},[49,79193,52023],{"class":77},[49,79195,79196],{"class":159}," 30",[49,79198,52023],{"class":77},[49,79200,1990],{"class":73},[49,79202,79203,79205,79207,79209,79212,79215,79217],{"class":51,"line":2458},[49,79204,62391],{"class":159},[49,79206,51968],{"class":73},[49,79208,28652],{"class":159},[49,79210,79211],{"class":159}," ease",[49,79213,79214],{"class":159}," .5",[49,79216,1524],{"class":77},[49,79218,1990],{"class":73},[49,79220,79221,79224,79226,79228,79230],{"class":51,"line":2463},[49,79222,79223],{"class":159},"      margin-bottom",[49,79225,51968],{"class":73},[49,79227,1529],{"class":159},[49,79229,52023],{"class":77},[49,79231,1990],{"class":73},[49,79233,79234],{"class":51,"line":2477},[49,79235,2885],{"class":73},[49,79237,79238],{"class":51,"line":2482},[49,79239,399],{"emptyLinePlaceholder":398},[49,79241,79242,79245,79247,79250],{"class":51,"line":3274},[49,79243,79244],{"class":55},"    .item:nth-child",[49,79246,841],{"class":73},[49,79248,79249],{"class":159},"4n",[49,79251,13139],{"class":73},[49,79253,79254,79256,79258,79260],{"class":51,"line":3288},[49,79255,62531],{"class":159},[49,79257,51968],{"class":73},[49,79259,1021],{"class":159},[49,79261,1990],{"class":73},[49,79263,79264],{"class":51,"line":3296},[49,79265,2885],{"class":73},[49,79267,79268],{"class":51,"line":3301},[49,79269,399],{"emptyLinePlaceholder":398},[49,79271,79272,79275],{"class":51,"line":3307},[49,79273,79274],{"class":55},"    .item:hover",[49,79276,16269],{"class":73},[49,79278,79279,79282,79284,79286,79288,79290,79292,79294,79296,79299,79301,79303,79305,79307,79309,79311,79313,79316],{"class":51,"line":3313},[49,79280,79281],{"class":159},"      box-shadow",[49,79283,51968],{"class":73},[49,79285,1021],{"class":159},[49,79287,52023],{"class":77},[49,79289,4790],{"class":159},[49,79291,52023],{"class":77},[49,79293,2846],{"class":159},[49,79295,52023],{"class":77},[49,79297,79298],{"class":159}," rgba",[49,79300,841],{"class":73},[49,79302,1021],{"class":159},[49,79304,13132],{"class":73},[49,79306,1021],{"class":159},[49,79308,13132],{"class":73},[49,79310,1021],{"class":159},[49,79312,13132],{"class":73},[49,79314,79315],{"class":159},".2",[49,79317,3416],{"class":73},[49,79319,79320,79323,79325,79328,79330,79332,79334,79337,79339,79341,79343],{"class":51,"line":3318},[49,79321,79322],{"class":159},"      transform",[49,79324,51968],{"class":73},[49,79326,79327],{"class":159},"translate3d",[49,79329,841],{"class":73},[49,79331,1021],{"class":159},[49,79333,13132],{"class":73},[49,79335,79336],{"class":159},"-4",[49,79338,52023],{"class":77},[49,79340,13132],{"class":73},[49,79342,1021],{"class":159},[49,79344,3416],{"class":73},[49,79346,79347,79349,79351,79353],{"class":51,"line":8645},[49,79348,62556],{"class":159},[49,79350,51968],{"class":73},[49,79352,62561],{"class":159},[49,79354,1990],{"class":73},[49,79356,79357],{"class":51,"line":8669},[49,79358,2885],{"class":73},[49,79360,79361],{"class":51,"line":8674},[49,79362,399],{"emptyLinePlaceholder":398},[49,79364,79365,79367,79369],{"class":51,"line":8680},[49,79366,79156],{"class":55},[49,79368,56146],{"class":51831},[49,79370,16269],{"class":73},[49,79372,79373,79375,79377,79379,79381],{"class":51,"line":8707},[49,79374,55302],{"class":159},[49,79376,51968],{"class":73},[49,79378,1140],{"class":159},[49,79380,1157],{"class":77},[49,79382,1990],{"class":73},[49,79384,79385],{"class":51,"line":8712},[49,79386,2885],{"class":73},[49,79388,79389],{"class":51,"line":8718},[49,79390,399],{"emptyLinePlaceholder":398},[49,79392,79393,79395,79397],{"class":51,"line":8730},[49,79394,79156],{"class":55},[49,79396,62835],{"class":55},[49,79398,16269],{"class":73},[49,79400,79401,79403,79405,79407,79409],{"class":51,"line":8742},[49,79402,55453],{"class":159},[49,79404,51968],{"class":73},[49,79406,1479],{"class":159},[49,79408,52023],{"class":77},[49,79410,1990],{"class":73},[49,79412,79413,79415,79417,79419,79421],{"class":51,"line":8754},[49,79414,79223],{"class":159},[49,79416,51968],{"class":73},[49,79418,1275],{"class":159},[49,79420,52023],{"class":77},[49,79422,1990],{"class":73},[49,79424,79425,79427,79429,79432],{"class":51,"line":10413},[49,79426,57947],{"class":159},[49,79428,51968],{"class":73},[49,79430,79431],{"class":159},"#666",[49,79433,1990],{"class":73},[49,79435,79436],{"class":51,"line":10438},[49,79437,2885],{"class":73},[49,79439,79440],{"class":51,"line":10461},[49,79441,399],{"emptyLinePlaceholder":398},[49,79443,79444,79446,79449],{"class":51,"line":10485},[49,79445,79156],{"class":55},[49,79447,79448],{"class":55}," .price",[49,79450,16269],{"class":73},[49,79452,79453,79455,79457,79459,79461],{"class":51,"line":10490},[49,79454,55453],{"class":159},[49,79456,51968],{"class":73},[49,79458,1579],{"class":159},[49,79460,52023],{"class":77},[49,79462,1990],{"class":73},[49,79464,79465,79467,79469,79472],{"class":51,"line":10495},[49,79466,57947],{"class":159},[49,79468,51968],{"class":73},[49,79470,79471],{"class":159},"firebrick",[49,79473,1990],{"class":73},[49,79475,79476],{"class":51,"line":10500},[49,79477,2885],{"class":73},[49,79479,79480],{"class":51,"line":10509},[49,79481,399],{"emptyLinePlaceholder":398},[49,79483,79484,79486,79489],{"class":51,"line":10514},[49,79485,79156],{"class":55},[49,79487,79488],{"class":55}," .price::before",[49,79490,16269],{"class":73},[49,79492,79493,79496,79498,79501],{"class":51,"line":10520},[49,79494,79495],{"class":159},"      content",[49,79497,51968],{"class":73},[49,79499,79500],{"class":59},"'￥'",[49,79502,1990],{"class":73},[49,79504,79505,79507,79509,79511,79513],{"class":51,"line":10541},[49,79506,55453],{"class":159},[49,79508,51968],{"class":73},[49,79510,1378],{"class":159},[49,79512,52023],{"class":77},[49,79514,1990],{"class":73},[49,79516,79517],{"class":51,"line":10547},[49,79518,2885],{"class":73},[49,79520,79521],{"class":51,"line":10561},[49,79522,399],{"emptyLinePlaceholder":398},[49,79524,79525,79528],{"class":51,"line":10567},[49,79526,79527],{"class":55},"    .filter",[49,79529,16269],{"class":73},[49,79531,79532,79534,79536,79538],{"class":51,"line":10594},[49,79533,55540],{"class":159},[49,79535,51968],{"class":73},[49,79537,52008],{"class":159},[49,79539,1990],{"class":73},[49,79541,79542,79544,79546,79548,79550],{"class":51,"line":10603},[49,79543,55302],{"class":159},[49,79545,51968],{"class":73},[49,79547,79105],{"class":159},[49,79549,52023],{"class":77},[49,79551,1990],{"class":73},[49,79553,79554,79556,79558,79560,79562],{"class":51,"line":10609},[49,79555,55237],{"class":159},[49,79557,51968],{"class":73},[49,79559,1021],{"class":159},[49,79561,52087],{"class":159},[49,79563,1990],{"class":73},[49,79565,79566,79568,79570,79572,79574,79576],{"class":51,"line":10617},[49,79567,55226],{"class":159},[49,79569,51968],{"class":73},[49,79571,1485],{"class":159},[49,79573,52023],{"class":77},[49,79575,79196],{"class":159},[49,79577,79578],{"class":77},"px\n",[49,79580,79581],{"class":51,"line":10622},[49,79582,2885],{"class":73},[49,79584,79585],{"class":51,"line":17301},[49,79586,399],{"emptyLinePlaceholder":398},[49,79588,79589,79591,79593],{"class":51,"line":17307},[49,79590,79527],{"class":55},[49,79592,2098],{"class":51831},[49,79594,16269],{"class":73},[49,79596,79597,79599,79601,79603,79605,79607,79609],{"class":51,"line":17330},[49,79598,55226],{"class":159},[49,79600,51968],{"class":73},[49,79602,1275],{"class":159},[49,79604,52023],{"class":77},[49,79606,9647],{"class":159},[49,79608,52023],{"class":77},[49,79610,1990],{"class":73},[49,79612,79613,79615,79617,79619],{"class":51,"line":17336},[49,79614,62252],{"class":159},[49,79616,51968],{"class":73},[49,79618,62349],{"class":159},[49,79620,1990],{"class":73},[49,79622,79623,79625,79627,79629],{"class":51,"line":17359},[49,79624,57947],{"class":159},[49,79626,51968],{"class":73},[49,79628,79431],{"class":159},[49,79630,1990],{"class":73},[49,79632,79633,79635,79637,79639],{"class":51,"line":17373},[49,79634,64501],{"class":159},[49,79636,51968],{"class":73},[49,79638,55268],{"class":159},[49,79640,1990],{"class":73},[49,79642,79643,79645,79647,79649,79651],{"class":51,"line":17393},[49,79644,62281],{"class":159},[49,79646,51968],{"class":73},[49,79648,1529],{"class":159},[49,79650,52023],{"class":77},[49,79652,1990],{"class":73},[49,79654,79655],{"class":51,"line":17399},[49,79656,2885],{"class":73},[49,79658,79659],{"class":51,"line":17410},[49,79660,399],{"emptyLinePlaceholder":398},[49,79662,79663,79665,79667,79669],{"class":51,"line":17433},[49,79664,79527],{"class":55},[49,79666,2098],{"class":51831},[49,79668,62431],{"class":55},[49,79670,16269],{"class":73},[49,79672,79673,79675,79677,79680],{"class":51,"line":17455},[49,79674,55415],{"class":159},[49,79676,51968],{"class":73},[49,79678,79679],{"class":159},"#05943c",[49,79681,1990],{"class":73},[49,79683,79684,79686,79688,79690],{"class":51,"line":17460},[49,79685,57947],{"class":159},[49,79687,51968],{"class":73},[49,79689,61373],{"class":159},[49,79691,1990],{"class":73},[49,79693,79694],{"class":51,"line":17466},[49,79695,2885],{"class":73},[49,79697,79698,79700,79702],{"class":51,"line":17480},[49,79699,52948],{"class":73},[49,79701,757],{"class":51831},[49,79703,51838],{"class":73},[49,79705,79706,79708,79710],{"class":51,"line":17493},[49,79707,52316],{"class":73},[49,79709,51865],{"class":51831},[49,79711,51838],{"class":73},[49,79713,79714],{"class":51,"line":17498},[49,79715,399],{"emptyLinePlaceholder":398},[49,79717,79718,79720,79722],{"class":51,"line":17512},[49,79719,1739],{"class":73},[49,79721,52331],{"class":51831},[49,79723,51838],{"class":73},[49,79725,79726,79728,79730,79732,79734,79737],{"class":51,"line":17517},[49,79727,52675],{"class":73},[49,79729,52142],{"class":51831},[49,79731,54017],{"class":55},[49,79733,78],{"class":73},[49,79735,79736],{"class":59},"\"filter\"",[49,79738,51838],{"class":73},[49,79740,79741,79743,79745,79747,79749,79751,79754,79756,79758,79761,79763],{"class":51,"line":17523},[49,79742,51872],{"class":73},[49,79744,124],{"class":51831},[49,79746,61588],{"class":55},[49,79748,78],{"class":73},[49,79750,61593],{"class":59},[49,79752,79753],{"class":55}," data-index",[49,79755,78],{"class":73},[49,79757,4375],{"class":59},[49,79759,79760],{"class":73},">0-100元\u003C\u002F",[49,79762,124],{"class":51831},[49,79764,51838],{"class":73},[49,79766,79767,79769,79771,79773,79775,79777,79779,79781,79783,79786,79788],{"class":51,"line":17528},[49,79768,51872],{"class":73},[49,79770,124],{"class":51831},[49,79772,61588],{"class":55},[49,79774,78],{"class":73},[49,79776,61593],{"class":59},[49,79778,79753],{"class":55},[49,79780,78],{"class":73},[49,79782,4398],{"class":59},[49,79784,79785],{"class":73},">100-300元\u003C\u002F",[49,79787,124],{"class":51831},[49,79789,51838],{"class":73},[49,79791,79792,79794,79796,79798,79800,79802,79804,79806,79808,79811,79813],{"class":51,"line":17542},[49,79793,51872],{"class":73},[49,79795,124],{"class":51831},[49,79797,61588],{"class":55},[49,79799,78],{"class":73},[49,79801,61593],{"class":59},[49,79803,79753],{"class":55},[49,79805,78],{"class":73},[49,79807,4411],{"class":59},[49,79809,79810],{"class":73},">300元以上\u003C\u002F",[49,79812,124],{"class":51831},[49,79814,51838],{"class":73},[49,79816,79817,79819,79821,79823,79825,79827,79830,79832],{"class":51,"line":17547},[49,79818,51872],{"class":73},[49,79820,124],{"class":51831},[49,79822,61588],{"class":55},[49,79824,78],{"class":73},[49,79826,61593],{"class":59},[49,79828,79829],{"class":73},">全部区间\u003C\u002F",[49,79831,124],{"class":51831},[49,79833,51838],{"class":73},[49,79835,79836,79838,79840],{"class":51,"line":17552},[49,79837,52948],{"class":73},[49,79839,52142],{"class":51831},[49,79841,51838],{"class":73},[49,79843,79844,79846,79848,79850,79852,79854],{"class":51,"line":17566},[49,79845,52675],{"class":73},[49,79847,52142],{"class":51831},[49,79849,54017],{"class":55},[49,79851,78],{"class":73},[49,79853,63139],{"class":59},[49,79855,51838],{"class":73},[49,79857,79858],{"class":51,"line":17578},[49,79859,79860],{"class":66},"    \u003C!-- \u003Cdiv class=\"item\">\n",[49,79862,79863],{"class":51,"line":17583},[49,79864,79865],{"class":66},"      \u003Cimg src=\"\" alt=\"\">\n",[49,79867,79868],{"class":51,"line":17596},[49,79869,79870],{"class":66},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[49,79872,79873],{"class":51,"line":17601},[49,79874,79875],{"class":66},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[49,79877,79878],{"class":51,"line":17606},[49,79879,79880],{"class":66},"    \u003C\u002Fdiv> -->\n",[49,79882,79883,79885,79887],{"class":51,"line":17611},[49,79884,52948],{"class":73},[49,79886,52142],{"class":51831},[49,79888,51838],{"class":73},[49,79890,79891,79893,79895],{"class":51,"line":17624},[49,79892,52675],{"class":73},[49,79894,52344],{"class":51831},[49,79896,51838],{"class":73},[49,79898,79899],{"class":51,"line":17629},[49,79900,79901],{"class":66},"    \u002F\u002F 2. 初始化数据\n",[49,79903,79904,79906,79909,79911],{"class":51,"line":33164},[49,79905,11918],{"class":77},[49,79907,79908],{"class":159}," goodsList",[49,79910,14261],{"class":77},[49,79912,55978],{"class":73},[49,79914,79915],{"class":51,"line":33170},[49,79916,79917],{"class":73},"      {\n",[49,79919,79920,79923,79926],{"class":51,"line":33176},[49,79921,79922],{"class":73},"        id: ",[49,79924,79925],{"class":59},"'4001172'",[49,79927,31997],{"class":73},[49,79929,79930,79933,79936],{"class":51,"line":33182},[49,79931,79932],{"class":73},"        name: ",[49,79934,79935],{"class":59},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[49,79937,31997],{"class":73},[49,79939,79940,79943,79946],{"class":51,"line":33188},[49,79941,79942],{"class":73},"        price: ",[49,79944,79945],{"class":59},"'289.00'",[49,79947,31997],{"class":73},[49,79949,79950,79953,79956],{"class":51,"line":33199},[49,79951,79952],{"class":73},"        picture: ",[49,79954,79955],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[49,79957,31997],{"class":73},[49,79959,79960],{"class":51,"line":33205},[49,79961,78423],{"class":73},[49,79963,79964],{"class":51,"line":33225},[49,79965,79917],{"class":73},[49,79967,79968,79970,79973],{"class":51,"line":33231},[49,79969,79922],{"class":73},[49,79971,79972],{"class":59},"'4001594'",[49,79974,31997],{"class":73},[49,79976,79977,79979,79982],{"class":51,"line":33242},[49,79978,79932],{"class":73},[49,79980,79981],{"class":59},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[49,79983,31997],{"class":73},[49,79985,79986,79988,79991],{"class":51,"line":33248},[49,79987,79942],{"class":73},[49,79989,79990],{"class":59},"'288.00'",[49,79992,31997],{"class":73},[49,79994,79995,79997,80000],{"class":51,"line":33254},[49,79996,79952],{"class":73},[49,79998,79999],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[49,80001,31997],{"class":73},[49,80003,80004],{"class":51,"line":33260},[49,80005,78423],{"class":73},[49,80007,80008],{"class":51,"line":33266},[49,80009,79917],{"class":73},[49,80011,80012,80014,80017],{"class":51,"line":33272},[49,80013,79922],{"class":73},[49,80015,80016],{"class":59},"'4001009'",[49,80018,31997],{"class":73},[49,80020,80021,80023,80026],{"class":51,"line":33278},[49,80022,79932],{"class":73},[49,80024,80025],{"class":59},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[49,80027,31997],{"class":73},[49,80029,80030,80032,80035],{"class":51,"line":33284},[49,80031,79942],{"class":73},[49,80033,80034],{"class":59},"'109.00'",[49,80036,31997],{"class":73},[49,80038,80039,80041,80044],{"class":51,"line":33304},[49,80040,79952],{"class":73},[49,80042,80043],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[49,80045,31997],{"class":73},[49,80047,80048],{"class":51,"line":33310},[49,80049,78423],{"class":73},[49,80051,80052],{"class":51,"line":33326},[49,80053,79917],{"class":73},[49,80055,80056,80058,80061],{"class":51,"line":33332},[49,80057,79922],{"class":73},[49,80059,80060],{"class":59},"'4001874'",[49,80062,31997],{"class":73},[49,80064,80065,80067,80070],{"class":51,"line":33346},[49,80066,79932],{"class":73},[49,80068,80069],{"class":59},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[49,80071,31997],{"class":73},[49,80073,80074,80076,80079],{"class":51,"line":33352},[49,80075,79942],{"class":73},[49,80077,80078],{"class":59},"'488.00'",[49,80080,31997],{"class":73},[49,80082,80083,80085,80088],{"class":51,"line":33367},[49,80084,79952],{"class":73},[49,80086,80087],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[49,80089,31997],{"class":73},[49,80091,80092],{"class":51,"line":33373},[49,80093,78423],{"class":73},[49,80095,80096],{"class":51,"line":33382},[49,80097,79917],{"class":73},[49,80099,80100,80102,80105],{"class":51,"line":33388},[49,80101,79922],{"class":73},[49,80103,80104],{"class":59},"'4001649'",[49,80106,31997],{"class":73},[49,80108,80109,80111,80114],{"class":51,"line":33397},[49,80110,79932],{"class":73},[49,80112,80113],{"class":59},"'大师监制龙泉青瓷茶叶罐'",[49,80115,31997],{"class":73},[49,80117,80118,80120,80123],{"class":51,"line":33403},[49,80119,79942],{"class":73},[49,80121,80122],{"class":59},"'139.00'",[49,80124,31997],{"class":73},[49,80126,80127,80129,80132],{"class":51,"line":33409},[49,80128,79952],{"class":73},[49,80130,80131],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[49,80133,31997],{"class":73},[49,80135,80136],{"class":51,"line":33418},[49,80137,78423],{"class":73},[49,80139,80140],{"class":51,"line":33424},[49,80141,79917],{"class":73},[49,80143,80144,80146,80149],{"class":51,"line":33435},[49,80145,79922],{"class":73},[49,80147,80148],{"class":59},"'3997185'",[49,80150,31997],{"class":73},[49,80152,80153,80155,80158],{"class":51,"line":33441},[49,80154,79932],{"class":73},[49,80156,80157],{"class":59},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[49,80159,31997],{"class":73},[49,80161,80162,80164,80167],{"class":51,"line":33460},[49,80163,79942],{"class":73},[49,80165,80166],{"class":59},"'108.00'",[49,80168,31997],{"class":73},[49,80170,80171,80173,80176],{"class":51,"line":33466},[49,80172,79952],{"class":73},[49,80174,80175],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[49,80177,31997],{"class":73},[49,80179,80180],{"class":51,"line":33477},[49,80181,78423],{"class":73},[49,80183,80184],{"class":51,"line":33483},[49,80185,79917],{"class":73},[49,80187,80188,80190,80193],{"class":51,"line":33503},[49,80189,79922],{"class":73},[49,80191,80192],{"class":59},"'3997403'",[49,80194,31997],{"class":73},[49,80196,80197,80199,80202],{"class":51,"line":33519},[49,80198,79932],{"class":73},[49,80200,80201],{"class":59},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[49,80203,31997],{"class":73},[49,80205,80206,80208,80211],{"class":51,"line":33525},[49,80207,79942],{"class":73},[49,80209,80210],{"class":59},"'100.00'",[49,80212,31997],{"class":73},[49,80214,80215,80217,80220],{"class":51,"line":33539},[49,80216,79952],{"class":73},[49,80218,80219],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[49,80221,31997],{"class":73},[49,80223,80224],{"class":51,"line":33545},[49,80225,78423],{"class":73},[49,80227,80228],{"class":51,"line":33551},[49,80229,79917],{"class":73},[49,80231,80232,80234,80237],{"class":51,"line":33562},[49,80233,79922],{"class":73},[49,80235,80236],{"class":59},"'3998274'",[49,80238,31997],{"class":73},[49,80240,80241,80243,80246],{"class":51,"line":33568},[49,80242,79932],{"class":73},[49,80244,80245],{"class":59},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[49,80247,31997],{"class":73},[49,80249,80250,80252,80254],{"class":51,"line":33574},[49,80251,79942],{"class":73},[49,80253,80122],{"class":59},[49,80255,31997],{"class":73},[49,80257,80258,80260,80263],{"class":51,"line":33584},[49,80259,79952],{"class":73},[49,80261,80262],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[49,80264,31997],{"class":73},[49,80266,80267],{"class":51,"line":33590},[49,80268,78423],{"class":73},[49,80270,80271],{"class":51,"line":33601},[49,80272,53640],{"class":73},[49,80274,80275],{"class":51,"line":33607},[49,80276,399],{"emptyLinePlaceholder":398},[49,80278,80279],{"class":51,"line":33617},[49,80280,80281],{"class":66},"    \u002F\u002F 1.渲染函数\n",[49,80283,80284,80286,80288,80290,80292],{"class":51,"line":33622},[49,80285,70615],{"class":77},[49,80287,70618],{"class":55},[49,80289,841],{"class":73},[49,80291,4577],{"class":5913},[49,80293,13139],{"class":73},[49,80295,80296],{"class":51,"line":33628},[49,80297,80298],{"class":66},"      \u002F\u002F 声明空字符串\n",[49,80300,80301,80304,80307,80309],{"class":51,"line":33677},[49,80302,80303],{"class":77},"      let",[49,80305,80306],{"class":73}," str ",[49,80308,78],{"class":77},[49,80310,70635],{"class":59},[49,80312,80313],{"class":51,"line":33724},[49,80314,70640],{"class":66},[49,80316,80317,80319,80322,80324,80327,80330],{"class":51,"line":33729},[49,80318,58538],{"class":73},[49,80320,80321],{"class":55},"forEach",[49,80323,841],{"class":73},[49,80325,80326],{"class":5913},"item",[49,80328,80329],{"class":77}," =>",[49,80331,16269],{"class":73},[49,80333,80334,80336,80339,80342,80344,80347,80349,80352,80355,80357],{"class":51,"line":33735},[49,80335,61801],{"class":77},[49,80337,80338],{"class":73}," { ",[49,80340,80341],{"class":159},"name",[49,80343,13132],{"class":73},[49,80345,80346],{"class":159},"price",[49,80348,13132],{"class":73},[49,80350,80351],{"class":159},"picture",[49,80353,80354],{"class":73}," } ",[49,80356,78],{"class":77},[49,80358,80359],{"class":73}," item\n",[49,80361,80362,80365,80367],{"class":51,"line":33754},[49,80363,80364],{"class":73},"        str ",[49,80366,10174],{"class":77},[49,80368,70699],{"class":59},[49,80370,80371],{"class":51,"line":33760},[49,80372,80373],{"class":59},"          \u003Cdiv class=\"item\">\n",[49,80375,80376,80379,80381],{"class":51,"line":33780},[49,80377,80378],{"class":59},"            \u003Cimg src=\"${",[49,80380,80351],{"class":73},[49,80382,80383],{"class":59},"}\" alt=\"\">\n",[49,80385,80386,80389,80391],{"class":51,"line":33786},[49,80387,80388],{"class":59},"            \u003Cp class=\"name\">${",[49,80390,80341],{"class":73},[49,80392,80393],{"class":59},"}\u003C\u002Fp>\n",[49,80395,80396,80399,80401],{"class":51,"line":33792},[49,80397,80398],{"class":59},"            \u003Cp class=\"price\">${",[49,80400,80346],{"class":73},[49,80402,80393],{"class":59},[49,80404,80405],{"class":51,"line":33802},[49,80406,80407],{"class":59},"          \u003C\u002Fdiv>\n",[49,80409,80410],{"class":51,"line":33807},[49,80411,80412],{"class":59},"        `\n",[49,80414,80415],{"class":51,"line":33813},[49,80416,65346],{"class":73},[49,80418,80419],{"class":51,"line":33829},[49,80420,80421],{"class":66},"      \u002F\u002F 追加给List\n",[49,80423,80424,80426,80428,80430,80433,80435,80437],{"class":51,"line":33874},[49,80425,56302],{"class":73},[49,80427,54930],{"class":55},[49,80429,841],{"class":73},[49,80431,80432],{"class":59},"'.list'",[49,80434,74780],{"class":73},[49,80436,78],{"class":77},[49,80438,74516],{"class":73},[49,80440,80441],{"class":51,"line":33880},[49,80442,2885],{"class":73},[49,80444,80445],{"class":51,"line":33886},[49,80446,80447],{"class":66},"    \u002F\u002F 页面一打开就需要渲染\n",[49,80449,80450,80453],{"class":51,"line":33892},[49,80451,80452],{"class":55},"    render",[49,80454,80455],{"class":73},"(goodsList)\n",[49,80457,80458],{"class":51,"line":33903},[49,80459,80460],{"class":66},"    \u002F\u002F 2.过滤筛选\n",[49,80462,80463,80465,80467,80469,80472,80474,80476,80478,80480,80482,80484,80486],{"class":51,"line":33909},[49,80464,52938],{"class":73},[49,80466,54930],{"class":55},[49,80468,841],{"class":73},[49,80470,80471],{"class":59},"'.filter'",[49,80473,31357],{"class":73},[49,80475,58344],{"class":55},[49,80477,841],{"class":73},[49,80479,58349],{"class":59},[49,80481,13132],{"class":73},[49,80483,912],{"class":5913},[49,80485,80329],{"class":77},[49,80487,16269],{"class":73},[49,80489,80490],{"class":51,"line":33915},[49,80491,80492],{"class":66},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[49,80494,80495,80497,80499,80502,80504,80506,80508,80510],{"class":51,"line":33921},[49,80496,58759],{"class":77},[49,80498,80338],{"class":73},[49,80500,80501],{"class":159},"tagName",[49,80503,13132],{"class":73},[49,80505,32068],{"class":159},[49,80507,80354],{"class":73},[49,80509,78],{"class":77},[49,80511,80512],{"class":73}," e.target\n",[49,80514,80515],{"class":51,"line":33939},[49,80516,80517],{"class":66},"      \u002F\u002F 判断\n",[49,80519,80520,80522,80524,80526,80528],{"class":51,"line":33953},[49,80521,55011],{"class":77},[49,80523,67565],{"class":73},[49,80525,55017],{"class":77},[49,80527,68787],{"class":59},[49,80529,13139],{"class":73},[49,80531,80532],{"class":51,"line":33962},[49,80533,80534],{"class":66},"        \u002F\u002F console.log(11)\n",[49,80536,80537],{"class":51,"line":33971},[49,80538,80539],{"class":66},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[49,80541,80542],{"class":51,"line":33980},[49,80543,80544],{"class":66},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[49,80546,80547,80549,80551,80553],{"class":51,"line":33989},[49,80548,52361],{"class":77},[49,80550,52364],{"class":73},[49,80552,78],{"class":77},[49,80554,80555],{"class":73}," goodsList\n",[49,80557,80558,80560,80563,80565,80568],{"class":51,"line":33995},[49,80559,3194],{"class":77},[49,80561,80562],{"class":73}," (dataset.index ",[49,80564,55017],{"class":77},[49,80566,80567],{"class":59}," '1'",[49,80569,13139],{"class":73},[49,80571,80572,80575,80577,80580,80583,80585,80587,80589,80592,80594,80596,80599,80601,80603,80605],{"class":51,"line":34001},[49,80573,80574],{"class":73},"          arr ",[49,80576,78],{"class":77},[49,80578,80579],{"class":73}," goodsList.",[49,80581,80582],{"class":55},"filter",[49,80584,841],{"class":73},[49,80586,80326],{"class":5913},[49,80588,80329],{"class":77},[49,80590,80591],{"class":73}," item.price ",[49,80593,2409],{"class":77},[49,80595,4790],{"class":159},[49,80597,80598],{"class":77}," &&",[49,80600,80591],{"class":73},[49,80602,2287],{"class":77},[49,80604,6451],{"class":159},[49,80606,847],{"class":73},[49,80608,80609,80612,80614,80616,80618,80620,80623],{"class":51,"line":34009},[49,80610,80611],{"class":73},"        } ",[49,80613,2400],{"class":77},[49,80615,2403],{"class":77},[49,80617,80562],{"class":73},[49,80619,55017],{"class":77},[49,80621,80622],{"class":59}," '2'",[49,80624,13139],{"class":73},[49,80626,80627,80629,80631,80633,80635,80637,80639,80641,80643,80645,80647,80649,80651,80653,80656],{"class":51,"line":34014},[49,80628,80574],{"class":73},[49,80630,78],{"class":77},[49,80632,80579],{"class":73},[49,80634,80582],{"class":55},[49,80636,841],{"class":73},[49,80638,80326],{"class":5913},[49,80640,80329],{"class":77},[49,80642,80591],{"class":73},[49,80644,2409],{"class":77},[49,80646,6451],{"class":159},[49,80648,80598],{"class":77},[49,80650,80591],{"class":73},[49,80652,2287],{"class":77},[49,80654,80655],{"class":159}," 300",[49,80657,847],{"class":73},[49,80659,80660,80662,80664,80666,80668,80670,80673],{"class":51,"line":34020},[49,80661,80611],{"class":73},[49,80663,2400],{"class":77},[49,80665,2403],{"class":77},[49,80667,80562],{"class":73},[49,80669,55017],{"class":77},[49,80671,80672],{"class":59}," '3'",[49,80674,13139],{"class":73},[49,80676,80677,80679,80681,80683,80685,80687,80689,80691,80693,80695,80697],{"class":51,"line":34031},[49,80678,80574],{"class":73},[49,80680,78],{"class":77},[49,80682,80579],{"class":73},[49,80684,80582],{"class":55},[49,80686,841],{"class":73},[49,80688,80326],{"class":5913},[49,80690,80329],{"class":77},[49,80692,80591],{"class":73},[49,80694,2409],{"class":77},[49,80696,80655],{"class":159},[49,80698,847],{"class":73},[49,80700,80701],{"class":51,"line":34037},[49,80702,3226],{"class":73},[49,80704,80705],{"class":51,"line":34057},[49,80706,80707],{"class":66},"        \u002F\u002F 渲染函数\n",[49,80709,80710,80712],{"class":51,"line":34063},[49,80711,70939],{"class":55},[49,80713,52943],{"class":73},[49,80715,80716],{"class":51,"line":34069},[49,80717,52929],{"class":73},[49,80719,80720],{"class":51,"line":34075},[49,80721,399],{"emptyLinePlaceholder":398},[49,80723,80724],{"class":51,"line":34092},[49,80725,33992],{"class":73},[49,80727,80728,80730,80732],{"class":51,"line":34098},[49,80729,52948],{"class":73},[49,80731,52344],{"class":51831},[49,80733,51838],{"class":73},[49,80735,80736,80738,80740],{"class":51,"line":34104},[49,80737,52316],{"class":73},[49,80739,52331],{"class":51831},[49,80741,51838],{"class":73},[49,80743,80744],{"class":51,"line":34110},[49,80745,399],{"emptyLinePlaceholder":398},[49,80747,80748,80750,80752],{"class":51,"line":34116},[49,80749,52316],{"class":73},[49,80751,51166],{"class":51831},[49,80753,51838],{"class":73},[782,80755,80757],{"id":80756},"_410-深入了解对象","4.10 深入了解对象",[18,80759,80761],{"id":80760},"_4101-创建对象","4.10.1 创建对象",[14,80763,80764],{},[25,80765],{"alt":27,"src":80766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80768,80769],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[18,80771,80773],{"id":80772},"_4102-构造函数","4.10.2 构造函数",[14,80775,80776,80779],{},[112,80777,80778],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80781,80782,80785],{},[112,80783,80784],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[40,80787,80789],{"className":51164,"code":80788,"language":51166,"meta":27,"style":27},"\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",[46,80790,80791,80799,80804,80825,80838,80850,80862,80866,80871,80898,80903,80930],{"__ignoreMap":27},[49,80792,80793,80795,80797],{"class":51,"line":52},[49,80794,1739],{"class":73},[49,80796,52344],{"class":51831},[49,80798,51838],{"class":73},[49,80800,80801],{"class":51,"line":63},[49,80802,80803],{"class":66},"\u002F\u002F例：\n",[49,80805,80806,80808,80811,80813,80815,80817,80819,80821,80823],{"class":51,"line":70},[49,80807,54980],{"class":77},[49,80809,80810],{"class":55}," Pig",[49,80812,841],{"class":73},[49,80814,80341],{"class":5913},[49,80816,1207],{"class":73},[49,80818,70752],{"class":5913},[49,80820,1207],{"class":73},[49,80822,70769],{"class":5913},[49,80824,13139],{"class":73},[49,80826,80827,80830,80833,80835],{"class":51,"line":219},[49,80828,80829],{"class":159},"    this",[49,80831,80832],{"class":73},".name",[49,80834,78],{"class":77},[49,80836,80837],{"class":73},"name\n",[49,80839,80840,80842,80845,80847],{"class":51,"line":233},[49,80841,80829],{"class":159},[49,80843,80844],{"class":73},".age",[49,80846,78],{"class":77},[49,80848,80849],{"class":73},"age\n",[49,80851,80852,80854,80857,80859],{"class":51,"line":241},[49,80853,80829],{"class":159},[49,80855,80856],{"class":73},".gender",[49,80858,78],{"class":77},[49,80860,80861],{"class":73},"gender    \n",[49,80863,80864],{"class":51,"line":1920},[49,80865,2264],{"class":73},[49,80867,80868],{"class":51,"line":2011},[49,80869,80870],{"class":66},"\u002F\u002F创建佩奇对象\n",[49,80872,80873,80875,80878,80880,80882,80884,80887,80889,80891,80893,80896],{"class":51,"line":2017},[49,80874,7489],{"class":77},[49,80876,80877],{"class":159}," Peppa",[49,80879,12414],{"class":77},[49,80881,80810],{"class":55},[49,80883,841],{"class":73},[49,80885,80886],{"class":59},"'佩奇'",[49,80888,1207],{"class":73},[49,80890,1173],{"class":159},[49,80892,1207],{"class":73},[49,80894,80895],{"class":59},"'女'",[49,80897,847],{"class":73},[49,80899,80900],{"class":51,"line":2029},[49,80901,80902],{"class":66},"\u002F\u002F创建乔治对象\n",[49,80904,80905,80907,80910,80912,80914,80916,80919,80921,80923,80925,80928],{"class":51,"line":2311},[49,80906,7489],{"class":77},[49,80908,80909],{"class":159}," George",[49,80911,12414],{"class":77},[49,80913,80810],{"class":55},[49,80915,841],{"class":73},[49,80917,80918],{"class":59},"'乔治'",[49,80920,1207],{"class":73},[49,80922,909],{"class":159},[49,80924,1207],{"class":73},[49,80926,80927],{"class":59},"'男'",[49,80929,847],{"class":73},[49,80931,80932,80934,80936],{"class":51,"line":2316},[49,80933,52316],{"class":73},[49,80935,52344],{"class":51831},[49,80937,51838],{"class":73},[14,80939,80940],{},[25,80941],{"alt":27,"src":80942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80944,80945],{},[25,80946],{"alt":27,"src":80947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80949,80950],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80952,80953],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80955,80956],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80958,80959],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80961,80962],{},"这里用等号是因为：对象.属性=值",[14,80964,80965],{},"①利用对象字面量创建对象",[14,80967,80968],{},"const o={",[14,80970,80971],{},"name:'pink'",[14,80973,80974],{},"} ②利用new Object创建对象",[14,80976,80977],{},"const o=new Object({name:'pink'})",[14,80979,80980],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80982,80983],{},"构造函数创建对象的执行过程：",[14,80985,80986],{},[25,80987],{"alt":27,"src":80988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[18,80990,80992],{"id":80991},"_4103-实例成员","4.10.3 实例成员",[14,80994,80995],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[30,80997,80998,81001,81004],{},[33,80999,81000],{},"实例对象的属性和方法即为实例成员",[33,81002,81003],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[33,81005,81006],{},"构造函数创建的实例对象彼此独立互不影响",[18,81008,81010],{"id":81009},"_4104-静态成员","4.10.4 静态成员",[14,81012,81013],{},[25,81014],{"alt":27,"src":81015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,81017,81018],{},"静态成员有Date.now() Math.PI Math.random()",[14,81020,81021],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,81023,81024],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,81026,81027],{},"function Pig(name) n {",[14,81029,81030],{},"this.name=name",[14,81032,1775],{},[14,81034,81035],{},"Pig.eyes=2",[14,81037,81038],{},"Pig.sayHai=function () { console.log(this) }",[14,81040,81041],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,81043,81044],{},"console.log(Pig.eyes) \u002F\u002F2",[14,81046,12029],{},[30,81048,81049,81052,81055,81058,81061],{},[33,81050,81051],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[33,81053,81054],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[33,81056,81057],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[33,81059,81060],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[33,81062,81063],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,81065,81066],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[18,81068,81070],{"id":81069},"_4105-内置构造函数","4.10.5 内置构造函数",[14,81072,81073],{},"内置构造函数包含：",[14,81075,81076],{},[25,81077],{"alt":27,"src":81078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,81080,81081],{},[25,81082],{"alt":27,"src":81083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,81085,81086],{},"这些基本数据类型，js对他们进行了包装",[52344,81088,81089],{},"\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",[130,81091,81093],{"id":81092},"_41051-object","4.10.5.1 Object",[14,81095,81096],{},"Object 是内置的构造函数，用于创建普通对象",[14,81098,81099],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[40,81101,81103],{"className":51164,"code":81102,"language":51166,"meta":27,"style":27},"const user=new Object({name:'小明',age:15})\n",[46,81104,81105],{"__ignoreMap":27},[49,81106,81107],{"class":51,"line":52},[49,81108,81102],{"class":73},[14,81110,81111],{},"三个常用的静态方法：",[138,81113,81115],{"id":81114},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,81117,81118],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,81120,81121],{},[25,81122],{"alt":27,"src":81123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,81125,81126],{},[25,81127],{"alt":27,"src":81128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[40,81130,81132],{"className":53598,"code":81131,"language":53600,"meta":27,"style":27},"\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",[46,81133,81134,81142,81150,81155,81160,81165,81170,81175,81180,81188],{"__ignoreMap":27},[49,81135,81136,81138,81140],{"class":51,"line":52},[49,81137,1739],{"class":73},[49,81139,52331],{"class":51831},[49,81141,51838],{"class":73},[49,81143,81144,81146,81148],{"class":51,"line":63},[49,81145,52675],{"class":73},[49,81147,52344],{"class":51831},[49,81149,51838],{"class":73},[49,81151,81152],{"class":51,"line":70},[49,81153,81154],{"class":73},"    const o = { name: 'pink', age: 6 }\n",[49,81156,81157],{"class":51,"line":219},[49,81158,81159],{"class":73},"    \u002F\u002F 获得所有属性名\n",[49,81161,81162],{"class":51,"line":233},[49,81163,81164],{"class":73},"    const arr = Object.keys(o)\n",[49,81166,81167],{"class":51,"line":241},[49,81168,81169],{"class":73},"    console.log(arr)\n",[49,81171,81172],{"class":51,"line":1920},[49,81173,81174],{"class":73},"    \u002F\u002F 获得所有属性值\n",[49,81176,81177],{"class":51,"line":2011},[49,81178,81179],{"class":73},"    console.log(Object.values(o))\n",[49,81181,81182,81184,81186],{"class":51,"line":2017},[49,81183,52948],{"class":73},[49,81185,52344],{"class":51831},[49,81187,51838],{"class":73},[49,81189,81190,81192,81194],{"class":51,"line":2029},[49,81191,52316],{"class":73},[49,81193,52331],{"class":51831},[49,81195,51838],{"class":73},[138,81197,81199],{"id":81198},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,81201,81202],{},"Object.assign(oo,o)",[14,81204,81205],{},"后的东西添加给前 是追加",[14,81207,81208],{},[25,81209],{"alt":27,"src":81210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,81212,81213],{},[25,81214],{"alt":27,"src":81215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[40,81217,81219],{"className":53598,"code":81218,"language":53600,"meta":27,"style":27},"\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",[46,81220,81221,81229,81237,81241,81245,81249,81253,81257,81261,81266,81271,81276,81281,81286,81294],{"__ignoreMap":27},[49,81222,81223,81225,81227],{"class":51,"line":52},[49,81224,1739],{"class":73},[49,81226,52331],{"class":51831},[49,81228,51838],{"class":73},[49,81230,81231,81233,81235],{"class":51,"line":63},[49,81232,52675],{"class":73},[49,81234,52344],{"class":51831},[49,81236,51838],{"class":73},[49,81238,81239],{"class":51,"line":70},[49,81240,81154],{"class":73},[49,81242,81243],{"class":51,"line":219},[49,81244,81159],{"class":73},[49,81246,81247],{"class":51,"line":233},[49,81248,81164],{"class":73},[49,81250,81251],{"class":51,"line":241},[49,81252,81169],{"class":73},[49,81254,81255],{"class":51,"line":1920},[49,81256,81174],{"class":73},[49,81258,81259],{"class":51,"line":2011},[49,81260,81179],{"class":73},[49,81262,81263],{"class":51,"line":2017},[49,81264,81265],{"class":73},"    const oo = {}\n",[49,81267,81268],{"class":51,"line":2029},[49,81269,81270],{"class":73},"    Object.assign(oo, o)\n",[49,81272,81273],{"class":51,"line":2311},[49,81274,81275],{"class":73},"    console.log(oo)\n",[49,81277,81278],{"class":51,"line":2316},[49,81279,81280],{"class":73},"    Object.assign(o, { gender: '女' })\n",[49,81282,81283],{"class":51,"line":2322},[49,81284,81285],{"class":73},"    console.log(o)\n",[49,81287,81288,81290,81292],{"class":51,"line":2327},[49,81289,52948],{"class":73},[49,81291,52344],{"class":51831},[49,81293,51838],{"class":73},[49,81295,81296,81298,81300],{"class":51,"line":2341},[49,81297,52316],{"class":73},[49,81299,52331],{"class":51831},[49,81301,51838],{"class":73},[14,81303,81304],{},[25,81305],{"alt":27,"src":81306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[130,81308,81310],{"id":81309},"_41052-array","4.10.5.2 Array",[14,81312,81313],{},"Array 是内置的构造函数，用于创建数组",[14,81315,81316],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[40,81318,81320],{"className":51164,"code":81319,"language":51166,"meta":27,"style":27},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[46,81321,81322,81327],{"__ignoreMap":27},[49,81323,81324],{"class":51,"line":52},[49,81325,81326],{"class":73},"const arr=new Array(3,5)\n",[49,81328,81329],{"class":51,"line":63},[49,81330,81331],{"class":73},"console.log(arr)  \u002F\u002F[3,5]\n",[14,81333,81334],{},"Array的实例方法，这个方法是实例成员",[14,81336,81337],{},[25,81338],{"alt":27,"src":81339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[138,81341,81343],{"id":81342},"_410521-reduce","4.10.5.2.1 reduce",[14,81345,81346],{},[25,81347],{"alt":27,"src":81348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[40,81350,81352],{"className":53598,"code":81351,"language":53600,"meta":27,"style":27},"\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",[46,81353,81354,81362,81370,81375,81380,81385,81390,81394,81399,81404,81409,81413,81418,81423,81427,81432,81437,81442,81450],{"__ignoreMap":27},[49,81355,81356,81358,81360],{"class":51,"line":52},[49,81357,1739],{"class":73},[49,81359,52331],{"class":51831},[49,81361,51838],{"class":73},[49,81363,81364,81366,81368],{"class":51,"line":63},[49,81365,52675],{"class":73},[49,81367,52344],{"class":51831},[49,81369,51838],{"class":73},[49,81371,81372],{"class":51,"line":70},[49,81373,81374],{"class":73},"    const arr = [1, 5, 8]\n",[49,81376,81377],{"class":51,"line":219},[49,81378,81379],{"class":73},"    \u002F\u002F 1.没有初始值\n",[49,81381,81382],{"class":51,"line":233},[49,81383,81384],{"class":73},"    const total = arr.reduce(function (prev, current) {\n",[49,81386,81387],{"class":51,"line":241},[49,81388,81389],{"class":73},"      return prev + current\n",[49,81391,81392],{"class":51,"line":1920},[49,81393,33992],{"class":73},[49,81395,81396],{"class":51,"line":2011},[49,81397,81398],{"class":73},"    console.log(total)   \u002F\u002F14\n",[49,81400,81401],{"class":51,"line":2017},[49,81402,81403],{"class":73},"    \u002F\u002F 2.有初始值\n",[49,81405,81406],{"class":51,"line":2029},[49,81407,81408],{"class":73},"    const total1 = arr.reduce(function (prev, current) {\n",[49,81410,81411],{"class":51,"line":2311},[49,81412,81389],{"class":73},[49,81414,81415],{"class":51,"line":2316},[49,81416,81417],{"class":73},"    }, 10)\n",[49,81419,81420],{"class":51,"line":2322},[49,81421,81422],{"class":73},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[49,81424,81425],{"class":51,"line":2327},[49,81426,399],{"emptyLinePlaceholder":398},[49,81428,81429],{"class":51,"line":2341},[49,81430,81431],{"class":73},"    \u002F\u002F 3.箭头函数写法\n",[49,81433,81434],{"class":51,"line":2346},[49,81435,81436],{"class":73},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[49,81438,81439],{"class":51,"line":2352},[49,81440,81441],{"class":73},"    console.log(total2)   \u002F\u002F24\n",[49,81443,81444,81446,81448],{"class":51,"line":2373},[49,81445,52948],{"class":73},[49,81447,52344],{"class":51831},[49,81449,51838],{"class":73},[49,81451,81452,81454,81456],{"class":51,"line":2378},[49,81453,52316],{"class":73},[49,81455,52331],{"class":51831},[49,81457,51838],{"class":73},[14,81459,81460],{},"执行过程：",[30,81462,81463,81466,81469],{},[33,81464,81465],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[33,81467,81468],{},"每一次循环，把返回值给作为下一次循环的上一次值",[33,81470,81471],{},"如果有起始值，则起始值作为上一次值",[40,81473,81475],{"className":53598,"code":81474,"language":53600,"meta":27,"style":27},"\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",[46,81476,81477,81485,81493,81497,81501,81505,81509,81513,81517,81522,81527,81532,81537,81542,81546,81550,81554,81558,81562,81566,81571,81575,81580,81584,81589,81594,81598,81602,81606,81614],{"__ignoreMap":27},[49,81478,81479,81481,81483],{"class":51,"line":52},[49,81480,1739],{"class":73},[49,81482,52331],{"class":51831},[49,81484,51838],{"class":73},[49,81486,81487,81489,81491],{"class":51,"line":63},[49,81488,52675],{"class":73},[49,81490,52344],{"class":51831},[49,81492,51838],{"class":73},[49,81494,81495],{"class":51,"line":70},[49,81496,81374],{"class":73},[49,81498,81499],{"class":51,"line":219},[49,81500,81379],{"class":73},[49,81502,81503],{"class":51,"line":233},[49,81504,81384],{"class":73},[49,81506,81507],{"class":51,"line":241},[49,81508,81389],{"class":73},[49,81510,81511],{"class":51,"line":1920},[49,81512,33992],{"class":73},[49,81514,81515],{"class":51,"line":2011},[49,81516,81398],{"class":73},[49,81518,81519],{"class":51,"line":2017},[49,81520,81521],{"class":73},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[49,81523,81524],{"class":51,"line":2029},[49,81525,81526],{"class":73},"    \u002F\u002F     1              5                    6\n",[49,81528,81529],{"class":51,"line":2311},[49,81530,81531],{"class":73},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[49,81533,81534],{"class":51,"line":2316},[49,81535,81536],{"class":73},"    \u002F\u002F     6              8                    14\n",[49,81538,81539],{"class":51,"line":2322},[49,81540,81541],{"class":73},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[49,81543,81544],{"class":51,"line":2327},[49,81545,81403],{"class":73},[49,81547,81548],{"class":51,"line":2341},[49,81549,81408],{"class":73},[49,81551,81552],{"class":51,"line":2346},[49,81553,81389],{"class":73},[49,81555,81556],{"class":51,"line":2352},[49,81557,81417],{"class":73},[49,81559,81560],{"class":51,"line":2373},[49,81561,81422],{"class":73},[49,81563,81564],{"class":51,"line":2378},[49,81565,81521],{"class":73},[49,81567,81568],{"class":51,"line":2392},[49,81569,81570],{"class":73},"    \u002F\u002F     10             1                     11\n",[49,81572,81573],{"class":51,"line":2397},[49,81574,81531],{"class":73},[49,81576,81577],{"class":51,"line":2426},[49,81578,81579],{"class":73},"    \u002F\u002F     11             5                    16\n",[49,81581,81582],{"class":51,"line":2431},[49,81583,81531],{"class":73},[49,81585,81586],{"class":51,"line":2448},[49,81587,81588],{"class":73},"    \u002F\u002F     16             8                    24\n",[49,81590,81591],{"class":51,"line":2453},[49,81592,81593],{"class":73},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[49,81595,81596],{"class":51,"line":2458},[49,81597,81431],{"class":73},[49,81599,81600],{"class":51,"line":2463},[49,81601,81436],{"class":73},[49,81603,81604],{"class":51,"line":2477},[49,81605,81441],{"class":73},[49,81607,81608,81610,81612],{"class":51,"line":2482},[49,81609,52948],{"class":73},[49,81611,52344],{"class":51831},[49,81613,51838],{"class":73},[49,81615,81616,81618,81620],{"class":51,"line":3274},[49,81617,52316],{"class":73},[49,81619,52331],{"class":51831},[49,81621,51838],{"class":73},[138,81623,81625],{"id":81624},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81627,81628],{},[25,81629],{"alt":27,"src":81630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[40,81632,81634],{"className":53598,"code":81633,"language":53600,"meta":27,"style":27},"\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",[46,81635,81636,81644,81652,81657,81662,81667,81672,81676,81681,81686,81691,81696,81701,81706,81710,81715,81719,81724,81732],{"__ignoreMap":27},[49,81637,81638,81640,81642],{"class":51,"line":52},[49,81639,1739],{"class":73},[49,81641,52331],{"class":51831},[49,81643,51838],{"class":73},[49,81645,81646,81648,81650],{"class":51,"line":63},[49,81647,52675],{"class":73},[49,81649,52344],{"class":51831},[49,81651,51838],{"class":73},[49,81653,81654],{"class":51,"line":70},[49,81655,81656],{"class":73},"    const arr = [\n",[49,81658,81659],{"class":51,"line":219},[49,81660,81661],{"class":73},"      { name: '张三', salary: 10000 },\n",[49,81663,81664],{"class":51,"line":233},[49,81665,81666],{"class":73},"      { name: '李四', salary: 10000 },\n",[49,81668,81669],{"class":51,"line":241},[49,81670,81671],{"class":73},"      { name: '王五', salary: 10000 }\n",[49,81673,81674],{"class":51,"line":1920},[49,81675,53640],{"class":73},[49,81677,81678],{"class":51,"line":2011},[49,81679,81680],{"class":73},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[49,81682,81683],{"class":51,"line":2017},[49,81684,81685],{"class":73},"    \u002F\u002F prev是累计值\n",[49,81687,81688],{"class":51,"line":2029},[49,81689,81690],{"class":73},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[49,81692,81693],{"class":51,"line":2311},[49,81694,81695],{"class":73},"    console.log(total)\n",[49,81697,81698],{"class":51,"line":2316},[49,81699,81700],{"class":73},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[49,81702,81703],{"class":51,"line":2322},[49,81704,81705],{"class":73},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[49,81707,81708],{"class":51,"line":2327},[49,81709,81700],{"class":73},[49,81711,81712],{"class":51,"line":2341},[49,81713,81714],{"class":73},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[49,81716,81717],{"class":51,"line":2346},[49,81718,81700],{"class":73},[49,81720,81721],{"class":51,"line":2352},[49,81722,81723],{"class":73},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[49,81725,81726,81728,81730],{"class":51,"line":2373},[49,81727,52948],{"class":73},[49,81729,52344],{"class":51831},[49,81731,51838],{"class":73},[49,81733,81734,81736,81738],{"class":51,"line":2378},[49,81735,52316],{"class":73},[49,81737,52331],{"class":51831},[49,81739,51838],{"class":73},[138,81741,81743],{"id":81742},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81745,81746],{},[25,81747],{"alt":27,"src":81748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81750,81751],{},[25,81752],{"alt":27,"src":81753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[30,81755,81756],{},[33,81757,81758],{},"find()",[14,81760,81761],{},"循环查找，找到第一个就ok",[14,81763,81764],{},[124,81765,81768],{"href":81766,"rel":81767},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[128],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[40,81770,81772],{"className":51164,"code":81771,"language":51166,"meta":27,"style":27},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[46,81773,81774,81779,81784],{"__ignoreMap":27},[49,81775,81776],{"class":51,"line":52},[49,81777,81778],{"class":73},"const array1 = [5, 12, 8, 130, 44]\n",[49,81780,81781],{"class":51,"line":63},[49,81782,81783],{"class":73},"const found = array1.find((element) => element > 10)\n",[49,81785,81786],{"class":51,"line":70},[49,81787,81788],{"class":73},"console.log(found)  \u002F\u002F12\n",[14,81790,81791,81793,81794,81799,81800,81803,81804,81806,81807,81812,81813,81815,81816,81818,81819,81821,81822],{},[46,81792,81758],{}," 方法是一个",[124,81795,81798],{"href":81796,"rel":81797},"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",[128],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[46,81801,81802],{},"callbackFn"," 函数，直到 ",[46,81805,81802],{}," 返回一个",[124,81808,81811],{"href":81809,"rel":81810},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[128],"真值","。然后 ",[46,81814,81758],{}," 返回该元素并停止迭代数组。如果 ",[46,81817,81802],{}," 从未返回真值，则 ",[46,81820,81758],{}," 返回 ",[46,81823,81824],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[40,81826,81828],{"className":53598,"code":81827,"language":53600,"meta":27,"style":27},"\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",[46,81829,81830,81838,81846,81851,81856,81861,81865,81870,81875,81879,81884,81889,81893,81897,81902,81907,81911,81915,81920,81925,81930,81935,81940,81944,81949,81954,81959,81964,81968,81973,81981],{"__ignoreMap":27},[49,81831,81832,81834,81836],{"class":51,"line":52},[49,81833,1739],{"class":73},[49,81835,52331],{"class":51831},[49,81837,51838],{"class":73},[49,81839,81840,81842,81844],{"class":51,"line":63},[49,81841,52675],{"class":73},[49,81843,52344],{"class":51831},[49,81845,51838],{"class":73},[49,81847,81848],{"class":51,"line":70},[49,81849,81850],{"class":73},"    const arr = ['red', 'blue', 'green']\n",[49,81852,81853],{"class":51,"line":219},[49,81854,81855],{"class":73},"    const found = arr.find(item => item === 'pink')\n",[49,81857,81858],{"class":51,"line":233},[49,81859,81860],{"class":73},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[49,81862,81863],{"class":51,"line":241},[49,81864,399],{"emptyLinePlaceholder":398},[49,81866,81867],{"class":51,"line":1920},[49,81868,81869],{"class":73},"    \u002F\u002F 使用场景，用于查找数据\n",[49,81871,81872],{"class":51,"line":2011},[49,81873,81874],{"class":73},"    const arr1 = [\n",[49,81876,81877],{"class":51,"line":2017},[49,81878,79917],{"class":73},[49,81880,81881],{"class":51,"line":2029},[49,81882,81883],{"class":73},"        name: '小米',\n",[49,81885,81886],{"class":51,"line":2311},[49,81887,81888],{"class":73},"        price: 1999\n",[49,81890,81891],{"class":51,"line":2316},[49,81892,78423],{"class":73},[49,81894,81895],{"class":51,"line":2322},[49,81896,79917],{"class":73},[49,81898,81899],{"class":51,"line":2327},[49,81900,81901],{"class":73},"        name: '华为',\n",[49,81903,81904],{"class":51,"line":2341},[49,81905,81906],{"class":73},"        price: 3999\n",[49,81908,81909],{"class":51,"line":2346},[49,81910,52929],{"class":73},[49,81912,81913],{"class":51,"line":2352},[49,81914,53640],{"class":73},[49,81916,81917],{"class":51,"line":2373},[49,81918,81919],{"class":73},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[49,81921,81922],{"class":51,"line":2378},[49,81923,81924],{"class":73},"    \u002F\u002F const found1 = arr1.find(item => {\n",[49,81926,81927],{"class":51,"line":2392},[49,81928,81929],{"class":73},"    \u002F\u002F   if (item.name === '小米') {\n",[49,81931,81932],{"class":51,"line":2397},[49,81933,81934],{"class":73},"    \u002F\u002F     return item\n",[49,81936,81937],{"class":51,"line":2426},[49,81938,81939],{"class":73},"    \u002F\u002F   }\n",[49,81941,81942],{"class":51,"line":2431},[49,81943,63821],{"class":73},[49,81945,81946],{"class":51,"line":2448},[49,81947,81948],{"class":73},"    \u002F\u002F 另一种写法\n",[49,81950,81951],{"class":51,"line":2453},[49,81952,81953],{"class":73},"    const found1 = arr1.find(item => {\n",[49,81955,81956],{"class":51,"line":2458},[49,81957,81958],{"class":73},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[49,81960,81961],{"class":51,"line":2463},[49,81962,81963],{"class":73},"      return item.name = '小米'\n",[49,81965,81966],{"class":51,"line":2477},[49,81967,33992],{"class":73},[49,81969,81970],{"class":51,"line":2482},[49,81971,81972],{"class":73},"    console.log(found1)\n",[49,81974,81975,81977,81979],{"class":51,"line":3274},[49,81976,52948],{"class":73},[49,81978,52344],{"class":51831},[49,81980,51838],{"class":73},[49,81982,81983,81985,81987],{"class":51,"line":3288},[49,81984,52316],{"class":73},[49,81986,52331],{"class":51831},[49,81988,51838],{"class":73},[14,81990,81991],{},[25,81992],{"alt":27,"src":81993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81995,81996],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[30,81998,81999],{"start":63},[33,82000,82001],{},"every()返回的是布尔值",[14,82003,82004],{},[124,82005,82008],{"href":82006,"rel":82007},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[128],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,82010,82011],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,82013,82014],{},"some是只有有一个就没问题",[14,82016,82017],{},"every是必须全是才行",[40,82019,82023],{"className":82020,"code":82021,"language":82022,"meta":27,"style":27},"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",[46,82024,82025,82041,82055,82059,82068],{"__ignoreMap":27},[49,82026,82027,82029,82032,82034,82036,82039],{"class":51,"line":52},[49,82028,54980],{"class":77},[49,82030,82031],{"class":73}," isBigEnough(element, ",[49,82033,74589],{"class":77},[49,82035,13132],{"class":73},[49,82037,82038],{"class":77},"array",[49,82040,13139],{"class":73},[49,82042,82043,82046,82049,82051,82053],{"class":51,"line":63},[49,82044,82045],{"class":77},"  return",[49,82047,82048],{"class":73}," element ",[49,82050,2409],{"class":77},[49,82052,2736],{"class":159},[49,82054,1990],{"class":73},[49,82056,82057],{"class":51,"line":70},[49,82058,2264],{"class":73},[49,82060,82061,82064,82066],{"class":51,"line":219},[49,82062,82063],{"class":73},"[12, 5, 8, 130, 44].every(isBigEnough); ",[49,82065,33860],{"class":77},[49,82067,55047],{"class":73},[49,82069,82070,82073,82075],{"class":51,"line":233},[49,82071,82072],{"class":73},"[12, 54, 18, 130, 44].every(isBigEnough); ",[49,82074,33860],{"class":77},[49,82076,58471],{"class":73},[40,82078,82080],{"className":53598,"code":82079,"language":53600,"meta":27,"style":27},"\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",[46,82081,82082,82090,82098,82103,82107,82112,82117,82125],{"__ignoreMap":27},[49,82083,82084,82086,82088],{"class":51,"line":52},[49,82085,1739],{"class":73},[49,82087,52331],{"class":51831},[49,82089,51838],{"class":73},[49,82091,82092,82094,82096],{"class":51,"line":63},[49,82093,52675],{"class":73},[49,82095,52344],{"class":51831},[49,82097,51838],{"class":73},[49,82099,82100],{"class":51,"line":70},[49,82101,82102],{"class":73},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[49,82104,82105],{"class":51,"line":219},[49,82106,78853],{"class":73},[49,82108,82109],{"class":51,"line":233},[49,82110,82111],{"class":73},"    const flag = arr.every(item => item >= 10)\n",[49,82113,82114],{"class":51,"line":241},[49,82115,82116],{"class":73},"    console.log(flag)    \u002F\u002Ftrue\n",[49,82118,82119,82121,82123],{"class":51,"line":1920},[49,82120,52948],{"class":73},[49,82122,52344],{"class":51831},[49,82124,51838],{"class":73},[49,82126,82127,82129,82131],{"class":51,"line":2011},[49,82128,52316],{"class":73},[49,82130,52331],{"class":51831},[49,82132,51838],{"class":73},[40,82134,82136],{"className":53598,"code":82135,"language":53600,"meta":27,"style":27},"\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",[46,82137,82138,82146,82154,82158,82163,82168,82173,82181],{"__ignoreMap":27},[49,82139,82140,82142,82144],{"class":51,"line":52},[49,82141,1739],{"class":73},[49,82143,52331],{"class":51831},[49,82145,51838],{"class":73},[49,82147,82148,82150,82152],{"class":51,"line":63},[49,82149,52675],{"class":73},[49,82151,52344],{"class":51831},[49,82153,51838],{"class":73},[49,82155,82156],{"class":51,"line":70},[49,82157,82102],{"class":73},[49,82159,82160],{"class":51,"line":219},[49,82161,82162],{"class":73},"    const arr = [10, 0, 5]\n",[49,82164,82165],{"class":51,"line":233},[49,82166,82167],{"class":73},"    const flag = arr.some(item => item >= 10)\n",[49,82169,82170],{"class":51,"line":241},[49,82171,82172],{"class":73},"    console.log(flag)   \u002F\u002Ftrue\n",[49,82174,82175,82177,82179],{"class":51,"line":1920},[49,82176,52948],{"class":73},[49,82178,52344],{"class":51831},[49,82180,51838],{"class":73},[49,82182,82183,82185,82187],{"class":51,"line":2011},[49,82184,52316],{"class":73},[49,82186,52331],{"class":51831},[49,82188,51838],{"class":73},[138,82190,82192],{"id":82191},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,82194,82195],{},[25,82196],{"alt":27,"src":82197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[40,82199,82201],{"className":51164,"code":82200,"language":51166,"meta":27,"style":27},"\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",[46,82202,82203,82213,82227,82231,82239,82253,82273,82285,82293,82300,82312,82324,82336,82348,82358,82368,82372,82380,82388,82392,82400,82412,82420,82442,82447,82452,82485,82493,82501,82505],{"__ignoreMap":27},[49,82204,82205,82207,82209,82211],{"class":51,"line":52},[49,82206,51828],{"class":73},[49,82208,51832],{"class":51831},[49,82210,51835],{"class":55},[49,82212,51838],{"class":73},[49,82214,82215,82217,82219,82221,82223,82225],{"class":51,"line":63},[49,82216,1739],{"class":73},[49,82218,51166],{"class":51831},[49,82220,51847],{"class":55},[49,82222,78],{"class":73},[49,82224,51852],{"class":59},[49,82226,51838],{"class":73},[49,82228,82229],{"class":51,"line":70},[49,82230,399],{"emptyLinePlaceholder":398},[49,82232,82233,82235,82237],{"class":51,"line":219},[49,82234,1739],{"class":73},[49,82236,51865],{"class":51831},[49,82238,51838],{"class":73},[49,82240,82241,82243,82245,82247,82249,82251],{"class":51,"line":233},[49,82242,52675],{"class":73},[49,82244,51875],{"class":51831},[49,82246,51878],{"class":55},[49,82248,78],{"class":73},[49,82250,51883],{"class":59},[49,82252,51838],{"class":73},[49,82254,82255,82257,82259,82261,82263,82265,82267,82269,82271],{"class":51,"line":241},[49,82256,52675],{"class":73},[49,82258,51875],{"class":51831},[49,82260,15617],{"class":55},[49,82262,78],{"class":73},[49,82264,51922],{"class":59},[49,82266,51902],{"class":55},[49,82268,78],{"class":73},[49,82270,51929],{"class":59},[49,82272,51838],{"class":73},[49,82274,82275,82277,82279,82281,82283],{"class":51,"line":1920},[49,82276,52675],{"class":73},[49,82278,51938],{"class":51831},[49,82280,51941],{"class":73},[49,82282,51938],{"class":51831},[49,82284,51838],{"class":73},[49,82286,82287,82289,82291],{"class":51,"line":2011},[49,82288,52675],{"class":73},[49,82290,757],{"class":51831},[49,82292,51838],{"class":73},[49,82294,82295,82298],{"class":51,"line":2017},[49,82296,82297],{"class":51831},"    div",[49,82299,16269],{"class":73},[49,82301,82302,82304,82306,82308,82310],{"class":51,"line":2029},[49,82303,55302],{"class":159},[49,82305,51968],{"class":73},[49,82307,2421],{"class":159},[49,82309,52023],{"class":77},[49,82311,1990],{"class":73},[49,82313,82314,82316,82318,82320,82322],{"class":51,"line":2311},[49,82315,55316],{"class":159},[49,82317,51968],{"class":73},[49,82319,1230],{"class":159},[49,82321,52023],{"class":77},[49,82323,1990],{"class":73},[49,82325,82326,82328,82330,82332,82334],{"class":51,"line":2316},[49,82327,57890],{"class":159},[49,82329,51968],{"class":73},[49,82331,1230],{"class":159},[49,82333,52023],{"class":77},[49,82335,1990],{"class":73},[49,82337,82338,82340,82342,82344,82346],{"class":51,"line":2322},[49,82339,65664],{"class":159},[49,82341,51968],{"class":73},[49,82343,1327],{"class":159},[49,82345,52023],{"class":77},[49,82347,1990],{"class":73},[49,82349,82350,82352,82354,82356],{"class":51,"line":2327},[49,82351,57817],{"class":159},[49,82353,51968],{"class":73},[49,82355,52123],{"class":159},[49,82357,1990],{"class":73},[49,82359,82360,82362,82364,82366],{"class":51,"line":2341},[49,82361,55415],{"class":159},[49,82363,51968],{"class":73},[49,82365,52176],{"class":159},[49,82367,1990],{"class":73},[49,82369,82370],{"class":51,"line":2346},[49,82371,2885],{"class":73},[49,82373,82374,82376,82378],{"class":51,"line":2352},[49,82375,52948],{"class":73},[49,82377,757],{"class":51831},[49,82379,51838],{"class":73},[49,82381,82382,82384,82386],{"class":51,"line":2373},[49,82383,52316],{"class":73},[49,82385,51865],{"class":51831},[49,82387,51838],{"class":73},[49,82389,82390],{"class":51,"line":2378},[49,82391,399],{"emptyLinePlaceholder":398},[49,82393,82394,82396,82398],{"class":51,"line":2392},[49,82395,1739],{"class":73},[49,82397,52331],{"class":51831},[49,82399,51838],{"class":73},[49,82401,82402,82404,82406,82408,82410],{"class":51,"line":2397},[49,82403,52675],{"class":73},[49,82405,52142],{"class":51831},[49,82407,55845],{"class":73},[49,82409,52142],{"class":51831},[49,82411,51838],{"class":73},[49,82413,82414,82416,82418],{"class":51,"line":2426},[49,82415,52675],{"class":73},[49,82417,52344],{"class":51831},[49,82419,51838],{"class":73},[49,82421,82422,82424,82427,82429,82432,82435,82437,82440],{"class":51,"line":2431},[49,82423,11918],{"class":77},[49,82425,82426],{"class":159}," spec",[49,82428,14261],{"class":77},[49,82430,82431],{"class":73}," { size: ",[49,82433,82434],{"class":59},"'40cm*40cm'",[49,82436,55995],{"class":73},[49,82438,82439],{"class":59},"'黑色'",[49,82441,56135],{"class":73},[49,82443,82444],{"class":51,"line":2448},[49,82445,82446],{"class":66},"    \u002F\u002F const arr = Object.values(spec)\n",[49,82448,82449],{"class":51,"line":2453},[49,82450,82451],{"class":66},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[49,82453,82454,82456,82458,82460,82463,82465,82467,82470,82473,82476,82478,82480,82483],{"class":51,"line":2458},[49,82455,52938],{"class":73},[49,82457,54930],{"class":55},[49,82459,841],{"class":73},[49,82461,82462],{"class":59},"'div'",[49,82464,74780],{"class":73},[49,82466,78],{"class":77},[49,82468,82469],{"class":73}," Object.",[49,82471,82472],{"class":55},"values",[49,82474,82475],{"class":73},"(spec).",[49,82477,74754],{"class":55},[49,82479,841],{"class":73},[49,82481,82482],{"class":59},"'\u002F'",[49,82484,847],{"class":73},[49,82486,82487,82489,82491],{"class":51,"line":2463},[49,82488,52948],{"class":73},[49,82490,52344],{"class":51831},[49,82492,51838],{"class":73},[49,82494,82495,82497,82499],{"class":51,"line":2477},[49,82496,52316],{"class":73},[49,82498,52331],{"class":51831},[49,82500,51838],{"class":73},[49,82502,82503],{"class":51,"line":2482},[49,82504,399],{"emptyLinePlaceholder":398},[49,82506,82507,82509,82511],{"class":51,"line":3274},[49,82508,52316],{"class":73},[49,82510,51166],{"class":51831},[49,82512,51838],{"class":73},[14,82514,82515],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[138,82517,82519],{"id":82518},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82521,82522],{},"静态方法，将伪数组转换为真数组",[14,82524,82525],{},[25,82526],{"alt":27,"src":82527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[40,82529,82531],{"className":53598,"code":82530,"language":53600,"meta":27,"style":27},"\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",[46,82532,82533,82541,82549,82561,82573,82585,82593,82601,82606,82611,82616,82621,82629],{"__ignoreMap":27},[49,82534,82535,82537,82539],{"class":51,"line":52},[49,82536,1739],{"class":73},[49,82538,52331],{"class":51831},[49,82540,51838],{"class":73},[49,82542,82543,82545,82547],{"class":51,"line":63},[49,82544,52675],{"class":73},[49,82546,742],{"class":51831},[49,82548,51838],{"class":73},[49,82550,82551,82553,82555,82557,82559],{"class":51,"line":70},[49,82552,51872],{"class":73},[49,82554,33],{"class":51831},[49,82556,55845],{"class":73},[49,82558,33],{"class":51831},[49,82560,51838],{"class":73},[49,82562,82563,82565,82567,82569,82571],{"class":51,"line":219},[49,82564,51872],{"class":73},[49,82566,33],{"class":51831},[49,82568,55845],{"class":73},[49,82570,33],{"class":51831},[49,82572,51838],{"class":73},[49,82574,82575,82577,82579,82581,82583],{"class":51,"line":233},[49,82576,51872],{"class":73},[49,82578,33],{"class":51831},[49,82580,55845],{"class":73},[49,82582,33],{"class":51831},[49,82584,51838],{"class":73},[49,82586,82587,82589,82591],{"class":51,"line":241},[49,82588,52948],{"class":73},[49,82590,742],{"class":51831},[49,82592,51838],{"class":73},[49,82594,82595,82597,82599],{"class":51,"line":1920},[49,82596,52675],{"class":73},[49,82598,52344],{"class":51831},[49,82600,51838],{"class":73},[49,82602,82603],{"class":51,"line":2011},[49,82604,82605],{"class":73},"    const lis = document.querySelectorAll('li')\n",[49,82607,82608],{"class":51,"line":2017},[49,82609,82610],{"class":73},"    const liss = Array.from(lis)\n",[49,82612,82613],{"class":51,"line":2029},[49,82614,82615],{"class":73},"    liss.pop()\n",[49,82617,82618],{"class":51,"line":2311},[49,82619,82620],{"class":73},"    console.log(liss)\n",[49,82622,82623,82625,82627],{"class":51,"line":2316},[49,82624,52948],{"class":73},[49,82626,52344],{"class":51831},[49,82628,51838],{"class":73},[49,82630,82631,82633,82635],{"class":51,"line":2322},[49,82632,52316],{"class":73},[49,82634,52331],{"class":51831},[49,82636,51838],{"class":73},[14,82638,82639],{},[25,82640],{"alt":27,"src":82641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[130,82643,82645],{"id":82644},"_41053-string","4.10.5.3 String",[14,82647,82648],{},[25,82649],{"alt":27,"src":82650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[138,82652,82654],{"id":82653},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[40,82656,82658],{"className":53598,"code":82657,"language":53600,"meta":27,"style":27},"\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",[46,82659,82660,82668,82676,82681,82686,82691,82695,82700,82705,82710,82718],{"__ignoreMap":27},[49,82661,82662,82664,82666],{"class":51,"line":52},[49,82663,1739],{"class":73},[49,82665,52331],{"class":51831},[49,82667,51838],{"class":73},[49,82669,82670,82672,82674],{"class":51,"line":63},[49,82671,52675],{"class":73},[49,82673,52344],{"class":51831},[49,82675,51838],{"class":73},[49,82677,82678],{"class":51,"line":70},[49,82679,82680],{"class":73},"    \u002F\u002F 把字符串转化为数组\n",[49,82682,82683],{"class":51,"line":219},[49,82684,82685],{"class":73},"    const str = 'pink,red'\n",[49,82687,82688],{"class":51,"line":233},[49,82689,82690],{"class":73},"    const arr = str.split(',')\n",[49,82692,82693],{"class":51,"line":241},[49,82694,81169],{"class":73},[49,82696,82697],{"class":51,"line":1920},[49,82698,82699],{"class":73},"    const str1 = '2025-8-25'\n",[49,82701,82702],{"class":51,"line":2011},[49,82703,82704],{"class":73},"    const arr1 = str1.split('-')\n",[49,82706,82707],{"class":51,"line":2017},[49,82708,82709],{"class":73},"    console.log(arr1)\n",[49,82711,82712,82714,82716],{"class":51,"line":2029},[49,82713,52948],{"class":73},[49,82715,52344],{"class":51831},[49,82717,51838],{"class":73},[49,82719,82720,82722,82724],{"class":51,"line":2311},[49,82721,52316],{"class":73},[49,82723,52331],{"class":51831},[49,82725,51838],{"class":73},[138,82727,82729],{"id":82728},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82731,5878],{},[14,82733,82734],{},"substring(indexStart)",[14,82736,82737],{},"substring(indexStart, indexEnd)",[742,82739,82740,82751,82763,82773],{},[33,82741,82742,82743,82746,82747,82750],{},"如果省略了 ",[46,82744,82745],{},"indexEnd","，则 ",[46,82748,82749],{},"substring()"," 提取字符直到字符串的末尾",[33,82752,82753,82754,82757,82758,82746,82760,82762],{},"如果 ",[46,82755,82756],{},"indexStart"," 等于 ",[46,82759,82745],{},[46,82761,82749],{}," 返回一个空字符串",[33,82764,82753,82765,82767,82768,82746,82770,82772],{},[46,82766,82756],{}," 大于 ",[46,82769,82745],{},[46,82771,82749],{}," 的效果就像交换了这两个参数一样",[33,82774,82775],{},"结束的索引号不包含想要截取的部分",[40,82777,82779],{"className":82020,"code":82778,"language":82022,"meta":27,"style":27},"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",[46,82780,82781,82793,82797,82831,82861,82865,82896,82900,82927,82957,82987,82991,83022],{"__ignoreMap":27},[49,82782,82783,82786,82788,82791],{"class":51,"line":52},[49,82784,82785],{"class":73},"const anyString ",[49,82787,78],{"class":77},[49,82789,82790],{"class":59}," \"Mozilla\"",[49,82792,1990],{"class":73},[49,82794,82795],{"class":51,"line":63},[49,82796,399],{"emptyLinePlaceholder":398},[49,82798,82799,82802,82804,82806,82808,82811,82813,82816,82818,82820,82822,82824,82826,82828],{"class":51,"line":70},[49,82800,82801],{"class":159},"console",[49,82803,1387],{"class":73},[49,82805,58778],{"class":159},[49,82807,841],{"class":73},[49,82809,82810],{"class":159},"anyString",[49,82812,1387],{"class":73},[49,82814,82815],{"class":159},"substring",[49,82817,841],{"class":73},[49,82819,1021],{"class":159},[49,82821,13132],{"class":73},[49,82823,1047],{"class":159},[49,82825,75784],{"class":73},[49,82827,33860],{"class":77},[49,82829,82830],{"class":59}," 'M'\n",[49,82832,82833,82835,82837,82839,82841,82843,82845,82847,82849,82851,82853,82855,82857,82859],{"class":51,"line":219},[49,82834,82801],{"class":159},[49,82836,1387],{"class":73},[49,82838,58778],{"class":159},[49,82840,841],{"class":73},[49,82842,82810],{"class":159},[49,82844,1387],{"class":73},[49,82846,82815],{"class":159},[49,82848,841],{"class":73},[49,82850,1047],{"class":159},[49,82852,13132],{"class":73},[49,82854,1021],{"class":159},[49,82856,75784],{"class":73},[49,82858,33860],{"class":77},[49,82860,82830],{"class":59},[49,82862,82863],{"class":51,"line":233},[49,82864,399],{"emptyLinePlaceholder":398},[49,82866,82867,82869,82871,82873,82875,82877,82879,82881,82883,82885,82887,82889,82891,82893],{"class":51,"line":241},[49,82868,82801],{"class":159},[49,82870,1387],{"class":73},[49,82872,58778],{"class":159},[49,82874,841],{"class":73},[49,82876,82810],{"class":159},[49,82878,1387],{"class":73},[49,82880,82815],{"class":159},[49,82882,841],{"class":73},[49,82884,1021],{"class":159},[49,82886,13132],{"class":73},[49,82888,1173],{"class":159},[49,82890,75784],{"class":73},[49,82892,33860],{"class":77},[49,82894,82895],{"class":59}," 'Mozill'\n",[49,82897,82898],{"class":51,"line":1920},[49,82899,399],{"emptyLinePlaceholder":398},[49,82901,82902,82904,82906,82908,82910,82912,82914,82916,82918,82920,82922,82924],{"class":51,"line":2011},[49,82903,82801],{"class":159},[49,82905,1387],{"class":73},[49,82907,58778],{"class":159},[49,82909,841],{"class":73},[49,82911,82810],{"class":159},[49,82913,1387],{"class":73},[49,82915,82815],{"class":159},[49,82917,841],{"class":73},[49,82919,1122],{"class":159},[49,82921,75784],{"class":73},[49,82923,33860],{"class":77},[49,82925,82926],{"class":59}," 'lla'\n",[49,82928,82929,82931,82933,82935,82937,82939,82941,82943,82945,82947,82949,82951,82953,82955],{"class":51,"line":2017},[49,82930,82801],{"class":159},[49,82932,1387],{"class":73},[49,82934,58778],{"class":159},[49,82936,841],{"class":73},[49,82938,82810],{"class":159},[49,82940,1387],{"class":73},[49,82942,82815],{"class":159},[49,82944,841],{"class":73},[49,82946,1122],{"class":159},[49,82948,13132],{"class":73},[49,82950,1198],{"class":159},[49,82952,75840],{"class":73},[49,82954,33860],{"class":77},[49,82956,82926],{"class":59},[49,82958,82959,82961,82963,82965,82967,82969,82971,82973,82975,82977,82979,82981,82983,82985],{"class":51,"line":2029},[49,82960,82801],{"class":159},[49,82962,1387],{"class":73},[49,82964,58778],{"class":159},[49,82966,841],{"class":73},[49,82968,82810],{"class":159},[49,82970,1387],{"class":73},[49,82972,82815],{"class":159},[49,82974,841],{"class":73},[49,82976,1198],{"class":159},[49,82978,13132],{"class":73},[49,82980,1122],{"class":159},[49,82982,75784],{"class":73},[49,82984,33860],{"class":77},[49,82986,82926],{"class":59},[49,82988,82989],{"class":51,"line":2311},[49,82990,399],{"emptyLinePlaceholder":398},[49,82992,82993,82995,82997,82999,83001,83003,83005,83007,83009,83011,83013,83015,83017,83019],{"class":51,"line":2316},[49,82994,82801],{"class":159},[49,82996,1387],{"class":73},[49,82998,58778],{"class":159},[49,83000,841],{"class":73},[49,83002,82810],{"class":159},[49,83004,1387],{"class":73},[49,83006,82815],{"class":159},[49,83008,841],{"class":73},[49,83010,1021],{"class":159},[49,83012,13132],{"class":73},[49,83014,1198],{"class":159},[49,83016,75784],{"class":73},[49,83018,33860],{"class":77},[49,83020,83021],{"class":59}," 'Mozilla'\n",[49,83023,83024,83026,83028,83030,83032,83034,83036,83038,83040,83042,83044,83046,83048,83050],{"class":51,"line":2322},[49,83025,82801],{"class":159},[49,83027,1387],{"class":73},[49,83029,58778],{"class":159},[49,83031,841],{"class":73},[49,83033,82810],{"class":159},[49,83035,1387],{"class":73},[49,83037,82815],{"class":159},[49,83039,841],{"class":73},[49,83041,1021],{"class":159},[49,83043,13132],{"class":73},[49,83045,1275],{"class":159},[49,83047,75784],{"class":73},[49,83049,33860],{"class":77},[49,83051,83021],{"class":59},[138,83053,83055],{"id":83054},"_410533-startswith","4.10.5.3.3 startsWith",[14,83057,83058,83061,83062,83067,83068,83070,83071],{},[46,83059,83060],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[112,83063,83064],{},[46,83065,83066],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[46,83069,2062],{}," 或 ",[46,83072,66551],{},[40,83074,83076],{"className":78026,"code":83075,"language":78028,"meta":27,"style":27},"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",[46,83077,83078,83090,83109,83114,83134],{"__ignoreMap":27},[49,83079,83080,83082,83085,83087],{"class":51,"line":52},[49,83081,7489],{"class":77},[49,83083,83084],{"class":73}," str1 ",[49,83086,78],{"class":77},[49,83088,83089],{"class":59}," \"Saturday night plans\"\n",[49,83091,83092,83094,83096,83099,83102,83104,83107],{"class":51,"line":63},[49,83093,78063],{"class":73},[49,83095,58778],{"class":55},[49,83097,83098],{"class":73},"(str1.",[49,83100,83101],{"class":55},"startsWith",[49,83103,841],{"class":73},[49,83105,83106],{"class":59},"\"Sat\"",[49,83108,31028],{"class":73},[49,83110,83111],{"class":51,"line":70},[49,83112,83113],{"class":66},"\u002F\u002F Expected output: true\n",[49,83115,83116,83118,83120,83122,83124,83126,83128,83130,83132],{"class":51,"line":219},[49,83117,78063],{"class":73},[49,83119,58778],{"class":55},[49,83121,83098],{"class":73},[49,83123,83101],{"class":55},[49,83125,841],{"class":73},[49,83127,83106],{"class":59},[49,83129,13132],{"class":73},[49,83131,909],{"class":159},[49,83133,31028],{"class":73},[49,83135,83136],{"class":51,"line":233},[49,83137,83138],{"class":66},"\u002F\u002F Expected output: false\n",[40,83140,83142],{"className":51164,"code":83141,"language":51166,"meta":27,"style":27},"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",[46,83143,83144,83149,83154,83158,83163,83168],{"__ignoreMap":27},[49,83145,83146],{"class":51,"line":52},[49,83147,83148],{"class":73},"startsWith(searchString)\n",[49,83150,83151],{"class":51,"line":63},[49,83152,83153],{"class":73},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[49,83155,83156],{"class":51,"line":70},[49,83157,399],{"emptyLinePlaceholder":398},[49,83159,83160],{"class":51,"line":219},[49,83161,83162],{"class":73},"const str3 = 'pink老师上课中'\n",[49,83164,83165],{"class":51,"line":233},[49,83166,83167],{"class":73},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[49,83169,83170],{"class":51,"line":241},[49,83171,83172],{"class":73},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[138,83174,83176],{"id":83175},"_410534-includes","4.10.5.3.4 includes",[14,83178,83179],{},"includes(searchString) includes(searchString, position)",[30,83181,83182],{},[33,83183,83184],{},"searchString:",[14,83186,83187,83188,83190,83191,83196,83197,83202,83203,22197,83206,83209,83210,83213],{},"一个要在 ",[46,83189,1999],{}," 中查找的字符串。",[124,83192,83195],{"href":83193,"rel":83194},"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",[128],"不能是正则表达式","。所有非正则表达式的值都会被",[124,83198,83201],{"href":83199,"rel":83200},"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",[128],"强制转换为字符串","，因此如果该参数被省略或传入 ",[46,83204,83205],{},"undefined",[46,83207,83208],{},"includes()"," 方法会在字符串中搜索 ",[46,83211,83212],{},"\"undefined\"","，这通常不是你想要的",[30,83215,83216],{"start":63},[33,83217,83218,1688],{},[46,83219,83220],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,83222,83223,83224,83227,83228],{},"在字符串中开始搜索 ",[46,83225,83226],{},"searchString"," 的位置。默认值为 ",[46,83229,1021],{},[30,83231,83232],{"start":70},[33,83233,83234],{},"返回值：",[14,83236,83237,83238,83240,83241,83245,83246],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[46,83239,83226],{}," 为空字符串的情况），则返回 ",[112,83242,83243],{},[46,83244,2062],{}," ，否则返回 ",[112,83247,83248],{},[46,83249,66551],{},[30,83251,83252],{"start":219},[33,83253,83254],{},"异常：",[14,83256,82753,83257,14492,83259,83263],{},[46,83258,83226],{},[124,83260,83262],{"href":83193,"rel":83261},[128],"是一个正则表达式","，则会抛出",[14,83265,83266],{},"只要是有就是true，不需要非得以谁开头结尾",[40,83268,83270],{"className":78026,"code":83269,"language":78028,"meta":27,"style":27},"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",[46,83271,83272,83283,83306,83325,83345,83367,83386],{"__ignoreMap":27},[49,83273,83274,83276,83278,83280],{"class":51,"line":52},[49,83275,7489],{"class":77},[49,83277,80306],{"class":73},[49,83279,78],{"class":77},[49,83281,83282],{"class":59}," \"To be, or not to be, that is the question.\"\n",[49,83284,83285,83287,83289,83292,83295,83297,83300,83303],{"class":51,"line":63},[49,83286,78063],{"class":73},[49,83288,58778],{"class":55},[49,83290,83291],{"class":73},"(str.",[49,83293,83294],{"class":55},"includes",[49,83296,841],{"class":73},[49,83298,83299],{"class":59},"\"To be\"",[49,83301,83302],{"class":73},"))",[49,83304,83305],{"class":66},"  \u002F\u002F true\n",[49,83307,83308,83310,83312,83314,83316,83318,83321,83323],{"class":51,"line":70},[49,83309,78063],{"class":73},[49,83311,58778],{"class":55},[49,83313,83291],{"class":73},[49,83315,83294],{"class":55},[49,83317,841],{"class":73},[49,83319,83320],{"class":59},"\"question\"",[49,83322,83302],{"class":73},[49,83324,83305],{"class":66},[49,83326,83327,83329,83331,83333,83335,83337,83340,83342],{"class":51,"line":219},[49,83328,78063],{"class":73},[49,83330,58778],{"class":55},[49,83332,83291],{"class":73},[49,83334,83294],{"class":55},[49,83336,841],{"class":73},[49,83338,83339],{"class":59},"\"nonexistent\"",[49,83341,83302],{"class":73},[49,83343,83344],{"class":66},"  \u002F\u002F false\n",[49,83346,83347,83349,83351,83353,83355,83357,83359,83361,83363,83365],{"class":51,"line":233},[49,83348,78063],{"class":73},[49,83350,58778],{"class":55},[49,83352,83291],{"class":73},[49,83354,83294],{"class":55},[49,83356,841],{"class":73},[49,83358,83299],{"class":59},[49,83360,13132],{"class":73},[49,83362,1047],{"class":159},[49,83364,83302],{"class":73},[49,83366,83344],{"class":66},[49,83368,83369,83371,83373,83375,83377,83379,83382,83384],{"class":51,"line":241},[49,83370,78063],{"class":73},[49,83372,58778],{"class":55},[49,83374,83291],{"class":73},[49,83376,83294],{"class":55},[49,83378,841],{"class":73},[49,83380,83381],{"class":59},"\"TO BE\"",[49,83383,83302],{"class":73},[49,83385,83344],{"class":66},[49,83387,83388,83390,83392,83394,83396,83398,83400,83402],{"class":51,"line":1920},[49,83389,78063],{"class":73},[49,83391,58778],{"class":55},[49,83393,83291],{"class":73},[49,83395,83294],{"class":55},[49,83397,841],{"class":73},[49,83399,8349],{"class":59},[49,83401,83302],{"class":73},[49,83403,83305],{"class":66},[138,83405,83407],{"id":83406},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[40,83409,83411],{"className":53598,"code":83410,"language":53600,"meta":27,"style":27},"\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",[46,83412,83413,83421,83429,83434,83439,83444,83449,83454,83462],{"__ignoreMap":27},[49,83414,83415,83417,83419],{"class":51,"line":52},[49,83416,1739],{"class":73},[49,83418,52331],{"class":51831},[49,83420,51838],{"class":73},[49,83422,83423,83425,83427],{"class":51,"line":63},[49,83424,52675],{"class":73},[49,83426,52344],{"class":51831},[49,83428,51838],{"class":73},[49,83430,83431],{"class":51,"line":70},[49,83432,83433],{"class":73},"    const num = 10\n",[49,83435,83436],{"class":51,"line":219},[49,83437,83438],{"class":73},"    \u002F\u002F 强制转换\n",[49,83440,83441],{"class":51,"line":233},[49,83442,83443],{"class":73},"    console.log(String(num))\n",[49,83445,83446],{"class":51,"line":241},[49,83447,83448],{"class":73},"    \u002F\u002F toString()方法转换\n",[49,83450,83451],{"class":51,"line":1920},[49,83452,83453],{"class":73},"    console.log(num.toString())\n",[49,83455,83456,83458,83460],{"class":51,"line":2011},[49,83457,52948],{"class":73},[49,83459,52344],{"class":51831},[49,83461,51838],{"class":73},[49,83463,83464,83466,83468],{"class":51,"line":2017},[49,83465,52316],{"class":73},[49,83467,52331],{"class":51831},[49,83469,51838],{"class":73},[138,83471,83473],{"id":83472},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83475,83476],{},[25,83477],{"alt":27,"src":83478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[40,83480,83482],{"className":51164,"code":83481,"language":51166,"meta":27,"style":27},"\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",[46,83483,83484,83494,83508,83512,83520,83534,83554,83566,83574,83578,83586,83598,83606,83618,83623,83628,83633,83680,83696,83704,83712,83716],{"__ignoreMap":27},[49,83485,83486,83488,83490,83492],{"class":51,"line":52},[49,83487,51828],{"class":73},[49,83489,51832],{"class":51831},[49,83491,51835],{"class":55},[49,83493,51838],{"class":73},[49,83495,83496,83498,83500,83502,83504,83506],{"class":51,"line":63},[49,83497,1739],{"class":73},[49,83499,51166],{"class":51831},[49,83501,51847],{"class":55},[49,83503,78],{"class":73},[49,83505,51852],{"class":59},[49,83507,51838],{"class":73},[49,83509,83510],{"class":51,"line":70},[49,83511,399],{"emptyLinePlaceholder":398},[49,83513,83514,83516,83518],{"class":51,"line":219},[49,83515,1739],{"class":73},[49,83517,51865],{"class":51831},[49,83519,51838],{"class":73},[49,83521,83522,83524,83526,83528,83530,83532],{"class":51,"line":233},[49,83523,52675],{"class":73},[49,83525,51875],{"class":51831},[49,83527,51878],{"class":55},[49,83529,78],{"class":73},[49,83531,51883],{"class":59},[49,83533,51838],{"class":73},[49,83535,83536,83538,83540,83542,83544,83546,83548,83550,83552],{"class":51,"line":241},[49,83537,52675],{"class":73},[49,83539,51875],{"class":51831},[49,83541,15617],{"class":55},[49,83543,78],{"class":73},[49,83545,51922],{"class":59},[49,83547,51902],{"class":55},[49,83549,78],{"class":73},[49,83551,51929],{"class":59},[49,83553,51838],{"class":73},[49,83555,83556,83558,83560,83562,83564],{"class":51,"line":1920},[49,83557,52675],{"class":73},[49,83559,51938],{"class":51831},[49,83561,51941],{"class":73},[49,83563,51938],{"class":51831},[49,83565,51838],{"class":73},[49,83567,83568,83570,83572],{"class":51,"line":2011},[49,83569,52316],{"class":73},[49,83571,51865],{"class":51831},[49,83573,51838],{"class":73},[49,83575,83576],{"class":51,"line":2017},[49,83577,399],{"emptyLinePlaceholder":398},[49,83579,83580,83582,83584],{"class":51,"line":2029},[49,83581,1739],{"class":73},[49,83583,52331],{"class":51831},[49,83585,51838],{"class":73},[49,83587,83588,83590,83592,83594,83596],{"class":51,"line":2311},[49,83589,52675],{"class":73},[49,83591,52142],{"class":51831},[49,83593,55845],{"class":73},[49,83595,52142],{"class":51831},[49,83597,51838],{"class":73},[49,83599,83600,83602,83604],{"class":51,"line":2316},[49,83601,52675],{"class":73},[49,83603,52344],{"class":51831},[49,83605,51838],{"class":73},[49,83607,83608,83610,83613,83615],{"class":51,"line":2322},[49,83609,11918],{"class":77},[49,83611,83612],{"class":159}," gift",[49,83614,14261],{"class":77},[49,83616,83617],{"class":59}," '50g的茶叶，清洗球'\n",[49,83619,83620],{"class":51,"line":2327},[49,83621,83622],{"class":66},"    \u002F\u002F 1.把字符串拆分为数组\n",[49,83624,83625],{"class":51,"line":2341},[49,83626,83627],{"class":66},"    \u002F\u002F console.log(gift.split(','))\n",[49,83629,83630],{"class":51,"line":2346},[49,83631,83632],{"class":66},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[49,83634,83635,83637,83639,83641,83644,83647,83649,83652,83654,83656,83658,83660,83662,83665,83667,83670,83672,83674,83676,83678],{"class":51,"line":2352},[49,83636,11918],{"class":77},[49,83638,74450],{"class":159},[49,83640,14261],{"class":77},[49,83642,83643],{"class":73}," gift.",[49,83645,83646],{"class":55},"split",[49,83648,841],{"class":73},[49,83650,83651],{"class":59},"'，'",[49,83653,31357],{"class":73},[49,83655,74575],{"class":55},[49,83657,841],{"class":73},[49,83659,80326],{"class":5913},[49,83661,80329],{"class":77},[49,83663,83664],{"class":59}," `\u003Cspan>【赠品】${",[49,83666,80326],{"class":73},[49,83668,83669],{"class":59},"}\u003C\u002Fspan>\u003Cbr>`",[49,83671,31357],{"class":73},[49,83673,74754],{"class":55},[49,83675,841],{"class":73},[49,83677,74759],{"class":59},[49,83679,847],{"class":73},[49,83681,83682,83684,83686,83688,83690,83692,83694],{"class":51,"line":2373},[49,83683,52938],{"class":73},[49,83685,54930],{"class":55},[49,83687,841],{"class":73},[49,83689,82462],{"class":59},[49,83691,74780],{"class":73},[49,83693,78],{"class":77},[49,83695,74516],{"class":73},[49,83697,83698,83700,83702],{"class":51,"line":2378},[49,83699,52948],{"class":73},[49,83701,52344],{"class":51831},[49,83703,51838],{"class":73},[49,83705,83706,83708,83710],{"class":51,"line":2392},[49,83707,52316],{"class":73},[49,83709,52331],{"class":51831},[49,83711,51838],{"class":73},[49,83713,83714],{"class":51,"line":2397},[49,83715,399],{"emptyLinePlaceholder":398},[49,83717,83718,83720,83722],{"class":51,"line":2426},[49,83719,52316],{"class":73},[49,83721,51166],{"class":51831},[49,83723,51838],{"class":73},[130,83725,83727],{"id":83726},"_41054-number","4.10.5.4 Number",[14,83729,83730],{},[25,83731],{"alt":27,"src":83732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83734,83735],{},"整数也可以进行toFixed来保留小数",[14,83737,83738],{},"比如：",[14,83740,83741],{},"const price=10",[14,83743,83744],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[130,83746,83748],{"id":83747},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83750,83751],{},[25,83752],{"alt":27,"src":83753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[40,83755,83757],{"className":51164,"code":83756,"language":51166,"meta":27,"style":27},"\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",[46,83758,83759,83769,83783,83787,83795,83809,83829,83841,83849,83855,83865,83875,83885,83889,83893,83899,83911,83925,83929,83933,83939,83951,83967,83977,83993,83997,84001,84007,84017,84027,84031,84035,84043,84055,84067,84079,84083,84087,84095,84107,84111,84115,84126,84136,84148,84160,84170,84174,84178,84186,84195,84207,84217,84227,84231,84235,84243,84252,84259,84269,84281,84285,84289,84298,84308,84319,84331,84343,84347,84351,84360,84370,84381,84385,84389,84395,84407,84419,84429,84439,84457,84469,84473,84477,84486,84498,84508,84518,84530,84534,84542,84550,84554,84562,84576,84584,84598,84626,84634,84642,84652,84656,84664,84672,84681,84689,84698,84708,84712,84716,84724,84732,84741,84749,84757,84770,84774,84778,84786,84794,84803,84811,84819,84834,84838,84842,84850,84858,84867,84875,84883,84897,84905,84909,84913,84918,84944,84949,84986,84991,85014,85019,85073,85078,85114,85118,85124,85129,85138,85152,85161,85180,85189,85199,85204,85209,85222,85227,85281,85307,85315,85323,85327],{"__ignoreMap":27},[49,83760,83761,83763,83765,83767],{"class":51,"line":52},[49,83762,51828],{"class":73},[49,83764,51832],{"class":51831},[49,83766,51835],{"class":55},[49,83768,51838],{"class":73},[49,83770,83771,83773,83775,83777,83779,83781],{"class":51,"line":63},[49,83772,1739],{"class":73},[49,83774,51166],{"class":51831},[49,83776,51847],{"class":55},[49,83778,78],{"class":73},[49,83780,51852],{"class":59},[49,83782,51838],{"class":73},[49,83784,83785],{"class":51,"line":70},[49,83786,399],{"emptyLinePlaceholder":398},[49,83788,83789,83791,83793],{"class":51,"line":219},[49,83790,1739],{"class":73},[49,83792,51865],{"class":51831},[49,83794,51838],{"class":73},[49,83796,83797,83799,83801,83803,83805,83807],{"class":51,"line":233},[49,83798,52675],{"class":73},[49,83800,51875],{"class":51831},[49,83802,51878],{"class":55},[49,83804,78],{"class":73},[49,83806,51883],{"class":59},[49,83808,51838],{"class":73},[49,83810,83811,83813,83815,83817,83819,83821,83823,83825,83827],{"class":51,"line":241},[49,83812,52675],{"class":73},[49,83814,51875],{"class":51831},[49,83816,15617],{"class":55},[49,83818,78],{"class":73},[49,83820,51922],{"class":59},[49,83822,51902],{"class":55},[49,83824,78],{"class":73},[49,83826,51929],{"class":59},[49,83828,51838],{"class":73},[49,83830,83831,83833,83835,83837,83839],{"class":51,"line":1920},[49,83832,52675],{"class":73},[49,83834,51938],{"class":51831},[49,83836,51941],{"class":73},[49,83838,51938],{"class":51831},[49,83840,51838],{"class":73},[49,83842,83843,83845,83847],{"class":51,"line":2011},[49,83844,52675],{"class":73},[49,83846,757],{"class":51831},[49,83848,51838],{"class":73},[49,83850,83851,83853],{"class":51,"line":2017},[49,83852,7100],{"class":51831},[49,83854,16269],{"class":73},[49,83856,83857,83859,83861,83863],{"class":51,"line":2029},[49,83858,55226],{"class":159},[49,83860,51968],{"class":73},[49,83862,1021],{"class":159},[49,83864,1990],{"class":73},[49,83866,83867,83869,83871,83873],{"class":51,"line":2311},[49,83868,55237],{"class":159},[49,83870,51968],{"class":73},[49,83872,1021],{"class":159},[49,83874,1990],{"class":73},[49,83876,83877,83879,83881,83883],{"class":51,"line":2316},[49,83878,73127],{"class":159},[49,83880,51968],{"class":73},[49,83882,61036],{"class":159},[49,83884,1990],{"class":73},[49,83886,83887],{"class":51,"line":2322},[49,83888,2885],{"class":73},[49,83890,83891],{"class":51,"line":2327},[49,83892,399],{"emptyLinePlaceholder":398},[49,83894,83895,83897],{"class":51,"line":2341},[49,83896,62654],{"class":55},[49,83898,16269],{"class":73},[49,83900,83901,83903,83905,83907,83909],{"class":51,"line":2346},[49,83902,55302],{"class":159},[49,83904,51968],{"class":73},[49,83906,79105],{"class":159},[49,83908,52023],{"class":77},[49,83910,1990],{"class":73},[49,83912,83913,83915,83917,83919,83921,83923],{"class":51,"line":2352},[49,83914,55237],{"class":159},[49,83916,51968],{"class":73},[49,83918,1140],{"class":159},[49,83920,52023],{"class":77},[49,83922,52087],{"class":159},[49,83924,1990],{"class":73},[49,83926,83927],{"class":51,"line":2373},[49,83928,2885],{"class":73},[49,83930,83931],{"class":51,"line":2378},[49,83932,399],{"emptyLinePlaceholder":398},[49,83934,83935,83937],{"class":51,"line":2392},[49,83936,79156],{"class":55},[49,83938,16269],{"class":73},[49,83940,83941,83943,83945,83947,83949],{"class":51,"line":2397},[49,83942,55226],{"class":159},[49,83944,51968],{"class":73},[49,83946,1404],{"class":159},[49,83948,52023],{"class":77},[49,83950,1990],{"class":73},[49,83952,83953,83955,83957,83959,83961,83963,83965],{"class":51,"line":2426},[49,83954,62391],{"class":159},[49,83956,51968],{"class":73},[49,83958,28652],{"class":159},[49,83960,79211],{"class":159},[49,83962,79214],{"class":159},[49,83964,1524],{"class":77},[49,83966,1990],{"class":73},[49,83968,83969,83971,83973,83975],{"class":51,"line":2431},[49,83970,55540],{"class":159},[49,83972,51968],{"class":73},[49,83974,52008],{"class":159},[49,83976,1990],{"class":73},[49,83978,83979,83981,83983,83985,83987,83989,83991],{"class":51,"line":2448},[49,83980,62508],{"class":159},[49,83982,51968],{"class":73},[49,83984,1047],{"class":159},[49,83986,52023],{"class":77},[49,83988,52052],{"class":159},[49,83990,62775],{"class":159},[49,83992,1990],{"class":73},[49,83994,83995],{"class":51,"line":2453},[49,83996,2885],{"class":73},[49,83998,83999],{"class":51,"line":2458},[49,84000,399],{"emptyLinePlaceholder":398},[49,84002,84003,84005],{"class":51,"line":2463},[49,84004,79274],{"class":55},[49,84006,16269],{"class":73},[49,84008,84009,84011,84013,84015],{"class":51,"line":2477},[49,84010,62556],{"class":159},[49,84012,51968],{"class":73},[49,84014,62561],{"class":159},[49,84016,1990],{"class":73},[49,84018,84019,84021,84023,84025],{"class":51,"line":2482},[49,84020,55415],{"class":159},[49,84022,51968],{"class":73},[49,84024,62349],{"class":159},[49,84026,1990],{"class":73},[49,84028,84029],{"class":51,"line":3274},[49,84030,2885],{"class":73},[49,84032,84033],{"class":51,"line":3288},[49,84034,399],{"emptyLinePlaceholder":398},[49,84036,84037,84039,84041],{"class":51,"line":3296},[49,84038,79156],{"class":55},[49,84040,56146],{"class":51831},[49,84042,16269],{"class":73},[49,84044,84045,84047,84049,84051,84053],{"class":51,"line":3301},[49,84046,55302],{"class":159},[49,84048,51968],{"class":73},[49,84050,1441],{"class":159},[49,84052,52023],{"class":77},[49,84054,1990],{"class":73},[49,84056,84057,84059,84061,84063,84065],{"class":51,"line":3307},[49,84058,55316],{"class":159},[49,84060,51968],{"class":73},[49,84062,1441],{"class":159},[49,84064,52023],{"class":77},[49,84066,1990],{"class":73},[49,84068,84069,84071,84073,84075,84077],{"class":51,"line":3313},[49,84070,62281],{"class":159},[49,84072,51968],{"class":73},[49,84074,1148],{"class":159},[49,84076,52023],{"class":77},[49,84078,1990],{"class":73},[49,84080,84081],{"class":51,"line":3318},[49,84082,2885],{"class":73},[49,84084,84085],{"class":51,"line":8645},[49,84086,399],{"emptyLinePlaceholder":398},[49,84088,84089,84091,84093],{"class":51,"line":8669},[49,84090,79156],{"class":55},[49,84092,62835],{"class":55},[49,84094,16269],{"class":73},[49,84096,84097,84099,84101,84103,84105],{"class":51,"line":8674},[49,84098,55302],{"class":159},[49,84100,51968],{"class":73},[49,84102,2421],{"class":159},[49,84104,52023],{"class":77},[49,84106,1990],{"class":73},[49,84108,84109],{"class":51,"line":8680},[49,84110,2885],{"class":73},[49,84112,84113],{"class":51,"line":8707},[49,84114,399],{"emptyLinePlaceholder":398},[49,84116,84117,84119,84121,84124],{"class":51,"line":8712},[49,84118,79156],{"class":55},[49,84120,62835],{"class":55},[49,84122,84123],{"class":55}," .tag",[49,84125,16269],{"class":73},[49,84127,84128,84130,84132,84134],{"class":51,"line":8718},[49,84129,55540],{"class":159},[49,84131,51968],{"class":73},[49,84133,61400],{"class":159},[49,84135,1990],{"class":73},[49,84137,84138,84140,84142,84144,84146],{"class":51,"line":8730},[49,84139,55226],{"class":159},[49,84141,51968],{"class":73},[49,84143,915],{"class":159},[49,84145,52023],{"class":77},[49,84147,1990],{"class":73},[49,84149,84150,84152,84154,84156,84158],{"class":51,"line":8742},[49,84151,55453],{"class":159},[49,84153,51968],{"class":73},[49,84155,1327],{"class":159},[49,84157,52023],{"class":77},[49,84159,1990],{"class":73},[49,84161,84162,84164,84166,84168],{"class":51,"line":8754},[49,84163,57947],{"class":159},[49,84165,51968],{"class":73},[49,84167,62601],{"class":159},[49,84169,1990],{"class":73},[49,84171,84172],{"class":51,"line":10413},[49,84173,2885],{"class":73},[49,84175,84176],{"class":51,"line":10438},[49,84177,399],{"emptyLinePlaceholder":398},[49,84179,84180,84182,84184],{"class":51,"line":10461},[49,84181,79156],{"class":55},[49,84183,79448],{"class":55},[49,84185,31997],{"class":73},[49,84187,84188,84190,84193],{"class":51,"line":10485},[49,84189,79156],{"class":55},[49,84191,84192],{"class":55}," .sub-total",[49,84194,16269],{"class":73},[49,84196,84197,84199,84201,84203,84205],{"class":51,"line":10490},[49,84198,55453],{"class":159},[49,84200,51968],{"class":73},[49,84202,1479],{"class":159},[49,84204,52023],{"class":77},[49,84206,1990],{"class":73},[49,84208,84209,84211,84213,84215],{"class":51,"line":10495},[49,84210,57947],{"class":159},[49,84212,51968],{"class":73},[49,84214,79471],{"class":159},[49,84216,1990],{"class":73},[49,84218,84219,84221,84223,84225],{"class":51,"line":10500},[49,84220,62368],{"class":159},[49,84222,51968],{"class":73},[49,84224,1047],{"class":159},[49,84226,1990],{"class":73},[49,84228,84229],{"class":51,"line":10509},[49,84230,2885],{"class":73},[49,84232,84233],{"class":51,"line":10514},[49,84234,399],{"emptyLinePlaceholder":398},[49,84236,84237,84239,84241],{"class":51,"line":10520},[49,84238,79156],{"class":55},[49,84240,79488],{"class":55},[49,84242,31997],{"class":73},[49,84244,84245,84247,84250],{"class":51,"line":10541},[49,84246,79156],{"class":55},[49,84248,84249],{"class":55}," .sub-total::before",[49,84251,31997],{"class":73},[49,84253,84254,84257],{"class":51,"line":10547},[49,84255,84256],{"class":55},"    .amount::before",[49,84258,16269],{"class":73},[49,84260,84261,84263,84265,84267],{"class":51,"line":10561},[49,84262,79495],{"class":159},[49,84264,51968],{"class":73},[49,84266,79500],{"class":59},[49,84268,1990],{"class":73},[49,84270,84271,84273,84275,84277,84279],{"class":51,"line":10567},[49,84272,55453],{"class":159},[49,84274,51968],{"class":73},[49,84276,1327],{"class":159},[49,84278,52023],{"class":77},[49,84280,1990],{"class":73},[49,84282,84283],{"class":51,"line":10594},[49,84284,2885],{"class":73},[49,84286,84287],{"class":51,"line":10603},[49,84288,399],{"emptyLinePlaceholder":398},[49,84290,84291,84293,84296],{"class":51,"line":10609},[49,84292,79156],{"class":55},[49,84294,84295],{"class":55}," .spec",[49,84297,16269],{"class":73},[49,84299,84300,84302,84304,84306],{"class":51,"line":10617},[49,84301,62368],{"class":159},[49,84303,51968],{"class":73},[49,84305,915],{"class":159},[49,84307,1990],{"class":73},[49,84309,84310,84312,84314,84317],{"class":51,"line":10622},[49,84311,57947],{"class":159},[49,84313,51968],{"class":73},[49,84315,84316],{"class":159},"#888",[49,84318,1990],{"class":73},[49,84320,84321,84323,84325,84327,84329],{"class":51,"line":17301},[49,84322,55453],{"class":159},[49,84324,51968],{"class":73},[49,84326,1378],{"class":159},[49,84328,52023],{"class":77},[49,84330,1990],{"class":73},[49,84332,84333,84335,84337,84339,84341],{"class":51,"line":17307},[49,84334,62531],{"class":159},[49,84336,51968],{"class":73},[49,84338,1529],{"class":159},[49,84340,52023],{"class":77},[49,84342,1990],{"class":73},[49,84344,84345],{"class":51,"line":17330},[49,84346,2885],{"class":73},[49,84348,84349],{"class":51,"line":17336},[49,84350,399],{"emptyLinePlaceholder":398},[49,84352,84353,84355,84358],{"class":51,"line":17359},[49,84354,79156],{"class":55},[49,84356,84357],{"class":55}," .count",[49,84359,16269],{"class":73},[49,84361,84362,84364,84366,84368],{"class":51,"line":17373},[49,84363,62368],{"class":159},[49,84365,51968],{"class":73},[49,84367,1047],{"class":159},[49,84369,1990],{"class":73},[49,84371,84372,84374,84376,84379],{"class":51,"line":17393},[49,84373,57947],{"class":159},[49,84375,51968],{"class":73},[49,84377,84378],{"class":159},"#aaa",[49,84380,1990],{"class":73},[49,84382,84383],{"class":51,"line":17399},[49,84384,2885],{"class":73},[49,84386,84387],{"class":51,"line":17410},[49,84388,399],{"emptyLinePlaceholder":398},[49,84390,84391,84393],{"class":51,"line":17433},[49,84392,73006],{"class":55},[49,84394,16269],{"class":73},[49,84396,84397,84399,84401,84403,84405],{"class":51,"line":17455},[49,84398,55302],{"class":159},[49,84400,51968],{"class":73},[49,84402,79105],{"class":159},[49,84404,52023],{"class":77},[49,84406,1990],{"class":73},[49,84408,84409,84411,84413,84415,84417],{"class":51,"line":17460},[49,84410,55237],{"class":159},[49,84412,51968],{"class":73},[49,84414,1021],{"class":159},[49,84416,52087],{"class":159},[49,84418,1990],{"class":73},[49,84420,84421,84423,84425,84427],{"class":51,"line":17466},[49,84422,55540],{"class":159},[49,84424,51968],{"class":73},[49,84426,52008],{"class":159},[49,84428,1990],{"class":73},[49,84430,84431,84433,84435,84437],{"class":51,"line":17480},[49,84432,55551],{"class":159},[49,84434,51968],{"class":73},[49,84436,52111],{"class":159},[49,84438,1990],{"class":73},[49,84440,84441,84444,84446,84448,84450,84452,84455],{"class":51,"line":17493},[49,84442,84443],{"class":159},"      border-top",[49,84445,51968],{"class":73},[49,84447,1047],{"class":159},[49,84449,52023],{"class":77},[49,84451,52052],{"class":159},[49,84453,84454],{"class":159}," #4e4e4e",[49,84456,1990],{"class":73},[49,84458,84459,84461,84463,84465,84467],{"class":51,"line":17498},[49,84460,55226],{"class":159},[49,84462,51968],{"class":73},[49,84464,1529],{"class":159},[49,84466,52023],{"class":77},[49,84468,1990],{"class":73},[49,84470,84471],{"class":51,"line":17512},[49,84472,2885],{"class":73},[49,84474,84475],{"class":51,"line":17517},[49,84476,399],{"emptyLinePlaceholder":398},[49,84478,84479,84481,84484],{"class":51,"line":17523},[49,84480,73006],{"class":55},[49,84482,84483],{"class":55}," .amount",[49,84485,16269],{"class":73},[49,84487,84488,84490,84492,84494,84496],{"class":51,"line":17528},[49,84489,55453],{"class":159},[49,84491,51968],{"class":73},[49,84493,1479],{"class":159},[49,84495,52023],{"class":77},[49,84497,1990],{"class":73},[49,84499,84500,84502,84504,84506],{"class":51,"line":17542},[49,84501,57947],{"class":159},[49,84503,51968],{"class":73},[49,84505,79471],{"class":159},[49,84507,1990],{"class":73},[49,84509,84510,84512,84514,84516],{"class":51,"line":17547},[49,84511,62865],{"class":159},[49,84513,51968],{"class":73},[49,84515,52020],{"class":159},[49,84517,1990],{"class":73},[49,84519,84520,84522,84524,84526,84528],{"class":51,"line":17552},[49,84521,62281],{"class":159},[49,84523,51968],{"class":73},[49,84525,1485],{"class":159},[49,84527,52023],{"class":77},[49,84529,1990],{"class":73},[49,84531,84532],{"class":51,"line":17566},[49,84533,2885],{"class":73},[49,84535,84536,84538,84540],{"class":51,"line":17578},[49,84537,52948],{"class":73},[49,84539,757],{"class":51831},[49,84541,51838],{"class":73},[49,84543,84544,84546,84548],{"class":51,"line":17583},[49,84545,52316],{"class":73},[49,84547,51865],{"class":51831},[49,84549,51838],{"class":73},[49,84551,84552],{"class":51,"line":17596},[49,84553,399],{"emptyLinePlaceholder":398},[49,84555,84556,84558,84560],{"class":51,"line":17601},[49,84557,1739],{"class":73},[49,84559,52331],{"class":51831},[49,84561,51838],{"class":73},[49,84563,84564,84566,84568,84570,84572,84574],{"class":51,"line":17606},[49,84565,52675],{"class":73},[49,84567,52142],{"class":51831},[49,84569,54017],{"class":55},[49,84571,78],{"class":73},[49,84573,63139],{"class":59},[49,84575,51838],{"class":73},[49,84577,84578,84580,84582],{"class":51,"line":17611},[49,84579,52948],{"class":73},[49,84581,52142],{"class":51831},[49,84583,51838],{"class":73},[49,84585,84586,84588,84590,84592,84594,84596],{"class":51,"line":17624},[49,84587,52675],{"class":73},[49,84589,52142],{"class":51831},[49,84591,54017],{"class":55},[49,84593,78],{"class":73},[49,84595,63111],{"class":59},[49,84597,51838],{"class":73},[49,84599,84600,84602,84604,84607,84609,84611,84613,84616,84618,84620,84622,84624],{"class":51,"line":17629},[49,84601,51872],{"class":73},[49,84603,52142],{"class":51831},[49,84605,84606],{"class":73},">合计：\u003C",[49,84608,49],{"class":51831},[49,84610,54017],{"class":55},[49,84612,78],{"class":73},[49,84614,84615],{"class":59},"\"amount\"",[49,84617,55845],{"class":73},[49,84619,49],{"class":51831},[49,84621,55845],{"class":73},[49,84623,52142],{"class":51831},[49,84625,51838],{"class":73},[49,84627,84628,84630,84632],{"class":51,"line":33164},[49,84629,52948],{"class":73},[49,84631,52142],{"class":51831},[49,84633,51838],{"class":73},[49,84635,84636,84638,84640],{"class":51,"line":33170},[49,84637,52675],{"class":73},[49,84639,52344],{"class":51831},[49,84641,51838],{"class":73},[49,84643,84644,84646,84648,84650],{"class":51,"line":33176},[49,84645,11918],{"class":77},[49,84647,79908],{"class":159},[49,84649,14261],{"class":77},[49,84651,55978],{"class":73},[49,84653,84654],{"class":51,"line":33182},[49,84655,79917],{"class":73},[49,84657,84658,84660,84662],{"class":51,"line":33188},[49,84659,79922],{"class":73},[49,84661,79925],{"class":59},[49,84663,31997],{"class":73},[49,84665,84666,84668,84670],{"class":51,"line":33199},[49,84667,79932],{"class":73},[49,84669,79935],{"class":59},[49,84671,31997],{"class":73},[49,84673,84674,84676,84679],{"class":51,"line":33205},[49,84675,79942],{"class":73},[49,84677,84678],{"class":159},"289.9",[49,84680,31997],{"class":73},[49,84682,84683,84685,84687],{"class":51,"line":33225},[49,84684,79952],{"class":73},[49,84686,79955],{"class":59},[49,84688,31997],{"class":73},[49,84690,84691,84694,84696],{"class":51,"line":33231},[49,84692,84693],{"class":73},"        count: ",[49,84695,915],{"class":159},[49,84697,31997],{"class":73},[49,84699,84700,84703,84706],{"class":51,"line":33242},[49,84701,84702],{"class":73},"        spec: { color: ",[49,84704,84705],{"class":59},"'白色'",[49,84707,56135],{"class":73},[49,84709,84710],{"class":51,"line":33248},[49,84711,78423],{"class":73},[49,84713,84714],{"class":51,"line":33254},[49,84715,79917],{"class":73},[49,84717,84718,84720,84722],{"class":51,"line":33260},[49,84719,79922],{"class":73},[49,84721,80016],{"class":59},[49,84723,31997],{"class":73},[49,84725,84726,84728,84730],{"class":51,"line":33266},[49,84727,79932],{"class":73},[49,84729,80025],{"class":59},[49,84731,31997],{"class":73},[49,84733,84734,84736,84739],{"class":51,"line":33272},[49,84735,79942],{"class":73},[49,84737,84738],{"class":159},"109.8",[49,84740,31997],{"class":73},[49,84742,84743,84745,84747],{"class":51,"line":33278},[49,84744,79952],{"class":73},[49,84746,80043],{"class":59},[49,84748,31997],{"class":73},[49,84750,84751,84753,84755],{"class":51,"line":33284},[49,84752,84693],{"class":73},[49,84754,909],{"class":159},[49,84756,31997],{"class":73},[49,84758,84759,84762,84764,84766,84768],{"class":51,"line":33304},[49,84760,84761],{"class":73},"        spec: { size: ",[49,84763,82434],{"class":59},[49,84765,55995],{"class":73},[49,84767,82439],{"class":59},[49,84769,56135],{"class":73},[49,84771,84772],{"class":51,"line":33310},[49,84773,78423],{"class":73},[49,84775,84776],{"class":51,"line":33326},[49,84777,79917],{"class":73},[49,84779,84780,84782,84784],{"class":51,"line":33332},[49,84781,79922],{"class":73},[49,84783,80060],{"class":59},[49,84785,31997],{"class":73},[49,84787,84788,84790,84792],{"class":51,"line":33346},[49,84789,79932],{"class":73},[49,84791,80069],{"class":59},[49,84793,31997],{"class":73},[49,84795,84796,84798,84801],{"class":51,"line":33352},[49,84797,79942],{"class":73},[49,84799,84800],{"class":159},"488",[49,84802,31997],{"class":73},[49,84804,84805,84807,84809],{"class":51,"line":33367},[49,84806,79952],{"class":73},[49,84808,80087],{"class":59},[49,84810,31997],{"class":73},[49,84812,84813,84815,84817],{"class":51,"line":33373},[49,84814,84693],{"class":73},[49,84816,1047],{"class":159},[49,84818,31997],{"class":73},[49,84820,84821,84823,84826,84829,84832],{"class":51,"line":33382},[49,84822,84702],{"class":73},[49,84824,84825],{"class":59},"'青色'",[49,84827,84828],{"class":73},", sum: ",[49,84830,84831],{"class":59},"'一大四小'",[49,84833,56135],{"class":73},[49,84835,84836],{"class":51,"line":33388},[49,84837,78423],{"class":73},[49,84839,84840],{"class":51,"line":33397},[49,84841,79917],{"class":73},[49,84843,84844,84846,84848],{"class":51,"line":33403},[49,84845,79922],{"class":73},[49,84847,80104],{"class":59},[49,84849,31997],{"class":73},[49,84851,84852,84854,84856],{"class":51,"line":33409},[49,84853,79932],{"class":73},[49,84855,80113],{"class":59},[49,84857,31997],{"class":73},[49,84859,84860,84862,84865],{"class":51,"line":33418},[49,84861,79942],{"class":73},[49,84863,84864],{"class":159},"139",[49,84866,31997],{"class":73},[49,84868,84869,84871,84873],{"class":51,"line":33424},[49,84870,79952],{"class":73},[49,84872,80131],{"class":59},[49,84874,31997],{"class":73},[49,84876,84877,84879,84881],{"class":51,"line":33435},[49,84878,84693],{"class":73},[49,84880,1047],{"class":159},[49,84882,31997],{"class":73},[49,84884,84885,84887,84890,84892,84895],{"class":51,"line":33441},[49,84886,84761],{"class":73},[49,84888,84889],{"class":59},"'小号'",[49,84891,55995],{"class":73},[49,84893,84894],{"class":59},"'紫色'",[49,84896,56001],{"class":73},[49,84898,84899,84902],{"class":51,"line":33460},[49,84900,84901],{"class":73},"        gift: ",[49,84903,84904],{"class":59},"'50g茶叶,清洗球'\n",[49,84906,84907],{"class":51,"line":33466},[49,84908,52929],{"class":73},[49,84910,84911],{"class":51,"line":33477},[49,84912,53640],{"class":73},[49,84914,84915],{"class":51,"line":33483},[49,84916,84917],{"class":66},"    \u002F\u002F  1.根据数据渲染页面\n",[49,84919,84920,84922,84924,84926,84928,84930,84932,84934,84936,84938,84940,84942],{"class":51,"line":33503},[49,84921,52938],{"class":73},[49,84923,54930],{"class":55},[49,84925,841],{"class":73},[49,84927,80432],{"class":59},[49,84929,74780],{"class":73},[49,84931,78],{"class":77},[49,84933,80579],{"class":73},[49,84935,74575],{"class":55},[49,84937,841],{"class":73},[49,84939,80326],{"class":5913},[49,84941,80329],{"class":77},[49,84943,16269],{"class":73},[49,84945,84946],{"class":51,"line":33519},[49,84947,84948],{"class":66},"      \u002F\u002F 对象解构\n",[49,84950,84951,84953,84955,84957,84959,84961,84963,84966,84968,84970,84972,84975,84977,84980,84982,84984],{"class":51,"line":33525},[49,84952,58759],{"class":77},[49,84954,80338],{"class":73},[49,84956,80351],{"class":159},[49,84958,13132],{"class":73},[49,84960,80341],{"class":159},[49,84962,13132],{"class":73},[49,84964,84965],{"class":159},"count",[49,84967,13132],{"class":73},[49,84969,80346],{"class":159},[49,84971,13132],{"class":73},[49,84973,84974],{"class":159},"spec",[49,84976,13132],{"class":73},[49,84978,84979],{"class":159},"gift",[49,84981,80354],{"class":73},[49,84983,78],{"class":77},[49,84985,80359],{"class":73},[49,84987,84988],{"class":51,"line":33539},[49,84989,84990],{"class":66},"      \u002F\u002F 规格文字模块处理\n",[49,84992,84993,84995,84998,85000,85002,85004,85006,85008,85010,85012],{"class":51,"line":33545},[49,84994,58759],{"class":77},[49,84996,84997],{"class":159}," text",[49,84999,14261],{"class":77},[49,85001,82469],{"class":73},[49,85003,82472],{"class":55},[49,85005,82475],{"class":73},[49,85007,74754],{"class":55},[49,85009,841],{"class":73},[49,85011,82482],{"class":59},[49,85013,847],{"class":73},[49,85015,85016],{"class":51,"line":33551},[49,85017,85018],{"class":66},"      \u002F\u002F 处理赠品模块\n",[49,85020,85021,85023,85025,85027,85030,85032,85034,85036,85038,85041,85043,85045,85047,85049,85051,85054,85056,85059,85061,85063,85065,85067,85069,85071],{"class":51,"line":33562},[49,85022,58759],{"class":77},[49,85024,74450],{"class":159},[49,85026,14261],{"class":77},[49,85028,85029],{"class":73}," gift ",[49,85031,1815],{"class":77},[49,85033,83643],{"class":73},[49,85035,83646],{"class":55},[49,85037,841],{"class":73},[49,85039,85040],{"class":59},"','",[49,85042,31357],{"class":73},[49,85044,74575],{"class":55},[49,85046,841],{"class":73},[49,85048,80326],{"class":5913},[49,85050,80329],{"class":77},[49,85052,85053],{"class":59}," `\u003Cspan class=\"tag\">【赠品】${",[49,85055,80326],{"class":73},[49,85057,85058],{"class":59},"}\u003C\u002Fspan>`",[49,85060,31357],{"class":73},[49,85062,74754],{"class":55},[49,85064,841],{"class":73},[49,85066,74759],{"class":59},[49,85068,14411],{"class":73},[49,85070,1688],{"class":77},[49,85072,70635],{"class":59},[49,85074,85075],{"class":51,"line":33568},[49,85076,85077],{"class":66},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[49,85079,85080,85082,85085,85087,85090,85092,85094,85096,85099,85101,85103,85105,85108,85110,85112],{"class":51,"line":33574},[49,85081,58759],{"class":77},[49,85083,85084],{"class":159}," subtotal",[49,85086,14261],{"class":77},[49,85088,85089],{"class":73}," ((price ",[49,85091,1284],{"class":77},[49,85093,6451],{"class":159},[49,85095,7215],{"class":77},[49,85097,85098],{"class":73}," count) ",[49,85100,1413],{"class":77},[49,85102,6451],{"class":159},[49,85104,31357],{"class":73},[49,85106,85107],{"class":55},"toFixed",[49,85109,841],{"class":73},[49,85111,915],{"class":159},[49,85113,847],{"class":73},[49,85115,85116],{"class":51,"line":33584},[49,85117,399],{"emptyLinePlaceholder":398},[49,85119,85120,85122],{"class":51,"line":33590},[49,85121,74513],{"class":77},[49,85123,70699],{"class":59},[49,85125,85126],{"class":51,"line":33601},[49,85127,85128],{"class":59},"        \u003Cdiv class=\"item\">\n",[49,85130,85131,85134,85136],{"class":51,"line":33607},[49,85132,85133],{"class":59},"          \u003Cimg src=\"${",[49,85135,80351],{"class":73},[49,85137,80383],{"class":59},[49,85139,85140,85143,85145,85148,85150],{"class":51,"line":33617},[49,85141,85142],{"class":59},"          \u003Cp class=\"name\">${",[49,85144,80341],{"class":73},[49,85146,85147],{"class":59},"}${",[49,85149,1999],{"class":73},[49,85151,80393],{"class":59},[49,85153,85154,85157,85159],{"class":51,"line":33622},[49,85155,85156],{"class":59},"          \u003Cp class=\"spec\">${",[49,85158,5884],{"class":73},[49,85160,80393],{"class":59},[49,85162,85163,85166,85168,85170,85172,85174,85176,85178],{"class":51,"line":33628},[49,85164,85165],{"class":59},"          \u003Cp class=\"price\">${",[49,85167,80346],{"class":73},[49,85169,1387],{"class":59},[49,85171,85107],{"class":55},[49,85173,841],{"class":59},[49,85175,915],{"class":159},[49,85177,1258],{"class":59},[49,85179,80393],{"class":59},[49,85181,85182,85185,85187],{"class":51,"line":33677},[49,85183,85184],{"class":59},"          \u003Cp class=\"count\">x${",[49,85186,84965],{"class":73},[49,85188,80393],{"class":59},[49,85190,85191,85194,85197],{"class":51,"line":33724},[49,85192,85193],{"class":59},"          \u003Cp class=\"sub-total\">${",[49,85195,85196],{"class":73},"subtotal",[49,85198,80393],{"class":59},[49,85200,85201],{"class":51,"line":33729},[49,85202,85203],{"class":59},"        \u003C\u002Fdiv> \n",[49,85205,85206],{"class":51,"line":33735},[49,85207,85208],{"class":59},"             `\n",[49,85210,85211,85214,85216,85218,85220],{"class":51,"line":33754},[49,85212,85213],{"class":73},"    }).",[49,85215,74754],{"class":55},[49,85217,841],{"class":73},[49,85219,74759],{"class":59},[49,85221,847],{"class":73},[49,85223,85224],{"class":51,"line":33760},[49,85225,85226],{"class":66},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[49,85228,85229,85231,85233,85235,85237,85240,85242,85245,85247,85249,85251,85254,85257,85259,85262,85264,85266,85268,85271,85273,85275,85277,85279],{"class":51,"line":33780},[49,85230,11918],{"class":77},[49,85232,63316],{"class":159},[49,85234,14261],{"class":77},[49,85236,80579],{"class":73},[49,85238,85239],{"class":55},"reduce",[49,85241,3074],{"class":73},[49,85243,85244],{"class":5913},"prev",[49,85246,13132],{"class":73},[49,85248,80326],{"class":5913},[49,85250,14411],{"class":73},[49,85252,85253],{"class":77},"=>",[49,85255,85256],{"class":73}," prev ",[49,85258,1310],{"class":77},[49,85260,85261],{"class":73}," (item.price ",[49,85263,1284],{"class":77},[49,85265,6451],{"class":159},[49,85267,7215],{"class":77},[49,85269,85270],{"class":73}," item.count) ",[49,85272,1413],{"class":77},[49,85274,6451],{"class":159},[49,85276,13132],{"class":73},[49,85278,1021],{"class":159},[49,85280,847],{"class":73},[49,85282,85283,85285,85287,85289,85292,85294,85296,85299,85301,85303,85305],{"class":51,"line":33786},[49,85284,52938],{"class":73},[49,85286,54930],{"class":55},[49,85288,841],{"class":73},[49,85290,85291],{"class":59},"'.amount'",[49,85293,74780],{"class":73},[49,85295,78],{"class":77},[49,85297,85298],{"class":73}," total.",[49,85300,85107],{"class":55},[49,85302,841],{"class":73},[49,85304,915],{"class":159},[49,85306,847],{"class":73},[49,85308,85309,85311,85313],{"class":51,"line":33792},[49,85310,52948],{"class":73},[49,85312,52344],{"class":51831},[49,85314,51838],{"class":73},[49,85316,85317,85319,85321],{"class":51,"line":33802},[49,85318,52316],{"class":73},[49,85320,52331],{"class":51831},[49,85322,51838],{"class":73},[49,85324,85325],{"class":51,"line":33807},[49,85326,399],{"emptyLinePlaceholder":398},[49,85328,85329,85331,85333],{"class":51,"line":33813},[49,85330,52316],{"class":73},[49,85332,51166],{"class":51831},[49,85334,51838],{"class":73},[782,85336,85338],{"id":85337},"_411-编程思想","4.11 编程思想",[18,85340,85342],{"id":85341},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,85344,85345,85348],{},[112,85346,85347],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,85350,85351],{},"调用就可以了",[14,85353,85354],{},[25,85355],{"alt":27,"src":85356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[18,85358,85360],{"id":85359},"_4112-面向对象","4.11.2 面向对象",[14,85362,85363],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,85365,85366],{},[25,85367],{"alt":27,"src":85368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,85370,85371],{},"面向对象的特性：",[742,85373,85374,85377,85380],{},[33,85375,85376],{},"封装性",[33,85378,85379],{},"继承性",[33,85381,85382],{},"多态性",[18,85384,85386],{"id":85385},"_4113-两者比较","4.11.3 两者比较",[14,85388,85389],{},[25,85390],{"alt":27,"src":85391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[782,85393,85395],{"id":85394},"_412-构造函数回顾","4.12 构造函数回顾",[14,85397,85398],{},[25,85399],{"alt":27,"src":85400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,85402,85403],{},[25,85404],{"alt":27,"src":85405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,85407,85408],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,85410,85411],{},[25,85412],{"alt":27,"src":85413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[782,85415,85417],{"id":85416},"_413-原型","4.13 原型",[18,85419,85421],{"id":85420},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,85423,85424],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,85426,85427],{},[25,85428],{"alt":27,"src":85429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,85431,85432],{},[25,85433],{"alt":27,"src":85434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,85436,85437],{},"原型是构造函数的属性，它也是一个对象",[14,85439,85440],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,85442,85443],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[40,85445,85447],{"className":53598,"code":85446,"language":53600,"meta":27,"style":27},"\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",[46,85448,85449,85457,85462,85470,85475,85480,85485,85490,85495,85499,85503,85507,85512,85517,85521,85526,85531,85536,85541,85546,85550,85558],{"__ignoreMap":27},[49,85450,85451,85453,85455],{"class":51,"line":52},[49,85452,1739],{"class":73},[49,85454,52331],{"class":51831},[49,85456,51838],{"class":73},[49,85458,85459],{"class":51,"line":63},[49,85460,85461],{"class":66},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[49,85463,85464,85466,85468],{"class":51,"line":70},[49,85465,52675],{"class":73},[49,85467,52344],{"class":51831},[49,85469,51838],{"class":73},[49,85471,85472],{"class":51,"line":219},[49,85473,85474],{"class":73},"    function Star(uname, age) {\n",[49,85476,85477],{"class":51,"line":233},[49,85478,85479],{"class":73},"      this.uname = uname,\n",[49,85481,85482],{"class":51,"line":241},[49,85483,85484],{"class":73},"        this.age = age\n",[49,85486,85487],{"class":51,"line":1920},[49,85488,85489],{"class":73},"      \u002F\u002F this.sing = function () {\n",[49,85491,85492],{"class":51,"line":2011},[49,85493,85494],{"class":73},"      \u002F\u002F   console.log('唱歌')\n",[49,85496,85497],{"class":51,"line":2017},[49,85498,399],{"emptyLinePlaceholder":398},[49,85500,85501],{"class":51,"line":2029},[49,85502,60568],{"class":73},[49,85504,85505],{"class":51,"line":2311},[49,85506,2885],{"class":73},[49,85508,85509],{"class":51,"line":2316},[49,85510,85511],{"class":73},"    Star.prototype.sing = function () {\n",[49,85513,85514],{"class":51,"line":2322},[49,85515,85516],{"class":73},"      console.log('唱歌')\n",[49,85518,85519],{"class":51,"line":2327},[49,85520,2885],{"class":73},[49,85522,85523],{"class":51,"line":2341},[49,85524,85525],{"class":73},"    \u002F\u002F console.dir(Star.prototype)\n",[49,85527,85528],{"class":51,"line":2346},[49,85529,85530],{"class":73},"    const pink = new Star('pink', 18)\n",[49,85532,85533],{"class":51,"line":2352},[49,85534,85535],{"class":73},"    const red = new Star('red', 20)\n",[49,85537,85538],{"class":51,"line":2373},[49,85539,85540],{"class":73},"    pink.sing()\n",[49,85542,85543],{"class":51,"line":2378},[49,85544,85545],{"class":73},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[49,85547,85548],{"class":51,"line":2392},[49,85549,399],{"emptyLinePlaceholder":398},[49,85551,85552,85554,85556],{"class":51,"line":2397},[49,85553,52948],{"class":73},[49,85555,52344],{"class":51831},[49,85557,51838],{"class":73},[49,85559,85560,85562,85564],{"class":51,"line":2426},[49,85561,52316],{"class":73},[49,85563,52331],{"class":51831},[49,85565,51838],{"class":73},[14,85567,85568],{},[25,85569],{"alt":27,"src":85570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[40,85572,85574],{"className":53598,"code":85573,"language":53600,"meta":27,"style":27},"\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",[46,85575,85576,85584,85592,85597,85602,85607,85612,85616,85621,85626,85631,85635,85640,85644,85648,85653,85657,85665],{"__ignoreMap":27},[49,85577,85578,85580,85582],{"class":51,"line":52},[49,85579,1739],{"class":73},[49,85581,52331],{"class":51831},[49,85583,51838],{"class":73},[49,85585,85586,85588,85590],{"class":51,"line":63},[49,85587,52675],{"class":73},[49,85589,52344],{"class":51831},[49,85591,51838],{"class":73},[49,85593,85594],{"class":51,"line":70},[49,85595,85596],{"class":73},"    let that\n",[49,85598,85599],{"class":51,"line":219},[49,85600,85601],{"class":73},"    function Star(uname) {\n",[49,85603,85604],{"class":51,"line":233},[49,85605,85606],{"class":73},"      this.uname = uname\n",[49,85608,85609],{"class":51,"line":241},[49,85610,85611],{"class":73},"      that = this\n",[49,85613,85614],{"class":51,"line":1920},[49,85615,2885],{"class":73},[49,85617,85618],{"class":51,"line":2011},[49,85619,85620],{"class":73},"    \u002F\u002F 实例对象是 ldh\n",[49,85622,85623],{"class":51,"line":2017},[49,85624,85625],{"class":73},"    const ldh = new Star('刘德华')\n",[49,85627,85628],{"class":51,"line":2029},[49,85629,85630],{"class":73},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[49,85632,85633],{"class":51,"line":2311},[49,85634,399],{"emptyLinePlaceholder":398},[49,85636,85637],{"class":51,"line":2316},[49,85638,85639],{"class":73},"    Star.sing = function () {\n",[49,85641,85642],{"class":51,"line":2322},[49,85643,85516],{"class":73},[49,85645,85646],{"class":51,"line":2327},[49,85647,2885],{"class":73},[49,85649,85650],{"class":51,"line":2341},[49,85651,85652],{"class":73},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[49,85654,85655],{"class":51,"line":2346},[49,85656,399],{"emptyLinePlaceholder":398},[49,85658,85659,85661,85663],{"class":51,"line":2352},[49,85660,52948],{"class":73},[49,85662,52344],{"class":51831},[49,85664,51838],{"class":73},[49,85666,85667,85669,85671],{"class":51,"line":2373},[49,85668,52316],{"class":73},[49,85670,52331],{"class":51831},[49,85672,51838],{"class":73},[14,85674,85675],{},"构造函数的this指向的是实例对象；",[14,85677,85678],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[18,85680,85682],{"id":85681},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85684,85685],{},[25,85686],{"alt":27,"src":85687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[40,85689,85691],{"className":53598,"code":85690,"language":53600,"meta":27,"style":27},"\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",[46,85692,85693,85701,85709,85714,85719,85724,85729,85734,85739,85744,85749,85754,85759,85763,85768,85773,85778,85783,85787,85792,85797,85802,85807,85811,85816,85821,85826,85831,85835,85840,85844,85852],{"__ignoreMap":27},[49,85694,85695,85697,85699],{"class":51,"line":52},[49,85696,1739],{"class":73},[49,85698,52331],{"class":51831},[49,85700,51838],{"class":73},[49,85702,85703,85705,85707],{"class":51,"line":63},[49,85704,52675],{"class":73},[49,85706,52344],{"class":51831},[49,85708,51838],{"class":73},[49,85710,85711],{"class":51,"line":70},[49,85712,85713],{"class":73},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[49,85715,85716],{"class":51,"line":219},[49,85717,85718],{"class":73},"    const arr = [1, 2, 3]\n",[49,85720,85721],{"class":51,"line":233},[49,85722,85723],{"class":73},"    \u002F\u002F 自己定义数组的扩展方法\n",[49,85725,85726],{"class":51,"line":241},[49,85727,85728],{"class":73},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[49,85730,85731],{"class":51,"line":1920},[49,85732,85733],{"class":73},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[49,85735,85736],{"class":51,"line":2011},[49,85737,85738],{"class":73},"    \u002F\u002F ①.最大值\n",[49,85740,85741],{"class":51,"line":2017},[49,85742,85743],{"class":73},"    Array.prototype.max = function () {\n",[49,85745,85746],{"class":51,"line":2029},[49,85747,85748],{"class":73},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[49,85750,85751],{"class":51,"line":2311},[49,85752,85753],{"class":73},"      return Math.max(...this)\n",[49,85755,85756],{"class":51,"line":2316},[49,85757,85758],{"class":73},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[49,85760,85761],{"class":51,"line":2322},[49,85762,2885],{"class":73},[49,85764,85765],{"class":51,"line":2327},[49,85766,85767],{"class":73},"    console.log(arr.max())\n",[49,85769,85770],{"class":51,"line":2341},[49,85771,85772],{"class":73},"    \u002F\u002F ②最小值\n",[49,85774,85775],{"class":51,"line":2346},[49,85776,85777],{"class":73},"    Array.prototype.min = function () {\n",[49,85779,85780],{"class":51,"line":2352},[49,85781,85782],{"class":73},"      return Math.min(...this)\n",[49,85784,85785],{"class":51,"line":2373},[49,85786,2885],{"class":73},[49,85788,85789],{"class":51,"line":2378},[49,85790,85791],{"class":73},"    console.log(arr.min())\n",[49,85793,85794],{"class":51,"line":2392},[49,85795,85796],{"class":73},"    \u002F\u002F③求和\n",[49,85798,85799],{"class":51,"line":2397},[49,85800,85801],{"class":73},"    Array.prototype.sum = function () {\n",[49,85803,85804],{"class":51,"line":2426},[49,85805,85806],{"class":73},"      return this.reduce((prev, current) => prev + current, 0)\n",[49,85808,85809],{"class":51,"line":2431},[49,85810,2885],{"class":73},[49,85812,85813],{"class":51,"line":2448},[49,85814,85815],{"class":73},"    console.log(arr.sum())\n",[49,85817,85818],{"class":51,"line":2453},[49,85819,85820],{"class":73},"    \u002F\u002F ③排序\n",[49,85822,85823],{"class":51,"line":2458},[49,85824,85825],{"class":73},"    Array.prototype.rever = function () {\n",[49,85827,85828],{"class":51,"line":2463},[49,85829,85830],{"class":73},"      return this.reverse()\n",[49,85832,85833],{"class":51,"line":2477},[49,85834,2885],{"class":73},[49,85836,85837],{"class":51,"line":2482},[49,85838,85839],{"class":73},"    console.log(arr.rever())\n",[49,85841,85842],{"class":51,"line":3274},[49,85843,399],{"emptyLinePlaceholder":398},[49,85845,85846,85848,85850],{"class":51,"line":3288},[49,85847,52948],{"class":73},[49,85849,52344],{"class":51831},[49,85851,51838],{"class":73},[49,85853,85854,85856,85858],{"class":51,"line":3296},[49,85855,52316],{"class":73},[49,85857,52331],{"class":51831},[49,85859,51838],{"class":73},[14,85861,85862],{},[25,85863],{"alt":27,"src":85864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[18,85866,85868],{"id":85867},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85870,85871],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85873,85874],{},[25,85875],{"alt":27,"src":85876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[40,85878,85880],{"className":53598,"code":85879,"language":53600,"meta":27,"style":27},"\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",[46,85881,85882,85890,85898,85903,85908,85912,85917,85922,85927,85935],{"__ignoreMap":27},[49,85883,85884,85886,85888],{"class":51,"line":52},[49,85885,1739],{"class":73},[49,85887,52331],{"class":51831},[49,85889,51838],{"class":73},[49,85891,85892,85894,85896],{"class":51,"line":63},[49,85893,52675],{"class":73},[49,85895,52344],{"class":51831},[49,85897,51838],{"class":73},[49,85899,85900],{"class":51,"line":70},[49,85901,85902],{"class":73},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[49,85904,85905],{"class":51,"line":219},[49,85906,85907],{"class":73},"    function Star() {\n",[49,85909,85910],{"class":51,"line":233},[49,85911,2885],{"class":73},[49,85913,85914],{"class":51,"line":241},[49,85915,85916],{"class":73},"    const ldh = new Star()\n",[49,85918,85919],{"class":51,"line":1920},[49,85920,85921],{"class":73},"    console.log(Star.prototype)\n",[49,85923,85924],{"class":51,"line":2011},[49,85925,85926],{"class":73},"    console.log(Star.prototype.constructor === Star)\n",[49,85928,85929,85931,85933],{"class":51,"line":2017},[49,85930,52948],{"class":73},[49,85932,52344],{"class":51831},[49,85934,51838],{"class":73},[49,85936,85937,85939,85941],{"class":51,"line":2029},[49,85938,52316],{"class":73},[49,85940,52331],{"class":51831},[49,85942,51838],{"class":73},[14,85944,85945],{},[25,85946],{"alt":27,"src":85947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85949,85950],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[40,85952,85954],{"className":53598,"code":85953,"language":53600,"meta":27,"style":27},"  \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",[46,85955,85956,85964,85968,85972,85976,85981,85986,85991,85995,86000,86005,86010,86015,86020,86025,86029,86033,86038,86043,86048,86052,86057,86062,86066,86070,86074],{"__ignoreMap":27},[49,85957,85958,85960,85962],{"class":51,"line":52},[49,85959,52675],{"class":73},[49,85961,52344],{"class":51831},[49,85963,51838],{"class":73},[49,85965,85966],{"class":51,"line":63},[49,85967,85902],{"class":73},[49,85969,85970],{"class":51,"line":70},[49,85971,85907],{"class":73},[49,85973,85974],{"class":51,"line":219},[49,85975,2885],{"class":73},[49,85977,85978],{"class":51,"line":233},[49,85979,85980],{"class":73},"    \u002F\u002F const ldh = new Star()\n",[49,85982,85983],{"class":51,"line":241},[49,85984,85985],{"class":73},"    \u002F\u002F console.log(Star.prototype)\n",[49,85987,85988],{"class":51,"line":1920},[49,85989,85990],{"class":73},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[49,85992,85993],{"class":51,"line":2011},[49,85994,399],{"emptyLinePlaceholder":398},[49,85996,85997],{"class":51,"line":2017},[49,85998,85999],{"class":73},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[49,86001,86002],{"class":51,"line":2029},[49,86003,86004],{"class":73},"    \u002F\u002F Star.prototype.sing = function () {\n",[49,86006,86007],{"class":51,"line":2311},[49,86008,86009],{"class":73},"    \u002F\u002F   console.log('唱歌')\n",[49,86011,86012],{"class":51,"line":2316},[49,86013,86014],{"class":73},"    \u002F\u002F }\n",[49,86016,86017],{"class":51,"line":2322},[49,86018,86019],{"class":73},"    \u002F\u002F Star.prototype.dance = function () {\n",[49,86021,86022],{"class":51,"line":2327},[49,86023,86024],{"class":73},"    \u002F\u002F   console.log('跳舞')\n",[49,86026,86027],{"class":51,"line":2341},[49,86028,86014],{"class":73},[49,86030,86031],{"class":51,"line":2346},[49,86032,85921],{"class":73},[49,86034,86035],{"class":51,"line":2352},[49,86036,86037],{"class":73},"    Star.prototype = {\n",[49,86039,86040],{"class":51,"line":2373},[49,86041,86042],{"class":73},"      sing: function () {\n",[49,86044,86045],{"class":51,"line":2378},[49,86046,86047],{"class":73},"        console.log('唱歌')\n",[49,86049,86050],{"class":51,"line":2392},[49,86051,78423],{"class":73},[49,86053,86054],{"class":51,"line":2397},[49,86055,86056],{"class":73},"      dance: function () {\n",[49,86058,86059],{"class":51,"line":2426},[49,86060,86061],{"class":73},"        console.log('跳舞')\n",[49,86063,86064],{"class":51,"line":2431},[49,86065,52929],{"class":73},[49,86067,86068],{"class":51,"line":2448},[49,86069,2885],{"class":73},[49,86071,86072],{"class":51,"line":2453},[49,86073,85921],{"class":73},[49,86075,86076,86078,86080],{"class":51,"line":2458},[49,86077,52948],{"class":73},[49,86079,52344],{"class":51831},[49,86081,51838],{"class":73},[14,86083,86084],{},"进行输出结果后会发现：",[14,86086,86087],{},[25,86088],{"alt":27,"src":86089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,86091,86092],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,86094,86095],{},"所以，要重新指回创造这个原型对象的构造函数",[40,86097,86099],{"className":71744,"code":86098,"language":71746,"meta":27,"style":27},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[46,86100,86101,86115,86120,86125,86136,86149,86154,86165,86179,86183],{"__ignoreMap":27},[49,86102,86103,86106,86108,86111,86113],{"class":51,"line":52},[49,86104,86105],{"class":159},"Star",[49,86107,1387],{"class":73},[49,86109,86110],{"class":159},"prototype",[49,86112,14261],{"class":77},[49,86114,16269],{"class":73},[49,86116,86117],{"class":51,"line":63},[49,86118,86119],{"class":66},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[49,86121,86122],{"class":51,"line":70},[49,86123,86124],{"class":73},"  constructor: Star,\n",[49,86126,86127,86130,86132,86134],{"class":51,"line":219},[49,86128,86129],{"class":55},"  sing",[49,86131,51968],{"class":73},[49,86133,54980],{"class":77},[49,86135,54983],{"class":73},[49,86137,86138,86140,86142,86144,86147],{"class":51,"line":233},[49,86139,74284],{"class":73},[49,86141,58778],{"class":55},[49,86143,841],{"class":73},[49,86145,86146],{"class":59},"'唱歌'",[49,86148,847],{"class":73},[49,86150,86151],{"class":51,"line":241},[49,86152,86153],{"class":73},"   },\n",[49,86155,86156,86159,86161,86163],{"class":51,"line":1920},[49,86157,86158],{"class":55},"   dance",[49,86160,51968],{"class":73},[49,86162,54980],{"class":77},[49,86164,54983],{"class":73},[49,86166,86167,86170,86172,86174,86177],{"class":51,"line":2011},[49,86168,86169],{"class":73},"     console.",[49,86171,58778],{"class":55},[49,86173,841],{"class":73},[49,86175,86176],{"class":59},"'跳舞'",[49,86178,847],{"class":73},[49,86180,86181],{"class":51,"line":2017},[49,86182,5006],{"class":73},[49,86184,86185],{"class":51,"line":2029},[49,86186,2264],{"class":73},[14,86188,86189],{},[25,86190],{"alt":27,"src":86191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,86193,86194],{},"总结1：",[14,86196,86197],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,86199,86200],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,86202,86203],{},"constructor指的是他的来源",[14,86205,86206],{},[25,86207],{"alt":27,"src":86208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,86210,86211],{},[25,86212],{"alt":27,"src":86213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,86215,86216],{},"总结2：",[14,86218,86219],{},[25,86220],{"alt":27,"src":86221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,86223,86224],{},[25,86225],{"alt":27,"src":86226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,86228,86229],{},[25,86230],{"alt":27,"src":86231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[18,86233,86235],{"id":86234},"_4134-对象原型","4.13.4 对象原型",[14,86237,86238],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,86240,86241],{},"对象原型就是__proto__这个属性",[14,86243,86244],{},[25,86245],{"alt":27,"src":86246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,86248,86249],{},[25,86250],{"alt":27,"src":86251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,86253,86254],{},[25,86255],{"alt":27,"src":86256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,86258,86259],{},[25,86260],{"alt":27,"src":86261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[40,86263,86265],{"className":53598,"code":86264,"language":53600,"meta":27,"style":27},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[46,86266,86267,86275,86283,86287,86291,86295,86300,86308],{"__ignoreMap":27},[49,86268,86269,86271,86273],{"class":51,"line":52},[49,86270,1739],{"class":73},[49,86272,52331],{"class":51831},[49,86274,51838],{"class":73},[49,86276,86277,86279,86281],{"class":51,"line":63},[49,86278,52675],{"class":73},[49,86280,52344],{"class":51831},[49,86282,51838],{"class":73},[49,86284,86285],{"class":51,"line":70},[49,86286,85907],{"class":73},[49,86288,86289],{"class":51,"line":219},[49,86290,2885],{"class":73},[49,86292,86293],{"class":51,"line":233},[49,86294,85916],{"class":73},[49,86296,86297],{"class":51,"line":241},[49,86298,86299],{"class":73},"    console.log(ldh)\n",[49,86301,86302,86304,86306],{"class":51,"line":1920},[49,86303,52948],{"class":73},[49,86305,52344],{"class":51831},[49,86307,51838],{"class":73},[49,86309,86310,86312,86314],{"class":51,"line":2011},[49,86311,52316],{"class":73},[49,86313,52331],{"class":51831},[49,86315,51838],{"class":73},[14,86317,86318],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,86320,86321],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,86323,86324],{},[25,86325],{"alt":27,"src":86326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,86328,86329],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,86331,86332],{},"对象原型指向原型对象",[14,86334,86335],{},[25,86336],{"alt":27,"src":86337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,86339,86340],{},[25,86341],{"alt":27,"src":86342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,86344,86345],{},[25,86346],{"alt":27,"src":86347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[18,86349,86351],{"id":86350},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,86353,86354],{},[25,86355],{"alt":27,"src":86356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[30,86358,86359,86362,86365,86368],{},[33,86360,86361],{},"构造函数通过new的形式实例化得到实例对象",[33,86363,86364],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[33,86366,86367],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[33,86369,86370],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,86372,86373],{},[25,86374],{"alt":27,"src":86375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,86377,86378],{},"题目梳理：",[14,86380,86381],{},[25,86382],{"alt":27,"src":86383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[18,86385,86387],{"id":86386},"_4136-原型继承","4.13.6 原型继承",[14,86389,86390],{},[25,86391],{"alt":27,"src":86392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,86394,86395],{},[25,86396],{"alt":27,"src":86397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,86399,86400],{},[25,86401],{"alt":27,"src":86402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,86404,86405],{},[25,86406],{"alt":27,"src":86407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,86409,86410],{},[25,86411],{"alt":27,"src":86412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,86414,86415],{},[25,86416],{"alt":27,"src":86417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,86419,86420],{},[25,86421],{"alt":27,"src":86422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,86424,86425],{},[25,86426],{"alt":27,"src":86427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,86429,86430],{},"回顾：构造函数每次new得到对象都是不同的",[18,86432,86434],{"id":86433},"_4137-原型链","4.13.7 原型链",[14,86436,86437],{},[25,86438],{"alt":27,"src":86439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,86441,86442],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,86444,86445],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,86447,86448],{},"大哥是Object",[14,86450,86451],{},[25,86452],{"alt":27,"src":86453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,86455,86456],{},[25,86457],{"alt":27,"src":86458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,86460,86461],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86463,86464],{},"万物皆对象",[18,86466,86468],{"id":86467},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86470,86471],{},"模态框",[14,86473,86474],{},"以后遇见这个效果直接使用这个就行",[14,86476,86477],{},[25,86478],{"alt":27,"src":86479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86481,86482],{},[25,86483],{"alt":27,"src":86484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86486,86487],{},[25,86488],{"alt":27,"src":86489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86491,86492],{},[25,86493],{"alt":27,"src":86494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86496,86497],{},"补充知识点：",[30,86499,86500],{},[33,86501,86502],{},"append()",[14,86504,86505],{},[25,86506],{"alt":27,"src":86507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[40,86509,86511],{"className":51164,"code":86510,"language":51166,"meta":27,"style":27},"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",[46,86512,86513,86518,86523,86528,86532,86536,86540,86545,86550,86555,86559],{"__ignoreMap":27},[49,86514,86515],{"class":51,"line":52},[49,86516,86517],{"class":73},"append(param1)\n",[49,86519,86520],{"class":51,"line":63},[49,86521,86522],{"class":73},"append(param1, param2)\n",[49,86524,86525],{"class":51,"line":70},[49,86526,86527],{"class":73},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[49,86529,86530],{"class":51,"line":219},[49,86531,399],{"emptyLinePlaceholder":398},[49,86533,86534],{"class":51,"line":233},[49,86535,399],{"emptyLinePlaceholder":398},[49,86537,86538],{"class":51,"line":241},[49,86539,399],{"emptyLinePlaceholder":398},[49,86541,86542],{"class":51,"line":1920},[49,86543,86544],{"class":73},"let div = document.createElement(\"div\");\n",[49,86546,86547],{"class":51,"line":2011},[49,86548,86549],{"class":73},"let p = document.createElement(\"p\");\n",[49,86551,86552],{"class":51,"line":2017},[49,86553,86554],{"class":73},"div.append(p);\n",[49,86556,86557],{"class":51,"line":2029},[49,86558,399],{"emptyLinePlaceholder":398},[49,86560,86561,86564,86566],{"class":51,"line":2311},[49,86562,86563],{"class":73},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[49,86565,14],{"class":51831},[49,86567,86568],{"class":73},"> ]\n",[30,86570,86571],{"start":63},[33,86572,86573],{},"remove()",[14,86575,86576],{},"自己删自己",[14,86578,86579],{},[25,86580],{"alt":27,"src":86581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[40,86583,86585],{"className":51164,"code":86584,"language":51166,"meta":27,"style":27},"\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",[46,86586,86587,86597,86611,86615,86623,86637,86657,86669,86677,86684,86696,86709,86744,86756,86767,86779,86791,86803,86830,86840,86844,86848,86857,86869,86883,86893,86905,86909,86913,86923,86934,86944,86954,86967,86980,86990,86994,86998,87007,87017,87029,87033,87037,87046,87056,87066,87078,87082,87086,87096,87112,87123,87133,87143,87155,87167,87179,87183,87187,87200,87211,87215,87223,87231,87235,87243,87263,87283,87291,87296,87322,87327,87332,87351,87356,87368,87373,87384,87394,87404,87409,87414,87418,87423,87428,87433,87453,87458,87478,87483,87497,87502,87507,87512,87528,87532,87537,87566,87571,87576,87581,87592,87596,87600,87604,87609,87634,87639,87664,87669,87678,87682,87687,87712,87716,87741,87745,87754,87758,87763,87781,87791,87795,87803,87811,87815],{"__ignoreMap":27},[49,86588,86589,86591,86593,86595],{"class":51,"line":52},[49,86590,51828],{"class":73},[49,86592,51832],{"class":51831},[49,86594,51835],{"class":55},[49,86596,51838],{"class":73},[49,86598,86599,86601,86603,86605,86607,86609],{"class":51,"line":63},[49,86600,1739],{"class":73},[49,86602,51166],{"class":51831},[49,86604,51847],{"class":55},[49,86606,78],{"class":73},[49,86608,51852],{"class":59},[49,86610,51838],{"class":73},[49,86612,86613],{"class":51,"line":70},[49,86614,399],{"emptyLinePlaceholder":398},[49,86616,86617,86619,86621],{"class":51,"line":219},[49,86618,1739],{"class":73},[49,86620,51865],{"class":51831},[49,86622,51838],{"class":73},[49,86624,86625,86627,86629,86631,86633,86635],{"class":51,"line":233},[49,86626,52675],{"class":73},[49,86628,51875],{"class":51831},[49,86630,51878],{"class":55},[49,86632,78],{"class":73},[49,86634,51883],{"class":59},[49,86636,51838],{"class":73},[49,86638,86639,86641,86643,86645,86647,86649,86651,86653,86655],{"class":51,"line":241},[49,86640,52675],{"class":73},[49,86642,51875],{"class":51831},[49,86644,15617],{"class":55},[49,86646,78],{"class":73},[49,86648,51922],{"class":59},[49,86650,51902],{"class":55},[49,86652,78],{"class":73},[49,86654,51929],{"class":59},[49,86656,51838],{"class":73},[49,86658,86659,86661,86663,86665,86667],{"class":51,"line":1920},[49,86660,52675],{"class":73},[49,86662,51938],{"class":51831},[49,86664,51941],{"class":73},[49,86666,51938],{"class":51831},[49,86668,51838],{"class":73},[49,86670,86671,86673,86675],{"class":51,"line":2011},[49,86672,52675],{"class":73},[49,86674,757],{"class":51831},[49,86676,51838],{"class":73},[49,86678,86679,86682],{"class":51,"line":2017},[49,86680,86681],{"class":55},"    .modal",[49,86683,16269],{"class":73},[49,86685,86686,86688,86690,86692,86694],{"class":51,"line":2029},[49,86687,55302],{"class":159},[49,86689,51968],{"class":73},[49,86691,4670],{"class":159},[49,86693,52023],{"class":77},[49,86695,1990],{"class":73},[49,86697,86698,86701,86703,86705,86707],{"class":51,"line":2311},[49,86699,86700],{"class":159},"      min-height",[49,86702,51968],{"class":73},[49,86704,1140],{"class":159},[49,86706,52023],{"class":77},[49,86708,1990],{"class":73},[49,86710,86711,86713,86715,86717,86719,86721,86723,86725,86727,86729,86731,86733,86735,86737,86739,86742],{"class":51,"line":2316},[49,86712,79281],{"class":159},[49,86714,51968],{"class":73},[49,86716,1021],{"class":159},[49,86718,4790],{"class":159},[49,86720,2736],{"class":159},[49,86722,52023],{"class":77},[49,86724,79298],{"class":159},[49,86726,841],{"class":73},[49,86728,1021],{"class":159},[49,86730,13132],{"class":73},[49,86732,1021],{"class":159},[49,86734,13132],{"class":73},[49,86736,1021],{"class":159},[49,86738,13132],{"class":73},[49,86740,86741],{"class":159},"0.1",[49,86743,3416],{"class":73},[49,86745,86746,86748,86750,86752,86754],{"class":51,"line":2322},[49,86747,55665],{"class":159},[49,86749,51968],{"class":73},[49,86751,1122],{"class":159},[49,86753,52023],{"class":77},[49,86755,1990],{"class":73},[49,86757,86758,86760,86762,86765],{"class":51,"line":2327},[49,86759,55290],{"class":159},[49,86761,51968],{"class":73},[49,86763,86764],{"class":159},"fixed",[49,86766,1990],{"class":73},[49,86768,86769,86772,86774,86777],{"class":51,"line":2341},[49,86770,86771],{"class":159},"      z-index",[49,86773,51968],{"class":73},[49,86775,86776],{"class":159},"999",[49,86778,1990],{"class":73},[49,86780,86781,86783,86785,86787,86789],{"class":51,"line":2346},[49,86782,55369],{"class":159},[49,86784,51968],{"class":73},[49,86786,1485],{"class":159},[49,86788,1157],{"class":77},[49,86790,1990],{"class":73},[49,86792,86793,86795,86797,86799,86801],{"class":51,"line":2352},[49,86794,55478],{"class":159},[49,86796,51968],{"class":73},[49,86798,1485],{"class":159},[49,86800,1157],{"class":77},[49,86802,1990],{"class":73},[49,86804,86805,86807,86809,86811,86813,86816,86818,86820,86822,86824,86826,86828],{"class":51,"line":2373},[49,86806,79322],{"class":159},[49,86808,51968],{"class":73},[49,86810,79327],{"class":159},[49,86812,841],{"class":73},[49,86814,86815],{"class":159},"-50",[49,86817,1157],{"class":77},[49,86819,13132],{"class":73},[49,86821,86815],{"class":159},[49,86823,1157],{"class":77},[49,86825,13132],{"class":73},[49,86827,1021],{"class":159},[49,86829,3416],{"class":73},[49,86831,86832,86834,86836,86838],{"class":51,"line":2378},[49,86833,55415],{"class":159},[49,86835,51968],{"class":73},[49,86837,61373],{"class":159},[49,86839,1990],{"class":73},[49,86841,86842],{"class":51,"line":2392},[49,86843,2885],{"class":73},[49,86845,86846],{"class":51,"line":2397},[49,86847,399],{"emptyLinePlaceholder":398},[49,86849,86850,86852,86855],{"class":51,"line":2426},[49,86851,86681],{"class":55},[49,86853,86854],{"class":55}," .header",[49,86856,16269],{"class":73},[49,86858,86859,86861,86863,86865,86867],{"class":51,"line":2431},[49,86860,57890],{"class":159},[49,86862,51968],{"class":73},[49,86864,1230],{"class":159},[49,86866,52023],{"class":77},[49,86868,1990],{"class":73},[49,86870,86871,86873,86875,86877,86879,86881],{"class":51,"line":2448},[49,86872,55226],{"class":159},[49,86874,51968],{"class":73},[49,86876,1021],{"class":159},[49,86878,2736],{"class":159},[49,86880,52023],{"class":77},[49,86882,1990],{"class":73},[49,86884,86885,86887,86889,86891],{"class":51,"line":2453},[49,86886,55290],{"class":159},[49,86888,51968],{"class":73},[49,86890,55295],{"class":159},[49,86892,1990],{"class":73},[49,86894,86895,86897,86899,86901,86903],{"class":51,"line":2458},[49,86896,55453],{"class":159},[49,86898,51968],{"class":73},[49,86900,1529],{"class":159},[49,86902,52023],{"class":77},[49,86904,1990],{"class":73},[49,86906,86907],{"class":51,"line":2463},[49,86908,2885],{"class":73},[49,86910,86911],{"class":51,"line":2477},[49,86912,399],{"emptyLinePlaceholder":398},[49,86914,86915,86917,86919,86921],{"class":51,"line":2482},[49,86916,86681],{"class":55},[49,86918,86854],{"class":55},[49,86920,3729],{"class":51831},[49,86922,16269],{"class":73},[49,86924,86925,86928,86930,86932],{"class":51,"line":3274},[49,86926,86927],{"class":159},"      font-style",[49,86929,51968],{"class":73},[49,86931,64372],{"class":159},[49,86933,1990],{"class":73},[49,86935,86936,86938,86940,86942],{"class":51,"line":3288},[49,86937,57947],{"class":159},[49,86939,51968],{"class":73},[49,86941,62601],{"class":159},[49,86943,1990],{"class":73},[49,86945,86946,86948,86950,86952],{"class":51,"line":3296},[49,86947,55290],{"class":159},[49,86949,51968],{"class":73},[49,86951,55362],{"class":159},[49,86953,1990],{"class":73},[49,86955,86956,86959,86961,86963,86965],{"class":51,"line":3301},[49,86957,86958],{"class":159},"      right",[49,86960,51968],{"class":73},[49,86962,1404],{"class":159},[49,86964,52023],{"class":77},[49,86966,1990],{"class":73},[49,86968,86969,86971,86973,86976,86978],{"class":51,"line":3307},[49,86970,55478],{"class":159},[49,86972,51968],{"class":73},[49,86974,86975],{"class":159},"-2",[49,86977,52023],{"class":77},[49,86979,1990],{"class":73},[49,86981,86982,86984,86986,86988],{"class":51,"line":3313},[49,86983,62556],{"class":159},[49,86985,51968],{"class":73},[49,86987,62561],{"class":159},[49,86989,1990],{"class":73},[49,86991,86992],{"class":51,"line":3318},[49,86993,2885],{"class":73},[49,86995,86996],{"class":51,"line":8645},[49,86997,399],{"emptyLinePlaceholder":398},[49,86999,87000,87002,87005],{"class":51,"line":8669},[49,87001,86681],{"class":55},[49,87003,87004],{"class":55}," .body",[49,87006,16269],{"class":73},[49,87008,87009,87011,87013,87015],{"class":51,"line":8674},[49,87010,57817],{"class":159},[49,87012,51968],{"class":73},[49,87014,52123],{"class":159},[49,87016,1990],{"class":73},[49,87018,87019,87021,87023,87025,87027],{"class":51,"line":8680},[49,87020,55226],{"class":159},[49,87022,51968],{"class":73},[49,87024,1275],{"class":159},[49,87026,52023],{"class":77},[49,87028,1990],{"class":73},[49,87030,87031],{"class":51,"line":8707},[49,87032,2885],{"class":73},[49,87034,87035],{"class":51,"line":8712},[49,87036,399],{"emptyLinePlaceholder":398},[49,87038,87039,87041,87044],{"class":51,"line":8718},[49,87040,86681],{"class":55},[49,87042,87043],{"class":55}," .footer",[49,87045,16269],{"class":73},[49,87047,87048,87050,87052,87054],{"class":51,"line":8730},[49,87049,55540],{"class":159},[49,87051,51968],{"class":73},[49,87053,52008],{"class":159},[49,87055,1990],{"class":73},[49,87057,87058,87060,87062,87064],{"class":51,"line":8742},[49,87059,55551],{"class":159},[49,87061,51968],{"class":73},[49,87063,52111],{"class":159},[49,87065,1990],{"class":73},[49,87067,87068,87070,87072,87074,87076],{"class":51,"line":8754},[49,87069,55226],{"class":159},[49,87071,51968],{"class":73},[49,87073,1275],{"class":159},[49,87075,52023],{"class":77},[49,87077,1990],{"class":73},[49,87079,87080],{"class":51,"line":10413},[49,87081,2885],{"class":73},[49,87083,87084],{"class":51,"line":10438},[49,87085,399],{"emptyLinePlaceholder":398},[49,87087,87088,87090,87092,87094],{"class":51,"line":10461},[49,87089,86681],{"class":55},[49,87091,87043],{"class":55},[49,87093,2098],{"class":51831},[49,87095,16269],{"class":73},[49,87097,87098,87100,87102,87104,87106,87108,87110],{"class":51,"line":10485},[49,87099,55226],{"class":159},[49,87101,51968],{"class":73},[49,87103,909],{"class":159},[49,87105,52023],{"class":77},[49,87107,2781],{"class":159},[49,87109,52023],{"class":77},[49,87111,1990],{"class":73},[49,87113,87114,87116,87118,87121],{"class":51,"line":10490},[49,87115,62252],{"class":159},[49,87117,51968],{"class":73},[49,87119,87120],{"class":159},"#ccc",[49,87122,1990],{"class":73},[49,87124,87125,87127,87129,87131],{"class":51,"line":10495},[49,87126,64501],{"class":159},[49,87128,51968],{"class":73},[49,87130,55268],{"class":159},[49,87132,1990],{"class":73},[49,87134,87135,87137,87139,87141],{"class":51,"line":10500},[49,87136,57947],{"class":159},[49,87138,51968],{"class":73},[49,87140,61373],{"class":159},[49,87142,1990],{"class":73},[49,87144,87145,87147,87149,87151,87153],{"class":51,"line":10509},[49,87146,55665],{"class":159},[49,87148,51968],{"class":73},[49,87150,915],{"class":159},[49,87152,52023],{"class":77},[49,87154,1990],{"class":73},[49,87156,87157,87159,87161,87163,87165],{"class":51,"line":10514},[49,87158,62281],{"class":159},[49,87160,51968],{"class":73},[49,87162,1275],{"class":159},[49,87164,52023],{"class":77},[49,87166,1990],{"class":73},[49,87168,87169,87171,87173,87175,87177],{"class":51,"line":10520},[49,87170,55453],{"class":159},[49,87172,51968],{"class":73},[49,87174,1378],{"class":159},[49,87176,52023],{"class":77},[49,87178,1990],{"class":73},[49,87180,87181],{"class":51,"line":10541},[49,87182,2885],{"class":73},[49,87184,87185],{"class":51,"line":10547},[49,87186,399],{"emptyLinePlaceholder":398},[49,87188,87189,87191,87193,87195,87198],{"class":51,"line":10561},[49,87190,86681],{"class":55},[49,87192,87043],{"class":55},[49,87194,2098],{"class":51831},[49,87196,87197],{"class":55},".submit",[49,87199,16269],{"class":73},[49,87201,87202,87204,87206,87209],{"class":51,"line":10567},[49,87203,55415],{"class":159},[49,87205,51968],{"class":73},[49,87207,87208],{"class":159},"#369",[49,87210,1990],{"class":73},[49,87212,87213],{"class":51,"line":10594},[49,87214,2885],{"class":73},[49,87216,87217,87219,87221],{"class":51,"line":10603},[49,87218,52948],{"class":73},[49,87220,757],{"class":51831},[49,87222,51838],{"class":73},[49,87224,87225,87227,87229],{"class":51,"line":10609},[49,87226,52316],{"class":73},[49,87228,51865],{"class":51831},[49,87230,51838],{"class":73},[49,87232,87233],{"class":51,"line":10617},[49,87234,399],{"emptyLinePlaceholder":398},[49,87236,87237,87239,87241],{"class":51,"line":10622},[49,87238,1739],{"class":73},[49,87240,52331],{"class":51831},[49,87242,51838],{"class":73},[49,87244,87245,87247,87249,87251,87253,87256,87259,87261],{"class":51,"line":17301},[49,87246,52675],{"class":73},[49,87248,54418],{"class":51831},[49,87250,15656],{"class":55},[49,87252,78],{"class":73},[49,87254,87255],{"class":59},"\"delete\"",[49,87257,87258],{"class":73},">删除\u003C\u002F",[49,87260,54418],{"class":51831},[49,87262,51838],{"class":73},[49,87264,87265,87267,87269,87271,87273,87276,87279,87281],{"class":51,"line":17307},[49,87266,52675],{"class":73},[49,87268,54418],{"class":51831},[49,87270,15656],{"class":55},[49,87272,78],{"class":73},[49,87274,87275],{"class":59},"\"login\"",[49,87277,87278],{"class":73},">登录\u003C\u002F",[49,87280,54418],{"class":51831},[49,87282,51838],{"class":73},[49,87284,87285,87287,87289],{"class":51,"line":17330},[49,87286,52675],{"class":73},[49,87288,52344],{"class":51831},[49,87290,51838],{"class":73},[49,87292,87293],{"class":51,"line":17336},[49,87294,87295],{"class":66},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[49,87297,87298,87300,87303,87305,87307,87309,87311,87313,87316,87318,87320],{"class":51,"line":17359},[49,87299,70615],{"class":77},[49,87301,87302],{"class":55}," Modal",[49,87304,841],{"class":73},[49,87306,51938],{"class":5913},[49,87308,14261],{"class":77},[49,87310,70461],{"class":59},[49,87312,13132],{"class":73},[49,87314,87315],{"class":5913},"message",[49,87317,14261],{"class":77},[49,87319,70461],{"class":59},[49,87321,13139],{"class":73},[49,87323,87324],{"class":51,"line":17373},[49,87325,87326],{"class":66},"      \u002F\u002F 创建Model 模态框盒子\n",[49,87328,87329],{"class":51,"line":17393},[49,87330,87331],{"class":66},"      \u002F\u002F 1.1 创建div标签\n",[49,87333,87334,87336,87339,87341,87343,87345,87347,87349],{"class":51,"line":17399},[49,87335,70582],{"class":159},[49,87337,87338],{"class":73},".modalBox ",[49,87340,78],{"class":77},[49,87342,54927],{"class":73},[49,87344,70682],{"class":55},[49,87346,841],{"class":73},[49,87348,82462],{"class":59},[49,87350,847],{"class":73},[49,87352,87353],{"class":51,"line":17410},[49,87354,87355],{"class":66},"      \u002F\u002F 1.2 给div 添加类名为model\n",[49,87357,87358,87360,87363,87365],{"class":51,"line":17433},[49,87359,70582],{"class":159},[49,87361,87362],{"class":73},".modalBox.className ",[49,87364,78],{"class":77},[49,87366,87367],{"class":59}," 'modal'\n",[49,87369,87370],{"class":51,"line":17455},[49,87371,87372],{"class":66},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[49,87374,87375,87377,87380,87382],{"class":51,"line":17460},[49,87376,70582],{"class":159},[49,87378,87379],{"class":73},".modalBox.innerHTML ",[49,87381,78],{"class":77},[49,87383,70699],{"class":59},[49,87385,87386,87389,87391],{"class":51,"line":17466},[49,87387,87388],{"class":59},"        \u003Cdiv class=\"header\">${",[49,87390,51938],{"class":73},[49,87392,87393],{"class":59},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[49,87395,87396,87399,87401],{"class":51,"line":17480},[49,87397,87398],{"class":59},"        \u003Cdiv class=\"body\">${",[49,87400,87315],{"class":73},[49,87402,87403],{"class":59},"}\u003C\u002Fdiv>\n",[49,87405,87406],{"class":51,"line":17493},[49,87407,87408],{"class":59},"      `\n",[49,87410,87411],{"class":51,"line":17498},[49,87412,87413],{"class":66},"      \u002F\u002F console.log(this.modalBox)\n",[49,87415,87416],{"class":51,"line":17512},[49,87417,2885],{"class":73},[49,87419,87420],{"class":51,"line":17517},[49,87421,87422],{"class":66},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[49,87424,87425],{"class":51,"line":17523},[49,87426,87427],{"class":66},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[49,87429,87430],{"class":51,"line":17528},[49,87431,87432],{"class":66},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[49,87434,87435,87438,87440,87442,87444,87447,87449,87451],{"class":51,"line":17542},[49,87436,87437],{"class":159},"    Modal",[49,87439,1387],{"class":73},[49,87441,86110],{"class":159},[49,87443,1387],{"class":73},[49,87445,87446],{"class":55},"open",[49,87448,14261],{"class":77},[49,87450,59449],{"class":77},[49,87452,54983],{"class":73},[49,87454,87455],{"class":51,"line":17547},[49,87456,87457],{"class":66},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[49,87459,87460,87462,87465,87467,87469,87471,87473,87476],{"class":51,"line":17552},[49,87461,58759],{"class":77},[49,87463,87464],{"class":159}," box",[49,87466,14261],{"class":77},[49,87468,54927],{"class":73},[49,87470,54930],{"class":55},[49,87472,841],{"class":73},[49,87474,87475],{"class":59},"'.modal'",[49,87477,847],{"class":73},[49,87479,87480],{"class":51,"line":17566},[49,87481,87482],{"class":66},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[49,87484,87485,87488,87490,87493,87495],{"class":51,"line":17578},[49,87486,87487],{"class":73},"      box ",[49,87489,2414],{"class":77},[49,87491,87492],{"class":73}," box.",[49,87494,57537],{"class":55},[49,87496,2674],{"class":73},[49,87498,87499],{"class":51,"line":17583},[49,87500,87501],{"class":66},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[49,87503,87504],{"class":51,"line":17596},[49,87505,87506],{"class":66},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[49,87508,87509],{"class":51,"line":17601},[49,87510,87511],{"class":66},"      \u002F\u002F append可以增加对象\n",[49,87513,87514,87517,87520,87522,87525],{"class":51,"line":17606},[49,87515,87516],{"class":73},"      document.body.",[49,87518,87519],{"class":55},"append",[49,87521,841],{"class":73},[49,87523,87524],{"class":159},"this",[49,87526,87527],{"class":73},".modalBox)\n",[49,87529,87530],{"class":51,"line":17611},[49,87531,399],{"emptyLinePlaceholder":398},[49,87533,87534],{"class":51,"line":17624},[49,87535,87536],{"class":66},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[49,87538,87539,87541,87544,87546,87548,87551,87553,87555,87557,87559,87562,87564],{"class":51,"line":17629},[49,87540,70582],{"class":159},[49,87542,87543],{"class":73},".modalBox.",[49,87545,54930],{"class":55},[49,87547,841],{"class":73},[49,87549,87550],{"class":59},"'i'",[49,87552,31357],{"class":73},[49,87554,58344],{"class":55},[49,87556,841],{"class":73},[49,87558,58349],{"class":59},[49,87560,87561],{"class":73},", () ",[49,87563,85253],{"class":77},[49,87565,16269],{"class":73},[49,87567,87568],{"class":51,"line":33164},[49,87569,87570],{"class":66},"        \u002F\u002F 这个地方需要用到箭头函数\n",[49,87572,87573],{"class":51,"line":33170},[49,87574,87575],{"class":66},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[49,87577,87578],{"class":51,"line":33176},[49,87579,87580],{"class":66},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[49,87582,87583,87585,87587,87590],{"class":51,"line":33182},[49,87584,65257],{"class":159},[49,87586,1387],{"class":73},[49,87588,87589],{"class":55},"close",[49,87591,2674],{"class":73},[49,87593,87594],{"class":51,"line":33188},[49,87595,65346],{"class":73},[49,87597,87598],{"class":51,"line":33199},[49,87599,2885],{"class":73},[49,87601,87602],{"class":51,"line":33205},[49,87603,399],{"emptyLinePlaceholder":398},[49,87605,87606],{"class":51,"line":33225},[49,87607,87608],{"class":66},"    \u002F\u002F 测试一下 点击 删除按钮\n",[49,87610,87611,87613,87615,87617,87620,87622,87624,87626,87628,87630,87632],{"class":51,"line":33231},[49,87612,52938],{"class":73},[49,87614,54930],{"class":55},[49,87616,841],{"class":73},[49,87618,87619],{"class":59},"'#delete'",[49,87621,31357],{"class":73},[49,87623,58344],{"class":55},[49,87625,841],{"class":73},[49,87627,58349],{"class":59},[49,87629,87561],{"class":73},[49,87631,85253],{"class":77},[49,87633,16269],{"class":73},[49,87635,87636],{"class":51,"line":33242},[49,87637,87638],{"class":66},"      \u002F\u002F 先调用Model构造函数\n",[49,87640,87641,87643,87646,87648,87650,87652,87654,87657,87659,87662],{"class":51,"line":33248},[49,87642,58759],{"class":77},[49,87644,87645],{"class":159}," del",[49,87647,14261],{"class":77},[49,87649,12275],{"class":77},[49,87651,87302],{"class":55},[49,87653,841],{"class":73},[49,87655,87656],{"class":59},"'温馨的提示'",[49,87658,13132],{"class":73},[49,87660,87661],{"class":59},"'您没有删除权限操作'",[49,87663,847],{"class":73},[49,87665,87666],{"class":51,"line":33254},[49,87667,87668],{"class":66},"      \u002F\u002F 实例对象调用open方法\n",[49,87670,87671,87674,87676],{"class":51,"line":33260},[49,87672,87673],{"class":73},"      del.",[49,87675,87446],{"class":55},[49,87677,2674],{"class":73},[49,87679,87680],{"class":51,"line":33266},[49,87681,33992],{"class":73},[49,87683,87684],{"class":51,"line":33272},[49,87685,87686],{"class":66},"    \u002F\u002F 测试一下 点击 登录按钮\n",[49,87688,87689,87691,87693,87695,87698,87700,87702,87704,87706,87708,87710],{"class":51,"line":33278},[49,87690,52938],{"class":73},[49,87692,54930],{"class":55},[49,87694,841],{"class":73},[49,87696,87697],{"class":59},"'#login'",[49,87699,31357],{"class":73},[49,87701,58344],{"class":55},[49,87703,841],{"class":73},[49,87705,58349],{"class":59},[49,87707,87561],{"class":73},[49,87709,85253],{"class":77},[49,87711,16269],{"class":73},[49,87713,87714],{"class":51,"line":33284},[49,87715,87638],{"class":66},[49,87717,87718,87720,87723,87725,87727,87729,87731,87734,87736,87739],{"class":51,"line":33304},[49,87719,58759],{"class":77},[49,87721,87722],{"class":159}," log",[49,87724,14261],{"class":77},[49,87726,12275],{"class":77},[49,87728,87302],{"class":55},[49,87730,841],{"class":73},[49,87732,87733],{"class":59},"'友情提示'",[49,87735,13132],{"class":73},[49,87737,87738],{"class":59},"'您还没有登录呢'",[49,87740,847],{"class":73},[49,87742,87743],{"class":51,"line":33310},[49,87744,87668],{"class":66},[49,87746,87747,87750,87752],{"class":51,"line":33326},[49,87748,87749],{"class":73},"      log.",[49,87751,87446],{"class":55},[49,87753,2674],{"class":73},[49,87755,87756],{"class":51,"line":33332},[49,87757,33992],{"class":73},[49,87759,87760],{"class":51,"line":33346},[49,87761,87762],{"class":66},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[49,87764,87765,87767,87769,87771,87773,87775,87777,87779],{"class":51,"line":33352},[49,87766,87437],{"class":159},[49,87768,1387],{"class":73},[49,87770,86110],{"class":159},[49,87772,1387],{"class":73},[49,87774,87589],{"class":55},[49,87776,14261],{"class":77},[49,87778,59449],{"class":77},[49,87780,54983],{"class":73},[49,87782,87783,87785,87787,87789],{"class":51,"line":33367},[49,87784,70582],{"class":159},[49,87786,87543],{"class":73},[49,87788,57537],{"class":55},[49,87790,2674],{"class":73},[49,87792,87793],{"class":51,"line":33373},[49,87794,2885],{"class":73},[49,87796,87797,87799,87801],{"class":51,"line":33382},[49,87798,52948],{"class":73},[49,87800,52344],{"class":51831},[49,87802,51838],{"class":73},[49,87804,87805,87807,87809],{"class":51,"line":33388},[49,87806,52316],{"class":73},[49,87808,52331],{"class":51831},[49,87810,51838],{"class":73},[49,87812,87813],{"class":51,"line":33397},[49,87814,399],{"emptyLinePlaceholder":398},[49,87816,87817,87819,87821],{"class":51,"line":33403},[49,87818,52316],{"class":73},[49,87820,51166],{"class":51831},[49,87822,51838],{"class":73},[14,87824,87825],{},[25,87826],{"alt":27,"src":87827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[782,87829,87831],{"id":87830},"_414-深浅拷贝","4.14 深浅拷贝",[18,87833,87835],{"id":87834},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87837,87838],{},[25,87839],{"alt":27,"src":87840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87842,87843],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87845,87846],{},[25,87847],{"alt":27,"src":87848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87850,87851],{},[25,87852],{"alt":27,"src":87853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87855,87856],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87858,87859],{},[25,87860],{"alt":27,"src":87861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87863,12029],{},[14,87865,87866],{},[25,87867],{"alt":27,"src":87868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[18,87870,87872],{"id":87871},"_4142-深拷贝","4.14.2 深拷贝",[14,87874,87875],{},"深拷贝：拷贝的是对象，不是地址",[14,87877,87878],{},"常用的三种方法：",[30,87880,87881,87884,87887],{},[33,87882,87883],{},"通过递归实现深拷贝",[33,87885,87886],{},"lodash\u002FcloneDeep",[33,87888,87889],{},"通过JSON.stringify()实现",[130,87891,87893],{"id":87892},"_41421-递归函数","4.14.2.1 递归函数",[14,87895,87896],{},[25,87897],{"alt":27,"src":87898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[30,87900,87901],{},[33,87902,87903],{},"死递归占溢出：",[40,87905,87907],{"className":53598,"code":87906,"language":53600,"meta":27,"style":27},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[46,87908,87909,87917,87925,87929,87934,87938,87943,87951],{"__ignoreMap":27},[49,87910,87911,87913,87915],{"class":51,"line":52},[49,87912,1739],{"class":73},[49,87914,52331],{"class":51831},[49,87916,51838],{"class":73},[49,87918,87919,87921,87923],{"class":51,"line":63},[49,87920,52675],{"class":73},[49,87922,52344],{"class":51831},[49,87924,51838],{"class":73},[49,87926,87927],{"class":51,"line":70},[49,87928,77674],{"class":73},[49,87930,87931],{"class":51,"line":219},[49,87932,87933],{"class":73},"      fn()\n",[49,87935,87936],{"class":51,"line":233},[49,87937,2885],{"class":73},[49,87939,87940],{"class":51,"line":241},[49,87941,87942],{"class":73},"    fn()\n",[49,87944,87945,87947,87949],{"class":51,"line":1920},[49,87946,52948],{"class":73},[49,87948,52344],{"class":51831},[49,87950,51838],{"class":73},[49,87952,87953,87955,87957],{"class":51,"line":2011},[49,87954,52316],{"class":73},[49,87956,52331],{"class":51831},[49,87958,51838],{"class":73},[30,87960,87961],{"start":63},[33,87962,87963],{},"递归函数要加判断条件：",[14,87965,87966],{},[25,87967],{"alt":27,"src":87968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[30,87970,87971],{"start":70},[33,87972,87973],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[40,87975,87977],{"className":51164,"code":87976,"language":51166,"meta":27,"style":27},"\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",[46,87978,87979,87989,88003,88007,88015,88029,88049,88061,88069,88073,88081,88093,88101,88109,88134,88146,88150,88157,88165,88173,88177],{"__ignoreMap":27},[49,87980,87981,87983,87985,87987],{"class":51,"line":52},[49,87982,51828],{"class":73},[49,87984,51832],{"class":51831},[49,87986,51835],{"class":55},[49,87988,51838],{"class":73},[49,87990,87991,87993,87995,87997,87999,88001],{"class":51,"line":63},[49,87992,1739],{"class":73},[49,87994,51166],{"class":51831},[49,87996,51847],{"class":55},[49,87998,78],{"class":73},[49,88000,51852],{"class":59},[49,88002,51838],{"class":73},[49,88004,88005],{"class":51,"line":70},[49,88006,399],{"emptyLinePlaceholder":398},[49,88008,88009,88011,88013],{"class":51,"line":219},[49,88010,1739],{"class":73},[49,88012,51865],{"class":51831},[49,88014,51838],{"class":73},[49,88016,88017,88019,88021,88023,88025,88027],{"class":51,"line":233},[49,88018,52675],{"class":73},[49,88020,51875],{"class":51831},[49,88022,51878],{"class":55},[49,88024,78],{"class":73},[49,88026,51883],{"class":59},[49,88028,51838],{"class":73},[49,88030,88031,88033,88035,88037,88039,88041,88043,88045,88047],{"class":51,"line":241},[49,88032,52675],{"class":73},[49,88034,51875],{"class":51831},[49,88036,15617],{"class":55},[49,88038,78],{"class":73},[49,88040,51922],{"class":59},[49,88042,51902],{"class":55},[49,88044,78],{"class":73},[49,88046,51929],{"class":59},[49,88048,51838],{"class":73},[49,88050,88051,88053,88055,88057,88059],{"class":51,"line":1920},[49,88052,52675],{"class":73},[49,88054,51938],{"class":51831},[49,88056,51941],{"class":73},[49,88058,51938],{"class":51831},[49,88060,51838],{"class":73},[49,88062,88063,88065,88067],{"class":51,"line":2011},[49,88064,52316],{"class":73},[49,88066,51865],{"class":51831},[49,88068,51838],{"class":73},[49,88070,88071],{"class":51,"line":2017},[49,88072,399],{"emptyLinePlaceholder":398},[49,88074,88075,88077,88079],{"class":51,"line":2029},[49,88076,1739],{"class":73},[49,88078,52331],{"class":51831},[49,88080,51838],{"class":73},[49,88082,88083,88085,88087,88089,88091],{"class":51,"line":2311},[49,88084,52675],{"class":73},[49,88086,52142],{"class":51831},[49,88088,55845],{"class":73},[49,88090,52142],{"class":51831},[49,88092,51838],{"class":73},[49,88094,88095,88097,88099],{"class":51,"line":2316},[49,88096,52675],{"class":73},[49,88098,52344],{"class":51831},[49,88100,51838],{"class":73},[49,88102,88103,88105,88107],{"class":51,"line":2322},[49,88104,70615],{"class":77},[49,88106,74304],{"class":55},[49,88108,11550],{"class":73},[49,88110,88111,88113,88115,88117,88119,88121,88123,88125,88127,88129,88132],{"class":51,"line":2327},[49,88112,56302],{"class":73},[49,88114,54930],{"class":55},[49,88116,841],{"class":73},[49,88118,82462],{"class":59},[49,88120,74780],{"class":73},[49,88122,78],{"class":77},[49,88124,12275],{"class":77},[49,88126,74320],{"class":55},[49,88128,17958],{"class":73},[49,88130,88131],{"class":55},"toLocaleString",[49,88133,2674],{"class":73},[49,88135,88136,88139,88142,88144],{"class":51,"line":2341},[49,88137,88138],{"class":55},"      setTimeout",[49,88140,88141],{"class":73},"(getTime, ",[49,88143,7107],{"class":159},[49,88145,847],{"class":73},[49,88147,88148],{"class":51,"line":2346},[49,88149,2885],{"class":73},[49,88151,88152,88155],{"class":51,"line":2352},[49,88153,88154],{"class":55},"    getTime",[49,88156,2674],{"class":73},[49,88158,88159,88161,88163],{"class":51,"line":2373},[49,88160,52948],{"class":73},[49,88162,52344],{"class":51831},[49,88164,51838],{"class":73},[49,88166,88167,88169,88171],{"class":51,"line":2378},[49,88168,52316],{"class":73},[49,88170,52331],{"class":51831},[49,88172,51838],{"class":73},[49,88174,88175],{"class":51,"line":2392},[49,88176,399],{"emptyLinePlaceholder":398},[49,88178,88179,88181,88183],{"class":51,"line":2397},[49,88180,52316],{"class":73},[49,88182,51166],{"class":51831},[49,88184,51838],{"class":73},[14,88186,88187],{},[25,88188],{"alt":27,"src":88189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[30,88191,88192],{"start":219},[33,88193,87883],{},[14,88195,88196],{},[25,88197],{"alt":27,"src":88198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,88200,88201],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,88203,39720],{},[14,88205,88206],{},"这个是简易版的递归函数深拷贝",[14,88208,88209],{},"一定要注意先数组再对象，因为万物皆可对象",[40,88211,88213],{"className":51164,"code":88212,"language":51166,"meta":27,"style":27},"\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",[46,88214,88215,88225,88239,88243,88251,88265,88285,88297,88305,88309,88317,88325,88335,88344,88352,88368,88372,88380,88384,88388,88400,88405,88424,88440,88445,88450,88455,88470,88475,88480,88489,88497,88514,88522,88528,88536,88541,88546,88555,88559,88563,88567,88578,88587,88597,88611,88621,88629,88637,88645,88649],{"__ignoreMap":27},[49,88216,88217,88219,88221,88223],{"class":51,"line":52},[49,88218,51828],{"class":73},[49,88220,51832],{"class":51831},[49,88222,51835],{"class":55},[49,88224,51838],{"class":73},[49,88226,88227,88229,88231,88233,88235,88237],{"class":51,"line":63},[49,88228,1739],{"class":73},[49,88230,51166],{"class":51831},[49,88232,51847],{"class":55},[49,88234,78],{"class":73},[49,88236,51852],{"class":59},[49,88238,51838],{"class":73},[49,88240,88241],{"class":51,"line":70},[49,88242,399],{"emptyLinePlaceholder":398},[49,88244,88245,88247,88249],{"class":51,"line":219},[49,88246,1739],{"class":73},[49,88248,51865],{"class":51831},[49,88250,51838],{"class":73},[49,88252,88253,88255,88257,88259,88261,88263],{"class":51,"line":233},[49,88254,52675],{"class":73},[49,88256,51875],{"class":51831},[49,88258,51878],{"class":55},[49,88260,78],{"class":73},[49,88262,51883],{"class":59},[49,88264,51838],{"class":73},[49,88266,88267,88269,88271,88273,88275,88277,88279,88281,88283],{"class":51,"line":241},[49,88268,52675],{"class":73},[49,88270,51875],{"class":51831},[49,88272,15617],{"class":55},[49,88274,78],{"class":73},[49,88276,51922],{"class":59},[49,88278,51902],{"class":55},[49,88280,78],{"class":73},[49,88282,51929],{"class":59},[49,88284,51838],{"class":73},[49,88286,88287,88289,88291,88293,88295],{"class":51,"line":1920},[49,88288,52675],{"class":73},[49,88290,51938],{"class":51831},[49,88292,51941],{"class":73},[49,88294,51938],{"class":51831},[49,88296,51838],{"class":73},[49,88298,88299,88301,88303],{"class":51,"line":2011},[49,88300,52316],{"class":73},[49,88302,51865],{"class":51831},[49,88304,51838],{"class":73},[49,88306,88307],{"class":51,"line":2017},[49,88308,399],{"emptyLinePlaceholder":398},[49,88310,88311,88313,88315],{"class":51,"line":2029},[49,88312,1739],{"class":73},[49,88314,52331],{"class":51831},[49,88316,51838],{"class":73},[49,88318,88319,88321,88323],{"class":51,"line":2311},[49,88320,52675],{"class":73},[49,88322,52344],{"class":51831},[49,88324,51838],{"class":73},[49,88326,88327,88329,88331,88333],{"class":51,"line":2316},[49,88328,11918],{"class":77},[49,88330,70502],{"class":159},[49,88332,14261],{"class":77},[49,88334,16269],{"class":73},[49,88336,88337,88339,88342],{"class":51,"line":2322},[49,88338,72147],{"class":73},[49,88340,88341],{"class":59},"'pink'",[49,88343,31997],{"class":73},[49,88345,88346,88348,88350],{"class":51,"line":2327},[49,88347,72157],{"class":73},[49,88349,1479],{"class":159},[49,88351,31997],{"class":73},[49,88353,88354,88357,88360,88362,88365],{"class":51,"line":2341},[49,88355,88356],{"class":73},"      hobby: [",[49,88358,88359],{"class":59},"'乒乓球'",[49,88361,13132],{"class":73},[49,88363,88364],{"class":59},"'足球'",[49,88366,88367],{"class":73},"],\n",[49,88369,88370],{"class":51,"line":2346},[49,88371,78403],{"class":73},[49,88373,88374,88377],{"class":51,"line":2352},[49,88375,88376],{"class":73},"        baby: ",[49,88378,88379],{"class":59},"'小pink'\n",[49,88381,88382],{"class":51,"line":2373},[49,88383,52929],{"class":73},[49,88385,88386],{"class":51,"line":2378},[49,88387,2885],{"class":73},[49,88389,88390,88392,88395,88397],{"class":51,"line":2392},[49,88391,11918],{"class":77},[49,88393,88394],{"class":159}," o",[49,88396,14261],{"class":77},[49,88398,88399],{"class":73}," {}\n",[49,88401,88402],{"class":51,"line":2397},[49,88403,88404],{"class":66},"    \u002F\u002F 拷贝函数\n",[49,88406,88407,88409,88412,88414,88417,88419,88422],{"class":51,"line":2426},[49,88408,70615],{"class":77},[49,88410,88411],{"class":55}," deepCopy",[49,88413,841],{"class":73},[49,88415,88416],{"class":5913},"newObj",[49,88418,13132],{"class":73},[49,88420,88421],{"class":5913},"oldObj",[49,88423,13139],{"class":73},[49,88425,88426,88428,88430,88432,88435,88437],{"class":51,"line":2431},[49,88427,52815],{"class":77},[49,88429,2357],{"class":73},[49,88431,52378],{"class":77},[49,88433,88434],{"class":73}," k ",[49,88436,26732],{"class":77},[49,88438,88439],{"class":73}," oldObj) {\n",[49,88441,88442],{"class":51,"line":2448},[49,88443,88444],{"class":66},"        \u002F\u002F 处理数组的问题\n",[49,88446,88447],{"class":51,"line":2453},[49,88448,88449],{"class":66},"        \u002F\u002F 判断是否属于数组\n",[49,88451,88452],{"class":51,"line":2458},[49,88453,88454],{"class":66},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[49,88456,88457,88459,88462,88465,88468],{"class":51,"line":2463},[49,88458,3194],{"class":77},[49,88460,88461],{"class":73}," (oldObj[k] ",[49,88463,88464],{"class":77},"instanceof",[49,88466,88467],{"class":55}," Array",[49,88469,13139],{"class":73},[49,88471,88472],{"class":51,"line":2477},[49,88473,88474],{"class":66},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[49,88476,88477],{"class":51,"line":2482},[49,88478,88479],{"class":66},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[49,88481,88482,88485,88487],{"class":51,"line":3274},[49,88483,88484],{"class":73},"          newObj[k] ",[49,88486,78],{"class":77},[49,88488,52369],{"class":73},[49,88490,88491,88494],{"class":51,"line":3288},[49,88492,88493],{"class":55},"          deepCopy",[49,88495,88496],{"class":73},"(newObj[k], oldObj[k])\n",[49,88498,88499,88501,88503,88505,88507,88509,88512],{"class":51,"line":3296},[49,88500,80611],{"class":73},[49,88502,2400],{"class":77},[49,88504,2403],{"class":77},[49,88506,88461],{"class":73},[49,88508,88464],{"class":77},[49,88510,88511],{"class":55}," Object",[49,88513,13139],{"class":73},[49,88515,88516,88518,88520],{"class":51,"line":3301},[49,88517,88484],{"class":73},[49,88519,78],{"class":77},[49,88521,88399],{"class":73},[49,88523,88524,88526],{"class":51,"line":3307},[49,88525,88493],{"class":55},[49,88527,88496],{"class":73},[49,88529,88530,88532,88534],{"class":51,"line":3313},[49,88531,80611],{"class":73},[49,88533,2400],{"class":77},[49,88535,16269],{"class":73},[49,88537,88538],{"class":51,"line":3318},[49,88539,88540],{"class":66},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[49,88542,88543],{"class":51,"line":8645},[49,88544,88545],{"class":66},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[49,88547,88548,88550,88552],{"class":51,"line":8669},[49,88549,88484],{"class":73},[49,88551,78],{"class":77},[49,88553,88554],{"class":73}," oldObj[k]\n",[49,88556,88557],{"class":51,"line":8674},[49,88558,3226],{"class":73},[49,88560,88561],{"class":51,"line":8680},[49,88562,52929],{"class":73},[49,88564,88565],{"class":51,"line":8707},[49,88566,2885],{"class":73},[49,88568,88569,88572,88575],{"class":51,"line":8712},[49,88570,88571],{"class":55},"    deepCopy",[49,88573,88574],{"class":73},"(o, obj) ",[49,88576,88577],{"class":66},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[49,88579,88580,88582,88584],{"class":51,"line":8718},[49,88581,74284],{"class":73},[49,88583,58778],{"class":55},[49,88585,88586],{"class":73},"(o)\n",[49,88588,88589,88592,88594],{"class":51,"line":8730},[49,88590,88591],{"class":73},"    o.age ",[49,88593,78],{"class":77},[49,88595,88596],{"class":159}," 20\n",[49,88598,88599,88602,88604,88606,88608],{"class":51,"line":8742},[49,88600,88601],{"class":73},"    o.hobby[",[49,88603,1021],{"class":159},[49,88605,5140],{"class":73},[49,88607,78],{"class":77},[49,88609,88610],{"class":59}," '篮球'\n",[49,88612,88613,88616,88618],{"class":51,"line":8754},[49,88614,88615],{"class":73},"    o.family ",[49,88617,78],{"class":77},[49,88619,88620],{"class":59}," '老pink'\n",[49,88622,88623,88625,88627],{"class":51,"line":10413},[49,88624,74284],{"class":73},[49,88626,58778],{"class":55},[49,88628,70567],{"class":73},[49,88630,88631,88633,88635],{"class":51,"line":10438},[49,88632,52948],{"class":73},[49,88634,52344],{"class":51831},[49,88636,51838],{"class":73},[49,88638,88639,88641,88643],{"class":51,"line":10461},[49,88640,52316],{"class":73},[49,88642,52331],{"class":51831},[49,88644,51838],{"class":73},[49,88646,88647],{"class":51,"line":10485},[49,88648,399],{"emptyLinePlaceholder":398},[49,88650,88651,88653,88655],{"class":51,"line":10490},[49,88652,52316],{"class":73},[49,88654,51166],{"class":51831},[49,88656,51838],{"class":73},[14,88658,88659],{},[25,88660],{"alt":27,"src":88661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[130,88663,88665,88666],{"id":88664},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[112,88667,88668],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88670,88671],{},[124,88672,88673],{"href":88673,"rel":88674},"https:\u002F\u002Fwww.lodashjs.com\u002F",[128],[14,88676,88677],{},"lodash里边的方法都要加上一个下划线_",[14,88679,88680],{},"_.cloneDeep()",[40,88682,88684],{"className":51164,"code":88683,"language":51166,"meta":27,"style":27},"\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",[46,88685,88686,88696,88710,88714,88722,88736,88756,88768,88776,88780,88788,88793,88812,88820,88830,88838,88846,88858,88862,88868,88872,88876,88892,88900,88909,88917,88925,88933,88937],{"__ignoreMap":27},[49,88687,88688,88690,88692,88694],{"class":51,"line":52},[49,88689,51828],{"class":73},[49,88691,51832],{"class":51831},[49,88693,51835],{"class":55},[49,88695,51838],{"class":73},[49,88697,88698,88700,88702,88704,88706,88708],{"class":51,"line":63},[49,88699,1739],{"class":73},[49,88701,51166],{"class":51831},[49,88703,51847],{"class":55},[49,88705,78],{"class":73},[49,88707,51852],{"class":59},[49,88709,51838],{"class":73},[49,88711,88712],{"class":51,"line":70},[49,88713,399],{"emptyLinePlaceholder":398},[49,88715,88716,88718,88720],{"class":51,"line":219},[49,88717,1739],{"class":73},[49,88719,51865],{"class":51831},[49,88721,51838],{"class":73},[49,88723,88724,88726,88728,88730,88732,88734],{"class":51,"line":233},[49,88725,52675],{"class":73},[49,88727,51875],{"class":51831},[49,88729,51878],{"class":55},[49,88731,78],{"class":73},[49,88733,51883],{"class":59},[49,88735,51838],{"class":73},[49,88737,88738,88740,88742,88744,88746,88748,88750,88752,88754],{"class":51,"line":241},[49,88739,52675],{"class":73},[49,88741,51875],{"class":51831},[49,88743,15617],{"class":55},[49,88745,78],{"class":73},[49,88747,51922],{"class":59},[49,88749,51902],{"class":55},[49,88751,78],{"class":73},[49,88753,51929],{"class":59},[49,88755,51838],{"class":73},[49,88757,88758,88760,88762,88764,88766],{"class":51,"line":1920},[49,88759,52675],{"class":73},[49,88761,51938],{"class":51831},[49,88763,51941],{"class":73},[49,88765,51938],{"class":51831},[49,88767,51838],{"class":73},[49,88769,88770,88772,88774],{"class":51,"line":2011},[49,88771,52316],{"class":73},[49,88773,51865],{"class":51831},[49,88775,51838],{"class":73},[49,88777,88778],{"class":51,"line":2017},[49,88779,399],{"emptyLinePlaceholder":398},[49,88781,88782,88784,88786],{"class":51,"line":2029},[49,88783,1739],{"class":73},[49,88785,52331],{"class":51831},[49,88787,51838],{"class":73},[49,88789,88790],{"class":51,"line":2311},[49,88791,88792],{"class":66},"  \u003C!-- 先引用这个库 -->\n",[49,88794,88795,88797,88799,88801,88803,88806,88808,88810],{"class":51,"line":2316},[49,88796,52675],{"class":73},[49,88798,52344],{"class":51831},[49,88800,55770],{"class":55},[49,88802,78],{"class":73},[49,88804,88805],{"class":59},"\"lodash.min.js\"",[49,88807,55845],{"class":73},[49,88809,52344],{"class":51831},[49,88811,51838],{"class":73},[49,88813,88814,88816,88818],{"class":51,"line":2322},[49,88815,52675],{"class":73},[49,88817,52344],{"class":51831},[49,88819,51838],{"class":73},[49,88821,88822,88824,88826,88828],{"class":51,"line":2327},[49,88823,11918],{"class":77},[49,88825,70502],{"class":159},[49,88827,14261],{"class":77},[49,88829,16269],{"class":73},[49,88831,88832,88834,88836],{"class":51,"line":2341},[49,88833,72147],{"class":73},[49,88835,88341],{"class":59},[49,88837,31997],{"class":73},[49,88839,88840,88842,88844],{"class":51,"line":2346},[49,88841,72157],{"class":73},[49,88843,1479],{"class":159},[49,88845,31997],{"class":73},[49,88847,88848,88850,88852,88854,88856],{"class":51,"line":2352},[49,88849,88356],{"class":73},[49,88851,88359],{"class":59},[49,88853,13132],{"class":73},[49,88855,88364],{"class":59},[49,88857,88367],{"class":73},[49,88859,88860],{"class":51,"line":2373},[49,88861,78403],{"class":73},[49,88863,88864,88866],{"class":51,"line":2378},[49,88865,88376],{"class":73},[49,88867,88379],{"class":59},[49,88869,88870],{"class":51,"line":2392},[49,88871,52929],{"class":73},[49,88873,88874],{"class":51,"line":2397},[49,88875,2885],{"class":73},[49,88877,88878,88880,88882,88884,88887,88890],{"class":51,"line":2426},[49,88879,11918],{"class":77},[49,88881,88394],{"class":159},[49,88883,14261],{"class":77},[49,88885,88886],{"class":73}," _.",[49,88888,88889],{"class":55},"cloneDeep",[49,88891,70567],{"class":73},[49,88893,88894,88896,88898],{"class":51,"line":2431},[49,88895,74284],{"class":73},[49,88897,58778],{"class":55},[49,88899,88586],{"class":73},[49,88901,88902,88905,88907],{"class":51,"line":2448},[49,88903,88904],{"class":73},"    o.family.baby ",[49,88906,78],{"class":77},[49,88908,88620],{"class":59},[49,88910,88911,88913,88915],{"class":51,"line":2453},[49,88912,74284],{"class":73},[49,88914,58778],{"class":55},[49,88916,70567],{"class":73},[49,88918,88919,88921,88923],{"class":51,"line":2458},[49,88920,52948],{"class":73},[49,88922,52344],{"class":51831},[49,88924,51838],{"class":73},[49,88926,88927,88929,88931],{"class":51,"line":2463},[49,88928,52316],{"class":73},[49,88930,52331],{"class":51831},[49,88932,51838],{"class":73},[49,88934,88935],{"class":51,"line":2477},[49,88936,399],{"emptyLinePlaceholder":398},[49,88938,88939,88941,88943],{"class":51,"line":2482},[49,88940,52316],{"class":73},[49,88942,51166],{"class":51831},[49,88944,51838],{"class":73},[14,88946,88947],{},[25,88948],{"alt":27,"src":88949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[130,88951,88953],{"id":88952},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[40,88955,88957],{"className":51164,"code":88956,"language":51166,"meta":27,"style":27},"\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",[46,88958,88959,88969,88983,88987,88995,89009,89029,89041,89049,89053,89061,89069,89079,89087,89095,89107,89111,89117,89121,89125,89130,89135,89140,89166,89174,89183,89191,89199,89207,89211],{"__ignoreMap":27},[49,88960,88961,88963,88965,88967],{"class":51,"line":52},[49,88962,51828],{"class":73},[49,88964,51832],{"class":51831},[49,88966,51835],{"class":55},[49,88968,51838],{"class":73},[49,88970,88971,88973,88975,88977,88979,88981],{"class":51,"line":63},[49,88972,1739],{"class":73},[49,88974,51166],{"class":51831},[49,88976,51847],{"class":55},[49,88978,78],{"class":73},[49,88980,51852],{"class":59},[49,88982,51838],{"class":73},[49,88984,88985],{"class":51,"line":70},[49,88986,399],{"emptyLinePlaceholder":398},[49,88988,88989,88991,88993],{"class":51,"line":219},[49,88990,1739],{"class":73},[49,88992,51865],{"class":51831},[49,88994,51838],{"class":73},[49,88996,88997,88999,89001,89003,89005,89007],{"class":51,"line":233},[49,88998,52675],{"class":73},[49,89000,51875],{"class":51831},[49,89002,51878],{"class":55},[49,89004,78],{"class":73},[49,89006,51883],{"class":59},[49,89008,51838],{"class":73},[49,89010,89011,89013,89015,89017,89019,89021,89023,89025,89027],{"class":51,"line":241},[49,89012,52675],{"class":73},[49,89014,51875],{"class":51831},[49,89016,15617],{"class":55},[49,89018,78],{"class":73},[49,89020,51922],{"class":59},[49,89022,51902],{"class":55},[49,89024,78],{"class":73},[49,89026,51929],{"class":59},[49,89028,51838],{"class":73},[49,89030,89031,89033,89035,89037,89039],{"class":51,"line":1920},[49,89032,52675],{"class":73},[49,89034,51938],{"class":51831},[49,89036,51941],{"class":73},[49,89038,51938],{"class":51831},[49,89040,51838],{"class":73},[49,89042,89043,89045,89047],{"class":51,"line":2011},[49,89044,52316],{"class":73},[49,89046,51865],{"class":51831},[49,89048,51838],{"class":73},[49,89050,89051],{"class":51,"line":2017},[49,89052,399],{"emptyLinePlaceholder":398},[49,89054,89055,89057,89059],{"class":51,"line":2029},[49,89056,1739],{"class":73},[49,89058,52331],{"class":51831},[49,89060,51838],{"class":73},[49,89062,89063,89065,89067],{"class":51,"line":2311},[49,89064,52675],{"class":73},[49,89066,52344],{"class":51831},[49,89068,51838],{"class":73},[49,89070,89071,89073,89075,89077],{"class":51,"line":2316},[49,89072,11918],{"class":77},[49,89074,70502],{"class":159},[49,89076,14261],{"class":77},[49,89078,16269],{"class":73},[49,89080,89081,89083,89085],{"class":51,"line":2322},[49,89082,72147],{"class":73},[49,89084,88341],{"class":59},[49,89086,31997],{"class":73},[49,89088,89089,89091,89093],{"class":51,"line":2327},[49,89090,72157],{"class":73},[49,89092,1479],{"class":159},[49,89094,31997],{"class":73},[49,89096,89097,89099,89101,89103,89105],{"class":51,"line":2341},[49,89098,88356],{"class":73},[49,89100,88359],{"class":59},[49,89102,13132],{"class":73},[49,89104,88364],{"class":59},[49,89106,88367],{"class":73},[49,89108,89109],{"class":51,"line":2346},[49,89110,78403],{"class":73},[49,89112,89113,89115],{"class":51,"line":2352},[49,89114,88376],{"class":73},[49,89116,88379],{"class":59},[49,89118,89119],{"class":51,"line":2373},[49,89120,52929],{"class":73},[49,89122,89123],{"class":51,"line":2378},[49,89124,2885],{"class":73},[49,89126,89127],{"class":51,"line":2392},[49,89128,89129],{"class":66},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[49,89131,89132],{"class":51,"line":2397},[49,89133,89134],{"class":66},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[49,89136,89137],{"class":51,"line":2426},[49,89138,89139],{"class":66},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[49,89141,89142,89144,89146,89148,89151,89153,89156,89158,89160,89162,89164],{"class":51,"line":2431},[49,89143,11918],{"class":77},[49,89145,88394],{"class":159},[49,89147,14261],{"class":77},[49,89149,89150],{"class":159}," JSON",[49,89152,1387],{"class":73},[49,89154,89155],{"class":55},"parse",[49,89157,841],{"class":73},[49,89159,72195],{"class":159},[49,89161,1387],{"class":73},[49,89163,72200],{"class":55},[49,89165,72203],{"class":73},[49,89167,89168,89170,89172],{"class":51,"line":2448},[49,89169,74284],{"class":73},[49,89171,58778],{"class":55},[49,89173,88586],{"class":73},[49,89175,89176,89178,89180],{"class":51,"line":2453},[49,89177,88904],{"class":73},[49,89179,78],{"class":77},[49,89181,89182],{"class":59}," '123'\n",[49,89184,89185,89187,89189],{"class":51,"line":2458},[49,89186,74284],{"class":73},[49,89188,58778],{"class":55},[49,89190,70567],{"class":73},[49,89192,89193,89195,89197],{"class":51,"line":2463},[49,89194,52948],{"class":73},[49,89196,52344],{"class":51831},[49,89198,51838],{"class":73},[49,89200,89201,89203,89205],{"class":51,"line":2477},[49,89202,52316],{"class":73},[49,89204,52331],{"class":51831},[49,89206,51838],{"class":73},[49,89208,89209],{"class":51,"line":2482},[49,89210,399],{"emptyLinePlaceholder":398},[49,89212,89213,89215,89217],{"class":51,"line":3274},[49,89214,52316],{"class":73},[49,89216,51166],{"class":51831},[49,89218,51838],{"class":73},[14,89220,89221],{},[25,89222],{"alt":27,"src":89223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[782,89225,89227],{"id":89226},"_415-异常处理","4.15 异常处理",[30,89229,89230],{},[33,89231,89232],{},"throw抛异常",[14,89234,89235],{},[25,89236],{"alt":27,"src":89237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[30,89239,89240],{"start":63},[33,89241,89242],{},"try\u002Fcatch 捕获错误信息",[14,89244,89245],{},[25,89246],{"alt":27,"src":89247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[40,89249,89251],{"className":51164,"code":89250,"language":51166,"meta":27,"style":27},"\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",[46,89252,89253,89263,89277,89281,89289,89303,89323,89335,89343,89347,89355,89367,89375,89384,89391,89396,89415,89424,89435,89440,89450,89455,89460,89465,89482,89486,89491,89498,89510,89514,89526,89530,89534,89539,89544,89551,89559,89567,89571],{"__ignoreMap":27},[49,89254,89255,89257,89259,89261],{"class":51,"line":52},[49,89256,51828],{"class":73},[49,89258,51832],{"class":51831},[49,89260,51835],{"class":55},[49,89262,51838],{"class":73},[49,89264,89265,89267,89269,89271,89273,89275],{"class":51,"line":63},[49,89266,1739],{"class":73},[49,89268,51166],{"class":51831},[49,89270,51847],{"class":55},[49,89272,78],{"class":73},[49,89274,51852],{"class":59},[49,89276,51838],{"class":73},[49,89278,89279],{"class":51,"line":70},[49,89280,399],{"emptyLinePlaceholder":398},[49,89282,89283,89285,89287],{"class":51,"line":219},[49,89284,1739],{"class":73},[49,89286,51865],{"class":51831},[49,89288,51838],{"class":73},[49,89290,89291,89293,89295,89297,89299,89301],{"class":51,"line":233},[49,89292,52675],{"class":73},[49,89294,51875],{"class":51831},[49,89296,51878],{"class":55},[49,89298,78],{"class":73},[49,89300,51883],{"class":59},[49,89302,51838],{"class":73},[49,89304,89305,89307,89309,89311,89313,89315,89317,89319,89321],{"class":51,"line":241},[49,89306,52675],{"class":73},[49,89308,51875],{"class":51831},[49,89310,15617],{"class":55},[49,89312,78],{"class":73},[49,89314,51922],{"class":59},[49,89316,51902],{"class":55},[49,89318,78],{"class":73},[49,89320,51929],{"class":59},[49,89322,51838],{"class":73},[49,89324,89325,89327,89329,89331,89333],{"class":51,"line":1920},[49,89326,52675],{"class":73},[49,89328,51938],{"class":51831},[49,89330,51941],{"class":73},[49,89332,51938],{"class":51831},[49,89334,51838],{"class":73},[49,89336,89337,89339,89341],{"class":51,"line":2011},[49,89338,52316],{"class":73},[49,89340,51865],{"class":51831},[49,89342,51838],{"class":73},[49,89344,89345],{"class":51,"line":2017},[49,89346,399],{"emptyLinePlaceholder":398},[49,89348,89349,89351,89353],{"class":51,"line":2029},[49,89350,1739],{"class":73},[49,89352,52331],{"class":51831},[49,89354,51838],{"class":73},[49,89356,89357,89359,89361,89363,89365],{"class":51,"line":2311},[49,89358,52675],{"class":73},[49,89360,14],{"class":51831},[49,89362,54025],{"class":73},[49,89364,14],{"class":51831},[49,89366,51838],{"class":73},[49,89368,89369,89371,89373],{"class":51,"line":2316},[49,89370,52675],{"class":73},[49,89372,52344],{"class":51831},[49,89374,51838],{"class":73},[49,89376,89377,89379,89382],{"class":51,"line":2322},[49,89378,70615],{"class":77},[49,89380,89381],{"class":55}," fn",[49,89383,11550],{"class":73},[49,89385,89386,89389],{"class":51,"line":2327},[49,89387,89388],{"class":77},"      try",[49,89390,16269],{"class":73},[49,89392,89393],{"class":51,"line":2341},[49,89394,89395],{"class":66},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[49,89397,89398,89400,89402,89404,89406,89408,89410,89413],{"class":51,"line":2346},[49,89399,61801],{"class":77},[49,89401,7522],{"class":159},[49,89403,14261],{"class":77},[49,89405,54927],{"class":73},[49,89407,54930],{"class":55},[49,89409,841],{"class":73},[49,89411,89412],{"class":59},"'.p'",[49,89414,847],{"class":73},[49,89416,89417,89420,89422],{"class":51,"line":2352},[49,89418,89419],{"class":73},"        p.style.color ",[49,89421,78],{"class":77},[49,89423,67582],{"class":59},[49,89425,89426,89429,89432],{"class":51,"line":2373},[49,89427,89428],{"class":73},"      } ",[49,89430,89431],{"class":77},"catch",[49,89433,89434],{"class":73}," (err) {\n",[49,89436,89437],{"class":51,"line":2378},[49,89438,89439],{"class":66},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[49,89441,89442,89445,89447],{"class":51,"line":2392},[49,89443,89444],{"class":73},"        console.",[49,89446,58778],{"class":55},[49,89448,89449],{"class":73},"(err.message)\n",[49,89451,89452],{"class":51,"line":2397},[49,89453,89454],{"class":66},"        \u002F\u002F 想要中断程序，需要加return\n",[49,89456,89457],{"class":51,"line":2426},[49,89458,89459],{"class":66},"        \u002F\u002F return\n",[49,89461,89462],{"class":51,"line":2431},[49,89463,89464],{"class":66},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[49,89466,89467,89470,89472,89475,89477,89480],{"class":51,"line":2448},[49,89468,89469],{"class":77},"        throw",[49,89471,12275],{"class":77},[49,89473,89474],{"class":55}," Error",[49,89476,841],{"class":73},[49,89478,89479],{"class":59},"'你看看，选择器错误了吧'",[49,89481,847],{"class":73},[49,89483,89484],{"class":51,"line":2453},[49,89485,52929],{"class":73},[49,89487,89488],{"class":51,"line":2458},[49,89489,89490],{"class":66},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[49,89492,89493,89496],{"class":51,"line":2463},[49,89494,89495],{"class":77},"      finally",[49,89497,16269],{"class":73},[49,89499,89500,89503,89505,89508],{"class":51,"line":2477},[49,89501,89502],{"class":55},"        alert",[49,89504,841],{"class":73},[49,89506,89507],{"class":59},"'弹出对话框'",[49,89509,847],{"class":73},[49,89511,89512],{"class":51,"line":2482},[49,89513,52929],{"class":73},[49,89515,89516,89518,89520,89522,89524],{"class":51,"line":3274},[49,89517,58775],{"class":73},[49,89519,58778],{"class":55},[49,89521,841],{"class":73},[49,89523,1301],{"class":159},[49,89525,847],{"class":73},[49,89527,89528],{"class":51,"line":3288},[49,89529,399],{"emptyLinePlaceholder":398},[49,89531,89532],{"class":51,"line":3296},[49,89533,2885],{"class":73},[49,89535,89536],{"class":51,"line":3301},[49,89537,89538],{"class":66},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[49,89540,89541],{"class":51,"line":3307},[49,89542,89543],{"class":66},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[49,89545,89546,89549],{"class":51,"line":3313},[49,89547,89548],{"class":55},"    fn",[49,89550,2674],{"class":73},[49,89552,89553,89555,89557],{"class":51,"line":3318},[49,89554,52948],{"class":73},[49,89556,52344],{"class":51831},[49,89558,51838],{"class":73},[49,89560,89561,89563,89565],{"class":51,"line":8645},[49,89562,52316],{"class":73},[49,89564,52331],{"class":51831},[49,89566,51838],{"class":73},[49,89568,89569],{"class":51,"line":8669},[49,89570,399],{"emptyLinePlaceholder":398},[49,89572,89573,89575,89577],{"class":51,"line":8674},[49,89574,52316],{"class":73},[49,89576,51166],{"class":51831},[49,89578,51838],{"class":73},[14,89580,89581],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[30,89583,89584],{"start":70},[33,89585,89586],{},"debugger",[14,89588,89589],{},[25,89590],{"alt":27,"src":89591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89593,89594],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[782,89596,89598],{"id":89597},"_416-处理this","4.16 处理this",[18,89600,89602],{"id":89601},"_4161-this的指向","4.16.1 this的指向",[30,89604,89605],{},[33,89606,89607],{},"普通函数的this",[14,89609,89610],{},[25,89611],{"alt":27,"src":89612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[30,89614,89615],{"start":63},[33,89616,89617],{},"箭头函数的this",[14,89619,89620],{},[25,89621],{"alt":27,"src":89622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89624,89625],{},[25,89626],{"alt":27,"src":89627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89629,89630],{},[25,89631],{"alt":27,"src":89632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[18,89634,89636],{"id":89635},"_4162-this的改变","4.16.2 this的改变",[14,89638,89639],{},"call() apply() bind()",[30,89641,89642],{},[33,89643,89644],{},"call()",[14,89646,89647],{},[25,89648],{"alt":27,"src":89649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89651,89652],{},"两个作用：①调用函数；②改变this指向",[40,89654,89656],{"className":53598,"code":89655,"language":53600,"meta":27,"style":27},"\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",[46,89657,89658,89666,89674,89678,89683,89687,89692,89697,89702,89706,89711,89719],{"__ignoreMap":27},[49,89659,89660,89662,89664],{"class":51,"line":52},[49,89661,1739],{"class":73},[49,89663,52331],{"class":51831},[49,89665,51838],{"class":73},[49,89667,89668,89670,89672],{"class":51,"line":63},[49,89669,52675],{"class":73},[49,89671,52344],{"class":51831},[49,89673,51838],{"class":73},[49,89675,89676],{"class":51,"line":70},[49,89677,72054],{"class":73},[49,89679,89680],{"class":51,"line":219},[49,89681,89682],{"class":73},"      uname: 'pink'\n",[49,89684,89685],{"class":51,"line":233},[49,89686,2885],{"class":73},[49,89688,89689],{"class":51,"line":241},[49,89690,89691],{"class":73},"    function fn(x, y) {\n",[49,89693,89694],{"class":51,"line":1920},[49,89695,89696],{"class":73},"      console.log(this)  \u002F\u002Fwindow\n",[49,89698,89699],{"class":51,"line":2011},[49,89700,89701],{"class":73},"      console.log(x + y)\n",[49,89703,89704],{"class":51,"line":2017},[49,89705,2885],{"class":73},[49,89707,89708],{"class":51,"line":2029},[49,89709,89710],{"class":73},"    fn.call(obj, 1, 2)\n",[49,89712,89713,89715,89717],{"class":51,"line":2311},[49,89714,52948],{"class":73},[49,89716,52344],{"class":51831},[49,89718,51838],{"class":73},[49,89720,89721,89723,89725],{"class":51,"line":2316},[49,89722,52316],{"class":73},[49,89724,52331],{"class":51831},[49,89726,51838],{"class":73},[14,89728,89729],{},[25,89730],{"alt":27,"src":89731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[30,89733,89734],{"start":63},[33,89735,89736],{},"apply()",[14,89738,89739],{},[25,89740],{"alt":27,"src":89741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89743,89652],{},[14,89745,89746],{},"call传递的是普通参数，而apply必须传递的是数组",[40,89748,89750],{"className":51164,"code":89749,"language":51166,"meta":27,"style":27},"\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",[46,89751,89752,89762,89776,89780,89788,89802,89822,89834,89842,89846,89854,89862,89872,89879,89883,89888,89904,89916,89930,89934,89939,89958,89963,89967,89972,89977,89985,89990,90012,90017,90033,90049,90061,90065,90070,90089,90097,90105,90109],{"__ignoreMap":27},[49,89753,89754,89756,89758,89760],{"class":51,"line":52},[49,89755,51828],{"class":73},[49,89757,51832],{"class":51831},[49,89759,51835],{"class":55},[49,89761,51838],{"class":73},[49,89763,89764,89766,89768,89770,89772,89774],{"class":51,"line":63},[49,89765,1739],{"class":73},[49,89767,51166],{"class":51831},[49,89769,51847],{"class":55},[49,89771,78],{"class":73},[49,89773,51852],{"class":59},[49,89775,51838],{"class":73},[49,89777,89778],{"class":51,"line":70},[49,89779,399],{"emptyLinePlaceholder":398},[49,89781,89782,89784,89786],{"class":51,"line":219},[49,89783,1739],{"class":73},[49,89785,51865],{"class":51831},[49,89787,51838],{"class":73},[49,89789,89790,89792,89794,89796,89798,89800],{"class":51,"line":233},[49,89791,52675],{"class":73},[49,89793,51875],{"class":51831},[49,89795,51878],{"class":55},[49,89797,78],{"class":73},[49,89799,51883],{"class":59},[49,89801,51838],{"class":73},[49,89803,89804,89806,89808,89810,89812,89814,89816,89818,89820],{"class":51,"line":241},[49,89805,52675],{"class":73},[49,89807,51875],{"class":51831},[49,89809,15617],{"class":55},[49,89811,78],{"class":73},[49,89813,51922],{"class":59},[49,89815,51902],{"class":55},[49,89817,78],{"class":73},[49,89819,51929],{"class":59},[49,89821,51838],{"class":73},[49,89823,89824,89826,89828,89830,89832],{"class":51,"line":1920},[49,89825,52675],{"class":73},[49,89827,51938],{"class":51831},[49,89829,51941],{"class":73},[49,89831,51938],{"class":51831},[49,89833,51838],{"class":73},[49,89835,89836,89838,89840],{"class":51,"line":2011},[49,89837,52316],{"class":73},[49,89839,51865],{"class":51831},[49,89841,51838],{"class":73},[49,89843,89844],{"class":51,"line":2017},[49,89845,399],{"emptyLinePlaceholder":398},[49,89847,89848,89850,89852],{"class":51,"line":2029},[49,89849,1739],{"class":73},[49,89851,52331],{"class":51831},[49,89853,51838],{"class":73},[49,89855,89856,89858,89860],{"class":51,"line":2311},[49,89857,52675],{"class":73},[49,89859,52344],{"class":51831},[49,89861,51838],{"class":73},[49,89863,89864,89866,89868,89870],{"class":51,"line":2316},[49,89865,11918],{"class":77},[49,89867,70502],{"class":159},[49,89869,14261],{"class":77},[49,89871,16269],{"class":73},[49,89873,89874,89876],{"class":51,"line":2322},[49,89875,72157],{"class":73},[49,89877,89878],{"class":159},"18\n",[49,89880,89881],{"class":51,"line":2327},[49,89882,2885],{"class":73},[49,89884,89885],{"class":51,"line":2341},[49,89886,89887],{"class":66},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[49,89889,89890,89892,89894,89896,89898,89900,89902],{"class":51,"line":2346},[49,89891,70615],{"class":77},[49,89893,89381],{"class":55},[49,89895,841],{"class":73},[49,89897,1649],{"class":5913},[49,89899,13132],{"class":73},[49,89901,1674],{"class":5913},[49,89903,13139],{"class":73},[49,89905,89906,89908,89910,89912,89914],{"class":51,"line":2352},[49,89907,58775],{"class":73},[49,89909,58778],{"class":55},[49,89911,841],{"class":73},[49,89913,87524],{"class":159},[49,89915,847],{"class":73},[49,89917,89918,89920,89922,89925,89927],{"class":51,"line":2373},[49,89919,58775],{"class":73},[49,89921,58778],{"class":55},[49,89923,89924],{"class":73},"(x ",[49,89926,1310],{"class":77},[49,89928,89929],{"class":73}," y)\n",[49,89931,89932],{"class":51,"line":2378},[49,89933,2885],{"class":73},[49,89935,89936],{"class":51,"line":2392},[49,89937,89938],{"class":66},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[49,89940,89941,89944,89947,89950,89952,89954,89956],{"class":51,"line":2397},[49,89942,89943],{"class":73},"    fn.",[49,89945,89946],{"class":55},"apply",[49,89948,89949],{"class":73},"(obj, [",[49,89951,1047],{"class":159},[49,89953,13132],{"class":73},[49,89955,915],{"class":159},[49,89957,5354],{"class":73},[49,89959,89960],{"class":51,"line":2426},[49,89961,89962],{"class":66},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[49,89964,89965],{"class":51,"line":2431},[49,89966,399],{"emptyLinePlaceholder":398},[49,89968,89969],{"class":51,"line":2448},[49,89970,89971],{"class":66},"    \u002F\u002F 使用场景：求数组最大值\n",[49,89973,89974],{"class":51,"line":2453},[49,89975,89976],{"class":66},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[49,89978,89979,89982],{"class":51,"line":2458},[49,89980,89981],{"class":66},"    \u002F\u002F console.log(max)",[49,89983,89984],{"class":66},"   \u002F\u002F3\n",[49,89986,89987],{"class":51,"line":2463},[49,89988,89989],{"class":66},"    \u002F\u002F 指向空或者Math都是可以的\n",[49,89991,89992,89994,89996,89998,90000,90002,90004,90006,90008,90010],{"class":51,"line":2477},[49,89993,11918],{"class":77},[49,89995,58226],{"class":159},[49,89997,14261],{"class":77},[49,89999,52757],{"class":73},[49,90001,1140],{"class":159},[49,90003,13132],{"class":73},[49,90005,1333],{"class":159},[49,90007,13132],{"class":73},[49,90009,1364],{"class":159},[49,90011,33777],{"class":73},[49,90013,90014],{"class":51,"line":2482},[49,90015,90016],{"class":66},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[49,90018,90019,90021,90023,90025,90028,90030],{"class":51,"line":3274},[49,90020,11918],{"class":77},[49,90022,6648],{"class":159},[49,90024,14261],{"class":77},[49,90026,90027],{"class":73}," Math.max.",[49,90029,89946],{"class":55},[49,90031,90032],{"class":73},"(Math, arr)\n",[49,90034,90035,90037,90040,90042,90045,90047],{"class":51,"line":3288},[49,90036,11918],{"class":77},[49,90038,90039],{"class":159}," min",[49,90041,14261],{"class":77},[49,90043,90044],{"class":73}," Math.min.",[49,90046,89946],{"class":55},[49,90048,90032],{"class":73},[49,90050,90051,90053,90055,90058],{"class":51,"line":3296},[49,90052,74284],{"class":73},[49,90054,58778],{"class":55},[49,90056,90057],{"class":73},"(max, min)     ",[49,90059,90060],{"class":66},"\u002F\u002F100,4\n",[49,90062,90063],{"class":51,"line":3301},[49,90064,399],{"emptyLinePlaceholder":398},[49,90066,90067],{"class":51,"line":3307},[49,90068,90069],{"class":66},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[49,90071,90072,90074,90076,90079,90081,90083,90086],{"class":51,"line":3313},[49,90073,74284],{"class":73},[49,90075,58778],{"class":55},[49,90077,90078],{"class":73},"(Max.",[49,90080,6712],{"class":55},[49,90082,841],{"class":73},[49,90084,90085],{"class":77},"...",[49,90087,90088],{"class":73},"arr))\n",[49,90090,90091,90093,90095],{"class":51,"line":3318},[49,90092,52948],{"class":73},[49,90094,52344],{"class":51831},[49,90096,51838],{"class":73},[49,90098,90099,90101,90103],{"class":51,"line":8645},[49,90100,52316],{"class":73},[49,90102,52331],{"class":51831},[49,90104,51838],{"class":73},[49,90106,90107],{"class":51,"line":8669},[49,90108,399],{"emptyLinePlaceholder":398},[49,90110,90111,90113,90115],{"class":51,"line":8674},[49,90112,52316],{"class":73},[49,90114,51166],{"class":51831},[49,90116,51838],{"class":73},[14,90118,90119],{},[25,90120],{"alt":27,"src":90121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[30,90123,90124],{"start":70},[33,90125,90126],{},"bind()",[14,90128,90129],{},[25,90130],{"alt":27,"src":90131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,90133,90134],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,90136,90137],{},"bind的语法跟call很相似",[40,90139,90141],{"className":53598,"code":90140,"language":53600,"meta":27,"style":27},"\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",[46,90142,90143,90151,90159,90163,90168,90172,90176,90181,90185,90190,90195,90200,90205,90210,90215,90220,90224,90232],{"__ignoreMap":27},[49,90144,90145,90147,90149],{"class":51,"line":52},[49,90146,1739],{"class":73},[49,90148,52331],{"class":51831},[49,90150,51838],{"class":73},[49,90152,90153,90155,90157],{"class":51,"line":63},[49,90154,52675],{"class":73},[49,90156,52344],{"class":51831},[49,90158,51838],{"class":73},[49,90160,90161],{"class":51,"line":70},[49,90162,72054],{"class":73},[49,90164,90165],{"class":51,"line":219},[49,90166,90167],{"class":73},"      age: 18\n",[49,90169,90170],{"class":51,"line":233},[49,90171,2885],{"class":73},[49,90173,90174],{"class":51,"line":241},[49,90175,77674],{"class":73},[49,90177,90178],{"class":51,"line":1920},[49,90179,90180],{"class":73},"      console.log(this)\n",[49,90182,90183],{"class":51,"line":2011},[49,90184,2885],{"class":73},[49,90186,90187],{"class":51,"line":2017},[49,90188,90189],{"class":73},"    \u002F\u002F 1.bind 不会调用函数\n",[49,90191,90192],{"class":51,"line":2029},[49,90193,90194],{"class":73},"    \u002F\u002F 2.bind能改变this的指向\n",[49,90196,90197],{"class":51,"line":2311},[49,90198,90199],{"class":73},"    fn.bind()\n",[49,90201,90202],{"class":51,"line":2316},[49,90203,90204],{"class":73},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[49,90206,90207],{"class":51,"line":2322},[49,90208,90209],{"class":73},"    const fun = fn.bind(obj)\n",[49,90211,90212],{"class":51,"line":2327},[49,90213,90214],{"class":73},"    \u002F\u002F console.log(fun)\n",[49,90216,90217],{"class":51,"line":2341},[49,90218,90219],{"class":73},"    \u002F\u002F 调用,查看this的指向\n",[49,90221,90222],{"class":51,"line":2346},[49,90223,53182],{"class":73},[49,90225,90226,90228,90230],{"class":51,"line":2352},[49,90227,52948],{"class":73},[49,90229,52344],{"class":51831},[49,90231,51838],{"class":73},[49,90233,90234,90236,90238],{"class":51,"line":2373},[49,90235,52316],{"class":73},[49,90237,52331],{"class":51831},[49,90239,51838],{"class":73},[14,90241,90242],{},[25,90243],{"alt":27,"src":90244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[30,90246,90247],{"start":219},[33,90248,90249],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[40,90251,90253],{"className":53598,"code":90252,"language":53600,"meta":27,"style":27},"\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",[46,90254,90255,90263,90276,90284,90289,90293,90298,90303,90308,90313,90318,90323,90328,90333,90337,90345],{"__ignoreMap":27},[49,90256,90257,90259,90261],{"class":51,"line":52},[49,90258,1739],{"class":73},[49,90260,52331],{"class":51831},[49,90262,51838],{"class":73},[49,90264,90265,90267,90269,90272,90274],{"class":51,"line":63},[49,90266,52675],{"class":73},[49,90268,54418],{"class":51831},[49,90270,90271],{"class":73},">禁用\u003C\u002F",[49,90273,54418],{"class":51831},[49,90275,51838],{"class":73},[49,90277,90278,90280,90282],{"class":51,"line":70},[49,90279,52675],{"class":73},[49,90281,52344],{"class":51831},[49,90283,51838],{"class":73},[49,90285,90286],{"class":51,"line":219},[49,90287,90288],{"class":73},"    const btn = document.querySelector('button')\n",[49,90290,90291],{"class":51,"line":233},[49,90292,59547],{"class":73},[49,90294,90295],{"class":51,"line":241},[49,90296,90297],{"class":73},"      this.disabled = true\n",[49,90299,90300],{"class":51,"line":1920},[49,90301,90302],{"class":73},"      \u002F\u002F 定时器是window进行调用的\n",[49,90304,90305],{"class":51,"line":2011},[49,90306,90307],{"class":73},"      setTimeout(function () {\n",[49,90309,90310],{"class":51,"line":2017},[49,90311,90312],{"class":73},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[49,90314,90315],{"class":51,"line":2029},[49,90316,90317],{"class":73},"        this.disabled = false\n",[49,90319,90320],{"class":51,"line":2311},[49,90321,90322],{"class":73},"      }.bind(this), 2000)\n",[49,90324,90325],{"class":51,"line":2316},[49,90326,90327],{"class":73},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[49,90329,90330],{"class":51,"line":2322},[49,90331,90332],{"class":73},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[49,90334,90335],{"class":51,"line":2327},[49,90336,33992],{"class":73},[49,90338,90339,90341,90343],{"class":51,"line":2341},[49,90340,52948],{"class":73},[49,90342,52344],{"class":51831},[49,90344,51838],{"class":73},[49,90346,90347,90349,90351],{"class":51,"line":2346},[49,90348,52316],{"class":73},[49,90350,52331],{"class":51831},[49,90352,51838],{"class":73},[30,90354,90355],{"start":233},[33,90356,22650],{},[14,90358,90359],{},[25,90360],{"alt":27,"src":90361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[782,90363,90365],{"id":90364},"_417-性能优化","4.17 性能优化",[18,90367,90369],{"id":90368},"_4171-防抖","4.17.1 防抖",[14,90371,90372],{},[25,90373],{"alt":27,"src":90374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,90376,90377],{},[112,90378,90379],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,90381,90382],{},"防抖实现方式：",[742,90384,90385],{},[33,90386,90387],{},"lodash 提供了防抖处理",[14,90389,90390],{},"_.debounce(func,[wait=0],[options={}])",[14,90392,90393],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[40,90395,90397],{"className":51164,"code":90396,"language":51166,"meta":27,"style":27},"\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",[46,90398,90399,90409,90423,90427,90435,90449,90469,90481,90489,90495,90505,90517,90529,90540,90552,90562,90572,90585,90589,90597,90605,90609,90617,90635,90653,90661,90680,90690,90699,90710,90715,90719,90724,90729,90734,90759,90767,90775,90779],{"__ignoreMap":27},[49,90400,90401,90403,90405,90407],{"class":51,"line":52},[49,90402,51828],{"class":73},[49,90404,51832],{"class":51831},[49,90406,51835],{"class":55},[49,90408,51838],{"class":73},[49,90410,90411,90413,90415,90417,90419,90421],{"class":51,"line":63},[49,90412,1739],{"class":73},[49,90414,51166],{"class":51831},[49,90416,51847],{"class":55},[49,90418,78],{"class":73},[49,90420,51852],{"class":59},[49,90422,51838],{"class":73},[49,90424,90425],{"class":51,"line":70},[49,90426,399],{"emptyLinePlaceholder":398},[49,90428,90429,90431,90433],{"class":51,"line":219},[49,90430,1739],{"class":73},[49,90432,51865],{"class":51831},[49,90434,51838],{"class":73},[49,90436,90437,90439,90441,90443,90445,90447],{"class":51,"line":233},[49,90438,52675],{"class":73},[49,90440,51875],{"class":51831},[49,90442,51878],{"class":55},[49,90444,78],{"class":73},[49,90446,51883],{"class":59},[49,90448,51838],{"class":73},[49,90450,90451,90453,90455,90457,90459,90461,90463,90465,90467],{"class":51,"line":241},[49,90452,52675],{"class":73},[49,90454,51875],{"class":51831},[49,90456,15617],{"class":55},[49,90458,78],{"class":73},[49,90460,51922],{"class":59},[49,90462,51902],{"class":55},[49,90464,78],{"class":73},[49,90466,51929],{"class":59},[49,90468,51838],{"class":73},[49,90470,90471,90473,90475,90477,90479],{"class":51,"line":1920},[49,90472,52675],{"class":73},[49,90474,51938],{"class":51831},[49,90476,51941],{"class":73},[49,90478,51938],{"class":51831},[49,90480,51838],{"class":73},[49,90482,90483,90485,90487],{"class":51,"line":2011},[49,90484,52675],{"class":73},[49,90486,757],{"class":51831},[49,90488,51838],{"class":73},[49,90490,90491,90493],{"class":51,"line":2017},[49,90492,55283],{"class":55},[49,90494,16269],{"class":73},[49,90496,90497,90499,90501,90503],{"class":51,"line":2029},[49,90498,73127],{"class":159},[49,90500,51968],{"class":73},[49,90502,61036],{"class":159},[49,90504,1990],{"class":73},[49,90506,90507,90509,90511,90513,90515],{"class":51,"line":2311},[49,90508,55302],{"class":159},[49,90510,51968],{"class":73},[49,90512,2421],{"class":159},[49,90514,52023],{"class":77},[49,90516,1990],{"class":73},[49,90518,90519,90521,90523,90525,90527],{"class":51,"line":2316},[49,90520,55316],{"class":159},[49,90522,51968],{"class":73},[49,90524,2421],{"class":159},[49,90526,52023],{"class":77},[49,90528,1990],{"class":73},[49,90530,90531,90533,90535,90538],{"class":51,"line":2322},[49,90532,55415],{"class":159},[49,90534,51968],{"class":73},[49,90536,90537],{"class":159},"gray",[49,90539,1990],{"class":73},[49,90541,90542,90544,90546,90548,90550],{"class":51,"line":2327},[49,90543,55453],{"class":159},[49,90545,51968],{"class":73},[49,90547,1654],{"class":159},[49,90549,52023],{"class":77},[49,90551,1990],{"class":73},[49,90553,90554,90556,90558,90560],{"class":51,"line":2341},[49,90555,57947],{"class":159},[49,90557,51968],{"class":73},[49,90559,61373],{"class":159},[49,90561,1990],{"class":73},[49,90563,90564,90566,90568,90570],{"class":51,"line":2346},[49,90565,57817],{"class":159},[49,90567,51968],{"class":73},[49,90569,52123],{"class":159},[49,90571,1990],{"class":73},[49,90573,90574,90577,90579,90581,90583],{"class":51,"line":2352},[49,90575,90576],{"class":159},"      padding-top",[49,90578,51968],{"class":73},[49,90580,1148],{"class":159},[49,90582,52023],{"class":77},[49,90584,1990],{"class":73},[49,90586,90587],{"class":51,"line":2373},[49,90588,2885],{"class":73},[49,90590,90591,90593,90595],{"class":51,"line":2378},[49,90592,52948],{"class":73},[49,90594,757],{"class":51831},[49,90596,51838],{"class":73},[49,90598,90599,90601,90603],{"class":51,"line":2392},[49,90600,52316],{"class":73},[49,90602,51865],{"class":51831},[49,90604,51838],{"class":73},[49,90606,90607],{"class":51,"line":2397},[49,90608,399],{"emptyLinePlaceholder":398},[49,90610,90611,90613,90615],{"class":51,"line":2426},[49,90612,1739],{"class":73},[49,90614,52331],{"class":51831},[49,90616,51838],{"class":73},[49,90618,90619,90621,90623,90625,90627,90629,90631,90633],{"class":51,"line":2431},[49,90620,52675],{"class":73},[49,90622,52142],{"class":51831},[49,90624,54017],{"class":55},[49,90626,78],{"class":73},[49,90628,54022],{"class":59},[49,90630,55845],{"class":73},[49,90632,52142],{"class":51831},[49,90634,51838],{"class":73},[49,90636,90637,90639,90641,90643,90645,90647,90649,90651],{"class":51,"line":2448},[49,90638,52675],{"class":73},[49,90640,52344],{"class":51831},[49,90642,55770],{"class":55},[49,90644,78],{"class":73},[49,90646,88805],{"class":59},[49,90648,55845],{"class":73},[49,90650,52344],{"class":51831},[49,90652,51838],{"class":73},[49,90654,90655,90657,90659],{"class":51,"line":2453},[49,90656,52675],{"class":73},[49,90658,52344],{"class":51831},[49,90660,51838],{"class":73},[49,90662,90663,90665,90667,90669,90671,90673,90675,90678],{"class":51,"line":2458},[49,90664,11918],{"class":77},[49,90666,87464],{"class":159},[49,90668,14261],{"class":77},[49,90670,54927],{"class":73},[49,90672,54930],{"class":55},[49,90674,841],{"class":73},[49,90676,90677],{"class":59},"'.box'",[49,90679,847],{"class":73},[49,90681,90682,90684,90686,90688],{"class":51,"line":2463},[49,90683,52750],{"class":77},[49,90685,10135],{"class":73},[49,90687,78],{"class":77},[49,90689,47864],{"class":159},[49,90691,90692,90694,90697],{"class":51,"line":2477},[49,90693,70615],{"class":77},[49,90695,90696],{"class":55}," mouseMove",[49,90698,11550],{"class":73},[49,90700,90701,90704,90706,90708],{"class":51,"line":2482},[49,90702,90703],{"class":73},"      box.innerHTML ",[49,90705,78],{"class":77},[49,90707,3729],{"class":73},[49,90709,3399],{"class":77},[49,90711,90712],{"class":51,"line":3274},[49,90713,90714],{"class":66},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[49,90716,90717],{"class":51,"line":3288},[49,90718,2885],{"class":73},[49,90720,90721],{"class":51,"line":3296},[49,90722,90723],{"class":66},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[49,90725,90726],{"class":51,"line":3301},[49,90727,90728],{"class":66},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[49,90730,90731],{"class":51,"line":3307},[49,90732,90733],{"class":66},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[49,90735,90736,90739,90741,90743,90746,90749,90752,90755,90757],{"class":51,"line":3313},[49,90737,90738],{"class":73},"    box.",[49,90740,58344],{"class":55},[49,90742,841],{"class":73},[49,90744,90745],{"class":59},"'mousemove'",[49,90747,90748],{"class":73},", _.",[49,90750,90751],{"class":55},"debounce",[49,90753,90754],{"class":73},"(mouseMove, ",[49,90756,65605],{"class":159},[49,90758,31028],{"class":73},[49,90760,90761,90763,90765],{"class":51,"line":3318},[49,90762,52948],{"class":73},[49,90764,52344],{"class":51831},[49,90766,51838],{"class":73},[49,90768,90769,90771,90773],{"class":51,"line":8645},[49,90770,52316],{"class":73},[49,90772,52331],{"class":51831},[49,90774,51838],{"class":73},[49,90776,90777],{"class":51,"line":8669},[49,90778,399],{"emptyLinePlaceholder":398},[49,90780,90781,90783,90785],{"class":51,"line":8674},[49,90782,52316],{"class":73},[49,90784,51166],{"class":51831},[49,90786,51838],{"class":73},[742,90788,90789],{},[33,90790,90791],{},"手写一个防抖函数来处理",[14,90793,90794],{},"防抖的核心就是利用定时器来实现的：",[14,90796,90797],{},"①声明一个定时器变量",[14,90799,90800],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90802,90803],{},"③如果没有定时器则开启定时器，记得存到变量里面",[40,90805,90807],{"className":51164,"code":90806,"language":51166,"meta":27,"style":27},"\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",[46,90808,90809,90819,90833,90837,90845,90859,90879,90891,90899,90905,90915,90927,90939,90949,90961,90971,90981,90993,90997,91005,91013,91017,91025,91043,91061,91069,91087,91097,91105,91115,91119,91123,91127,91132,91137,91142,91147,91152,91157,91175,91182,91187,91195,91200,91213,91229,91239,91244,91248,91252,91272,91276,91281,91286,91291,91296,91304,91312,91316],{"__ignoreMap":27},[49,90810,90811,90813,90815,90817],{"class":51,"line":52},[49,90812,51828],{"class":73},[49,90814,51832],{"class":51831},[49,90816,51835],{"class":55},[49,90818,51838],{"class":73},[49,90820,90821,90823,90825,90827,90829,90831],{"class":51,"line":63},[49,90822,1739],{"class":73},[49,90824,51166],{"class":51831},[49,90826,51847],{"class":55},[49,90828,78],{"class":73},[49,90830,51852],{"class":59},[49,90832,51838],{"class":73},[49,90834,90835],{"class":51,"line":70},[49,90836,399],{"emptyLinePlaceholder":398},[49,90838,90839,90841,90843],{"class":51,"line":219},[49,90840,1739],{"class":73},[49,90842,51865],{"class":51831},[49,90844,51838],{"class":73},[49,90846,90847,90849,90851,90853,90855,90857],{"class":51,"line":233},[49,90848,52675],{"class":73},[49,90850,51875],{"class":51831},[49,90852,51878],{"class":55},[49,90854,78],{"class":73},[49,90856,51883],{"class":59},[49,90858,51838],{"class":73},[49,90860,90861,90863,90865,90867,90869,90871,90873,90875,90877],{"class":51,"line":241},[49,90862,52675],{"class":73},[49,90864,51875],{"class":51831},[49,90866,15617],{"class":55},[49,90868,78],{"class":73},[49,90870,51922],{"class":59},[49,90872,51902],{"class":55},[49,90874,78],{"class":73},[49,90876,51929],{"class":59},[49,90878,51838],{"class":73},[49,90880,90881,90883,90885,90887,90889],{"class":51,"line":1920},[49,90882,52675],{"class":73},[49,90884,51938],{"class":51831},[49,90886,51941],{"class":73},[49,90888,51938],{"class":51831},[49,90890,51838],{"class":73},[49,90892,90893,90895,90897],{"class":51,"line":2011},[49,90894,52675],{"class":73},[49,90896,757],{"class":51831},[49,90898,51838],{"class":73},[49,90900,90901,90903],{"class":51,"line":2017},[49,90902,55283],{"class":55},[49,90904,16269],{"class":73},[49,90906,90907,90909,90911,90913],{"class":51,"line":2029},[49,90908,73127],{"class":159},[49,90910,51968],{"class":73},[49,90912,61036],{"class":159},[49,90914,1990],{"class":73},[49,90916,90917,90919,90921,90923,90925],{"class":51,"line":2311},[49,90918,55302],{"class":159},[49,90920,51968],{"class":73},[49,90922,2421],{"class":159},[49,90924,52023],{"class":77},[49,90926,1990],{"class":73},[49,90928,90929,90931,90933,90935,90937],{"class":51,"line":2316},[49,90930,55316],{"class":159},[49,90932,51968],{"class":73},[49,90934,2421],{"class":159},[49,90936,52023],{"class":77},[49,90938,1990],{"class":73},[49,90940,90941,90943,90945,90947],{"class":51,"line":2322},[49,90942,55415],{"class":159},[49,90944,51968],{"class":73},[49,90946,90537],{"class":159},[49,90948,1990],{"class":73},[49,90950,90951,90953,90955,90957,90959],{"class":51,"line":2327},[49,90952,55453],{"class":159},[49,90954,51968],{"class":73},[49,90956,1654],{"class":159},[49,90958,52023],{"class":77},[49,90960,1990],{"class":73},[49,90962,90963,90965,90967,90969],{"class":51,"line":2341},[49,90964,57947],{"class":159},[49,90966,51968],{"class":73},[49,90968,61373],{"class":159},[49,90970,1990],{"class":73},[49,90972,90973,90975,90977,90979],{"class":51,"line":2346},[49,90974,57817],{"class":159},[49,90976,51968],{"class":73},[49,90978,52123],{"class":159},[49,90980,1990],{"class":73},[49,90982,90983,90985,90987,90989,90991],{"class":51,"line":2352},[49,90984,90576],{"class":159},[49,90986,51968],{"class":73},[49,90988,1148],{"class":159},[49,90990,52023],{"class":77},[49,90992,1990],{"class":73},[49,90994,90995],{"class":51,"line":2373},[49,90996,2885],{"class":73},[49,90998,90999,91001,91003],{"class":51,"line":2378},[49,91000,52948],{"class":73},[49,91002,757],{"class":51831},[49,91004,51838],{"class":73},[49,91006,91007,91009,91011],{"class":51,"line":2392},[49,91008,52316],{"class":73},[49,91010,51865],{"class":51831},[49,91012,51838],{"class":73},[49,91014,91015],{"class":51,"line":2397},[49,91016,399],{"emptyLinePlaceholder":398},[49,91018,91019,91021,91023],{"class":51,"line":2426},[49,91020,1739],{"class":73},[49,91022,52331],{"class":51831},[49,91024,51838],{"class":73},[49,91026,91027,91029,91031,91033,91035,91037,91039,91041],{"class":51,"line":2431},[49,91028,52675],{"class":73},[49,91030,52142],{"class":51831},[49,91032,54017],{"class":55},[49,91034,78],{"class":73},[49,91036,54022],{"class":59},[49,91038,55845],{"class":73},[49,91040,52142],{"class":51831},[49,91042,51838],{"class":73},[49,91044,91045,91047,91049,91051,91053,91055,91057,91059],{"class":51,"line":2448},[49,91046,52675],{"class":73},[49,91048,52344],{"class":51831},[49,91050,55770],{"class":55},[49,91052,78],{"class":73},[49,91054,88805],{"class":59},[49,91056,55845],{"class":73},[49,91058,52344],{"class":51831},[49,91060,51838],{"class":73},[49,91062,91063,91065,91067],{"class":51,"line":2453},[49,91064,52675],{"class":73},[49,91066,52344],{"class":51831},[49,91068,51838],{"class":73},[49,91070,91071,91073,91075,91077,91079,91081,91083,91085],{"class":51,"line":2458},[49,91072,11918],{"class":77},[49,91074,87464],{"class":159},[49,91076,14261],{"class":77},[49,91078,54927],{"class":73},[49,91080,54930],{"class":55},[49,91082,841],{"class":73},[49,91084,90677],{"class":59},[49,91086,847],{"class":73},[49,91088,91089,91091,91093,91095],{"class":51,"line":2463},[49,91090,52750],{"class":77},[49,91092,10135],{"class":73},[49,91094,78],{"class":77},[49,91096,47864],{"class":159},[49,91098,91099,91101,91103],{"class":51,"line":2477},[49,91100,70615],{"class":77},[49,91102,90696],{"class":55},[49,91104,11550],{"class":73},[49,91106,91107,91109,91111,91113],{"class":51,"line":2482},[49,91108,90703],{"class":73},[49,91110,78],{"class":77},[49,91112,3729],{"class":73},[49,91114,3399],{"class":77},[49,91116,91117],{"class":51,"line":3274},[49,91118,90714],{"class":66},[49,91120,91121],{"class":51,"line":3288},[49,91122,2885],{"class":73},[49,91124,91125],{"class":51,"line":3296},[49,91126,90723],{"class":66},[49,91128,91129],{"class":51,"line":3301},[49,91130,91131],{"class":66},"    \u002F\u002F 手写防抖函数\n",[49,91133,91134],{"class":51,"line":3307},[49,91135,91136],{"class":66},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[49,91138,91139],{"class":51,"line":3313},[49,91140,91141],{"class":66},"    \u002F\u002F 1.声明定时器变量\n",[49,91143,91144],{"class":51,"line":3318},[49,91145,91146],{"class":66},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[49,91148,91149],{"class":51,"line":8645},[49,91150,91151],{"class":66},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[49,91153,91154],{"class":51,"line":8669},[49,91155,91156],{"class":66},"    \u002F\u002F 4.定时器里面写函数调用\n",[49,91158,91159,91161,91164,91166,91169,91171,91173],{"class":51,"line":8674},[49,91160,70615],{"class":77},[49,91162,91163],{"class":55}," debounce",[49,91165,841],{"class":73},[49,91167,91168],{"class":5913},"fn",[49,91170,13132],{"class":73},[49,91172,1549],{"class":5913},[49,91174,13139],{"class":73},[49,91176,91177,91179],{"class":51,"line":8680},[49,91178,80303],{"class":77},[49,91180,91181],{"class":73}," timer\n",[49,91183,91184],{"class":51,"line":8707},[49,91185,91186],{"class":66},"      \u002F\u002F return 返回一个匿名函数\n",[49,91188,91189,91191,91193],{"class":51,"line":8712},[49,91190,74513],{"class":77},[49,91192,59449],{"class":77},[49,91194,54983],{"class":73},[49,91196,91197],{"class":51,"line":8718},[49,91198,91199],{"class":66},"        \u002F\u002F 这里边写第二三四步\n",[49,91201,91202,91204,91207,91210],{"class":51,"line":8730},[49,91203,3194],{"class":77},[49,91205,91206],{"class":73}," (timer) ",[49,91208,91209],{"class":55},"clearTimeout",[49,91211,91212],{"class":73},"(timer)\n",[49,91214,91215,91218,91220,91223,91225,91227],{"class":51,"line":8742},[49,91216,91217],{"class":73},"        timer ",[49,91219,78],{"class":77},[49,91221,91222],{"class":55}," setTimeout",[49,91224,841],{"class":73},[49,91226,54980],{"class":77},[49,91228,54983],{"class":73},[49,91230,91231,91234,91236],{"class":51,"line":8754},[49,91232,91233],{"class":55},"          fn",[49,91235,13747],{"class":73},[49,91237,91238],{"class":66},"\u002F\u002F加小括号调用fn }, t)\n",[49,91240,91241],{"class":51,"line":10413},[49,91242,91243],{"class":73},"        }, t)\n",[49,91245,91246],{"class":51,"line":10438},[49,91247,52929],{"class":73},[49,91249,91250],{"class":51,"line":10461},[49,91251,2885],{"class":73},[49,91253,91254,91256,91258,91260,91262,91264,91266,91268,91270],{"class":51,"line":10485},[49,91255,90738],{"class":73},[49,91257,58344],{"class":55},[49,91259,841],{"class":73},[49,91261,90745],{"class":59},[49,91263,13132],{"class":73},[49,91265,90751],{"class":55},[49,91267,90754],{"class":73},[49,91269,65605],{"class":159},[49,91271,31028],{"class":73},[49,91273,91274],{"class":51,"line":10490},[49,91275,399],{"emptyLinePlaceholder":398},[49,91277,91278],{"class":51,"line":10495},[49,91279,91280],{"class":66},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[49,91282,91283],{"class":51,"line":10500},[49,91284,91285],{"class":66},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[49,91287,91288],{"class":51,"line":10509},[49,91289,91290],{"class":66},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[49,91292,91293],{"class":51,"line":10514},[49,91294,91295],{"class":66},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[49,91297,91298,91300,91302],{"class":51,"line":10520},[49,91299,52948],{"class":73},[49,91301,52344],{"class":51831},[49,91303,51838],{"class":73},[49,91305,91306,91308,91310],{"class":51,"line":10541},[49,91307,52316],{"class":73},[49,91309,52331],{"class":51831},[49,91311,51838],{"class":73},[49,91313,91314],{"class":51,"line":10547},[49,91315,399],{"emptyLinePlaceholder":398},[49,91317,91318,91320,91322],{"class":51,"line":10561},[49,91319,52316],{"class":73},[49,91321,51166],{"class":51831},[49,91323,51838],{"class":73},[18,91325,91327],{"id":91326},"_4172-节流","4.17.2 节流",[14,91329,91330],{},[25,91331],{"alt":27,"src":91332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,91334,91335],{},[25,91336],{"alt":27,"src":91337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,91339,91340],{},[112,91341,91342],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,91344,91345],{},"实现方式：",[742,91347,91348],{},[33,91349,91350],{},"lodash 提供的节流函数来处理",[14,91352,91353],{},"_.throttle(func,[wait=0],[options=])",[14,91355,91356],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[40,91358,91360],{"className":51164,"code":91359,"language":51166,"meta":27,"style":27},"\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",[46,91361,91362,91372,91386,91390,91398,91412,91432,91444,91452,91458,91468,91480,91492,91502,91514,91524,91534,91546,91550,91558,91566,91570,91578,91596,91614,91622,91640,91650,91658,91668,91672,91676,91680,91685,91690,91711,91719,91727,91731],{"__ignoreMap":27},[49,91363,91364,91366,91368,91370],{"class":51,"line":52},[49,91365,51828],{"class":73},[49,91367,51832],{"class":51831},[49,91369,51835],{"class":55},[49,91371,51838],{"class":73},[49,91373,91374,91376,91378,91380,91382,91384],{"class":51,"line":63},[49,91375,1739],{"class":73},[49,91377,51166],{"class":51831},[49,91379,51847],{"class":55},[49,91381,78],{"class":73},[49,91383,51852],{"class":59},[49,91385,51838],{"class":73},[49,91387,91388],{"class":51,"line":70},[49,91389,399],{"emptyLinePlaceholder":398},[49,91391,91392,91394,91396],{"class":51,"line":219},[49,91393,1739],{"class":73},[49,91395,51865],{"class":51831},[49,91397,51838],{"class":73},[49,91399,91400,91402,91404,91406,91408,91410],{"class":51,"line":233},[49,91401,52675],{"class":73},[49,91403,51875],{"class":51831},[49,91405,51878],{"class":55},[49,91407,78],{"class":73},[49,91409,51883],{"class":59},[49,91411,51838],{"class":73},[49,91413,91414,91416,91418,91420,91422,91424,91426,91428,91430],{"class":51,"line":241},[49,91415,52675],{"class":73},[49,91417,51875],{"class":51831},[49,91419,15617],{"class":55},[49,91421,78],{"class":73},[49,91423,51922],{"class":59},[49,91425,51902],{"class":55},[49,91427,78],{"class":73},[49,91429,51929],{"class":59},[49,91431,51838],{"class":73},[49,91433,91434,91436,91438,91440,91442],{"class":51,"line":1920},[49,91435,52675],{"class":73},[49,91437,51938],{"class":51831},[49,91439,51941],{"class":73},[49,91441,51938],{"class":51831},[49,91443,51838],{"class":73},[49,91445,91446,91448,91450],{"class":51,"line":2011},[49,91447,52675],{"class":73},[49,91449,757],{"class":51831},[49,91451,51838],{"class":73},[49,91453,91454,91456],{"class":51,"line":2017},[49,91455,55283],{"class":55},[49,91457,16269],{"class":73},[49,91459,91460,91462,91464,91466],{"class":51,"line":2029},[49,91461,73127],{"class":159},[49,91463,51968],{"class":73},[49,91465,61036],{"class":159},[49,91467,1990],{"class":73},[49,91469,91470,91472,91474,91476,91478],{"class":51,"line":2311},[49,91471,55302],{"class":159},[49,91473,51968],{"class":73},[49,91475,2421],{"class":159},[49,91477,52023],{"class":77},[49,91479,1990],{"class":73},[49,91481,91482,91484,91486,91488,91490],{"class":51,"line":2316},[49,91483,55316],{"class":159},[49,91485,51968],{"class":73},[49,91487,2421],{"class":159},[49,91489,52023],{"class":77},[49,91491,1990],{"class":73},[49,91493,91494,91496,91498,91500],{"class":51,"line":2322},[49,91495,55415],{"class":159},[49,91497,51968],{"class":73},[49,91499,90537],{"class":159},[49,91501,1990],{"class":73},[49,91503,91504,91506,91508,91510,91512],{"class":51,"line":2327},[49,91505,55453],{"class":159},[49,91507,51968],{"class":73},[49,91509,1654],{"class":159},[49,91511,52023],{"class":77},[49,91513,1990],{"class":73},[49,91515,91516,91518,91520,91522],{"class":51,"line":2341},[49,91517,57947],{"class":159},[49,91519,51968],{"class":73},[49,91521,61373],{"class":159},[49,91523,1990],{"class":73},[49,91525,91526,91528,91530,91532],{"class":51,"line":2346},[49,91527,57817],{"class":159},[49,91529,51968],{"class":73},[49,91531,52123],{"class":159},[49,91533,1990],{"class":73},[49,91535,91536,91538,91540,91542,91544],{"class":51,"line":2352},[49,91537,90576],{"class":159},[49,91539,51968],{"class":73},[49,91541,1148],{"class":159},[49,91543,52023],{"class":77},[49,91545,1990],{"class":73},[49,91547,91548],{"class":51,"line":2373},[49,91549,2885],{"class":73},[49,91551,91552,91554,91556],{"class":51,"line":2378},[49,91553,52948],{"class":73},[49,91555,757],{"class":51831},[49,91557,51838],{"class":73},[49,91559,91560,91562,91564],{"class":51,"line":2392},[49,91561,52316],{"class":73},[49,91563,51865],{"class":51831},[49,91565,51838],{"class":73},[49,91567,91568],{"class":51,"line":2397},[49,91569,399],{"emptyLinePlaceholder":398},[49,91571,91572,91574,91576],{"class":51,"line":2426},[49,91573,1739],{"class":73},[49,91575,52331],{"class":51831},[49,91577,51838],{"class":73},[49,91579,91580,91582,91584,91586,91588,91590,91592,91594],{"class":51,"line":2431},[49,91581,52675],{"class":73},[49,91583,52142],{"class":51831},[49,91585,54017],{"class":55},[49,91587,78],{"class":73},[49,91589,54022],{"class":59},[49,91591,55845],{"class":73},[49,91593,52142],{"class":51831},[49,91595,51838],{"class":73},[49,91597,91598,91600,91602,91604,91606,91608,91610,91612],{"class":51,"line":2448},[49,91599,52675],{"class":73},[49,91601,52344],{"class":51831},[49,91603,55770],{"class":55},[49,91605,78],{"class":73},[49,91607,88805],{"class":59},[49,91609,55845],{"class":73},[49,91611,52344],{"class":51831},[49,91613,51838],{"class":73},[49,91615,91616,91618,91620],{"class":51,"line":2453},[49,91617,52675],{"class":73},[49,91619,52344],{"class":51831},[49,91621,51838],{"class":73},[49,91623,91624,91626,91628,91630,91632,91634,91636,91638],{"class":51,"line":2458},[49,91625,11918],{"class":77},[49,91627,87464],{"class":159},[49,91629,14261],{"class":77},[49,91631,54927],{"class":73},[49,91633,54930],{"class":55},[49,91635,841],{"class":73},[49,91637,90677],{"class":59},[49,91639,847],{"class":73},[49,91641,91642,91644,91646,91648],{"class":51,"line":2463},[49,91643,52750],{"class":77},[49,91645,10135],{"class":73},[49,91647,78],{"class":77},[49,91649,47864],{"class":159},[49,91651,91652,91654,91656],{"class":51,"line":2477},[49,91653,70615],{"class":77},[49,91655,90696],{"class":55},[49,91657,11550],{"class":73},[49,91659,91660,91662,91664,91666],{"class":51,"line":2482},[49,91661,90703],{"class":73},[49,91663,78],{"class":77},[49,91665,3729],{"class":73},[49,91667,3399],{"class":77},[49,91669,91670],{"class":51,"line":3274},[49,91671,90714],{"class":66},[49,91673,91674],{"class":51,"line":3288},[49,91675,2885],{"class":73},[49,91677,91678],{"class":51,"line":3296},[49,91679,90723],{"class":66},[49,91681,91682],{"class":51,"line":3301},[49,91683,91684],{"class":66},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[49,91686,91687],{"class":51,"line":3307},[49,91688,91689],{"class":66},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[49,91691,91692,91694,91696,91698,91700,91702,91705,91707,91709],{"class":51,"line":3313},[49,91693,90738],{"class":73},[49,91695,58344],{"class":55},[49,91697,841],{"class":73},[49,91699,90745],{"class":59},[49,91701,90748],{"class":73},[49,91703,91704],{"class":55},"throttle",[49,91706,90754],{"class":73},[49,91708,65605],{"class":159},[49,91710,31028],{"class":73},[49,91712,91713,91715,91717],{"class":51,"line":3318},[49,91714,52948],{"class":73},[49,91716,52344],{"class":51831},[49,91718,51838],{"class":73},[49,91720,91721,91723,91725],{"class":51,"line":8645},[49,91722,52316],{"class":73},[49,91724,52331],{"class":51831},[49,91726,51838],{"class":73},[49,91728,91729],{"class":51,"line":8669},[49,91730,399],{"emptyLinePlaceholder":398},[49,91732,91733,91735,91737],{"class":51,"line":8674},[49,91734,52316],{"class":73},[49,91736,51166],{"class":51831},[49,91738,51838],{"class":73},[742,91740,91741],{},[33,91742,91743],{},"手写一个节流函数来处理",[14,91745,71483],{},[14,91747,90797],{},[14,91749,91750],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91752,91753],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[40,91755,91757],{"className":51164,"code":91756,"language":51166,"meta":27,"style":27},"\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",[46,91758,91759,91769,91783,91787,91795,91809,91829,91841,91849,91855,91865,91877,91889,91899,91911,91921,91931,91943,91947,91955,91963,91967,91975,91993,92011,92019,92037,92047,92055,92065,92069,92073,92077,92082,92087,92092,92097,92102,92107,92124,92130,92138,92149,92164,92171,92176,92181,92191,92196,92201,92206,92210,92214,92218,92238,92246,92254,92258],{"__ignoreMap":27},[49,91760,91761,91763,91765,91767],{"class":51,"line":52},[49,91762,51828],{"class":73},[49,91764,51832],{"class":51831},[49,91766,51835],{"class":55},[49,91768,51838],{"class":73},[49,91770,91771,91773,91775,91777,91779,91781],{"class":51,"line":63},[49,91772,1739],{"class":73},[49,91774,51166],{"class":51831},[49,91776,51847],{"class":55},[49,91778,78],{"class":73},[49,91780,51852],{"class":59},[49,91782,51838],{"class":73},[49,91784,91785],{"class":51,"line":70},[49,91786,399],{"emptyLinePlaceholder":398},[49,91788,91789,91791,91793],{"class":51,"line":219},[49,91790,1739],{"class":73},[49,91792,51865],{"class":51831},[49,91794,51838],{"class":73},[49,91796,91797,91799,91801,91803,91805,91807],{"class":51,"line":233},[49,91798,52675],{"class":73},[49,91800,51875],{"class":51831},[49,91802,51878],{"class":55},[49,91804,78],{"class":73},[49,91806,51883],{"class":59},[49,91808,51838],{"class":73},[49,91810,91811,91813,91815,91817,91819,91821,91823,91825,91827],{"class":51,"line":241},[49,91812,52675],{"class":73},[49,91814,51875],{"class":51831},[49,91816,15617],{"class":55},[49,91818,78],{"class":73},[49,91820,51922],{"class":59},[49,91822,51902],{"class":55},[49,91824,78],{"class":73},[49,91826,51929],{"class":59},[49,91828,51838],{"class":73},[49,91830,91831,91833,91835,91837,91839],{"class":51,"line":1920},[49,91832,52675],{"class":73},[49,91834,51938],{"class":51831},[49,91836,51941],{"class":73},[49,91838,51938],{"class":51831},[49,91840,51838],{"class":73},[49,91842,91843,91845,91847],{"class":51,"line":2011},[49,91844,52675],{"class":73},[49,91846,757],{"class":51831},[49,91848,51838],{"class":73},[49,91850,91851,91853],{"class":51,"line":2017},[49,91852,55283],{"class":55},[49,91854,16269],{"class":73},[49,91856,91857,91859,91861,91863],{"class":51,"line":2029},[49,91858,73127],{"class":159},[49,91860,51968],{"class":73},[49,91862,61036],{"class":159},[49,91864,1990],{"class":73},[49,91866,91867,91869,91871,91873,91875],{"class":51,"line":2311},[49,91868,55302],{"class":159},[49,91870,51968],{"class":73},[49,91872,2421],{"class":159},[49,91874,52023],{"class":77},[49,91876,1990],{"class":73},[49,91878,91879,91881,91883,91885,91887],{"class":51,"line":2316},[49,91880,55316],{"class":159},[49,91882,51968],{"class":73},[49,91884,2421],{"class":159},[49,91886,52023],{"class":77},[49,91888,1990],{"class":73},[49,91890,91891,91893,91895,91897],{"class":51,"line":2322},[49,91892,55415],{"class":159},[49,91894,51968],{"class":73},[49,91896,90537],{"class":159},[49,91898,1990],{"class":73},[49,91900,91901,91903,91905,91907,91909],{"class":51,"line":2327},[49,91902,55453],{"class":159},[49,91904,51968],{"class":73},[49,91906,1654],{"class":159},[49,91908,52023],{"class":77},[49,91910,1990],{"class":73},[49,91912,91913,91915,91917,91919],{"class":51,"line":2341},[49,91914,57947],{"class":159},[49,91916,51968],{"class":73},[49,91918,61373],{"class":159},[49,91920,1990],{"class":73},[49,91922,91923,91925,91927,91929],{"class":51,"line":2346},[49,91924,57817],{"class":159},[49,91926,51968],{"class":73},[49,91928,52123],{"class":159},[49,91930,1990],{"class":73},[49,91932,91933,91935,91937,91939,91941],{"class":51,"line":2352},[49,91934,90576],{"class":159},[49,91936,51968],{"class":73},[49,91938,1148],{"class":159},[49,91940,52023],{"class":77},[49,91942,1990],{"class":73},[49,91944,91945],{"class":51,"line":2373},[49,91946,2885],{"class":73},[49,91948,91949,91951,91953],{"class":51,"line":2378},[49,91950,52948],{"class":73},[49,91952,757],{"class":51831},[49,91954,51838],{"class":73},[49,91956,91957,91959,91961],{"class":51,"line":2392},[49,91958,52316],{"class":73},[49,91960,51865],{"class":51831},[49,91962,51838],{"class":73},[49,91964,91965],{"class":51,"line":2397},[49,91966,399],{"emptyLinePlaceholder":398},[49,91968,91969,91971,91973],{"class":51,"line":2426},[49,91970,1739],{"class":73},[49,91972,52331],{"class":51831},[49,91974,51838],{"class":73},[49,91976,91977,91979,91981,91983,91985,91987,91989,91991],{"class":51,"line":2431},[49,91978,52675],{"class":73},[49,91980,52142],{"class":51831},[49,91982,54017],{"class":55},[49,91984,78],{"class":73},[49,91986,54022],{"class":59},[49,91988,55845],{"class":73},[49,91990,52142],{"class":51831},[49,91992,51838],{"class":73},[49,91994,91995,91997,91999,92001,92003,92005,92007,92009],{"class":51,"line":2448},[49,91996,52675],{"class":73},[49,91998,52344],{"class":51831},[49,92000,55770],{"class":55},[49,92002,78],{"class":73},[49,92004,88805],{"class":59},[49,92006,55845],{"class":73},[49,92008,52344],{"class":51831},[49,92010,51838],{"class":73},[49,92012,92013,92015,92017],{"class":51,"line":2453},[49,92014,52675],{"class":73},[49,92016,52344],{"class":51831},[49,92018,51838],{"class":73},[49,92020,92021,92023,92025,92027,92029,92031,92033,92035],{"class":51,"line":2458},[49,92022,11918],{"class":77},[49,92024,87464],{"class":159},[49,92026,14261],{"class":77},[49,92028,54927],{"class":73},[49,92030,54930],{"class":55},[49,92032,841],{"class":73},[49,92034,90677],{"class":59},[49,92036,847],{"class":73},[49,92038,92039,92041,92043,92045],{"class":51,"line":2463},[49,92040,52750],{"class":77},[49,92042,10135],{"class":73},[49,92044,78],{"class":77},[49,92046,47864],{"class":159},[49,92048,92049,92051,92053],{"class":51,"line":2477},[49,92050,70615],{"class":77},[49,92052,90696],{"class":55},[49,92054,11550],{"class":73},[49,92056,92057,92059,92061,92063],{"class":51,"line":2482},[49,92058,90703],{"class":73},[49,92060,78],{"class":77},[49,92062,3729],{"class":73},[49,92064,3399],{"class":77},[49,92066,92067],{"class":51,"line":3274},[49,92068,90714],{"class":66},[49,92070,92071],{"class":51,"line":3288},[49,92072,2885],{"class":73},[49,92074,92075],{"class":51,"line":3296},[49,92076,90723],{"class":66},[49,92078,92079],{"class":51,"line":3301},[49,92080,92081],{"class":66},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[49,92083,92084],{"class":51,"line":3307},[49,92085,92086],{"class":66},"    \u002F\u002F 1.声明一个定时器变量\n",[49,92088,92089],{"class":51,"line":3313},[49,92090,92091],{"class":66},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[49,92093,92094],{"class":51,"line":3318},[49,92095,92096],{"class":66},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[49,92098,92099],{"class":51,"line":8645},[49,92100,92101],{"class":66},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[49,92103,92104],{"class":51,"line":8669},[49,92105,92106],{"class":66},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[49,92108,92109,92111,92114,92116,92118,92120,92122],{"class":51,"line":8674},[49,92110,70615],{"class":77},[49,92112,92113],{"class":55}," throttle",[49,92115,841],{"class":73},[49,92117,91168],{"class":5913},[49,92119,13132],{"class":73},[49,92121,1549],{"class":5913},[49,92123,13139],{"class":73},[49,92125,92126,92128],{"class":51,"line":8680},[49,92127,80303],{"class":77},[49,92129,91181],{"class":73},[49,92131,92132,92134,92136],{"class":51,"line":8707},[49,92133,74513],{"class":77},[49,92135,59449],{"class":77},[49,92137,54983],{"class":73},[49,92139,92140,92142,92144,92146],{"class":51,"line":8712},[49,92141,3194],{"class":77},[49,92143,2357],{"class":73},[49,92145,1056],{"class":77},[49,92147,92148],{"class":73},"timer) {\n",[49,92150,92151,92154,92156,92158,92160,92162],{"class":51,"line":8718},[49,92152,92153],{"class":73},"          timer ",[49,92155,78],{"class":77},[49,92157,91222],{"class":55},[49,92159,841],{"class":73},[49,92161,54980],{"class":77},[49,92163,54983],{"class":73},[49,92165,92166,92169],{"class":51,"line":8730},[49,92167,92168],{"class":55},"            fn",[49,92170,2674],{"class":73},[49,92172,92173],{"class":51,"line":8742},[49,92174,92175],{"class":66},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[49,92177,92178],{"class":51,"line":8754},[49,92179,92180],{"class":66},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[49,92182,92183,92186,92188],{"class":51,"line":10413},[49,92184,92185],{"class":73},"            timer ",[49,92187,78],{"class":77},[49,92189,92190],{"class":159}," null\n",[49,92192,92193],{"class":51,"line":10438},[49,92194,92195],{"class":66},"            \u002F\u002F 不能用clearTimeout(timer)\n",[49,92197,92198],{"class":51,"line":10461},[49,92199,92200],{"class":66},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[49,92202,92203],{"class":51,"line":10485},[49,92204,92205],{"class":73},"          }, t)\n",[49,92207,92208],{"class":51,"line":10490},[49,92209,3226],{"class":73},[49,92211,92212],{"class":51,"line":10495},[49,92213,52929],{"class":73},[49,92215,92216],{"class":51,"line":10500},[49,92217,2885],{"class":73},[49,92219,92220,92222,92224,92226,92228,92230,92232,92234,92236],{"class":51,"line":10509},[49,92221,90738],{"class":73},[49,92223,58344],{"class":55},[49,92225,841],{"class":73},[49,92227,90745],{"class":59},[49,92229,13132],{"class":73},[49,92231,91704],{"class":55},[49,92233,90754],{"class":73},[49,92235,65605],{"class":159},[49,92237,31028],{"class":73},[49,92239,92240,92242,92244],{"class":51,"line":10514},[49,92241,52948],{"class":73},[49,92243,52344],{"class":51831},[49,92245,51838],{"class":73},[49,92247,92248,92250,92252],{"class":51,"line":10520},[49,92249,52316],{"class":73},[49,92251,52331],{"class":51831},[49,92253,51838],{"class":73},[49,92255,92256],{"class":51,"line":10541},[49,92257,399],{"emptyLinePlaceholder":398},[49,92259,92260,92262,92264],{"class":51,"line":10547},[49,92261,52316],{"class":73},[49,92263,51166],{"class":51831},[49,92265,51838],{"class":73},[18,92267,92269],{"id":92268},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[40,92271,92273],{"className":53598,"code":92272,"language":53600,"meta":27,"style":27},"\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",[46,92274,92275,92283,92291,92296,92301,92306,92311,92315,92323],{"__ignoreMap":27},[49,92276,92277,92279,92281],{"class":51,"line":52},[49,92278,1739],{"class":73},[49,92280,52331],{"class":51831},[49,92282,51838],{"class":73},[49,92284,92285,92287,92289],{"class":51,"line":63},[49,92286,52675],{"class":73},[49,92288,52344],{"class":51831},[49,92290,51838],{"class":73},[49,92292,92293],{"class":51,"line":70},[49,92294,92295],{"class":73},"    let timer = null\n",[49,92297,92298],{"class":51,"line":219},[49,92299,92300],{"class":73},"    timer = setTimeout(() => {\n",[49,92302,92303],{"class":51,"line":233},[49,92304,92305],{"class":73},"      clearTimeout(timer)\n",[49,92307,92308],{"class":51,"line":241},[49,92309,92310],{"class":73},"      console.log(timer)\n",[49,92312,92313],{"class":51,"line":1920},[49,92314,60756],{"class":73},[49,92316,92317,92319,92321],{"class":51,"line":2011},[49,92318,52948],{"class":73},[49,92320,52344],{"class":51831},[49,92322,51838],{"class":73},[49,92324,92325,92327,92329],{"class":51,"line":2017},[49,92326,52316],{"class":73},[49,92328,52331],{"class":51831},[49,92330,51838],{"class":73},[14,92332,92333],{},"输出为1",[14,92335,92336],{},"在开启的定时器里边写清除定时器",[14,92338,92339],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[18,92341,92343],{"id":92342},"_4174-节流综合案例","4.17.4 节流综合案例",[14,92345,92346],{},"页面打开，可以记录上一次的视频播放位置",[14,92348,92349],{},[25,92350],{"alt":27,"src":92351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,92353,92354],{},[25,92355],{"alt":27,"src":92356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[40,92358,92360],{"className":51164,"code":92359,"language":51166,"meta":27,"style":27},"\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",[46,92361,92362,92372,92386,92390,92398,92412,92432,92452,92474,92487,92495,92501,92511,92521,92531,92535,92539,92546,92559,92571,92575,92579,92589,92601,92615,92619,92623,92630,92640,92653,92665,92675,92685,92701,92713,92717,92721,92729,92739,92751,92761,92771,92781,92785,92789,92799,92810,92814,92822,92830,92834,92842,92857,92872,92887,92908,92916,92924,92939,92961,92969,92984,93010,93036,93062,93070,93078,93097,93105,93110,93129,93134,93152,93157,93162,93170,93175,93189,93197,93202,93219,93223,93228,93250,93254,93262,93270,93274],{"__ignoreMap":27},[49,92363,92364,92366,92368,92370],{"class":51,"line":52},[49,92365,51828],{"class":73},[49,92367,51832],{"class":51831},[49,92369,51835],{"class":55},[49,92371,51838],{"class":73},[49,92373,92374,92376,92378,92380,92382,92384],{"class":51,"line":63},[49,92375,1739],{"class":73},[49,92377,51166],{"class":51831},[49,92379,51847],{"class":55},[49,92381,78],{"class":73},[49,92383,51852],{"class":59},[49,92385,51838],{"class":73},[49,92387,92388],{"class":51,"line":70},[49,92389,399],{"emptyLinePlaceholder":398},[49,92391,92392,92394,92396],{"class":51,"line":219},[49,92393,1739],{"class":73},[49,92395,51865],{"class":51831},[49,92397,51838],{"class":73},[49,92399,92400,92402,92404,92406,92408,92410],{"class":51,"line":233},[49,92401,52675],{"class":73},[49,92403,51875],{"class":51831},[49,92405,51878],{"class":55},[49,92407,78],{"class":73},[49,92409,51883],{"class":59},[49,92411,59658],{"class":73},[49,92413,92414,92416,92418,92420,92422,92424,92426,92428,92430],{"class":51,"line":241},[49,92415,52675],{"class":73},[49,92417,51875],{"class":51831},[49,92419,51894],{"class":55},[49,92421,78],{"class":73},[49,92423,51899],{"class":59},[49,92425,51902],{"class":55},[49,92427,78],{"class":73},[49,92429,51907],{"class":59},[49,92431,59658],{"class":73},[49,92433,92434,92436,92438,92440,92442,92444,92446,92448,92450],{"class":51,"line":1920},[49,92435,52675],{"class":73},[49,92437,51875],{"class":51831},[49,92439,15617],{"class":55},[49,92441,78],{"class":73},[49,92443,51922],{"class":59},[49,92445,51902],{"class":55},[49,92447,78],{"class":73},[49,92449,51929],{"class":59},[49,92451,59658],{"class":73},[49,92453,92454,92456,92458,92460,92462,92465,92467,92469,92472],{"class":51,"line":2011},[49,92455,52675],{"class":73},[49,92457,51875],{"class":51831},[49,92459,15617],{"class":55},[49,92461,78],{"class":73},[49,92463,92464],{"class":59},"\"referrer\"",[49,92466,51902],{"class":55},[49,92468,78],{"class":73},[49,92470,92471],{"class":59},"\"never\"",[49,92473,59658],{"class":73},[49,92475,92476,92478,92480,92483,92485],{"class":51,"line":2017},[49,92477,52675],{"class":73},[49,92479,51938],{"class":51831},[49,92481,92482],{"class":73},">综合案例\u003C\u002F",[49,92484,51938],{"class":51831},[49,92486,51838],{"class":73},[49,92488,92489,92491,92493],{"class":51,"line":2029},[49,92490,52675],{"class":73},[49,92492,757],{"class":51831},[49,92494,51838],{"class":73},[49,92496,92497,92499],{"class":51,"line":2311},[49,92498,7100],{"class":51831},[49,92500,16269],{"class":73},[49,92502,92503,92505,92507,92509],{"class":51,"line":2316},[49,92504,55226],{"class":159},[49,92506,51968],{"class":73},[49,92508,1021],{"class":159},[49,92510,1990],{"class":73},[49,92512,92513,92515,92517,92519],{"class":51,"line":2322},[49,92514,55237],{"class":159},[49,92516,51968],{"class":73},[49,92518,1021],{"class":159},[49,92520,1990],{"class":73},[49,92522,92523,92525,92527,92529],{"class":51,"line":2327},[49,92524,73127],{"class":159},[49,92526,51968],{"class":73},[49,92528,61036],{"class":159},[49,92530,1990],{"class":73},[49,92532,92533],{"class":51,"line":2341},[49,92534,2885],{"class":73},[49,92536,92537],{"class":51,"line":2346},[49,92538,399],{"emptyLinePlaceholder":398},[49,92540,92541,92544],{"class":51,"line":2352},[49,92542,92543],{"class":55},"    .container",[49,92545,16269],{"class":73},[49,92547,92548,92550,92552,92555,92557],{"class":51,"line":2373},[49,92549,55302],{"class":159},[49,92551,51968],{"class":73},[49,92553,92554],{"class":159},"1200",[49,92556,52023],{"class":77},[49,92558,1990],{"class":73},[49,92560,92561,92563,92565,92567,92569],{"class":51,"line":2378},[49,92562,55237],{"class":159},[49,92564,51968],{"class":73},[49,92566,1021],{"class":159},[49,92568,52087],{"class":159},[49,92570,1990],{"class":73},[49,92572,92573],{"class":51,"line":2392},[49,92574,2885],{"class":73},[49,92576,92577],{"class":51,"line":2397},[49,92578,399],{"emptyLinePlaceholder":398},[49,92580,92581,92584,92587],{"class":51,"line":2426},[49,92582,92583],{"class":55},"    .video",[49,92585,92586],{"class":51831}," video",[49,92588,16269],{"class":73},[49,92590,92591,92593,92595,92597,92599],{"class":51,"line":2431},[49,92592,55302],{"class":159},[49,92594,51968],{"class":73},[49,92596,1140],{"class":159},[49,92598,1157],{"class":77},[49,92600,1990],{"class":73},[49,92602,92603,92605,92607,92609,92611,92613],{"class":51,"line":2448},[49,92604,55226],{"class":159},[49,92606,51968],{"class":73},[49,92608,1529],{"class":159},[49,92610,52023],{"class":77},[49,92612,4790],{"class":159},[49,92614,1990],{"class":73},[49,92616,92617],{"class":51,"line":2453},[49,92618,2885],{"class":73},[49,92620,92621],{"class":51,"line":2458},[49,92622,399],{"emptyLinePlaceholder":398},[49,92624,92625,92628],{"class":51,"line":2463},[49,92626,92627],{"class":55},"    .elevator",[49,92629,16269],{"class":73},[49,92631,92632,92634,92636,92638],{"class":51,"line":2477},[49,92633,55290],{"class":159},[49,92635,51968],{"class":73},[49,92637,86764],{"class":159},[49,92639,1990],{"class":73},[49,92641,92642,92644,92646,92649,92651],{"class":51,"line":2482},[49,92643,55478],{"class":159},[49,92645,51968],{"class":73},[49,92647,92648],{"class":159},"280",[49,92650,52023],{"class":77},[49,92652,1990],{"class":73},[49,92654,92655,92657,92659,92661,92663],{"class":51,"line":3274},[49,92656,86958],{"class":159},[49,92658,51968],{"class":73},[49,92660,1529],{"class":159},[49,92662,52023],{"class":77},[49,92664,1990],{"class":73},[49,92666,92667,92669,92671,92673],{"class":51,"line":3288},[49,92668,86771],{"class":159},[49,92670,51968],{"class":73},[49,92672,86776],{"class":159},[49,92674,1990],{"class":73},[49,92676,92677,92679,92681,92683],{"class":51,"line":3296},[49,92678,62252],{"class":159},[49,92680,51968],{"class":73},[49,92682,61373],{"class":159},[49,92684,1990],{"class":73},[49,92686,92687,92689,92691,92693,92695,92697,92699],{"class":51,"line":3301},[49,92688,62508],{"class":159},[49,92690,51968],{"class":73},[49,92692,1047],{"class":159},[49,92694,52023],{"class":77},[49,92696,52052],{"class":159},[49,92698,62775],{"class":159},[49,92700,1990],{"class":73},[49,92702,92703,92705,92707,92709,92711],{"class":51,"line":3307},[49,92704,55302],{"class":159},[49,92706,51968],{"class":73},[49,92708,1736],{"class":159},[49,92710,52023],{"class":77},[49,92712,1990],{"class":73},[49,92714,92715],{"class":51,"line":3313},[49,92716,2885],{"class":73},[49,92718,92719],{"class":51,"line":3318},[49,92720,399],{"emptyLinePlaceholder":398},[49,92722,92723,92725,92727],{"class":51,"line":8645},[49,92724,92627],{"class":55},[49,92726,2098],{"class":51831},[49,92728,16269],{"class":73},[49,92730,92731,92733,92735,92737],{"class":51,"line":8669},[49,92732,55540],{"class":159},[49,92734,51968],{"class":73},[49,92736,61400],{"class":159},[49,92738,1990],{"class":73},[49,92740,92741,92743,92745,92747,92749],{"class":51,"line":8674},[49,92742,55226],{"class":159},[49,92744,51968],{"class":73},[49,92746,1275],{"class":159},[49,92748,52023],{"class":77},[49,92750,1990],{"class":73},[49,92752,92753,92755,92757,92759],{"class":51,"line":8680},[49,92754,64501],{"class":159},[49,92756,51968],{"class":73},[49,92758,55268],{"class":159},[49,92760,1990],{"class":73},[49,92762,92763,92765,92767,92769],{"class":51,"line":8707},[49,92764,57817],{"class":159},[49,92766,51968],{"class":73},[49,92768,52123],{"class":159},[49,92770,1990],{"class":73},[49,92772,92773,92775,92777,92779],{"class":51,"line":8712},[49,92774,57947],{"class":159},[49,92776,51968],{"class":73},[49,92778,62601],{"class":159},[49,92780,1990],{"class":73},[49,92782,92783],{"class":51,"line":8718},[49,92784,2885],{"class":73},[49,92786,92787],{"class":51,"line":8730},[49,92788,399],{"emptyLinePlaceholder":398},[49,92790,92791,92793,92795,92797],{"class":51,"line":8742},[49,92792,92627],{"class":55},[49,92794,2098],{"class":51831},[49,92796,64555],{"class":55},[49,92798,16269],{"class":73},[49,92800,92801,92803,92805,92808],{"class":51,"line":8754},[49,92802,57947],{"class":159},[49,92804,51968],{"class":73},[49,92806,92807],{"class":159},"#1286ff",[49,92809,1990],{"class":73},[49,92811,92812],{"class":51,"line":10413},[49,92813,2885],{"class":73},[49,92815,92816,92818,92820],{"class":51,"line":10438},[49,92817,52948],{"class":73},[49,92819,757],{"class":51831},[49,92821,51838],{"class":73},[49,92823,92824,92826,92828],{"class":51,"line":10461},[49,92825,52316],{"class":73},[49,92827,51865],{"class":51831},[49,92829,51838],{"class":73},[49,92831,92832],{"class":51,"line":10485},[49,92833,399],{"emptyLinePlaceholder":398},[49,92835,92836,92838,92840],{"class":51,"line":10490},[49,92837,1739],{"class":73},[49,92839,52331],{"class":51831},[49,92841,51838],{"class":73},[49,92843,92844,92846,92848,92850,92852,92855],{"class":51,"line":10495},[49,92845,52675],{"class":73},[49,92847,52142],{"class":51831},[49,92849,54017],{"class":55},[49,92851,78],{"class":73},[49,92853,92854],{"class":59},"\"container\"",[49,92856,51838],{"class":73},[49,92858,92859,92861,92863,92865,92867,92870],{"class":51,"line":10500},[49,92860,51872],{"class":73},[49,92862,52142],{"class":51831},[49,92864,54017],{"class":55},[49,92866,78],{"class":73},[49,92868,92869],{"class":59},"\"header\"",[49,92871,51838],{"class":73},[49,92873,92874,92876,92878,92880,92882,92885],{"class":51,"line":10509},[49,92875,55765],{"class":73},[49,92877,124],{"class":51831},[49,92879,61588],{"class":55},[49,92881,78],{"class":73},[49,92883,92884],{"class":59},"\"http:\u002F\u002Fpip.itcast.cn\"",[49,92886,51838],{"class":73},[49,92888,92889,92891,92893,92895,92897,92900,92902,92904,92906],{"class":51,"line":10514},[49,92890,55833],{"class":73},[49,92892,25],{"class":51831},[49,92894,55770],{"class":55},[49,92896,78],{"class":73},[49,92898,92899],{"class":59},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[49,92901,55778],{"class":55},[49,92903,78],{"class":73},[49,92905,8349],{"class":59},[49,92907,59658],{"class":73},[49,92909,92910,92912,92914],{"class":51,"line":10520},[49,92911,55938],{"class":73},[49,92913,124],{"class":51831},[49,92915,51838],{"class":73},[49,92917,92918,92920,92922],{"class":51,"line":10541},[49,92919,52307],{"class":73},[49,92921,52142],{"class":51831},[49,92923,51838],{"class":73},[49,92925,92926,92928,92930,92932,92934,92937],{"class":51,"line":10547},[49,92927,51872],{"class":73},[49,92929,52142],{"class":51831},[49,92931,54017],{"class":55},[49,92933,78],{"class":73},[49,92935,92936],{"class":59},"\"video\"",[49,92938,51838],{"class":73},[49,92940,92941,92943,92945,92947,92949,92952,92955,92957,92959],{"class":51,"line":10561},[49,92942,55765],{"class":73},[49,92944,28714],{"class":51831},[49,92946,55770],{"class":55},[49,92948,78],{"class":73},[49,92950,92951],{"class":59},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[49,92953,92954],{"class":55}," controls",[49,92956,55845],{"class":73},[49,92958,28714],{"class":51831},[49,92960,51838],{"class":73},[49,92962,92963,92965,92967],{"class":51,"line":10567},[49,92964,52307],{"class":73},[49,92966,52142],{"class":51831},[49,92968,51838],{"class":73},[49,92970,92971,92973,92975,92977,92979,92982],{"class":51,"line":10594},[49,92972,51872],{"class":73},[49,92974,52142],{"class":51831},[49,92976,54017],{"class":55},[49,92978,78],{"class":73},[49,92980,92981],{"class":59},"\"elevator\"",[49,92983,51838],{"class":73},[49,92985,92986,92988,92990,92992,92994,92996,92999,93001,93003,93006,93008],{"class":51,"line":10603},[49,92987,55765],{"class":73},[49,92989,124],{"class":51831},[49,92991,61588],{"class":55},[49,92993,78],{"class":73},[49,92995,64767],{"class":59},[49,92997,92998],{"class":55}," data-ref",[49,93000,78],{"class":73},[49,93002,92936],{"class":59},[49,93004,93005],{"class":73},">视频介绍\u003C\u002F",[49,93007,124],{"class":51831},[49,93009,51838],{"class":73},[49,93011,93012,93014,93016,93018,93020,93022,93024,93026,93029,93032,93034],{"class":51,"line":10609},[49,93013,55765],{"class":73},[49,93015,124],{"class":51831},[49,93017,61588],{"class":55},[49,93019,78],{"class":73},[49,93021,64767],{"class":59},[49,93023,92998],{"class":55},[49,93025,78],{"class":73},[49,93027,93028],{"class":59},"\"intro\"",[49,93030,93031],{"class":73},">课程简介\u003C\u002F",[49,93033,124],{"class":51831},[49,93035,51838],{"class":73},[49,93037,93038,93040,93042,93044,93046,93048,93050,93052,93055,93058,93060],{"class":51,"line":10617},[49,93039,55765],{"class":73},[49,93041,124],{"class":51831},[49,93043,61588],{"class":55},[49,93045,78],{"class":73},[49,93047,64767],{"class":59},[49,93049,92998],{"class":55},[49,93051,78],{"class":73},[49,93053,93054],{"class":59},"\"outline\"",[49,93056,93057],{"class":73},">评论列表\u003C\u002F",[49,93059,124],{"class":51831},[49,93061,51838],{"class":73},[49,93063,93064,93066,93068],{"class":51,"line":10622},[49,93065,52307],{"class":73},[49,93067,52142],{"class":51831},[49,93069,51838],{"class":73},[49,93071,93072,93074,93076],{"class":51,"line":17301},[49,93073,52948],{"class":73},[49,93075,52142],{"class":51831},[49,93077,51838],{"class":73},[49,93079,93080,93082,93084,93086,93088,93091,93093,93095],{"class":51,"line":17307},[49,93081,52675],{"class":73},[49,93083,52344],{"class":51831},[49,93085,55770],{"class":55},[49,93087,78],{"class":73},[49,93089,93090],{"class":59},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[49,93092,55845],{"class":73},[49,93094,52344],{"class":51831},[49,93096,51838],{"class":73},[49,93098,93099,93101,93103],{"class":51,"line":17330},[49,93100,52675],{"class":73},[49,93102,52344],{"class":51831},[49,93104,51838],{"class":73},[49,93106,93107],{"class":51,"line":17336},[49,93108,93109],{"class":66},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[49,93111,93112,93114,93116,93118,93120,93122,93124,93127],{"class":51,"line":17359},[49,93113,11918],{"class":77},[49,93115,92586],{"class":159},[49,93117,14261],{"class":77},[49,93119,54927],{"class":73},[49,93121,54930],{"class":55},[49,93123,841],{"class":73},[49,93125,93126],{"class":59},"'video'",[49,93128,847],{"class":73},[49,93130,93131],{"class":51,"line":17373},[49,93132,93133],{"class":66},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[49,93135,93136,93139,93141,93143,93145,93148,93150],{"class":51,"line":17393},[49,93137,93138],{"class":73},"    video.ontimeupdate ",[49,93140,78],{"class":77},[49,93142,88886],{"class":73},[49,93144,91704],{"class":55},[49,93146,93147],{"class":73},"(() ",[49,93149,85253],{"class":77},[49,93151,16269],{"class":73},[49,93153,93154],{"class":51,"line":17399},[49,93155,93156],{"class":66},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[49,93158,93159],{"class":51,"line":17410},[49,93160,93161],{"class":66},"      \u002F\u002F 控制台输出当前的时间\n",[49,93163,93164,93167],{"class":51,"line":17433},[49,93165,93166],{"class":66},"      \u002F\u002F console.log(video.currentTime)",[49,93168,93169],{"class":66},"  \u002F\u002F获得当前的视频时间\n",[49,93171,93172],{"class":51,"line":17455},[49,93173,93174],{"class":66},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[49,93176,93177,93179,93181,93183,93186],{"class":51,"line":17460},[49,93178,75214],{"class":73},[49,93180,72185],{"class":55},[49,93182,841],{"class":73},[49,93184,93185],{"class":59},"'currentTime'",[49,93187,93188],{"class":73},", video.currentTime)\n",[49,93190,93191,93193,93195],{"class":51,"line":17466},[49,93192,55066],{"class":73},[49,93194,7107],{"class":159},[49,93196,847],{"class":73},[49,93198,93199],{"class":51,"line":17480},[49,93200,93201],{"class":66},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[49,93203,93204,93207,93210,93212,93215,93217],{"class":51,"line":17493},[49,93205,93206],{"class":73},"    video.",[49,93208,93209],{"class":55},"onloadeddata",[49,93211,14261],{"class":77},[49,93213,93214],{"class":73}," () ",[49,93216,85253],{"class":77},[49,93218,16269],{"class":73},[49,93220,93221],{"class":51,"line":17498},[49,93222,60543],{"class":66},[49,93224,93225],{"class":51,"line":17512},[49,93226,93227],{"class":66},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[49,93229,93230,93233,93235,93238,93240,93242,93244,93246,93248],{"class":51,"line":17517},[49,93231,93232],{"class":73},"      video.currentTime ",[49,93234,78],{"class":77},[49,93236,93237],{"class":73}," localStorage.",[49,93239,72216],{"class":55},[49,93241,841],{"class":73},[49,93243,93185],{"class":59},[49,93245,14411],{"class":73},[49,93247,71888],{"class":77},[49,93249,47864],{"class":159},[49,93251,93252],{"class":51,"line":17523},[49,93253,2885],{"class":73},[49,93255,93256,93258,93260],{"class":51,"line":17528},[49,93257,52948],{"class":73},[49,93259,52344],{"class":51831},[49,93261,51838],{"class":73},[49,93263,93264,93266,93268],{"class":51,"line":17542},[49,93265,52316],{"class":73},[49,93267,52331],{"class":51831},[49,93269,51838],{"class":73},[49,93271,93272],{"class":51,"line":17547},[49,93273,399],{"emptyLinePlaceholder":398},[49,93275,93276,93278,93280],{"class":51,"line":17552},[49,93277,52316],{"class":73},[49,93279,51166],{"class":51831},[49,93281,51838],{"class":73},[757,93283,93284],{},"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":27,"searchDepth":63,"depth":63,"links":93286},[93287,93292,93296,93297,93298,93303,93308,93309,93310,93311,93318,93323,93324,93334,93338,93339,93343],{"id":77222,"depth":63,"text":77223,"children":93288},[93289,93290,93291],{"id":77226,"depth":70,"text":77227},{"id":77251,"depth":70,"text":77252},{"id":77263,"depth":70,"text":77264},{"id":77275,"depth":63,"text":77276,"children":93293},[93294,93295],{"id":77279,"depth":70,"text":77280},{"id":77294,"depth":70,"text":77295},{"id":77346,"depth":63,"text":77347},{"id":77390,"depth":63,"text":77391},{"id":77407,"depth":63,"text":77408,"children":93299},[93300,93301,93302],{"id":77411,"depth":70,"text":77412},{"id":77424,"depth":70,"text":77425},{"id":77529,"depth":70,"text":77530},{"id":77818,"depth":63,"text":77819,"children":93304},[93305,93306,93307],{"id":77822,"depth":70,"text":77823},{"id":78265,"depth":70,"text":78266},{"id":78676,"depth":70,"text":78677},{"id":78739,"depth":63,"text":78740},{"id":78818,"depth":63,"text":78819},{"id":78911,"depth":63,"text":78912},{"id":80756,"depth":63,"text":80757,"children":93312},[93313,93314,93315,93316,93317],{"id":80760,"depth":70,"text":80761},{"id":80772,"depth":70,"text":80773},{"id":80991,"depth":70,"text":80992},{"id":81009,"depth":70,"text":81010},{"id":81069,"depth":70,"text":81070},{"id":85337,"depth":63,"text":85338,"children":93319},[93320,93321,93322],{"id":85341,"depth":70,"text":85342},{"id":85359,"depth":70,"text":85360},{"id":85385,"depth":70,"text":85386},{"id":85394,"depth":63,"text":85395},{"id":85416,"depth":63,"text":85417,"children":93325},[93326,93327,93328,93329,93330,93331,93332,93333],{"id":85420,"depth":70,"text":85421},{"id":85681,"depth":70,"text":85682},{"id":85867,"depth":70,"text":85868},{"id":86234,"depth":70,"text":86235},{"id":86350,"depth":70,"text":86351},{"id":86386,"depth":70,"text":86387},{"id":86433,"depth":70,"text":86434},{"id":86467,"depth":70,"text":86468},{"id":87830,"depth":63,"text":87831,"children":93335},[93336,93337],{"id":87834,"depth":70,"text":87835},{"id":87871,"depth":70,"text":87872},{"id":89226,"depth":63,"text":89227},{"id":89597,"depth":63,"text":89598,"children":93340},[93341,93342],{"id":89601,"depth":70,"text":89602},{"id":89635,"depth":70,"text":89636},{"id":90364,"depth":63,"text":90365,"children":93344},[93345,93346,93347,93348],{"id":90368,"depth":70,"text":90369},{"id":91326,"depth":70,"text":91327},{"id":92268,"depth":70,"text":92269},{"id":92342,"depth":70,"text":92343},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77211,"description":24072},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93355,"title":93356,"body":93357,"description":93368,"extension":766,"meta":93369,"navigation":398,"path":93371,"seo":93372,"stem":93373,"__hash__":93374},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93358,"toc":93366},[93359],[14,93360,93361,93362],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[124,93363,93364],{"href":93364,"rel":93365},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[128],{"title":27,"searchDepth":63,"depth":63,"links":93367},[],"三件套第三套学习",{"category":93370},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93356,"description":93368},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93376,"title":93377,"body":93378,"description":24072,"extension":766,"meta":93483,"navigation":398,"path":93484,"seo":93485,"stem":93486,"__hash__":93487},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93379,"toc":93478},[93380,93387,93390,93393,93396,93400,93409,93412,93415,93419,93428,93431,93435,93438,93458,93461,93475],[14,93381,93382],{},[124,93383,93386],{"href":93384,"rel":93385},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[128],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93388,93377],{"id":93389},"_1安装",[14,93391,93392],{},"numpy是科学计算基础库,底层是C语言",[14,93394,93395],{},"三种方式：",[782,93397,93399],{"id":93398},"_11-通过pip安装","1.1 通过pip安装",[40,93401,93403],{"className":30909,"code":93402,"language":30911,"meta":27,"style":27},"pip install numpy\n",[46,93404,93405],{"__ignoreMap":27},[49,93406,93407],{"class":51,"line":52},[49,93408,93402],{"class":73},[14,93410,93411],{},"首选方式，自动处理依赖项",[14,93413,93414],{},"在提示系统命令符中使用cmd",[782,93416,93418],{"id":93417},"_12-通过anaconda安装","1.2 通过Anaconda安装",[40,93420,93422],{"className":30909,"code":93421,"language":30911,"meta":27,"style":27},"conda install numpy\n",[46,93423,93424],{"__ignoreMap":27},[49,93425,93426],{"class":51,"line":52},[49,93427,93421],{"class":73},[14,93429,93430],{},"自动解决环境依赖",[782,93432,93434],{"id":93433},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,93436,93437],{},"对于Debian\u002FUbuntu",[40,93439,93441],{"className":30909,"code":93440,"language":30911,"meta":27,"style":27},"sudo apt-get install python3-numpy\n",[46,93442,93443],{"__ignoreMap":27},[49,93444,93445,93448,93450,93453,93455],{"class":51,"line":52},[49,93446,93447],{"class":73},"sudo apt",[49,93449,1361],{"class":77},[49,93451,93452],{"class":73},"get install python3",[49,93454,1361],{"class":77},[49,93456,93457],{"class":73},"numpy\n",[14,93459,93460],{},"对于Fedora:",[40,93462,93464],{"className":30909,"code":93463,"language":30911,"meta":27,"style":27},"sudo dnf install python3-numpy\n",[46,93465,93466],{"__ignoreMap":27},[49,93467,93468,93471,93473],{"class":51,"line":52},[49,93469,93470],{"class":73},"sudo dnf install python3",[49,93472,1361],{"class":77},[49,93474,93457],{"class":73},[757,93476,93477],{},"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":27,"searchDepth":63,"depth":63,"links":93479},[93480,93481,93482],{"id":93398,"depth":63,"text":93399},{"id":93417,"depth":63,"text":93418},{"id":93433,"depth":63,"text":93434},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93377,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93489,"title":93490,"body":93491,"description":24072,"extension":766,"meta":93604,"navigation":398,"path":93605,"seo":93606,"stem":93607,"__hash__":93608},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93492,"toc":93602},[93493,93496,93499,93502,93505,93508,93511,93514,93517,93520,93596,93599],[10,93494,93490],{"id":93495},"_10算数函数",[14,93497,93498],{},"加减乘除运算跟python基础语法没区别",[14,93500,93501],{},"除了python那种方法外还可以使用函数",[14,93503,93504],{},"加：np.add(a,b)",[14,93506,93507],{},"减：np.subtract(a,b)",[14,93509,93510],{},"乘：np.multiply(a,b)",[14,93512,93513],{},"除：np.divide(a,b) == a\u002Fb",[14,93515,93516],{},"取余：np.mod(a,b) == a%b",[14,93518,93519],{},"必须会的用法：",[40,93521,93523],{"className":30909,"code":93522,"language":30911,"meta":27,"style":27},"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",[46,93524,93525,93547,93568,93578,93591],{"__ignoreMap":27},[49,93526,93527,93529,93531,93534,93536,93539,93541,93543,93545],{"class":51,"line":52},[49,93528,124],{"class":73},[49,93530,78],{"class":77},[49,93532,93533],{"class":73},"np.arange(",[49,93535,1249],{"class":159},[49,93537,93538],{"class":73},").reshape(",[49,93540,909],{"class":159},[49,93542,1207],{"class":73},[49,93544,909],{"class":159},[49,93546,847],{"class":73},[49,93548,93549,93551,93553,93556,93558,93560,93562,93564,93566],{"class":51,"line":63},[49,93550,1092],{"class":73},[49,93552,78],{"class":77},[49,93554,93555],{"class":73},"np.array([",[49,93557,1275],{"class":159},[49,93559,1207],{"class":73},[49,93561,1275],{"class":159},[49,93563,1207],{"class":73},[49,93565,1275],{"class":159},[49,93567,5354],{"class":73},[49,93569,93570,93573,93575],{"class":51,"line":70},[49,93571,93572],{"class":73},"result",[49,93574,78],{"class":77},[49,93576,93577],{"class":73},"np.empty_like(a)\n",[49,93579,93580,93583,93586,93588],{"class":51,"line":219},[49,93581,93582],{"class":73},"np.add(a,b,",[49,93584,93585],{"class":5913},"out",[49,93587,78],{"class":77},[49,93589,93590],{"class":73},"result)\n",[49,93592,93593],{"class":51,"line":233},[49,93594,93595],{"class":73},"result\n",[14,93597,93598],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[757,93600,93601],{},"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":27,"searchDepth":63,"depth":63,"links":93603},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93490,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93610,"title":93611,"body":93612,"description":24072,"extension":766,"meta":94374,"navigation":398,"path":94375,"seo":94376,"stem":94377,"__hash__":94378},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93613,"toc":94361},[93614,93617,93620,93623,93627,93666,93670,93714,93774,93778,93781,93820,93823,93868,93872,93908,93912,93981,93985,94049,94053,94056,94059,94062,94065,94101,94105,94145,94149,94221,94224,94228,94291,94295,94358],[10,93615,93611],{"id":93616},"_11统计函数",[14,93618,93619],{},"sum max min mean",[14,93621,93622],{},"这些有axis参数，可以指定方向",[782,93624,93626],{"id":93625},"_111-sum求和函数","11.1 sum()求和函数",[40,93628,93630],{"className":30909,"code":93629,"language":30911,"meta":27,"style":27},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[46,93631,93632,93637,93658],{"__ignoreMap":27},[49,93633,93634],{"class":51,"line":52},[49,93635,93636],{"class":66},"#创建一维数组\n",[49,93638,93639,93641,93643,93646,93648,93650,93652,93654,93656],{"class":51,"line":63},[49,93640,124],{"class":73},[49,93642,78],{"class":77},[49,93644,93645],{"class":73},"np.random.randint(",[49,93647,1047],{"class":159},[49,93649,1207],{"class":73},[49,93651,1140],{"class":159},[49,93653,1207],{"class":73},[49,93655,1529],{"class":159},[49,93657,847],{"class":73},[49,93659,93660,93663],{"class":51,"line":70},[49,93661,93662],{"class":73},"np.sum(a)",[49,93664,93665],{"class":66},"#求和\n",[782,93667,93669],{"id":93668},"_112-max求最大值函数","11.2 max()求最大值函数",[40,93671,93673],{"className":30909,"code":93672,"language":30911,"meta":27,"style":27},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[46,93674,93675,93679,93699,93704,93709],{"__ignoreMap":27},[49,93676,93677],{"class":51,"line":52},[49,93678,93636],{"class":66},[49,93680,93681,93683,93685,93687,93689,93691,93693,93695,93697],{"class":51,"line":63},[49,93682,124],{"class":73},[49,93684,78],{"class":77},[49,93686,93645],{"class":73},[49,93688,1047],{"class":159},[49,93690,1207],{"class":73},[49,93692,1140],{"class":159},[49,93694,1207],{"class":73},[49,93696,1529],{"class":159},[49,93698,847],{"class":73},[49,93700,93701],{"class":51,"line":70},[49,93702,93703],{"class":73},"np.max(a)\n",[49,93705,93706],{"class":51,"line":219},[49,93707,93708],{"class":66},"#最大索引(求最大元素的索引)arg\n",[49,93710,93711],{"class":51,"line":233},[49,93712,93713],{"class":73},"np.argmax(a)\n",[40,93715,93717],{"className":30909,"code":93716,"language":30911,"meta":27,"style":27},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[46,93718,93719,93740,93760,93764],{"__ignoreMap":27},[49,93720,93721,93723,93725,93728,93730,93732,93734,93736,93738],{"class":51,"line":52},[49,93722,11616],{"class":73},[49,93724,78],{"class":77},[49,93726,93727],{"class":73}," np.array([",[49,93729,1047],{"class":159},[49,93731,13132],{"class":73},[49,93733,1148],{"class":159},[49,93735,13132],{"class":73},[49,93737,909],{"class":159},[49,93739,5354],{"class":73},[49,93741,93742,93744,93746,93748,93750,93752,93754,93756,93758],{"class":51,"line":63},[49,93743,11642],{"class":73},[49,93745,78],{"class":77},[49,93747,93727],{"class":73},[49,93749,909],{"class":159},[49,93751,13132],{"class":73},[49,93753,915],{"class":159},[49,93755,13132],{"class":73},[49,93757,1122],{"class":159},[49,93759,5354],{"class":73},[49,93761,93762],{"class":51,"line":70},[49,93763,399],{"emptyLinePlaceholder":398},[49,93765,93766,93768,93771],{"class":51,"line":219},[49,93767,30946],{"class":159},[49,93769,93770],{"class":73},"(np.maximum(a, b))   ",[49,93772,93773],{"class":66},"# [3 5 4]，每个位置上取较大值\n",[782,93775,93777],{"id":93776},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93779,93780],{},"①一维数组：",[40,93782,93784],{"className":30909,"code":93783,"language":30911,"meta":27,"style":27},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[46,93785,93786,93790,93810,93815],{"__ignoreMap":27},[49,93787,93788],{"class":51,"line":52},[49,93789,93636],{"class":66},[49,93791,93792,93794,93796,93798,93800,93802,93804,93806,93808],{"class":51,"line":63},[49,93793,124],{"class":73},[49,93795,78],{"class":77},[49,93797,93645],{"class":73},[49,93799,1047],{"class":159},[49,93801,1207],{"class":73},[49,93803,1140],{"class":159},[49,93805,1207],{"class":73},[49,93807,1529],{"class":159},[49,93809,847],{"class":73},[49,93811,93812],{"class":51,"line":70},[49,93813,93814],{"class":66},"#求平均值\n",[49,93816,93817],{"class":51,"line":219},[49,93818,93819],{"class":73},"np.mean(a)\n",[14,93821,93822],{},"②二维数组",[40,93824,93826],{"className":30909,"code":93825,"language":30911,"meta":27,"style":27},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[46,93827,93828,93833,93858,93863],{"__ignoreMap":27},[49,93829,93830],{"class":51,"line":52},[49,93831,93832],{"class":66},"#二维数组\n",[49,93834,93835,93838,93840,93842,93844,93846,93848,93850,93852,93854,93856],{"class":51,"line":63},[49,93836,93837],{"class":73},"aa",[49,93839,78],{"class":77},[49,93841,93533],{"class":73},[49,93843,1047],{"class":159},[49,93845,1207],{"class":73},[49,93847,1352],{"class":159},[49,93849,93538],{"class":73},[49,93851,909],{"class":159},[49,93853,1207],{"class":73},[49,93855,1122],{"class":159},[49,93857,847],{"class":73},[49,93859,93860],{"class":51,"line":70},[49,93861,93862],{"class":66},"#对数组中的所有数求平均\n",[49,93864,93865],{"class":51,"line":219},[49,93866,93867],{"class":73},"np.mean(aa)\n",[782,93869,93871],{"id":93870},"_114-median求中位数函数","11.4 median()求中位数函数",[40,93873,93875],{"className":30909,"code":93874,"language":30911,"meta":27,"style":27},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[46,93876,93877,93882,93898,93903],{"__ignoreMap":27},[49,93878,93879],{"class":51,"line":52},[49,93880,93881],{"class":66},"#求中位数\n",[49,93883,93884,93886,93888,93890,93892,93894,93896],{"class":51,"line":63},[49,93885,1092],{"class":73},[49,93887,78],{"class":77},[49,93889,93533],{"class":73},[49,93891,1047],{"class":159},[49,93893,1207],{"class":73},[49,93895,1275],{"class":159},[49,93897,847],{"class":73},[49,93899,93900],{"class":51,"line":70},[49,93901,93902],{"class":73},"np.median(b)\n",[49,93904,93905],{"class":51,"line":219},[49,93906,93907],{"class":66},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[782,93909,93911],{"id":93910},"_115-power求幂运算函数","11.5 power()求幂运算函数",[40,93913,93915],{"className":30909,"code":93914,"language":30911,"meta":27,"style":27},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[46,93916,93917,93933,93938,93943,93952,93957,93966],{"__ignoreMap":27},[49,93918,93919,93921,93923,93925,93927,93929,93931],{"class":51,"line":52},[49,93920,1092],{"class":73},[49,93922,78],{"class":77},[49,93924,93533],{"class":73},[49,93926,1047],{"class":159},[49,93928,1207],{"class":73},[49,93930,1275],{"class":159},[49,93932,847],{"class":73},[49,93934,93935],{"class":51,"line":63},[49,93936,93937],{"class":66},"#幂运算\n",[49,93939,93940],{"class":51,"line":70},[49,93941,93942],{"class":66},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[49,93944,93945,93948,93950],{"class":51,"line":219},[49,93946,93947],{"class":73},"np.power(b,",[49,93949,915],{"class":159},[49,93951,847],{"class":73},[49,93953,93954],{"class":51,"line":233},[49,93955,93956],{"class":66},"#或者以下代码，将数据存储起来\n",[49,93958,93959,93961,93963],{"class":51,"line":241},[49,93960,1674],{"class":73},[49,93962,78],{"class":77},[49,93964,93965],{"class":73},"np.empty_like(b)\n",[49,93967,93968,93970,93972,93974,93976,93978],{"class":51,"line":1920},[49,93969,93947],{"class":73},[49,93971,915],{"class":159},[49,93973,1207],{"class":73},[49,93975,93585],{"class":5913},[49,93977,78],{"class":77},[49,93979,93980],{"class":73},"y)\n",[782,93982,93984],{"id":93983},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[40,93986,93988],{"className":30909,"code":93987,"language":30911,"meta":27,"style":27},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[46,93989,93990,94006,94011,94016,94020,94038],{"__ignoreMap":27},[49,93991,93992,93994,93996,93998,94000,94002,94004],{"class":51,"line":52},[49,93993,1092],{"class":73},[49,93995,78],{"class":77},[49,93997,93533],{"class":73},[49,93999,1047],{"class":159},[49,94001,1207],{"class":73},[49,94003,1275],{"class":159},[49,94005,847],{"class":73},[49,94007,94008],{"class":51,"line":63},[49,94009,94010],{"class":66},"#开方\n",[49,94012,94013],{"class":51,"line":70},[49,94014,94015],{"class":73},"np.sqrt(b)\n",[49,94017,94018],{"class":51,"line":219},[49,94019,93956],{"class":66},[49,94021,94022,94024,94026,94029,94032,94034,94036],{"class":51,"line":233},[49,94023,1674],{"class":73},[49,94025,78],{"class":77},[49,94027,94028],{"class":73},"np.empty_like(b,",[49,94030,94031],{"class":5913},"dtype",[49,94033,78],{"class":77},[49,94035,880],{"class":159},[49,94037,847],{"class":73},[49,94039,94040,94043,94045,94047],{"class":51,"line":241},[49,94041,94042],{"class":73},"np.sqrt(b,",[49,94044,93585],{"class":5913},[49,94046,78],{"class":77},[49,94048,93980],{"class":73},[782,94050,94052],{"id":94051},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,94054,94055],{},"对数组中的元素累计求和，可指定轴",[14,94057,94058],{},"#累计求和的意思是：",[14,94060,94061],{},"a = np.array([1, 2, 3, 4])",[14,94063,94064],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[40,94066,94068],{"className":30909,"code":94067,"language":30911,"meta":27,"style":27},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[46,94069,94070,94086,94091,94096],{"__ignoreMap":27},[49,94071,94072,94074,94076,94078,94080,94082,94084],{"class":51,"line":52},[49,94073,1092],{"class":73},[49,94075,78],{"class":77},[49,94077,93533],{"class":73},[49,94079,1047],{"class":159},[49,94081,1207],{"class":73},[49,94083,1275],{"class":159},[49,94085,847],{"class":73},[49,94087,94088],{"class":51,"line":63},[49,94089,94090],{"class":73},"np.cumsum(b)\n",[49,94092,94093],{"class":51,"line":70},[49,94094,94095],{"class":66},"#结果：\n",[49,94097,94098],{"class":51,"line":219},[49,94099,94100],{"class":66},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[782,94102,94104],{"id":94103},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[40,94106,94108],{"className":30909,"code":94107,"language":30911,"meta":27,"style":27},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[46,94109,94110,94126,94131,94136,94140],{"__ignoreMap":27},[49,94111,94112,94114,94116,94118,94120,94122,94124],{"class":51,"line":52},[49,94113,1092],{"class":73},[49,94115,78],{"class":77},[49,94117,93533],{"class":73},[49,94119,1047],{"class":159},[49,94121,1207],{"class":73},[49,94123,1275],{"class":159},[49,94125,847],{"class":73},[49,94127,94128],{"class":51,"line":63},[49,94129,94130],{"class":66},"#对数组中的元素累计求积，可指定轴\n",[49,94132,94133],{"class":51,"line":70},[49,94134,94135],{"class":73},"np.cumprod(b)\n",[49,94137,94138],{"class":51,"line":219},[49,94139,94095],{"class":66},[49,94141,94142],{"class":51,"line":233},[49,94143,94144],{"class":66},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[782,94146,94148],{"id":94147},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[40,94150,94152],{"className":30909,"code":94151,"language":30911,"meta":27,"style":27},"#删除数组中的重复数据，并对数据进行排序\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",[46,94153,94154,94159,94207,94212,94216],{"__ignoreMap":27},[49,94155,94156],{"class":51,"line":52},[49,94157,94158],{"class":66},"#删除数组中的重复数据，并对数据进行排序\n",[49,94160,94161,94163,94165,94167,94169,94171,94173,94175,94177,94179,94181,94183,94185,94187,94189,94191,94193,94195,94197,94199,94201,94203,94205],{"class":51,"line":63},[49,94162,124],{"class":73},[49,94164,78],{"class":77},[49,94166,93555],{"class":73},[49,94168,1047],{"class":159},[49,94170,1207],{"class":73},[49,94172,915],{"class":159},[49,94174,1207],{"class":73},[49,94176,909],{"class":159},[49,94178,1207],{"class":73},[49,94180,1327],{"class":159},[49,94182,1207],{"class":73},[49,94184,909],{"class":159},[49,94186,1207],{"class":73},[49,94188,1275],{"class":159},[49,94190,1207],{"class":73},[49,94192,1027],{"class":159},[49,94194,1207],{"class":73},[49,94196,1021],{"class":159},[49,94198,1207],{"class":73},[49,94200,1604],{"class":159},[49,94202,1207],{"class":73},[49,94204,1122],{"class":159},[49,94206,5354],{"class":73},[49,94208,94209],{"class":51,"line":70},[49,94210,94211],{"class":73},"np.unique(a)\n",[49,94213,94214],{"class":51,"line":219},[49,94215,94095],{"class":66},[49,94217,94218],{"class":51,"line":233},[49,94219,94220],{"class":66},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,94222,94223],{},"升序形式排序",[782,94225,94227],{"id":94226},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[40,94229,94231],{"className":30909,"code":94230,"language":30911,"meta":27,"style":27},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[46,94232,94233,94281,94286],{"__ignoreMap":27},[49,94234,94235,94237,94239,94241,94243,94245,94247,94249,94251,94253,94255,94257,94259,94261,94263,94265,94267,94269,94271,94273,94275,94277,94279],{"class":51,"line":52},[49,94236,124],{"class":73},[49,94238,78],{"class":77},[49,94240,93555],{"class":73},[49,94242,1047],{"class":159},[49,94244,1207],{"class":73},[49,94246,915],{"class":159},[49,94248,1207],{"class":73},[49,94250,909],{"class":159},[49,94252,1207],{"class":73},[49,94254,1327],{"class":159},[49,94256,1207],{"class":73},[49,94258,909],{"class":159},[49,94260,1207],{"class":73},[49,94262,1275],{"class":159},[49,94264,1207],{"class":73},[49,94266,1027],{"class":159},[49,94268,1207],{"class":73},[49,94270,1021],{"class":159},[49,94272,1207],{"class":73},[49,94274,1604],{"class":159},[49,94276,1207],{"class":73},[49,94278,1122],{"class":159},[49,94280,5354],{"class":73},[49,94282,94283],{"class":51,"line":63},[49,94284,94285],{"class":66},"#返回数组中非零元素的索引\n",[49,94287,94288],{"class":51,"line":70},[49,94289,94290],{"class":73},"np.nonzero(a)\n",[782,94292,94294],{"id":94293},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[40,94296,94298],{"className":30909,"code":94297,"language":30911,"meta":27,"style":27},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[46,94299,94300,94348,94353],{"__ignoreMap":27},[49,94301,94302,94304,94306,94308,94310,94312,94314,94316,94318,94320,94322,94324,94326,94328,94330,94332,94334,94336,94338,94340,94342,94344,94346],{"class":51,"line":52},[49,94303,124],{"class":73},[49,94305,78],{"class":77},[49,94307,93555],{"class":73},[49,94309,1047],{"class":159},[49,94311,1207],{"class":73},[49,94313,915],{"class":159},[49,94315,1207],{"class":73},[49,94317,909],{"class":159},[49,94319,1207],{"class":73},[49,94321,1327],{"class":159},[49,94323,1207],{"class":73},[49,94325,909],{"class":159},[49,94327,1207],{"class":73},[49,94329,1275],{"class":159},[49,94331,1207],{"class":73},[49,94333,1027],{"class":159},[49,94335,1207],{"class":73},[49,94337,1021],{"class":159},[49,94339,1207],{"class":73},[49,94341,1604],{"class":159},[49,94343,1207],{"class":73},[49,94345,1122],{"class":159},[49,94347,5354],{"class":73},[49,94349,94350],{"class":51,"line":63},[49,94351,94352],{"class":66},"#计算一组数中最大值与最小值的差，可指定轴\n",[49,94354,94355],{"class":51,"line":70},[49,94356,94357],{"class":73},"np.ptp(a)\n",[757,94359,94360],{},"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":27,"searchDepth":63,"depth":63,"links":94362},[94363,94364,94365,94366,94367,94368,94369,94370,94371,94372,94373],{"id":93625,"depth":63,"text":93626},{"id":93668,"depth":63,"text":93669},{"id":93776,"depth":63,"text":93777},{"id":93870,"depth":63,"text":93871},{"id":93910,"depth":63,"text":93911},{"id":93983,"depth":63,"text":93984},{"id":94051,"depth":63,"text":94052},{"id":94103,"depth":63,"text":94104},{"id":94147,"depth":63,"text":94148},{"id":94226,"depth":63,"text":94227},{"id":94293,"depth":63,"text":94294},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93611,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94380,"title":94381,"body":94382,"description":24072,"extension":766,"meta":95037,"navigation":398,"path":95038,"seo":95039,"stem":95040,"__hash__":95041},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94383,"toc":95025},[94384,94387,94391,94394,94610,94614,94617,94826,94830,94896,94901,94905,94908,94911,94949,94953,94956,94961,94965,94968,94971,94976,94980,94983,94987,94990,94993,94998,95002,95005,95008,95013,95017,95022],[10,94385,94381],{"id":94386},"_12其他常用函数",[782,94388,94390],{"id":94389},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,94392,94393],{},"将数组的数据按照行列复制扩展",[40,94395,94397],{"className":30909,"code":94396,"language":30911,"meta":27,"style":27},"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",[46,94398,94399,94415,94424,94428,94433,94438,94451,94455,94460,94465,94470,94474,94479,94503,94515,94519,94523,94528,94533,94538,94543,94547,94560,94564,94568,94573,94578,94583,94588,94593,94597,94601,94606],{"__ignoreMap":27},[49,94400,94401,94403,94405,94407,94409,94411,94413],{"class":51,"line":52},[49,94402,124],{"class":73},[49,94404,78],{"class":77},[49,94406,93533],{"class":73},[49,94408,1047],{"class":159},[49,94410,1207],{"class":73},[49,94412,1148],{"class":159},[49,94414,847],{"class":73},[49,94416,94417,94420,94422],{"class":51,"line":63},[49,94418,94419],{"class":73},"np.tile(a,",[49,94421,915],{"class":159},[49,94423,847],{"class":73},[49,94425,94426],{"class":51,"line":70},[49,94427,94095],{"class":66},[49,94429,94430],{"class":51,"line":219},[49,94431,94432],{"class":66},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[49,94434,94435],{"class":51,"line":233},[49,94436,94437],{"class":66},"#行复制两次，列复制三次\n",[49,94439,94440,94443,94445,94447,94449],{"class":51,"line":241},[49,94441,94442],{"class":73},"np.tile(a,(",[49,94444,915],{"class":159},[49,94446,1207],{"class":73},[49,94448,909],{"class":159},[49,94450,31028],{"class":73},[49,94452,94453],{"class":51,"line":1920},[49,94454,94095],{"class":66},[49,94456,94457],{"class":51,"line":2011},[49,94458,94459],{"class":59},"'''\n",[49,94461,94462],{"class":51,"line":2017},[49,94463,94464],{"class":59},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[49,94466,94467],{"class":51,"line":2029},[49,94468,94469],{"class":59},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[49,94471,94472],{"class":51,"line":2311},[49,94473,94459],{"class":59},[49,94475,94476],{"class":51,"line":2316},[49,94477,94478],{"class":66},"#创建二维数组\n",[49,94480,94481,94483,94485,94487,94489,94491,94493,94495,94497,94499,94501],{"class":51,"line":2322},[49,94482,93837],{"class":73},[49,94484,78],{"class":77},[49,94486,93533],{"class":73},[49,94488,1047],{"class":159},[49,94490,1207],{"class":73},[49,94492,1352],{"class":159},[49,94494,93538],{"class":73},[49,94496,1122],{"class":159},[49,94498,1207],{"class":73},[49,94500,909],{"class":159},[49,94502,847],{"class":73},[49,94504,94505,94508,94510,94512],{"class":51,"line":2327},[49,94506,94507],{"class":73},"np.tile(aa,",[49,94509,915],{"class":159},[49,94511,1258],{"class":73},[49,94513,94514],{"class":66},"#一个数的时候就是行\n",[49,94516,94517],{"class":51,"line":2341},[49,94518,94095],{"class":66},[49,94520,94521],{"class":51,"line":2346},[49,94522,94459],{"class":59},[49,94524,94525],{"class":51,"line":2352},[49,94526,94527],{"class":59},"array([[ 1,  2,  3,  1,  2,  3],\n",[49,94529,94530],{"class":51,"line":2373},[49,94531,94532],{"class":59},"       [ 4,  5,  6,  4,  5,  6],\n",[49,94534,94535],{"class":51,"line":2378},[49,94536,94537],{"class":59},"       [ 7,  8,  9,  7,  8,  9],\n",[49,94539,94540],{"class":51,"line":2392},[49,94541,94542],{"class":59},"       [10, 11, 12, 10, 11, 12]])\n",[49,94544,94545],{"class":51,"line":2397},[49,94546,94459],{"class":59},[49,94548,94549,94552,94554,94556,94558],{"class":51,"line":2426},[49,94550,94551],{"class":73},"np.tile(aa,(",[49,94553,915],{"class":159},[49,94555,1207],{"class":73},[49,94557,909],{"class":159},[49,94559,31028],{"class":73},[49,94561,94562],{"class":51,"line":2431},[49,94563,94095],{"class":66},[49,94565,94566],{"class":51,"line":2448},[49,94567,94459],{"class":59},[49,94569,94570],{"class":51,"line":2453},[49,94571,94572],{"class":59},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[49,94574,94575],{"class":51,"line":2458},[49,94576,94577],{"class":59},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[49,94579,94580],{"class":51,"line":2463},[49,94581,94582],{"class":59},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[49,94584,94585],{"class":51,"line":2477},[49,94586,94587],{"class":59},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[49,94589,94590],{"class":51,"line":2482},[49,94591,94592],{"class":59},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[49,94594,94595],{"class":51,"line":3274},[49,94596,94577],{"class":59},[49,94598,94599],{"class":51,"line":3288},[49,94600,94582],{"class":59},[49,94602,94603],{"class":51,"line":3296},[49,94604,94605],{"class":59},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[49,94607,94608],{"class":51,"line":3301},[49,94609,94459],{"class":59},[782,94611,94613],{"id":94612},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94615,94616],{},"repeat()将数组中的每个元素重复若干次",[40,94618,94620],{"className":30909,"code":94619,"language":30911,"meta":27,"style":27},"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",[46,94621,94622,94638,94647,94651,94656,94680,94685,94694,94698,94703,94707,94712,94728,94732,94736,94741,94746,94751,94755,94760,94764,94769,94774,94778,94794,94798,94802,94807,94812,94817,94822],{"__ignoreMap":27},[49,94623,94624,94626,94628,94630,94632,94634,94636],{"class":51,"line":52},[49,94625,124],{"class":73},[49,94627,78],{"class":77},[49,94629,93533],{"class":73},[49,94631,1047],{"class":159},[49,94633,1207],{"class":73},[49,94635,1148],{"class":159},[49,94637,847],{"class":73},[49,94639,94640,94643,94645],{"class":51,"line":63},[49,94641,94642],{"class":73},"np.repeat(a,",[49,94644,909],{"class":159},[49,94646,847],{"class":73},[49,94648,94649],{"class":51,"line":70},[49,94650,94095],{"class":66},[49,94652,94653],{"class":51,"line":219},[49,94654,94655],{"class":66},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[49,94657,94658,94660,94662,94664,94666,94668,94670,94672,94674,94676,94678],{"class":51,"line":233},[49,94659,93837],{"class":73},[49,94661,78],{"class":77},[49,94663,93533],{"class":73},[49,94665,1047],{"class":159},[49,94667,1207],{"class":73},[49,94669,1352],{"class":159},[49,94671,93538],{"class":73},[49,94673,1122],{"class":159},[49,94675,1207],{"class":73},[49,94677,909],{"class":159},[49,94679,847],{"class":73},[49,94681,94682],{"class":51,"line":241},[49,94683,94684],{"class":66},"#这个重复之后二维变成一维\n",[49,94686,94687,94690,94692],{"class":51,"line":1920},[49,94688,94689],{"class":73},"np.repeat(aa,",[49,94691,915],{"class":159},[49,94693,847],{"class":73},[49,94695,94696],{"class":51,"line":2011},[49,94697,94459],{"class":59},[49,94699,94700],{"class":51,"line":2017},[49,94701,94702],{"class":59},"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",[49,94704,94705],{"class":51,"line":2029},[49,94706,94459],{"class":59},[49,94708,94709],{"class":51,"line":2311},[49,94710,94711],{"class":66},"#指定axis\n",[49,94713,94714,94716,94718,94720,94722,94724,94726],{"class":51,"line":2316},[49,94715,94689],{"class":73},[49,94717,915],{"class":159},[49,94719,1207],{"class":73},[49,94721,48045],{"class":5913},[49,94723,78],{"class":77},[49,94725,1021],{"class":159},[49,94727,847],{"class":73},[49,94729,94730],{"class":51,"line":2322},[49,94731,94095],{"class":66},[49,94733,94734],{"class":51,"line":2327},[49,94735,94459],{"class":59},[49,94737,94738],{"class":51,"line":2341},[49,94739,94740],{"class":59},"array([[ 1,  2,  3],\n",[49,94742,94743],{"class":51,"line":2346},[49,94744,94745],{"class":59},"       [ 1,  2,  3],\n",[49,94747,94748],{"class":51,"line":2352},[49,94749,94750],{"class":59},"       [ 4,  5,  6],\n",[49,94752,94753],{"class":51,"line":2373},[49,94754,94750],{"class":59},[49,94756,94757],{"class":51,"line":2378},[49,94758,94759],{"class":59},"       [ 7,  8,  9],\n",[49,94761,94762],{"class":51,"line":2392},[49,94763,94759],{"class":59},[49,94765,94766],{"class":51,"line":2397},[49,94767,94768],{"class":59},"       [10, 11, 12],\n",[49,94770,94771],{"class":51,"line":2426},[49,94772,94773],{"class":59},"       [10, 11, 12]])\n",[49,94775,94776],{"class":51,"line":2431},[49,94777,94459],{"class":59},[49,94779,94780,94782,94784,94786,94788,94790,94792],{"class":51,"line":2448},[49,94781,94689],{"class":73},[49,94783,915],{"class":159},[49,94785,1207],{"class":73},[49,94787,48045],{"class":5913},[49,94789,78],{"class":77},[49,94791,1047],{"class":159},[49,94793,847],{"class":73},[49,94795,94796],{"class":51,"line":2453},[49,94797,94095],{"class":66},[49,94799,94800],{"class":51,"line":2458},[49,94801,94459],{"class":59},[49,94803,94804],{"class":51,"line":2463},[49,94805,94806],{"class":59},"array([[ 1,  1,  2,  2,  3,  3],\n",[49,94808,94809],{"class":51,"line":2477},[49,94810,94811],{"class":59},"       [ 4,  4,  5,  5,  6,  6],\n",[49,94813,94814],{"class":51,"line":2482},[49,94815,94816],{"class":59},"       [ 7,  7,  8,  8,  9,  9],\n",[49,94818,94819],{"class":51,"line":3274},[49,94820,94821],{"class":59},"       [10, 10, 11, 11, 12, 12]])\n",[49,94823,94824],{"class":51,"line":3288},[49,94825,94459],{"class":59},[782,94827,94829],{"id":94828},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[40,94831,94833],{"className":30909,"code":94832,"language":30911,"meta":27,"style":27},"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",[46,94834,94835,94851,94856,94868,94872,94877,94887,94891],{"__ignoreMap":27},[49,94836,94837,94839,94841,94843,94845,94847,94849],{"class":51,"line":52},[49,94838,124],{"class":73},[49,94840,78],{"class":77},[49,94842,93533],{"class":73},[49,94844,1047],{"class":159},[49,94846,1207],{"class":73},[49,94848,1148],{"class":159},[49,94850,847],{"class":73},[49,94852,94853],{"class":51,"line":63},[49,94854,94855],{"class":66},"#array([，2，3，4])\n",[49,94857,94858,94861,94863,94865],{"class":51,"line":70},[49,94859,94860],{"class":73},"np.roll(a,",[49,94862,915],{"class":159},[49,94864,1258],{"class":73},[49,94866,94867],{"class":66},"#传正数向后调多少位，传负数向前调多少位\n",[49,94869,94870],{"class":51,"line":219},[49,94871,94095],{"class":66},[49,94873,94874],{"class":51,"line":233},[49,94875,94876],{"class":66},"#array([3, 4, 1, 2])\n",[49,94878,94879,94881,94883,94885],{"class":51,"line":241},[49,94880,94860],{"class":73},[49,94882,1361],{"class":77},[49,94884,1047],{"class":159},[49,94886,847],{"class":73},[49,94888,94889],{"class":51,"line":1920},[49,94890,94095],{"class":66},[49,94892,94893],{"class":51,"line":2011},[49,94894,94895],{"class":66},"#array([2, 3, 4, 1])\n",[14,94897,94898],{},[25,94899],{"alt":27,"src":94900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[782,94902,94904],{"id":94903},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94906,94907],{},"resize()重新调整数组的大小",[14,94909,94910],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[40,94912,94914],{"className":30909,"code":94913,"language":30911,"meta":27,"style":27},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[46,94915,94916,94921,94934],{"__ignoreMap":27},[49,94917,94918],{"class":51,"line":52},[49,94919,94920],{"class":66},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[49,94922,94923,94926,94928,94930,94932],{"class":51,"line":63},[49,94924,94925],{"class":73},"np.resize(aa,(",[49,94927,915],{"class":159},[49,94929,1207],{"class":73},[49,94931,1173],{"class":159},[49,94933,31028],{"class":73},[49,94935,94936,94938,94940,94942,94944,94946],{"class":51,"line":70},[49,94937,94925],{"class":73},[49,94939,915],{"class":159},[49,94941,1207],{"class":73},[49,94943,1249],{"class":159},[49,94945,83302],{"class":73},[49,94947,94948],{"class":66},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[782,94950,94952],{"id":94951},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94954,94955],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94957,94958],{},[25,94959],{"alt":27,"src":94960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[782,94962,94964],{"id":94963},"_126-保存加载文件","12.6 保存加载文件",[14,94966,94967],{},"savetxt():将数据保存到txt文件中",[14,94969,94970],{},"loadtxt():从文件加载数据",[14,94972,94973],{},[25,94974],{"alt":27,"src":94975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[782,94977,94979],{"id":94978},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94981,94982],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[782,94984,94986],{"id":94985},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94988,94989],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94991,94992],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94994,94995],{},[25,94996],{"alt":27,"src":94997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[782,94999,95001],{"id":95000},"_129-where语句","12.9 where语句",[14,95003,95004],{},"np.where(条件,x,y)",[14,95006,95007],{},"如果条件为True,对应值为x,否则对应值为y",[14,95009,95010],{},[25,95011],{"alt":27,"src":95012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[782,95014,95016],{"id":95015},"_1210-dot矩阵","12.10 dot()矩阵",[14,95018,95019],{},[25,95020],{"alt":27,"src":95021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[757,95023,95024],{},"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":27,"searchDepth":63,"depth":63,"links":95026},[95027,95028,95029,95030,95031,95032,95033,95034,95035,95036],{"id":94389,"depth":63,"text":94390},{"id":94612,"depth":63,"text":94613},{"id":94828,"depth":63,"text":94829},{"id":94903,"depth":63,"text":94904},{"id":94951,"depth":63,"text":94952},{"id":94963,"depth":63,"text":94964},{"id":94978,"depth":63,"text":94979},{"id":94985,"depth":63,"text":94986},{"id":95000,"depth":63,"text":95001},{"id":95015,"depth":63,"text":95016},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94381,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95043,"title":95044,"body":95045,"description":24072,"extension":766,"meta":95398,"navigation":398,"path":95399,"seo":95400,"stem":95401,"__hash__":95402},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95046,"toc":95396},[95047,95050,95053,95056,95059,95062,95127,95129,95393],[10,95048,95044],{"id":95049},"_13数组排序",[14,95051,95052],{},"排序主要用到的方法是np.sort和np.argsort",[14,95054,95055],{},"其中np.sort()对数组直接排序",[14,95057,95058],{},"而np.argsort()是返回排序后的原始索引",[14,95060,95061],{},"①一维数组",[40,95063,95065],{"className":30909,"code":95064,"language":30911,"meta":27,"style":27},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[46,95066,95067,95071,95111,95119],{"__ignoreMap":27},[49,95068,95069],{"class":51,"line":52},[49,95070,93636],{"class":66},[49,95072,95073,95075,95077,95079,95081,95083,95085,95087,95089,95091,95093,95095,95097,95099,95101,95103,95105,95107,95109],{"class":51,"line":63},[49,95074,124],{"class":73},[49,95076,78],{"class":77},[49,95078,93555],{"class":73},[49,95080,909],{"class":159},[49,95082,1207],{"class":73},[49,95084,1327],{"class":159},[49,95086,1207],{"class":73},[49,95088,1224],{"class":159},[49,95090,1207],{"class":73},[49,95092,1604],{"class":159},[49,95094,1207],{"class":73},[49,95096,1108],{"class":159},[49,95098,1207],{"class":73},[49,95100,1722],{"class":159},[49,95102,1207],{"class":73},[49,95104,1173],{"class":159},[49,95106,1207],{"class":73},[49,95108,1275],{"class":159},[49,95110,5354],{"class":73},[49,95112,95113,95116],{"class":51,"line":70},[49,95114,95115],{"class":73},"np.sort(a)",[49,95117,95118],{"class":66},"#升序排序\n",[49,95120,95121,95124],{"class":51,"line":219},[49,95122,95123],{"class":73},"np.argsort(a)",[49,95125,95126],{"class":66},"#按照元素大小来索引排序\n",[14,95128,93822],{},[40,95130,95132],{"className":30909,"code":95131,"language":30911,"meta":27,"style":27},"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",[46,95133,95134,95146,95172,95177,95181,95186,95191,95196,95201,95205,95213,95217,95222,95227,95232,95237,95241,95246,95259,95263,95268,95273,95278,95283,95287,95292,95304,95308,95312,95316,95320,95324,95328,95333,95348,95353,95362,95367,95371,95375,95380,95384,95389],{"__ignoreMap":27},[49,95135,95136,95139,95141,95143],{"class":51,"line":52},[49,95137,95138],{"class":73},"np.random.seed(",[49,95140,1021],{"class":159},[49,95142,1258],{"class":73},[49,95144,95145],{"class":66},"#保证每次值一样\n",[49,95147,95148,95150,95152,95154,95156,95158,95160,95162,95164,95166,95168,95170],{"class":51,"line":63},[49,95149,93837],{"class":73},[49,95151,78],{"class":77},[49,95153,93645],{"class":73},[49,95155,1140],{"class":159},[49,95157,1207],{"class":73},[49,95159,32027],{"class":5913},[49,95161,78],{"class":77},[49,95163,841],{"class":73},[49,95165,1122],{"class":159},[49,95167,1207],{"class":73},[49,95169,1173],{"class":159},[49,95171,31028],{"class":73},[49,95173,95174],{"class":51,"line":70},[49,95175,95176],{"class":66},"#原数组：\n",[49,95178,95179],{"class":51,"line":219},[49,95180,94459],{"class":59},[49,95182,95183],{"class":51,"line":233},[49,95184,95185],{"class":59},"array([[44, 47, 64, 67, 67,  9],\n",[49,95187,95188],{"class":51,"line":241},[49,95189,95190],{"class":59},"       [83, 21, 36, 87, 70, 88],\n",[49,95192,95193],{"class":51,"line":1920},[49,95194,95195],{"class":59},"       [88, 12, 58, 65, 39, 87],\n",[49,95197,95198],{"class":51,"line":2011},[49,95199,95200],{"class":59},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[49,95202,95203],{"class":51,"line":2017},[49,95204,94459],{"class":59},[49,95206,95207,95210],{"class":51,"line":2029},[49,95208,95209],{"class":73},"np.sort(aa)",[49,95211,95212],{"class":66},"#每行进行了排序\n",[49,95214,95215],{"class":51,"line":2311},[49,95216,94459],{"class":59},[49,95218,95219],{"class":51,"line":2316},[49,95220,95221],{"class":59},"array([[ 9, 44, 47, 64, 67, 67],\n",[49,95223,95224],{"class":51,"line":2322},[49,95225,95226],{"class":59},"       [21, 36, 70, 83, 87, 88],\n",[49,95228,95229],{"class":51,"line":2327},[49,95230,95231],{"class":59},"       [12, 39, 58, 65, 87, 88],\n",[49,95233,95234],{"class":51,"line":2341},[49,95235,95236],{"class":59},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[49,95238,95239],{"class":51,"line":2346},[49,95240,94459],{"class":59},[49,95242,95243],{"class":51,"line":2352},[49,95244,95245],{"class":66},"#axis=0时\n",[49,95247,95248,95251,95253,95255,95257],{"class":51,"line":2373},[49,95249,95250],{"class":73},"np.sort(aa,",[49,95252,48045],{"class":5913},[49,95254,78],{"class":77},[49,95256,1021],{"class":159},[49,95258,847],{"class":73},[49,95260,95261],{"class":51,"line":2378},[49,95262,94459],{"class":59},[49,95264,95265],{"class":51,"line":2392},[49,95266,95267],{"class":59},"array([[44, 12, 36, 37, 25,  9],\n",[49,95269,95270],{"class":51,"line":2397},[49,95271,95272],{"class":59},"       [46, 21, 58, 65, 39, 77],\n",[49,95274,95275],{"class":51,"line":2426},[49,95276,95277],{"class":59},"       [83, 47, 64, 67, 67, 87],\n",[49,95279,95280],{"class":51,"line":2431},[49,95281,95282],{"class":59},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[49,95284,95285],{"class":51,"line":2448},[49,95286,94459],{"class":59},[49,95288,95289],{"class":51,"line":2453},[49,95290,95291],{"class":66},"#axis=1时,为默认值\n",[49,95293,95294,95296,95298,95300,95302],{"class":51,"line":2458},[49,95295,95250],{"class":73},[49,95297,48045],{"class":5913},[49,95299,78],{"class":77},[49,95301,1047],{"class":159},[49,95303,847],{"class":73},[49,95305,95306],{"class":51,"line":2463},[49,95307,94459],{"class":59},[49,95309,95310],{"class":51,"line":2477},[49,95311,95221],{"class":59},[49,95313,95314],{"class":51,"line":2482},[49,95315,95226],{"class":59},[49,95317,95318],{"class":51,"line":3274},[49,95319,95231],{"class":59},[49,95321,95322],{"class":51,"line":3288},[49,95323,95236],{"class":59},[49,95325,95326],{"class":51,"line":3296},[49,95327,94459],{"class":59},[49,95329,95330],{"class":51,"line":3301},[49,95331,95332],{"class":66},"#按最后一列排序\n",[49,95334,95335,95337,95339,95342,95344,95346],{"class":51,"line":3307},[49,95336,1092],{"class":73},[49,95338,78],{"class":77},[49,95340,95341],{"class":73},"aa[:,",[49,95343,1361],{"class":77},[49,95345,1047],{"class":159},[49,95347,33777],{"class":73},[49,95349,95350],{"class":51,"line":3313},[49,95351,95352],{"class":66},"#获取最后一列排好序的索引\n",[49,95354,95355,95357,95359],{"class":51,"line":3318},[49,95356,74589],{"class":73},[49,95358,78],{"class":77},[49,95360,95361],{"class":73},"np.argsort(b)\n",[49,95363,95364],{"class":51,"line":8645},[49,95365,95366],{"class":73},"aa[index]\n",[49,95368,95369],{"class":51,"line":8669},[49,95370,94459],{"class":59},[49,95372,95373],{"class":51,"line":8674},[49,95374,95185],{"class":59},[49,95376,95377],{"class":51,"line":8680},[49,95378,95379],{"class":59},"       [46, 88, 81, 37, 25, 77],\n",[49,95381,95382],{"class":51,"line":8707},[49,95383,95195],{"class":59},[49,95385,95386],{"class":51,"line":8712},[49,95387,95388],{"class":59},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[49,95390,95391],{"class":51,"line":8718},[49,95392,94459],{"class":59},[757,95394,95395],{},"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":27,"searchDepth":63,"depth":63,"links":95397},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95044,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95404,"title":95405,"body":95406,"description":24072,"extension":766,"meta":95436,"navigation":398,"path":95437,"seo":95438,"stem":95439,"__hash__":95440},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95407,"toc":95434},[95408,95411,95414,95417,95420,95423,95426,95429],[10,95409,95405],{"id":95410},"_14广播机制",[14,95412,95413],{},"广播的规则：",[14,95415,95416],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,95418,95419],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,95421,95422],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,95424,95425],{},"3.如果没有维度形状为1，则会引发异常",[14,95427,95428],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,95430,95431],{},[25,95432],{"alt":27,"src":95433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":27,"searchDepth":63,"depth":63,"links":95435},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95405,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95442,"title":95443,"body":95444,"description":24072,"extension":766,"meta":95542,"navigation":398,"path":95543,"seo":95544,"stem":95545,"__hash__":95546},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95445,"toc":95540},[95446,95449,95452,95537],[10,95447,95443],{"id":95448},"_15比较掩码",[14,95450,95451],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[40,95453,95455],{"className":30909,"code":95454,"language":30911,"meta":27,"style":27},"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",[46,95456,95457,95503,95514,95528,95532],{"__ignoreMap":27},[49,95458,95459,95461,95463,95466,95468,95470,95472,95474,95476,95478,95480,95482,95484,95486,95488,95490,95492,95494,95496,95498,95500],{"class":51,"line":52},[49,95460,124],{"class":73},[49,95462,78],{"class":77},[49,95464,95465],{"class":73},"np.array([[",[49,95467,1047],{"class":159},[49,95469,1207],{"class":73},[49,95471,915],{"class":159},[49,95473,1207],{"class":73},[49,95475,909],{"class":159},[49,95477,48561],{"class":73},[49,95479,1301],{"class":159},[49,95481,1207],{"class":73},[49,95483,1327],{"class":159},[49,95485,1207],{"class":73},[49,95487,1352],{"class":159},[49,95489,48561],{"class":73},[49,95491,1554],{"class":159},[49,95493,1207],{"class":73},[49,95495,1579],{"class":159},[49,95497,1207],{"class":73},[49,95499,1604],{"class":159},[49,95501,95502],{"class":73},"]])\n",[49,95504,95505,95507,95509,95511],{"class":51,"line":63},[49,95506,124],{"class":73},[49,95508,1739],{"class":77},[49,95510,1529],{"class":159},[49,95512,95513],{"class":66},"#结果是一个由True,False组成的数组\n",[49,95515,95516,95519,95521,95523,95525],{"class":51,"line":70},[49,95517,95518],{"class":73},"a[a",[49,95520,1739],{"class":77},[49,95522,1529],{"class":159},[49,95524,1769],{"class":73},[49,95526,95527],{"class":66},"#小于20的元素会存到这个数组中\n",[49,95529,95530],{"class":51,"line":219},[49,95531,94095],{"class":66},[49,95533,95534],{"class":51,"line":233},[49,95535,95536],{"class":66},"#array([ 1,  2,  3, 11, 12, 13])\n",[757,95538,95539],{},"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":27,"searchDepth":63,"depth":63,"links":95541},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95443,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95548,"title":95549,"body":95550,"description":24072,"extension":766,"meta":95642,"navigation":398,"path":95643,"seo":95644,"stem":95645,"__hash__":95646},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95551,"toc":95640},[95552,95555,95558,95561,95564,95567,95632,95637],[10,95553,95549],{"id":95554},"_16魔法命令time",[14,95556,95557],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95559,95560],{},"%:行模式",[14,95562,95563],{},"%%:单元格模式",[14,95565,95566],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[40,95568,95570],{"className":30909,"code":95569,"language":30911,"meta":27,"style":27},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[46,95571,95572,95577,95584,95589,95598,95611,95615,95623],{"__ignoreMap":27},[49,95573,95574],{"class":51,"line":52},[49,95575,95576],{"class":66},"#程序执行时间\n",[49,95578,95579,95581],{"class":51,"line":63},[49,95580,30923],{"class":77},[49,95582,95583],{"class":73}," time \n",[49,95585,95586],{"class":51,"line":70},[49,95587,95588],{"class":66},"#获取时间\n",[49,95590,95591,95594,95596],{"class":51,"line":219},[49,95592,95593],{"class":73},"start",[49,95595,78],{"class":77},[49,95597,32949],{"class":73},[49,95599,95600,95603,95606,95608],{"class":51,"line":233},[49,95601,95602],{"class":73},"time.sleep(",[49,95604,95605],{"class":159},"0.4",[49,95607,1258],{"class":73},[49,95609,95610],{"class":66},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[49,95612,95613],{"class":51,"line":241},[49,95614,95588],{"class":66},[49,95616,95617,95619,95621],{"class":51,"line":1920},[49,95618,46332],{"class":73},[49,95620,78],{"class":77},[49,95622,32949],{"class":73},[49,95624,95625,95627,95629],{"class":51,"line":2011},[49,95626,46332],{"class":73},[49,95628,1361],{"class":77},[49,95630,95631],{"class":73},"start\n",[14,95633,95634],{},[25,95635],{"alt":27,"src":95636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[757,95638,95639],{},"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":27,"searchDepth":63,"depth":63,"links":95641},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95549,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95648,"title":95649,"body":95650,"description":24072,"extension":766,"meta":95685,"navigation":398,"path":95686,"seo":95687,"stem":95688,"__hash__":95689},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95651,"toc":95683},[95652,95655,95658,95661,95664,95667,95670,95673,95678],[10,95653,95649],{"id":95654},"_17魔法命令timeit",[14,95656,95657],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95659,95660],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95662,95663],{},"单元格模式：",[14,95665,95666],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95668,95669],{},"初始化语句执行次数由轮数来决定",[14,95671,95672],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95674,95675],{},[25,95676],{"alt":27,"src":95677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95679,95680],{},[25,95681],{"alt":27,"src":95682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":27,"searchDepth":63,"depth":63,"links":95684},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95649,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95691,"title":95692,"body":95693,"description":24072,"extension":766,"meta":95711,"navigation":398,"path":95712,"seo":95713,"stem":95714,"__hash__":95715},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95694,"toc":95709},[95695,95698,95701,95704],[10,95696,95692],{"id":95697},"_18魔法命令writefile和run",[14,95699,95700],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95702,95703],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95705,95706],{},[25,95707],{"alt":27,"src":95708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":27,"searchDepth":63,"depth":63,"links":95710},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95692,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95717,"title":95718,"body":95719,"description":24072,"extension":766,"meta":95772,"navigation":398,"path":95773,"seo":95774,"stem":95775,"__hash__":95776},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95720,"toc":95770},[95721,95724,95727,95729,95732,95735,95740,95743,95746,95749,95752,95755,95758,95761,95764,95767],[10,95722,95718],{"id":95723},"_19魔法命令memit",[14,95725,95726],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95728,25290],{},[14,95730,95731],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95733,95734],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95736,95737],{},[25,95738],{"alt":27,"src":95739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95741,95742],{},"补充：",[14,95744,95745],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95747,95748],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95750,95751],{},"解决方法：",[14,95753,95754],{},"1.cmd",[14,95756,95757],{},"2.依次输入以下代码：",[14,95759,95760],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95762,95763],{},"pip install --upgrade ipython",[14,95765,95766],{},"#升级 memory_profiler 和 setuptools",[14,95768,95769],{},"pip install --upgrade memory_profiler setuptools",{"title":27,"searchDepth":63,"depth":63,"links":95771},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95718,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95778,"title":95779,"body":95780,"description":24072,"extension":766,"meta":97426,"navigation":398,"path":97427,"seo":97428,"stem":97429,"__hash__":97430},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95781,"toc":97396},[95782,95785,95789,95793,95854,95857,95862,95866,95871,95876,95881,95886,95889,95894,95898,95902,95935,95938,95941,95944,95996,95999,96035,96038,96080,96084,96105,96107,96144,96146,96151,96153,96158,96162,96165,96193,96197,96201,96254,96258,96350,96354,96358,96361,96366,96370,96395,96400,96404,96407,96410,96413,96416,96419,96422,96425,96437,96441,96445,96448,96480,96483,96506,96509,96535,96538,96564,96567,96601,96604,96666,96670,96673,96677,96680,96706,96709,96712,96717,96720,96789,96791,96796,96857,96860,96871,96877,96882,96886,96889,96902,96906,96921,96923,96946,96948,96974,96977,96980,96983,97031,97033,97038,97042,97046,97073,97077,97104,97107,97112,97117,97207,97211,97269,97274,97277,97280,97322,97326,97382,97387,97390,97393],[10,95783,95779],{"id":95784},"_2创建数组",[782,95786,95788],{"id":95787},"_21-array函数创建数组","2.1 array()函数创建数组",[18,95790,95792],{"id":95791},"_221-函数语句","2.2.1 函数语句",[40,95794,95796],{"className":30909,"code":95795,"language":30911,"meta":27,"style":27},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[46,95797,95798],{"__ignoreMap":27},[49,95799,95800,95803,95806,95808,95810,95812,95814,95816,95819,95821,95824,95826,95829,95831,95833,95835,95838,95840,95843,95845,95848,95850,95852],{"class":51,"line":52},[49,95801,95802],{"class":73},"numpy.array(",[49,95804,95805],{"class":159},"object",[49,95807,13132],{"class":73},[49,95809,94031],{"class":5913},[49,95811,14261],{"class":77},[49,95813,39464],{"class":159},[49,95815,13132],{"class":73},[49,95817,95818],{"class":5913},"copy",[49,95820,14261],{"class":77},[49,95822,95823],{"class":159}," True",[49,95825,13132],{"class":73},[49,95827,95828],{"class":5913},"order",[49,95830,14261],{"class":77},[49,95832,39464],{"class":159},[49,95834,13132],{"class":73},[49,95836,95837],{"class":5913},"subok",[49,95839,14261],{"class":77},[49,95841,95842],{"class":159}," False",[49,95844,13132],{"class":73},[49,95846,95847],{"class":5913},"ndmin",[49,95849,14261],{"class":77},[49,95851,4790],{"class":159},[49,95853,847],{"class":73},[14,95855,95856],{},"参数：",[14,95858,95859],{},[25,95860],{"alt":27,"src":95861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[18,95863,95865],{"id":95864},"_222-实例","2.2.2 实例",[14,95867,95868],{},[25,95869],{"alt":27,"src":95870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95872,95873],{},[25,95874],{"alt":27,"src":95875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95877,95878],{},[25,95879],{"alt":27,"src":95880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95882,95883],{},[25,95884],{"alt":27,"src":95885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95887,95888],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95890,95891],{},[25,95892],{"alt":27,"src":95893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[782,95895,95897],{"id":95896},"_22-随机数创建数组","2.2 随机数创建数组",[18,95899,95901],{"id":95900},"_221-random语句","2.2.1 random语句",[40,95903,95905],{"className":30909,"code":95904,"language":30911,"meta":27,"style":27},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[46,95906,95907,95912,95917,95925,95930],{"__ignoreMap":27},[49,95908,95909],{"class":51,"line":52},[49,95910,95911],{"class":66},"#random.random()\n",[49,95913,95914],{"class":51,"line":63},[49,95915,95916],{"class":66},"#确定随机种子,就是每次运行结果是相同的\n",[49,95918,95919,95921,95923],{"class":51,"line":70},[49,95920,95138],{"class":73},[49,95922,1021],{"class":159},[49,95924,847],{"class":73},[49,95926,95927],{"class":51,"line":219},[49,95928,95929],{"class":73},"np.random.random()\n",[49,95931,95932],{"class":51,"line":233},[49,95933,95934],{"class":66},"#生成一个随机的数目\n",[14,95936,95937],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95939,95940],{},"可以指定数组形状 size",[14,95942,95943],{},"①生成一维数组",[40,95945,95947],{"className":30909,"code":95946,"language":30911,"meta":27,"style":27},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[46,95948,95949,95954,95967,95972,95988],{"__ignoreMap":27},[49,95950,95951],{"class":51,"line":52},[49,95952,95953],{"class":66},"#random.random(size())\n",[49,95955,95956,95959,95961,95963,95965],{"class":51,"line":63},[49,95957,95958],{"class":73},"np.random.random(",[49,95960,32027],{"class":5913},[49,95962,78],{"class":77},[49,95964,1148],{"class":159},[49,95966,847],{"class":73},[49,95968,95969],{"class":51,"line":70},[49,95970,95971],{"class":66},"#生成一位的五个元素\n",[49,95973,95974,95976,95978,95980,95982,95984,95986],{"class":51,"line":219},[49,95975,124],{"class":73},[49,95977,78],{"class":77},[49,95979,95958],{"class":73},[49,95981,32027],{"class":5913},[49,95983,78],{"class":77},[49,95985,1122],{"class":159},[49,95987,847],{"class":73},[49,95989,95990,95993],{"class":51,"line":233},[49,95991,95992],{"class":73},"a.shape ",[49,95994,95995],{"class":66},"#输出数组形状\n",[14,95997,95998],{},"②生成二维数组",[40,96000,96002],{"className":30909,"code":96001,"language":30911,"meta":27,"style":27},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[46,96003,96004,96008,96030],{"__ignoreMap":27},[49,96005,96006],{"class":51,"line":52},[49,96007,93832],{"class":66},[49,96009,96010,96012,96014,96016,96018,96020,96022,96024,96026,96028],{"class":51,"line":63},[49,96011,93837],{"class":73},[49,96013,78],{"class":77},[49,96015,95958],{"class":73},[49,96017,32027],{"class":5913},[49,96019,78],{"class":77},[49,96021,841],{"class":73},[49,96023,1122],{"class":159},[49,96025,1207],{"class":73},[49,96027,1148],{"class":159},[49,96029,31028],{"class":73},[49,96031,96032],{"class":51,"line":70},[49,96033,96034],{"class":66},"#生成四行五列的数组\n",[14,96036,96037],{},"③生成三维数组",[40,96039,96041],{"className":30909,"code":96040,"language":30911,"meta":27,"style":27},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[46,96042,96043,96048,96075],{"__ignoreMap":27},[49,96044,96045],{"class":51,"line":52},[49,96046,96047],{"class":66},"#三维数组\n",[49,96049,96050,96053,96055,96057,96059,96061,96063,96065,96067,96069,96071,96073],{"class":51,"line":63},[49,96051,96052],{"class":73},"aaa",[49,96054,78],{"class":77},[49,96056,95958],{"class":73},[49,96058,32027],{"class":5913},[49,96060,78],{"class":77},[49,96062,841],{"class":73},[49,96064,915],{"class":159},[49,96066,1207],{"class":73},[49,96068,909],{"class":159},[49,96070,1207],{"class":73},[49,96072,1122],{"class":159},[49,96074,31028],{"class":73},[49,96076,96077],{"class":51,"line":70},[49,96078,96079],{"class":73},"aaa.shape\n",[18,96081,96083],{"id":96082},"_222-randint语句","2.2.2 randint语句",[40,96085,96087],{"className":30909,"code":96086,"language":30911,"meta":27,"style":27},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[46,96088,96089,96094],{"__ignoreMap":27},[49,96090,96091],{"class":51,"line":52},[49,96092,96093],{"class":66},"#生成随机的整数 random.randint(low,high,size)\n",[49,96095,96096,96098,96100,96102],{"class":51,"line":63},[49,96097,93645],{"class":73},[49,96099,1148],{"class":159},[49,96101,14411],{"class":73},[49,96103,96104],{"class":66},"#0~5中的随机一个数\n",[14,96106,95943],{},[40,96108,96110],{"className":30909,"code":96109,"language":30911,"meta":27,"style":27},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[46,96111,96112,96117,96139],{"__ignoreMap":27},[49,96113,96114],{"class":51,"line":52},[49,96115,96116],{"class":66},"#一维\n",[49,96118,96119,96121,96123,96125,96127,96129,96131,96133,96135,96137],{"class":51,"line":63},[49,96120,93645],{"class":73},[49,96122,1047],{"class":159},[49,96124,1207],{"class":73},[49,96126,1301],{"class":159},[49,96128,1207],{"class":73},[49,96130,32027],{"class":5913},[49,96132,78],{"class":77},[49,96134,841],{"class":73},[49,96136,1275],{"class":159},[49,96138,31028],{"class":73},[49,96140,96141],{"class":51,"line":70},[49,96142,96143],{"class":66},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,96145,95998],{},[14,96147,96148],{},[25,96149],{"alt":27,"src":96150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,96152,96037],{},[14,96154,96155],{},[25,96156],{"alt":27,"src":96157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[18,96159,96161],{"id":96160},"_222-rand语句","2.2.2 rand语句",[14,96163,96164],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[40,96166,96168],{"className":30909,"code":96167,"language":30911,"meta":27,"style":27},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[46,96169,96170,96183,96188],{"__ignoreMap":27},[49,96171,96172,96175,96177,96179,96181],{"class":51,"line":52},[49,96173,96174],{"class":73},"np.random.rand(",[49,96176,1140],{"class":159},[49,96178,1207],{"class":73},[49,96180,1275],{"class":159},[49,96182,847],{"class":73},[49,96184,96185],{"class":51,"line":63},[49,96186,96187],{"class":66},"#第一个参数100：行数，表示有100个样本\n",[49,96189,96190],{"class":51,"line":70},[49,96191,96192],{"class":66},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[782,96194,96196],{"id":96195},"_23-arange创建数组","2.3 arange()创建数组",[18,96198,96200],{"id":96199},"_231-函数语句","2.3.1 函数语句",[40,96202,96204],{"className":30909,"code":96203,"language":30911,"meta":27,"style":27},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[46,96205,96206,96220,96225,96230,96235,96240,96245,96250],{"__ignoreMap":27},[49,96207,96208,96211,96213,96215,96218],{"class":51,"line":52},[49,96209,96210],{"class":73},"numpy.arange([start,] stop[, step], ",[49,96212,94031],{"class":5913},[49,96214,78],{"class":77},[49,96216,96217],{"class":159},"None",[49,96219,847],{"class":73},[49,96221,96222],{"class":51,"line":63},[49,96223,96224],{"class":66},"#参数\n",[49,96226,96227],{"class":51,"line":70},[49,96228,96229],{"class":59},"\"\"\"\n",[49,96231,96232],{"class":51,"line":219},[49,96233,96234],{"class":59},"start:起始值，可选，默认从 0 开始。\n",[49,96236,96237],{"class":51,"line":233},[49,96238,96239],{"class":59},"stop:结束值（不包含该值）。\n",[49,96241,96242],{"class":51,"line":241},[49,96243,96244],{"class":59},"step:步长，可选，默认是 1。可以为浮点数。\n",[49,96246,96247],{"class":51,"line":1920},[49,96248,96249],{"class":59},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[49,96251,96252],{"class":51,"line":2011},[49,96253,96229],{"class":59},[18,96255,96257],{"id":96256},"_232-实例","2.3.2 实例",[40,96259,96261],{"className":30909,"code":96260,"language":30911,"meta":27,"style":27},"#创建一维数组\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",[46,96262,96263,96267,96291,96296,96301,96305,96328,96332,96336,96341,96346],{"__ignoreMap":27},[49,96264,96265],{"class":51,"line":52},[49,96266,93636],{"class":66},[49,96268,96269,96271,96273,96275,96277,96279,96281,96283,96285,96287,96289],{"class":51,"line":63},[49,96270,93533],{"class":73},[49,96272,1047],{"class":159},[49,96274,1207],{"class":73},[49,96276,1554],{"class":159},[49,96278,1207],{"class":73},[49,96280,1047],{"class":159},[49,96282,1207],{"class":73},[49,96284,94031],{"class":5913},[49,96286,78],{"class":77},[49,96288,844],{"class":159},[49,96290,847],{"class":73},[49,96292,96293],{"class":51,"line":70},[49,96294,96295],{"class":66},"#输出结果：\n",[49,96297,96298],{"class":51,"line":219},[49,96299,96300],{"class":66},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[49,96302,96303],{"class":51,"line":233},[49,96304,94478],{"class":66},[49,96306,96307,96310,96312,96314,96316,96319,96321,96323,96325],{"class":51,"line":241},[49,96308,96309],{"class":73},"np.array([np.arange(",[49,96311,1047],{"class":159},[49,96313,1207],{"class":73},[49,96315,1122],{"class":159},[49,96317,96318],{"class":73},"),np.arange(",[49,96320,1122],{"class":159},[49,96322,1207],{"class":73},[49,96324,1198],{"class":159},[49,96326,96327],{"class":73},")])\n",[49,96329,96330],{"class":51,"line":1920},[49,96331,94095],{"class":66},[49,96333,96334],{"class":51,"line":2011},[49,96335,96229],{"class":59},[49,96337,96338],{"class":51,"line":2017},[49,96339,96340],{"class":59},"array([[1, 2, 3],\n",[49,96342,96343],{"class":51,"line":2029},[49,96344,96345],{"class":59},"       [4, 5, 6]])\n",[49,96347,96348],{"class":51,"line":2311},[49,96349,96229],{"class":59},[782,96351,96353],{"id":96352},"_24-生态分布","2.4 生态分布",[18,96355,96357],{"id":96356},"_241-标准正态分布","2.4.1 标准正态分布",[14,96359,96360],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,96362,96363],{},[25,96364],{"alt":27,"src":96365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[18,96367,96369],{"id":96368},"_242-常规正态分布","2.4.2 常规正态分布",[40,96371,96373],{"className":30909,"code":96372,"language":30911,"meta":27,"style":27},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[46,96374,96375,96380,96385,96390],{"__ignoreMap":27},[49,96376,96377],{"class":51,"line":52},[49,96378,96379],{"class":73},"random.normal(loc,scale,size)也可以生成正态分布\n",[49,96381,96382],{"class":51,"line":63},[49,96383,96384],{"class":66},"#loc:期望\n",[49,96386,96387],{"class":51,"line":70},[49,96388,96389],{"class":66},"#scale:方差\n",[49,96391,96392],{"class":51,"line":219},[49,96393,96394],{"class":66},"#size:用于确定是几维的数列\n",[14,96396,96397],{},[25,96398],{"alt":27,"src":96399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[782,96401,96403],{"id":96402},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,96405,96406],{},"ndim:秩，维度个数",[14,96408,96409],{},"size:数组元素的个数",[14,96411,96412],{},"shape:数组的形状",[14,96414,96415],{},"dtype:数组元素的类型",[14,96417,96418],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,96420,96421],{},"他们都是属性，通过数组.属性的形式来确定",[14,96423,96424],{},"如果需要输出多个可以通过以下方式：",[40,96426,96428],{"className":30909,"code":96427,"language":30911,"meta":27,"style":27},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[46,96429,96430],{"__ignoreMap":27},[49,96431,96432,96434],{"class":51,"line":52},[49,96433,30946],{"class":159},[49,96435,96436],{"class":73},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[782,96438,96440],{"id":96439},"_26-其他方式创建数组","2.6 其他方式创建数组",[18,96442,96444],{"id":96443},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,96446,96447],{},"①创建一维数组",[40,96449,96451],{"className":30909,"code":96450,"language":30911,"meta":27,"style":27},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[46,96452,96453,96462,96466,96471,96476],{"__ignoreMap":27},[49,96454,96455,96458,96460],{"class":51,"line":52},[49,96456,96457],{"class":73},"np.zeros(",[49,96459,1275],{"class":159},[49,96461,847],{"class":73},[49,96463,96464],{"class":51,"line":63},[49,96465,96229],{"class":59},[49,96467,96468],{"class":51,"line":70},[49,96469,96470],{"class":59},"输出结果：\n",[49,96472,96473],{"class":51,"line":219},[49,96474,96475],{"class":59},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[49,96477,96478],{"class":51,"line":233},[49,96479,96229],{"class":59},[14,96481,96482],{},"上方代码等价于：",[40,96484,96486],{"className":30909,"code":96485,"language":30911,"meta":27,"style":27},"np.zeros(shape=(10))#创建10个元素的0数组\n",[46,96487,96488],{"__ignoreMap":27},[49,96489,96490,96492,96495,96497,96499,96501,96503],{"class":51,"line":52},[49,96491,96457],{"class":73},[49,96493,96494],{"class":5913},"shape",[49,96496,78],{"class":77},[49,96498,841],{"class":73},[49,96500,1275],{"class":159},[49,96502,83302],{"class":73},[49,96504,96505],{"class":66},"#创建10个元素的0数组\n",[14,96507,96508],{},"也可以指定类型",[40,96510,96512],{"className":30909,"code":96511,"language":30911,"meta":27,"style":27},"#指定类型\nnp.zeros(5,dtype=int)\n",[46,96513,96514,96519],{"__ignoreMap":27},[49,96515,96516],{"class":51,"line":52},[49,96517,96518],{"class":66},"#指定类型\n",[49,96520,96521,96523,96525,96527,96529,96531,96533],{"class":51,"line":63},[49,96522,96457],{"class":73},[49,96524,1148],{"class":159},[49,96526,1207],{"class":73},[49,96528,94031],{"class":5913},[49,96530,78],{"class":77},[49,96532,844],{"class":159},[49,96534,847],{"class":73},[14,96536,96537],{},"②创建二维数组",[40,96539,96541],{"className":30909,"code":96540,"language":30911,"meta":27,"style":27},"np.zeros((3,4),dtype=int)\n",[46,96542,96543],{"__ignoreMap":27},[49,96544,96545,96548,96550,96552,96554,96556,96558,96560,96562],{"class":51,"line":52},[49,96546,96547],{"class":73},"np.zeros((",[49,96549,909],{"class":159},[49,96551,1207],{"class":73},[49,96553,1122],{"class":159},[49,96555,42787],{"class":73},[49,96557,94031],{"class":5913},[49,96559,78],{"class":77},[49,96561,844],{"class":159},[49,96563,847],{"class":73},[14,96565,96566],{},"③创建三维数组",[40,96568,96570],{"className":30909,"code":96569,"language":30911,"meta":27,"style":27},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[46,96571,96572,96577],{"__ignoreMap":27},[49,96573,96574],{"class":51,"line":52},[49,96575,96576],{"class":66},"#创建三维数组\n",[49,96578,96579,96581,96583,96585,96587,96589,96591,96593,96595,96597,96599],{"class":51,"line":63},[49,96580,96547],{"class":73},[49,96582,909],{"class":159},[49,96584,1207],{"class":73},[49,96586,1122],{"class":159},[49,96588,1207],{"class":73},[49,96590,1148],{"class":159},[49,96592,42787],{"class":73},[49,96594,94031],{"class":5913},[49,96596,78],{"class":77},[49,96598,844],{"class":159},[49,96600,847],{"class":73},[14,96602,96603],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[40,96605,96607],{"className":30909,"code":96606,"language":30911,"meta":27,"style":27},"#使用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",[46,96608,96609,96614,96629,96634,96639,96661],{"__ignoreMap":27},[49,96610,96611],{"class":51,"line":52},[49,96612,96613],{"class":66},"#使用zeros_like将创建的一维数组变成全0的数组\n",[49,96615,96616,96618,96620,96622,96624,96626],{"class":51,"line":63},[49,96617,124],{"class":73},[49,96619,78],{"class":77},[49,96621,93533],{"class":73},[49,96623,1122],{"class":159},[49,96625,1258],{"class":73},[49,96627,96628],{"class":66},"#这个得到的结果：一维数组0，1，2，3\n",[49,96630,96631],{"class":51,"line":70},[49,96632,96633],{"class":73},"np.zeros_like(a)\n",[49,96635,96636],{"class":51,"line":219},[49,96637,96638],{"class":66},"#使用zeros_like将创建的二维数组变成全0的数组\n",[49,96640,96641,96643,96645,96647,96649,96651,96653,96655,96657,96659],{"class":51,"line":233},[49,96642,93837],{"class":73},[49,96644,78],{"class":77},[49,96646,95958],{"class":73},[49,96648,32027],{"class":5913},[49,96650,78],{"class":77},[49,96652,841],{"class":73},[49,96654,1122],{"class":159},[49,96656,1207],{"class":73},[49,96658,1148],{"class":159},[49,96660,31028],{"class":73},[49,96662,96663],{"class":51,"line":241},[49,96664,96665],{"class":73},"np.zeros_like(aa)\n",[18,96667,96669],{"id":96668},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96671,96672],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[18,96674,96676],{"id":96675},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96678,96679],{},"①empty()用法",[40,96681,96683],{"className":30909,"code":96682,"language":30911,"meta":27,"style":27},"numpy.empty(shape,dtype=float,order='c')\n",[46,96684,96685],{"__ignoreMap":27},[49,96686,96687,96690,96692,96694,96696,96698,96700,96702,96704],{"class":51,"line":52},[49,96688,96689],{"class":73},"numpy.empty(shape,",[49,96691,94031],{"class":5913},[49,96693,78],{"class":77},[49,96695,880],{"class":159},[49,96697,1207],{"class":73},[49,96699,95828],{"class":5913},[49,96701,78],{"class":77},[49,96703,76559],{"class":59},[49,96705,847],{"class":73},[14,96707,96708],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96710,96711],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96713,96714],{},[25,96715],{"alt":27,"src":96716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96718,96719],{},"②empty()用法",[40,96721,96723],{"className":30909,"code":96722,"language":30911,"meta":27,"style":27},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[46,96724,96725,96746,96758,96779,96784],{"__ignoreMap":27},[49,96726,96727,96729,96731,96734,96736,96738,96740,96742,96744],{"class":51,"line":52},[49,96728,1674],{"class":73},[49,96730,78],{"class":77},[49,96732,96733],{"class":73},"np.empty(",[49,96735,1275],{"class":159},[49,96737,1207],{"class":73},[49,96739,94031],{"class":5913},[49,96741,78],{"class":77},[49,96743,844],{"class":159},[49,96745,847],{"class":73},[49,96747,96748,96750,96752,96754,96756],{"class":51,"line":63},[49,96749,1649],{"class":73},[49,96751,78],{"class":77},[49,96753,93533],{"class":73},[49,96755,1148],{"class":159},[49,96757,847],{"class":73},[49,96759,96760,96763,96765,96768,96770,96772,96775,96777],{"class":51,"line":70},[49,96761,96762],{"class":73},"np.add(",[49,96764,915],{"class":159},[49,96766,96767],{"class":73},",x,",[49,96769,93585],{"class":5913},[49,96771,78],{"class":77},[49,96773,96774],{"class":73},"y[:",[49,96776,1148],{"class":159},[49,96778,5354],{"class":73},[49,96780,96781],{"class":51,"line":219},[49,96782,96783],{"class":66},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[49,96785,96786],{"class":51,"line":233},[49,96787,96788],{"class":73},"y\n",[14,96790,12211],{},[14,96792,96793],{},[25,96794],{"alt":27,"src":96795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[40,96797,96799],{"className":30909,"code":96798,"language":30911,"meta":27,"style":27},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[46,96800,96801,96817,96837,96852],{"__ignoreMap":27},[49,96802,96803,96805,96807,96809,96811,96813,96815],{"class":51,"line":52},[49,96804,1649],{"class":73},[49,96806,78],{"class":77},[49,96808,93533],{"class":73},[49,96810,1047],{"class":159},[49,96812,1207],{"class":73},[49,96814,1173],{"class":159},[49,96816,847],{"class":73},[49,96818,96819,96821,96823,96825,96827,96829,96831,96833,96835],{"class":51,"line":63},[49,96820,1674],{"class":73},[49,96822,78],{"class":77},[49,96824,96733],{"class":73},[49,96826,1148],{"class":159},[49,96828,1207],{"class":73},[49,96830,94031],{"class":5913},[49,96832,78],{"class":77},[49,96834,844],{"class":159},[49,96836,847],{"class":73},[49,96838,96839,96842,96844,96846,96848,96850],{"class":51,"line":70},[49,96840,96841],{"class":73},"np.add(x,",[49,96843,915],{"class":159},[49,96845,1207],{"class":73},[49,96847,93585],{"class":5913},[49,96849,78],{"class":77},[49,96851,93980],{"class":73},[49,96853,96854],{"class":51,"line":219},[49,96855,96856],{"class":66},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96858,96859],{},"③empty_like()",[14,96861,96862],{},[112,96863,96864,96865,96870],{},"创建一个",[112,96866,96867],{},[112,96868,96869],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96872,96873,96876],{},[46,96874,96875],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96878,96879],{},[25,96880],{"alt":27,"src":96881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[18,96883,96885],{"id":96884},"_264-用法","2.6.4 ？？用法",[14,96887,96888],{},"当想查看一个函数的参数时，可以通过？？来实现",[40,96890,96892],{"className":30909,"code":96891,"language":30911,"meta":27,"style":27},"np.full??\n",[46,96893,96894],{"__ignoreMap":27},[49,96895,96896,96899],{"class":51,"line":52},[49,96897,96898],{"class":73},"np.full",[49,96900,96901],{"class":77934},"??\n",[18,96903,96905],{"id":96904},"_265-full创建数组","2.6.5 full()创建数组",[40,96907,96909],{"className":30909,"code":96908,"language":30911,"meta":27,"style":27},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[46,96910,96911,96916],{"__ignoreMap":27},[49,96912,96913],{"class":51,"line":52},[49,96914,96915],{"class":73},"full(shape,fill_value)\n",[49,96917,96918],{"class":51,"line":63},[49,96919,96920],{"class":73},"创建全为某个指定值的数组\n",[14,96922,95061],{},[40,96924,96926],{"className":30909,"code":96925,"language":30911,"meta":27,"style":27},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[46,96927,96928,96933],{"__ignoreMap":27},[49,96929,96930],{"class":51,"line":52},[49,96931,96932],{"class":66},"#创建一个一维数组,以20进行填充\n",[49,96934,96935,96938,96940,96942,96944],{"class":51,"line":63},[49,96936,96937],{"class":73},"np.full(",[49,96939,1275],{"class":159},[49,96941,1207],{"class":73},[49,96943,1529],{"class":159},[49,96945,847],{"class":73},[14,96947,93822],{},[40,96949,96951],{"className":30909,"code":96950,"language":30911,"meta":27,"style":27},"#创建二维数组\nnp.full((3,5),11)\n",[46,96952,96953,96957],{"__ignoreMap":27},[49,96954,96955],{"class":51,"line":52},[49,96956,94478],{"class":66},[49,96958,96959,96962,96964,96966,96968,96970,96972],{"class":51,"line":63},[49,96960,96961],{"class":73},"np.full((",[49,96963,909],{"class":159},[49,96965,1207],{"class":73},[49,96967,1148],{"class":159},[49,96969,42787],{"class":73},[49,96971,1301],{"class":159},[49,96973,847],{"class":73},[14,96975,96976],{},"③full_like用法",[14,96978,96979],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96981,96982],{},"这里是指定填充而已",[40,96984,96986],{"className":30909,"code":96985,"language":30911,"meta":27,"style":27},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[46,96987,96988,96993,97017,97022],{"__ignoreMap":27},[49,96989,96990],{"class":51,"line":52},[49,96991,96992],{"class":66},"#创建一个指定形状数组\n",[49,96994,96995,96997,96999,97001,97003,97005,97007,97009,97011,97013,97015],{"class":51,"line":63},[49,96996,124],{"class":73},[49,96998,78],{"class":77},[49,97000,93533],{"class":73},[49,97002,1047],{"class":159},[49,97004,1207],{"class":73},[49,97006,1154],{"class":159},[49,97008,93538],{"class":73},[49,97010,1122],{"class":159},[49,97012,1207],{"class":73},[49,97014,1249],{"class":159},[49,97016,847],{"class":73},[49,97018,97019],{"class":51,"line":70},[49,97020,97021],{"class":66},"#进行指定填充\n",[49,97023,97024,97027,97029],{"class":51,"line":219},[49,97025,97026],{"class":73},"np.full_like(a,",[49,97028,1275],{"class":159},[49,97030,847],{"class":73},[14,97032,12211],{},[14,97034,97035],{},[25,97036],{"alt":27,"src":97037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[18,97039,97041],{"id":97040},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[130,97043,97045],{"id":97044},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[40,97047,97049],{"className":30909,"code":97048,"language":30911,"meta":27,"style":27},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[46,97050,97051,97068],{"__ignoreMap":27},[49,97052,97053,97056,97058,97060,97062,97064,97066],{"class":51,"line":52},[49,97054,97055],{"class":73},"np.eye(",[49,97057,1122],{"class":159},[49,97059,1207],{"class":73},[49,97061,94031],{"class":5913},[49,97063,78],{"class":77},[49,97065,844],{"class":159},[49,97067,847],{"class":73},[49,97069,97070],{"class":51,"line":63},[49,97071,97072],{"class":66},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[130,97074,97076],{"id":97075},"_2662-法2identity","2.6.6.2 法2：identity()",[40,97078,97080],{"className":30909,"code":97079,"language":30911,"meta":27,"style":27},"#identity()\nnp.identity(5,dtype=int)\n",[46,97081,97082,97087],{"__ignoreMap":27},[49,97083,97084],{"class":51,"line":52},[49,97085,97086],{"class":66},"#identity()\n",[49,97088,97089,97092,97094,97096,97098,97100,97102],{"class":51,"line":63},[49,97090,97091],{"class":73},"np.identity(",[49,97093,1148],{"class":159},[49,97095,1207],{"class":73},[49,97097,94031],{"class":5913},[49,97099,78],{"class":77},[49,97101,844],{"class":159},[49,97103,847],{"class":73},[14,97105,97106],{},"两个函数是有区别的",[14,97108,97109],{},[25,97110],{"alt":27,"src":97111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,97113,97114],{},[25,97115],{"alt":27,"src":97116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[40,97118,97120],{"className":30909,"code":97119,"language":30911,"meta":27,"style":27},"# 创建一个 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",[46,97121,97122,97127,97139,97144,97149,97154,97159,97163,97168,97188,97192,97197,97202],{"__ignoreMap":27},[49,97123,97124],{"class":51,"line":52},[49,97125,97126],{"class":66},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[49,97128,97129,97131,97133,97135,97137],{"class":51,"line":63},[49,97130,97055],{"class":73},[49,97132,909],{"class":159},[49,97134,13132],{"class":73},[49,97136,1122],{"class":159},[49,97138,847],{"class":73},[49,97140,97141],{"class":51,"line":70},[49,97142,97143],{"class":66},"# 输出:\n",[49,97145,97146],{"class":51,"line":219},[49,97147,97148],{"class":66},"# [[1. 0. 0. 0.]\n",[49,97150,97151],{"class":51,"line":233},[49,97152,97153],{"class":66},"#  [0. 1. 0. 0.]\n",[49,97155,97156],{"class":51,"line":241},[49,97157,97158],{"class":66},"#  [0. 0. 1. 0.]]\n",[49,97160,97161],{"class":51,"line":1920},[49,97162,399],{"emptyLinePlaceholder":398},[49,97164,97165],{"class":51,"line":2011},[49,97166,97167],{"class":66},"# 对角线向上偏移1\n",[49,97169,97170,97172,97174,97176,97178,97180,97182,97184,97186],{"class":51,"line":2017},[49,97171,97055],{"class":73},[49,97173,909],{"class":159},[49,97175,13132],{"class":73},[49,97177,1122],{"class":159},[49,97179,13132],{"class":73},[49,97181,1322],{"class":5913},[49,97183,78],{"class":77},[49,97185,1047],{"class":159},[49,97187,847],{"class":73},[49,97189,97190],{"class":51,"line":2029},[49,97191,97143],{"class":66},[49,97193,97194],{"class":51,"line":2311},[49,97195,97196],{"class":66},"# [[0. 1. 0. 0.]\n",[49,97198,97199],{"class":51,"line":2316},[49,97200,97201],{"class":66},"#  [0. 0. 1. 0.]\n",[49,97203,97204],{"class":51,"line":2322},[49,97205,97206],{"class":66},"#  [0. 0. 0. 1.]]\n",[18,97208,97210],{"id":97209},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[40,97212,97214],{"className":30909,"code":97213,"language":30911,"meta":27,"style":27},"#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",[46,97215,97216,97221,97225,97230,97235,97240,97245,97250,97255,97260,97265],{"__ignoreMap":27},[49,97217,97218],{"class":51,"line":52},[49,97219,97220],{"class":66},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[49,97222,97223],{"class":51,"line":63},[49,97224,96229],{"class":59},[49,97226,97227],{"class":51,"line":70},[49,97228,97229],{"class":59},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[49,97231,97232],{"class":51,"line":219},[49,97233,97234],{"class":59},"参数介绍：\n",[49,97236,97237],{"class":51,"line":233},[49,97238,97239],{"class":59},"start：序列的起始值\n",[49,97241,97242],{"class":51,"line":241},[49,97243,97244],{"class":59},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[49,97246,97247],{"class":51,"line":1920},[49,97248,97249],{"class":59},"num：要生长的等步长的样本数量，默认为50\n",[49,97251,97252],{"class":51,"line":2011},[49,97253,97254],{"class":59},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[49,97256,97257],{"class":51,"line":2017},[49,97258,97259],{"class":59},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[49,97261,97262],{"class":51,"line":2029},[49,97263,97264],{"class":59},"dtype：ndarry的数据类型\n",[49,97266,97267],{"class":51,"line":2311},[49,97268,96229],{"class":59},[14,97270,97271],{},[25,97272],{"alt":27,"src":97273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,97275,97276],{},"这里num=是可以省略的",[14,97278,97279],{},"也就是下方两行代码结果是一模一样的",[40,97281,97283],{"className":30909,"code":97282,"language":30911,"meta":27,"style":27},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[46,97284,97285,97302],{"__ignoreMap":27},[49,97286,97287,97290,97292,97294,97296,97298,97300],{"class":51,"line":52},[49,97288,97289],{"class":73},"np.linspace(",[49,97291,1047],{"class":159},[49,97293,1207],{"class":73},[49,97295,1148],{"class":159},[49,97297,1207],{"class":73},[49,97299,1148],{"class":159},[49,97301,847],{"class":73},[49,97303,97304,97306,97308,97310,97312,97314,97316,97318,97320],{"class":51,"line":63},[49,97305,97289],{"class":73},[49,97307,1047],{"class":159},[49,97309,1207],{"class":73},[49,97311,1148],{"class":159},[49,97313,1207],{"class":73},[49,97315,2364],{"class":5913},[49,97317,78],{"class":77},[49,97319,1148],{"class":159},[49,97321,847],{"class":73},[18,97323,97325],{"id":97324},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[40,97327,97329],{"className":30909,"code":97328,"language":30911,"meta":27,"style":27},"#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",[46,97330,97331,97336,97340,97345,97350,97355,97360,97364,97369,97374,97378],{"__ignoreMap":27},[49,97332,97333],{"class":51,"line":52},[49,97334,97335],{"class":66},"#logspace函数用于创建一个等比数列，格式如下：\n",[49,97337,97338],{"class":51,"line":63},[49,97339,96229],{"class":59},[49,97341,97342],{"class":51,"line":70},[49,97343,97344],{"class":59},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[49,97346,97347],{"class":51,"line":219},[49,97348,97349],{"class":59},"参数为：\n",[49,97351,97352],{"class":51,"line":233},[49,97353,97354],{"class":59},"start:序列的起始位置为：base**start\n",[49,97356,97357],{"class":51,"line":241},[49,97358,97359],{"class":59},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[49,97361,97362],{"class":51,"line":1920},[49,97363,97249],{"class":59},[49,97365,97366],{"class":51,"line":2011},[49,97367,97368],{"class":59},"endpoint：是否包含 stop 这个值，默认是 True\n",[49,97370,97371],{"class":51,"line":2017},[49,97372,97373],{"class":59},"base：对数的底数，默认是 10（常见对数）\n",[49,97375,97376],{"class":51,"line":2029},[49,97377,97264],{"class":59},[49,97379,97380],{"class":51,"line":2311},[49,97381,96229],{"class":59},[14,97383,97384],{},[25,97385],{"alt":27,"src":97386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,97388,97389],{},"logspace()函数中的num参数也是可以不写num=的",[14,97391,97392],{},"endpoint是不可以省略的",[757,97394,97395],{},"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":27,"searchDepth":63,"depth":63,"links":97397},[97398,97402,97407,97411,97415,97416],{"id":95787,"depth":63,"text":95788,"children":97399},[97400,97401],{"id":95791,"depth":70,"text":95792},{"id":95864,"depth":70,"text":95865},{"id":95896,"depth":63,"text":95897,"children":97403},[97404,97405,97406],{"id":95900,"depth":70,"text":95901},{"id":96082,"depth":70,"text":96083},{"id":96160,"depth":70,"text":96161},{"id":96195,"depth":63,"text":96196,"children":97408},[97409,97410],{"id":96199,"depth":70,"text":96200},{"id":96256,"depth":70,"text":96257},{"id":96352,"depth":63,"text":96353,"children":97412},[97413,97414],{"id":96356,"depth":70,"text":96357},{"id":96368,"depth":70,"text":96369},{"id":96402,"depth":63,"text":96403},{"id":96439,"depth":63,"text":96440,"children":97417},[97418,97419,97420,97421,97422,97423,97424,97425],{"id":96443,"depth":70,"text":96444},{"id":96668,"depth":70,"text":96669},{"id":96675,"depth":70,"text":96676},{"id":96884,"depth":70,"text":96885},{"id":96904,"depth":70,"text":96905},{"id":97040,"depth":70,"text":97041},{"id":97209,"depth":70,"text":97210},{"id":97324,"depth":70,"text":97325},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95779,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97432,"title":97433,"body":97434,"description":24072,"extension":766,"meta":97527,"navigation":398,"path":97528,"seo":97529,"stem":97530,"__hash__":97531},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97435,"toc":97525},[97436,97439,97442,97445,97448,97451,97454,97457,97460,97463,97466,97469,97471,97474,97477,97482,97485,97488,97522],[10,97437,97433],{"id":97438},"_20魔法命令mprun",[14,97440,97441],{},"逐行分析数据内存的使用情况",[14,97443,97444],{},"语法格式：",[14,97446,97447],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,97449,97450],{},"分析结果列如下：",[14,97452,97453],{},"Line行号",[14,97455,97456],{},"Mem usage内存使用大小",[14,97458,97459],{},"increment内存增量",[14,97461,97462],{},"Line content代码内容",[14,97464,97465],{},"补充说明：",[14,97467,97468],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,97470,95734],{},[14,97472,97473],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,97475,97476],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,97478,97479],{},[25,97480],{"alt":27,"src":97481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,97483,97484],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97486,97487],{},"这时候需要重新加载模块",[40,97489,97491],{"className":30909,"code":97490,"language":30911,"meta":27,"style":27},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[46,97492,97493,97498,97505,97510],{"__ignoreMap":27},[49,97494,97495],{"class":51,"line":52},[49,97496,97497],{"class":66},"#重新加载模块\n",[49,97499,97500,97502],{"class":51,"line":63},[49,97501,30923],{"class":77},[49,97503,97504],{"class":73}," importlib\n",[49,97506,97507],{"class":51,"line":70},[49,97508,97509],{"class":73},"importlib.reload(mprun_test)\n",[49,97511,97512,97514,97517,97519],{"class":51,"line":219},[49,97513,1157],{"class":77},[49,97515,97516],{"class":73},"mprun ",[49,97518,1361],{"class":77},[49,97520,97521],{"class":73},"f mprun_test.fun_test mprun_test.fun_test()\n",[757,97523,97524],{},"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":27,"searchDepth":63,"depth":63,"links":97526},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97433,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97533,"title":97534,"body":97535,"description":24072,"extension":766,"meta":97552,"navigation":398,"path":97553,"seo":97554,"stem":97555,"__hash__":97556},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97536,"toc":97550},[97537,97540,97545],[10,97538,97534],{"id":97539},"_3一维数组的索引和切片",[14,97541,97542],{},[25,97543],{"alt":27,"src":97544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97546,97547],{},[25,97548],{"alt":27,"src":97549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":27,"searchDepth":63,"depth":63,"links":97551},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97534,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97558,"title":97559,"body":97560,"description":24072,"extension":766,"meta":98043,"navigation":398,"path":98044,"seo":98045,"stem":98046,"__hash__":98047},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97561,"toc":98041},[97562,97565,97568,97573,97606,97609,97647,97650,97684,97687,97792,97795,97832,97835,97936,97939,97990,97993,98035,98038],[10,97563,97559],{"id":97564},"_4二维数组的索引与切片",[14,97566,97567],{},"①获取指定单个元素",[14,97569,97570],{},[25,97571],{"alt":27,"src":97572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[40,97574,97576],{"className":30909,"code":97575,"language":30911,"meta":27,"style":27},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[46,97577,97578,97583,97588,97593],{"__ignoreMap":27},[49,97579,97580],{"class":51,"line":52},[49,97581,97582],{"class":66},"#获取元素9\n",[49,97584,97585],{"class":51,"line":63},[49,97586,97587],{"class":66},"#先获取所在行，再获取所在列\n",[49,97589,97590],{"class":51,"line":70},[49,97591,97592],{"class":66},"#数组[行索引号，列索引号]\n",[49,97594,97595,97598,97600,97602,97604],{"class":51,"line":219},[49,97596,97597],{"class":73},"a[",[49,97599,1047],{"class":159},[49,97601,1207],{"class":73},[49,97603,915],{"class":159},[49,97605,33777],{"class":73},[14,97607,97608],{},"②获取整行元素",[40,97610,97612],{"className":30909,"code":97611,"language":30911,"meta":27,"style":27},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[46,97613,97614,97619,97624,97632,97637],{"__ignoreMap":27},[49,97615,97616],{"class":51,"line":52},[49,97617,97618],{"class":66},"#获取整行 数组[行索引号]\n",[49,97620,97621],{"class":51,"line":63},[49,97622,97623],{"class":66},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[49,97625,97626,97628,97630],{"class":51,"line":70},[49,97627,97597],{"class":73},[49,97629,915],{"class":159},[49,97631,33777],{"class":73},[49,97633,97634],{"class":51,"line":219},[49,97635,97636],{"class":66},"#也可以负索引获取一行\n",[49,97638,97639,97641,97643,97645],{"class":51,"line":233},[49,97640,97597],{"class":73},[49,97642,1361],{"class":77},[49,97644,1047],{"class":159},[49,97646,33777],{"class":73},[14,97648,97649],{},"③获取整列元素",[40,97651,97653],{"className":30909,"code":97652,"language":30911,"meta":27,"style":27},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[46,97654,97655,97660,97669,97674],{"__ignoreMap":27},[49,97656,97657],{"class":51,"line":52},[49,97658,97659],{"class":66},"#获取整列 数组名[:,列索引]\n",[49,97661,97662,97665,97667],{"class":51,"line":63},[49,97663,97664],{"class":73},"a[:,",[49,97666,915],{"class":159},[49,97668,33777],{"class":73},[49,97670,97671],{"class":51,"line":70},[49,97672,97673],{"class":66},"#也可以负索引获取一列\n",[49,97675,97676,97678,97680,97682],{"class":51,"line":219},[49,97677,97664],{"class":73},[49,97679,1361],{"class":77},[49,97681,1047],{"class":159},[49,97683,33777],{"class":73},[14,97685,97686],{},"④部分行部分列的元素",[40,97688,97690],{"className":30909,"code":97689,"language":30911,"meta":27,"style":27},"#部分行部分列 数组名[行切片，列切片]\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",[46,97691,97692,97697,97707,97711,97715,97720,97725,97729,97741,97745,97749,97754,97759,97764,97769,97773,97778],{"__ignoreMap":27},[49,97693,97694],{"class":51,"line":52},[49,97695,97696],{"class":66},"#部分行部分列 数组名[行切片，列切片]\n",[49,97698,97699,97702,97704],{"class":51,"line":63},[49,97700,97701],{"class":73},"a[:",[49,97703,915],{"class":159},[49,97705,97706],{"class":73},",:]\n",[49,97708,97709],{"class":51,"line":70},[49,97710,94095],{"class":66},[49,97712,97713],{"class":51,"line":219},[49,97714,94459],{"class":59},[49,97716,97717],{"class":51,"line":233},[49,97718,97719],{"class":59},"array([[ 1,  2,  3,  4,  5,  6],\n",[49,97721,97722],{"class":51,"line":241},[49,97723,97724],{"class":59},"       [ 7,  8,  9, 10, 11, 12]])\n",[49,97726,97727],{"class":51,"line":1920},[49,97728,94459],{"class":59},[49,97730,97731,97733,97735,97737,97739],{"class":51,"line":2011},[49,97732,97664],{"class":73},[49,97734,1047],{"class":159},[49,97736,1688],{"class":73},[49,97738,1122],{"class":159},[49,97740,33777],{"class":73},[49,97742,97743],{"class":51,"line":2017},[49,97744,94095],{"class":66},[49,97746,97747],{"class":51,"line":2029},[49,97748,94459],{"class":59},[49,97750,97751],{"class":51,"line":2311},[49,97752,97753],{"class":59},"array([[ 2,  3,  4],\n",[49,97755,97756],{"class":51,"line":2316},[49,97757,97758],{"class":59},"       [ 8,  9, 10],\n",[49,97760,97761],{"class":51,"line":2322},[49,97762,97763],{"class":59},"       [14, 15, 16],\n",[49,97765,97766],{"class":51,"line":2327},[49,97767,97768],{"class":59},"       [20, 21, 22]])\n",[49,97770,97771],{"class":51,"line":2341},[49,97772,94459],{"class":59},[49,97774,97775],{"class":51,"line":2346},[49,97776,97777],{"class":66},"#对列行同时进行切片，使用了step参数\n",[49,97779,97780,97783,97785,97788,97790],{"class":51,"line":2352},[49,97781,97782],{"class":73},"a[::",[49,97784,915],{"class":159},[49,97786,97787],{"class":73},",::",[49,97789,915],{"class":159},[49,97791,33777],{"class":73},[14,97793,97794],{},"⑤同时获取两个元素",[40,97796,97798],{"className":30909,"code":97797,"language":30911,"meta":27,"style":27},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[46,97799,97800,97805,97810],{"__ignoreMap":27},[49,97801,97802],{"class":51,"line":52},[49,97803,97804],{"class":66},"#同时获取第三行第二列，第四行第一列\n",[49,97806,97807],{"class":51,"line":63},[49,97808,97809],{"class":66},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[49,97811,97812,97815,97817,97819,97821,97823,97825,97827,97829],{"class":51,"line":70},[49,97813,97814],{"class":73},"a[(",[49,97816,915],{"class":159},[49,97818,1207],{"class":73},[49,97820,909],{"class":159},[49,97822,42778],{"class":73},[49,97824,1047],{"class":159},[49,97826,1207],{"class":73},[49,97828,1021],{"class":159},[49,97830,97831],{"class":73},")]\n",[14,97833,97834],{},"⑥切片，对行进行反向获取",[40,97836,97838],{"className":30909,"code":97837,"language":30911,"meta":27,"style":27},"#切片 对所有行进行反向获取\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",[46,97839,97840,97845,97855,97859,97863,97868,97873,97878,97883,97887,97892,97908,97912,97917,97922,97927,97932],{"__ignoreMap":27},[49,97841,97842],{"class":51,"line":52},[49,97843,97844],{"class":66},"#切片 对所有行进行反向获取\n",[49,97846,97847,97849,97851,97853],{"class":51,"line":63},[49,97848,97782],{"class":73},[49,97850,1361],{"class":77},[49,97852,1047],{"class":159},[49,97854,33777],{"class":73},[49,97856,97857],{"class":51,"line":70},[49,97858,94095],{"class":66},[49,97860,97861],{"class":51,"line":219},[49,97862,94459],{"class":59},[49,97864,97865],{"class":51,"line":233},[49,97866,97867],{"class":59},"array([[19, 20, 21, 22, 23, 24],\n",[49,97869,97870],{"class":51,"line":241},[49,97871,97872],{"class":59},"       [13, 14, 15, 16, 17, 18],\n",[49,97874,97875],{"class":51,"line":1920},[49,97876,97877],{"class":59},"       [ 7,  8,  9, 10, 11, 12],\n",[49,97879,97880],{"class":51,"line":2011},[49,97881,97882],{"class":59},"       [ 1,  2,  3,  4,  5,  6]])\n",[49,97884,97885],{"class":51,"line":2017},[49,97886,94459],{"class":59},[49,97888,97889],{"class":51,"line":2029},[49,97890,97891],{"class":66},"#对行列都进行反向切片获取\n",[49,97893,97894,97896,97898,97900,97902,97904,97906],{"class":51,"line":2311},[49,97895,97782],{"class":73},[49,97897,1361],{"class":77},[49,97899,1047],{"class":159},[49,97901,97787],{"class":73},[49,97903,1361],{"class":77},[49,97905,1047],{"class":159},[49,97907,33777],{"class":73},[49,97909,97910],{"class":51,"line":2316},[49,97911,94459],{"class":59},[49,97913,97914],{"class":51,"line":2322},[49,97915,97916],{"class":59},"array([[24, 23, 22, 21, 20, 19],\n",[49,97918,97919],{"class":51,"line":2327},[49,97920,97921],{"class":59},"       [18, 17, 16, 15, 14, 13],\n",[49,97923,97924],{"class":51,"line":2341},[49,97925,97926],{"class":59},"       [12, 11, 10,  9,  8,  7],\n",[49,97928,97929],{"class":51,"line":2346},[49,97930,97931],{"class":59},"       [ 6,  5,  4,  3,  2,  1]])\n",[49,97933,97934],{"class":51,"line":2352},[49,97935,94459],{"class":59},[14,97937,97938],{},"⑦修改元素",[40,97940,97942],{"className":30909,"code":97941,"language":30911,"meta":27,"style":27},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[46,97943,97944,97949,97967,97972],{"__ignoreMap":27},[49,97945,97946],{"class":51,"line":52},[49,97947,97948],{"class":66},"#获取前两行和前两列\n",[49,97950,97951,97954,97956,97958,97960,97963,97965],{"class":51,"line":63},[49,97952,97953],{"class":73},"sub_a",[49,97955,78],{"class":77},[49,97957,97701],{"class":73},[49,97959,915],{"class":159},[49,97961,97962],{"class":73},",:",[49,97964,915],{"class":159},[49,97966,33777],{"class":73},[49,97968,97969],{"class":51,"line":70},[49,97970,97971],{"class":66},"#修改sub_a第一个元素的值\n",[49,97973,97974,97977,97979,97981,97983,97985,97987],{"class":51,"line":219},[49,97975,97976],{"class":73},"sub_a[",[49,97978,1021],{"class":159},[49,97980,1207],{"class":73},[49,97982,1021],{"class":159},[49,97984,1769],{"class":73},[49,97986,78],{"class":77},[49,97988,97989],{"class":159},"100\n",[14,97991,97992],{},"⑧数组复制copy()",[40,97994,97996],{"className":30909,"code":97995,"language":30911,"meta":27,"style":27},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[46,97997,97998,98003,98013,98018],{"__ignoreMap":27},[49,97999,98000],{"class":51,"line":52},[49,98001,98002],{"class":66},"#数组复制\n",[49,98004,98005,98008,98010],{"class":51,"line":63},[49,98006,98007],{"class":73},"copy_a",[49,98009,78],{"class":77},[49,98011,98012],{"class":73},"np.copy(sub_a)\n",[49,98014,98015],{"class":51,"line":70},[49,98016,98017],{"class":66},"#修改copy_a后不影响原数组\n",[49,98019,98020,98023,98025,98027,98029,98031,98033],{"class":51,"line":219},[49,98021,98022],{"class":73},"copy_a[",[49,98024,1021],{"class":159},[49,98026,1207],{"class":73},[49,98028,1021],{"class":159},[49,98030,1769],{"class":73},[49,98032,78],{"class":77},[49,98034,97989],{"class":159},[14,98036,98037],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[757,98039,98040],{},"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":27,"searchDepth":63,"depth":63,"links":98042},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97559,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98049,"title":98050,"body":98051,"description":24072,"extension":766,"meta":98543,"navigation":398,"path":98544,"seo":98545,"stem":98546,"__hash__":98547},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98052,"toc":98535},[98053,98056,98060,98063,98066,98119,98122,98147,98150,98169,98189,98192,98208,98212,98258,98262,98304,98308,98311,98314,98317,98320,98323,98385,98445,98449,98452,98509,98513,98518,98527,98532],[10,98054,98050],{"id":98055},"_5改变数组的维度",[782,98057,98059],{"id":98058},"_51-使用reshape","5.1 使用reshape()",[14,98061,98062],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,98064,98065],{},"①一维数组转换为二维数组",[40,98067,98069],{"className":30909,"code":98068,"language":30911,"meta":27,"style":27},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[46,98070,98071,98087,98092,98097,98102],{"__ignoreMap":27},[49,98072,98073,98075,98077,98079,98081,98083,98085],{"class":51,"line":52},[49,98074,124],{"class":73},[49,98076,78],{"class":77},[49,98078,93533],{"class":73},[49,98080,1047],{"class":159},[49,98082,1207],{"class":73},[49,98084,1352],{"class":159},[49,98086,847],{"class":73},[49,98088,98089],{"class":51,"line":63},[49,98090,98091],{"class":66},"#将一维数组进行转换\n",[49,98093,98094],{"class":51,"line":70},[49,98095,98096],{"class":66},"#注意点：元素个数不可以变\n",[49,98098,98099],{"class":51,"line":219},[49,98100,98101],{"class":66},"#转换维度要保持一致，不一致就异常！！！\n",[49,98103,98104,98106,98108,98111,98113,98115,98117],{"class":51,"line":233},[49,98105,93837],{"class":73},[49,98107,78],{"class":77},[49,98109,98110],{"class":73},"a.reshape(",[49,98112,915],{"class":159},[49,98114,1207],{"class":73},[49,98116,1173],{"class":159},[49,98118,847],{"class":73},[14,98120,98121],{},"②一维数组转换为三维数组",[40,98123,98125],{"className":30909,"code":98124,"language":30911,"meta":27,"style":27},"aaa=a.reshape(2,3,2)\n",[46,98126,98127],{"__ignoreMap":27},[49,98128,98129,98131,98133,98135,98137,98139,98141,98143,98145],{"class":51,"line":52},[49,98130,96052],{"class":73},[49,98132,78],{"class":77},[49,98134,98110],{"class":73},[49,98136,915],{"class":159},[49,98138,1207],{"class":73},[49,98140,909],{"class":159},[49,98142,1207],{"class":73},[49,98144,915],{"class":159},[49,98146,847],{"class":73},[14,98148,98149],{},"③二维数组转化为一维数组",[40,98151,98153],{"className":30909,"code":98152,"language":30911,"meta":27,"style":27},"#知道元素个数：\naa.reshape(12)\n",[46,98154,98155,98160],{"__ignoreMap":27},[49,98156,98157],{"class":51,"line":52},[49,98158,98159],{"class":66},"#知道元素个数：\n",[49,98161,98162,98165,98167],{"class":51,"line":63},[49,98163,98164],{"class":73},"aa.reshape(",[49,98166,1327],{"class":159},[49,98168,847],{"class":73},[40,98170,98172],{"className":30909,"code":98171,"language":30911,"meta":27,"style":27},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[46,98173,98174,98179],{"__ignoreMap":27},[49,98175,98176],{"class":51,"line":52},[49,98177,98178],{"class":66},"#不知道元素个数，参数传递-1\n",[49,98180,98181,98183,98185,98187],{"class":51,"line":63},[49,98182,98164],{"class":73},[49,98184,1361],{"class":77},[49,98186,1047],{"class":159},[49,98188,847],{"class":73},[14,98190,98191],{},"④三维数组转换为一维数组",[40,98193,98195],{"className":30909,"code":98194,"language":30911,"meta":27,"style":27},"aaa.reshape(-1)\n",[46,98196,98197],{"__ignoreMap":27},[49,98198,98199,98202,98204,98206],{"class":51,"line":52},[49,98200,98201],{"class":73},"aaa.reshape(",[49,98203,1361],{"class":77},[49,98205,1047],{"class":159},[49,98207,847],{"class":73},[782,98209,98211],{"id":98210},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[40,98213,98215],{"className":30909,"code":98214,"language":30911,"meta":27,"style":27},"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",[46,98216,98217,98244,98249,98253],{"__ignoreMap":27},[49,98218,98219,98221,98223,98225,98227,98229,98231,98233,98235,98237,98239,98241],{"class":51,"line":52},[49,98220,93837],{"class":73},[49,98222,78],{"class":77},[49,98224,93533],{"class":73},[49,98226,1047],{"class":159},[49,98228,1207],{"class":73},[49,98230,1352],{"class":159},[49,98232,93538],{"class":73},[49,98234,915],{"class":159},[49,98236,1207],{"class":73},[49,98238,1173],{"class":159},[49,98240,1258],{"class":73},[49,98242,98243],{"class":66},"#转换为2行6列的数组\n",[49,98245,98246],{"class":51,"line":63},[49,98247,98248],{"class":73},"aa.revel()\n",[49,98250,98251],{"class":51,"line":70},[49,98252,94095],{"class":66},[49,98254,98255],{"class":51,"line":219},[49,98256,98257],{"class":66},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[782,98259,98261],{"id":98260},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[40,98263,98265],{"className":30909,"code":98264,"language":30911,"meta":27,"style":27},"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",[46,98266,98267,98291,98296,98300],{"__ignoreMap":27},[49,98268,98269,98271,98273,98275,98277,98279,98281,98283,98285,98287,98289],{"class":51,"line":52},[49,98270,93837],{"class":73},[49,98272,78],{"class":77},[49,98274,93533],{"class":73},[49,98276,1047],{"class":159},[49,98278,1207],{"class":73},[49,98280,1352],{"class":159},[49,98282,93538],{"class":73},[49,98284,915],{"class":159},[49,98286,1207],{"class":73},[49,98288,1173],{"class":159},[49,98290,847],{"class":73},[49,98292,98293],{"class":51,"line":63},[49,98294,98295],{"class":73},"aa.flatten()\n",[49,98297,98298],{"class":51,"line":70},[49,98299,94095],{"class":66},[49,98301,98302],{"class":51,"line":219},[49,98303,98257],{"class":66},[782,98305,98307],{"id":98306},"_54-使用resize","5.4 使用resize()",[14,98309,98310],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,98312,98313],{},"通过resize方法可以改变数组的维度",[14,98315,98316],{},"#resize修改数组维度",[14,98318,98319],{},"#以元组的形式指定形状",[14,98321,98322],{},"#改变的是原数组",[40,98324,98326],{"className":30909,"code":98325,"language":30911,"meta":27,"style":27},"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",[46,98327,98328,98344,98364,98377,98381],{"__ignoreMap":27},[49,98329,98330,98332,98334,98336,98338,98340,98342],{"class":51,"line":52},[49,98331,124],{"class":73},[49,98333,78],{"class":77},[49,98335,93533],{"class":73},[49,98337,1047],{"class":159},[49,98339,1207],{"class":73},[49,98341,1352],{"class":159},[49,98343,847],{"class":73},[49,98345,98346,98349,98351,98353,98355,98357,98359,98361],{"class":51,"line":63},[49,98347,98348],{"class":73},"a.shape",[49,98350,78],{"class":77},[49,98352,841],{"class":73},[49,98354,915],{"class":159},[49,98356,1207],{"class":73},[49,98358,1173],{"class":159},[49,98360,1258],{"class":73},[49,98362,98363],{"class":66},"#改变了原数组\n",[49,98365,98366,98368,98370,98373,98375],{"class":51,"line":70},[49,98367,124],{"class":73},[49,98369,78],{"class":77},[49,98371,98372],{"class":73},"resize((",[49,98374,1327],{"class":159},[49,98376,31028],{"class":73},[49,98378,98379],{"class":51,"line":219},[49,98380,94095],{"class":66},[49,98382,98383],{"class":51,"line":233},[49,98384,98257],{"class":66},[40,98386,98388],{"className":30909,"code":98387,"language":30911,"meta":27,"style":27},"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",[46,98389,98390,98403,98407,98411,98416,98421,98426,98431,98436,98441],{"__ignoreMap":27},[49,98391,98392,98395,98397,98399,98401],{"class":51,"line":52},[49,98393,98394],{"class":73},"a.resize((",[49,98396,1173],{"class":159},[49,98398,1207],{"class":73},[49,98400,915],{"class":159},[49,98402,31028],{"class":73},[49,98404,98405],{"class":51,"line":63},[49,98406,94095],{"class":66},[49,98408,98409],{"class":51,"line":70},[49,98410,94459],{"class":59},[49,98412,98413],{"class":51,"line":219},[49,98414,98415],{"class":59},"array([[ 1,  2],\n",[49,98417,98418],{"class":51,"line":233},[49,98419,98420],{"class":59},"       [ 3,  4],\n",[49,98422,98423],{"class":51,"line":241},[49,98424,98425],{"class":59},"       [ 5,  6],\n",[49,98427,98428],{"class":51,"line":1920},[49,98429,98430],{"class":59},"       [ 7,  8],\n",[49,98432,98433],{"class":51,"line":2011},[49,98434,98435],{"class":59},"       [ 9, 10],\n",[49,98437,98438],{"class":51,"line":2017},[49,98439,98440],{"class":59},"       [11, 12]])\n",[49,98442,98443],{"class":51,"line":2029},[49,98444,94459],{"class":59},[782,98446,98448],{"id":98447},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,98450,98451],{},"改变了原数组",[40,98453,98455],{"className":30909,"code":98454,"language":30911,"meta":27,"style":27},"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",[46,98456,98457,98473,98489,98493,98497,98501,98505],{"__ignoreMap":27},[49,98458,98459,98461,98463,98465,98467,98469,98471],{"class":51,"line":52},[49,98460,124],{"class":73},[49,98462,78],{"class":77},[49,98464,93533],{"class":73},[49,98466,1047],{"class":159},[49,98468,1207],{"class":73},[49,98470,1352],{"class":159},[49,98472,847],{"class":73},[49,98474,98475,98477,98479,98481,98483,98485,98487],{"class":51,"line":63},[49,98476,98348],{"class":73},[49,98478,78],{"class":77},[49,98480,841],{"class":73},[49,98482,915],{"class":159},[49,98484,1207],{"class":73},[49,98486,1173],{"class":159},[49,98488,847],{"class":73},[49,98490,98491],{"class":51,"line":70},[49,98492,94095],{"class":66},[49,98494,98495],{"class":51,"line":219},[49,98496,94459],{"class":59},[49,98498,98499],{"class":51,"line":233},[49,98500,97719],{"class":59},[49,98502,98503],{"class":51,"line":241},[49,98504,97724],{"class":59},[49,98506,98507],{"class":51,"line":1920},[49,98508,94459],{"class":59},[782,98510,98512],{"id":98511},"_56-重要比较","5.6 重要比较：",[14,98514,98515],{},[25,98516],{"alt":27,"src":98517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98519,98520,98521,98523,98524,98526],{},"口诀：NumPy 函数要么用 ",[46,98522,96494],{},"，要么用 ",[46,98525,32027],{},"，创建结构用 shape，造数据用 size",[14,98528,98529],{},[25,98530],{"alt":27,"src":98531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[757,98533,98534],{},"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":27,"searchDepth":63,"depth":63,"links":98536},[98537,98538,98539,98540,98541,98542],{"id":98058,"depth":63,"text":98059},{"id":98210,"depth":63,"text":98211},{"id":98260,"depth":63,"text":98261},{"id":98306,"depth":63,"text":98307},{"id":98447,"depth":63,"text":98448},{"id":98511,"depth":63,"text":98512},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98050,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98549,"title":98550,"body":98551,"description":24072,"extension":766,"meta":99623,"navigation":398,"path":99624,"seo":99625,"stem":99626,"__hash__":99627},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98552,"toc":99617},[98553,98556,98560,98563,98566,98569,98634,98637,98677,98680,98762,98765,98770,98792,98794,98799,98804,98807,98810,98965,98968,99170,99174,99177,99180,99248,99250,99255,99258,99261,99341,99345,99348,99350,99423,99425,99430,99432,99512,99516,99519,99522,99525,99528,99531,99534,99614],[10,98554,98550],{"id":98555},"_6数组的拼接",[782,98557,98559],{"id":98558},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98561,98562],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98564,98565],{},"函数内部传两个数列构成的数列或者元组",[14,98567,98568],{},"①一维数组的拼接",[40,98570,98572],{"className":30909,"code":98571,"language":30911,"meta":27,"style":27},"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",[46,98573,98574,98594,98614,98619,98624,98629],{"__ignoreMap":27},[49,98575,98576,98578,98580,98582,98584,98586,98588,98590,98592],{"class":51,"line":52},[49,98577,124],{"class":73},[49,98579,78],{"class":77},[49,98581,93555],{"class":73},[49,98583,1047],{"class":159},[49,98585,1207],{"class":73},[49,98587,915],{"class":159},[49,98589,1207],{"class":73},[49,98591,909],{"class":159},[49,98593,5354],{"class":73},[49,98595,98596,98598,98600,98602,98604,98606,98608,98610,98612],{"class":51,"line":63},[49,98597,1092],{"class":73},[49,98599,78],{"class":77},[49,98601,93555],{"class":73},[49,98603,1122],{"class":159},[49,98605,1207],{"class":73},[49,98607,1148],{"class":159},[49,98609,1207],{"class":73},[49,98611,1173],{"class":159},[49,98613,5354],{"class":73},[49,98615,98616],{"class":51,"line":70},[49,98617,98618],{"class":66},"#调用concatenate进行数组拼接\n",[49,98620,98621],{"class":51,"line":219},[49,98622,98623],{"class":73},"np.concatenate((a,b))\n",[49,98625,98626],{"class":51,"line":233},[49,98627,98628],{"class":66},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[49,98630,98631],{"class":51,"line":241},[49,98632,98633],{"class":66},"#np.concatenate([a,b])\n",[14,98635,98636],{},"②一维多个数组拼接",[40,98638,98640],{"className":30909,"code":98639,"language":30911,"meta":27,"style":27},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[46,98641,98642,98647,98667,98672],{"__ignoreMap":27},[49,98643,98644],{"class":51,"line":52},[49,98645,98646],{"class":66},"#也可以多个数组进行拼接\n",[49,98648,98649,98651,98653,98655,98657,98659,98661,98663,98665],{"class":51,"line":63},[49,98650,1117],{"class":73},[49,98652,78],{"class":77},[49,98654,93555],{"class":73},[49,98656,1275],{"class":159},[49,98658,1207],{"class":73},[49,98660,1301],{"class":159},[49,98662,1207],{"class":73},[49,98664,1352],{"class":159},[49,98666,5354],{"class":73},[49,98668,98669],{"class":51,"line":70},[49,98670,98671],{"class":73},"c\n",[49,98673,98674],{"class":51,"line":219},[49,98675,98676],{"class":73},"np.concatenate((a,b,c))\n",[14,98678,98679],{},"③二维数组拼接",[40,98681,98683],{"className":30909,"code":98682,"language":30911,"meta":27,"style":27},"#二维数组使用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",[46,98684,98685,98690,98714,98739,98744,98749],{"__ignoreMap":27},[49,98686,98687],{"class":51,"line":52},[49,98688,98689],{"class":66},"#二维数组使用concatenate进行拼接\n",[49,98691,98692,98694,98696,98698,98700,98702,98704,98706,98708,98710,98712],{"class":51,"line":63},[49,98693,93837],{"class":73},[49,98695,78],{"class":77},[49,98697,93533],{"class":73},[49,98699,1047],{"class":159},[49,98701,1207],{"class":73},[49,98703,1352],{"class":159},[49,98705,93538],{"class":73},[49,98707,909],{"class":159},[49,98709,1207],{"class":73},[49,98711,1122],{"class":159},[49,98713,847],{"class":73},[49,98715,98716,98719,98721,98723,98725,98727,98729,98731,98733,98735,98737],{"class":51,"line":70},[49,98717,98718],{"class":73},"bb",[49,98720,78],{"class":77},[49,98722,93533],{"class":73},[49,98724,1166],{"class":159},[49,98726,1207],{"class":73},[49,98728,1471],{"class":159},[49,98730,93538],{"class":73},[49,98732,909],{"class":159},[49,98734,1207],{"class":73},[49,98736,1122],{"class":159},[49,98738,847],{"class":73},[49,98740,98741],{"class":51,"line":219},[49,98742,98743],{"class":66},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[49,98745,98746],{"class":51,"line":233},[49,98747,98748],{"class":66},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[49,98750,98751,98754,98756,98758,98760],{"class":51,"line":241},[49,98752,98753],{"class":73},"np.concatenate((aa,bb),",[49,98755,48045],{"class":5913},[49,98757,78],{"class":77},[49,98759,1021],{"class":159},[49,98761,847],{"class":73},[14,98763,98764],{},"结果：",[14,98766,98767],{},[25,98768],{"alt":27,"src":98769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[40,98771,98773],{"className":30909,"code":98772,"language":30911,"meta":27,"style":27},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[46,98774,98775,98780],{"__ignoreMap":27},[49,98776,98777],{"class":51,"line":52},[49,98778,98779],{"class":66},"#指定axis为1进行拼接\n",[49,98781,98782,98784,98786,98788,98790],{"class":51,"line":63},[49,98783,98753],{"class":73},[49,98785,48045],{"class":5913},[49,98787,78],{"class":77},[49,98789,1047],{"class":159},[49,98791,847],{"class":73},[14,98793,98764],{},[14,98795,98796],{},[25,98797],{"alt":27,"src":98798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98800,98801],{},[112,98802,98803],{},"二维数组总结：0竖着方向，1横着方向",[14,98805,98806],{},"④三维数组拼接",[14,98808,98809],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[40,98811,98813],{"className":30909,"code":98812,"language":30911,"meta":27,"style":27},"#两个三行六列\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",[46,98814,98815,98820,98848,98878,98883,98900,98905,98910,98915,98932,98937,98942,98947,98960],{"__ignoreMap":27},[49,98816,98817],{"class":51,"line":52},[49,98818,98819],{"class":66},"#两个三行六列\n",[49,98821,98822,98824,98826,98828,98830,98832,98834,98836,98838,98840,98842,98844,98846],{"class":51,"line":63},[49,98823,96052],{"class":73},[49,98825,78],{"class":77},[49,98827,93533],{"class":73},[49,98829,1047],{"class":159},[49,98831,1207],{"class":73},[49,98833,1154],{"class":159},[49,98835,93538],{"class":73},[49,98837,915],{"class":159},[49,98839,1207],{"class":73},[49,98841,909],{"class":159},[49,98843,1207],{"class":73},[49,98845,1173],{"class":159},[49,98847,847],{"class":73},[49,98849,98850,98853,98855,98857,98859,98861,98864,98866,98868,98870,98872,98874,98876],{"class":51,"line":70},[49,98851,98852],{"class":73},"bbb",[49,98854,78],{"class":77},[49,98856,93533],{"class":73},[49,98858,1166],{"class":159},[49,98860,1207],{"class":73},[49,98862,98863],{"class":159},"137",[49,98865,93538],{"class":73},[49,98867,915],{"class":159},[49,98869,1207],{"class":73},[49,98871,909],{"class":159},[49,98873,1207],{"class":73},[49,98875,1173],{"class":159},[49,98877,847],{"class":73},[49,98879,98880],{"class":51,"line":219},[49,98881,98882],{"class":66},"#axis=0\n",[49,98884,98885,98887,98889,98892,98894,98896,98898],{"class":51,"line":233},[49,98886,1524],{"class":73},[49,98888,78],{"class":77},[49,98890,98891],{"class":73},"np.concatenate((aaa,bbb),",[49,98893,48045],{"class":5913},[49,98895,78],{"class":77},[49,98897,1021],{"class":159},[49,98899,847],{"class":73},[49,98901,98902],{"class":51,"line":241},[49,98903,98904],{"class":73},"s.shape\n",[49,98906,98907],{"class":51,"line":1920},[49,98908,98909],{"class":66},"#输出：(4,3,6)\n",[49,98911,98912],{"class":51,"line":2011},[49,98913,98914],{"class":66},"#axis=1\n",[49,98916,98917,98920,98922,98924,98926,98928,98930],{"class":51,"line":2017},[49,98918,98919],{"class":73},"ss",[49,98921,78],{"class":77},[49,98923,98891],{"class":73},[49,98925,48045],{"class":5913},[49,98927,78],{"class":77},[49,98929,1047],{"class":159},[49,98931,847],{"class":73},[49,98933,98934],{"class":51,"line":2029},[49,98935,98936],{"class":73},"ss.shape\n",[49,98938,98939],{"class":51,"line":2311},[49,98940,98941],{"class":66},"#输出：(2,6,6)\n",[49,98943,98944],{"class":51,"line":2316},[49,98945,98946],{"class":66},"#axis=2\n",[49,98948,98949,98951,98953,98955,98957],{"class":51,"line":2322},[49,98950,98891],{"class":73},[49,98952,48045],{"class":5913},[49,98954,78],{"class":77},[49,98956,915],{"class":159},[49,98958,98959],{"class":73},").shape\n",[49,98961,98962],{"class":51,"line":2327},[49,98963,98964],{"class":66},"#输出：（2，3，12）\n",[14,98966,98967],{},"⑤四维数组拼接",[40,98969,98971],{"className":30909,"code":98970,"language":30911,"meta":27,"style":27},"#两个三行六列\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",[46,98972,98973,98977,99005,99033,99058,99084,99088,99101,99106,99110,99122,99127,99131,99143,99148,99153,99165],{"__ignoreMap":27},[49,98974,98975],{"class":51,"line":52},[49,98976,98819],{"class":66},[49,98978,98979,98981,98983,98985,98987,98989,98991,98993,98995,98997,98999,99001,99003],{"class":51,"line":63},[49,98980,96052],{"class":73},[49,98982,78],{"class":77},[49,98984,93533],{"class":73},[49,98986,1047],{"class":159},[49,98988,1207],{"class":73},[49,98990,1154],{"class":159},[49,98992,93538],{"class":73},[49,98994,915],{"class":159},[49,98996,1207],{"class":73},[49,98998,909],{"class":159},[49,99000,1207],{"class":73},[49,99002,1173],{"class":159},[49,99004,847],{"class":73},[49,99006,99007,99009,99011,99013,99015,99017,99019,99021,99023,99025,99027,99029,99031],{"class":51,"line":70},[49,99008,98852],{"class":73},[49,99010,78],{"class":77},[49,99012,93533],{"class":73},[49,99014,1166],{"class":159},[49,99016,1207],{"class":73},[49,99018,98863],{"class":159},[49,99020,93538],{"class":73},[49,99022,915],{"class":159},[49,99024,1207],{"class":73},[49,99026,909],{"class":159},[49,99028,1207],{"class":73},[49,99030,1173],{"class":159},[49,99032,847],{"class":73},[49,99034,99035,99038,99040,99042,99044,99046,99048,99050,99052,99054,99056],{"class":51,"line":219},[49,99036,99037],{"class":73},"aaaa",[49,99039,78],{"class":77},[49,99041,98201],{"class":73},[49,99043,915],{"class":159},[49,99045,1207],{"class":73},[49,99047,909],{"class":159},[49,99049,1207],{"class":73},[49,99051,909],{"class":159},[49,99053,1207],{"class":73},[49,99055,915],{"class":159},[49,99057,847],{"class":73},[49,99059,99060,99063,99065,99068,99070,99072,99074,99076,99078,99080,99082],{"class":51,"line":233},[49,99061,99062],{"class":73},"bbbb",[49,99064,78],{"class":77},[49,99066,99067],{"class":73},"bbb.reshape(",[49,99069,915],{"class":159},[49,99071,1207],{"class":73},[49,99073,909],{"class":159},[49,99075,1207],{"class":73},[49,99077,909],{"class":159},[49,99079,1207],{"class":73},[49,99081,915],{"class":159},[49,99083,847],{"class":73},[49,99085,99086],{"class":51,"line":241},[49,99087,98882],{"class":66},[49,99089,99090,99093,99095,99097,99099],{"class":51,"line":1920},[49,99091,99092],{"class":73},"np.concatenate((aaaa,bbbb),",[49,99094,48045],{"class":5913},[49,99096,78],{"class":77},[49,99098,1021],{"class":159},[49,99100,98959],{"class":73},[49,99102,99103],{"class":51,"line":2011},[49,99104,99105],{"class":66},"#结果：（4，3，3，2）\n",[49,99107,99108],{"class":51,"line":2017},[49,99109,98914],{"class":66},[49,99111,99112,99114,99116,99118,99120],{"class":51,"line":2029},[49,99113,99092],{"class":73},[49,99115,48045],{"class":5913},[49,99117,78],{"class":77},[49,99119,1047],{"class":159},[49,99121,98959],{"class":73},[49,99123,99124],{"class":51,"line":2311},[49,99125,99126],{"class":66},"#结果：（2，6，3，2）\n",[49,99128,99129],{"class":51,"line":2316},[49,99130,98946],{"class":66},[49,99132,99133,99135,99137,99139,99141],{"class":51,"line":2322},[49,99134,99092],{"class":73},[49,99136,48045],{"class":5913},[49,99138,78],{"class":77},[49,99140,915],{"class":159},[49,99142,98959],{"class":73},[49,99144,99145],{"class":51,"line":2327},[49,99146,99147],{"class":66},"#结果：（2，3，6，2）\n",[49,99149,99150],{"class":51,"line":2341},[49,99151,99152],{"class":66},"#axis=3\n",[49,99154,99155,99157,99159,99161,99163],{"class":51,"line":2346},[49,99156,99092],{"class":73},[49,99158,48045],{"class":5913},[49,99160,78],{"class":77},[49,99162,909],{"class":159},[49,99164,98959],{"class":73},[49,99166,99167],{"class":51,"line":2352},[49,99168,99169],{"class":66},"#结果：（2，3，3，4）\n",[782,99171,99173],{"id":99172},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,99175,99176],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,99178,99179],{},"①二维数组",[40,99181,99183],{"className":30909,"code":99182,"language":30911,"meta":27,"style":27},"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",[46,99184,99185,99209,99233,99238,99243],{"__ignoreMap":27},[49,99186,99187,99189,99191,99193,99195,99197,99199,99201,99203,99205,99207],{"class":51,"line":52},[49,99188,93837],{"class":73},[49,99190,78],{"class":77},[49,99192,93533],{"class":73},[49,99194,1047],{"class":159},[49,99196,1207],{"class":73},[49,99198,1352],{"class":159},[49,99200,93538],{"class":73},[49,99202,909],{"class":159},[49,99204,1207],{"class":73},[49,99206,1122],{"class":159},[49,99208,847],{"class":73},[49,99210,99211,99213,99215,99217,99219,99221,99223,99225,99227,99229,99231],{"class":51,"line":63},[49,99212,98718],{"class":73},[49,99214,78],{"class":77},[49,99216,93533],{"class":73},[49,99218,1166],{"class":159},[49,99220,1207],{"class":73},[49,99222,1471],{"class":159},[49,99224,93538],{"class":73},[49,99226,909],{"class":159},[49,99228,1207],{"class":73},[49,99230,1122],{"class":159},[49,99232,847],{"class":73},[49,99234,99235],{"class":51,"line":70},[49,99236,99237],{"class":73},"np.hstack((aa,bb))\n",[49,99239,99240],{"class":51,"line":219},[49,99241,99242],{"class":66},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[49,99244,99245],{"class":51,"line":233},[49,99246,99247],{"class":66},"#np.hstack([aa,bb])\n",[14,99249,98764],{},[14,99251,99252],{},[25,99253],{"alt":27,"src":99254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,99256,99257],{},"等效于concatenate()函数中axis=1时的情况",[14,99259,99260],{},"②三维数组",[40,99262,99264],{"className":30909,"code":99263,"language":30911,"meta":27,"style":27},"#两个三行六列\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",[46,99265,99266,99270,99298,99326,99331,99336],{"__ignoreMap":27},[49,99267,99268],{"class":51,"line":52},[49,99269,98819],{"class":66},[49,99271,99272,99274,99276,99278,99280,99282,99284,99286,99288,99290,99292,99294,99296],{"class":51,"line":63},[49,99273,96052],{"class":73},[49,99275,78],{"class":77},[49,99277,93533],{"class":73},[49,99279,1047],{"class":159},[49,99281,1207],{"class":73},[49,99283,1154],{"class":159},[49,99285,93538],{"class":73},[49,99287,915],{"class":159},[49,99289,1207],{"class":73},[49,99291,909],{"class":159},[49,99293,1207],{"class":73},[49,99295,1173],{"class":159},[49,99297,847],{"class":73},[49,99299,99300,99302,99304,99306,99308,99310,99312,99314,99316,99318,99320,99322,99324],{"class":51,"line":70},[49,99301,98852],{"class":73},[49,99303,78],{"class":77},[49,99305,93533],{"class":73},[49,99307,1166],{"class":159},[49,99309,1207],{"class":73},[49,99311,98863],{"class":159},[49,99313,93538],{"class":73},[49,99315,915],{"class":159},[49,99317,1207],{"class":73},[49,99319,909],{"class":159},[49,99321,1207],{"class":73},[49,99323,1173],{"class":159},[49,99325,847],{"class":73},[49,99327,99328],{"class":51,"line":219},[49,99329,99330],{"class":66},"#使用hstack\n",[49,99332,99333],{"class":51,"line":233},[49,99334,99335],{"class":73},"np.hstack((aaa,bbb)).shape\n",[49,99337,99338],{"class":51,"line":241},[49,99339,99340],{"class":66},"#输出：（2，6，6）\n",[782,99342,99344],{"id":99343},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,99346,99347],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,99349,99179],{},[40,99351,99353],{"className":30909,"code":99352,"language":30911,"meta":27,"style":27},"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",[46,99354,99355,99379,99403,99408,99413,99418],{"__ignoreMap":27},[49,99356,99357,99359,99361,99363,99365,99367,99369,99371,99373,99375,99377],{"class":51,"line":52},[49,99358,93837],{"class":73},[49,99360,78],{"class":77},[49,99362,93533],{"class":73},[49,99364,1047],{"class":159},[49,99366,1207],{"class":73},[49,99368,1352],{"class":159},[49,99370,93538],{"class":73},[49,99372,909],{"class":159},[49,99374,1207],{"class":73},[49,99376,1122],{"class":159},[49,99378,847],{"class":73},[49,99380,99381,99383,99385,99387,99389,99391,99393,99395,99397,99399,99401],{"class":51,"line":63},[49,99382,98718],{"class":73},[49,99384,78],{"class":77},[49,99386,93533],{"class":73},[49,99388,1166],{"class":159},[49,99390,1207],{"class":73},[49,99392,1471],{"class":159},[49,99394,93538],{"class":73},[49,99396,909],{"class":159},[49,99398,1207],{"class":73},[49,99400,1122],{"class":159},[49,99402,847],{"class":73},[49,99404,99405],{"class":51,"line":70},[49,99406,99407],{"class":66},"#vstack 垂直方向进行堆叠\n",[49,99409,99410],{"class":51,"line":219},[49,99411,99412],{"class":73},"np.vstack((aa,bb))\n",[49,99414,99415],{"class":51,"line":233},[49,99416,99417],{"class":66},"#与hstack传的参数类似，等价于：\n",[49,99419,99420],{"class":51,"line":241},[49,99421,99422],{"class":73},"np.vstack([aa,bb])\n",[14,99424,98764],{},[14,99426,99427],{},[25,99428],{"alt":27,"src":99429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,99431,99260],{},[40,99433,99435],{"className":30909,"code":99434,"language":30911,"meta":27,"style":27},"#两个三行六列\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",[46,99436,99437,99441,99469,99497,99502,99507],{"__ignoreMap":27},[49,99438,99439],{"class":51,"line":52},[49,99440,98819],{"class":66},[49,99442,99443,99445,99447,99449,99451,99453,99455,99457,99459,99461,99463,99465,99467],{"class":51,"line":63},[49,99444,96052],{"class":73},[49,99446,78],{"class":77},[49,99448,93533],{"class":73},[49,99450,1047],{"class":159},[49,99452,1207],{"class":73},[49,99454,1154],{"class":159},[49,99456,93538],{"class":73},[49,99458,915],{"class":159},[49,99460,1207],{"class":73},[49,99462,909],{"class":159},[49,99464,1207],{"class":73},[49,99466,1173],{"class":159},[49,99468,847],{"class":73},[49,99470,99471,99473,99475,99477,99479,99481,99483,99485,99487,99489,99491,99493,99495],{"class":51,"line":70},[49,99472,98852],{"class":73},[49,99474,78],{"class":77},[49,99476,93533],{"class":73},[49,99478,1166],{"class":159},[49,99480,1207],{"class":73},[49,99482,98863],{"class":159},[49,99484,93538],{"class":73},[49,99486,915],{"class":159},[49,99488,1207],{"class":73},[49,99490,909],{"class":159},[49,99492,1207],{"class":73},[49,99494,1173],{"class":159},[49,99496,847],{"class":73},[49,99498,99499],{"class":51,"line":219},[49,99500,99501],{"class":66},"#使用vstack\n",[49,99503,99504],{"class":51,"line":233},[49,99505,99506],{"class":73},"np.vstack((aaa,bbb)).shape\n",[49,99508,99509],{"class":51,"line":241},[49,99510,99511],{"class":66},"#输出：（4，3，6）\n",[782,99513,99515],{"id":99514},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99517,99518],{},"该方法是三维数组特有的方法",[14,99520,99521],{},"也就是说",[14,99523,99524],{},"一维数组拼接方法用：concatenate()",[14,99526,99527],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99529,99530],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99532,99533],{},"四维数组及多维数组只能用concatenate进行拼接",[40,99535,99537],{"className":30909,"code":99536,"language":30911,"meta":27,"style":27},"#两个三行六列\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",[46,99538,99539,99543,99571,99599,99604,99609],{"__ignoreMap":27},[49,99540,99541],{"class":51,"line":52},[49,99542,98819],{"class":66},[49,99544,99545,99547,99549,99551,99553,99555,99557,99559,99561,99563,99565,99567,99569],{"class":51,"line":63},[49,99546,96052],{"class":73},[49,99548,78],{"class":77},[49,99550,93533],{"class":73},[49,99552,1047],{"class":159},[49,99554,1207],{"class":73},[49,99556,1154],{"class":159},[49,99558,93538],{"class":73},[49,99560,915],{"class":159},[49,99562,1207],{"class":73},[49,99564,909],{"class":159},[49,99566,1207],{"class":73},[49,99568,1173],{"class":159},[49,99570,847],{"class":73},[49,99572,99573,99575,99577,99579,99581,99583,99585,99587,99589,99591,99593,99595,99597],{"class":51,"line":70},[49,99574,98852],{"class":73},[49,99576,78],{"class":77},[49,99578,93533],{"class":73},[49,99580,1166],{"class":159},[49,99582,1207],{"class":73},[49,99584,98863],{"class":159},[49,99586,93538],{"class":73},[49,99588,915],{"class":159},[49,99590,1207],{"class":73},[49,99592,909],{"class":159},[49,99594,1207],{"class":73},[49,99596,1173],{"class":159},[49,99598,847],{"class":73},[49,99600,99601],{"class":51,"line":219},[49,99602,99603],{"class":66},"#使用dstack\n",[49,99605,99606],{"class":51,"line":233},[49,99607,99608],{"class":73},"np.dstack((aaa,bbb)).shape\n",[49,99610,99611],{"class":51,"line":241},[49,99612,99613],{"class":66},"#结果：（2，3，12）\n",[757,99615,99616],{},"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":27,"searchDepth":63,"depth":63,"links":99618},[99619,99620,99621,99622],{"id":98558,"depth":63,"text":98559},{"id":99172,"depth":63,"text":99173},{"id":99343,"depth":63,"text":99344},{"id":99514,"depth":63,"text":99515},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98550,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99629,"title":99630,"body":99631,"description":24072,"extension":766,"meta":99906,"navigation":398,"path":99907,"seo":99908,"stem":99909,"__hash__":99910},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99632,"toc":99904},[99633,99636,99639,99733,99736,99739,99742,99745,99748,99751,99754,99757,99901],[10,99634,99630],{"id":99635},"_7数组转置",[14,99637,99638],{},"使用transpose()函数",[40,99640,99642],{"className":30909,"code":99641,"language":30911,"meta":27,"style":27},"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",[46,99643,99644,99654,99678,99683,99688,99693,99698,99706,99710,99714,99719,99724,99729],{"__ignoreMap":27},[49,99645,99646,99648,99650,99652],{"class":51,"line":52},[49,99647,30923],{"class":77},[49,99649,31911],{"class":73},[49,99651,31914],{"class":77},[49,99653,31917],{"class":73},[49,99655,99656,99658,99660,99662,99664,99666,99668,99670,99672,99674,99676],{"class":51,"line":63},[49,99657,124],{"class":73},[49,99659,78],{"class":77},[49,99661,32248],{"class":73},[49,99663,1047],{"class":159},[49,99665,1207],{"class":73},[49,99667,1352],{"class":159},[49,99669,93538],{"class":73},[49,99671,1122],{"class":159},[49,99673,1207],{"class":73},[49,99675,909],{"class":159},[49,99677,847],{"class":73},[49,99679,99680],{"class":51,"line":70},[49,99681,99682],{"class":66},"#二维数组转置\n",[49,99684,99685],{"class":51,"line":219},[49,99686,99687],{"class":66},"#调用transpose()函数\n",[49,99689,99690],{"class":51,"line":233},[49,99691,99692],{"class":73},"a.transpose()\n",[49,99694,99695],{"class":51,"line":241},[49,99696,99697],{"class":66},"#对于二维数组也可以采用.T来实现\n",[49,99699,99700,99703],{"class":51,"line":1920},[49,99701,99702],{"class":73},"a.T",[49,99704,99705],{"class":66},"#与上述代码一样\n",[49,99707,99708],{"class":51,"line":2011},[49,99709,94095],{"class":66},[49,99711,99712],{"class":51,"line":2017},[49,99713,94459],{"class":59},[49,99715,99716],{"class":51,"line":2029},[49,99717,99718],{"class":59},"array([[ 1,  4,  7, 10],\n",[49,99720,99721],{"class":51,"line":2311},[49,99722,99723],{"class":59},"       [ 2,  5,  8, 11],\n",[49,99725,99726],{"class":51,"line":2316},[49,99727,99728],{"class":59},"       [ 3,  6,  9, 12]])\n",[49,99730,99731],{"class":51,"line":2322},[49,99732,94459],{"class":59},[14,99734,99735],{},"也可以使用np.transpose()的形式",[14,99737,99738],{},"#多维数组进行转置 np.transpose()",[14,99740,99741],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99743,99744],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99746,99747],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99749,99750],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99752,99753],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99755,99756],{},"四维及以上的数组也是一样的道理",[40,99758,99760],{"className":30909,"code":99759,"language":30911,"meta":27,"style":27},"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",[46,99761,99762,99790,99795,99800,99805,99823,99828,99860,99865,99870,99875,99896],{"__ignoreMap":27},[49,99763,99764,99766,99768,99770,99772,99774,99776,99778,99780,99782,99784,99786,99788],{"class":51,"line":52},[49,99765,1649],{"class":73},[49,99767,78],{"class":77},[49,99769,93533],{"class":73},[49,99771,1047],{"class":159},[49,99773,1207],{"class":73},[49,99775,1154],{"class":159},[49,99777,93538],{"class":73},[49,99779,909],{"class":159},[49,99781,1207],{"class":73},[49,99783,1173],{"class":159},[49,99785,1207],{"class":73},[49,99787,915],{"class":159},[49,99789,847],{"class":73},[49,99791,99792],{"class":51,"line":63},[49,99793,99794],{"class":73},"x.shape\n",[49,99796,99797],{"class":51,"line":70},[49,99798,99799],{"class":66},"#结果：（3,6,2）\n",[49,99801,99802],{"class":51,"line":219},[49,99803,99804],{"class":66},"#使用np.transpose()进行转置 变为(2,6,3)\n",[49,99806,99807,99810,99812,99814,99816,99818,99820],{"class":51,"line":233},[49,99808,99809],{"class":73},"np.transpose(x,(",[49,99811,915],{"class":159},[49,99813,1207],{"class":73},[49,99815,1047],{"class":159},[49,99817,1207],{"class":73},[49,99819,1021],{"class":159},[49,99821,99822],{"class":73},")).shape\n",[49,99824,99825],{"class":51,"line":241},[49,99826,99827],{"class":66},"#结果：(2,6,3)\n",[49,99829,99830,99832,99834,99836,99838,99840,99842,99844,99846,99848,99850,99852,99854,99856,99858],{"class":51,"line":1920},[49,99831,99037],{"class":73},[49,99833,78],{"class":77},[49,99835,93533],{"class":73},[49,99837,1047],{"class":159},[49,99839,1207],{"class":73},[49,99841,1154],{"class":159},[49,99843,93538],{"class":73},[49,99845,909],{"class":159},[49,99847,1207],{"class":73},[49,99849,915],{"class":159},[49,99851,1207],{"class":73},[49,99853,1047],{"class":159},[49,99855,1207],{"class":73},[49,99857,1173],{"class":159},[49,99859,847],{"class":73},[49,99861,99862],{"class":51,"line":2011},[49,99863,99864],{"class":73},"aaaa.shape\n",[49,99866,99867],{"class":51,"line":2017},[49,99868,99869],{"class":66},"#结果：（3，2，1，6）\n",[49,99871,99872],{"class":51,"line":2029},[49,99873,99874],{"class":66},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[49,99876,99877,99880,99882,99884,99886,99888,99890,99892,99894],{"class":51,"line":2311},[49,99878,99879],{"class":73},"np.transpose(aaaa,(",[49,99881,1047],{"class":159},[49,99883,1207],{"class":73},[49,99885,915],{"class":159},[49,99887,1207],{"class":73},[49,99889,1021],{"class":159},[49,99891,1207],{"class":73},[49,99893,909],{"class":159},[49,99895,99822],{"class":73},[49,99897,99898],{"class":51,"line":2316},[49,99899,99900],{"class":66},"#结果：(2,1,3,6)\n",[757,99902,99903],{},"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":27,"searchDepth":63,"depth":63,"links":99905},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99630,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99912,"title":99913,"body":99914,"description":24072,"extension":766,"meta":100648,"navigation":398,"path":100649,"seo":100650,"stem":100651,"__hash__":100652},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99915,"toc":100646},[99916,99919,99922,99925,99928,99931,99934,99937,99940,100049,100052,100055,100643],[10,99917,99913],{"id":99918},"_8数组分割",[14,99920,99921],{},"split分割",[14,99923,99924],{},"numpy.split(ary,indics_or_sections,axis)",[14,99926,99927],{},"解释：",[14,99929,99930],{},"ary:被分割的数组",[14,99932,99933],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99935,99936],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99938,99939],{},"①一维数组的分割",[40,99941,99943],{"className":30909,"code":99942,"language":30911,"meta":27,"style":27},"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",[46,99944,99945,99961,99966,99975,99979,99984,99992,99996,100001,100006,100019,100023,100028,100040,100044],{"__ignoreMap":27},[49,99946,99947,99949,99951,99953,99955,99957,99959],{"class":51,"line":52},[49,99948,124],{"class":73},[49,99950,78],{"class":77},[49,99952,93533],{"class":73},[49,99954,1047],{"class":159},[49,99956,1207],{"class":73},[49,99958,1249],{"class":159},[49,99960,847],{"class":73},[49,99962,99963],{"class":51,"line":63},[49,99964,99965],{"class":66},"#如果传入整数，必须能够平分，否则会报错\n",[49,99967,99968,99971,99973],{"class":51,"line":70},[49,99969,99970],{"class":73},"np.split(a,",[49,99972,915],{"class":159},[49,99974,847],{"class":73},[49,99976,99977],{"class":51,"line":219},[49,99978,94095],{"class":66},[49,99980,99981],{"class":51,"line":233},[49,99982,99983],{"class":66},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[49,99985,99986,99988,99990],{"class":51,"line":241},[49,99987,99970],{"class":73},[49,99989,1122],{"class":159},[49,99991,847],{"class":73},[49,99993,99994],{"class":51,"line":1920},[49,99995,94095],{"class":66},[49,99997,99998],{"class":51,"line":2011},[49,99999,100000],{"class":66},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[49,100002,100003],{"class":51,"line":2017},[49,100004,100005],{"class":66},"#传入数组\n",[49,100007,100008,100011,100013,100015,100017],{"class":51,"line":2029},[49,100009,100010],{"class":73},"np.split(a,[",[49,100012,909],{"class":159},[49,100014,1207],{"class":73},[49,100016,1148],{"class":159},[49,100018,5354],{"class":73},[49,100020,100021],{"class":51,"line":2311},[49,100022,94095],{"class":66},[49,100024,100025],{"class":51,"line":2316},[49,100026,100027],{"class":66},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[49,100029,100030,100032,100034,100036,100038],{"class":51,"line":2322},[49,100031,100010],{"class":73},[49,100033,1148],{"class":159},[49,100035,1207],{"class":73},[49,100037,1198],{"class":159},[49,100039,5354],{"class":73},[49,100041,100042],{"class":51,"line":2327},[49,100043,94095],{"class":66},[49,100045,100046],{"class":51,"line":2341},[49,100047,100048],{"class":66},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,100050,100051],{},"②二维数组的分割",[14,100053,100054],{},"使用split()",[40,100056,100058],{"className":30909,"code":100057,"language":30911,"meta":27,"style":27},"#二维数组分割\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",[46,100059,100060,100065,100089,100094,100103,100107,100111,100116,100121,100126,100131,100136,100141,100146,100150,100163,100167,100171,100175,100179,100183,100188,100193,100198,100202,100207,100223,100227,100231,100236,100241,100246,100251,100256,100261,100266,100271,100276,100281,100286,100291,100296,100301,100306,100311,100316,100321,100325,100329,100349,100353,100357,100362,100367,100372,100377,100382,100387,100392,100397,100402,100407,100412,100417,100422,100427,100432,100437,100442,100447,100451,100456,100465,100469,100473,100477,100481,100485,100489,100493,100497,100501,100510,100514,100518,100522,100526,100530,100534,100538,100542,100546,100550,100554,100558,100562,100566,100570,100574,100578,100582,100586,100590,100594,100607,100611,100615,100619,100623,100627,100631,100635,100639],{"__ignoreMap":27},[49,100061,100062],{"class":51,"line":52},[49,100063,100064],{"class":66},"#二维数组分割\n",[49,100066,100067,100069,100071,100073,100075,100077,100079,100081,100083,100085,100087],{"class":51,"line":63},[49,100068,93837],{"class":73},[49,100070,78],{"class":77},[49,100072,93533],{"class":73},[49,100074,1047],{"class":159},[49,100076,1207],{"class":73},[49,100078,1154],{"class":159},[49,100080,93538],{"class":73},[49,100082,1173],{"class":159},[49,100084,1207],{"class":73},[49,100086,1173],{"class":159},[49,100088,847],{"class":73},[49,100090,100091],{"class":51,"line":70},[49,100092,100093],{"class":66},"#默认axis=0  传入整数平均分,按行来的\n",[49,100095,100096,100099,100101],{"class":51,"line":219},[49,100097,100098],{"class":73},"np.split(aa,",[49,100100,909],{"class":159},[49,100102,847],{"class":73},[49,100104,100105],{"class":51,"line":233},[49,100106,96295],{"class":66},[49,100108,100109],{"class":51,"line":241},[49,100110,94459],{"class":59},[49,100112,100113],{"class":51,"line":1920},[49,100114,100115],{"class":59},"[array([[ 1,  2,  3,  4,  5,  6],\n",[49,100117,100118],{"class":51,"line":2011},[49,100119,100120],{"class":59},"        [ 7,  8,  9, 10, 11, 12]]),\n",[49,100122,100123],{"class":51,"line":2017},[49,100124,100125],{"class":59}," array([[13, 14, 15, 16, 17, 18],\n",[49,100127,100128],{"class":51,"line":2029},[49,100129,100130],{"class":59},"        [19, 20, 21, 22, 23, 24]]),\n",[49,100132,100133],{"class":51,"line":2311},[49,100134,100135],{"class":59}," array([[25, 26, 27, 28, 29, 30],\n",[49,100137,100138],{"class":51,"line":2316},[49,100139,100140],{"class":59},"        [31, 32, 33, 34, 35, 36]])]\n",[49,100142,100143],{"class":51,"line":2322},[49,100144,100145],{"class":59}," '''\n",[49,100147,100148],{"class":51,"line":2327},[49,100149,100005],{"class":66},[49,100151,100152,100155,100157,100159,100161],{"class":51,"line":2341},[49,100153,100154],{"class":73},"np.split(aa,[",[49,100156,915],{"class":159},[49,100158,1207],{"class":73},[49,100160,1148],{"class":159},[49,100162,5354],{"class":73},[49,100164,100165],{"class":51,"line":2346},[49,100166,96295],{"class":66},[49,100168,100169],{"class":51,"line":2352},[49,100170,94459],{"class":59},[49,100172,100173],{"class":51,"line":2373},[49,100174,100115],{"class":59},[49,100176,100177],{"class":51,"line":2378},[49,100178,100120],{"class":59},[49,100180,100181],{"class":51,"line":2392},[49,100182,100125],{"class":59},[49,100184,100185],{"class":51,"line":2397},[49,100186,100187],{"class":59},"        [19, 20, 21, 22, 23, 24],\n",[49,100189,100190],{"class":51,"line":2426},[49,100191,100192],{"class":59},"        [25, 26, 27, 28, 29, 30]]),\n",[49,100194,100195],{"class":51,"line":2431},[49,100196,100197],{"class":59}," array([[31, 32, 33, 34, 35, 36]])]\n",[49,100199,100200],{"class":51,"line":2448},[49,100201,94459],{"class":59},[49,100203,100204],{"class":51,"line":2453},[49,100205,100206],{"class":66},"#axis=1 按照列来分\n",[49,100208,100209,100211,100213,100215,100217,100219,100221],{"class":51,"line":2458},[49,100210,100098],{"class":73},[49,100212,909],{"class":159},[49,100214,1207],{"class":73},[49,100216,48045],{"class":5913},[49,100218,78],{"class":77},[49,100220,1047],{"class":159},[49,100222,847],{"class":73},[49,100224,100225],{"class":51,"line":2463},[49,100226,96295],{"class":66},[49,100228,100229],{"class":51,"line":2477},[49,100230,94459],{"class":59},[49,100232,100233],{"class":51,"line":2482},[49,100234,100235],{"class":59},"[array([[ 1,  2],\n",[49,100237,100238],{"class":51,"line":3274},[49,100239,100240],{"class":59},"        [ 7,  8],\n",[49,100242,100243],{"class":51,"line":3288},[49,100244,100245],{"class":59},"        [13, 14],\n",[49,100247,100248],{"class":51,"line":3296},[49,100249,100250],{"class":59},"        [19, 20],\n",[49,100252,100253],{"class":51,"line":3301},[49,100254,100255],{"class":59},"        [25, 26],\n",[49,100257,100258],{"class":51,"line":3307},[49,100259,100260],{"class":59},"        [31, 32]]),\n",[49,100262,100263],{"class":51,"line":3313},[49,100264,100265],{"class":59}," array([[ 3,  4],\n",[49,100267,100268],{"class":51,"line":3318},[49,100269,100270],{"class":59},"        [ 9, 10],\n",[49,100272,100273],{"class":51,"line":8645},[49,100274,100275],{"class":59},"        [15, 16],\n",[49,100277,100278],{"class":51,"line":8669},[49,100279,100280],{"class":59},"        [21, 22],\n",[49,100282,100283],{"class":51,"line":8674},[49,100284,100285],{"class":59},"        [27, 28],\n",[49,100287,100288],{"class":51,"line":8680},[49,100289,100290],{"class":59},"        [33, 34]]),\n",[49,100292,100293],{"class":51,"line":8707},[49,100294,100295],{"class":59}," array([[ 5,  6],\n",[49,100297,100298],{"class":51,"line":8712},[49,100299,100300],{"class":59},"        [11, 12],\n",[49,100302,100303],{"class":51,"line":8718},[49,100304,100305],{"class":59},"        [17, 18],\n",[49,100307,100308],{"class":51,"line":8730},[49,100309,100310],{"class":59},"        [23, 24],\n",[49,100312,100313],{"class":51,"line":8742},[49,100314,100315],{"class":59},"        [29, 30],\n",[49,100317,100318],{"class":51,"line":8754},[49,100319,100320],{"class":59},"        [35, 36]])]\n",[49,100322,100323],{"class":51,"line":10413},[49,100324,100145],{"class":59},[49,100326,100327],{"class":51,"line":10438},[49,100328,100005],{"class":66},[49,100330,100331,100333,100335,100337,100339,100341,100343,100345,100347],{"class":51,"line":10461},[49,100332,100154],{"class":73},[49,100334,1047],{"class":159},[49,100336,1207],{"class":73},[49,100338,915],{"class":159},[49,100340,42140],{"class":73},[49,100342,48045],{"class":5913},[49,100344,78],{"class":77},[49,100346,1047],{"class":159},[49,100348,847],{"class":73},[49,100350,100351],{"class":51,"line":10485},[49,100352,94095],{"class":66},[49,100354,100355],{"class":51,"line":10490},[49,100356,94459],{"class":59},[49,100358,100359],{"class":51,"line":10495},[49,100360,100361],{"class":59},"[array([[ 1],\n",[49,100363,100364],{"class":51,"line":10500},[49,100365,100366],{"class":59},"        [ 7],\n",[49,100368,100369],{"class":51,"line":10509},[49,100370,100371],{"class":59},"        [13],\n",[49,100373,100374],{"class":51,"line":10514},[49,100375,100376],{"class":59},"        [19],\n",[49,100378,100379],{"class":51,"line":10520},[49,100380,100381],{"class":59},"        [25],\n",[49,100383,100384],{"class":51,"line":10541},[49,100385,100386],{"class":59},"        [31]]),\n",[49,100388,100389],{"class":51,"line":10547},[49,100390,100391],{"class":59}," array([[ 2],\n",[49,100393,100394],{"class":51,"line":10561},[49,100395,100396],{"class":59},"        [ 8],\n",[49,100398,100399],{"class":51,"line":10567},[49,100400,100401],{"class":59},"        [14],\n",[49,100403,100404],{"class":51,"line":10594},[49,100405,100406],{"class":59},"        [20],\n",[49,100408,100409],{"class":51,"line":10603},[49,100410,100411],{"class":59},"        [26],\n",[49,100413,100414],{"class":51,"line":10609},[49,100415,100416],{"class":59},"        [32]]),\n",[49,100418,100419],{"class":51,"line":10617},[49,100420,100421],{"class":59}," array([[ 3,  4,  5,  6],\n",[49,100423,100424],{"class":51,"line":10622},[49,100425,100426],{"class":59},"        [ 9, 10, 11, 12],\n",[49,100428,100429],{"class":51,"line":17301},[49,100430,100431],{"class":59},"        [15, 16, 17, 18],\n",[49,100433,100434],{"class":51,"line":17307},[49,100435,100436],{"class":59},"        [21, 22, 23, 24],\n",[49,100438,100439],{"class":51,"line":17330},[49,100440,100441],{"class":59},"        [27, 28, 29, 30],\n",[49,100443,100444],{"class":51,"line":17336},[49,100445,100446],{"class":59},"        [33, 34, 35, 36]])]\n",[49,100448,100449],{"class":51,"line":17359},[49,100450,94459],{"class":59},[49,100452,100453],{"class":51,"line":17373},[49,100454,100455],{"class":66},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[49,100457,100458,100461,100463],{"class":51,"line":17393},[49,100459,100460],{"class":73},"np.vsplit(aa,",[49,100462,909],{"class":159},[49,100464,847],{"class":73},[49,100466,100467],{"class":51,"line":17399},[49,100468,94095],{"class":66},[49,100470,100471],{"class":51,"line":17410},[49,100472,94459],{"class":59},[49,100474,100475],{"class":51,"line":17433},[49,100476,100115],{"class":59},[49,100478,100479],{"class":51,"line":17455},[49,100480,100120],{"class":59},[49,100482,100483],{"class":51,"line":17460},[49,100484,100125],{"class":59},[49,100486,100487],{"class":51,"line":17466},[49,100488,100130],{"class":59},[49,100490,100491],{"class":51,"line":17480},[49,100492,100135],{"class":59},[49,100494,100495],{"class":51,"line":17493},[49,100496,100140],{"class":59},[49,100498,100499],{"class":51,"line":17498},[49,100500,94459],{"class":59},[49,100502,100503,100506,100508],{"class":51,"line":17512},[49,100504,100505],{"class":73},"np.hsplit(aa,",[49,100507,909],{"class":159},[49,100509,847],{"class":73},[49,100511,100512],{"class":51,"line":17517},[49,100513,94095],{"class":66},[49,100515,100516],{"class":51,"line":17523},[49,100517,94459],{"class":59},[49,100519,100520],{"class":51,"line":17528},[49,100521,100235],{"class":59},[49,100523,100524],{"class":51,"line":17542},[49,100525,100240],{"class":59},[49,100527,100528],{"class":51,"line":17547},[49,100529,100245],{"class":59},[49,100531,100532],{"class":51,"line":17552},[49,100533,100250],{"class":59},[49,100535,100536],{"class":51,"line":17566},[49,100537,100255],{"class":59},[49,100539,100540],{"class":51,"line":17578},[49,100541,100260],{"class":59},[49,100543,100544],{"class":51,"line":17583},[49,100545,100265],{"class":59},[49,100547,100548],{"class":51,"line":17596},[49,100549,100270],{"class":59},[49,100551,100552],{"class":51,"line":17601},[49,100553,100275],{"class":59},[49,100555,100556],{"class":51,"line":17606},[49,100557,100280],{"class":59},[49,100559,100560],{"class":51,"line":17611},[49,100561,100285],{"class":59},[49,100563,100564],{"class":51,"line":17624},[49,100565,100290],{"class":59},[49,100567,100568],{"class":51,"line":17629},[49,100569,100295],{"class":59},[49,100571,100572],{"class":51,"line":33164},[49,100573,100300],{"class":59},[49,100575,100576],{"class":51,"line":33170},[49,100577,100305],{"class":59},[49,100579,100580],{"class":51,"line":33176},[49,100581,100310],{"class":59},[49,100583,100584],{"class":51,"line":33182},[49,100585,100315],{"class":59},[49,100587,100588],{"class":51,"line":33188},[49,100589,100320],{"class":59},[49,100591,100592],{"class":51,"line":33199},[49,100593,94459],{"class":59},[49,100595,100596,100599,100601,100603,100605],{"class":51,"line":33205},[49,100597,100598],{"class":73},"np.vsplit(aa,[",[49,100600,915],{"class":159},[49,100602,1207],{"class":73},[49,100604,1148],{"class":159},[49,100606,5354],{"class":73},[49,100608,100609],{"class":51,"line":33225},[49,100610,94095],{"class":66},[49,100612,100613],{"class":51,"line":33231},[49,100614,94459],{"class":59},[49,100616,100617],{"class":51,"line":33242},[49,100618,100115],{"class":59},[49,100620,100621],{"class":51,"line":33248},[49,100622,100120],{"class":59},[49,100624,100625],{"class":51,"line":33254},[49,100626,100125],{"class":59},[49,100628,100629],{"class":51,"line":33260},[49,100630,100187],{"class":59},[49,100632,100633],{"class":51,"line":33266},[49,100634,100192],{"class":59},[49,100636,100637],{"class":51,"line":33272},[49,100638,100197],{"class":59},[49,100640,100641],{"class":51,"line":33278},[49,100642,100145],{"class":59},[757,100644,100645],{},"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":27,"searchDepth":63,"depth":63,"links":100647},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99913,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100654,"title":100655,"body":100656,"description":24072,"extension":766,"meta":101150,"navigation":398,"path":101151,"seo":101152,"stem":101153,"__hash__":101154},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100657,"toc":101141},[100658,100661,100664,100689,100693,100752,100804,100808,100810,100846,100900,100902,100940,101011,101015,101020,101024,101027,101060,101063,101067,101070,101073,101076,101079,101084,101088,101091,101094,101097,101100,101105,101109,101114,101117,101138],[10,100659,100655],{"id":100660},"_9数学函数",[14,100662,100663],{},"补充回顾：python的列表推导式",[40,100665,100667],{"className":30909,"code":100666,"language":30911,"meta":27,"style":27},"[1\u002Fi for i in a]\n",[46,100668,100669],{"__ignoreMap":27},[49,100670,100671,100673,100675,100677,100680,100682,100684,100686],{"class":51,"line":52},[49,100672,1719],{"class":73},[49,100674,1047],{"class":159},[49,100676,1413],{"class":77},[49,100678,100679],{"class":73},"i ",[49,100681,3722],{"class":77},[49,100683,10135],{"class":73},[49,100685,26732],{"class":77},[49,100687,100688],{"class":73}," a]\n",[782,100690,100692],{"id":100691},"_91-求倒数","9.1 求倒数",[40,100694,100696],{"className":30909,"code":100695,"language":30911,"meta":27,"style":27},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[46,100697,100698,100703,100731,100743],{"__ignoreMap":27},[49,100699,100700],{"class":51,"line":52},[49,100701,100702],{"class":66},"#数组求倒数\n",[49,100704,100705,100707,100709,100711,100713,100715,100717,100719,100721,100723,100725,100727,100729],{"class":51,"line":63},[49,100706,124],{"class":73},[49,100708,78],{"class":77},[49,100710,1719],{"class":73},[49,100712,1047],{"class":159},[49,100714,1207],{"class":73},[49,100716,915],{"class":159},[49,100718,1207],{"class":73},[49,100720,909],{"class":159},[49,100722,1207],{"class":73},[49,100724,1122],{"class":159},[49,100726,1207],{"class":73},[49,100728,1148],{"class":159},[49,100730,33777],{"class":73},[49,100732,100733,100735,100737,100740],{"class":51,"line":70},[49,100734,1092],{"class":73},[49,100736,78],{"class":77},[49,100738,100739],{"class":73},"np.array(a)",[49,100741,100742],{"class":66},"#将列表转换为数组\n",[49,100744,100745,100747,100749],{"class":51,"line":219},[49,100746,1047],{"class":159},[49,100748,1413],{"class":77},[49,100750,100751],{"class":73},"b\n",[40,100753,100755],{"className":30909,"code":100754,"language":30911,"meta":27,"style":27},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[46,100756,100757,100785,100794,100799],{"__ignoreMap":27},[49,100758,100759,100761,100763,100765,100767,100769,100771,100773,100775,100777,100779,100781,100783],{"class":51,"line":52},[49,100760,124],{"class":73},[49,100762,78],{"class":77},[49,100764,1719],{"class":73},[49,100766,1047],{"class":159},[49,100768,1207],{"class":73},[49,100770,915],{"class":159},[49,100772,1207],{"class":73},[49,100774,909],{"class":159},[49,100776,1207],{"class":73},[49,100778,1122],{"class":159},[49,100780,1207],{"class":73},[49,100782,1148],{"class":159},[49,100784,33777],{"class":73},[49,100786,100787,100789,100791],{"class":51,"line":63},[49,100788,1092],{"class":73},[49,100790,78],{"class":77},[49,100792,100793],{"class":73},"np.array(a)\n",[49,100795,100796],{"class":51,"line":70},[49,100797,100798],{"class":66},"#调用numpy中的函数reciprocal()\n",[49,100800,100801],{"class":51,"line":219},[49,100802,100803],{"class":73},"np.reciprocal(b)\n",[782,100805,100807],{"id":100806},"_92-求平方","9.2 求平方",[14,100809,95061],{},[40,100811,100813],{"className":30909,"code":100812,"language":30911,"meta":27,"style":27},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[46,100814,100815,100820,100825,100841],{"__ignoreMap":27},[49,100816,100817],{"class":51,"line":52},[49,100818,100819],{"class":66},"#square()，求平方\n",[49,100821,100822],{"class":51,"line":63},[49,100823,100824],{"class":66},"#一维数组\n",[49,100826,100827,100829,100831,100833,100835,100837,100839],{"class":51,"line":70},[49,100828,124],{"class":73},[49,100830,78],{"class":77},[49,100832,93533],{"class":73},[49,100834,1047],{"class":159},[49,100836,1207],{"class":73},[49,100838,1275],{"class":159},[49,100840,847],{"class":73},[49,100842,100843],{"class":51,"line":219},[49,100844,100845],{"class":73},"np.square(a)\n",[40,100847,100849],{"className":30909,"code":100848,"language":30911,"meta":27,"style":27},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[46,100850,100851,100856,100861,100882],{"__ignoreMap":27},[49,100852,100853],{"class":51,"line":52},[49,100854,100855],{"class":66},"#或者通过循环遍历的形式来计算\n",[49,100857,100858],{"class":51,"line":63},[49,100859,100860],{"class":66},"#这是一个列表\n",[49,100862,100863,100866,100868,100870,100872,100874,100876,100879],{"class":51,"line":70},[49,100864,100865],{"class":73},"[i",[49,100867,1284],{"class":77},[49,100869,100679],{"class":73},[49,100871,3722],{"class":77},[49,100873,10135],{"class":73},[49,100875,26732],{"class":77},[49,100877,100878],{"class":73}," a]",[49,100880,100881],{"class":66},"#这个求完之后在数列当中\n",[49,100883,100884,100887,100889,100891,100893,100895,100897],{"class":51,"line":219},[49,100885,100886],{"class":73},"np.array([i",[49,100888,1284],{"class":77},[49,100890,100679],{"class":73},[49,100892,3722],{"class":77},[49,100894,10135],{"class":73},[49,100896,26732],{"class":77},[49,100898,100899],{"class":73}," a])\n",[14,100901,93822],{},[40,100903,100905],{"className":30909,"code":100904,"language":30911,"meta":27,"style":27},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[46,100906,100907,100911,100935],{"__ignoreMap":27},[49,100908,100909],{"class":51,"line":52},[49,100910,93832],{"class":66},[49,100912,100913,100915,100917,100919,100921,100923,100925,100927,100929,100931,100933],{"class":51,"line":63},[49,100914,93837],{"class":73},[49,100916,78],{"class":77},[49,100918,93533],{"class":73},[49,100920,1047],{"class":159},[49,100922,1207],{"class":73},[49,100924,1352],{"class":159},[49,100926,93538],{"class":73},[49,100928,1122],{"class":159},[49,100930,1207],{"class":73},[49,100932,909],{"class":159},[49,100934,847],{"class":73},[49,100936,100937],{"class":51,"line":70},[49,100938,100939],{"class":73},"np.square(aa)\n",[40,100941,100943],{"className":30909,"code":100942,"language":30911,"meta":27,"style":27},"#传统的方式\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",[46,100944,100945,100950,100959,100975,100991,101006],{"__ignoreMap":27},[49,100946,100947],{"class":51,"line":52},[49,100948,100949],{"class":66},"#传统的方式\n",[49,100951,100952,100954,100956],{"class":51,"line":63},[49,100953,98718],{"class":73},[49,100955,78],{"class":77},[49,100957,100958],{"class":73},"np.empty_like(aa)\n",[49,100960,100961,100963,100965,100967,100969,100971,100973],{"class":51,"line":70},[49,100962,3722],{"class":77},[49,100964,10135],{"class":73},[49,100966,26732],{"class":77},[49,100968,32974],{"class":159},[49,100970,841],{"class":73},[49,100972,1122],{"class":159},[49,100974,31317],{"class":73},[49,100976,100977,100979,100981,100983,100985,100987,100989],{"class":51,"line":219},[49,100978,3898],{"class":77},[49,100980,10197],{"class":73},[49,100982,26732],{"class":77},[49,100984,32974],{"class":159},[49,100986,841],{"class":73},[49,100988,909],{"class":159},[49,100990,31317],{"class":73},[49,100992,100993,100996,100998,101001,101003],{"class":51,"line":233},[49,100994,100995],{"class":73},"        bb[i,j]",[49,100997,78],{"class":77},[49,100999,101000],{"class":73},"aa[i,j]",[49,101002,1284],{"class":77},[49,101004,101005],{"class":73},"aa[i,j]\n",[49,101007,101008],{"class":51,"line":241},[49,101009,101010],{"class":73},"bb\n",[782,101012,101014],{"id":101013},"_93-求各元素的符号","9.3 求各元素的符号",[14,101016,101017],{},[25,101018],{"alt":27,"src":101019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[782,101021,101023],{"id":101022},"_94-modf函数","9.4 modf函数",[14,101025,101026],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[40,101028,101030],{"className":30909,"code":101029,"language":30911,"meta":27,"style":27},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[46,101031,101032,101055],{"__ignoreMap":27},[49,101033,101034,101036,101038,101040,101042,101044,101046,101048,101050,101053],{"class":51,"line":52},[49,101035,124],{"class":73},[49,101037,78],{"class":77},[49,101039,93533],{"class":73},[49,101041,1361],{"class":77},[49,101043,1275],{"class":159},[49,101045,1207],{"class":73},[49,101047,1275],{"class":159},[49,101049,1207],{"class":73},[49,101051,101052],{"class":159},"0.3",[49,101054,847],{"class":73},[49,101056,101057],{"class":51,"line":63},[49,101058,101059],{"class":73},"np.modf(a)\n",[14,101061,101062],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[782,101064,101066],{"id":101065},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,101068,101069],{},"np.cell()",[14,101071,101072],{},"np.floor()",[14,101074,101075],{},"np.rint()",[14,101077,101078],{},"对各元素分别向上取整、向下取整、四舍五入",[14,101080,101081],{},[25,101082],{"alt":27,"src":101083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[782,101085,101087],{"id":101086},"_96-around函数","9.6 around()函数",[14,101089,101090],{},"around()函数也可以实现对数的小数位数进行操作",[14,101092,101093],{},"其中的参数：",[14,101095,101096],{},"1.要传的数组",[14,101098,101099],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,101101,101102],{},[25,101103],{"alt":27,"src":101104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[782,101106,101108],{"id":101107},"_97-三角函数","9.7 三角函数",[14,101110,101111],{},[25,101112],{"alt":27,"src":101113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,101115,101116],{},"引入图像模块非常重要",[40,101118,101120],{"className":30909,"code":101119,"language":30911,"meta":27,"style":27},"from matplotlib import pyplot as plt\n",[46,101121,101122],{"__ignoreMap":27},[49,101123,101124,101126,101129,101131,101134,101136],{"class":51,"line":52},[49,101125,31268],{"class":77},[49,101127,101128],{"class":73}," matplotlib ",[49,101130,30923],{"class":77},[49,101132,101133],{"class":73}," pyplot ",[49,101135,31914],{"class":77},[49,101137,31968],{"class":73},[757,101139,101140],{},"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":27,"searchDepth":63,"depth":63,"links":101142},[101143,101144,101145,101146,101147,101148,101149],{"id":100691,"depth":63,"text":100692},{"id":100806,"depth":63,"text":100807},{"id":101013,"depth":63,"text":101014},{"id":101022,"depth":63,"text":101023},{"id":101065,"depth":63,"text":101066},{"id":101086,"depth":63,"text":101087},{"id":101107,"depth":63,"text":101108},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100655,"description":24072},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101156,"title":101157,"body":101158,"description":24072,"extension":766,"meta":101162,"navigation":398,"path":101163,"seo":101164,"stem":101165,"__hash__":101166},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101159,"toc":101160},[],{"title":27,"searchDepth":63,"depth":63,"links":101161},[],{"category":50951},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101157,"description":24072},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101168,"title":101169,"body":101170,"description":27,"extension":766,"meta":103178,"navigation":398,"path":103179,"seo":103180,"stem":103181,"__hash__":103182},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101171,"toc":103154},[101172,101175,101179,101182,101185,101191,101194,101217,101220,101254,101257,101298,101302,101305,101398,101401,101445,101448,101465,101468,101482,101485,101488,101533,101536,101573,101577,101580,101586,101591,101611,101615,101618,101684,101687,101705,101709,101712,101741,101751,101757,101761,101764,101770,101781,101785,101788,101818,101821,102101,102104,102107,102118,102121,102124,102146,102153,102156,102174,102177,102180,102194,102202,102205,102231,102237,102240,102243,102253,102265,102285,102294,102314,102324,102348,102361,102375,102380,102421,102438,102463,102475,102495,102501,102546,102565,102582,102595,102611,102618,102630,102639,102674,102695,102720,102733,102757,102772,102797,102800,102821,102830,102833,102844,102848,102851,102857,102869,102876,102880,102883,102895,102898,102912,102915,102925,102935,102938,102978,102981,102985,102991,102994,103008,103012,103015,103048,103052,103055,103078,103086,103089,103095,103101,103104,103107,103135,103139,103142,103148,103151],[10,101173,101169],{"id":101174},"_1环境安装与第一个-mujoco-程序",[782,101176,101178],{"id":101177},"_1目标说明","1.目标说明",[14,101180,101181],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,101183,101184],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[40,101186,101189],{"className":101187,"code":101188,"language":5884,"meta":27},[5882],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[46,101190,101188],{"__ignoreMap":27},[14,101192,101193],{},"需要掌握:",[30,101195,101196,101199,101202,101207,101212],{},[33,101197,101198],{},"Fedora 44 下 MuJoCo 的系统依赖",[33,101200,101201],{},"Python 虚拟环境创建",[33,101203,101204],{},[46,101205,101206],{},"mujoco.MjModel",[33,101208,101209],{},[46,101210,101211],{},"mujoco.MjData",[33,101213,101214],{},[46,101215,101216],{},"mujoco.mj_step(model, data)",[14,101218,101219],{},"MuJoCo 中最重要的两个对象:",[610,101221,101222,101232],{},[613,101223,101224],{},[616,101225,101226,101229],{},[619,101227,101228],{"align":621},"对象",[619,101230,101231],{"align":621},"含义",[633,101233,101234,101244],{},[616,101235,101236,101241],{},[638,101237,101238],{"align":621},[46,101239,101240],{},"MjModel",[638,101242,101243],{"align":621},"模型结构，来自 XML，基本不随时间变化",[616,101245,101246,101251],{},[638,101247,101248],{"align":621},[46,101249,101250],{},"MjData",[638,101252,101253],{"align":621},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,101255,101256],{},"可以先用一个类比理解：",[610,101258,101259,101269],{},[613,101260,101261],{},[616,101262,101263,101266],{},[619,101264,101265],{"align":621},"类比",[619,101267,101268],{"align":621},"MuJoCo 对象",[633,101270,101271,101280,101289],{},[616,101272,101273,101276],{},[638,101274,101275],{"align":621},"游戏地图和角色配置",[638,101277,101278],{"align":621},[46,101279,101240],{},[616,101281,101282,101285],{},[638,101283,101284],{"align":621},"游戏运行到当前帧的状态",[638,101286,101287],{"align":621},[46,101288,101250],{},[616,101290,101291,101294],{},[638,101292,101293],{"align":621},"前进一帧",[638,101295,101296],{"align":621},[46,101297,101216],{},[782,101299,101301],{"id":101300},"_2环境与依赖安装","2.环境与依赖安装",[14,101303,101304],{},"Fedora 44 系统依赖:",[40,101306,101308],{"className":42,"code":101307,"language":44,"meta":27,"style":27},"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",[46,101309,101310,101322,101335,101348,101358,101368,101387],{"__ignoreMap":27},[49,101311,101312,101314,101316,101318,101320],{"class":51,"line":52},[49,101313,264],{"class":55},[49,101315,384],{"class":59},[49,101317,269],{"class":59},[49,101319,272],{"class":159},[49,101321,184],{"class":159},[49,101323,101324,101327,101330,101333],{"class":51,"line":63},[49,101325,101326],{"class":59},"  python3",[49,101328,101329],{"class":59}," python3-pip",[49,101331,101332],{"class":59}," python3-virtualenv",[49,101334,184],{"class":159},[49,101336,101337,101340,101343,101346],{"class":51,"line":70},[49,101338,101339],{"class":59},"  mesa-libGL",[49,101341,101342],{"class":59}," mesa-libGLU",[49,101344,101345],{"class":59}," mesa-dri-drivers",[49,101347,184],{"class":159},[49,101349,101350,101353,101356],{"class":51,"line":219},[49,101351,101352],{"class":59},"  libglvnd-glx",[49,101354,101355],{"class":59}," libglvnd-opengl",[49,101357,184],{"class":159},[49,101359,101360,101363,101366],{"class":51,"line":233},[49,101361,101362],{"class":59},"  glfw",[49,101364,101365],{"class":59}," glfw-devel",[49,101367,184],{"class":159},[49,101369,101370,101373,101376,101379,101382,101385],{"class":51,"line":241},[49,101371,101372],{"class":59},"  libX11",[49,101374,101375],{"class":59}," libXcursor",[49,101377,101378],{"class":59}," libXi",[49,101380,101381],{"class":59}," libXinerama",[49,101383,101384],{"class":59}," libXrandr",[49,101386,184],{"class":159},[49,101388,101389,101392,101395],{"class":51,"line":1920},[49,101390,101391],{"class":59},"  gcc",[49,101393,101394],{"class":59}," gcc-c++",[49,101396,101397],{"class":59}," make\n",[14,101399,101400],{},"创建 Python 环境:",[40,101402,101404],{"className":42,"code":101403,"language":44,"meta":27,"style":27},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[46,101405,101406,101420,101428],{"__ignoreMap":27},[49,101407,101408,101411,101414,101417],{"class":51,"line":52},[49,101409,101410],{"class":55},"python3",[49,101412,101413],{"class":159}," -m",[49,101415,101416],{"class":59}," venv",[49,101418,101419],{"class":59}," .venv\n",[49,101421,101422,101425],{"class":51,"line":63},[49,101423,101424],{"class":159},"source",[49,101426,101427],{"class":59}," .venv\u002Fbin\u002Factivate\n",[49,101429,101430,101432,101434,101437,101439,101442],{"class":51,"line":70},[49,101431,30911],{"class":55},[49,101433,101413],{"class":159},[49,101435,101436],{"class":59}," pip",[49,101438,269],{"class":59},[49,101440,101441],{"class":159}," --upgrade",[49,101443,101444],{"class":59}," pip\n",[14,101446,101447],{},"pip 安装:",[40,101449,101451],{"className":42,"code":101450,"language":44,"meta":27,"style":27},"pip install \"mujoco>=2.3\" numpy\n",[46,101452,101453],{"__ignoreMap":27},[49,101454,101455,101457,101459,101462],{"class":51,"line":52},[49,101456,24524],{"class":55},[49,101458,269],{"class":59},[49,101460,101461],{"class":59}," \"mujoco>=2.3\"",[49,101463,101464],{"class":59}," numpy\n",[14,101466,101467],{},"安装完成后，先做最小检查：",[40,101469,101471],{"className":42,"code":101470,"language":44,"meta":27,"style":27},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[46,101472,101473],{"__ignoreMap":27},[49,101474,101475,101477,101479],{"class":51,"line":52},[49,101476,30911],{"class":55},[49,101478,30889],{"class":159},[49,101480,101481],{"class":59}," \"import mujoco; print(mujoco.__version__)\"\n",[14,101483,101484],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101486,101487],{},"conda 安装:",[40,101489,101491],{"className":42,"code":101490,"language":44,"meta":27,"style":27},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[46,101492,101493,101513,101523],{"__ignoreMap":27},[49,101494,101495,101497,101499,101501,101504,101507,101510],{"class":51,"line":52},[49,101496,30861],{"class":55},[49,101498,29707],{"class":59},[49,101500,25804],{"class":159},[49,101502,101503],{"class":59}," mujoco-study",[49,101505,101506],{"class":59}," python=",[49,101508,101509],{"class":159},"3.10",[49,101511,101512],{"class":159}," -y\n",[49,101514,101515,101517,101520],{"class":51,"line":63},[49,101516,30861],{"class":55},[49,101518,101519],{"class":59}," activate",[49,101521,101522],{"class":59}," mujoco-study\n",[49,101524,101525,101527,101529,101531],{"class":51,"line":70},[49,101526,24524],{"class":55},[49,101528,269],{"class":59},[49,101530,101461],{"class":59},[49,101532,101464],{"class":59},[14,101534,101535],{},"版本冲突说明:",[30,101537,101538,101544,101554,101563],{},[33,101539,101540,101541,28916],{},"不要安装 ",[46,101542,101543],{},"mujoco-py",[33,101545,101546,101547,101549,101550,101553],{},"如果旧项目里同时安装了 ",[46,101548,101543],{}," 和 ",[46,101551,101552],{},"mujoco","，建议新建干净虚拟环境。",[33,101555,101556,101559,101560,28916],{},[46,101557,101558],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[46,101561,101562],{},"~\u002F.mujoco\u002Fmujoco210",[33,101564,101565,101566,83070,101569,101572],{},"离屏渲染可能涉及 OpenGL 后端，",[46,101567,101568],{},"MUJOCO_GL=egl",[46,101570,101571],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[782,101574,101576],{"id":101575},"_3核心概念解释","3.核心概念解释",[14,101578,101579],{},"MuJoCo 的基本执行流程:",[40,101581,101584],{"className":101582,"code":101583,"language":5884,"meta":27},[5882],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[46,101585,101583],{"__ignoreMap":27},[14,101587,101588,101590],{},[46,101589,101240],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101592,101593,101595,101596,1042,101599,1042,101602,1042,101605,1042,101608,28916],{},[46,101594,101250],{}," 存放仿真运行时状态，例如 ",[46,101597,101598],{},"data.time",[46,101600,101601],{},"data.qpos",[46,101603,101604],{},"data.qvel",[46,101606,101607],{},"data.ctrl",[46,101609,101610],{},"data.xpos",[18,101612,101614],{"id":101613},"xml-是什么","XML 是什么",[14,101616,101617],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[40,101619,101621],{"className":53598,"code":101620,"language":53600,"meta":27,"style":27},"\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",[46,101622,101623,101645,101676],{"__ignoreMap":27},[49,101624,101625,101627,101629,101631,101633,101635,101638,101640,101643],{"class":51,"line":52},[49,101626,1739],{"class":73},[49,101628,52331],{"class":51831},[49,101630,15617],{"class":55},[49,101632,78],{"class":73},[49,101634,54022],{"class":59},[49,101636,101637],{"class":55}," pos",[49,101639,78],{"class":73},[49,101641,101642],{"class":59},"\"0 0 1\"",[49,101644,51838],{"class":73},[49,101646,101647,101649,101652,101654,101656,101659,101661,101663,101665,101668,101670,101673],{"class":51,"line":63},[49,101648,52675],{"class":73},[49,101650,101651],{"class":51831},"geom",[49,101653,15617],{"class":55},[49,101655,78],{"class":73},[49,101657,101658],{"class":59},"\"box_geom\"",[49,101660,54355],{"class":55},[49,101662,78],{"class":73},[49,101664,54022],{"class":59},[49,101666,101667],{"class":55}," size",[49,101669,78],{"class":73},[49,101671,101672],{"class":59},"\"0.1 0.1 0.1\"",[49,101674,101675],{"class":73},"\u002F>\n",[49,101677,101678,101680,101682],{"class":51,"line":70},[49,101679,52316],{"class":73},[49,101681,52331],{"class":51831},[49,101683,51838],{"class":73},[14,101685,101686],{},"这段意思是：",[30,101688,101689,101695,101702],{},[33,101690,101691,101692,101694],{},"创建一个叫 ",[46,101693,54245],{}," 的刚体。",[33,101696,101697,101698,101701],{},"它初始放在 ",[46,101699,101700],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[33,101703,101704],{},"它里面有一个盒子形状的几何体。",[18,101706,101708],{"id":101707},"timestep-是什么","timestep 是什么",[14,101710,101711],{},"XML 里的：",[40,101713,101715],{"className":53598,"code":101714,"language":53600,"meta":27,"style":27},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[46,101716,101717],{"__ignoreMap":27},[49,101718,101719,101721,101723,101726,101728,101731,101734,101736,101739],{"class":51,"line":52},[49,101720,1739],{"class":73},[49,101722,69697],{"class":51831},[49,101724,101725],{"class":55}," timestep",[49,101727,78],{"class":73},[49,101729,101730],{"class":59},"\"0.01\"",[49,101732,101733],{"class":55}," gravity",[49,101735,78],{"class":73},[49,101737,101738],{"class":59},"\"0 0 -9.81\"",[49,101740,101675],{"class":73},[14,101742,101743,101744,101747,101748,101750],{},"表示每调用一次 ",[46,101745,101746],{},"mj_step","，仿真时间前进 ",[46,101749,39517],{}," 秒。循环 100 次，大约就是 1 秒：",[40,101752,101755],{"className":101753,"code":101754,"language":5884,"meta":27},[5882],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[46,101756,101754],{"__ignoreMap":27},[18,101758,101760],{"id":101759},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101762,101763],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[40,101765,101768],{"className":101766,"code":101767,"language":5884,"meta":27},[5882],"x y z qw qx qy qz\n",[46,101769,101767],{"__ignoreMap":27},[14,101771,101772,101773,101776,101777,101780],{},"表示一个自由刚体的位置和姿态。其中 ",[46,101774,101775],{},"x y z"," 是位置，",[46,101778,101779],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[782,101782,101784],{"id":101783},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101786,101787],{},"新建文件:",[40,101789,101791],{"className":42,"code":101790,"language":44,"meta":27,"style":27},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[46,101792,101793,101803,101810],{"__ignoreMap":27},[49,101794,101795,101798,101800],{"class":51,"line":52},[49,101796,101797],{"class":55},"mkdir",[49,101799,29747],{"class":159},[49,101801,101802],{"class":59}," mujoco_tutorial\n",[49,101804,101805,101808],{"class":51,"line":63},[49,101806,101807],{"class":159},"cd",[49,101809,101802],{"class":59},[49,101811,101812,101815],{"class":51,"line":70},[49,101813,101814],{"class":55},"touch",[49,101816,101817],{"class":59}," ch1_first_sim.py\n",[14,101819,101820],{},"写入:",[40,101822,101824],{"className":30909,"code":101823,"language":30911,"meta":27,"style":27},"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",[46,101825,101826,101833,101837,101841,101851,101856,101861,101865,101870,101875,101879,101884,101889,101894,101899,101904,101909,101913,101917,101921,101934,101948,101958,101962,101974,101986,101998,102010,102022,102026,102043,102048,102052,102063,102074,102078,102082,102096],{"__ignoreMap":27},[49,101827,101828,101830],{"class":51,"line":52},[49,101829,30923],{"class":77},[49,101831,101832],{"class":73}," mujoco\n",[49,101834,101835],{"class":51,"line":63},[49,101836,399],{"emptyLinePlaceholder":398},[49,101838,101839],{"class":51,"line":70},[49,101840,399],{"emptyLinePlaceholder":398},[49,101842,101843,101846,101848],{"class":51,"line":219},[49,101844,101845],{"class":159},"XML",[49,101847,14261],{"class":77},[49,101849,101850],{"class":59}," \"\"\"\n",[49,101852,101853],{"class":51,"line":233},[49,101854,101855],{"class":59},"\u003Cmujoco model=\"first_sim\">\n",[49,101857,101858],{"class":51,"line":241},[49,101859,101860],{"class":59},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[49,101862,101863],{"class":51,"line":1920},[49,101864,399],{"emptyLinePlaceholder":398},[49,101866,101867],{"class":51,"line":2011},[49,101868,101869],{"class":59},"  \u003Cworldbody>\n",[49,101871,101872],{"class":51,"line":2017},[49,101873,101874],{"class":59},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[49,101876,101877],{"class":51,"line":2029},[49,101878,399],{"emptyLinePlaceholder":398},[49,101880,101881],{"class":51,"line":2311},[49,101882,101883],{"class":59},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[49,101885,101886],{"class":51,"line":2316},[49,101887,101888],{"class":59},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[49,101890,101891],{"class":51,"line":2322},[49,101892,101893],{"class":59},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[49,101895,101896],{"class":51,"line":2327},[49,101897,101898],{"class":59},"    \u003C\u002Fbody>\n",[49,101900,101901],{"class":51,"line":2341},[49,101902,101903],{"class":59},"  \u003C\u002Fworldbody>\n",[49,101905,101906],{"class":51,"line":2346},[49,101907,101908],{"class":59},"\u003C\u002Fmujoco>\n",[49,101910,101911],{"class":51,"line":2352},[49,101912,96229],{"class":59},[49,101914,101915],{"class":51,"line":2373},[49,101916,399],{"emptyLinePlaceholder":398},[49,101918,101919],{"class":51,"line":2378},[49,101920,399],{"emptyLinePlaceholder":398},[49,101922,101923,101925,101927,101930,101932],{"class":51,"line":2392},[49,101924,32478],{"class":77},[49,101926,2671],{"class":55},[49,101928,101929],{"class":73},"() -> ",[49,101931,96217],{"class":159},[49,101933,4436],{"class":73},[49,101935,101936,101939,101941,101944,101946],{"class":51,"line":2397},[49,101937,101938],{"class":73},"    model ",[49,101940,78],{"class":77},[49,101942,101943],{"class":73}," mujoco.MjModel.from_xml_string(",[49,101945,101845],{"class":159},[49,101947,847],{"class":73},[49,101949,101950,101953,101955],{"class":51,"line":2426},[49,101951,101952],{"class":73},"    data ",[49,101954,78],{"class":77},[49,101956,101957],{"class":73}," mujoco.MjData(model)\n",[49,101959,101960],{"class":51,"line":2431},[49,101961,399],{"emptyLinePlaceholder":398},[49,101963,101964,101966,101968,101971],{"class":51,"line":2448},[49,101965,31830],{"class":159},[49,101967,841],{"class":73},[49,101969,101970],{"class":59},"\"nq:\"",[49,101972,101973],{"class":73},", model.nq)\n",[49,101975,101976,101978,101980,101983],{"class":51,"line":2453},[49,101977,31830],{"class":159},[49,101979,841],{"class":73},[49,101981,101982],{"class":59},"\"nv:\"",[49,101984,101985],{"class":73},", model.nv)\n",[49,101987,101988,101990,101992,101995],{"class":51,"line":2458},[49,101989,31830],{"class":159},[49,101991,841],{"class":73},[49,101993,101994],{"class":59},"\"nu:\"",[49,101996,101997],{"class":73},", model.nu)\n",[49,101999,102000,102002,102004,102007],{"class":51,"line":2463},[49,102001,31830],{"class":159},[49,102003,841],{"class":73},[49,102005,102006],{"class":59},"\"initial time:\"",[49,102008,102009],{"class":73},", data.time)\n",[49,102011,102012,102014,102016,102019],{"class":51,"line":2477},[49,102013,31830],{"class":159},[49,102015,841],{"class":73},[49,102017,102018],{"class":59},"\"initial qpos:\"",[49,102020,102021],{"class":73},", data.qpos.copy())\n",[49,102023,102024],{"class":51,"line":2482},[49,102025,399],{"emptyLinePlaceholder":398},[49,102027,102028,102030,102033,102035,102037,102039,102041],{"class":51,"line":3274},[49,102029,3898],{"class":77},[49,102031,102032],{"class":73}," _ ",[49,102034,26732],{"class":77},[49,102036,32974],{"class":159},[49,102038,841],{"class":73},[49,102040,1140],{"class":159},[49,102042,31317],{"class":73},[49,102044,102045],{"class":51,"line":3288},[49,102046,102047],{"class":73},"        mujoco.mj_step(model, data)\n",[49,102049,102050],{"class":51,"line":3296},[49,102051,399],{"emptyLinePlaceholder":398},[49,102053,102054,102056,102058,102061],{"class":51,"line":3301},[49,102055,31830],{"class":159},[49,102057,841],{"class":73},[49,102059,102060],{"class":59},"\"final time:\"",[49,102062,102009],{"class":73},[49,102064,102065,102067,102069,102072],{"class":51,"line":3307},[49,102066,31830],{"class":159},[49,102068,841],{"class":73},[49,102070,102071],{"class":59},"\"final qpos:\"",[49,102073,102021],{"class":73},[49,102075,102076],{"class":51,"line":3313},[49,102077,399],{"emptyLinePlaceholder":398},[49,102079,102080],{"class":51,"line":3318},[49,102081,399],{"emptyLinePlaceholder":398},[49,102083,102084,102086,102088,102091,102094],{"class":51,"line":8645},[49,102085,2230],{"class":77},[49,102087,31751],{"class":159},[49,102089,102090],{"class":77}," ==",[49,102092,102093],{"class":59}," \"__main__\"",[49,102095,4436],{"class":73},[49,102097,102098],{"class":51,"line":8669},[49,102099,102100],{"class":73},"    main()\n",[18,102102,102103],{"id":102103},"代码逐段解释",[14,102105,102106],{},"导入库：",[40,102108,102110],{"className":30909,"code":102109,"language":30911,"meta":27,"style":27},"import mujoco\n",[46,102111,102112],{"__ignoreMap":27},[49,102113,102114,102116],{"class":51,"line":52},[49,102115,30923],{"class":77},[49,102117,101832],{"class":73},[14,102119,102120],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,102122,102123],{},"定义 XML：",[40,102125,102127],{"className":30909,"code":102126,"language":30911,"meta":27,"style":27},"XML = \"\"\"\n...\n\"\"\"\n",[46,102128,102129,102137,102142],{"__ignoreMap":27},[49,102130,102131,102133,102135],{"class":51,"line":52},[49,102132,101845],{"class":159},[49,102134,14261],{"class":77},[49,102136,101850],{"class":59},[49,102138,102139],{"class":51,"line":63},[49,102140,102141],{"class":59},"...\n",[49,102143,102144],{"class":51,"line":70},[49,102145,96229],{"class":59},[14,102147,102148,102149,102152],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[46,102150,102151],{},"freejoint"," 的方块。",[14,102154,102155],{},"编译模型：",[40,102157,102159],{"className":30909,"code":102158,"language":30911,"meta":27,"style":27},"model = mujoco.MjModel.from_xml_string(XML)\n",[46,102160,102161],{"__ignoreMap":27},[49,102162,102163,102166,102168,102170,102172],{"class":51,"line":52},[49,102164,102165],{"class":73},"model ",[49,102167,78],{"class":77},[49,102169,101943],{"class":73},[49,102171,101845],{"class":159},[49,102173,847],{"class":73},[14,102175,102176],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,102178,102179],{},"创建数据：",[40,102181,102183],{"className":30909,"code":102182,"language":30911,"meta":27,"style":27},"data = mujoco.MjData(model)\n",[46,102184,102185],{"__ignoreMap":27},[49,102186,102187,102190,102192],{"class":51,"line":52},[49,102188,102189],{"class":73},"data ",[49,102191,78],{"class":77},[49,102193,101957],{"class":73},[14,102195,102196,102198,102199,102201],{},[46,102197,33932],{}," 会保存仿真当前状态。刚创建时，时间是 ",[46,102200,1021],{},"，方块还在初始位置。",[14,102203,102204],{},"推进仿真：",[40,102206,102208],{"className":30909,"code":102207,"language":30911,"meta":27,"style":27},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[46,102209,102210,102226],{"__ignoreMap":27},[49,102211,102212,102214,102216,102218,102220,102222,102224],{"class":51,"line":52},[49,102213,3722],{"class":77},[49,102215,102032],{"class":73},[49,102217,26732],{"class":77},[49,102219,32974],{"class":159},[49,102221,841],{"class":73},[49,102223,1140],{"class":159},[49,102225,31317],{"class":73},[49,102227,102228],{"class":51,"line":63},[49,102229,102230],{"class":73},"    mujoco.mj_step(model, data)\n",[14,102232,102233,102234,102236],{},"每次 ",[46,102235,101746],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[18,102238,102239],{"id":102239},"代码逐行细讲",[14,102241,102242],{},"下面把完整代码按新手视角拆开讲。",[40,102244,102245],{"className":30909,"code":102109,"language":30911,"meta":27,"style":27},[46,102246,102247],{"__ignoreMap":27},[49,102248,102249,102251],{"class":51,"line":52},[49,102250,30923],{"class":77},[49,102252,101832],{"class":73},[14,102254,102255,102257,102258,1042,102260,1042,102262,28916],{},[46,102256,30923],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[46,102259,101206],{},[46,102261,101211],{},[46,102263,102264],{},"mujoco.mj_step",[40,102266,102267],{"className":30909,"code":102126,"language":30911,"meta":27,"style":27},[46,102268,102269,102277,102281],{"__ignoreMap":27},[49,102270,102271,102273,102275],{"class":51,"line":52},[49,102272,101845],{"class":159},[49,102274,14261],{"class":77},[49,102276,101850],{"class":59},[49,102278,102279],{"class":51,"line":63},[49,102280,102141],{"class":59},[49,102282,102283],{"class":51,"line":70},[49,102284,96229],{"class":59},[14,102286,102287,102289,102290,102293],{},[46,102288,101845],{}," 是一个变量名。右边的三引号 ",[46,102291,102292],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[40,102295,102296],{"className":53598,"code":101855,"language":53600,"meta":27,"style":27},[46,102297,102298],{"__ignoreMap":27},[49,102299,102300,102302,102304,102307,102309,102312],{"class":51,"line":52},[49,102301,1739],{"class":73},[49,102303,101552],{"class":51831},[49,102305,102306],{"class":55}," model",[49,102308,78],{"class":73},[49,102310,102311],{"class":59},"\"first_sim\"",[49,102313,51838],{"class":73},[14,102315,102316,102317,102320,102321,28916],{},"这是 XML 的根标签。",[46,102318,102319],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[46,102322,102323],{},"first_sim",[40,102325,102326],{"className":53598,"code":101714,"language":53600,"meta":27,"style":27},[46,102327,102328],{"__ignoreMap":27},[49,102329,102330,102332,102334,102336,102338,102340,102342,102344,102346],{"class":51,"line":52},[49,102331,1739],{"class":73},[49,102333,69697],{"class":51831},[49,102335,101725],{"class":55},[49,102337,78],{"class":73},[49,102339,101730],{"class":59},[49,102341,101733],{"class":55},[49,102343,78],{"class":73},[49,102345,101738],{"class":59},[49,102347,101675],{"class":73},[14,102349,102350,102352,102353,102356,102357,102360],{},[46,102351,69697],{}," 用来设置仿真参数。",[46,102354,102355],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[46,102358,102359],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[40,102362,102364],{"className":53598,"code":102363,"language":53600,"meta":27,"style":27},"\u003Cworldbody>\n",[46,102365,102366],{"__ignoreMap":27},[49,102367,102368,102370,102373],{"class":51,"line":52},[49,102369,1739],{"class":73},[49,102371,102372],{"class":51831},"worldbody",[49,102374,51838],{"class":73},[14,102376,102377,102379],{},[46,102378,102372],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[40,102381,102383],{"className":53598,"code":102382,"language":53600,"meta":27,"style":27},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[46,102384,102385],{"__ignoreMap":27},[49,102386,102387,102389,102391,102393,102395,102398,102400,102402,102405,102407,102409,102412,102414,102416,102419],{"class":51,"line":52},[49,102388,1739],{"class":73},[49,102390,101651],{"class":51831},[49,102392,15617],{"class":55},[49,102394,78],{"class":73},[49,102396,102397],{"class":59},"\"floor\"",[49,102399,54355],{"class":55},[49,102401,78],{"class":73},[49,102403,102404],{"class":59},"\"plane\"",[49,102406,101667],{"class":55},[49,102408,78],{"class":73},[49,102410,102411],{"class":59},"\"2 2 0.1\"",[49,102413,79298],{"class":55},[49,102415,78],{"class":73},[49,102417,102418],{"class":59},"\"0.8 0.8 0.8 1\"",[49,102420,101675],{"class":73},[14,102422,102423,102424,102426,102427,102430,102431,102434,102435,102437],{},"这行创建地面。",[46,102425,101651],{}," 是几何体。",[46,102428,102429],{},"name=\"floor\""," 是名字。",[46,102432,102433],{},"type=\"plane\""," 表示平面。",[46,102436,55641],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[40,102439,102441],{"className":53598,"code":102440,"language":53600,"meta":27,"style":27},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[46,102442,102443],{"__ignoreMap":27},[49,102444,102445,102447,102449,102451,102453,102455,102457,102459,102461],{"class":51,"line":52},[49,102446,1739],{"class":73},[49,102448,52331],{"class":51831},[49,102450,15617],{"class":55},[49,102452,78],{"class":73},[49,102454,54022],{"class":59},[49,102456,101637],{"class":55},[49,102458,78],{"class":73},[49,102460,101642],{"class":59},[49,102462,51838],{"class":73},[14,102464,102465,102466,28916,102468,102471,102472,102474],{},"这行创建一个刚体，名字叫 ",[46,102467,54245],{},[46,102469,102470],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[46,102473,101700],{},"，也就是离地面 1 米高。",[40,102476,102478],{"className":53598,"code":102477,"language":53600,"meta":27,"style":27},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[46,102479,102480],{"__ignoreMap":27},[49,102481,102482,102484,102486,102488,102490,102493],{"class":51,"line":52},[49,102483,1739],{"class":73},[49,102485,102151],{"class":51831},[49,102487,15617],{"class":55},[49,102489,78],{"class":73},[49,102491,102492],{"class":59},"\"box_free\"",[49,102494,101675],{"class":73},[14,102496,102497,102498,102500],{},"这行很重要。",[46,102499,102151],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[40,102502,102504],{"className":53598,"code":102503,"language":53600,"meta":27,"style":27},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[46,102505,102506],{"__ignoreMap":27},[49,102507,102508,102510,102512,102514,102516,102518,102520,102522,102524,102526,102528,102530,102533,102535,102537,102539,102541,102544],{"class":51,"line":52},[49,102509,1739],{"class":73},[49,102511,101651],{"class":51831},[49,102513,15617],{"class":55},[49,102515,78],{"class":73},[49,102517,101658],{"class":59},[49,102519,54355],{"class":55},[49,102521,78],{"class":73},[49,102523,54022],{"class":59},[49,102525,101667],{"class":55},[49,102527,78],{"class":73},[49,102529,101672],{"class":59},[49,102531,102532],{"class":55}," mass",[49,102534,78],{"class":73},[49,102536,4375],{"class":59},[49,102538,79298],{"class":55},[49,102540,78],{"class":73},[49,102542,102543],{"class":59},"\"1 0 0 1\"",[49,102545,101675],{"class":73},[14,102547,102548,102549,102552,102553,102556,102557,102560,102561,102564],{},"这行给 box body 添加一个盒子形状。",[46,102550,102551],{},"type=\"box\""," 表示形状是盒子。",[46,102554,102555],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[46,102558,102559],{},"mass=\"1\""," 表示质量是 1。",[46,102562,102563],{},"rgba=\"1 0 0 1\""," 表示红色。",[40,102566,102568],{"className":30909,"code":102567,"language":30911,"meta":27,"style":27},"def main() -> None:\n",[46,102569,102570],{"__ignoreMap":27},[49,102571,102572,102574,102576,102578,102580],{"class":51,"line":52},[49,102573,32478],{"class":77},[49,102575,2671],{"class":55},[49,102577,101929],{"class":73},[49,102579,96217],{"class":159},[49,102581,4436],{"class":73},[14,102583,102584,102586,102587,102590,102591,102594],{},[46,102585,32478],{}," 用来定义函数。这里定义了一个叫 ",[46,102588,102589],{},"main"," 的函数。",[46,102592,102593],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[40,102596,102597],{"className":30909,"code":102158,"language":30911,"meta":27,"style":27},[46,102598,102599],{"__ignoreMap":27},[49,102600,102601,102603,102605,102607,102609],{"class":51,"line":52},[49,102602,102165],{"class":73},[49,102604,78],{"class":77},[49,102606,101943],{"class":73},[49,102608,101845],{"class":159},[49,102610,847],{"class":73},[14,102612,102613,102614,102617],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[46,102615,102616],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[40,102619,102620],{"className":30909,"code":102182,"language":30911,"meta":27,"style":27},[46,102621,102622],{"__ignoreMap":27},[49,102623,102624,102626,102628],{"class":51,"line":52},[49,102625,102189],{"class":73},[49,102627,78],{"class":77},[49,102629,101957],{"class":73},[14,102631,102632,102633,102635,102636,102638],{},"这行创建仿真数据。",[46,102634,33932],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[46,102637,33932],{}," 都会变化。",[40,102640,102642],{"className":30909,"code":102641,"language":30911,"meta":27,"style":27},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[46,102643,102644,102654,102664],{"__ignoreMap":27},[49,102645,102646,102648,102650,102652],{"class":51,"line":52},[49,102647,30946],{"class":159},[49,102649,841],{"class":73},[49,102651,101970],{"class":59},[49,102653,101973],{"class":73},[49,102655,102656,102658,102660,102662],{"class":51,"line":63},[49,102657,30946],{"class":159},[49,102659,841],{"class":73},[49,102661,101982],{"class":59},[49,102663,101985],{"class":73},[49,102665,102666,102668,102670,102672],{"class":51,"line":70},[49,102667,30946],{"class":159},[49,102669,841],{"class":73},[49,102671,101994],{"class":59},[49,102673,101997],{"class":73},[14,102675,102676,102678,102679,102682,102683,102686,102687,102690,102691,102694],{},[46,102677,30946],{}," 用来输出信息。",[46,102680,102681],{},"model.nq"," 是位置变量数量，",[46,102684,102685],{},"model.nv"," 是速度变量数量，",[46,102688,102689],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[46,102692,102693],{},"nu"," 是 0。",[40,102696,102698],{"className":30909,"code":102697,"language":30911,"meta":27,"style":27},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[46,102699,102700,102710],{"__ignoreMap":27},[49,102701,102702,102704,102706,102708],{"class":51,"line":52},[49,102703,30946],{"class":159},[49,102705,841],{"class":73},[49,102707,102006],{"class":59},[49,102709,102009],{"class":73},[49,102711,102712,102714,102716,102718],{"class":51,"line":63},[49,102713,30946],{"class":159},[49,102715,841],{"class":73},[49,102717,102018],{"class":59},[49,102719,102021],{"class":73},[14,102721,102722,102723,102725,102726,102728,102729,102732],{},"这里打印初始时间和初始位置。",[46,102724,101598],{}," 一开始是 0。",[46,102727,101601],{}," 是位置数组。",[46,102730,102731],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[40,102734,102735],{"className":30909,"code":102207,"language":30911,"meta":27,"style":27},[46,102736,102737,102753],{"__ignoreMap":27},[49,102738,102739,102741,102743,102745,102747,102749,102751],{"class":51,"line":52},[49,102740,3722],{"class":77},[49,102742,102032],{"class":73},[49,102744,26732],{"class":77},[49,102746,32974],{"class":159},[49,102748,841],{"class":73},[49,102750,1140],{"class":159},[49,102752,31317],{"class":73},[49,102754,102755],{"class":51,"line":63},[49,102756,102230],{"class":73},[14,102758,102759,102761,102762,102765,102766,102768,102769,102771],{},[46,102760,3722],{}," 是循环。",[46,102763,102764],{},"range(100)"," 表示循环 100 次。",[46,102767,1821],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[46,102770,101746],{},"，仿真就前进一步。",[40,102773,102775],{"className":30909,"code":102774,"language":30911,"meta":27,"style":27},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[46,102776,102777,102787],{"__ignoreMap":27},[49,102778,102779,102781,102783,102785],{"class":51,"line":52},[49,102780,30946],{"class":159},[49,102782,841],{"class":73},[49,102784,102060],{"class":59},[49,102786,102009],{"class":73},[49,102788,102789,102791,102793,102795],{"class":51,"line":63},[49,102790,30946],{"class":159},[49,102792,841],{"class":73},[49,102794,102071],{"class":59},[49,102796,102021],{"class":73},[14,102798,102799],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[40,102801,102803],{"className":30909,"code":102802,"language":30911,"meta":27,"style":27},"if __name__ == \"__main__\":\n    main()\n",[46,102804,102805,102817],{"__ignoreMap":27},[49,102806,102807,102809,102811,102813,102815],{"class":51,"line":52},[49,102808,2230],{"class":77},[49,102810,31751],{"class":159},[49,102812,102090],{"class":77},[49,102814,102093],{"class":59},[49,102816,4436],{"class":73},[49,102818,102819],{"class":51,"line":63},[49,102820,102100],{"class":73},[14,102822,102823,102824,102827,102828,28916],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[46,102825,102826],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[46,102829,102826],{},[14,102831,102832],{},"运行:",[40,102834,102836],{"className":42,"code":102835,"language":44,"meta":27,"style":27},"python ch1_first_sim.py\n",[46,102837,102838],{"__ignoreMap":27},[49,102839,102840,102842],{"class":51,"line":52},[49,102841,30911],{"class":55},[49,102843,101817],{"class":59},[782,102845,102847],{"id":102846},"_5运行结果说明","5.运行结果说明",[14,102849,102850],{},"你应该看到类似输出:",[40,102852,102855],{"className":102853,"code":102854,"language":5884,"meta":27},[5882],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[46,102856,102854],{"__ignoreMap":27},[14,102858,102859,102861,102862,102865,102866,28916],{},[46,102860,102151],{}," 有 7 个位置变量: ",[46,102863,102864],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[46,102867,102868],{},"vx vy vz wx wy wz",[14,102870,102871,102872,102875],{},"你还会看到 ",[46,102873,102874],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[782,102877,102879],{"id":102878},"_6验证步骤","6.验证步骤",[14,102881,102882],{},"确认版本:",[40,102884,102885],{"className":42,"code":101470,"language":44,"meta":27,"style":27},[46,102886,102887],{"__ignoreMap":27},[49,102888,102889,102891,102893],{"class":51,"line":52},[49,102890,30911],{"class":55},[49,102892,30889],{"class":159},[49,102894,101481],{"class":59},[14,102896,102897],{},"确认导入的是官方 bindings:",[40,102899,102901],{"className":42,"code":102900,"language":44,"meta":27,"style":27},"python -c \"import mujoco; print(mujoco)\"\n",[46,102902,102903],{"__ignoreMap":27},[49,102904,102905,102907,102909],{"class":51,"line":52},[49,102906,30911],{"class":55},[49,102908,30889],{"class":159},[49,102910,102911],{"class":59}," \"import mujoco; print(mujoco)\"\n",[14,102913,102914],{},"运行程序:",[40,102916,102917],{"className":42,"code":102835,"language":44,"meta":27,"style":27},[46,102918,102919],{"__ignoreMap":27},[49,102920,102921,102923],{"class":51,"line":52},[49,102922,30911],{"class":55},[49,102924,101817],{"class":59},[14,102926,102927,102928,102931,102932,28916],{},"检查 ",[46,102929,102930],{},"final time"," 是否约等于 ",[46,102933,102934],{},"1.0",[14,102936,102937],{},"再做几个小实验：",[30,102939,102940,102950,102958,102971],{},[33,102941,102942,102943,102945,102946,102949],{},"把 ",[46,102944,102470],{}," 改成 ",[46,102947,102948],{},"pos=\"0 0 2\"","，观察初始高度变化。",[33,102951,102942,102952,102945,102954,102957],{},[46,102953,102359],{},[46,102955,102956],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[33,102959,102942,102960,102945,102962,102965,102966,102968,102969,28916],{},[46,102961,102355],{},[46,102963,102964],{},"timestep=\"0.005\"","，观察 100 步后的 ",[46,102967,102930],{}," 是否变成约 ",[46,102970,35860],{},[33,102972,102973,102974,102977],{},"删除 ",[46,102975,102976],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102979,102980],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[782,102982,102984],{"id":102983},"_7常见错误与解决方案","7.常见错误与解决方案",[18,102986,102988],{"id":102987},"modulenotfounderror-no-module-named-mujoco",[46,102989,102990],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102992,102993],{},"解决:",[40,102995,102997],{"className":42,"code":102996,"language":44,"meta":27,"style":27},"pip install \"mujoco>=2.3\"\n",[46,102998,102999],{"__ignoreMap":27},[49,103000,103001,103003,103005],{"class":51,"line":52},[49,103002,24524],{"class":55},[49,103004,269],{"class":59},[49,103006,103007],{"class":59}," \"mujoco>=2.3\"\n",[18,103009,103011],{"id":103010},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,103013,103014],{},"先安装系统依赖:",[40,103016,103018],{"className":42,"code":103017,"language":44,"meta":27,"style":27},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[46,103019,103020],{"__ignoreMap":27},[49,103021,103022,103024,103026,103028,103030,103033,103035,103038,103040,103043,103045],{"class":51,"line":52},[49,103023,264],{"class":55},[49,103025,384],{"class":59},[49,103027,269],{"class":59},[49,103029,272],{"class":159},[49,103031,103032],{"class":59}," mesa-libGL",[49,103034,101345],{"class":59},[49,103036,103037],{"class":59}," glfw",[49,103039,101365],{"class":59},[49,103041,103042],{"class":59}," libX11",[49,103044,101378],{"class":59},[49,103046,103047],{"class":59}," libXrandr\n",[18,103049,103051],{"id":103050},"xml-解析失败","XML 解析失败",[14,103053,103054],{},"检查:",[30,103056,103057,103060,103063,103069],{},[33,103058,103059],{},"标签是否闭合",[33,103061,103062],{},"属性是否带引号",[33,103064,103065,103066],{},"根节点是否是 ",[46,103067,103068],{},"\u003Cmujoco>",[33,103070,103071,103073,103074,103077],{},[46,103072,52331],{}," 是否放在 ",[46,103075,103076],{},"\u003Cworldbody>"," 内部",[18,103079,103081,103083,103084],{"id":103080},"final-time-不是严格等于-10",[46,103082,102930],{}," 不是严格等于 ",[46,103085,102934],{},[14,103087,103088],{},"这通常不是错误。浮点数计算可能得到：",[40,103090,103093],{"className":103091,"code":103092,"language":5884,"meta":27},[5882],"1.0000000000000007\n",[46,103094,103092],{"__ignoreMap":27},[14,103096,103097,103098,103100],{},"只要接近 ",[46,103099,102934],{}," 就正常。",[18,103102,103103],{"id":103103},"方块没有掉下来",[14,103105,103106],{},"检查：",[30,103108,103109,103115,103121,103126],{},[33,103110,103111,103112],{},"方块 body 里是否有 ",[46,103113,103114],{},"\u003Cfreejoint\u002F>",[33,103116,103117,103118],{},"重力是否是 ",[46,103119,103120],{},"0 0 -9.81",[33,103122,103123,103124],{},"是否真的调用了 ",[46,103125,101216],{},[33,103127,103128,103129,103131,103132],{},"你看的是否是 ",[46,103130,102874],{},"，不是 ",[46,103133,103134],{},"initial qpos",[782,103136,103138],{"id":103137},"_8本章小结","8.本章小结",[14,103140,103141],{},"本章你已经完成了 MuJoCo 的最小闭环：",[40,103143,103146],{"className":103144,"code":103145,"language":5884,"meta":27},[5882],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[46,103147,103145],{"__ignoreMap":27},[14,103149,103150],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[757,103152,103153],{},"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":27,"searchDepth":63,"depth":63,"links":103155},[103156,103157,103158,103163,103167,103168,103169,103177],{"id":101177,"depth":63,"text":101178},{"id":101300,"depth":63,"text":101301},{"id":101575,"depth":63,"text":101576,"children":103159},[103160,103161,103162],{"id":101613,"depth":70,"text":101614},{"id":101707,"depth":70,"text":101708},{"id":101759,"depth":70,"text":101760},{"id":101783,"depth":63,"text":101784,"children":103164},[103165,103166],{"id":102103,"depth":70,"text":102103},{"id":102239,"depth":70,"text":102239},{"id":102846,"depth":63,"text":102847},{"id":102878,"depth":63,"text":102879},{"id":102983,"depth":63,"text":102984,"children":103170},[103171,103172,103173,103174,103176],{"id":102987,"depth":70,"text":102990},{"id":103010,"depth":70,"text":103011},{"id":103050,"depth":70,"text":103051},{"id":103080,"depth":70,"text":103175},"final time 不是严格等于 1.0",{"id":103103,"depth":70,"text":103103},{"id":103137,"depth":63,"text":103138},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101169,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103184,"title":103185,"body":103186,"description":27,"extension":766,"meta":104842,"navigation":398,"path":104843,"seo":104844,"stem":104845,"__hash__":104846},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103187,"toc":104818},[103188,103191,103193,103196,103199,103216,103311,103314,103320,103322,103324,103348,103351,103365,103368,103409,103411,103424,103426,103429,103477,103489,103492,103495,103501,103514,103581,103584,103603,103606,103609,103615,103617,103626,103629,103633,103642,103724,103733,103737,103743,103757,103767,103769,104099,104102,104114,104116,104127,104129,104132,104150,104153,104156,104174,104185,104188,104203,104213,104215,104236,104253,104273,104279,104319,104335,104351,104357,104360,104384,104400,104405,104435,104452,104477,104480,104495,104504,104519,104528,104543,104550,104552,104562,104575,104582,104585,104624,104631,104633,104685,104687,104693,104696,104703,104710,104713,104715,104733,104736,104739,104773,104785,104787,104790,104812,104815],[10,103189,103185],{"id":103190},"_2xml-与-mjcf-物理建模基础",[782,103192,101178],{"id":101177},[14,103194,103195],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,103197,103198],{},"本章结束后，你应该能看懂一个简单模型里：",[30,103200,103201,103204,103207,103210,103213],{},[33,103202,103203],{},"地面在哪里。",[33,103205,103206],{},"物体初始位置在哪里。",[33,103208,103209],{},"几何体是什么形状。",[33,103211,103212],{},"哪些 body 可以自由运动。",[33,103214,103215],{},"如何用名字在 Python 里找到 XML 中的对象。",[610,103217,103218,103228],{},[613,103219,103220],{},[616,103221,103222,103225],{},[619,103223,103224],{"align":621},"标签",[619,103226,103227],{"align":621},"作用",[633,103229,103230,103239,103249,103258,103268,103278,103291,103301],{},[616,103231,103232,103236],{},[638,103233,103234],{"align":621},[46,103235,103068],{},[638,103237,103238],{"align":621},"根节点",[616,103240,103241,103246],{},[638,103242,103243],{"align":621},[46,103244,103245],{},"\u003Coption>",[638,103247,103248],{"align":621},"仿真参数",[616,103250,103251,103255],{},[638,103252,103253],{"align":621},[46,103254,103076],{},[638,103256,103257],{"align":621},"世界中的物体",[616,103259,103260,103265],{},[638,103261,103262],{"align":621},[46,103263,103264],{},"\u003Cbody>",[638,103266,103267],{"align":621},"刚体",[616,103269,103270,103275],{},[638,103271,103272],{"align":621},[46,103273,103274],{},"\u003Cgeom>",[638,103276,103277],{"align":621},"几何体、碰撞体、可视体",[616,103279,103280,103288],{},[638,103281,103282,25668,103285],{"align":621},[46,103283,103284],{},"\u003Cjoint>",[46,103286,103287],{},"\u003Cfreejoint>",[638,103289,103290],{"align":621},"关节",[616,103292,103293,103298],{},[638,103294,103295],{"align":621},[46,103296,103297],{},"\u003Csite>",[638,103299,103300],{"align":621},"标记点",[616,103302,103303,103308],{},[638,103304,103305],{"align":621},[46,103306,103307],{},"\u003Cactuator>",[638,103309,103310],{"align":621},"控制器",[14,103312,103313],{},"初学时可以先记住：",[40,103315,103318],{"className":103316,"code":103317,"language":5884,"meta":27},[5882],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[46,103319,103317],{"__ignoreMap":27},[782,103321,101301],{"id":101300},[14,103323,101304],{},[40,103325,103327],{"className":42,"code":103326,"language":44,"meta":27,"style":27},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[46,103328,103329],{"__ignoreMap":27},[49,103330,103331,103333,103335,103337,103339,103341,103343,103345],{"class":51,"line":52},[49,103332,264],{"class":55},[49,103334,384],{"class":59},[49,103336,269],{"class":59},[49,103338,272],{"class":159},[49,103340,103032],{"class":59},[49,103342,101345],{"class":59},[49,103344,103037],{"class":59},[49,103346,103347],{"class":59}," glfw-devel\n",[14,103349,103350],{},"pip:",[40,103352,103353],{"className":42,"code":101450,"language":44,"meta":27,"style":27},[46,103354,103355],{"__ignoreMap":27},[49,103356,103357,103359,103361,103363],{"class":51,"line":52},[49,103358,24524],{"class":55},[49,103360,269],{"class":59},[49,103362,101461],{"class":59},[49,103364,101464],{"class":59},[14,103366,103367],{},"conda:",[40,103369,103371],{"className":42,"code":103370,"language":44,"meta":27,"style":27},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[46,103372,103373,103390,103399],{"__ignoreMap":27},[49,103374,103375,103377,103379,103381,103384,103386,103388],{"class":51,"line":52},[49,103376,30861],{"class":55},[49,103378,29707],{"class":59},[49,103380,25804],{"class":159},[49,103382,103383],{"class":59}," mujoco-xml",[49,103385,101506],{"class":59},[49,103387,101509],{"class":159},[49,103389,101512],{"class":159},[49,103391,103392,103394,103396],{"class":51,"line":63},[49,103393,30861],{"class":55},[49,103395,101519],{"class":59},[49,103397,103398],{"class":59}," mujoco-xml\n",[49,103400,103401,103403,103405,103407],{"class":51,"line":70},[49,103402,24524],{"class":55},[49,103404,269],{"class":59},[49,103406,101461],{"class":59},[49,103408,101464],{"class":59},[14,103410,101535],{},[30,103412,103413,103416,103421],{},[33,103414,103415],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[33,103417,103418,103419,28916],{},"本章使用基础标签，适用于 ",[46,103420,101558],{},[33,103422,103423],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[782,103425,101576],{"id":101575},[14,103427,103428],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[40,103430,103432],{"className":53598,"code":103431,"language":53600,"meta":27,"style":27},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[46,103433,103434,103448,103456,103461,103469],{"__ignoreMap":27},[49,103435,103436,103438,103440,103442,103444,103446],{"class":51,"line":52},[49,103437,1739],{"class":73},[49,103439,101552],{"class":51831},[49,103441,102306],{"class":55},[49,103443,78],{"class":73},[49,103445,63210],{"class":59},[49,103447,51838],{"class":73},[49,103449,103450,103452,103454],{"class":51,"line":63},[49,103451,52675],{"class":73},[49,103453,102372],{"class":51831},[49,103455,51838],{"class":73},[49,103457,103458],{"class":51,"line":70},[49,103459,103460],{"class":73},"    ...\n",[49,103462,103463,103465,103467],{"class":51,"line":219},[49,103464,52948],{"class":73},[49,103466,102372],{"class":51831},[49,103468,51838],{"class":73},[49,103470,103471,103473,103475],{"class":51,"line":233},[49,103472,52316],{"class":73},[49,103474,101552],{"class":51831},[49,103476,51838],{"class":73},[14,103478,103479,103481,103482,103484,103485,103488],{},[46,103480,52331],{}," 表示刚体。",[46,103483,101651],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[46,103486,103487],{},"joint"," 表示刚体相对父刚体如何运动。",[18,103490,103491],{"id":103491},"层级结构非常重要",[14,103493,103494],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[40,103496,103499],{"className":103497,"code":103498,"language":5884,"meta":27},[5882],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[46,103500,103498],{"__ignoreMap":27},[14,103502,103503,101549,103506,103509,103510,103513],{},[46,103504,103505],{},"red_box_geom",[46,103507,103508],{},"box_center"," 都属于 ",[46,103511,103512],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[40,103515,103517],{"className":53598,"code":103516,"language":53600,"meta":27,"style":27},"\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",[46,103518,103519,103539,103553,103573],{"__ignoreMap":27},[49,103520,103521,103523,103525,103527,103529,103531,103533,103535,103537],{"class":51,"line":52},[49,103522,1739],{"class":73},[49,103524,52331],{"class":51831},[49,103526,15617],{"class":55},[49,103528,78],{"class":73},[49,103530,54022],{"class":59},[49,103532,101637],{"class":55},[49,103534,78],{"class":73},[49,103536,101642],{"class":59},[49,103538,51838],{"class":73},[49,103540,103541,103543,103545,103547,103549,103551],{"class":51,"line":63},[49,103542,52675],{"class":73},[49,103544,102151],{"class":51831},[49,103546,15617],{"class":55},[49,103548,78],{"class":73},[49,103550,102492],{"class":59},[49,103552,101675],{"class":73},[49,103554,103555,103557,103559,103561,103563,103565,103567,103569,103571],{"class":51,"line":70},[49,103556,52675],{"class":73},[49,103558,101651],{"class":51831},[49,103560,54355],{"class":55},[49,103562,78],{"class":73},[49,103564,54022],{"class":59},[49,103566,101667],{"class":55},[49,103568,78],{"class":73},[49,103570,101672],{"class":59},[49,103572,101675],{"class":73},[49,103574,103575,103577,103579],{"class":51,"line":219},[49,103576,52316],{"class":73},[49,103578,52331],{"class":51831},[49,103580,51838],{"class":73},[14,103582,103583],{},"含义:",[30,103585,103586,103592,103597,103600],{},[33,103587,103588,103589,103591],{},"创建名为 ",[46,103590,54245],{}," 的刚体",[33,103593,103594,103595],{},"初始位置在世界坐标 ",[46,103596,101700],{},[33,103598,103599],{},"它有一个自由关节",[33,103601,103602],{},"它有一个盒子几何体",[18,103604,103605],{"id":103605},"坐标怎么理解",[14,103607,103608],{},"MuJoCo 默认使用三维坐标：",[40,103610,103613],{"className":103611,"code":103612,"language":5884,"meta":27},[5882],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[46,103614,103612],{"__ignoreMap":27},[14,103616,15330],{},[40,103618,103620],{"className":53598,"code":103619,"language":53600,"meta":27,"style":27},"pos=\"0 0 1\"\n",[46,103621,103622],{"__ignoreMap":27},[49,103623,103624],{"class":51,"line":52},[49,103625,103619],{"class":73},[14,103627,103628],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[18,103630,103632],{"id":103631},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103634,103635,103636,83061,103639,103641],{},"不同 ",[46,103637,103638],{},"type",[46,103640,32027],{}," 含义不同：",[610,103643,103644,103659],{},[613,103645,103646],{},[616,103647,103648,103652,103657],{},[619,103649,103650],{"align":621},[46,103651,103638],{},[619,103653,103654,103656],{"align":621},[46,103655,32027],{}," 示例",[619,103658,101231],{"align":621},[633,103660,103661,103675,103690,103709],{},[616,103662,103663,103667,103672],{},[638,103664,103665],{"align":621},[46,103666,54245],{},[638,103668,103669],{"align":621},[46,103670,103671],{},"size=\"0.1 0.2 0.3\"",[638,103673,103674],{"align":621},"x\u002Fy\u002Fz 半边长，不是完整长度",[616,103676,103677,103682,103687],{},[638,103678,103679],{"align":621},[46,103680,103681],{},"sphere",[638,103683,103684],{"align":621},[46,103685,103686],{},"size=\"0.1\"",[638,103688,103689],{"align":621},"球半径",[616,103691,103692,103697,103702],{},[638,103693,103694],{"align":621},[46,103695,103696],{},"capsule",[638,103698,103699],{"align":621},[46,103700,103701],{},"size=\"0.03\"",[638,103703,103704,103705,103708],{"align":621},"胶囊半径，长度常用 ",[46,103706,103707],{},"fromto"," 指定",[616,103710,103711,103716,103721],{},[638,103712,103713],{"align":621},[46,103714,103715],{},"plane",[638,103717,103718],{"align":621},[46,103719,103720],{},"size=\"3 3 0.1\"",[638,103722,103723],{"align":621},"可视平面大小，通常当地面",[14,103725,103726,103727,103729,103730,103732],{},"最容易踩坑的是 box：",[46,103728,102555],{}," 表示边长大约是 ",[46,103731,32568],{},"，因为 MuJoCo 用的是半边长。",[18,103734,103736],{"id":103735},"site-是什么","site 是什么",[14,103738,103739,103742],{},[46,103740,103741],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[30,103744,103745,103748,103751,103754],{},[33,103746,103747],{},"标记机械臂末端。",[33,103749,103750],{},"标记目标位置。",[33,103752,103753],{},"放传感器或相机参考点。",[33,103755,103756],{},"在 Python 中读取某个关键点的世界坐标。",[14,103758,103759,103760,101549,103763,103766],{},"在后面的 Reacher 任务中，",[46,103761,103762],{},"tip",[46,103764,103765],{},"target"," 就会用 site 表示。",[782,103768,101784],{"id":101783},[40,103770,103772],{"className":30909,"code":103771,"language":30911,"meta":27,"style":27},"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",[46,103773,103774,103780,103790,103794,103798,103806,103811,103815,103819,103823,103828,103832,103837,103842,103847,103852,103856,103860,103864,103868,103872,103876,103888,103900,103908,103912,103927,103942,103946,103959,103974,103987,104000,104004,104020,104024,104028,104039,104051,104063,104075,104079,104083,104095],{"__ignoreMap":27},[49,103775,103776,103778],{"class":51,"line":52},[49,103777,30923],{"class":77},[49,103779,101832],{"class":73},[49,103781,103782,103784,103786,103788],{"class":51,"line":63},[49,103783,30923],{"class":77},[49,103785,31911],{"class":73},[49,103787,31914],{"class":77},[49,103789,31917],{"class":73},[49,103791,103792],{"class":51,"line":70},[49,103793,399],{"emptyLinePlaceholder":398},[49,103795,103796],{"class":51,"line":219},[49,103797,399],{"emptyLinePlaceholder":398},[49,103799,103800,103802,103804],{"class":51,"line":233},[49,103801,101845],{"class":159},[49,103803,14261],{"class":77},[49,103805,101850],{"class":59},[49,103807,103808],{"class":51,"line":241},[49,103809,103810],{"class":59},"\u003Cmujoco model=\"xml_basic\">\n",[49,103812,103813],{"class":51,"line":1920},[49,103814,101860],{"class":59},[49,103816,103817],{"class":51,"line":2011},[49,103818,399],{"emptyLinePlaceholder":398},[49,103820,103821],{"class":51,"line":2017},[49,103822,101869],{"class":59},[49,103824,103825],{"class":51,"line":2029},[49,103826,103827],{"class":59},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[49,103829,103830],{"class":51,"line":2311},[49,103831,399],{"emptyLinePlaceholder":398},[49,103833,103834],{"class":51,"line":2316},[49,103835,103836],{"class":59},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[49,103838,103839],{"class":51,"line":2322},[49,103840,103841],{"class":59},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[49,103843,103844],{"class":51,"line":2327},[49,103845,103846],{"class":59},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[49,103848,103849],{"class":51,"line":2341},[49,103850,103851],{"class":59},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[49,103853,103854],{"class":51,"line":2346},[49,103855,101898],{"class":59},[49,103857,103858],{"class":51,"line":2352},[49,103859,101903],{"class":59},[49,103861,103862],{"class":51,"line":2373},[49,103863,101908],{"class":59},[49,103865,103866],{"class":51,"line":2378},[49,103867,96229],{"class":59},[49,103869,103870],{"class":51,"line":2392},[49,103871,399],{"emptyLinePlaceholder":398},[49,103873,103874],{"class":51,"line":2397},[49,103875,399],{"emptyLinePlaceholder":398},[49,103877,103878,103880,103882,103884,103886],{"class":51,"line":2426},[49,103879,32478],{"class":77},[49,103881,2671],{"class":55},[49,103883,101929],{"class":73},[49,103885,96217],{"class":159},[49,103887,4436],{"class":73},[49,103889,103890,103892,103894,103896,103898],{"class":51,"line":2431},[49,103891,101938],{"class":73},[49,103893,78],{"class":77},[49,103895,101943],{"class":73},[49,103897,101845],{"class":159},[49,103899,847],{"class":73},[49,103901,103902,103904,103906],{"class":51,"line":2448},[49,103903,101952],{"class":73},[49,103905,78],{"class":77},[49,103907,101957],{"class":73},[49,103909,103910],{"class":51,"line":2453},[49,103911,399],{"emptyLinePlaceholder":398},[49,103913,103914,103917,103919,103922,103925],{"class":51,"line":2458},[49,103915,103916],{"class":73},"    box_body_id ",[49,103918,78],{"class":77},[49,103920,103921],{"class":73}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[49,103923,103924],{"class":59},"\"red_box\"",[49,103926,847],{"class":73},[49,103928,103929,103932,103934,103937,103940],{"class":51,"line":2463},[49,103930,103931],{"class":73},"    site_id ",[49,103933,78],{"class":77},[49,103935,103936],{"class":73}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[49,103938,103939],{"class":59},"\"box_center\"",[49,103941,847],{"class":73},[49,103943,103944],{"class":51,"line":2477},[49,103945,399],{"emptyLinePlaceholder":398},[49,103947,103948,103950,103953,103955,103957],{"class":51,"line":2482},[49,103949,3798],{"class":77},[49,103951,103952],{"class":73}," box_body_id ",[49,103954,1739],{"class":77},[49,103956,4790],{"class":159},[49,103958,4436],{"class":73},[49,103960,103961,103964,103967,103969,103972],{"class":51,"line":3274},[49,103962,103963],{"class":77},"        raise",[49,103965,103966],{"class":159}," RuntimeError",[49,103968,841],{"class":73},[49,103970,103971],{"class":59},"\"body red_box not found\"",[49,103973,847],{"class":73},[49,103975,103976,103978,103981,103983,103985],{"class":51,"line":3288},[49,103977,3798],{"class":77},[49,103979,103980],{"class":73}," site_id ",[49,103982,1739],{"class":77},[49,103984,4790],{"class":159},[49,103986,4436],{"class":73},[49,103988,103989,103991,103993,103995,103998],{"class":51,"line":3296},[49,103990,103963],{"class":77},[49,103992,103966],{"class":159},[49,103994,841],{"class":73},[49,103996,103997],{"class":59},"\"site box_center not found\"",[49,103999,847],{"class":73},[49,104001,104002],{"class":51,"line":3301},[49,104003,399],{"emptyLinePlaceholder":398},[49,104005,104006,104008,104010,104012,104014,104016,104018],{"class":51,"line":3307},[49,104007,3898],{"class":77},[49,104009,102032],{"class":73},[49,104011,26732],{"class":77},[49,104013,32974],{"class":159},[49,104015,841],{"class":73},[49,104017,2421],{"class":159},[49,104019,31317],{"class":73},[49,104021,104022],{"class":51,"line":3313},[49,104023,102047],{"class":73},[49,104025,104026],{"class":51,"line":3318},[49,104027,399],{"emptyLinePlaceholder":398},[49,104029,104030,104032,104034,104037],{"class":51,"line":8645},[49,104031,31830],{"class":159},[49,104033,841],{"class":73},[49,104035,104036],{"class":59},"\"simulation time:\"",[49,104038,102009],{"class":73},[49,104040,104041,104043,104045,104048],{"class":51,"line":8669},[49,104042,31830],{"class":159},[49,104044,841],{"class":73},[49,104046,104047],{"class":59},"\"box body position:\"",[49,104049,104050],{"class":73},", data.xpos[box_body_id].copy())\n",[49,104052,104053,104055,104057,104060],{"class":51,"line":8674},[49,104054,31830],{"class":159},[49,104056,841],{"class":73},[49,104058,104059],{"class":59},"\"site position:\"",[49,104061,104062],{"class":73},", data.site_xpos[site_id].copy())\n",[49,104064,104065,104067,104069,104072],{"class":51,"line":8680},[49,104066,31830],{"class":159},[49,104068,841],{"class":73},[49,104070,104071],{"class":59},"\"box qpos:\"",[49,104073,104074],{"class":73},", np.array(data.qpos))\n",[49,104076,104077],{"class":51,"line":8707},[49,104078,399],{"emptyLinePlaceholder":398},[49,104080,104081],{"class":51,"line":8712},[49,104082,399],{"emptyLinePlaceholder":398},[49,104084,104085,104087,104089,104091,104093],{"class":51,"line":8718},[49,104086,2230],{"class":77},[49,104088,31751],{"class":159},[49,104090,102090],{"class":77},[49,104092,102093],{"class":59},[49,104094,4436],{"class":73},[49,104096,104097],{"class":51,"line":8730},[49,104098,102100],{"class":73},[14,104100,104101],{},"保存为：",[40,104103,104105],{"className":42,"code":104104,"language":44,"meta":27,"style":27},"touch ch2_xml_basic.py\n",[46,104106,104107],{"__ignoreMap":27},[49,104108,104109,104111],{"class":51,"line":52},[49,104110,101814],{"class":55},[49,104112,104113],{"class":59}," ch2_xml_basic.py\n",[14,104115,102832],{},[40,104117,104119],{"className":42,"code":104118,"language":44,"meta":27,"style":27},"python ch2_xml_basic.py\n",[46,104120,104121],{"__ignoreMap":27},[49,104122,104123,104125],{"class":51,"line":52},[49,104124,30911],{"class":55},[49,104126,104113],{"class":59},[18,104128,102103],{"id":102103},[14,104130,104131],{},"用名字查找 body：",[40,104133,104135],{"className":30909,"code":104134,"language":30911,"meta":27,"style":27},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[46,104136,104137],{"__ignoreMap":27},[49,104138,104139,104142,104144,104146,104148],{"class":51,"line":52},[49,104140,104141],{"class":73},"box_body_id ",[49,104143,78],{"class":77},[49,104145,103921],{"class":73},[49,104147,103924],{"class":59},[49,104149,847],{"class":73},[14,104151,104152],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,104154,104155],{},"用名字查找 site：",[40,104157,104159],{"className":30909,"code":104158,"language":30911,"meta":27,"style":27},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[46,104160,104161],{"__ignoreMap":27},[49,104162,104163,104166,104168,104170,104172],{"class":51,"line":52},[49,104164,104165],{"class":73},"site_id ",[49,104167,78],{"class":77},[49,104169,103936],{"class":73},[49,104171,103939],{"class":59},[49,104173,847],{"class":73},[14,104175,104176,104177,104180,104181,104184],{},"注意第二个参数是对象类型。查 body 就用 ",[46,104178,104179],{},"mjOBJ_BODY","，查 site 就用 ",[46,104182,104183],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,104186,104187],{},"读取世界坐标：",[40,104189,104191],{"className":30909,"code":104190,"language":30911,"meta":27,"style":27},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[46,104192,104193,104198],{"__ignoreMap":27},[49,104194,104195],{"class":51,"line":52},[49,104196,104197],{"class":73},"data.xpos[box_body_id]\n",[49,104199,104200],{"class":51,"line":63},[49,104201,104202],{"class":73},"data.site_xpos[site_id]\n",[14,104204,104205,104208,104209,104212],{},[46,104206,104207],{},"xpos"," 是 body 的世界坐标，",[46,104210,104211],{},"site_xpos"," 是 site 的世界坐标。",[18,104214,102239],{"id":102239},[40,104216,104218],{"className":30909,"code":104217,"language":30911,"meta":27,"style":27},"import mujoco\nimport numpy as np\n",[46,104219,104220,104226],{"__ignoreMap":27},[49,104221,104222,104224],{"class":51,"line":52},[49,104223,30923],{"class":77},[49,104225,101832],{"class":73},[49,104227,104228,104230,104232,104234],{"class":51,"line":63},[49,104229,30923],{"class":77},[49,104231,31911],{"class":73},[49,104233,31914],{"class":77},[49,104235,31917],{"class":73},[14,104237,104238,104239,104242,104243,104246,104247,1042,104250,28916],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[46,104240,104241],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[46,104244,104245],{},"as np"," 是习惯写法，后面就可以写 ",[46,104248,104249],{},"np.array(...)",[46,104251,104252],{},"np.round(...)",[40,104254,104255],{"className":30909,"code":102126,"language":30911,"meta":27,"style":27},[46,104256,104257,104265,104269],{"__ignoreMap":27},[49,104258,104259,104261,104263],{"class":51,"line":52},[49,104260,101845],{"class":159},[49,104262,14261],{"class":77},[49,104264,101850],{"class":59},[49,104266,104267],{"class":51,"line":63},[49,104268,102141],{"class":59},[49,104270,104271],{"class":51,"line":70},[49,104272,96229],{"class":59},[14,104274,104275,104276,28916],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[46,104277,104278],{},"mujoco.MjModel.from_xml_string(XML)",[40,104280,104282],{"className":53598,"code":104281,"language":53600,"meta":27,"style":27},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[46,104283,104284],{"__ignoreMap":27},[49,104285,104286,104288,104290,104292,104294,104296,104298,104300,104303,104305,104307,104310,104312,104314,104317],{"class":51,"line":52},[49,104287,1739],{"class":73},[49,104289,103741],{"class":51831},[49,104291,15617],{"class":55},[49,104293,78],{"class":73},[49,104295,103939],{"class":59},[49,104297,101637],{"class":55},[49,104299,78],{"class":73},[49,104301,104302],{"class":59},"\"0 0 0\"",[49,104304,101667],{"class":55},[49,104306,78],{"class":73},[49,104308,104309],{"class":59},"\"0.03\"",[49,104311,79298],{"class":55},[49,104313,78],{"class":73},[49,104315,104316],{"class":59},"\"0 1 0 1\"",[49,104318,101675],{"class":73},[14,104320,104321,104323,104324,104327,104328,104330,104331,104334],{},[46,104322,103741],{}," 是标记点。",[46,104325,104326],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[46,104329,103701],{}," 表示显示出来的小球大小。",[46,104332,104333],{},"rgba=\"0 1 0 1\""," 表示绿色。",[40,104336,104337],{"className":30909,"code":104134,"language":30911,"meta":27,"style":27},[46,104338,104339],{"__ignoreMap":27},[49,104340,104341,104343,104345,104347,104349],{"class":51,"line":52},[49,104342,104141],{"class":73},[49,104344,78],{"class":77},[49,104346,103921],{"class":73},[49,104348,103924],{"class":59},[49,104350,847],{"class":73},[14,104352,104353,104354,104356],{},"这行的作用是：根据名字 ",[46,104355,103924],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,104358,104359],{},"拆开看：",[30,104361,104362,104368,104373,104379],{},[33,104363,104364,104367],{},[46,104365,104366],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[33,104369,104370,104372],{},[46,104371,102616],{}," 是被查询的模型。",[33,104374,104375,104378],{},[46,104376,104377],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[33,104380,104381,104383],{},[46,104382,103924],{}," 是 XML 里写的名字。",[40,104385,104386],{"className":30909,"code":104158,"language":30911,"meta":27,"style":27},[46,104387,104388],{"__ignoreMap":27},[49,104389,104390,104392,104394,104396,104398],{"class":51,"line":52},[49,104391,104165],{"class":73},[49,104393,78],{"class":77},[49,104395,103936],{"class":73},[49,104397,103939],{"class":59},[49,104399,847],{"class":73},[14,104401,104402,104403,28916],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[46,104404,103939],{},[40,104406,104408],{"className":30909,"code":104407,"language":30911,"meta":27,"style":27},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[46,104409,104410,104422],{"__ignoreMap":27},[49,104411,104412,104414,104416,104418,104420],{"class":51,"line":52},[49,104413,2230],{"class":77},[49,104415,103952],{"class":73},[49,104417,1739],{"class":77},[49,104419,4790],{"class":159},[49,104421,4436],{"class":73},[49,104423,104424,104427,104429,104431,104433],{"class":51,"line":63},[49,104425,104426],{"class":77},"    raise",[49,104428,103966],{"class":159},[49,104430,841],{"class":73},[49,104432,103971],{"class":59},[49,104434,847],{"class":73},[14,104436,104437,104439,104440,104443,104444,104447,104448,104451],{},[46,104438,2230],{}," 是条件判断。",[46,104441,104442],{},"mj_name2id"," 找不到对象时会返回 ",[46,104445,104446],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[46,104449,104450],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[40,104453,104455],{"className":30909,"code":104454,"language":30911,"meta":27,"style":27},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[46,104456,104457,104473],{"__ignoreMap":27},[49,104458,104459,104461,104463,104465,104467,104469,104471],{"class":51,"line":52},[49,104460,3722],{"class":77},[49,104462,102032],{"class":73},[49,104464,26732],{"class":77},[49,104466,32974],{"class":159},[49,104468,841],{"class":73},[49,104470,2421],{"class":159},[49,104472,31317],{"class":73},[49,104474,104475],{"class":51,"line":63},[49,104476,102230],{"class":73},[14,104478,104479],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[40,104481,104483],{"className":30909,"code":104482,"language":30911,"meta":27,"style":27},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[46,104484,104485],{"__ignoreMap":27},[49,104486,104487,104489,104491,104493],{"class":51,"line":52},[49,104488,30946],{"class":159},[49,104490,841],{"class":73},[49,104492,104047],{"class":59},[49,104494,104050],{"class":73},[14,104496,104497,104499,104500,104503],{},[46,104498,101610],{}," 保存所有 body 的世界坐标。",[46,104501,104502],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[40,104505,104507],{"className":30909,"code":104506,"language":30911,"meta":27,"style":27},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[46,104508,104509],{"__ignoreMap":27},[49,104510,104511,104513,104515,104517],{"class":51,"line":52},[49,104512,30946],{"class":159},[49,104514,841],{"class":73},[49,104516,104059],{"class":59},[49,104518,104062],{"class":73},[14,104520,104521,104524,104525,104527],{},[46,104522,104523],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[46,104526,103508],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[40,104529,104531],{"className":30909,"code":104530,"language":30911,"meta":27,"style":27},"print(\"box qpos:\", np.array(data.qpos))\n",[46,104532,104533],{"__ignoreMap":27},[49,104534,104535,104537,104539,104541],{"class":51,"line":52},[49,104536,30946],{"class":159},[49,104538,841],{"class":73},[49,104540,104071],{"class":59},[49,104542,104074],{"class":73},[14,104544,104545,104546,104549],{},"这里打印广义位置数组。",[46,104547,104548],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[782,104551,102847],{"id":102846},[14,104553,104554,104555,104558,104559,28916],{},"程序会输出 ",[46,104556,104557],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[46,104560,104561],{},"qpos",[14,104563,104564,104566,104567,104570,104571,104574],{},[46,104565,104502],{}," 是 body 的世界坐标位置。",[46,104568,104569],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[46,104572,104573],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104576,82753,104577,83061,104579,104581],{},[46,104578,103508],{},[46,104580,104326],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104583,104584],{},"如果你把 site 改成：",[40,104586,104588],{"className":53598,"code":104587,"language":53600,"meta":27,"style":27},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[46,104589,104590],{"__ignoreMap":27},[49,104591,104592,104594,104596,104598,104600,104603,104605,104607,104610,104612,104614,104616,104618,104620,104622],{"class":51,"line":52},[49,104593,1739],{"class":73},[49,104595,103741],{"class":51831},[49,104597,15617],{"class":55},[49,104599,78],{"class":73},[49,104601,104602],{"class":59},"\"box_top\"",[49,104604,101637],{"class":55},[49,104606,78],{"class":73},[49,104608,104609],{"class":59},"\"0 0 0.15\"",[49,104611,101667],{"class":55},[49,104613,78],{"class":73},[49,104615,104309],{"class":59},[49,104617,79298],{"class":55},[49,104619,78],{"class":73},[49,104621,104316],{"class":59},[49,104623,101675],{"class":73},[14,104625,104626,104627,104630],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[46,104628,104629],{},"site position"," 就会比 body position 的 z 坐标更高。",[782,104632,102879],{"id":102878},[30,104634,104635,104644,104647,104654,104660,104671],{},[33,104636,102942,104637,104639,104640,102945,104642,28916],{},[46,104638,103512],{}," 的初始高度从 ",[46,104641,1047],{},[46,104643,915],{},[33,104645,104646],{},"重新运行程序。",[33,104648,104649,104650,104653],{},"观察 ",[46,104651,104652],{},"box qpos"," 和最终位置是否变化。",[33,104655,104656,104657,104659],{},"故意把 ",[46,104658,103741],{}," 名称改错，确认程序能报错。",[33,104661,102942,104662,104664,104665,102945,104667,104670],{},[46,104663,101651],{}," 的颜色 ",[46,104666,102563],{},[46,104668,104669],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[33,104672,102942,104673,83061,104675,102945,104678,104681,104682,104684],{},[46,104674,103508],{},[46,104676,104677],{},"pos",[46,104679,104680],{},"0 0 0.2","，观察 ",[46,104683,104629],{}," 如何变化。",[782,104686,102984],{"id":102983},[18,104688,104690],{"id":104689},"xml-error-schema-violation",[46,104691,104692],{},"XML Error: Schema violation",[14,104694,104695],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[18,104697,104699,81821,104701],{"id":104698},"mj_name2id-返回-1",[46,104700,104442],{},[46,104702,104446],{},[14,104704,104705,104706,104709],{},"说明名字没有找到。检查 XML 中 ",[46,104707,104708],{},"name=\"...\"","，并确认对象类型正确。",[18,104711,104712],{"id":104712},"物体不下落",[14,104714,103054],{},[30,104716,104717,104722,104727],{},[33,104718,104719,104720],{},"body 是否有 ",[46,104721,102151],{},[33,104723,104724,104725],{},"gravity 是否为 ",[46,104726,103120],{},[33,104728,104729,104730,104732],{},"body 是否被固定在 ",[46,104731,102372],{}," 中",[18,104734,104735],{"id":104735},"坐标看起来不符合预期",[14,104737,104738],{},"先区分两种坐标：",[610,104740,104741,104750],{},[613,104742,104743],{},[616,104744,104745,104748],{},[619,104746,104747],{"align":621},"坐标",[619,104749,101231],{"align":621},[633,104751,104752,104762],{},[616,104753,104754,104759],{},[638,104755,104756,104757],{"align":621},"XML 里的 ",[46,104758,104677],{},[638,104760,104761],{"align":621},"相对父 body 的局部坐标",[616,104763,104764,104770],{},[638,104765,104766,25668,104768],{"align":621},[46,104767,101610],{},[46,104769,104523],{},[638,104771,104772],{"align":621},"仿真更新后的世界坐标",[14,104774,104775,104776,104778,104779,83070,104782,104784],{},"如果你修改了 ",[46,104777,101601],{},"，但还没调用 ",[46,104780,104781],{},"mj_forward",[46,104783,101746],{},"，世界坐标可能还没有更新。",[782,104786,103138],{"id":103137},[14,104788,104789],{},"MJCF 建模先掌握四件事：",[30,104791,104792,104797,104802,104807],{},[33,104793,104794,104796],{},[46,104795,52331],{}," 表示刚体层级。",[33,104798,104799,104801],{},[46,104800,101651],{}," 表示形状、碰撞和质量。",[33,104803,104804,104806],{},[46,104805,103487],{}," 决定 body 能不能动、怎么动。",[33,104808,104809,104811],{},[46,104810,103741],{}," 用来标记关键点，方便 Python 读取位置。",[14,104813,104814],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[757,104816,104817],{},"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":27,"searchDepth":63,"depth":63,"links":104819},[104820,104821,104822,104828,104832,104833,104834,104841],{"id":101177,"depth":63,"text":101178},{"id":101300,"depth":63,"text":101301},{"id":101575,"depth":63,"text":101576,"children":104823},[104824,104825,104826,104827],{"id":103491,"depth":70,"text":103491},{"id":103605,"depth":70,"text":103605},{"id":103631,"depth":70,"text":103632},{"id":103735,"depth":70,"text":103736},{"id":101783,"depth":63,"text":101784,"children":104829},[104830,104831],{"id":102103,"depth":70,"text":102103},{"id":102239,"depth":70,"text":102239},{"id":102846,"depth":63,"text":102847},{"id":102878,"depth":63,"text":102879},{"id":102983,"depth":63,"text":102984,"children":104835},[104836,104837,104839,104840],{"id":104689,"depth":70,"text":104692},{"id":104698,"depth":70,"text":104838},"mj_name2id 返回 -1",{"id":104712,"depth":70,"text":104712},{"id":104735,"depth":70,"text":104735},{"id":103137,"depth":63,"text":103138},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103185,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104848,"title":104849,"body":104850,"description":27,"extension":766,"meta":106345,"navigation":398,"path":106346,"seo":106347,"stem":106348,"__hash__":106349},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104851,"toc":106317},[104852,104855,104857,104860,104863,104901,104904,104910,104913,104915,104917,104944,104946,104960,104962,105003,105005,105029,105031,105034,105043,105052,105055,105064,105072,105081,105084,105094,105097,105149,105156,105162,105170,105218,105221,105240,105243,105251,105255,105264,105297,105299,105647,105649,105661,105663,105674,105676,105679,105700,105706,105709,105734,105744,105747,105755,105758,105761,105782,105793,105795,105815,105818,105839,105848,105867,105873,105898,105901,105915,105922,105946,105949,105957,105966,105982,105994,106002,106011,106013,106016,106040,106045,106048,106070,106072,106111,106113,106120,106122,106130,106133,106136,106148,106189,106196,106207,106214,106217,106266,106269,106272,106278,106280,106285,106311,106314],[10,104853,104849],{"id":104854},"_3python-控制接口读取状态与推进仿真",[782,104856,101178],{"id":101177},[14,104858,104859],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104861,104862],{},"你将学习:",[30,104864,104865,104870,104875,104879,104884,104895],{},[33,104866,104867],{},[46,104868,104869],{},"MjModel.from_xml_string",[33,104871,104872],{},[46,104873,104874],{},"MjData(model)",[33,104876,104877],{},[46,104878,101746],{},[33,104880,104881],{},[46,104882,104883],{},"mj_resetData",[33,104885,104886,104887,1042,104889,1042,104892],{},"读取 ",[46,104888,104561],{},[46,104890,104891],{},"qvel",[46,104893,104894],{},"ctrl",[33,104896,104897,104898],{},"使用 ",[46,104899,104900],{},"model.opt.timestep",[14,104902,104903],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[40,104905,104908],{"className":104906,"code":104907,"language":5884,"meta":27},[5882],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[46,104909,104907],{"__ignoreMap":27},[14,104911,104912],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[782,104914,101301],{"id":101300},[14,104916,101304],{},[40,104918,104920],{"className":42,"code":104919,"language":44,"meta":27,"style":27},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[46,104921,104922],{"__ignoreMap":27},[49,104923,104924,104926,104928,104930,104932,104935,104937,104939,104941],{"class":51,"line":52},[49,104925,264],{"class":55},[49,104927,384],{"class":59},[49,104929,269],{"class":59},[49,104931,272],{"class":159},[49,104933,104934],{"class":59}," python3",[49,104936,101329],{"class":59},[49,104938,103032],{"class":59},[49,104940,101345],{"class":59},[49,104942,104943],{"class":59}," glfw\n",[14,104945,103350],{},[40,104947,104948],{"className":42,"code":101450,"language":44,"meta":27,"style":27},[46,104949,104950],{"__ignoreMap":27},[49,104951,104952,104954,104956,104958],{"class":51,"line":52},[49,104953,24524],{"class":55},[49,104955,269],{"class":59},[49,104957,101461],{"class":59},[49,104959,101464],{"class":59},[14,104961,103367],{},[40,104963,104965],{"className":42,"code":104964,"language":44,"meta":27,"style":27},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[46,104966,104967,104984,104993],{"__ignoreMap":27},[49,104968,104969,104971,104973,104975,104978,104980,104982],{"class":51,"line":52},[49,104970,30861],{"class":55},[49,104972,29707],{"class":59},[49,104974,25804],{"class":159},[49,104976,104977],{"class":59}," mujoco-python-api",[49,104979,101506],{"class":59},[49,104981,101509],{"class":159},[49,104983,101512],{"class":159},[49,104985,104986,104988,104990],{"class":51,"line":63},[49,104987,30861],{"class":55},[49,104989,101519],{"class":59},[49,104991,104992],{"class":59}," mujoco-python-api\n",[49,104994,104995,104997,104999,105001],{"class":51,"line":70},[49,104996,24524],{"class":55},[49,104998,269],{"class":59},[49,105000,101461],{"class":59},[49,105002,101464],{"class":59},[14,105004,101535],{},[30,105006,105007,105014,105023],{},[33,105008,105009,101549,105011,105013],{},[46,105010,101206],{},[46,105012,101211],{}," 是官方 Python bindings 的类名。",[33,105015,105016,105017,105020,105021,28916],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[46,105018,105019],{},"mjModel"," 在 Python 中是 ",[46,105022,101240],{},[33,105024,105025,105026,28916],{},"不要使用 ",[46,105027,105028],{},"sim = mujoco_py.MjSim(...)",[782,105030,101576],{"id":101575},[14,105032,105033],{},"仿真推进核心代码:",[40,105035,105037],{"className":30909,"code":105036,"language":30911,"meta":27,"style":27},"mujoco.mj_step(model, data)\n",[46,105038,105039],{"__ignoreMap":27},[49,105040,105041],{"class":51,"line":52},[49,105042,105036],{"class":73},[14,105044,105045,105046,1042,105048,1042,105050,28916],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[46,105047,101601],{},[46,105049,101604],{},[46,105051,101598],{},[14,105053,105054],{},"重置仿真:",[40,105056,105058],{"className":30909,"code":105057,"language":30911,"meta":27,"style":27},"mujoco.mj_resetData(model, data)\n",[46,105059,105060],{"__ignoreMap":27},[49,105061,105062],{"class":51,"line":52},[49,105063,105057],{"class":73},[14,105065,105066,105067,83070,105069,105071],{},"如果手动修改了 ",[46,105068,101601],{},[46,105070,101604],{},"，通常应调用:",[40,105073,105075],{"className":30909,"code":105074,"language":30911,"meta":27,"style":27},"mujoco.mj_forward(model, data)\n",[46,105076,105077],{"__ignoreMap":27},[49,105078,105079],{"class":51,"line":52},[49,105080,105074],{"class":73},[14,105082,105083],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[18,105085,105087,1042,105089,1042,105091,105093],{"id":105086},"qposqvelctrl-是什么",[46,105088,104561],{},[46,105090,104891],{},[46,105092,104894],{}," 是什么",[14,105095,105096],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[610,105098,105099,105111],{},[613,105100,105101],{},[616,105102,105103,105106,105108],{},[619,105104,105105],{"align":621},"字段",[619,105107,101231],{"align":621},[619,105109,105110],{"align":621},"谁来修改",[633,105112,105113,105125,105137],{},[616,105114,105115,105119,105122],{},[638,105116,105117],{"align":621},[46,105118,101601],{},[638,105120,105121],{"align":621},"广义位置，例如小车位置、关节角、自由物体位置姿态",[638,105123,105124],{"align":621},"MuJoCo 更新，也可以手动设置初始状态",[616,105126,105127,105131,105134],{},[638,105128,105129],{"align":621},[46,105130,101604],{},[638,105132,105133],{"align":621},"广义速度，例如小车速度、关节角速度",[638,105135,105136],{"align":621},"MuJoCo 更新，也可以手动清零",[616,105138,105139,105143,105146],{},[638,105140,105141],{"align":621},[46,105142,101607],{},[638,105144,105145],{"align":621},"actuator 的控制输入",[638,105147,105148],{"align":621},"主要由你的控制代码写入",[14,105150,9722,105151,101549,105153,105155],{},[46,105152,104561],{},[46,105154,104891],{}," 不一定同维。自由刚体就是典型例子：",[40,105157,105160],{"className":105158,"code":105159,"language":5884,"meta":27},[5882],"freejoint: qpos 7 维，qvel 6 维\n",[46,105161,105159],{"__ignoreMap":27},[18,105163,105165,101549,105167,105169],{"id":105164},"mj_step-和-mj_forward-的区别",[46,105166,101746],{},[46,105168,104781],{}," 的区别",[610,105171,105172,105185],{},[613,105173,105174],{},[616,105175,105176,105179,105182],{},[619,105177,105178],{"align":621},"函数",[619,105180,105181],{"align":621},"是否推进时间",[619,105183,105184],{"align":621},"什么时候用",[633,105186,105187,105200],{},[616,105188,105189,105194,105197],{},[638,105190,105191],{"align":621},[46,105192,105193],{},"mj_step(model, data)",[638,105195,105196],{"align":621},"是",[638,105198,105199],{"align":621},"正常仿真循环，每调用一次前进一步",[616,105201,105202,105207,105210],{},[638,105203,105204],{"align":621},[46,105205,105206],{},"mj_forward(model, data)",[638,105208,105209],{"align":621},"否",[638,105211,105212,105213,1042,105215,105217],{"align":621},"手动改了 ",[46,105214,104561],{},[46,105216,104891],{}," 后，刷新派生量",[14,105219,105220],{},"例如你写：",[40,105222,105224],{"className":30909,"code":105223,"language":30911,"meta":27,"style":27},"data.qpos[2] = 2.0\n",[46,105225,105226],{"__ignoreMap":27},[49,105227,105228,105231,105233,105235,105237],{"class":51,"line":52},[49,105229,105230],{"class":73},"data.qpos[",[49,105232,915],{"class":159},[49,105234,5140],{"class":73},[49,105236,78],{"class":77},[49,105238,105239],{"class":159}," 2.0\n",[14,105241,105242],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[40,105244,105245],{"className":30909,"code":105074,"language":30911,"meta":27,"style":27},[46,105246,105247],{"__ignoreMap":27},[49,105248,105249],{"class":51,"line":52},[49,105250,105074],{"class":73},[18,105252,105254],{"id":105253},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,105256,105257,105260,105261,105263],{},[46,105258,105259],{},"mujoco.mj_resetData(model, data)"," 会把 ",[46,105262,33932],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[40,105265,105267],{"className":30909,"code":105266,"language":30911,"meta":27,"style":27},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[46,105268,105269,105273,105283,105293],{"__ignoreMap":27},[49,105270,105271],{"class":51,"line":52},[49,105272,105057],{"class":73},[49,105274,105275,105278,105280],{"class":51,"line":63},[49,105276,105277],{"class":73},"data.qpos[:] ",[49,105279,78],{"class":77},[49,105281,105282],{"class":73}," random_qpos\n",[49,105284,105285,105288,105290],{"class":51,"line":70},[49,105286,105287],{"class":73},"data.qvel[:] ",[49,105289,78],{"class":77},[49,105291,105292],{"class":159}," 0.0\n",[49,105294,105295],{"class":51,"line":219},[49,105296,105074],{"class":73},[782,105298,101784],{"id":101783},[40,105300,105302],{"className":30909,"code":105301,"language":30911,"meta":27,"style":27},"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",[46,105303,105304,105310,105320,105324,105328,105336,105341,105345,105349,105353,105358,105362,105367,105372,105377,105381,105385,105389,105393,105397,105401,105420,105427,105439,105450,105466,105482,105486,105490,105502,105514,105522,105526,105537,105541,105557,105561,105565,105574,105578,105583,105592,105596,105609,105614,105623,105627,105631,105643],{"__ignoreMap":27},[49,105305,105306,105308],{"class":51,"line":52},[49,105307,30923],{"class":77},[49,105309,101832],{"class":73},[49,105311,105312,105314,105316,105318],{"class":51,"line":63},[49,105313,30923],{"class":77},[49,105315,31911],{"class":73},[49,105317,31914],{"class":77},[49,105319,31917],{"class":73},[49,105321,105322],{"class":51,"line":70},[49,105323,399],{"emptyLinePlaceholder":398},[49,105325,105326],{"class":51,"line":219},[49,105327,399],{"emptyLinePlaceholder":398},[49,105329,105330,105332,105334],{"class":51,"line":233},[49,105331,101845],{"class":159},[49,105333,14261],{"class":77},[49,105335,101850],{"class":59},[49,105337,105338],{"class":51,"line":241},[49,105339,105340],{"class":59},"\u003Cmujoco model=\"state_api\">\n",[49,105342,105343],{"class":51,"line":1920},[49,105344,101860],{"class":59},[49,105346,105347],{"class":51,"line":2011},[49,105348,399],{"emptyLinePlaceholder":398},[49,105350,105351],{"class":51,"line":2017},[49,105352,101869],{"class":59},[49,105354,105355],{"class":51,"line":2029},[49,105356,105357],{"class":59},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[49,105359,105360],{"class":51,"line":2311},[49,105361,399],{"emptyLinePlaceholder":398},[49,105363,105364],{"class":51,"line":2316},[49,105365,105366],{"class":59},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[49,105368,105369],{"class":51,"line":2322},[49,105370,105371],{"class":59},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[49,105373,105374],{"class":51,"line":2327},[49,105375,105376],{"class":59},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[49,105378,105379],{"class":51,"line":2341},[49,105380,101898],{"class":59},[49,105382,105383],{"class":51,"line":2346},[49,105384,101903],{"class":59},[49,105386,105387],{"class":51,"line":2352},[49,105388,101908],{"class":59},[49,105390,105391],{"class":51,"line":2373},[49,105392,96229],{"class":59},[49,105394,105395],{"class":51,"line":2378},[49,105396,399],{"emptyLinePlaceholder":398},[49,105398,105399],{"class":51,"line":2392},[49,105400,399],{"emptyLinePlaceholder":398},[49,105402,105403,105405,105408,105411,105413,105416,105418],{"class":51,"line":2397},[49,105404,32478],{"class":77},[49,105406,105407],{"class":55}," print_state",[49,105409,105410],{"class":73},"(prefix: ",[49,105412,1999],{"class":159},[49,105414,105415],{"class":73},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[49,105417,96217],{"class":159},[49,105419,4436],{"class":73},[49,105421,105422,105424],{"class":51,"line":2426},[49,105423,31830],{"class":159},[49,105425,105426],{"class":73},"(prefix)\n",[49,105428,105429,105431,105433,105436],{"class":51,"line":2431},[49,105430,31830],{"class":159},[49,105432,841],{"class":73},[49,105434,105435],{"class":59},"\"  timestep:\"",[49,105437,105438],{"class":73},", model.opt.timestep)\n",[49,105440,105441,105443,105445,105448],{"class":51,"line":2448},[49,105442,31830],{"class":159},[49,105444,841],{"class":73},[49,105446,105447],{"class":59},"\"  time:\"",[49,105449,102009],{"class":73},[49,105451,105452,105454,105456,105459,105462,105464],{"class":51,"line":2453},[49,105453,31830],{"class":159},[49,105455,841],{"class":73},[49,105457,105458],{"class":59},"\"  qpos:\"",[49,105460,105461],{"class":73},", np.round(data.qpos.copy(), ",[49,105463,1122],{"class":159},[49,105465,31028],{"class":73},[49,105467,105468,105470,105472,105475,105478,105480],{"class":51,"line":2458},[49,105469,31830],{"class":159},[49,105471,841],{"class":73},[49,105473,105474],{"class":59},"\"  qvel:\"",[49,105476,105477],{"class":73},", np.round(data.qvel.copy(), ",[49,105479,1122],{"class":159},[49,105481,31028],{"class":73},[49,105483,105484],{"class":51,"line":2463},[49,105485,399],{"emptyLinePlaceholder":398},[49,105487,105488],{"class":51,"line":2477},[49,105489,399],{"emptyLinePlaceholder":398},[49,105491,105492,105494,105496,105498,105500],{"class":51,"line":2482},[49,105493,32478],{"class":77},[49,105495,2671],{"class":55},[49,105497,101929],{"class":73},[49,105499,96217],{"class":159},[49,105501,4436],{"class":73},[49,105503,105504,105506,105508,105510,105512],{"class":51,"line":3274},[49,105505,101938],{"class":73},[49,105507,78],{"class":77},[49,105509,101943],{"class":73},[49,105511,101845],{"class":159},[49,105513,847],{"class":73},[49,105515,105516,105518,105520],{"class":51,"line":3288},[49,105517,101952],{"class":73},[49,105519,78],{"class":77},[49,105521,101957],{"class":73},[49,105523,105524],{"class":51,"line":3296},[49,105525,399],{"emptyLinePlaceholder":398},[49,105527,105528,105531,105534],{"class":51,"line":3301},[49,105529,105530],{"class":73},"    print_state(",[49,105532,105533],{"class":59},"\"initial\"",[49,105535,105536],{"class":73},", model, data)\n",[49,105538,105539],{"class":51,"line":3307},[49,105540,399],{"emptyLinePlaceholder":398},[49,105542,105543,105545,105547,105549,105551,105553,105555],{"class":51,"line":3313},[49,105544,3898],{"class":77},[49,105546,102032],{"class":73},[49,105548,26732],{"class":77},[49,105550,32974],{"class":159},[49,105552,841],{"class":73},[49,105554,1485],{"class":159},[49,105556,31317],{"class":73},[49,105558,105559],{"class":51,"line":3318},[49,105560,102047],{"class":73},[49,105562,105563],{"class":51,"line":8645},[49,105564,399],{"emptyLinePlaceholder":398},[49,105566,105567,105569,105572],{"class":51,"line":8669},[49,105568,105530],{"class":73},[49,105570,105571],{"class":59},"\"after 50 steps\"",[49,105573,105536],{"class":73},[49,105575,105576],{"class":51,"line":8674},[49,105577,399],{"emptyLinePlaceholder":398},[49,105579,105580],{"class":51,"line":8680},[49,105581,105582],{"class":73},"    mujoco.mj_resetData(model, data)\n",[49,105584,105585,105587,105590],{"class":51,"line":8707},[49,105586,105530],{"class":73},[49,105588,105589],{"class":59},"\"after reset\"",[49,105591,105536],{"class":73},[49,105593,105594],{"class":51,"line":8712},[49,105595,399],{"emptyLinePlaceholder":398},[49,105597,105598,105601,105603,105605,105607],{"class":51,"line":8718},[49,105599,105600],{"class":73},"    data.qpos[",[49,105602,915],{"class":159},[49,105604,5140],{"class":73},[49,105606,78],{"class":77},[49,105608,105239],{"class":159},[49,105610,105611],{"class":51,"line":8730},[49,105612,105613],{"class":73},"    mujoco.mj_forward(model, data)\n",[49,105615,105616,105618,105621],{"class":51,"line":8742},[49,105617,105530],{"class":73},[49,105619,105620],{"class":59},"\"after manual qpos edit\"",[49,105622,105536],{"class":73},[49,105624,105625],{"class":51,"line":8754},[49,105626,399],{"emptyLinePlaceholder":398},[49,105628,105629],{"class":51,"line":10413},[49,105630,399],{"emptyLinePlaceholder":398},[49,105632,105633,105635,105637,105639,105641],{"class":51,"line":10438},[49,105634,2230],{"class":77},[49,105636,31751],{"class":159},[49,105638,102090],{"class":77},[49,105640,102093],{"class":59},[49,105642,4436],{"class":73},[49,105644,105645],{"class":51,"line":10461},[49,105646,102100],{"class":73},[14,105648,104101],{},[40,105650,105652],{"className":42,"code":105651,"language":44,"meta":27,"style":27},"touch ch3_python_state.py\n",[46,105653,105654],{"__ignoreMap":27},[49,105655,105656,105658],{"class":51,"line":52},[49,105657,101814],{"class":55},[49,105659,105660],{"class":59}," ch3_python_state.py\n",[14,105662,102832],{},[40,105664,105666],{"className":42,"code":105665,"language":44,"meta":27,"style":27},"python ch3_python_state.py\n",[46,105667,105668],{"__ignoreMap":27},[49,105669,105670,105672],{"class":51,"line":52},[49,105671,30911],{"class":55},[49,105673,105660],{"class":59},[18,105675,102103],{"id":102103},[14,105677,105678],{},"打印状态的函数：",[40,105680,105682],{"className":30909,"code":105681,"language":30911,"meta":27,"style":27},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[46,105683,105684],{"__ignoreMap":27},[49,105685,105686,105688,105690,105692,105694,105696,105698],{"class":51,"line":52},[49,105687,32478],{"class":77},[49,105689,105407],{"class":55},[49,105691,105410],{"class":73},[49,105693,1999],{"class":159},[49,105695,105415],{"class":73},[49,105697,96217],{"class":159},[49,105699,4436],{"class":73},[14,105701,105702,105703,105705],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[46,105704,33932],{}," 里发生了什么。",[14,105707,105708],{},"推进 50 步：",[40,105710,105712],{"className":30909,"code":105711,"language":30911,"meta":27,"style":27},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[46,105713,105714,105730],{"__ignoreMap":27},[49,105715,105716,105718,105720,105722,105724,105726,105728],{"class":51,"line":52},[49,105717,3722],{"class":77},[49,105719,102032],{"class":73},[49,105721,26732],{"class":77},[49,105723,32974],{"class":159},[49,105725,841],{"class":73},[49,105727,1485],{"class":159},[49,105729,31317],{"class":73},[49,105731,105732],{"class":51,"line":63},[49,105733,102230],{"class":73},[14,105735,105736,105737,105740,105741,105743],{},"由于 ",[46,105738,105739],{},"timestep=0.01","，所以 50 步后时间约为 ",[46,105742,35860],{}," 秒。",[14,105745,105746],{},"重置：",[40,105748,105749],{"className":30909,"code":105057,"language":30911,"meta":27,"style":27},[46,105750,105751],{"__ignoreMap":27},[49,105752,105753],{"class":51,"line":52},[49,105754,105057],{"class":73},[14,105756,105757],{},"这会把时间、位置、速度恢复到初始状态。",[14,105759,105760],{},"手动改高度：",[40,105762,105764],{"className":30909,"code":105763,"language":30911,"meta":27,"style":27},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[46,105765,105766,105778],{"__ignoreMap":27},[49,105767,105768,105770,105772,105774,105776],{"class":51,"line":52},[49,105769,105230],{"class":73},[49,105771,915],{"class":159},[49,105773,5140],{"class":73},[49,105775,78],{"class":77},[49,105777,105239],{"class":159},[49,105779,105780],{"class":51,"line":63},[49,105781,105074],{"class":73},[14,105783,105784,105785,105788,105789,105792],{},"这个例子里 ",[46,105786,105787],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[46,105790,105791],{},"2.0"," 表示把小球放到更高的位置。",[18,105794,102239],{"id":102239},[40,105796,105797],{"className":30909,"code":105681,"language":30911,"meta":27,"style":27},[46,105798,105799],{"__ignoreMap":27},[49,105800,105801,105803,105805,105807,105809,105811,105813],{"class":51,"line":52},[49,105802,32478],{"class":77},[49,105804,105407],{"class":55},[49,105806,105410],{"class":73},[49,105808,1999],{"class":159},[49,105810,105415],{"class":73},[49,105812,96217],{"class":159},[49,105814,4436],{"class":73},[14,105816,105817],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[30,105819,105820,105829,105834],{},[33,105821,105822,105825,105826,105828],{},[46,105823,105824],{},"prefix","：一段文字，比如 ",[46,105827,105533],{},"，用来说明现在打印的是哪个阶段。",[33,105830,105831,105833],{},[46,105832,102616],{},"：MuJoCo 模型。",[33,105835,105836,105838],{},[46,105837,33932],{},"：MuJoCo 当前状态。",[14,105840,105841,1042,105844,105847],{},[46,105842,105843],{},"prefix: str",[46,105845,105846],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[40,105849,105851],{"className":30909,"code":105850,"language":30911,"meta":27,"style":27},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[46,105852,105853],{"__ignoreMap":27},[49,105854,105855,105857,105859,105861,105863,105865],{"class":51,"line":52},[49,105856,30946],{"class":159},[49,105858,841],{"class":73},[49,105860,105458],{"class":59},[49,105862,105461],{"class":73},[49,105864,1122],{"class":159},[49,105866,31028],{"class":73},[14,105868,105869,105872],{},[46,105870,105871],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[40,105874,105876],{"className":30909,"code":105875,"language":30911,"meta":27,"style":27},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[46,105877,105878,105890],{"__ignoreMap":27},[49,105879,105880,105882,105884,105886,105888],{"class":51,"line":52},[49,105881,102165],{"class":73},[49,105883,78],{"class":77},[49,105885,101943],{"class":73},[49,105887,101845],{"class":159},[49,105889,847],{"class":73},[49,105891,105892,105894,105896],{"class":51,"line":63},[49,105893,102189],{"class":73},[49,105895,78],{"class":77},[49,105897,101957],{"class":73},[14,105899,105900],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[40,105902,105904],{"className":30909,"code":105903,"language":30911,"meta":27,"style":27},"print_state(\"initial\", model, data)\n",[46,105905,105906],{"__ignoreMap":27},[49,105907,105908,105911,105913],{"class":51,"line":52},[49,105909,105910],{"class":73},"print_state(",[49,105912,105533],{"class":59},[49,105914,105536],{"class":73},[14,105916,105917,105918,105921],{},"调用刚才定义的 ",[46,105919,105920],{},"print_state"," 函数，打印初始状态。",[40,105923,105924],{"className":30909,"code":105711,"language":30911,"meta":27,"style":27},[46,105925,105926,105942],{"__ignoreMap":27},[49,105927,105928,105930,105932,105934,105936,105938,105940],{"class":51,"line":52},[49,105929,3722],{"class":77},[49,105931,102032],{"class":73},[49,105933,26732],{"class":77},[49,105935,32974],{"class":159},[49,105937,841],{"class":73},[49,105939,1485],{"class":159},[49,105941,31317],{"class":73},[49,105943,105944],{"class":51,"line":63},[49,105945,102230],{"class":73},[14,105947,105948],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[40,105950,105951],{"className":30909,"code":105057,"language":30911,"meta":27,"style":27},[46,105952,105953],{"__ignoreMap":27},[49,105954,105955],{"class":51,"line":52},[49,105956,105057],{"class":73},[14,105958,105959,105960,105962,105963,105965],{},"重置 ",[46,105961,33932],{},"。注意它不会重新创建 ",[46,105964,102616],{},"，因为模型结构没有变，只是状态回到初始值。",[40,105967,105968],{"className":30909,"code":105223,"language":30911,"meta":27,"style":27},[46,105969,105970],{"__ignoreMap":27},[49,105971,105972,105974,105976,105978,105980],{"class":51,"line":52},[49,105973,105230],{"class":73},[49,105975,915],{"class":159},[49,105977,5140],{"class":73},[49,105979,78],{"class":77},[49,105981,105239],{"class":159},[14,105983,105984,105985,1042,105988,1042,105991,105993],{},"这行是“手动改状态”。在 freejoint 中，",[46,105986,105987],{},"qpos[0]",[46,105989,105990],{},"qpos[1]",[46,105992,105787],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[40,105995,105996],{"className":30909,"code":105074,"language":30911,"meta":27,"style":27},[46,105997,105998],{"__ignoreMap":27},[49,105999,106000],{"class":51,"line":52},[49,106001,105074],{"class":73},[14,106003,106004,106005,106007,106008,106010],{},"手动改完 ",[46,106006,104561],{}," 后，调用 ",[46,106009,104781],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[782,106012,102847],{"id":102846},[14,106014,106015],{},"你会看到:",[30,106017,106018,106023,106028,106031],{},[33,106019,106020,106021],{},"初始时间为 ",[46,106022,1021],{},[33,106024,106025,106026],{},"50 步后时间约为 ",[46,106027,35860],{},[33,106029,106030],{},"reset 后状态恢复",[33,106032,106033,106034,106037,106038],{},"手动修改 ",[46,106035,106036],{},"data.qpos[2]"," 后，小球高度变为 ",[46,106039,105791],{},[14,106041,106042,106044],{},[46,106043,105787],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,106046,106047],{},"输出里可以重点看三件事：",[30,106049,106050,106058,106063],{},[33,106051,106052,106054,106055,106057],{},[46,106053,3085],{}," 是否随着 ",[46,106056,101746],{}," 增加。",[33,106059,106060,106062],{},[46,106061,104561],{}," 的 z 坐标是否因为下落而变化。",[33,106064,106065,106067,106068,28916],{},[46,106066,104883],{}," 后时间是否回到 ",[46,106069,1021],{},[782,106071,102879],{"id":102878},[30,106073,106074,106080,106086,106092,106095,106104],{},[33,106075,106076,106077,28916],{},"修改 timestep 为 ",[46,106078,106079],{},"0.005",[33,106081,106082,106083,28916],{},"重新运行，检查 50 步后时间是否约为 ",[46,106084,106085],{},"0.25",[33,106087,106088,106089,28916],{},"修改重力为 ",[46,106090,106091],{},"0 0 -1.0",[33,106093,106094],{},"观察小球下降速度是否变慢。",[33,106096,102942,106097,102945,106100,106103],{},[46,106098,106099],{},"data.qpos[2] = 2.0",[46,106101,106102],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[33,106105,106106,106107,106110],{},"注释掉 ",[46,106108,106109],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[782,106112,102984],{"id":102983},[18,106114,106116,106117,106119],{"id":106115},"修改-dataqpos-后位置没有更新","修改 ",[46,106118,101601],{}," 后位置没有更新",[14,106121,102993],{},[40,106123,106124],{"className":30909,"code":105074,"language":30911,"meta":27,"style":27},[46,106125,106126],{"__ignoreMap":27},[49,106127,106128],{"class":51,"line":52},[49,106129,105074],{"class":73},[18,106131,106132],{"id":106132},"数组维度看不懂",[14,106134,106135],{},"打印模型维度:",[40,106137,106139],{"className":30909,"code":106138,"language":30911,"meta":27,"style":27},"print(model.nq, model.nv, model.nu)\n",[46,106140,106141],{"__ignoreMap":27},[49,106142,106143,106145],{"class":51,"line":52},[49,106144,30946],{"class":159},[49,106146,106147],{"class":73},"(model.nq, model.nv, model.nu)\n",[610,106149,106150,106158],{},[613,106151,106152],{},[616,106153,106154,106156],{},[619,106155,105105],{"align":621},[619,106157,101231],{"align":621},[633,106159,106160,106170,106180],{},[616,106161,106162,106167],{},[638,106163,106164],{"align":621},[46,106165,106166],{},"nq",[638,106168,106169],{"align":621},"位置变量数量",[616,106171,106172,106177],{},[638,106173,106174],{"align":621},[46,106175,106176],{},"nv",[638,106178,106179],{"align":621},"速度变量数量",[616,106181,106182,106186],{},[638,106183,106184],{"align":621},[46,106185,102693],{},[638,106187,106188],{"align":621},"控制输入数量",[18,106190,106192,106193,106195],{"id":106191},"误以为-qpos-一定等于关节数","误以为 ",[46,106194,104561],{}," 一定等于关节数",[14,106197,106198,106199,83061,106201,106203,106204,106206],{},"不是。例如 ",[46,106200,102151],{},[46,106202,104561],{}," 是 7 维，但 ",[46,106205,104891],{}," 是 6 维。",[18,106208,106210,106211,106213],{"id":106209},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[46,106212,104561],{}," 的第几位",[14,106215,106216],{},"初学时可以先打印：",[40,106218,106220],{"className":30909,"code":106219,"language":30911,"meta":27,"style":27},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[46,106221,106222,106232,106242,106254],{"__ignoreMap":27},[49,106223,106224,106226,106228,106230],{"class":51,"line":52},[49,106225,30946],{"class":159},[49,106227,841],{"class":73},[49,106229,101970],{"class":59},[49,106231,101973],{"class":73},[49,106233,106234,106236,106238,106240],{"class":51,"line":63},[49,106235,30946],{"class":159},[49,106237,841],{"class":73},[49,106239,101982],{"class":59},[49,106241,101985],{"class":73},[49,106243,106244,106246,106248,106251],{"class":51,"line":70},[49,106245,30946],{"class":159},[49,106247,841],{"class":73},[49,106249,106250],{"class":59},"\"qpos:\"",[49,106252,106253],{"class":73},", data.qpos)\n",[49,106255,106256,106258,106260,106263],{"class":51,"line":219},[49,106257,30946],{"class":159},[49,106259,841],{"class":73},[49,106261,106262],{"class":59},"\"qvel:\"",[49,106264,106265],{"class":73},", data.qvel)\n",[14,106267,106268],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[18,106270,106271],{"id":106271},"仿真结果每次都一样",[14,106273,106274,106275,106277],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[46,106276,104561],{},"、目标点或控制输入。",[782,106279,103138],{"id":103137},[14,106281,106282,106283,25309],{},"Python 控制 MuJoCo 的核心就是读写 ",[46,106284,33932],{},[30,106286,106287,106295,106300,106305],{},[33,106288,106289,106290,101549,106292,106294],{},"用 ",[46,106291,101601],{},[46,106293,101604],{}," 读取状态。",[33,106296,106289,106297,106299],{},[46,106298,101607],{}," 写入控制。",[33,106301,106289,106302,106304],{},[46,106303,101746],{}," 推进时间。",[33,106306,106307,106308,106310],{},"手动改状态后用 ",[46,106309,104781],{}," 刷新派生量。",[14,106312,106313],{},"理解这一章后，就可以进入关节和 actuator 控制。",[757,106315,106316],{},"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":27,"searchDepth":63,"depth":63,"links":106318},[106319,106320,106321,106328,106332,106333,106334,106344],{"id":101177,"depth":63,"text":101178},{"id":101300,"depth":63,"text":101301},{"id":101575,"depth":63,"text":101576,"children":106322},[106323,106325,106327],{"id":105086,"depth":70,"text":106324},"qpos、qvel、ctrl 是什么",{"id":105164,"depth":70,"text":106326},"mj_step 和 mj_forward 的区别",{"id":105253,"depth":70,"text":105254},{"id":101783,"depth":63,"text":101784,"children":106329},[106330,106331],{"id":102103,"depth":70,"text":102103},{"id":102239,"depth":70,"text":102239},{"id":102846,"depth":63,"text":102847},{"id":102878,"depth":63,"text":102879},{"id":102983,"depth":63,"text":102984,"children":106335},[106336,106338,106339,106341,106343],{"id":106115,"depth":70,"text":106337},"修改 data.qpos 后位置没有更新",{"id":106132,"depth":70,"text":106132},{"id":106191,"depth":70,"text":106340},"误以为 qpos 一定等于关节数",{"id":106209,"depth":70,"text":106342},"不知道某个元素在 qpos 的第几位",{"id":106271,"depth":70,"text":106271},{"id":103137,"depth":63,"text":103138},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104849,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106351,"title":106352,"body":106353,"description":27,"extension":766,"meta":108043,"navigation":398,"path":108044,"seo":108045,"stem":108046,"__hash__":108047},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106354,"toc":108019},[106355,106358,106360,106363,106365,106390,106393,106412,106415,106417,106419,106443,106445,106459,106461,106502,106504,106528,106530,106533,106567,106569,106582,106585,106653,106662,106666,106669,106703,106709,106712,106716,106755,106758,106778,106782,106825,106827,106856,106859,106865,106868,106870,107264,107266,107278,107280,107291,107293,107296,107325,107333,107336,107371,107374,107376,107384,107387,107389,107400,107410,107430,107433,107469,107481,107529,107548,107590,107603,107631,107636,107657,107667,107685,107688,107722,107725,107745,107748,107767,107773,107775,107778,107784,107790,107800,107803,107809,107818,107820,107866,107868,107874,107880,107883,107886,107906,107909,107915,107921,107923,107946,107949,107952,107961,107964,108002,108004,108007,108013,108016],[10,106356,106352],{"id":106357},"_4关节actuator-与力控制",[782,106359,101178],{"id":101177},[14,106361,106362],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,106364,104862],{},[30,106366,106367,106373,106378,106382,106387],{},[33,106368,106369,106372],{},[46,106370,106371],{},"hinge"," 关节",[33,106374,106375],{},[46,106376,106377],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[33,106379,106380],{},[46,106381,101607],{},[33,106383,106384],{},[46,106385,106386],{},"ctrlrange",[33,106388,106389],{},"读取关节角和角速度",[14,106391,106392],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[40,106394,106396],{"className":30909,"code":106395,"language":30911,"meta":27,"style":27},"data.ctrl[0] = ...\n",[46,106397,106398],{"__ignoreMap":27},[49,106399,106400,106403,106405,106407,106409],{"class":51,"line":52},[49,106401,106402],{"class":73},"data.ctrl[",[49,106404,1021],{"class":159},[49,106406,5140],{"class":73},[49,106408,78],{"class":77},[49,106410,106411],{"class":159}," ...\n",[14,106413,106414],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[782,106416,101301],{"id":101300},[14,106418,101304],{},[40,106420,106421],{"className":42,"code":104919,"language":44,"meta":27,"style":27},[46,106422,106423],{"__ignoreMap":27},[49,106424,106425,106427,106429,106431,106433,106435,106437,106439,106441],{"class":51,"line":52},[49,106426,264],{"class":55},[49,106428,384],{"class":59},[49,106430,269],{"class":59},[49,106432,272],{"class":159},[49,106434,104934],{"class":59},[49,106436,101329],{"class":59},[49,106438,103032],{"class":59},[49,106440,101345],{"class":59},[49,106442,104943],{"class":59},[14,106444,103350],{},[40,106446,106447],{"className":42,"code":101450,"language":44,"meta":27,"style":27},[46,106448,106449],{"__ignoreMap":27},[49,106450,106451,106453,106455,106457],{"class":51,"line":52},[49,106452,24524],{"class":55},[49,106454,269],{"class":59},[49,106456,101461],{"class":59},[49,106458,101464],{"class":59},[14,106460,103367],{},[40,106462,106464],{"className":42,"code":106463,"language":44,"meta":27,"style":27},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[46,106465,106466,106483,106492],{"__ignoreMap":27},[49,106467,106468,106470,106472,106474,106477,106479,106481],{"class":51,"line":52},[49,106469,30861],{"class":55},[49,106471,29707],{"class":59},[49,106473,25804],{"class":159},[49,106475,106476],{"class":59}," mujoco-control",[49,106478,101506],{"class":59},[49,106480,101509],{"class":159},[49,106482,101512],{"class":159},[49,106484,106485,106487,106489],{"class":51,"line":63},[49,106486,30861],{"class":55},[49,106488,101519],{"class":59},[49,106490,106491],{"class":59}," mujoco-control\n",[49,106493,106494,106496,106498,106500],{"class":51,"line":70},[49,106495,24524],{"class":55},[49,106497,269],{"class":59},[49,106499,101461],{"class":59},[49,106501,101464],{"class":59},[14,106503,101535],{},[30,106505,106506,106512,106519,106525],{},[33,106507,106508,106511],{},[46,106509,106510],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[33,106513,106514,106516,106517,28916],{},[46,106515,101607],{}," 长度等于 ",[46,106518,102689],{},[33,106520,82753,106521,106524],{},[46,106522,106523],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[33,106526,106527],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[782,106529,101576],{"id":101575},[14,106531,106532],{},"关节决定 body 如何运动:",[40,106534,106536],{"className":53598,"code":106535,"language":53600,"meta":27,"style":27},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[46,106537,106538],{"__ignoreMap":27},[49,106539,106540,106542,106544,106546,106548,106551,106553,106555,106557,106560,106562,106565],{"class":51,"line":52},[49,106541,1739],{"class":73},[49,106543,103487],{"class":51831},[49,106545,15617],{"class":55},[49,106547,78],{"class":73},[49,106549,106550],{"class":59},"\"hinge\"",[49,106552,54355],{"class":55},[49,106554,78],{"class":73},[49,106556,106550],{"class":59},[49,106558,106559],{"class":55}," axis",[49,106561,78],{"class":73},[49,106563,106564],{"class":59},"\"0 1 0\"",[49,106566,101675],{"class":73},[14,106568,103583],{},[30,106570,106571,106576,106579],{},[33,106572,106573,106574],{},"名字是 ",[46,106575,106371],{},[33,106577,106578],{},"类型是旋转关节",[33,106580,106581],{},"绕 y 轴旋转",[14,106583,106584],{},"actuator 决定如何施加控制:",[40,106586,106588],{"className":53598,"code":106587,"language":53600,"meta":27,"style":27},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[46,106589,106590,106599,106645],{"__ignoreMap":27},[49,106591,106592,106594,106597],{"class":51,"line":52},[49,106593,1739],{"class":73},[49,106595,106596],{"class":51831},"actuator",[49,106598,51838],{"class":73},[49,106600,106601,106603,106606,106608,106610,106613,106616,106618,106620,106623,106625,106627,106630,106632,106635,106638,106640,106643],{"class":51,"line":63},[49,106602,52675],{"class":73},[49,106604,106605],{"class":51831},"motor",[49,106607,15617],{"class":55},[49,106609,78],{"class":73},[49,106611,106612],{"class":59},"\"hinge_motor\"",[49,106614,106615],{"class":55}," joint",[49,106617,78],{"class":73},[49,106619,106550],{"class":59},[49,106621,106622],{"class":55}," gear",[49,106624,78],{"class":73},[49,106626,4375],{"class":59},[49,106628,106629],{"class":55}," ctrlrange",[49,106631,78],{"class":73},[49,106633,106634],{"class":59},"\"-2 2\"",[49,106636,106637],{"class":55}," ctrllimited",[49,106639,78],{"class":73},[49,106641,106642],{"class":59},"\"true\"",[49,106644,101675],{"class":73},[49,106646,106647,106649,106651],{"class":51,"line":70},[49,106648,52316],{"class":73},[49,106650,106596],{"class":51831},[49,106652,51838],{"class":73},[14,106654,106655,106658,106659,28916],{},[46,106656,106657],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[46,106660,106661],{},"[-2, 2]",[18,106663,106665],{"id":106664},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106667,106668],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[610,106670,106671,106681],{},[613,106672,106673],{},[616,106674,106675,106677,106679],{},[619,106676,26442],{"align":621},[619,106678,103227],{"align":621},[619,106680,101265],{"align":621},[633,106682,106683,106693],{},[616,106684,106685,106687,106690],{},[638,106686,103487],{"align":621},[638,106688,106689],{"align":621},"定义能怎么动",[638,106691,106692],{"align":621},"门轴允许门旋转",[616,106694,106695,106697,106700],{},[638,106696,106596],{"align":621},[638,106698,106699],{"align":621},"定义怎么施力或控制",[638,106701,106702],{"align":621},"人推门、马达带动门",[14,106704,106705,106706,106708],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[46,106707,101607],{}," 主动控制它。",[14,106710,106711],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[18,106713,106715],{"id":106714},"hinge-joint","hinge joint",[40,106717,106719],{"className":53598,"code":106718,"language":53600,"meta":27,"style":27},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[46,106720,106721],{"__ignoreMap":27},[49,106722,106723,106725,106727,106729,106731,106733,106735,106737,106739,106741,106743,106745,106748,106750,106753],{"class":51,"line":52},[49,106724,1739],{"class":73},[49,106726,103487],{"class":51831},[49,106728,15617],{"class":55},[49,106730,78],{"class":73},[49,106732,106550],{"class":59},[49,106734,54355],{"class":55},[49,106736,78],{"class":73},[49,106738,106550],{"class":59},[49,106740,106559],{"class":55},[49,106742,78],{"class":73},[49,106744,106564],{"class":59},[49,106746,106747],{"class":55}," damping",[49,106749,78],{"class":73},[49,106751,106752],{"class":59},"\"0.1\"",[49,106754,101675],{"class":73},[14,106756,106757],{},"含义：",[30,106759,106760,106766,106772],{},[33,106761,106762,106765],{},[46,106763,106764],{},"type=\"hinge\"","：只能绕一个轴旋转。",[33,106767,106768,106771],{},[46,106769,106770],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[33,106773,106774,106777],{},[46,106775,106776],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[18,106779,106781],{"id":106780},"motor-actuator","motor actuator",[40,106783,106785],{"className":53598,"code":106784,"language":53600,"meta":27,"style":27},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[46,106786,106787],{"__ignoreMap":27},[49,106788,106789,106791,106793,106795,106797,106799,106801,106803,106805,106807,106809,106811,106813,106815,106817,106819,106821,106823],{"class":51,"line":52},[49,106790,1739],{"class":73},[49,106792,106605],{"class":51831},[49,106794,15617],{"class":55},[49,106796,78],{"class":73},[49,106798,106612],{"class":59},[49,106800,106615],{"class":55},[49,106802,78],{"class":73},[49,106804,106550],{"class":59},[49,106806,106622],{"class":55},[49,106808,78],{"class":73},[49,106810,4375],{"class":59},[49,106812,106629],{"class":55},[49,106814,78],{"class":73},[49,106816,106634],{"class":59},[49,106818,106637],{"class":55},[49,106820,78],{"class":73},[49,106822,106642],{"class":59},[49,106824,101675],{"class":73},[14,106826,106757],{},[30,106828,106829,106838,106844,106850],{},[33,106830,106831,106834,106835,106837],{},[46,106832,106833],{},"joint=\"hinge\"","：这个电机作用在名为 ",[46,106836,106371],{}," 的关节上。",[33,106839,106840,106843],{},[46,106841,106842],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[33,106845,106846,106849],{},[46,106847,106848],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[33,106851,106852,106855],{},[46,106853,106854],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106857,106858],{},"简单理解：",[40,106860,106863],{"className":106861,"code":106862,"language":5884,"meta":27},[5882],"实际施加效果 ≈ data.ctrl[0] * gear\n",[46,106864,106862],{"__ignoreMap":27},[14,106866,106867],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[782,106869,101784],{"id":101783},[40,106871,106873],{"className":30909,"code":106872,"language":30911,"meta":27,"style":27},"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",[46,106874,106875,106882,106886,106892,106902,106906,106910,106918,106923,106928,106932,106936,106941,106946,106950,106955,106960,106965,106970,106974,106978,106982,106987,106992,106997,107001,107005,107009,107013,107025,107037,107045,107049,107059,107069,107079,107083,107096,107109,107113,107130,107144,107179,107183,107187,107198,107213,107228,107240,107244,107248,107260],{"__ignoreMap":27},[49,106876,106877,106879],{"class":51,"line":52},[49,106878,30923],{"class":77},[49,106880,106881],{"class":73}," math\n",[49,106883,106884],{"class":51,"line":63},[49,106885,399],{"emptyLinePlaceholder":398},[49,106887,106888,106890],{"class":51,"line":70},[49,106889,30923],{"class":77},[49,106891,101832],{"class":73},[49,106893,106894,106896,106898,106900],{"class":51,"line":219},[49,106895,30923],{"class":77},[49,106897,31911],{"class":73},[49,106899,31914],{"class":77},[49,106901,31917],{"class":73},[49,106903,106904],{"class":51,"line":233},[49,106905,399],{"emptyLinePlaceholder":398},[49,106907,106908],{"class":51,"line":241},[49,106909,399],{"emptyLinePlaceholder":398},[49,106911,106912,106914,106916],{"class":51,"line":1920},[49,106913,101845],{"class":159},[49,106915,14261],{"class":77},[49,106917,101850],{"class":59},[49,106919,106920],{"class":51,"line":2011},[49,106921,106922],{"class":59},"\u003Cmujoco model=\"one_link_motor\">\n",[49,106924,106925],{"class":51,"line":2017},[49,106926,106927],{"class":59},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[49,106929,106930],{"class":51,"line":2029},[49,106931,399],{"emptyLinePlaceholder":398},[49,106933,106934],{"class":51,"line":2311},[49,106935,101869],{"class":59},[49,106937,106938],{"class":51,"line":2316},[49,106939,106940],{"class":59},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[49,106942,106943],{"class":51,"line":2322},[49,106944,106945],{"class":59},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[49,106947,106948],{"class":51,"line":2327},[49,106949,399],{"emptyLinePlaceholder":398},[49,106951,106952],{"class":51,"line":2341},[49,106953,106954],{"class":59},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[49,106956,106957],{"class":51,"line":2346},[49,106958,106959],{"class":59},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[49,106961,106962],{"class":51,"line":2352},[49,106963,106964],{"class":59},"        \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",[49,106966,106967],{"class":51,"line":2373},[49,106968,106969],{"class":59},"      \u003C\u002Fbody>\n",[49,106971,106972],{"class":51,"line":2378},[49,106973,101898],{"class":59},[49,106975,106976],{"class":51,"line":2392},[49,106977,101903],{"class":59},[49,106979,106980],{"class":51,"line":2397},[49,106981,399],{"emptyLinePlaceholder":398},[49,106983,106984],{"class":51,"line":2426},[49,106985,106986],{"class":59},"  \u003Cactuator>\n",[49,106988,106989],{"class":51,"line":2431},[49,106990,106991],{"class":59},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[49,106993,106994],{"class":51,"line":2448},[49,106995,106996],{"class":59},"  \u003C\u002Factuator>\n",[49,106998,106999],{"class":51,"line":2453},[49,107000,101908],{"class":59},[49,107002,107003],{"class":51,"line":2458},[49,107004,96229],{"class":59},[49,107006,107007],{"class":51,"line":2463},[49,107008,399],{"emptyLinePlaceholder":398},[49,107010,107011],{"class":51,"line":2477},[49,107012,399],{"emptyLinePlaceholder":398},[49,107014,107015,107017,107019,107021,107023],{"class":51,"line":2482},[49,107016,32478],{"class":77},[49,107018,2671],{"class":55},[49,107020,101929],{"class":73},[49,107022,96217],{"class":159},[49,107024,4436],{"class":73},[49,107026,107027,107029,107031,107033,107035],{"class":51,"line":3274},[49,107028,101938],{"class":73},[49,107030,78],{"class":77},[49,107032,101943],{"class":73},[49,107034,101845],{"class":159},[49,107036,847],{"class":73},[49,107038,107039,107041,107043],{"class":51,"line":3288},[49,107040,101952],{"class":73},[49,107042,78],{"class":77},[49,107044,101957],{"class":73},[49,107046,107047],{"class":51,"line":3296},[49,107048,399],{"emptyLinePlaceholder":398},[49,107050,107051,107053,107055,107057],{"class":51,"line":3301},[49,107052,31830],{"class":159},[49,107054,841],{"class":73},[49,107056,101970],{"class":59},[49,107058,101973],{"class":73},[49,107060,107061,107063,107065,107067],{"class":51,"line":3307},[49,107062,31830],{"class":159},[49,107064,841],{"class":73},[49,107066,101982],{"class":59},[49,107068,101985],{"class":73},[49,107070,107071,107073,107075,107077],{"class":51,"line":3313},[49,107072,31830],{"class":159},[49,107074,841],{"class":73},[49,107076,101994],{"class":59},[49,107078,101997],{"class":73},[49,107080,107081],{"class":51,"line":3318},[49,107082,399],{"emptyLinePlaceholder":398},[49,107084,107085,107087,107090,107092,107094],{"class":51,"line":8645},[49,107086,3798],{"class":77},[49,107088,107089],{"class":73}," model.nu ",[49,107091,21645],{"class":77},[49,107093,25807],{"class":159},[49,107095,4436],{"class":73},[49,107097,107098,107100,107102,107104,107107],{"class":51,"line":8669},[49,107099,103963],{"class":77},[49,107101,103966],{"class":159},[49,107103,841],{"class":73},[49,107105,107106],{"class":59},"\"expected exactly one actuator\"",[49,107108,847],{"class":73},[49,107110,107111],{"class":51,"line":8674},[49,107112,399],{"emptyLinePlaceholder":398},[49,107114,107115,107117,107119,107121,107123,107125,107128],{"class":51,"line":8680},[49,107116,3898],{"class":77},[49,107118,32147],{"class":73},[49,107120,26732],{"class":77},[49,107122,32974],{"class":159},[49,107124,841],{"class":73},[49,107126,107127],{"class":159},"2000",[49,107129,31317],{"class":73},[49,107131,107132,107135,107137,107139,107141],{"class":51,"line":8707},[49,107133,107134],{"class":73},"        t ",[49,107136,78],{"class":77},[49,107138,32147],{"class":73},[49,107140,1284],{"class":77},[49,107142,107143],{"class":73}," model.opt.timestep\n",[49,107145,107146,107149,107151,107153,107155,107158,107160,107163,107165,107167,107170,107172,107174,107176],{"class":51,"line":8712},[49,107147,107148],{"class":73},"        data.ctrl[",[49,107150,1021],{"class":159},[49,107152,5140],{"class":73},[49,107154,78],{"class":77},[49,107156,107157],{"class":159}," 1.5",[49,107159,7215],{"class":77},[49,107161,107162],{"class":73}," math.sin(",[49,107164,105791],{"class":159},[49,107166,7215],{"class":77},[49,107168,107169],{"class":73}," math.pi ",[49,107171,1284],{"class":77},[49,107173,62398],{"class":159},[49,107175,7215],{"class":77},[49,107177,107178],{"class":73}," t)\n",[49,107180,107181],{"class":51,"line":8718},[49,107182,102047],{"class":73},[49,107184,107185],{"class":51,"line":8730},[49,107186,399],{"emptyLinePlaceholder":398},[49,107188,107189,107191,107193,107196],{"class":51,"line":8742},[49,107190,31830],{"class":159},[49,107192,841],{"class":73},[49,107194,107195],{"class":59},"\"time:\"",[49,107197,102009],{"class":73},[49,107199,107200,107202,107204,107207,107209,107211],{"class":51,"line":8754},[49,107201,31830],{"class":159},[49,107203,841],{"class":73},[49,107205,107206],{"class":59},"\"joint qpos:\"",[49,107208,105461],{"class":73},[49,107210,1122],{"class":159},[49,107212,31028],{"class":73},[49,107214,107215,107217,107219,107222,107224,107226],{"class":51,"line":10413},[49,107216,31830],{"class":159},[49,107218,841],{"class":73},[49,107220,107221],{"class":59},"\"joint qvel:\"",[49,107223,105477],{"class":73},[49,107225,1122],{"class":159},[49,107227,31028],{"class":73},[49,107229,107230,107232,107234,107237],{"class":51,"line":10438},[49,107231,31830],{"class":159},[49,107233,841],{"class":73},[49,107235,107236],{"class":59},"\"last ctrl:\"",[49,107238,107239],{"class":73},", data.ctrl.copy())\n",[49,107241,107242],{"class":51,"line":10461},[49,107243,399],{"emptyLinePlaceholder":398},[49,107245,107246],{"class":51,"line":10485},[49,107247,399],{"emptyLinePlaceholder":398},[49,107249,107250,107252,107254,107256,107258],{"class":51,"line":10490},[49,107251,2230],{"class":77},[49,107253,31751],{"class":159},[49,107255,102090],{"class":77},[49,107257,102093],{"class":59},[49,107259,4436],{"class":73},[49,107261,107262],{"class":51,"line":10495},[49,107263,102100],{"class":73},[14,107265,104101],{},[40,107267,107269],{"className":42,"code":107268,"language":44,"meta":27,"style":27},"touch ch4_joint_motor.py\n",[46,107270,107271],{"__ignoreMap":27},[49,107272,107273,107275],{"class":51,"line":52},[49,107274,101814],{"class":55},[49,107276,107277],{"class":59}," ch4_joint_motor.py\n",[14,107279,102832],{},[40,107281,107283],{"className":42,"code":107282,"language":44,"meta":27,"style":27},"python ch4_joint_motor.py\n",[46,107284,107285],{"__ignoreMap":27},[49,107286,107287,107289],{"class":51,"line":52},[49,107288,30911],{"class":55},[49,107290,107277],{"class":59},[18,107292,102103],{"id":102103},[14,107294,107295],{},"检查 actuator 数量：",[40,107297,107299],{"className":30909,"code":107298,"language":30911,"meta":27,"style":27},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[46,107300,107301,107313],{"__ignoreMap":27},[49,107302,107303,107305,107307,107309,107311],{"class":51,"line":52},[49,107304,2230],{"class":77},[49,107306,107089],{"class":73},[49,107308,21645],{"class":77},[49,107310,25807],{"class":159},[49,107312,4436],{"class":73},[49,107314,107315,107317,107319,107321,107323],{"class":51,"line":63},[49,107316,104426],{"class":77},[49,107318,103966],{"class":159},[49,107320,841],{"class":73},[49,107322,107106],{"class":59},[49,107324,847],{"class":73},[14,107326,107327,107329,107330,107332],{},[46,107328,102689],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[46,107331,101607],{}," 长度应该是 1。",[14,107334,107335],{},"产生正弦控制信号：",[40,107337,107339],{"className":30909,"code":107338,"language":30911,"meta":27,"style":27},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[46,107340,107341],{"__ignoreMap":27},[49,107342,107343,107345,107347,107349,107351,107353,107355,107357,107359,107361,107363,107365,107367,107369],{"class":51,"line":52},[49,107344,106402],{"class":73},[49,107346,1021],{"class":159},[49,107348,5140],{"class":73},[49,107350,78],{"class":77},[49,107352,107157],{"class":159},[49,107354,7215],{"class":77},[49,107356,107162],{"class":73},[49,107358,105791],{"class":159},[49,107360,7215],{"class":77},[49,107362,107169],{"class":73},[49,107364,1284],{"class":77},[49,107366,62398],{"class":159},[49,107368,7215],{"class":77},[49,107370,107178],{"class":73},[14,107372,107373],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,107375,102204],{},[40,107377,107378],{"className":30909,"code":105036,"language":30911,"meta":27,"style":27},[46,107379,107380],{"__ignoreMap":27},[49,107381,107382],{"class":51,"line":52},[49,107383,105036],{"class":73},[14,107385,107386],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[18,107388,102239],{"id":102239},[40,107390,107392],{"className":30909,"code":107391,"language":30911,"meta":27,"style":27},"import math\n",[46,107393,107394],{"__ignoreMap":27},[49,107395,107396,107398],{"class":51,"line":52},[49,107397,30923],{"class":77},[49,107399,106881],{"class":73},[14,107401,107402,107403,101549,107406,107409],{},"导入 Python 标准库里的数学模块。后面要用 ",[46,107404,107405],{},"math.sin",[46,107407,107408],{},"math.pi"," 生成周期变化的控制信号。",[40,107411,107412],{"className":30909,"code":104217,"language":30911,"meta":27,"style":27},[46,107413,107414,107420],{"__ignoreMap":27},[49,107415,107416,107418],{"class":51,"line":52},[49,107417,30923],{"class":77},[49,107419,101832],{"class":73},[49,107421,107422,107424,107426,107428],{"class":51,"line":63},[49,107423,30923],{"class":77},[49,107425,31911],{"class":73},[49,107427,31914],{"class":77},[49,107429,31917],{"class":73},[14,107431,107432],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[40,107434,107435],{"className":53598,"code":106718,"language":53600,"meta":27,"style":27},[46,107436,107437],{"__ignoreMap":27},[49,107438,107439,107441,107443,107445,107447,107449,107451,107453,107455,107457,107459,107461,107463,107465,107467],{"class":51,"line":52},[49,107440,1739],{"class":73},[49,107442,103487],{"class":51831},[49,107444,15617],{"class":55},[49,107446,78],{"class":73},[49,107448,106550],{"class":59},[49,107450,54355],{"class":55},[49,107452,78],{"class":73},[49,107454,106550],{"class":59},[49,107456,106559],{"class":55},[49,107458,78],{"class":73},[49,107460,106564],{"class":59},[49,107462,106747],{"class":55},[49,107464,78],{"class":73},[49,107466,106752],{"class":59},[49,107468,101675],{"class":73},[14,107470,107471,107472,107474,107475,107477,107478,107480],{},"这行定义关节。",[46,107473,106371],{}," 表示旋转关节。",[46,107476,106770],{}," 表示绕 y 轴旋转。",[46,107479,106776],{}," 表示有一点阻尼，运动不会完全无损耗。",[40,107482,107484],{"className":53598,"code":107483,"language":53600,"meta":27,"style":27},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[46,107485,107486],{"__ignoreMap":27},[49,107487,107488,107490,107492,107494,107496,107499,107501,107503,107506,107509,107511,107514,107516,107518,107520,107522,107524,107527],{"class":51,"line":52},[49,107489,1739],{"class":73},[49,107491,101651],{"class":51831},[49,107493,15617],{"class":55},[49,107495,78],{"class":73},[49,107497,107498],{"class":59},"\"link_geom\"",[49,107500,54355],{"class":55},[49,107502,78],{"class":73},[49,107504,107505],{"class":59},"\"capsule\"",[49,107507,107508],{"class":55}," fromto",[49,107510,78],{"class":73},[49,107512,107513],{"class":59},"\"0 0 0 0 0 0.5\"",[49,107515,101667],{"class":55},[49,107517,78],{"class":73},[49,107519,104309],{"class":59},[49,107521,102532],{"class":55},[49,107523,78],{"class":73},[49,107525,107526],{"class":59},"\"0.5\"",[49,107528,101675],{"class":73},[14,107530,107531,107532,107534,107535,107537,107538,107541,107542,28916,107545,107547],{},"这行定义摆杆的形状。",[46,107533,103696],{}," 是胶囊体，适合表示杆子。",[46,107536,103707],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[46,107539,107540],{},"(0,0,0)"," 延伸到 ",[46,107543,107544],{},"(0,0,0.5)",[46,107546,103701],{}," 是半径。",[40,107549,107550],{"className":53598,"code":106784,"language":53600,"meta":27,"style":27},[46,107551,107552],{"__ignoreMap":27},[49,107553,107554,107556,107558,107560,107562,107564,107566,107568,107570,107572,107574,107576,107578,107580,107582,107584,107586,107588],{"class":51,"line":52},[49,107555,1739],{"class":73},[49,107557,106605],{"class":51831},[49,107559,15617],{"class":55},[49,107561,78],{"class":73},[49,107563,106612],{"class":59},[49,107565,106615],{"class":55},[49,107567,78],{"class":73},[49,107569,106550],{"class":59},[49,107571,106622],{"class":55},[49,107573,78],{"class":73},[49,107575,4375],{"class":59},[49,107577,106629],{"class":55},[49,107579,78],{"class":73},[49,107581,106634],{"class":59},[49,107583,106637],{"class":55},[49,107585,78],{"class":73},[49,107587,106642],{"class":59},[49,107589,101675],{"class":73},[14,107591,107592,107593,107595,107596,107599,107600,107602],{},"这行定义电机。它作用在 ",[46,107594,106371],{}," 关节上。",[46,107597,107598],{},"gear"," 可以理解成放大倍数。",[46,107601,106386],{}," 限制控制输入范围。",[40,107604,107605],{"className":30909,"code":107298,"language":30911,"meta":27,"style":27},[46,107606,107607,107619],{"__ignoreMap":27},[49,107608,107609,107611,107613,107615,107617],{"class":51,"line":52},[49,107610,2230],{"class":77},[49,107612,107089],{"class":73},[49,107614,21645],{"class":77},[49,107616,25807],{"class":159},[49,107618,4436],{"class":73},[49,107620,107621,107623,107625,107627,107629],{"class":51,"line":63},[49,107622,104426],{"class":77},[49,107624,103966],{"class":159},[49,107626,841],{"class":73},[49,107628,107106],{"class":59},[49,107630,847],{"class":73},[14,107632,107633,107635],{},[46,107634,102689],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[40,107637,107639],{"className":30909,"code":107638,"language":30911,"meta":27,"style":27},"for step in range(2000):\n",[46,107640,107641],{"__ignoreMap":27},[49,107642,107643,107645,107647,107649,107651,107653,107655],{"class":51,"line":52},[49,107644,3722],{"class":77},[49,107646,32147],{"class":73},[49,107648,26732],{"class":77},[49,107650,32974],{"class":159},[49,107652,841],{"class":73},[49,107654,107127],{"class":159},[49,107656,31317],{"class":73},[14,107658,107659,107660,107662,107663,107666],{},"循环 2000 步。这里没有用 ",[46,107661,1821],{},"，而是用 ",[46,107664,107665],{},"step","，因为后面要用当前步数计算时间。",[40,107668,107670],{"className":30909,"code":107669,"language":30911,"meta":27,"style":27},"t = step * model.opt.timestep\n",[46,107671,107672],{"__ignoreMap":27},[49,107673,107674,107677,107679,107681,107683],{"class":51,"line":52},[49,107675,107676],{"class":73},"t ",[49,107678,78],{"class":77},[49,107680,32147],{"class":73},[49,107682,1284],{"class":77},[49,107684,107143],{"class":73},[14,107686,107687],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[40,107689,107690],{"className":30909,"code":107338,"language":30911,"meta":27,"style":27},[46,107691,107692],{"__ignoreMap":27},[49,107693,107694,107696,107698,107700,107702,107704,107706,107708,107710,107712,107714,107716,107718,107720],{"class":51,"line":52},[49,107695,106402],{"class":73},[49,107697,1021],{"class":159},[49,107699,5140],{"class":73},[49,107701,78],{"class":77},[49,107703,107157],{"class":159},[49,107705,7215],{"class":77},[49,107707,107162],{"class":73},[49,107709,105791],{"class":159},[49,107711,7215],{"class":77},[49,107713,107169],{"class":73},[49,107715,1284],{"class":77},[49,107717,62398],{"class":159},[49,107719,7215],{"class":77},[49,107721,107178],{"class":73},[14,107723,107724],{},"这行给电机输入一个正弦波。拆开看：",[30,107726,107727,107733,107739],{},[33,107728,107729,107732],{},[46,107730,107731],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[33,107734,107735,107738],{},[46,107736,107737],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[33,107740,107741,107744],{},[46,107742,107743],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107746,107747],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[40,107749,107751],{"className":30909,"code":107750,"language":30911,"meta":27,"style":27},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[46,107752,107753],{"__ignoreMap":27},[49,107754,107755,107757,107759,107761,107763,107765],{"class":51,"line":52},[49,107756,30946],{"class":159},[49,107758,841],{"class":73},[49,107760,107206],{"class":59},[49,107762,105461],{"class":73},[49,107764,1122],{"class":159},[49,107766,31028],{"class":73},[14,107768,107769,107770,107772],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[46,107771,101601],{}," 只有一个数。",[782,107774,102847],{"id":102846},[14,107776,107777],{},"输出类似:",[40,107779,107782],{"className":107780,"code":107781,"language":5884,"meta":27},[5882],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[46,107783,107781],{"__ignoreMap":27},[14,107785,107786,107787,107789],{},"这里 ",[46,107788,106657],{}," 是电机输入。",[14,107791,107792,107795,107796,107799],{},[46,107793,107794],{},"joint qpos"," 是关节角度，单位通常是弧度。",[46,107797,107798],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107801,107802],{},"角度单位提示：",[40,107804,107807],{"className":107805,"code":107806,"language":5884,"meta":27},[5882],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[46,107808,107806],{"__ignoreMap":27},[14,107810,107811,107812,107814,107815,107817],{},"如果你看到 ",[46,107813,104561],{}," 是 ",[46,107816,35860],{},"，大约就是 28.6 度。",[782,107819,102879],{"id":102878},[30,107821,107822,107829,107832,107839,107842,107850,107858],{},[33,107823,102942,107824,102945,107826,28916],{},[46,107825,106842],{},[46,107827,107828],{},"gear=\"5\"",[33,107830,107831],{},"重新运行，观察关节运动是否更剧烈。",[33,107833,102942,107834,102945,107836,28916],{},[46,107835,106386],{},[46,107837,107838],{},"-0.2 0.2",[33,107840,107841],{},"重新运行，观察控制能力是否变弱。",[33,107843,107844,107845,107847,107848,28916],{},"去掉 actuator，确认 ",[46,107846,102689],{}," 变成 ",[46,107849,1021],{},[33,107851,102942,107852,102945,107854,107857],{},[46,107853,106776],{},[46,107855,107856],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[33,107859,102942,107860,102945,107862,107865],{},[46,107861,106770],{},[46,107863,107864],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[782,107867,102984],{"id":102983},[18,107869,107871],{"id":107870},"indexerror-index-0-is-out-of-bounds",[46,107872,107873],{},"IndexError: index 0 is out of bounds",[14,107875,107876,107877,107879],{},"原因是 ",[46,107878,106523],{},"，没有 actuator。",[18,107881,107882],{"id":107882},"关节几乎不动",[14,107884,107885],{},"可能原因:",[30,107887,107888,107893,107897,107903],{},[33,107889,107890,107892],{},[46,107891,107598],{}," 太小",[33,107894,107895,107892],{},[46,107896,106386],{},[33,107898,107899,107902],{},[46,107900,107901],{},"damping"," 太大",[33,107904,107905],{},"重力方向导致运动不明显",[18,107907,107908],{"id":107908},"模型编译失败",[14,107910,107911,107912,107914],{},"检查 actuator 引用的 ",[46,107913,106833],{}," 是否存在，joint 名称是否拼写一致。",[18,107916,107918,107920],{"id":107917},"datactrl0-写了但没有效果",[46,107919,106657],{}," 写了但没有效果",[14,107922,103106],{},[30,107924,107925,107930,107933,107938,107943],{},[33,107926,107927,107929],{},[46,107928,102689],{}," 是否大于 0。",[33,107931,107932],{},"motor 是否引用了正确 joint。",[33,107934,107935,107937],{},[46,107936,107598],{}," 是否太小。",[33,107939,107940,107942],{},[46,107941,106386],{}," 是否把输入限制得太小。",[33,107944,107945],{},"body 是否真的有可动 joint。",[18,107947,107948],{"id":107948},"控制输入超过范围会怎样",[14,107950,107951],{},"如果设置了：",[40,107953,107955],{"className":53598,"code":107954,"language":53600,"meta":27,"style":27},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[46,107956,107957],{"__ignoreMap":27},[49,107958,107959],{"class":51,"line":52},[49,107960,107954],{"class":73},[14,107962,107963],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[40,107965,107967],{"className":30909,"code":107966,"language":30911,"meta":27,"style":27},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[46,107968,107969,107989],{"__ignoreMap":27},[49,107970,107971,107974,107976,107979,107981,107983,107985,107987],{"class":51,"line":52},[49,107972,107973],{"class":73},"action ",[49,107975,78],{"class":77},[49,107977,107978],{"class":73}," np.clip(action, ",[49,107980,1361],{"class":77},[49,107982,105791],{"class":159},[49,107984,13132],{"class":73},[49,107986,105791],{"class":159},[49,107988,847],{"class":73},[49,107990,107991,107993,107995,107997,107999],{"class":51,"line":63},[49,107992,106402],{"class":73},[49,107994,1021],{"class":159},[49,107996,5140],{"class":73},[49,107998,78],{"class":77},[49,108000,108001],{"class":73}," action\n",[782,108003,103138],{"id":103137},[14,108005,108006],{},"这一章建立了控制任务的基本形式：",[40,108008,108011],{"className":108009,"code":108010,"language":5884,"meta":27},[5882],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[46,108012,108010],{"__ignoreMap":27},[14,108014,108015],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[757,108017,108018],{},"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":27,"searchDepth":63,"depth":63,"links":108020},[108021,108022,108023,108028,108032,108033,108034,108042],{"id":101177,"depth":63,"text":101178},{"id":101300,"depth":63,"text":101301},{"id":101575,"depth":63,"text":101576,"children":108024},[108025,108026,108027],{"id":106664,"depth":70,"text":106665},{"id":106714,"depth":70,"text":106715},{"id":106780,"depth":70,"text":106781},{"id":101783,"depth":63,"text":101784,"children":108029},[108030,108031],{"id":102103,"depth":70,"text":102103},{"id":102239,"depth":70,"text":102239},{"id":102846,"depth":63,"text":102847},{"id":102878,"depth":63,"text":102879},{"id":102983,"depth":63,"text":102984,"children":108035},[108036,108037,108038,108039,108041],{"id":107870,"depth":70,"text":107873},{"id":107882,"depth":70,"text":107882},{"id":107908,"depth":70,"text":107908},{"id":107917,"depth":70,"text":108040},"data.ctrl[0] 写了但没有效果",{"id":107948,"depth":70,"text":107948},{"id":103137,"depth":63,"text":103138},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106352,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108049,"title":108050,"body":108051,"description":27,"extension":766,"meta":109960,"navigation":398,"path":109961,"seo":109962,"stem":109963,"__hash__":109964},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108052,"toc":109936},[108053,108056,108058,108061,108069,108072,108089,108092,108117,108120,108166,108168,108170,108225,108227,108246,108248,108291,108294,108311,108314,108330,108340,108347,108349,108352,108355,108389,108392,108440,108444,108447,108461,108470,108474,108477,108502,108505,108509,108522,108525,108531,108534,108549,108551,108554,108814,108816,108828,108831,109143,109145,109157,109159,109162,109177,109182,109185,109207,109210,109213,109247,109250,109254,109265,109268,109285,109288,109302,109309,109329,109336,109350,109353,109365,109380,109400,109403,109425,109428,109432,109447,109458,109473,109476,109506,109522,109551,109559,109583,109586,109604,109614,109626,109633,109642,109648,109657,109660,109662,109671,109674,109689,109691,109694,109705,109708,109719,109722,109740,109742,109759,109762,109790,109792,109796,109799,109829,109835,109838,109842,109850,109853,109855,109876,109879,109882,109898,109901,109917,109919,109922,109933],[10,108054,108050],{"id":108055},"_5viewer-可视化与-renderer-离屏渲染",[782,108057,101178],{"id":101177},[14,108059,108060],{},"本章掌握两类可视化方式:",[30,108062,108063,108066],{},[33,108064,108065],{},"交互式 viewer: 适合人工观察仿真",[33,108067,108068],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,108070,108071],{},"使用官方接口:",[40,108073,108075],{"className":30909,"code":108074,"language":30911,"meta":27,"style":27},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[46,108076,108077,108084],{"__ignoreMap":27},[49,108078,108079,108081],{"class":51,"line":52},[49,108080,30923],{"class":77},[49,108082,108083],{"class":73}," mujoco.viewer\n",[49,108085,108086],{"class":51,"line":63},[49,108087,108088],{"class":73},"mujoco.viewer.launch_passive(model, data)\n",[14,108090,108091],{},"以及:",[40,108093,108095],{"className":30909,"code":108094,"language":30911,"meta":27,"style":27},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[46,108096,108097,108107],{"__ignoreMap":27},[49,108098,108099,108102,108104],{"class":51,"line":52},[49,108100,108101],{"class":73},"renderer ",[49,108103,78],{"class":77},[49,108105,108106],{"class":73}," mujoco.Renderer(model)\n",[49,108108,108109,108112,108114],{"class":51,"line":63},[49,108110,108111],{"class":73},"image ",[49,108113,78],{"class":77},[49,108115,108116],{"class":73}," renderer.render()\n",[14,108118,108119],{},"新手建议先理解二者区别：",[610,108121,108122,108138],{},[613,108123,108124],{},[616,108125,108126,108129,108132,108135],{},[619,108127,108128],{"align":621},"工具",[619,108130,108131],{"align":621},"用途",[619,108133,108134],{"align":621},"是否打开窗口",[619,108136,108137],{"align":621},"常见场景",[633,108139,108140,108153],{},[616,108141,108142,108145,108148,108150],{},[638,108143,108144],{"align":621},"Viewer",[638,108146,108147],{"align":621},"人眼实时观察仿真",[638,108149,105196],{"align":621},[638,108151,108152],{"align":621},"调试模型、看控制效果",[616,108154,108155,108158,108161,108163],{},[638,108156,108157],{"align":621},"Renderer",[638,108159,108160],{"align":621},"生成图像数组",[638,108162,105209],{"align":621},[638,108164,108165],{"align":621},"保存图片、训练视觉策略、服务器批量采集",[782,108167,101301],{"id":101300},[14,108169,101304],{},[40,108171,108173],{"className":42,"code":108172,"language":44,"meta":27,"style":27},"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",[46,108174,108175,108187,108197,108205,108213],{"__ignoreMap":27},[49,108176,108177,108179,108181,108183,108185],{"class":51,"line":52},[49,108178,264],{"class":55},[49,108180,384],{"class":59},[49,108182,269],{"class":59},[49,108184,272],{"class":159},[49,108186,184],{"class":159},[49,108188,108189,108191,108193,108195],{"class":51,"line":63},[49,108190,101339],{"class":59},[49,108192,101342],{"class":59},[49,108194,101345],{"class":59},[49,108196,184],{"class":159},[49,108198,108199,108201,108203],{"class":51,"line":70},[49,108200,101352],{"class":59},[49,108202,101355],{"class":59},[49,108204,184],{"class":159},[49,108206,108207,108209,108211],{"class":51,"line":219},[49,108208,101362],{"class":59},[49,108210,101365],{"class":59},[49,108212,184],{"class":159},[49,108214,108215,108217,108219,108221,108223],{"class":51,"line":233},[49,108216,101372],{"class":59},[49,108218,101375],{"class":59},[49,108220,101378],{"class":59},[49,108222,101381],{"class":59},[49,108224,103047],{"class":59},[14,108226,103350],{},[40,108228,108230],{"className":42,"code":108229,"language":44,"meta":27,"style":27},"pip install \"mujoco>=2.3\" numpy pillow\n",[46,108231,108232],{"__ignoreMap":27},[49,108233,108234,108236,108238,108240,108243],{"class":51,"line":52},[49,108235,24524],{"class":55},[49,108237,269],{"class":59},[49,108239,101461],{"class":59},[49,108241,108242],{"class":59}," numpy",[49,108244,108245],{"class":59}," pillow\n",[14,108247,103367],{},[40,108249,108251],{"className":42,"code":108250,"language":44,"meta":27,"style":27},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[46,108252,108253,108270,108279],{"__ignoreMap":27},[49,108254,108255,108257,108259,108261,108264,108266,108268],{"class":51,"line":52},[49,108256,30861],{"class":55},[49,108258,29707],{"class":59},[49,108260,25804],{"class":159},[49,108262,108263],{"class":59}," mujoco-render",[49,108265,101506],{"class":59},[49,108267,101509],{"class":159},[49,108269,101512],{"class":159},[49,108271,108272,108274,108276],{"class":51,"line":63},[49,108273,30861],{"class":55},[49,108275,101519],{"class":59},[49,108277,108278],{"class":59}," mujoco-render\n",[49,108280,108281,108283,108285,108287,108289],{"class":51,"line":70},[49,108282,24524],{"class":55},[49,108284,269],{"class":59},[49,108286,101461],{"class":59},[49,108288,108242],{"class":59},[49,108290,108245],{"class":59},[14,108292,108293],{},"离屏渲染后端:",[40,108295,108297],{"className":42,"code":108296,"language":44,"meta":27,"style":27},"export MUJOCO_GL=egl\n",[46,108298,108299],{"__ignoreMap":27},[49,108300,108301,108303,108306,108308],{"class":51,"line":52},[49,108302,25732],{"class":77},[49,108304,108305],{"class":73}," MUJOCO_GL",[49,108307,78],{"class":77},[49,108309,108310],{"class":73},"egl\n",[14,108312,108313],{},"或:",[40,108315,108317],{"className":42,"code":108316,"language":44,"meta":27,"style":27},"export MUJOCO_GL=osmesa\n",[46,108318,108319],{"__ignoreMap":27},[49,108320,108321,108323,108325,108327],{"class":51,"line":52},[49,108322,25732],{"class":77},[49,108324,108305],{"class":73},[49,108326,78],{"class":77},[49,108328,108329],{"class":73},"osmesa\n",[14,108331,108332,108333,108336,108337,28916],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[46,108334,108335],{},"egl"," 失败，再尝试 ",[46,108338,108339],{},"osmesa",[14,108341,108342,108343,108346],{},"如果你在本机桌面环境运行，通常先不要设置 ",[46,108344,108345],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[782,108348,101576],{"id":101575},[14,108350,108351],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,108353,108354],{},"典型 viewer 流程:",[40,108356,108358],{"className":30909,"code":108357,"language":30911,"meta":27,"style":27},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[46,108359,108360,108373,108380,108384],{"__ignoreMap":27},[49,108361,108362,108365,108368,108370],{"class":51,"line":52},[49,108363,108364],{"class":77},"with",[49,108366,108367],{"class":73}," mujoco.viewer.launch_passive(model, data) ",[49,108369,31914],{"class":77},[49,108371,108372],{"class":73}," viewer:\n",[49,108374,108375,108377],{"class":51,"line":63},[49,108376,2949],{"class":77},[49,108378,108379],{"class":73}," viewer.is_running():\n",[49,108381,108382],{"class":51,"line":70},[49,108383,102047],{"class":73},[49,108385,108386],{"class":51,"line":219},[49,108387,108388],{"class":73},"        viewer.sync()\n",[14,108390,108391],{},"典型 renderer 流程:",[40,108393,108395],{"className":30909,"code":108394,"language":30911,"meta":27,"style":27},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[46,108396,108397,108423,108427,108432],{"__ignoreMap":27},[49,108398,108399,108401,108403,108406,108408,108410,108412,108414,108416,108418,108421],{"class":51,"line":52},[49,108400,108101],{"class":73},[49,108402,78],{"class":77},[49,108404,108405],{"class":73}," mujoco.Renderer(model, ",[49,108407,25671],{"class":5913},[49,108409,78],{"class":77},[49,108411,42873],{"class":159},[49,108413,13132],{"class":73},[49,108415,25667],{"class":5913},[49,108417,78],{"class":77},[49,108419,108420],{"class":159},"640",[49,108422,847],{"class":73},[49,108424,108425],{"class":51,"line":63},[49,108426,105036],{"class":73},[49,108428,108429],{"class":51,"line":70},[49,108430,108431],{"class":73},"renderer.update_scene(data)\n",[49,108433,108434,108436,108438],{"class":51,"line":219},[49,108435,108111],{"class":73},[49,108437,78],{"class":77},[49,108439,108116],{"class":73},[18,108441,108443],{"id":108442},"viewer-的同步逻辑","viewer 的同步逻辑",[14,108445,108446],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[40,108448,108450],{"className":30909,"code":108449,"language":30911,"meta":27,"style":27},"mujoco.mj_step(model, data)\nviewer.sync()\n",[46,108451,108452,108456],{"__ignoreMap":27},[49,108453,108454],{"class":51,"line":52},[49,108455,105036],{"class":73},[49,108457,108458],{"class":51,"line":63},[49,108459,108460],{"class":73},"viewer.sync()\n",[14,108462,108463,108465,108466,108469],{},[46,108464,101746],{}," 负责算物理，",[46,108467,108468],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[18,108471,108473],{"id":108472},"为什么要-sleep","为什么要 sleep",[14,108475,108476],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[40,108478,108480],{"className":30909,"code":108479,"language":30911,"meta":27,"style":27},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[46,108481,108482],{"__ignoreMap":27},[49,108483,108484,108487,108489,108492,108494,108497,108499],{"class":51,"line":52},[49,108485,108486],{"class":73},"sleep_time ",[49,108488,78],{"class":77},[49,108490,108491],{"class":73}," model.opt.timestep ",[49,108493,1361],{"class":77},[49,108495,108496],{"class":73}," (time.time() ",[49,108498,1361],{"class":77},[49,108500,108501],{"class":73}," step_start)\n",[14,108503,108504],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[18,108506,108508],{"id":108507},"renderer-输出是什么","renderer 输出是什么",[40,108510,108512],{"className":30909,"code":108511,"language":30911,"meta":27,"style":27},"image = renderer.render()\n",[46,108513,108514],{"__ignoreMap":27},[49,108515,108516,108518,108520],{"class":51,"line":52},[49,108517,108111],{"class":73},[49,108519,78],{"class":77},[49,108521,108116],{"class":73},[14,108523,108524],{},"得到的是 NumPy 数组，形状通常是：",[40,108526,108529],{"className":108527,"code":108528,"language":5884,"meta":27},[5882],"(height, width, 3)\n",[46,108530,108528],{"__ignoreMap":27},[14,108532,108533],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[40,108535,108537],{"className":30909,"code":108536,"language":30911,"meta":27,"style":27},"Image.fromarray(image).save(\"render_output.png\")\n",[46,108538,108539],{"__ignoreMap":27},[49,108540,108541,108544,108547],{"class":51,"line":52},[49,108542,108543],{"class":73},"Image.fromarray(image).save(",[49,108545,108546],{"class":59},"\"render_output.png\"",[49,108548,847],{"class":73},[782,108550,101784],{"id":101783},[14,108552,108553],{},"交互式 Viewer:",[40,108555,108557],{"className":30909,"code":108556,"language":30911,"meta":27,"style":27},"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",[46,108558,108559,108565,108569,108575,108581,108585,108589,108597,108602,108606,108610,108614,108619,108624,108628,108632,108636,108641,108645,108649,108653,108657,108661,108665,108677,108689,108697,108701,108711,108731,108741,108746,108751,108755,108772,108785,108790,108794,108798,108810],{"__ignoreMap":27},[49,108560,108561,108563],{"class":51,"line":52},[49,108562,30923],{"class":77},[49,108564,32360],{"class":73},[49,108566,108567],{"class":51,"line":63},[49,108568,399],{"emptyLinePlaceholder":398},[49,108570,108571,108573],{"class":51,"line":70},[49,108572,30923],{"class":77},[49,108574,101832],{"class":73},[49,108576,108577,108579],{"class":51,"line":219},[49,108578,30923],{"class":77},[49,108580,108083],{"class":73},[49,108582,108583],{"class":51,"line":233},[49,108584,399],{"emptyLinePlaceholder":398},[49,108586,108587],{"class":51,"line":241},[49,108588,399],{"emptyLinePlaceholder":398},[49,108590,108591,108593,108595],{"class":51,"line":1920},[49,108592,101845],{"class":159},[49,108594,14261],{"class":77},[49,108596,101850],{"class":59},[49,108598,108599],{"class":51,"line":2011},[49,108600,108601],{"class":59},"\u003Cmujoco model=\"viewer_demo\">\n",[49,108603,108604],{"class":51,"line":2017},[49,108605,101860],{"class":59},[49,108607,108608],{"class":51,"line":2029},[49,108609,399],{"emptyLinePlaceholder":398},[49,108611,108612],{"class":51,"line":2311},[49,108613,101869],{"class":59},[49,108615,108616],{"class":51,"line":2316},[49,108617,108618],{"class":59},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[49,108620,108621],{"class":51,"line":2322},[49,108622,108623],{"class":59},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[49,108625,108626],{"class":51,"line":2327},[49,108627,399],{"emptyLinePlaceholder":398},[49,108629,108630],{"class":51,"line":2341},[49,108631,101883],{"class":59},[49,108633,108634],{"class":51,"line":2346},[49,108635,101888],{"class":59},[49,108637,108638],{"class":51,"line":2352},[49,108639,108640],{"class":59},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[49,108642,108643],{"class":51,"line":2373},[49,108644,101898],{"class":59},[49,108646,108647],{"class":51,"line":2378},[49,108648,101903],{"class":59},[49,108650,108651],{"class":51,"line":2392},[49,108652,101908],{"class":59},[49,108654,108655],{"class":51,"line":2397},[49,108656,96229],{"class":59},[49,108658,108659],{"class":51,"line":2426},[49,108660,399],{"emptyLinePlaceholder":398},[49,108662,108663],{"class":51,"line":2431},[49,108664,399],{"emptyLinePlaceholder":398},[49,108666,108667,108669,108671,108673,108675],{"class":51,"line":2448},[49,108668,32478],{"class":77},[49,108670,2671],{"class":55},[49,108672,101929],{"class":73},[49,108674,96217],{"class":159},[49,108676,4436],{"class":73},[49,108678,108679,108681,108683,108685,108687],{"class":51,"line":2453},[49,108680,101938],{"class":73},[49,108682,78],{"class":77},[49,108684,101943],{"class":73},[49,108686,101845],{"class":159},[49,108688,847],{"class":73},[49,108690,108691,108693,108695],{"class":51,"line":2458},[49,108692,101952],{"class":73},[49,108694,78],{"class":77},[49,108696,101957],{"class":73},[49,108698,108699],{"class":51,"line":2463},[49,108700,399],{"emptyLinePlaceholder":398},[49,108702,108703,108705,108707,108709],{"class":51,"line":2477},[49,108704,34709],{"class":77},[49,108706,108367],{"class":73},[49,108708,31914],{"class":77},[49,108710,108372],{"class":73},[49,108712,108713,108716,108719,108721,108724,108726,108729],{"class":51,"line":2482},[49,108714,108715],{"class":77},"        while",[49,108717,108718],{"class":73}," viewer.is_running() ",[49,108720,30993],{"class":77},[49,108722,108723],{"class":73}," data.time ",[49,108725,1739],{"class":77},[49,108727,108728],{"class":159}," 5.0",[49,108730,4436],{"class":73},[49,108732,108733,108736,108738],{"class":51,"line":3274},[49,108734,108735],{"class":73},"            step_start ",[49,108737,78],{"class":77},[49,108739,108740],{"class":73}," time.time()\n",[49,108742,108743],{"class":51,"line":3288},[49,108744,108745],{"class":73},"            mujoco.mj_step(model, data)\n",[49,108747,108748],{"class":51,"line":3296},[49,108749,108750],{"class":73},"            viewer.sync()\n",[49,108752,108753],{"class":51,"line":3301},[49,108754,399],{"emptyLinePlaceholder":398},[49,108756,108757,108760,108762,108764,108766,108768,108770],{"class":51,"line":3307},[49,108758,108759],{"class":73},"            sleep_time ",[49,108761,78],{"class":77},[49,108763,108491],{"class":73},[49,108765,1361],{"class":77},[49,108767,108496],{"class":73},[49,108769,1361],{"class":77},[49,108771,108501],{"class":73},[49,108773,108774,108776,108779,108781,108783],{"class":51,"line":3313},[49,108775,5339],{"class":77},[49,108777,108778],{"class":73}," sleep_time ",[49,108780,1789],{"class":77},[49,108782,4790],{"class":159},[49,108784,4436],{"class":73},[49,108786,108787],{"class":51,"line":3318},[49,108788,108789],{"class":73},"                time.sleep(sleep_time)\n",[49,108791,108792],{"class":51,"line":8645},[49,108793,399],{"emptyLinePlaceholder":398},[49,108795,108796],{"class":51,"line":8669},[49,108797,399],{"emptyLinePlaceholder":398},[49,108799,108800,108802,108804,108806,108808],{"class":51,"line":8674},[49,108801,2230],{"class":77},[49,108803,31751],{"class":159},[49,108805,102090],{"class":77},[49,108807,102093],{"class":59},[49,108809,4436],{"class":73},[49,108811,108812],{"class":51,"line":8680},[49,108813,102100],{"class":73},[14,108815,104101],{},[40,108817,108819],{"className":42,"code":108818,"language":44,"meta":27,"style":27},"touch ch5_viewer.py\n",[46,108820,108821],{"__ignoreMap":27},[49,108822,108823,108825],{"class":51,"line":52},[49,108824,101814],{"class":55},[49,108826,108827],{"class":59}," ch5_viewer.py\n",[14,108829,108830],{},"离屏 Renderer 保存图片:",[40,108832,108834],{"className":30909,"code":108833,"language":30911,"meta":27,"style":27},"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",[46,108835,108836,108848,108852,108858,108868,108872,108876,108884,108889,108893,108897,108901,108905,108910,108914,108918,108922,108926,108930,108934,108938,108942,108946,108950,108954,108966,108978,108986,109011,109015,109031,109035,109039,109054,109063,109067,109081,109086,109091,109095,109107,109119,109123,109127,109139],{"__ignoreMap":27},[49,108837,108838,108840,108843,108845],{"class":51,"line":52},[49,108839,31268],{"class":77},[49,108841,108842],{"class":73}," pathlib ",[49,108844,30923],{"class":77},[49,108846,108847],{"class":73}," Path\n",[49,108849,108850],{"class":51,"line":63},[49,108851,399],{"emptyLinePlaceholder":398},[49,108853,108854,108856],{"class":51,"line":70},[49,108855,30923],{"class":77},[49,108857,101832],{"class":73},[49,108859,108860,108862,108864,108866],{"class":51,"line":219},[49,108861,31268],{"class":77},[49,108863,47794],{"class":159},[49,108865,47797],{"class":77},[49,108867,47800],{"class":73},[49,108869,108870],{"class":51,"line":233},[49,108871,399],{"emptyLinePlaceholder":398},[49,108873,108874],{"class":51,"line":241},[49,108875,399],{"emptyLinePlaceholder":398},[49,108877,108878,108880,108882],{"class":51,"line":1920},[49,108879,101845],{"class":159},[49,108881,14261],{"class":77},[49,108883,101850],{"class":59},[49,108885,108886],{"class":51,"line":2011},[49,108887,108888],{"class":59},"\u003Cmujoco model=\"renderer_demo\">\n",[49,108890,108891],{"class":51,"line":2017},[49,108892,101860],{"class":59},[49,108894,108895],{"class":51,"line":2029},[49,108896,399],{"emptyLinePlaceholder":398},[49,108898,108899],{"class":51,"line":2311},[49,108900,101869],{"class":59},[49,108902,108903],{"class":51,"line":2316},[49,108904,108618],{"class":59},[49,108906,108907],{"class":51,"line":2322},[49,108908,108909],{"class":59},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[49,108911,108912],{"class":51,"line":2327},[49,108913,108623],{"class":59},[49,108915,108916],{"class":51,"line":2341},[49,108917,399],{"emptyLinePlaceholder":398},[49,108919,108920],{"class":51,"line":2346},[49,108921,101883],{"class":59},[49,108923,108924],{"class":51,"line":2352},[49,108925,101888],{"class":59},[49,108927,108928],{"class":51,"line":2373},[49,108929,108640],{"class":59},[49,108931,108932],{"class":51,"line":2378},[49,108933,101898],{"class":59},[49,108935,108936],{"class":51,"line":2392},[49,108937,101903],{"class":59},[49,108939,108940],{"class":51,"line":2397},[49,108941,101908],{"class":59},[49,108943,108944],{"class":51,"line":2426},[49,108945,96229],{"class":59},[49,108947,108948],{"class":51,"line":2431},[49,108949,399],{"emptyLinePlaceholder":398},[49,108951,108952],{"class":51,"line":2448},[49,108953,399],{"emptyLinePlaceholder":398},[49,108955,108956,108958,108960,108962,108964],{"class":51,"line":2453},[49,108957,32478],{"class":77},[49,108959,2671],{"class":55},[49,108961,101929],{"class":73},[49,108963,96217],{"class":159},[49,108965,4436],{"class":73},[49,108967,108968,108970,108972,108974,108976],{"class":51,"line":2458},[49,108969,101938],{"class":73},[49,108971,78],{"class":77},[49,108973,101943],{"class":73},[49,108975,101845],{"class":159},[49,108977,847],{"class":73},[49,108979,108980,108982,108984],{"class":51,"line":2463},[49,108981,101952],{"class":73},[49,108983,78],{"class":77},[49,108985,101957],{"class":73},[49,108987,108988,108991,108993,108995,108997,108999,109001,109003,109005,109007,109009],{"class":51,"line":2477},[49,108989,108990],{"class":73},"    renderer ",[49,108992,78],{"class":77},[49,108994,108405],{"class":73},[49,108996,25671],{"class":5913},[49,108998,78],{"class":77},[49,109000,42873],{"class":159},[49,109002,13132],{"class":73},[49,109004,25667],{"class":5913},[49,109006,78],{"class":77},[49,109008,108420],{"class":159},[49,109010,847],{"class":73},[49,109012,109013],{"class":51,"line":2482},[49,109014,399],{"emptyLinePlaceholder":398},[49,109016,109017,109019,109021,109023,109025,109027,109029],{"class":51,"line":3274},[49,109018,3898],{"class":77},[49,109020,102032],{"class":73},[49,109022,26732],{"class":77},[49,109024,32974],{"class":159},[49,109026,841],{"class":73},[49,109028,1140],{"class":159},[49,109030,31317],{"class":73},[49,109032,109033],{"class":51,"line":3288},[49,109034,102047],{"class":73},[49,109036,109037],{"class":51,"line":3296},[49,109038,399],{"emptyLinePlaceholder":398},[49,109040,109041,109044,109047,109049,109052],{"class":51,"line":3301},[49,109042,109043],{"class":73},"    renderer.update_scene(data, ",[49,109045,109046],{"class":5913},"camera",[49,109048,78],{"class":77},[49,109050,109051],{"class":59},"\"fixed_camera\"",[49,109053,847],{"class":73},[49,109055,109056,109059,109061],{"class":51,"line":3307},[49,109057,109058],{"class":73},"    image ",[49,109060,78],{"class":77},[49,109062,108116],{"class":73},[49,109064,109065],{"class":51,"line":3313},[49,109066,399],{"emptyLinePlaceholder":398},[49,109068,109069,109072,109074,109077,109079],{"class":51,"line":3318},[49,109070,109071],{"class":73},"    output_path ",[49,109073,78],{"class":77},[49,109075,109076],{"class":73}," Path(",[49,109078,108546],{"class":59},[49,109080,847],{"class":73},[49,109082,109083],{"class":51,"line":8645},[49,109084,109085],{"class":73},"    Image.fromarray(image).save(output_path)\n",[49,109087,109088],{"class":51,"line":8669},[49,109089,109090],{"class":73},"    renderer.close()\n",[49,109092,109093],{"class":51,"line":8674},[49,109094,399],{"emptyLinePlaceholder":398},[49,109096,109097,109099,109101,109104],{"class":51,"line":8680},[49,109098,31830],{"class":159},[49,109100,841],{"class":73},[49,109102,109103],{"class":59},"\"saved:\"",[49,109105,109106],{"class":73},", output_path.resolve())\n",[49,109108,109109,109111,109113,109116],{"class":51,"line":8707},[49,109110,31830],{"class":159},[49,109112,841],{"class":73},[49,109114,109115],{"class":59},"\"image shape:\"",[49,109117,109118],{"class":73},", image.shape)\n",[49,109120,109121],{"class":51,"line":8712},[49,109122,399],{"emptyLinePlaceholder":398},[49,109124,109125],{"class":51,"line":8718},[49,109126,399],{"emptyLinePlaceholder":398},[49,109128,109129,109131,109133,109135,109137],{"class":51,"line":8730},[49,109130,2230],{"class":77},[49,109132,31751],{"class":159},[49,109134,102090],{"class":77},[49,109136,102093],{"class":59},[49,109138,4436],{"class":73},[49,109140,109141],{"class":51,"line":8742},[49,109142,102100],{"class":73},[14,109144,104101],{},[40,109146,109148],{"className":42,"code":109147,"language":44,"meta":27,"style":27},"touch ch5_renderer.py\n",[46,109149,109150],{"__ignoreMap":27},[49,109151,109152,109154],{"class":51,"line":52},[49,109153,101814],{"class":55},[49,109155,109156],{"class":59}," ch5_renderer.py\n",[18,109158,102103],{"id":102103},[14,109160,109161],{},"viewer 上下文：",[40,109163,109165],{"className":30909,"code":109164,"language":30911,"meta":27,"style":27},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[46,109166,109167],{"__ignoreMap":27},[49,109168,109169,109171,109173,109175],{"class":51,"line":52},[49,109170,108364],{"class":77},[49,109172,108367],{"class":73},[49,109174,31914],{"class":77},[49,109176,108372],{"class":73},[14,109178,109179,109181],{},[46,109180,108364],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,109183,109184],{},"窗口循环：",[40,109186,109188],{"className":30909,"code":109187,"language":30911,"meta":27,"style":27},"while viewer.is_running() and data.time \u003C 5.0:\n",[46,109189,109190],{"__ignoreMap":27},[49,109191,109192,109195,109197,109199,109201,109203,109205],{"class":51,"line":52},[49,109193,109194],{"class":77},"while",[49,109196,108718],{"class":73},[49,109198,30993],{"class":77},[49,109200,108723],{"class":73},[49,109202,1739],{"class":77},[49,109204,108728],{"class":159},[49,109206,4436],{"class":73},[14,109208,109209],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,109211,109212],{},"固定相机：",[40,109214,109216],{"className":53598,"code":109215,"language":53600,"meta":27,"style":27},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[46,109217,109218],{"__ignoreMap":27},[49,109219,109220,109222,109224,109226,109228,109230,109232,109234,109237,109240,109242,109245],{"class":51,"line":52},[49,109221,1739],{"class":73},[49,109223,109046],{"class":51831},[49,109225,15617],{"class":55},[49,109227,78],{"class":73},[49,109229,109051],{"class":59},[49,109231,101637],{"class":55},[49,109233,78],{"class":73},[49,109235,109236],{"class":59},"\"1.5 -2.0 1.2\"",[49,109238,109239],{"class":55}," xyaxes",[49,109241,78],{"class":73},[49,109243,109244],{"class":59},"\"1 0.75 0 0 0 1\"",[49,109246,101675],{"class":73},[14,109248,109249],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[18,109251,109253],{"id":109252},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[40,109255,109257],{"className":30909,"code":109256,"language":30911,"meta":27,"style":27},"import time\n",[46,109258,109259],{"__ignoreMap":27},[49,109260,109261,109263],{"class":51,"line":52},[49,109262,30923],{"class":77},[49,109264,32360],{"class":73},[14,109266,109267],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[40,109269,109271],{"className":30909,"code":109270,"language":30911,"meta":27,"style":27},"import mujoco\nimport mujoco.viewer\n",[46,109272,109273,109279],{"__ignoreMap":27},[49,109274,109275,109277],{"class":51,"line":52},[49,109276,30923],{"class":77},[49,109278,101832],{"class":73},[49,109280,109281,109283],{"class":51,"line":63},[49,109282,30923],{"class":77},[49,109284,108083],{"class":73},[14,109286,109287],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[40,109289,109290],{"className":30909,"code":109164,"language":30911,"meta":27,"style":27},[46,109291,109292],{"__ignoreMap":27},[49,109293,109294,109296,109298,109300],{"class":51,"line":52},[49,109295,108364],{"class":77},[49,109297,108367],{"class":73},[49,109299,31914],{"class":77},[49,109301,108372],{"class":73},[14,109303,109304,109305,109308],{},"打开一个 viewer 窗口。",[46,109306,109307],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[40,109310,109311],{"className":30909,"code":109187,"language":30911,"meta":27,"style":27},[46,109312,109313],{"__ignoreMap":27},[49,109314,109315,109317,109319,109321,109323,109325,109327],{"class":51,"line":52},[49,109316,109194],{"class":77},[49,109318,108718],{"class":73},[49,109320,30993],{"class":77},[49,109322,108723],{"class":73},[49,109324,1739],{"class":77},[49,109326,108728],{"class":159},[49,109328,4436],{"class":73},[14,109330,109331,109332,109335],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[46,109333,109334],{},"viewer.is_running()"," 会变成 false，循环结束。",[40,109337,109339],{"className":30909,"code":109338,"language":30911,"meta":27,"style":27},"step_start = time.time()\n",[46,109340,109341],{"__ignoreMap":27},[49,109342,109343,109346,109348],{"class":51,"line":52},[49,109344,109345],{"class":73},"step_start ",[49,109347,78],{"class":77},[49,109349,108740],{"class":73},[14,109351,109352],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[40,109354,109355],{"className":30909,"code":108449,"language":30911,"meta":27,"style":27},[46,109356,109357,109361],{"__ignoreMap":27},[49,109358,109359],{"class":51,"line":52},[49,109360,105036],{"class":73},[49,109362,109363],{"class":51,"line":63},[49,109364,108460],{"class":73},[14,109366,109367,109369,109370,109372,109373,109375,109376,109379],{},[46,109368,101746],{}," 推进物理仿真。",[46,109371,108468],{}," 把最新的 ",[46,109374,33932],{}," 同步到窗口里显示。没有 ",[46,109377,109378],{},"sync()","，窗口可能看不到最新状态。",[40,109381,109382],{"className":30909,"code":108479,"language":30911,"meta":27,"style":27},[46,109383,109384],{"__ignoreMap":27},[49,109385,109386,109388,109390,109392,109394,109396,109398],{"class":51,"line":52},[49,109387,108486],{"class":73},[49,109389,78],{"class":77},[49,109391,108491],{"class":73},[49,109393,1361],{"class":77},[49,109395,108496],{"class":73},[49,109397,1361],{"class":77},[49,109399,108501],{"class":73},[14,109401,109402],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[40,109404,109406],{"className":30909,"code":109405,"language":30911,"meta":27,"style":27},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[46,109407,109408,109420],{"__ignoreMap":27},[49,109409,109410,109412,109414,109416,109418],{"class":51,"line":52},[49,109411,2230],{"class":77},[49,109413,108778],{"class":73},[49,109415,1789],{"class":77},[49,109417,4790],{"class":159},[49,109419,4436],{"class":73},[49,109421,109422],{"class":51,"line":63},[49,109423,109424],{"class":73},"    time.sleep(sleep_time)\n",[14,109426,109427],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[18,109429,109431],{"id":109430},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[40,109433,109435],{"className":30909,"code":109434,"language":30911,"meta":27,"style":27},"from pathlib import Path\n",[46,109436,109437],{"__ignoreMap":27},[49,109438,109439,109441,109443,109445],{"class":51,"line":52},[49,109440,31268],{"class":77},[49,109442,108842],{"class":73},[49,109444,30923],{"class":77},[49,109446,108847],{"class":73},[14,109448,109449,109450,109453,109454,109457],{},"导入 ",[46,109451,109452],{},"Path","，用来处理文件路径。相比直接写字符串，",[46,109455,109456],{},"Path(\"render_output.png\")"," 更清晰。",[40,109459,109461],{"className":30909,"code":109460,"language":30911,"meta":27,"style":27},"from PIL import Image\n",[46,109462,109463],{"__ignoreMap":27},[49,109464,109465,109467,109469,109471],{"class":51,"line":52},[49,109466,31268],{"class":77},[49,109468,47794],{"class":159},[49,109470,47797],{"class":77},[49,109472,47800],{"class":73},[14,109474,109475],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[40,109477,109478],{"className":53598,"code":109215,"language":53600,"meta":27,"style":27},[46,109479,109480],{"__ignoreMap":27},[49,109481,109482,109484,109486,109488,109490,109492,109494,109496,109498,109500,109502,109504],{"class":51,"line":52},[49,109483,1739],{"class":73},[49,109485,109046],{"class":51831},[49,109487,15617],{"class":55},[49,109489,78],{"class":73},[49,109491,109051],{"class":59},[49,109493,101637],{"class":55},[49,109495,78],{"class":73},[49,109497,109236],{"class":59},[49,109499,109239],{"class":55},[49,109501,78],{"class":73},[49,109503,109244],{"class":59},[49,109505,101675],{"class":73},[14,109507,109508,109509,109511,109512,109514,109515,109518,109519,109521],{},"定义一个相机。",[46,109510,80341],{}," 是相机名字。",[46,109513,104677],{}," 是相机在世界里的位置。",[46,109516,109517],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[46,109520,104677],{}," 来调视角。",[40,109523,109525],{"className":30909,"code":109524,"language":30911,"meta":27,"style":27},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[46,109526,109527],{"__ignoreMap":27},[49,109528,109529,109531,109533,109535,109537,109539,109541,109543,109545,109547,109549],{"class":51,"line":52},[49,109530,108101],{"class":73},[49,109532,78],{"class":77},[49,109534,108405],{"class":73},[49,109536,25671],{"class":5913},[49,109538,78],{"class":77},[49,109540,42873],{"class":159},[49,109542,13132],{"class":73},[49,109544,25667],{"class":5913},[49,109546,78],{"class":77},[49,109548,108420],{"class":159},[49,109550,847],{"class":73},[14,109552,109553,109554,101549,109556,109558],{},"创建离屏渲染器。",[46,109555,25671],{},[46,109557,25667],{}," 决定输出图片大小。",[40,109560,109561],{"className":30909,"code":102207,"language":30911,"meta":27,"style":27},[46,109562,109563,109579],{"__ignoreMap":27},[49,109564,109565,109567,109569,109571,109573,109575,109577],{"class":51,"line":52},[49,109566,3722],{"class":77},[49,109568,102032],{"class":73},[49,109570,26732],{"class":77},[49,109572,32974],{"class":159},[49,109574,841],{"class":73},[49,109576,1140],{"class":159},[49,109578,31317],{"class":73},[49,109580,109581],{"class":51,"line":63},[49,109582,102230],{"class":73},[14,109584,109585],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[40,109587,109589],{"className":30909,"code":109588,"language":30911,"meta":27,"style":27},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[46,109590,109591],{"__ignoreMap":27},[49,109592,109593,109596,109598,109600,109602],{"class":51,"line":52},[49,109594,109595],{"class":73},"renderer.update_scene(data, ",[49,109597,109046],{"class":5913},[49,109599,78],{"class":77},[49,109601,109051],{"class":59},[49,109603,847],{"class":73},[14,109605,109606,109607,109609,109610,109613],{},"告诉 renderer：用当前 ",[46,109608,33932],{}," 的状态更新画面，并使用名为 ",[46,109611,109612],{},"fixed_camera"," 的相机视角。",[40,109615,109616],{"className":30909,"code":108511,"language":30911,"meta":27,"style":27},[46,109617,109618],{"__ignoreMap":27},[49,109619,109620,109622,109624],{"class":51,"line":52},[49,109621,108111],{"class":73},[49,109623,78],{"class":77},[49,109625,108116],{"class":73},[14,109627,109628,109629,109632],{},"真正渲染出图像。",[46,109630,109631],{},"image"," 是一个 NumPy 数组，不是文件。",[40,109634,109636],{"className":30909,"code":109635,"language":30911,"meta":27,"style":27},"Image.fromarray(image).save(output_path)\n",[46,109637,109638],{"__ignoreMap":27},[49,109639,109640],{"class":51,"line":52},[49,109641,109635],{"class":73},[14,109643,109644,109645,28916],{},"把数组转换成图片，并保存到 ",[46,109646,109647],{},"render_output.png",[40,109649,109651],{"className":30909,"code":109650,"language":30911,"meta":27,"style":27},"renderer.close()\n",[46,109652,109653],{"__ignoreMap":27},[49,109654,109655],{"class":51,"line":52},[49,109656,109650],{"class":73},[14,109658,109659],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[782,109661,102847],{"id":102846},[14,109663,109664,109665,109667,109668,28916],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[46,109666,109647],{},"，并输出图像数组形状，例如 ",[46,109669,109670],{},"(480, 640, 3)",[14,109672,109673],{},"如果图片里看不到方块，先检查：",[30,109675,109676,109679,109682],{},[33,109677,109678],{},"方块是否掉到相机视野外。",[33,109680,109681],{},"camera 位置是否合理。",[33,109683,109684,109685,109688],{},"是否在 ",[46,109686,109687],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[782,109690,102879],{"id":102878},[14,109692,109693],{},"运行 viewer:",[40,109695,109697],{"className":42,"code":109696,"language":44,"meta":27,"style":27},"python ch5_viewer.py\n",[46,109698,109699],{"__ignoreMap":27},[49,109700,109701,109703],{"class":51,"line":52},[49,109702,30911],{"class":55},[49,109704,108827],{"class":59},[14,109706,109707],{},"运行 renderer:",[40,109709,109711],{"className":42,"code":109710,"language":44,"meta":27,"style":27},"python ch5_renderer.py\n",[46,109712,109713],{"__ignoreMap":27},[49,109714,109715,109717],{"class":51,"line":52},[49,109716,30911],{"class":55},[49,109718,109156],{"class":59},[14,109720,109721],{},"如果在服务器上运行:",[40,109723,109725],{"className":42,"code":109724,"language":44,"meta":27,"style":27},"MUJOCO_GL=egl python ch5_renderer.py\n",[46,109726,109727],{"__ignoreMap":27},[49,109728,109729,109731,109733,109735,109738],{"class":51,"line":52},[49,109730,108345],{"class":73},[49,109732,78],{"class":77},[49,109734,108335],{"class":59},[49,109736,109737],{"class":55}," python",[49,109739,109156],{"class":59},[14,109741,108313],{},[40,109743,109745],{"className":42,"code":109744,"language":44,"meta":27,"style":27},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[46,109746,109747],{"__ignoreMap":27},[49,109748,109749,109751,109753,109755,109757],{"class":51,"line":52},[49,109750,108345],{"class":73},[49,109752,78],{"class":77},[49,109754,108339],{"class":59},[49,109756,109737],{"class":55},[49,109758,109156],{"class":59},[14,109760,109761],{},"再做几个练习：",[30,109763,109764,109771,109774,109780],{},[33,109765,109766,109767,109770],{},"把 renderer 分辨率改成 ",[46,109768,109769],{},"height=240, width=320","，观察输出 shape。",[33,109772,109773],{},"把方块颜色改成蓝色，重新保存图片。",[33,109775,109776,109777,109779],{},"把相机 ",[46,109778,104677],{}," 改远一点，观察画面中物体是否变小。",[33,109781,109782,109783,102945,109786,109789],{},"把 viewer 示例中的 ",[46,109784,109785],{},"data.time \u003C 5.0",[46,109787,109788],{},"data.time \u003C 20.0","，观察更长时间。",[782,109791,102984],{"id":102983},[18,109793,109795],{"id":109794},"viewer-窗口打不开","viewer 窗口打不开",[14,109797,109798],{},"安装:",[40,109800,109802],{"className":42,"code":109801,"language":44,"meta":27,"style":27},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[46,109803,109804],{"__ignoreMap":27},[49,109805,109806,109808,109810,109812,109814,109816,109818,109820,109822,109824,109826],{"class":51,"line":52},[49,109807,264],{"class":55},[49,109809,384],{"class":59},[49,109811,269],{"class":59},[49,109813,272],{"class":159},[49,109815,103037],{"class":59},[49,109817,101365],{"class":59},[49,109819,103042],{"class":59},[49,109821,101378],{"class":59},[49,109823,101384],{"class":59},[49,109825,101375],{"class":59},[49,109827,109828],{"class":59}," libXinerama\n",[18,109830,109832],{"id":109831},"glfwerror",[46,109833,109834],{},"GLFWError",[14,109836,109837],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[18,109839,109841],{"id":109840},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109843,109844,109845,83070,109847,109849],{},"尝试 ",[46,109846,101568],{},[46,109848,101571],{},"。可能存在版本差异。",[18,109851,109852],{"id":109852},"保存图片是黑的",[14,109854,103106],{},[30,109856,109857,109860,109863,109873],{},[33,109858,109859],{},"XML 里是否有 light。",[33,109861,109862],{},"相机是否对着模型。",[33,109864,109865,109866,109869,109870,28916],{},"是否先 ",[46,109867,109868],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[46,109871,109872],{},"renderer.render()",[33,109874,109875],{},"物体是否已经掉出视野。",[18,109877,109878],{"id":109878},"远程服务器没有显示器",[14,109880,109881],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[40,109883,109884],{"className":42,"code":109724,"language":44,"meta":27,"style":27},[46,109885,109886],{"__ignoreMap":27},[49,109887,109888,109890,109892,109894,109896],{"class":51,"line":52},[49,109889,108345],{"class":73},[49,109891,78],{"class":77},[49,109893,108335],{"class":59},[49,109895,109737],{"class":55},[49,109897,109156],{"class":59},[14,109899,109900],{},"如果 EGL 不可用，再尝试：",[40,109902,109903],{"className":42,"code":109744,"language":44,"meta":27,"style":27},[46,109904,109905],{"__ignoreMap":27},[49,109906,109907,109909,109911,109913,109915],{"class":51,"line":52},[49,109908,108345],{"class":73},[49,109910,78],{"class":77},[49,109912,108339],{"class":59},[49,109914,109737],{"class":55},[49,109916,109156],{"class":59},[782,109918,103138],{"id":103137},[14,109920,109921],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[30,109923,109924,109927,109930],{},[33,109925,109926],{},"先用 viewer 看模型和控制是否正常。",[33,109928,109929],{},"再用 renderer 保存图片或构造视觉观测。",[33,109931,109932],{},"最后把状态、动作、图像、奖励组织成训练数据。",[757,109934,109935],{},"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":27,"searchDepth":63,"depth":63,"links":109937},[109938,109939,109940,109945,109950,109951,109952,109959],{"id":101177,"depth":63,"text":101178},{"id":101300,"depth":63,"text":101301},{"id":101575,"depth":63,"text":101576,"children":109941},[109942,109943,109944],{"id":108442,"depth":70,"text":108443},{"id":108472,"depth":70,"text":108473},{"id":108507,"depth":70,"text":108508},{"id":101783,"depth":63,"text":101784,"children":109946},[109947,109948,109949],{"id":102103,"depth":70,"text":102103},{"id":109252,"depth":70,"text":109253},{"id":109430,"depth":70,"text":109431},{"id":102846,"depth":63,"text":102847},{"id":102878,"depth":63,"text":102879},{"id":102983,"depth":63,"text":102984,"children":109953},[109954,109955,109956,109957,109958],{"id":109794,"depth":70,"text":109795},{"id":109831,"depth":70,"text":109834},{"id":109840,"depth":70,"text":109841},{"id":109852,"depth":70,"text":109852},{"id":109878,"depth":70,"text":109878},{"id":103137,"depth":63,"text":103138},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108050,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109966,"title":109967,"body":109968,"description":27,"extension":766,"meta":111879,"navigation":398,"path":111880,"seo":111881,"stem":111882,"__hash__":111883},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109969,"toc":111855},[109970,109973,109975,109978,109980,109999,110002,110008,110011,110013,110015,110039,110041,110055,110057,110098,110100,110111,110113,110116,110122,110125,110159,110162,110194,110197,110229,110233,110236,110276,110279,110285,110288,110294,110298,110301,110307,110310,110314,110317,110357,110359,110372,110375,110377,110959,110961,110973,110976,110987,110989,110992,111011,111023,111026,111047,111050,111053,111096,111099,111102,111122,111129,111131,111149,111164,111167,111173,111176,111182,111199,111206,111237,111248,111282,111293,111310,111319,111327,111332,111346,111349,111370,111376,111390,111395,111425,111435,111460,111468,111491,111494,111510,111513,111521,111527,111549,111562,111583,111592,111631,111642,111644,111647,111653,111656,111659,111665,111668,111688,111691,111693,111732,111734,111737,111745,111748,111751,111778,111781,111791,111797,111800,111806,111808,111814,111818,111821,111823,111826,111850,111853],[10,109971,109967],{"id":109972},"_6控制任务cartpole",[782,109974,101178],{"id":101177},[14,109976,109977],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109979,104862],{},[30,109981,109982,109985,109987,109990,109993,109996],{},[33,109983,109984],{},"slide joint",[33,109986,106715],{},[33,109988,109989],{},"cart force actuator",[33,109991,109992],{},"状态观测",[33,109994,109995],{},"简单控制循环",[33,109997,109998],{},"reward 设计雏形",[14,110000,110001],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[40,110003,110006],{"className":110004,"code":110005,"language":5884,"meta":27},[5882],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[46,110007,110005],{"__ignoreMap":27},[14,110009,110010],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[782,110012,101301],{"id":101300},[14,110014,101304],{},[40,110016,110017],{"className":42,"code":104919,"language":44,"meta":27,"style":27},[46,110018,110019],{"__ignoreMap":27},[49,110020,110021,110023,110025,110027,110029,110031,110033,110035,110037],{"class":51,"line":52},[49,110022,264],{"class":55},[49,110024,384],{"class":59},[49,110026,269],{"class":59},[49,110028,272],{"class":159},[49,110030,104934],{"class":59},[49,110032,101329],{"class":59},[49,110034,103032],{"class":59},[49,110036,101345],{"class":59},[49,110038,104943],{"class":59},[14,110040,103350],{},[40,110042,110043],{"className":42,"code":101450,"language":44,"meta":27,"style":27},[46,110044,110045],{"__ignoreMap":27},[49,110046,110047,110049,110051,110053],{"class":51,"line":52},[49,110048,24524],{"class":55},[49,110050,269],{"class":59},[49,110052,101461],{"class":59},[49,110054,101464],{"class":59},[14,110056,103367],{},[40,110058,110060],{"className":42,"code":110059,"language":44,"meta":27,"style":27},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[46,110061,110062,110079,110088],{"__ignoreMap":27},[49,110063,110064,110066,110068,110070,110073,110075,110077],{"class":51,"line":52},[49,110065,30861],{"class":55},[49,110067,29707],{"class":59},[49,110069,25804],{"class":159},[49,110071,110072],{"class":59}," mujoco-cartpole",[49,110074,101506],{"class":59},[49,110076,101509],{"class":159},[49,110078,101512],{"class":159},[49,110080,110081,110083,110085],{"class":51,"line":63},[49,110082,30861],{"class":55},[49,110084,101519],{"class":59},[49,110086,110087],{"class":59}," mujoco-cartpole\n",[49,110089,110090,110092,110094,110096],{"class":51,"line":70},[49,110091,24524],{"class":55},[49,110093,269],{"class":59},[49,110095,101461],{"class":59},[49,110097,101464],{"class":59},[14,110099,101535],{},[30,110101,110102,110105,110108],{},[33,110103,110104],{},"本章不依赖 Gymnasium。",[33,110106,110107],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[33,110109,110110],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[782,110112,101576],{"id":101575},[14,110114,110115],{},"Cartpole 的模型结构:",[40,110117,110120],{"className":110118,"code":110119,"language":5884,"meta":27},[5882],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[46,110121,110119],{"__ignoreMap":27},[14,110123,110124],{},"小车通过 slide joint 左右移动:",[40,110126,110128],{"className":53598,"code":110127,"language":53600,"meta":27,"style":27},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[46,110129,110130],{"__ignoreMap":27},[49,110131,110132,110134,110136,110138,110140,110143,110145,110147,110150,110152,110154,110157],{"class":51,"line":52},[49,110133,1739],{"class":73},[49,110135,103487],{"class":51831},[49,110137,15617],{"class":55},[49,110139,78],{"class":73},[49,110141,110142],{"class":59},"\"cart_x\"",[49,110144,54355],{"class":55},[49,110146,78],{"class":73},[49,110148,110149],{"class":59},"\"slide\"",[49,110151,106559],{"class":55},[49,110153,78],{"class":73},[49,110155,110156],{"class":59},"\"1 0 0\"",[49,110158,101675],{"class":73},[14,110160,110161],{},"杆子通过 hinge joint 旋转:",[40,110163,110165],{"className":53598,"code":110164,"language":53600,"meta":27,"style":27},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[46,110166,110167],{"__ignoreMap":27},[49,110168,110169,110171,110173,110175,110177,110180,110182,110184,110186,110188,110190,110192],{"class":51,"line":52},[49,110170,1739],{"class":73},[49,110172,103487],{"class":51831},[49,110174,15617],{"class":55},[49,110176,78],{"class":73},[49,110178,110179],{"class":59},"\"pole_hinge\"",[49,110181,54355],{"class":55},[49,110183,78],{"class":73},[49,110185,106550],{"class":59},[49,110187,106559],{"class":55},[49,110189,78],{"class":73},[49,110191,106564],{"class":59},[49,110193,101675],{"class":73},[14,110195,110196],{},"控制力作用在小车 slide joint 上:",[40,110198,110200],{"className":53598,"code":110199,"language":53600,"meta":27,"style":27},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[46,110201,110202],{"__ignoreMap":27},[49,110203,110204,110206,110208,110210,110212,110215,110217,110219,110221,110223,110225,110227],{"class":51,"line":52},[49,110205,1739],{"class":73},[49,110207,106605],{"class":51831},[49,110209,15617],{"class":55},[49,110211,78],{"class":73},[49,110213,110214],{"class":59},"\"cart_motor\"",[49,110216,106615],{"class":55},[49,110218,78],{"class":73},[49,110220,110142],{"class":59},[49,110222,106622],{"class":55},[49,110224,78],{"class":73},[49,110226,54847],{"class":59},[49,110228,101675],{"class":73},[18,110230,110232],{"id":110231},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,110234,110235],{},"这个简化模型有两个关节：",[610,110237,110238,110249],{},[613,110239,110240],{},[616,110241,110242,110244,110246],{},[619,110243,103290],{"align":621},[619,110245,24432],{"align":621},[619,110247,110248],{"align":621},"对应状态",[633,110250,110251,110264],{},[616,110252,110253,110258,110261],{},[638,110254,110255],{"align":621},[46,110256,110257],{},"cart_x",[638,110259,110260],{"align":621},"slide",[638,110262,110263],{"align":621},"小车 x 位置",[616,110265,110266,110271,110273],{},[638,110267,110268],{"align":621},[46,110269,110270],{},"pole_hinge",[638,110272,106371],{"align":621},[638,110274,110275],{"align":621},"杆子角度",[14,110277,110278],{},"所以：",[40,110280,110283],{"className":110281,"code":110282,"language":5884,"meta":27},[5882],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[46,110284,110282],{"__ignoreMap":27},[14,110286,110287],{},"把它们拼起来就是观测：",[40,110289,110292],{"className":110290,"code":110291,"language":5884,"meta":27},[5882],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[46,110293,110291],{"__ignoreMap":27},[18,110295,110297],{"id":110296},"action-是什么","action 是什么",[14,110299,110300],{},"本章只有一个 actuator：",[40,110302,110305],{"className":110303,"code":110304,"language":5884,"meta":27},[5882],"data.ctrl[0] = action\n",[46,110306,110304],{"__ignoreMap":27},[14,110308,110309],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[18,110311,110313],{"id":110312},"reward-是什么","reward 是什么",[14,110315,110316],{},"奖励函数：",[40,110318,110320],{"className":30909,"code":110319,"language":30911,"meta":27,"style":27},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[46,110321,110322],{"__ignoreMap":27},[49,110323,110324,110326,110329,110331,110333,110335,110338,110340,110343,110345,110347,110349,110352,110354],{"class":51,"line":52},[49,110325,17743],{"class":77},[49,110327,110328],{"class":159}," float",[49,110330,841],{"class":73},[49,110332,102934],{"class":159},[49,110334,52802],{"class":77},[49,110336,110337],{"class":159}," 0.1",[49,110339,7215],{"class":77},[49,110341,110342],{"class":73}," cart_x ",[49,110344,1284],{"class":77},[49,110346,110342],{"class":73},[49,110348,1361],{"class":77},[49,110350,110351],{"class":73}," pole_angle ",[49,110353,1284],{"class":77},[49,110355,110356],{"class":73}," pole_angle)\n",[14,110358,106757],{},[30,110360,110361,110366,110369],{},[33,110362,110363,110364,28916],{},"基础奖励是 ",[46,110365,102934],{},[33,110367,110368],{},"小车离中心越远，扣分越多。",[33,110370,110371],{},"杆子角度越大，扣分越多。",[14,110373,110374],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[782,110376,101784],{"id":101783},[40,110378,110380],{"className":30909,"code":110379,"language":30911,"meta":27,"style":27},"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",[46,110381,110382,110388,110398,110402,110406,110414,110419,110423,110427,110431,110436,110440,110445,110450,110455,110459,110464,110469,110474,110478,110482,110486,110490,110494,110499,110503,110507,110511,110515,110519,110529,110536,110540,110544,110558,110572,110585,110615,110619,110623,110635,110647,110655,110659,110672,110676,110680,110689,110693,110709,110719,110732,110745,110749,110772,110790,110794,110806,110810,110814,110824,110834,110838,110854,110895,110899,110919,110935,110939,110943,110955],{"__ignoreMap":27},[49,110383,110384,110386],{"class":51,"line":52},[49,110385,30923],{"class":77},[49,110387,101832],{"class":73},[49,110389,110390,110392,110394,110396],{"class":51,"line":63},[49,110391,30923],{"class":77},[49,110393,31911],{"class":73},[49,110395,31914],{"class":77},[49,110397,31917],{"class":73},[49,110399,110400],{"class":51,"line":70},[49,110401,399],{"emptyLinePlaceholder":398},[49,110403,110404],{"class":51,"line":219},[49,110405,399],{"emptyLinePlaceholder":398},[49,110407,110408,110410,110412],{"class":51,"line":233},[49,110409,101845],{"class":159},[49,110411,14261],{"class":77},[49,110413,101850],{"class":59},[49,110415,110416],{"class":51,"line":241},[49,110417,110418],{"class":59},"\u003Cmujoco model=\"cartpole\">\n",[49,110420,110421],{"class":51,"line":1920},[49,110422,101860],{"class":59},[49,110424,110425],{"class":51,"line":2011},[49,110426,399],{"emptyLinePlaceholder":398},[49,110428,110429],{"class":51,"line":2017},[49,110430,101869],{"class":59},[49,110432,110433],{"class":51,"line":2029},[49,110434,110435],{"class":59},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[49,110437,110438],{"class":51,"line":2311},[49,110439,399],{"emptyLinePlaceholder":398},[49,110441,110442],{"class":51,"line":2316},[49,110443,110444],{"class":59},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[49,110446,110447],{"class":51,"line":2322},[49,110448,110449],{"class":59},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[49,110451,110452],{"class":51,"line":2327},[49,110453,110454],{"class":59},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[49,110456,110457],{"class":51,"line":2341},[49,110458,399],{"emptyLinePlaceholder":398},[49,110460,110461],{"class":51,"line":2346},[49,110462,110463],{"class":59},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[49,110465,110466],{"class":51,"line":2352},[49,110467,110468],{"class":59},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[49,110470,110471],{"class":51,"line":2373},[49,110472,110473],{"class":59},"        \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",[49,110475,110476],{"class":51,"line":2378},[49,110477,106969],{"class":59},[49,110479,110480],{"class":51,"line":2392},[49,110481,101898],{"class":59},[49,110483,110484],{"class":51,"line":2397},[49,110485,101903],{"class":59},[49,110487,110488],{"class":51,"line":2426},[49,110489,399],{"emptyLinePlaceholder":398},[49,110491,110492],{"class":51,"line":2431},[49,110493,106986],{"class":59},[49,110495,110496],{"class":51,"line":2448},[49,110497,110498],{"class":59},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[49,110500,110501],{"class":51,"line":2453},[49,110502,106996],{"class":59},[49,110504,110505],{"class":51,"line":2458},[49,110506,101908],{"class":59},[49,110508,110509],{"class":51,"line":2463},[49,110510,96229],{"class":59},[49,110512,110513],{"class":51,"line":2477},[49,110514,399],{"emptyLinePlaceholder":398},[49,110516,110517],{"class":51,"line":2482},[49,110518,399],{"emptyLinePlaceholder":398},[49,110520,110521,110523,110526],{"class":51,"line":3274},[49,110522,32478],{"class":77},[49,110524,110525],{"class":55}," get_observation",[49,110527,110528],{"class":73},"(data: mujoco.MjData) -> np.ndarray:\n",[49,110530,110531,110533],{"class":51,"line":3288},[49,110532,4787],{"class":77},[49,110534,110535],{"class":73}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[49,110537,110538],{"class":51,"line":3296},[49,110539,399],{"emptyLinePlaceholder":398},[49,110541,110542],{"class":51,"line":3301},[49,110543,399],{"emptyLinePlaceholder":398},[49,110545,110546,110548,110551,110554,110556],{"class":51,"line":3307},[49,110547,32478],{"class":77},[49,110549,110550],{"class":55}," compute_reward",[49,110552,110553],{"class":73},"(obs: np.ndarray) -> ",[49,110555,880],{"class":159},[49,110557,4436],{"class":73},[49,110559,110560,110563,110565,110568,110570],{"class":51,"line":3313},[49,110561,110562],{"class":73},"    cart_x ",[49,110564,78],{"class":77},[49,110566,110567],{"class":73}," obs[",[49,110569,1021],{"class":159},[49,110571,33777],{"class":73},[49,110573,110574,110577,110579,110581,110583],{"class":51,"line":3318},[49,110575,110576],{"class":73},"    pole_angle ",[49,110578,78],{"class":77},[49,110580,110567],{"class":73},[49,110582,1047],{"class":159},[49,110584,33777],{"class":73},[49,110586,110587,110589,110591,110593,110595,110597,110599,110601,110603,110605,110607,110609,110611,110613],{"class":51,"line":8645},[49,110588,4787],{"class":77},[49,110590,110328],{"class":159},[49,110592,841],{"class":73},[49,110594,102934],{"class":159},[49,110596,52802],{"class":77},[49,110598,110337],{"class":159},[49,110600,7215],{"class":77},[49,110602,110342],{"class":73},[49,110604,1284],{"class":77},[49,110606,110342],{"class":73},[49,110608,1361],{"class":77},[49,110610,110351],{"class":73},[49,110612,1284],{"class":77},[49,110614,110356],{"class":73},[49,110616,110617],{"class":51,"line":8669},[49,110618,399],{"emptyLinePlaceholder":398},[49,110620,110621],{"class":51,"line":8674},[49,110622,399],{"emptyLinePlaceholder":398},[49,110624,110625,110627,110629,110631,110633],{"class":51,"line":8680},[49,110626,32478],{"class":77},[49,110628,2671],{"class":55},[49,110630,101929],{"class":73},[49,110632,96217],{"class":159},[49,110634,4436],{"class":73},[49,110636,110637,110639,110641,110643,110645],{"class":51,"line":8707},[49,110638,101938],{"class":73},[49,110640,78],{"class":77},[49,110642,101943],{"class":73},[49,110644,101845],{"class":159},[49,110646,847],{"class":73},[49,110648,110649,110651,110653],{"class":51,"line":8712},[49,110650,101952],{"class":73},[49,110652,78],{"class":77},[49,110654,101957],{"class":73},[49,110656,110657],{"class":51,"line":8718},[49,110658,399],{"emptyLinePlaceholder":398},[49,110660,110661,110663,110665,110667,110669],{"class":51,"line":8730},[49,110662,105600],{"class":73},[49,110664,1047],{"class":159},[49,110666,5140],{"class":73},[49,110668,78],{"class":77},[49,110670,110671],{"class":159}," 0.1\n",[49,110673,110674],{"class":51,"line":8742},[49,110675,105613],{"class":73},[49,110677,110678],{"class":51,"line":8754},[49,110679,399],{"emptyLinePlaceholder":398},[49,110681,110682,110685,110687],{"class":51,"line":10413},[49,110683,110684],{"class":73},"    total_reward ",[49,110686,78],{"class":77},[49,110688,105292],{"class":159},[49,110690,110691],{"class":51,"line":10438},[49,110692,399],{"emptyLinePlaceholder":398},[49,110694,110695,110697,110699,110701,110703,110705,110707],{"class":51,"line":10461},[49,110696,3898],{"class":77},[49,110698,32147],{"class":73},[49,110700,26732],{"class":77},[49,110702,32974],{"class":159},[49,110704,841],{"class":73},[49,110706,7107],{"class":159},[49,110708,31317],{"class":73},[49,110710,110711,110714,110716],{"class":51,"line":10485},[49,110712,110713],{"class":73},"        obs ",[49,110715,78],{"class":77},[49,110717,110718],{"class":73}," get_observation(data)\n",[49,110720,110721,110724,110726,110728,110730],{"class":51,"line":10490},[49,110722,110723],{"class":73},"        pole_angle ",[49,110725,78],{"class":77},[49,110727,110567],{"class":73},[49,110729,1047],{"class":159},[49,110731,33777],{"class":73},[49,110733,110734,110737,110739,110741,110743],{"class":51,"line":10495},[49,110735,110736],{"class":73},"        pole_angular_velocity ",[49,110738,78],{"class":77},[49,110740,110567],{"class":73},[49,110742,909],{"class":159},[49,110744,33777],{"class":73},[49,110746,110747],{"class":51,"line":10500},[49,110748,399],{"emptyLinePlaceholder":398},[49,110750,110751,110754,110756,110759,110761,110763,110765,110767,110769],{"class":51,"line":10509},[49,110752,110753],{"class":73},"        action ",[49,110755,78],{"class":77},[49,110757,110758],{"class":159}," 2.0",[49,110760,7215],{"class":77},[49,110762,110351],{"class":73},[49,110764,1310],{"class":77},[49,110766,62398],{"class":159},[49,110768,7215],{"class":77},[49,110770,110771],{"class":73}," pole_angular_velocity\n",[49,110773,110774,110776,110778,110780,110782,110784,110786,110788],{"class":51,"line":10514},[49,110775,110753],{"class":73},[49,110777,78],{"class":77},[49,110779,107978],{"class":73},[49,110781,1361],{"class":77},[49,110783,102934],{"class":159},[49,110785,13132],{"class":73},[49,110787,102934],{"class":159},[49,110789,847],{"class":73},[49,110791,110792],{"class":51,"line":10520},[49,110793,399],{"emptyLinePlaceholder":398},[49,110795,110796,110798,110800,110802,110804],{"class":51,"line":10541},[49,110797,107148],{"class":73},[49,110799,1021],{"class":159},[49,110801,5140],{"class":73},[49,110803,78],{"class":77},[49,110805,108001],{"class":73},[49,110807,110808],{"class":51,"line":10547},[49,110809,102047],{"class":73},[49,110811,110812],{"class":51,"line":10561},[49,110813,399],{"emptyLinePlaceholder":398},[49,110815,110816,110819,110821],{"class":51,"line":10567},[49,110817,110818],{"class":73},"        reward ",[49,110820,78],{"class":77},[49,110822,110823],{"class":73}," compute_reward(get_observation(data))\n",[49,110825,110826,110829,110831],{"class":51,"line":10594},[49,110827,110828],{"class":73},"        total_reward ",[49,110830,10174],{"class":77},[49,110832,110833],{"class":73}," reward\n",[49,110835,110836],{"class":51,"line":10603},[49,110837,399],{"emptyLinePlaceholder":398},[49,110839,110840,110842,110844,110846,110848,110850,110852],{"class":51,"line":10609},[49,110841,3194],{"class":77},[49,110843,32147],{"class":73},[49,110845,1157],{"class":77},[49,110847,6451],{"class":159},[49,110849,102090],{"class":77},[49,110851,4790],{"class":159},[49,110853,4436],{"class":73},[49,110855,110856,110858,110860,110863,110866,110869,110872,110874,110877,110880,110882,110884,110886,110888,110891,110893],{"class":51,"line":10617},[49,110857,35181],{"class":159},[49,110859,841],{"class":73},[49,110861,110862],{"class":59},"\"step:\"",[49,110864,110865],{"class":73},", step, ",[49,110867,110868],{"class":59},"\"obs:\"",[49,110870,110871],{"class":73},", np.round(obs, ",[49,110873,909],{"class":159},[49,110875,110876],{"class":73},"), ",[49,110878,110879],{"class":59},"\"action:\"",[49,110881,13132],{"class":73},[49,110883,32549],{"class":159},[49,110885,841],{"class":73},[49,110887,880],{"class":159},[49,110889,110890],{"class":73},"(action), ",[49,110892,909],{"class":159},[49,110894,31028],{"class":73},[49,110896,110897],{"class":51,"line":10622},[49,110898,399],{"emptyLinePlaceholder":398},[49,110900,110901,110903,110905,110908,110910,110912,110915,110917],{"class":51,"line":17301},[49,110902,31830],{"class":159},[49,110904,841],{"class":73},[49,110906,110907],{"class":59},"\"total_reward:\"",[49,110909,13132],{"class":73},[49,110911,32549],{"class":159},[49,110913,110914],{"class":73},"(total_reward, ",[49,110916,909],{"class":159},[49,110918,31028],{"class":73},[49,110920,110921,110923,110925,110928,110931,110933],{"class":51,"line":17307},[49,110922,31830],{"class":159},[49,110924,841],{"class":73},[49,110926,110927],{"class":59},"\"final obs:\"",[49,110929,110930],{"class":73},", np.round(get_observation(data), ",[49,110932,909],{"class":159},[49,110934,31028],{"class":73},[49,110936,110937],{"class":51,"line":17330},[49,110938,399],{"emptyLinePlaceholder":398},[49,110940,110941],{"class":51,"line":17336},[49,110942,399],{"emptyLinePlaceholder":398},[49,110944,110945,110947,110949,110951,110953],{"class":51,"line":17359},[49,110946,2230],{"class":77},[49,110948,31751],{"class":159},[49,110950,102090],{"class":77},[49,110952,102093],{"class":59},[49,110954,4436],{"class":73},[49,110956,110957],{"class":51,"line":17373},[49,110958,102100],{"class":73},[14,110960,104101],{},[40,110962,110964],{"className":42,"code":110963,"language":44,"meta":27,"style":27},"touch ch6_cartpole.py\n",[46,110965,110966],{"__ignoreMap":27},[49,110967,110968,110970],{"class":51,"line":52},[49,110969,101814],{"class":55},[49,110971,110972],{"class":59}," ch6_cartpole.py\n",[14,110974,110975],{},"运行：",[40,110977,110979],{"className":42,"code":110978,"language":44,"meta":27,"style":27},"python ch6_cartpole.py\n",[46,110980,110981],{"__ignoreMap":27},[49,110982,110983,110985],{"class":51,"line":52},[49,110984,30911],{"class":55},[49,110986,110972],{"class":59},[18,110988,102103],{"id":102103},[14,110990,110991],{},"构造观测：",[40,110993,110995],{"className":30909,"code":110994,"language":30911,"meta":27,"style":27},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[46,110996,110997,111005],{"__ignoreMap":27},[49,110998,110999,111001,111003],{"class":51,"line":52},[49,111000,32478],{"class":77},[49,111002,110525],{"class":55},[49,111004,110528],{"class":73},[49,111006,111007,111009],{"class":51,"line":63},[49,111008,4787],{"class":77},[49,111010,110535],{"class":73},[14,111012,111013,111016,111017,111019,111020,111022],{},[46,111014,111015],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[46,111018,104561],{}," 2 维，",[46,111021,104891],{}," 2 维，所以 obs 是 4 维。",[14,111024,111025],{},"设置初始角度：",[40,111027,111029],{"className":30909,"code":111028,"language":30911,"meta":27,"style":27},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[46,111030,111031,111043],{"__ignoreMap":27},[49,111032,111033,111035,111037,111039,111041],{"class":51,"line":52},[49,111034,105230],{"class":73},[49,111036,1047],{"class":159},[49,111038,5140],{"class":73},[49,111040,78],{"class":77},[49,111042,110671],{"class":159},[49,111044,111045],{"class":51,"line":63},[49,111046,105074],{"class":73},[14,111048,111049],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,111051,111052],{},"简单反馈控制：",[40,111054,111056],{"className":30909,"code":111055,"language":30911,"meta":27,"style":27},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[46,111057,111058,111078],{"__ignoreMap":27},[49,111059,111060,111062,111064,111066,111068,111070,111072,111074,111076],{"class":51,"line":52},[49,111061,107973],{"class":73},[49,111063,78],{"class":77},[49,111065,110758],{"class":159},[49,111067,7215],{"class":77},[49,111069,110351],{"class":73},[49,111071,1310],{"class":77},[49,111073,62398],{"class":159},[49,111075,7215],{"class":77},[49,111077,110771],{"class":73},[49,111079,111080,111082,111084,111086,111088,111090,111092,111094],{"class":51,"line":63},[49,111081,107973],{"class":73},[49,111083,78],{"class":77},[49,111085,107978],{"class":73},[49,111087,1361],{"class":77},[49,111089,102934],{"class":159},[49,111091,13132],{"class":73},[49,111093,102934],{"class":159},[49,111095,847],{"class":73},[14,111097,111098],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,111100,111101],{},"限制动作：",[40,111103,111105],{"className":30909,"code":111104,"language":30911,"meta":27,"style":27},"np.clip(action, -1.0, 1.0)\n",[46,111106,111107],{"__ignoreMap":27},[49,111108,111109,111112,111114,111116,111118,111120],{"class":51,"line":52},[49,111110,111111],{"class":73},"np.clip(action, ",[49,111113,1361],{"class":77},[49,111115,102934],{"class":159},[49,111117,13132],{"class":73},[49,111119,102934],{"class":159},[49,111121,847],{"class":73},[14,111123,111124,111125,111128],{},"因为 XML 里 ",[46,111126,111127],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[18,111130,102239],{"id":102239},[40,111132,111133],{"className":30909,"code":110994,"language":30911,"meta":27,"style":27},[46,111134,111135,111143],{"__ignoreMap":27},[49,111136,111137,111139,111141],{"class":51,"line":52},[49,111138,32478],{"class":77},[49,111140,110525],{"class":55},[49,111142,110528],{"class":73},[49,111144,111145,111147],{"class":51,"line":63},[49,111146,4787],{"class":77},[49,111148,110535],{"class":73},[14,111150,111151,111152,111155,111156,111159,111160,111163],{},"这段定义了一个函数，用来获取当前观测。",[46,111153,111154],{},"data.qpos.copy()"," 是位置数组副本，",[46,111157,111158],{},"data.qvel.copy()"," 是速度数组副本。",[46,111161,111162],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,111165,111166],{},"在本章模型里：",[40,111168,111171],{"className":111169,"code":111170,"language":5884,"meta":27},[5882],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[46,111172,111170],{"__ignoreMap":27},[14,111174,111175],{},"所以返回的 obs 是：",[40,111177,111180],{"className":111178,"code":111179,"language":5884,"meta":27},[5882],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[46,111181,111179],{"__ignoreMap":27},[40,111183,111185],{"className":30909,"code":111184,"language":30911,"meta":27,"style":27},"def compute_reward(obs: np.ndarray) -> float:\n",[46,111186,111187],{"__ignoreMap":27},[49,111188,111189,111191,111193,111195,111197],{"class":51,"line":52},[49,111190,32478],{"class":77},[49,111192,110550],{"class":55},[49,111194,110553],{"class":73},[49,111196,880],{"class":159},[49,111198,4436],{"class":73},[14,111200,111201,111202,111205],{},"这行定义奖励函数。输入是观测 ",[46,111203,111204],{},"obs","，输出是一个浮点数奖励。",[40,111207,111209],{"className":30909,"code":111208,"language":30911,"meta":27,"style":27},"cart_x = obs[0]\npole_angle = obs[1]\n",[46,111210,111211,111224],{"__ignoreMap":27},[49,111212,111213,111216,111218,111220,111222],{"class":51,"line":52},[49,111214,111215],{"class":73},"cart_x ",[49,111217,78],{"class":77},[49,111219,110567],{"class":73},[49,111221,1021],{"class":159},[49,111223,33777],{"class":73},[49,111225,111226,111229,111231,111233,111235],{"class":51,"line":63},[49,111227,111228],{"class":73},"pole_angle ",[49,111230,78],{"class":77},[49,111232,110567],{"class":73},[49,111234,1047],{"class":159},[49,111236,33777],{"class":73},[14,111238,111239,111240,111243,111244,111247],{},"数组索引从 0 开始。",[46,111241,111242],{},"obs[0]"," 是第一个元素，也就是小车位置。",[46,111245,111246],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[40,111249,111250],{"className":30909,"code":110319,"language":30911,"meta":27,"style":27},[46,111251,111252],{"__ignoreMap":27},[49,111253,111254,111256,111258,111260,111262,111264,111266,111268,111270,111272,111274,111276,111278,111280],{"class":51,"line":52},[49,111255,17743],{"class":77},[49,111257,110328],{"class":159},[49,111259,841],{"class":73},[49,111261,102934],{"class":159},[49,111263,52802],{"class":77},[49,111265,110337],{"class":159},[49,111267,7215],{"class":77},[49,111269,110342],{"class":73},[49,111271,1284],{"class":77},[49,111273,110342],{"class":73},[49,111275,1361],{"class":77},[49,111277,110351],{"class":73},[49,111279,1284],{"class":77},[49,111281,110356],{"class":73},[14,111283,111284,111285,111288,111289,111292],{},"这行计算奖励。",[46,111286,111287],{},"cart_x * cart_x"," 是小车位置的平方，",[46,111290,111291],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[40,111294,111296],{"className":30909,"code":111295,"language":30911,"meta":27,"style":27},"data.qpos[1] = 0.1\n",[46,111297,111298],{"__ignoreMap":27},[49,111299,111300,111302,111304,111306,111308],{"class":51,"line":52},[49,111301,105230],{"class":73},[49,111303,1047],{"class":159},[49,111305,5140],{"class":73},[49,111307,78],{"class":77},[49,111309,110671],{"class":159},[14,111311,111312,111313,111315,111316,111318],{},"手动设置杆子的初始角度。因为 ",[46,111314,105987],{}," 是小车位置，",[46,111317,105990],{}," 是杆子角度，所以这里改的是杆子。",[40,111320,111321],{"className":30909,"code":105074,"language":30911,"meta":27,"style":27},[46,111322,111323],{"__ignoreMap":27},[49,111324,111325],{"class":51,"line":52},[49,111326,105074],{"class":73},[14,111328,106033,111329,111331],{},[46,111330,104561],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[40,111333,111335],{"className":30909,"code":111334,"language":30911,"meta":27,"style":27},"total_reward = 0.0\n",[46,111336,111337],{"__ignoreMap":27},[49,111338,111339,111342,111344],{"class":51,"line":52},[49,111340,111341],{"class":73},"total_reward ",[49,111343,78],{"class":77},[49,111345,105292],{"class":159},[14,111347,111348],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[40,111350,111352],{"className":30909,"code":111351,"language":30911,"meta":27,"style":27},"for step in range(1000):\n",[46,111353,111354],{"__ignoreMap":27},[49,111355,111356,111358,111360,111362,111364,111366,111368],{"class":51,"line":52},[49,111357,3722],{"class":77},[49,111359,32147],{"class":73},[49,111361,26732],{"class":77},[49,111363,32974],{"class":159},[49,111365,841],{"class":73},[49,111367,7107],{"class":159},[49,111369,31317],{"class":73},[14,111371,111372,111373,111375],{},"循环 1000 步。",[46,111374,107665],{}," 是当前步数，从 0 到 999。",[40,111377,111379],{"className":30909,"code":111378,"language":30911,"meta":27,"style":27},"obs = get_observation(data)\n",[46,111380,111381],{"__ignoreMap":27},[49,111382,111383,111386,111388],{"class":51,"line":52},[49,111384,111385],{"class":73},"obs ",[49,111387,78],{"class":77},[49,111389,110718],{"class":73},[14,111391,111392,111393,28916],{},"读取当前状态，保存到 ",[46,111394,111204],{},[40,111396,111398],{"className":30909,"code":111397,"language":30911,"meta":27,"style":27},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[46,111399,111400,111412],{"__ignoreMap":27},[49,111401,111402,111404,111406,111408,111410],{"class":51,"line":52},[49,111403,111228],{"class":73},[49,111405,78],{"class":77},[49,111407,110567],{"class":73},[49,111409,1047],{"class":159},[49,111411,33777],{"class":73},[49,111413,111414,111417,111419,111421,111423],{"class":51,"line":63},[49,111415,111416],{"class":73},"pole_angular_velocity ",[49,111418,78],{"class":77},[49,111420,110567],{"class":73},[49,111422,909],{"class":159},[49,111424,33777],{"class":73},[14,111426,111427,111428,111431,111432,28916],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[46,111429,111430],{},"obs[3]","？因为 obs 的顺序是 ",[46,111433,111434],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[40,111436,111438],{"className":30909,"code":111437,"language":30911,"meta":27,"style":27},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[46,111439,111440],{"__ignoreMap":27},[49,111441,111442,111444,111446,111448,111450,111452,111454,111456,111458],{"class":51,"line":52},[49,111443,107973],{"class":73},[49,111445,78],{"class":77},[49,111447,110758],{"class":159},[49,111449,7215],{"class":77},[49,111451,110351],{"class":73},[49,111453,1310],{"class":77},[49,111455,62398],{"class":159},[49,111457,7215],{"class":77},[49,111459,110771],{"class":73},[14,111461,111462,111463,101549,111465,111467],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[46,111464,105791],{},[46,111466,35860],{}," 是人为设置的系数，不是固定公式。",[40,111469,111471],{"className":30909,"code":111470,"language":30911,"meta":27,"style":27},"action = np.clip(action, -1.0, 1.0)\n",[46,111472,111473],{"__ignoreMap":27},[49,111474,111475,111477,111479,111481,111483,111485,111487,111489],{"class":51,"line":52},[49,111476,107973],{"class":73},[49,111478,78],{"class":77},[49,111480,107978],{"class":73},[49,111482,1361],{"class":77},[49,111484,102934],{"class":159},[49,111486,13132],{"class":73},[49,111488,102934],{"class":159},[49,111490,847],{"class":73},[14,111492,111493],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[40,111495,111496],{"className":30909,"code":110304,"language":30911,"meta":27,"style":27},[46,111497,111498],{"__ignoreMap":27},[49,111499,111500,111502,111504,111506,111508],{"class":51,"line":52},[49,111501,106402],{"class":73},[49,111503,1021],{"class":159},[49,111505,5140],{"class":73},[49,111507,78],{"class":77},[49,111509,108001],{"class":73},[14,111511,111512],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[40,111514,111515],{"className":30909,"code":105036,"language":30911,"meta":27,"style":27},[46,111516,111517],{"__ignoreMap":27},[49,111518,111519],{"class":51,"line":52},[49,111520,105036],{"class":73},[14,111522,111523,111524,111526],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[46,111525,106657],{}," 计算小车和杆子的下一刻状态。",[40,111528,111530],{"className":30909,"code":111529,"language":30911,"meta":27,"style":27},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[46,111531,111532,111541],{"__ignoreMap":27},[49,111533,111534,111537,111539],{"class":51,"line":52},[49,111535,111536],{"class":73},"reward ",[49,111538,78],{"class":77},[49,111540,110823],{"class":73},[49,111542,111543,111545,111547],{"class":51,"line":63},[49,111544,111341],{"class":73},[49,111546,10174],{"class":77},[49,111548,110833],{"class":73},[14,111550,111551,111552,111554,111555,111558,111559,28916],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[46,111553,10174],{}," 是简写，",[46,111556,111557],{},"total_reward += reward"," 等价于 ",[46,111560,111561],{},"total_reward = total_reward + reward",[40,111563,111565],{"className":30909,"code":111564,"language":30911,"meta":27,"style":27},"if step % 100 == 0:\n",[46,111566,111567],{"__ignoreMap":27},[49,111568,111569,111571,111573,111575,111577,111579,111581],{"class":51,"line":52},[49,111570,2230],{"class":77},[49,111572,32147],{"class":73},[49,111574,1157],{"class":77},[49,111576,6451],{"class":159},[49,111578,102090],{"class":77},[49,111580,4790],{"class":159},[49,111582,4436],{"class":73},[14,111584,111585,111587,111588,111591],{},[46,111586,1157],{}," 是取余数。",[46,111589,111590],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[40,111593,111595],{"className":30909,"code":111594,"language":30911,"meta":27,"style":27},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[46,111596,111597],{"__ignoreMap":27},[49,111598,111599,111601,111603,111605,111607,111609,111611,111613,111615,111617,111619,111621,111623,111625,111627,111629],{"class":51,"line":52},[49,111600,30946],{"class":159},[49,111602,841],{"class":73},[49,111604,110862],{"class":59},[49,111606,110865],{"class":73},[49,111608,110868],{"class":59},[49,111610,110871],{"class":73},[49,111612,909],{"class":159},[49,111614,110876],{"class":73},[49,111616,110879],{"class":59},[49,111618,13132],{"class":73},[49,111620,32549],{"class":159},[49,111622,841],{"class":73},[49,111624,880],{"class":159},[49,111626,110890],{"class":73},[49,111628,909],{"class":159},[49,111630,31028],{"class":73},[14,111632,111633,111634,111637,111638,111641],{},"打印当前步数、观测和动作。",[46,111635,111636],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[46,111639,111640],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[782,111643,102847],{"id":102846},[14,111645,111646],{},"观测向量:",[40,111648,111651],{"className":111649,"code":111650,"language":5884,"meta":27},[5882],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[46,111652,111650],{"__ignoreMap":27},[14,111654,111655],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111657,111658],{},"每隔 100 步会打印一次：",[40,111660,111663],{"className":111661,"code":111662,"language":5884,"meta":27},[5882],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[46,111664,111662],{"__ignoreMap":27},[14,111666,111667],{},"重点观察：",[30,111669,111670,111676,111681],{},[33,111671,111672,111675],{},[46,111673,111674],{},"pole_angle"," 是否越来越大。",[33,111677,111678,111680],{},[46,111679,110257],{}," 是否跑得太远。",[33,111682,111683,111684,83070,111686,28916],{},"action 是否经常被 clip 到 ",[46,111685,104446],{},[46,111687,1047],{},[14,111689,111690],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[782,111692,102879],{"id":102878},[30,111694,111695,111701,111704,111710,111720,111726,111729],{},[33,111696,111697,111698,28916],{},"把初始角度改为 ",[46,111699,111700],{},"data.qpos[1] = 0.3",[33,111702,111703],{},"重新运行，观察控制是否变差。",[33,111705,111706,111707,111709],{},"把 actuator ",[46,111708,107598],{}," 改小。",[33,111711,111712,111713,111716,111717,28916],{},"打印 ",[46,111714,111715],{},"model.nq, model.nv, model.nu","，应为 ",[46,111718,111719],{},"2 2 1",[33,111721,111722,111723,111725],{},"把 reward 里的 ",[46,111724,111291],{}," 系数改大，观察总奖励变化。",[33,111727,111728],{},"把控制器改成反号，观察杆子是否更容易倒。",[33,111730,111731],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[782,111733,102984],{"id":102983},[18,111735,111736],{"id":111736},"杆子方向和预期不一致",[14,111738,102927,111739,111741,111742,111744],{},[46,111740,106770],{}," 和 capsule 的 ",[46,111743,103707],{},"，必要时用 viewer 可视化确认。",[18,111746,111747],{"id":111747},"控制器越控越倒",[14,111749,111750],{},"说明反馈符号可能反了，尝试:",[40,111752,111754],{"className":30909,"code":111753,"language":30911,"meta":27,"style":27},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[46,111755,111756],{"__ignoreMap":27},[49,111757,111758,111760,111762,111764,111766,111768,111770,111772,111774,111776],{"class":51,"line":52},[49,111759,107973],{"class":73},[49,111761,78],{"class":77},[49,111763,52802],{"class":77},[49,111765,105791],{"class":159},[49,111767,7215],{"class":77},[49,111769,110351],{"class":73},[49,111771,1361],{"class":77},[49,111773,62398],{"class":159},[49,111775,7215],{"class":77},[49,111777,110771],{"class":73},[18,111779,111780],{"id":111780},"小车飞走",[14,111782,111783,111784,111786,111787,111790],{},"降低 ",[46,111785,107598],{}," 或缩小 ",[46,111788,111789],{},"action"," 的 clip 范围。",[18,111792,111794,111796],{"id":111793},"obs3-为什么是杆子角速度",[46,111795,111430],{}," 为什么是杆子角速度",[14,111798,111799],{},"因为这个模型里：",[40,111801,111804],{"className":111802,"code":111803,"language":5884,"meta":27},[5882],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[46,111805,111803],{"__ignoreMap":27},[14,111807,110278],{},[40,111809,111812],{"className":111810,"code":111811,"language":5884,"meta":27},[5882],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[46,111813,111811],{"__ignoreMap":27},[18,111815,111817],{"id":111816},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111819,111820],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[782,111822,103138],{"id":103137},[14,111824,111825],{},"一个控制任务通常包含：",[30,111827,111828,111831,111839,111844,111847],{},[33,111829,111830],{},"模型：Cartpole 的 body、joint、actuator。",[33,111832,111833,111834,1042,111836,111838],{},"观测：从 ",[46,111835,104561],{},[46,111837,104891],{}," 里取状态。",[33,111840,111841,111842,28916],{},"动作：写入 ",[46,111843,101607],{},[33,111845,111846],{},"奖励：根据任务目标打分。",[33,111848,111849],{},"循环：obs -> action -> step -> reward。",[14,111851,111852],{},"这就是后面 Gymnasium 环境的基本骨架。",[757,111854,104817],{},{"title":27,"searchDepth":63,"depth":63,"links":111856},[111857,111858,111859,111864,111868,111869,111870,111878],{"id":101177,"depth":63,"text":101178},{"id":101300,"depth":63,"text":101301},{"id":101575,"depth":63,"text":101576,"children":111860},[111861,111862,111863],{"id":110231,"depth":70,"text":110232},{"id":110296,"depth":70,"text":110297},{"id":110312,"depth":70,"text":110313},{"id":101783,"depth":63,"text":101784,"children":111865},[111866,111867],{"id":102103,"depth":70,"text":102103},{"id":102239,"depth":70,"text":102239},{"id":102846,"depth":63,"text":102847},{"id":102878,"depth":63,"text":102879},{"id":102983,"depth":63,"text":102984,"children":111871},[111872,111873,111874,111875,111877],{"id":111736,"depth":70,"text":111736},{"id":111747,"depth":70,"text":111747},{"id":111780,"depth":70,"text":111780},{"id":111793,"depth":70,"text":111876},"obs[3] 为什么是杆子角速度",{"id":111816,"depth":70,"text":111817},{"id":103137,"depth":63,"text":103138},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109967,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111885,"title":111886,"body":111887,"description":27,"extension":766,"meta":113901,"navigation":398,"path":113902,"seo":113903,"stem":113904,"__hash__":113905},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111888,"toc":113877},[111889,111892,111894,111897,111899,111916,111919,111922,111928,111931,111933,111935,111959,111961,111975,111977,112018,112020,112038,112040,112043,112049,112052,112080,112084,112090,112115,112118,112149,112156,112159,112162,112168,112171,112177,112180,112186,112190,112193,112218,112221,112223,112983,112985,112997,112999,113010,113012,113015,113032,113035,113037,113048,113051,113053,113099,113102,113115,113118,113200,113203,113205,113221,113231,113244,113247,113286,113296,113307,113317,113330,113333,113362,113365,113375,113378,113384,113401,113412,113414,113420,113437,113448,113469,113472,113484,113487,113508,113511,113519,113527,113544,113547,113616,113623,113631,113634,113647,113654,113656,113659,113665,113668,113671,113677,113683,113685,113725,113727,113733,113742,113745,113747,113767,113770,113773,113779,113783,113785,113812,113815,113818,113845,113851,113854,113857,113859,113862,113865,113871,113874],[10,111890,111886],{"id":111891},"_7控制任务reacher-机械臂到达目标",[782,111893,101178],{"id":101177},[14,111895,111896],{},"本章搭建一个二维两关节 reacher 任务。",[14,111898,104862],{},[30,111900,111901,111904,111907,111910,111913],{},[33,111902,111903],{},"两个 hinge joint",[33,111905,111906],{},"两个 motor actuator",[33,111908,111909],{},"site 作为末端点和目标点",[33,111911,111912],{},"根据末端和目标距离设计 reward",[33,111914,111915],{},"构造机械臂任务的基本形式",[14,111917,111918],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111920,111921],{},"Reacher 任务可以理解为：",[40,111923,111926],{"className":111924,"code":111925,"language":5884,"meta":27},[5882],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[46,111927,111925],{"__ignoreMap":27},[14,111929,111930],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[782,111932,101301],{"id":101300},[14,111934,101304],{},[40,111936,111937],{"className":42,"code":104919,"language":44,"meta":27,"style":27},[46,111938,111939],{"__ignoreMap":27},[49,111940,111941,111943,111945,111947,111949,111951,111953,111955,111957],{"class":51,"line":52},[49,111942,264],{"class":55},[49,111944,384],{"class":59},[49,111946,269],{"class":59},[49,111948,272],{"class":159},[49,111950,104934],{"class":59},[49,111952,101329],{"class":59},[49,111954,103032],{"class":59},[49,111956,101345],{"class":59},[49,111958,104943],{"class":59},[14,111960,103350],{},[40,111962,111963],{"className":42,"code":101450,"language":44,"meta":27,"style":27},[46,111964,111965],{"__ignoreMap":27},[49,111966,111967,111969,111971,111973],{"class":51,"line":52},[49,111968,24524],{"class":55},[49,111970,269],{"class":59},[49,111972,101461],{"class":59},[49,111974,101464],{"class":59},[14,111976,103367],{},[40,111978,111980],{"className":42,"code":111979,"language":44,"meta":27,"style":27},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[46,111981,111982,111999,112008],{"__ignoreMap":27},[49,111983,111984,111986,111988,111990,111993,111995,111997],{"class":51,"line":52},[49,111985,30861],{"class":55},[49,111987,29707],{"class":59},[49,111989,25804],{"class":159},[49,111991,111992],{"class":59}," mujoco-reacher",[49,111994,101506],{"class":59},[49,111996,101509],{"class":159},[49,111998,101512],{"class":159},[49,112000,112001,112003,112005],{"class":51,"line":63},[49,112002,30861],{"class":55},[49,112004,101519],{"class":59},[49,112006,112007],{"class":59}," mujoco-reacher\n",[49,112009,112010,112012,112014,112016],{"class":51,"line":70},[49,112011,24524],{"class":55},[49,112013,269],{"class":59},[49,112015,101461],{"class":59},[49,112017,101464],{"class":59},[14,112019,101535],{},[30,112021,112022,112025,112028],{},[33,112023,112024],{},"本章使用低维状态，不使用图像输入。",[33,112026,112027],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[33,112029,112030,112031,1042,112033,1042,112035,112037],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[46,112032,104561],{},[46,112034,104891],{},[46,112036,104211],{}," 的方法一致。",[782,112039,101576],{"id":101575},[14,112041,112042],{},"Reacher 任务核心:",[40,112044,112047],{"className":112045,"code":112046,"language":5884,"meta":27},[5882],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[46,112048,112046],{"__ignoreMap":27},[14,112050,112051],{},"读取 site 世界坐标:",[40,112053,112055],{"className":30909,"code":112054,"language":30911,"meta":27,"style":27},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[46,112056,112057,112070],{"__ignoreMap":27},[49,112058,112059,112061,112063,112065,112068],{"class":51,"line":52},[49,112060,104165],{"class":73},[49,112062,78],{"class":77},[49,112064,103936],{"class":73},[49,112066,112067],{"class":59},"\"tip\"",[49,112069,847],{"class":73},[49,112071,112072,112075,112077],{"class":51,"line":63},[49,112073,112074],{"class":73},"tip_pos ",[49,112076,78],{"class":77},[49,112078,112079],{"class":73}," data.site_xpos[site_id]\n",[18,112081,112083],{"id":112082},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,112085,112086,112087,112089],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[46,112088,104561],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[40,112091,112093],{"className":30909,"code":112092,"language":30911,"meta":27,"style":27},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[46,112094,112095,112105],{"__ignoreMap":27},[49,112096,112097,112100,112102],{"class":51,"line":52},[49,112098,112099],{"class":73},"tip ",[49,112101,78],{"class":77},[49,112103,112104],{"class":73}," data.site_xpos[tip_site_id]\n",[49,112106,112107,112110,112112],{"class":51,"line":63},[49,112108,112109],{"class":73},"target ",[49,112111,78],{"class":77},[49,112113,112114],{"class":73}," data.site_xpos[target_site_id]\n",[14,112116,112117],{},"这样 reward 就很容易写：",[40,112119,112121],{"className":30909,"code":112120,"language":30911,"meta":27,"style":27},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[46,112122,112123,112138],{"__ignoreMap":27},[49,112124,112125,112128,112130,112133,112135],{"class":51,"line":52},[49,112126,112127],{"class":73},"dist ",[49,112129,78],{"class":77},[49,112131,112132],{"class":73}," np.linalg.norm(tip ",[49,112134,1361],{"class":77},[49,112136,112137],{"class":73}," target)\n",[49,112139,112140,112142,112144,112146],{"class":51,"line":63},[49,112141,111536],{"class":73},[49,112143,78],{"class":77},[49,112145,52802],{"class":77},[49,112147,112148],{"class":73},"dist\n",[14,112150,112151,112152,112155],{},"距离越小，",[46,112153,112154],{},"-dist"," 越接近 0，奖励越高。",[18,112157,112158],{"id":112158},"两关节机械臂的状态",[14,112160,112161],{},"这个模型有两个 hinge joint：",[40,112163,112166],{"className":112164,"code":112165,"language":5884,"meta":27},[5882],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[46,112167,112165],{"__ignoreMap":27},[14,112169,112170],{},"再加上末端和目标位置：",[40,112172,112175],{"className":112173,"code":112174,"language":5884,"meta":27},[5882],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[46,112176,112174],{"__ignoreMap":27},[14,112178,112179],{},"总维度：",[40,112181,112184],{"className":112182,"code":112183,"language":5884,"meta":27},[5882],"2 + 2 + 3 + 3 = 10\n",[46,112185,112183],{"__ignoreMap":27},[18,112187,112189],{"id":112188},"为什么-gravity-是-0","为什么 gravity 是 0",[14,112191,112192],{},"本章把重力设为：",[40,112194,112196],{"className":53598,"code":112195,"language":53600,"meta":27,"style":27},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[46,112197,112198],{"__ignoreMap":27},[49,112199,112200,112202,112204,112206,112208,112210,112212,112214,112216],{"class":51,"line":52},[49,112201,1739],{"class":73},[49,112203,69697],{"class":51831},[49,112205,101725],{"class":55},[49,112207,78],{"class":73},[49,112209,101730],{"class":59},[49,112211,101733],{"class":55},[49,112213,78],{"class":73},[49,112215,104302],{"class":59},[49,112217,101675],{"class":73},[14,112219,112220],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[782,112222,101784],{"id":101783},[40,112224,112226],{"className":30909,"code":112225,"language":30911,"meta":27,"style":27},"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",[46,112227,112228,112234,112244,112248,112252,112260,112265,112270,112274,112278,112283,112288,112292,112297,112302,112307,112311,112316,112321,112326,112331,112335,112339,112343,112347,112351,112356,112361,112365,112369,112373,112377,112381,112396,112405,112417,112440,112447,112451,112455,112465,112479,112493,112500,112504,112508,112522,112534,112546,112559,112574,112591,112595,112599,112611,112623,112631,112639,112643,112659,112664,112677,112690,112705,112709,112744,112776,112780,112784,112793,112797,112813,112823,112834,112850,112866,112882,112898,112902,112920,112940,112959,112963,112967,112979],{"__ignoreMap":27},[49,112229,112230,112232],{"class":51,"line":52},[49,112231,30923],{"class":77},[49,112233,101832],{"class":73},[49,112235,112236,112238,112240,112242],{"class":51,"line":63},[49,112237,30923],{"class":77},[49,112239,31911],{"class":73},[49,112241,31914],{"class":77},[49,112243,31917],{"class":73},[49,112245,112246],{"class":51,"line":70},[49,112247,399],{"emptyLinePlaceholder":398},[49,112249,112250],{"class":51,"line":219},[49,112251,399],{"emptyLinePlaceholder":398},[49,112253,112254,112256,112258],{"class":51,"line":233},[49,112255,101845],{"class":159},[49,112257,14261],{"class":77},[49,112259,101850],{"class":59},[49,112261,112262],{"class":51,"line":241},[49,112263,112264],{"class":59},"\u003Cmujoco model=\"two_link_reacher\">\n",[49,112266,112267],{"class":51,"line":1920},[49,112268,112269],{"class":59},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[49,112271,112272],{"class":51,"line":2011},[49,112273,399],{"emptyLinePlaceholder":398},[49,112275,112276],{"class":51,"line":2017},[49,112277,101869],{"class":59},[49,112279,112280],{"class":51,"line":2029},[49,112281,112282],{"class":59},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[49,112284,112285],{"class":51,"line":2311},[49,112286,112287],{"class":59},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[49,112289,112290],{"class":51,"line":2316},[49,112291,399],{"emptyLinePlaceholder":398},[49,112293,112294],{"class":51,"line":2322},[49,112295,112296],{"class":59},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[49,112298,112299],{"class":51,"line":2327},[49,112300,112301],{"class":59},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[49,112303,112304],{"class":51,"line":2341},[49,112305,112306],{"class":59},"      \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",[49,112308,112309],{"class":51,"line":2346},[49,112310,399],{"emptyLinePlaceholder":398},[49,112312,112313],{"class":51,"line":2352},[49,112314,112315],{"class":59},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[49,112317,112318],{"class":51,"line":2373},[49,112319,112320],{"class":59},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[49,112322,112323],{"class":51,"line":2378},[49,112324,112325],{"class":59},"        \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",[49,112327,112328],{"class":51,"line":2392},[49,112329,112330],{"class":59},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[49,112332,112333],{"class":51,"line":2397},[49,112334,106969],{"class":59},[49,112336,112337],{"class":51,"line":2426},[49,112338,101898],{"class":59},[49,112340,112341],{"class":51,"line":2431},[49,112342,101903],{"class":59},[49,112344,112345],{"class":51,"line":2448},[49,112346,399],{"emptyLinePlaceholder":398},[49,112348,112349],{"class":51,"line":2453},[49,112350,106986],{"class":59},[49,112352,112353],{"class":51,"line":2458},[49,112354,112355],{"class":59},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[49,112357,112358],{"class":51,"line":2463},[49,112359,112360],{"class":59},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[49,112362,112363],{"class":51,"line":2477},[49,112364,106996],{"class":59},[49,112366,112367],{"class":51,"line":2482},[49,112368,101908],{"class":59},[49,112370,112371],{"class":51,"line":3274},[49,112372,96229],{"class":59},[49,112374,112375],{"class":51,"line":3288},[49,112376,399],{"emptyLinePlaceholder":398},[49,112378,112379],{"class":51,"line":3296},[49,112380,399],{"emptyLinePlaceholder":398},[49,112382,112383,112385,112388,112391,112393],{"class":51,"line":3301},[49,112384,32478],{"class":77},[49,112386,112387],{"class":55}," site_position",[49,112389,112390],{"class":73},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[49,112392,1999],{"class":159},[49,112394,112395],{"class":73},") -> np.ndarray:\n",[49,112397,112398,112400,112402],{"class":51,"line":3307},[49,112399,103931],{"class":73},[49,112401,78],{"class":77},[49,112403,112404],{"class":73}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[49,112406,112407,112409,112411,112413,112415],{"class":51,"line":3313},[49,112408,3798],{"class":77},[49,112410,103980],{"class":73},[49,112412,1739],{"class":77},[49,112414,4790],{"class":159},[49,112416,4436],{"class":73},[49,112418,112419,112421,112423,112425,112427,112430,112432,112434,112436,112438],{"class":51,"line":3318},[49,112420,103963],{"class":77},[49,112422,103966],{"class":159},[49,112424,841],{"class":73},[49,112426,891],{"class":77},[49,112428,112429],{"class":59},"\"site not found: ",[49,112431,1725],{"class":159},[49,112433,80341],{"class":73},[49,112435,1775],{"class":159},[49,112437,1080],{"class":59},[49,112439,847],{"class":73},[49,112441,112442,112444],{"class":51,"line":8645},[49,112443,4787],{"class":77},[49,112445,112446],{"class":73}," data.site_xpos[site_id].copy()\n",[49,112448,112449],{"class":51,"line":8669},[49,112450,399],{"emptyLinePlaceholder":398},[49,112452,112453],{"class":51,"line":8674},[49,112454,399],{"emptyLinePlaceholder":398},[49,112456,112457,112459,112462],{"class":51,"line":8680},[49,112458,32478],{"class":77},[49,112460,112461],{"class":55}," get_obs",[49,112463,112464],{"class":73},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[49,112466,112467,112470,112472,112475,112477],{"class":51,"line":8707},[49,112468,112469],{"class":73},"    tip ",[49,112471,78],{"class":77},[49,112473,112474],{"class":73}," site_position(model, data, ",[49,112476,112067],{"class":59},[49,112478,847],{"class":73},[49,112480,112481,112484,112486,112488,112491],{"class":51,"line":8712},[49,112482,112483],{"class":73},"    target ",[49,112485,78],{"class":77},[49,112487,112474],{"class":73},[49,112489,112490],{"class":59},"\"target\"",[49,112492,847],{"class":73},[49,112494,112495,112497],{"class":51,"line":8718},[49,112496,4787],{"class":77},[49,112498,112499],{"class":73}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[49,112501,112502],{"class":51,"line":8730},[49,112503,399],{"emptyLinePlaceholder":398},[49,112505,112506],{"class":51,"line":8742},[49,112507,399],{"emptyLinePlaceholder":398},[49,112509,112510,112512,112515,112518,112520],{"class":51,"line":8754},[49,112511,32478],{"class":77},[49,112513,112514],{"class":55}," reward",[49,112516,112517],{"class":73},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[49,112519,880],{"class":159},[49,112521,4436],{"class":73},[49,112523,112524,112526,112528,112530,112532],{"class":51,"line":10413},[49,112525,112469],{"class":73},[49,112527,78],{"class":77},[49,112529,112474],{"class":73},[49,112531,112067],{"class":59},[49,112533,847],{"class":73},[49,112535,112536,112538,112540,112542,112544],{"class":51,"line":10438},[49,112537,112483],{"class":73},[49,112539,78],{"class":77},[49,112541,112474],{"class":73},[49,112543,112490],{"class":59},[49,112545,847],{"class":73},[49,112547,112548,112551,112553,112555,112557],{"class":51,"line":10461},[49,112549,112550],{"class":73},"    dist ",[49,112552,78],{"class":77},[49,112554,112132],{"class":73},[49,112556,1361],{"class":77},[49,112558,112137],{"class":73},[49,112560,112561,112564,112566,112569,112571],{"class":51,"line":10485},[49,112562,112563],{"class":73},"    control_cost ",[49,112565,78],{"class":77},[49,112567,112568],{"class":159}," 0.01",[49,112570,7215],{"class":77},[49,112572,112573],{"class":73}," np.sum(np.square(data.ctrl))\n",[49,112575,112576,112578,112580,112582,112584,112586,112588],{"class":51,"line":10490},[49,112577,4787],{"class":77},[49,112579,110328],{"class":159},[49,112581,841],{"class":73},[49,112583,1361],{"class":77},[49,112585,112127],{"class":73},[49,112587,1361],{"class":77},[49,112589,112590],{"class":73}," control_cost)\n",[49,112592,112593],{"class":51,"line":10495},[49,112594,399],{"emptyLinePlaceholder":398},[49,112596,112597],{"class":51,"line":10500},[49,112598,399],{"emptyLinePlaceholder":398},[49,112600,112601,112603,112605,112607,112609],{"class":51,"line":10509},[49,112602,32478],{"class":77},[49,112604,2671],{"class":55},[49,112606,101929],{"class":73},[49,112608,96217],{"class":159},[49,112610,4436],{"class":73},[49,112612,112613,112615,112617,112619,112621],{"class":51,"line":10514},[49,112614,101938],{"class":73},[49,112616,78],{"class":77},[49,112618,101943],{"class":73},[49,112620,101845],{"class":159},[49,112622,847],{"class":73},[49,112624,112625,112627,112629],{"class":51,"line":10520},[49,112626,101952],{"class":73},[49,112628,78],{"class":77},[49,112630,101957],{"class":73},[49,112632,112633,112635,112637],{"class":51,"line":10541},[49,112634,110684],{"class":73},[49,112636,78],{"class":77},[49,112638,105292],{"class":159},[49,112640,112641],{"class":51,"line":10547},[49,112642,399],{"emptyLinePlaceholder":398},[49,112644,112645,112647,112649,112651,112653,112655,112657],{"class":51,"line":10561},[49,112646,3898],{"class":77},[49,112648,32147],{"class":73},[49,112650,26732],{"class":77},[49,112652,32974],{"class":159},[49,112654,841],{"class":73},[49,112656,65605],{"class":159},[49,112658,31317],{"class":73},[49,112660,112661],{"class":51,"line":10567},[49,112662,112663],{"class":73},"        mujoco.mj_forward(model, data)\n",[49,112665,112666,112669,112671,112673,112675],{"class":51,"line":10594},[49,112667,112668],{"class":73},"        tip ",[49,112670,78],{"class":77},[49,112672,112474],{"class":73},[49,112674,112067],{"class":59},[49,112676,847],{"class":73},[49,112678,112679,112682,112684,112686,112688],{"class":51,"line":10603},[49,112680,112681],{"class":73},"        target ",[49,112683,78],{"class":77},[49,112685,112474],{"class":73},[49,112687,112490],{"class":59},[49,112689,847],{"class":73},[49,112691,112692,112695,112697,112700,112702],{"class":51,"line":10609},[49,112693,112694],{"class":73},"        error ",[49,112696,78],{"class":77},[49,112698,112699],{"class":73}," target ",[49,112701,1361],{"class":77},[49,112703,112704],{"class":73}," tip\n",[49,112706,112707],{"class":51,"line":10617},[49,112708,399],{"emptyLinePlaceholder":398},[49,112710,112711,112713,112715,112717,112719,112722,112724,112726,112729,112731,112734,112736,112738,112740,112742],{"class":51,"line":10622},[49,112712,107148],{"class":73},[49,112714,1021],{"class":159},[49,112716,5140],{"class":73},[49,112718,78],{"class":77},[49,112720,112721],{"class":73}," np.clip(",[49,112723,105791],{"class":159},[49,112725,7215],{"class":77},[49,112727,112728],{"class":73}," error[",[49,112730,915],{"class":159},[49,112732,112733],{"class":73},"], ",[49,112735,1361],{"class":77},[49,112737,102934],{"class":159},[49,112739,13132],{"class":73},[49,112741,102934],{"class":159},[49,112743,847],{"class":73},[49,112745,112746,112748,112750,112752,112754,112756,112758,112760,112762,112764,112766,112768,112770,112772,112774],{"class":51,"line":17301},[49,112747,107148],{"class":73},[49,112749,1047],{"class":159},[49,112751,5140],{"class":73},[49,112753,78],{"class":77},[49,112755,112721],{"class":73},[49,112757,105791],{"class":159},[49,112759,7215],{"class":77},[49,112761,112728],{"class":73},[49,112763,1021],{"class":159},[49,112765,112733],{"class":73},[49,112767,1361],{"class":77},[49,112769,102934],{"class":159},[49,112771,13132],{"class":73},[49,112773,102934],{"class":159},[49,112775,847],{"class":73},[49,112777,112778],{"class":51,"line":17307},[49,112779,399],{"emptyLinePlaceholder":398},[49,112781,112782],{"class":51,"line":17330},[49,112783,102047],{"class":73},[49,112785,112786,112788,112790],{"class":51,"line":17336},[49,112787,110828],{"class":73},[49,112789,10174],{"class":77},[49,112791,112792],{"class":73}," reward(model, data)\n",[49,112794,112795],{"class":51,"line":17359},[49,112796,399],{"emptyLinePlaceholder":398},[49,112798,112799,112801,112803,112805,112807,112809,112811],{"class":51,"line":17373},[49,112800,3194],{"class":77},[49,112802,32147],{"class":73},[49,112804,1157],{"class":77},[49,112806,6451],{"class":159},[49,112808,102090],{"class":77},[49,112810,4790],{"class":159},[49,112812,4436],{"class":73},[49,112814,112815,112818,112820],{"class":51,"line":17393},[49,112816,112817],{"class":73},"            obs ",[49,112819,78],{"class":77},[49,112821,112822],{"class":73}," get_obs(model, data)\n",[49,112824,112825,112827,112829,112831],{"class":51,"line":17399},[49,112826,35181],{"class":159},[49,112828,841],{"class":73},[49,112830,110862],{"class":59},[49,112832,112833],{"class":73},", step)\n",[49,112835,112836,112838,112840,112843,112846,112848],{"class":51,"line":17410},[49,112837,35181],{"class":159},[49,112839,841],{"class":73},[49,112841,112842],{"class":59},"\"  tip:\"",[49,112844,112845],{"class":73},", np.round(tip, ",[49,112847,909],{"class":159},[49,112849,31028],{"class":73},[49,112851,112852,112854,112856,112859,112862,112864],{"class":51,"line":17433},[49,112853,35181],{"class":159},[49,112855,841],{"class":73},[49,112857,112858],{"class":59},"\"  target:\"",[49,112860,112861],{"class":73},", np.round(target, ",[49,112863,909],{"class":159},[49,112865,31028],{"class":73},[49,112867,112868,112870,112872,112875,112878,112880],{"class":51,"line":17455},[49,112869,35181],{"class":159},[49,112871,841],{"class":73},[49,112873,112874],{"class":59},"\"  ctrl:\"",[49,112876,112877],{"class":73},", np.round(data.ctrl.copy(), ",[49,112879,909],{"class":159},[49,112881,31028],{"class":73},[49,112883,112884,112886,112888,112891,112894,112896],{"class":51,"line":17460},[49,112885,35181],{"class":159},[49,112887,841],{"class":73},[49,112889,112890],{"class":59},"\"  obs_dim:\"",[49,112892,112893],{"class":73},", obs.shape[",[49,112895,1021],{"class":159},[49,112897,5354],{"class":73},[49,112899,112900],{"class":51,"line":17466},[49,112901,399],{"emptyLinePlaceholder":398},[49,112903,112904,112906,112908,112910,112912,112914,112916,112918],{"class":51,"line":17480},[49,112905,31830],{"class":159},[49,112907,841],{"class":73},[49,112909,110907],{"class":59},[49,112911,13132],{"class":73},[49,112913,32549],{"class":159},[49,112915,110914],{"class":73},[49,112917,909],{"class":159},[49,112919,31028],{"class":73},[49,112921,112922,112924,112926,112929,112932,112934,112936,112938],{"class":51,"line":17493},[49,112923,31830],{"class":159},[49,112925,841],{"class":73},[49,112927,112928],{"class":59},"\"final tip:\"",[49,112930,112931],{"class":73},", np.round(site_position(model, data, ",[49,112933,112067],{"class":59},[49,112935,110876],{"class":73},[49,112937,909],{"class":159},[49,112939,31028],{"class":73},[49,112941,112942,112944,112946,112949,112951,112953,112955,112957],{"class":51,"line":17498},[49,112943,31830],{"class":159},[49,112945,841],{"class":73},[49,112947,112948],{"class":59},"\"target:\"",[49,112950,112931],{"class":73},[49,112952,112490],{"class":59},[49,112954,110876],{"class":73},[49,112956,909],{"class":159},[49,112958,31028],{"class":73},[49,112960,112961],{"class":51,"line":17512},[49,112962,399],{"emptyLinePlaceholder":398},[49,112964,112965],{"class":51,"line":17517},[49,112966,399],{"emptyLinePlaceholder":398},[49,112968,112969,112971,112973,112975,112977],{"class":51,"line":17523},[49,112970,2230],{"class":77},[49,112972,31751],{"class":159},[49,112974,102090],{"class":77},[49,112976,102093],{"class":59},[49,112978,4436],{"class":73},[49,112980,112981],{"class":51,"line":17528},[49,112982,102100],{"class":73},[14,112984,104101],{},[40,112986,112988],{"className":42,"code":112987,"language":44,"meta":27,"style":27},"touch ch7_reacher.py\n",[46,112989,112990],{"__ignoreMap":27},[49,112991,112992,112994],{"class":51,"line":52},[49,112993,101814],{"class":55},[49,112995,112996],{"class":59}," ch7_reacher.py\n",[14,112998,110975],{},[40,113000,113002],{"className":42,"code":113001,"language":44,"meta":27,"style":27},"python ch7_reacher.py\n",[46,113003,113004],{"__ignoreMap":27},[49,113005,113006,113008],{"class":51,"line":52},[49,113007,30911],{"class":55},[49,113009,112996],{"class":59},[18,113011,102103],{"id":102103},[14,113013,113014],{},"读取 site 坐标：",[40,113016,113018],{"className":30909,"code":113017,"language":30911,"meta":27,"style":27},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[46,113019,113020],{"__ignoreMap":27},[49,113021,113022,113024,113026,113028,113030],{"class":51,"line":52},[49,113023,32478],{"class":77},[49,113025,112387],{"class":55},[49,113027,112390],{"class":73},[49,113029,1999],{"class":159},[49,113031,112395],{"class":73},[14,113033,113034],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,113036,110991],{},[40,113038,113040],{"className":30909,"code":113039,"language":30911,"meta":27,"style":27},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[46,113041,113042],{"__ignoreMap":27},[49,113043,113044,113046],{"class":51,"line":52},[49,113045,17743],{"class":77},[49,113047,112499],{"class":73},[14,113049,113050],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,113052,110316],{},[40,113054,113056],{"className":30909,"code":113055,"language":30911,"meta":27,"style":27},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[46,113057,113058,113070,113083],{"__ignoreMap":27},[49,113059,113060,113062,113064,113066,113068],{"class":51,"line":52},[49,113061,112127],{"class":73},[49,113063,78],{"class":77},[49,113065,112132],{"class":73},[49,113067,1361],{"class":77},[49,113069,112137],{"class":73},[49,113071,113072,113075,113077,113079,113081],{"class":51,"line":63},[49,113073,113074],{"class":73},"control_cost ",[49,113076,78],{"class":77},[49,113078,112568],{"class":159},[49,113080,7215],{"class":77},[49,113082,112573],{"class":73},[49,113084,113085,113087,113089,113091,113093,113095,113097],{"class":51,"line":70},[49,113086,17743],{"class":77},[49,113088,110328],{"class":159},[49,113090,841],{"class":73},[49,113092,1361],{"class":77},[49,113094,112127],{"class":73},[49,113096,1361],{"class":77},[49,113098,112590],{"class":73},[14,113100,113101],{},"奖励由两部分组成：",[30,113103,113104,113109],{},[33,113105,113106,113108],{},[46,113107,112154],{},"：末端离目标越远，奖励越低。",[33,113110,113111,113114],{},[46,113112,113113],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,113116,113117],{},"简单控制器：",[40,113119,113121],{"className":30909,"code":113120,"language":30911,"meta":27,"style":27},"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",[46,113122,113123,113136,113168],{"__ignoreMap":27},[49,113124,113125,113128,113130,113132,113134],{"class":51,"line":52},[49,113126,113127],{"class":73},"error ",[49,113129,78],{"class":77},[49,113131,112699],{"class":73},[49,113133,1361],{"class":77},[49,113135,112704],{"class":73},[49,113137,113138,113140,113142,113144,113146,113148,113150,113152,113154,113156,113158,113160,113162,113164,113166],{"class":51,"line":63},[49,113139,106402],{"class":73},[49,113141,1021],{"class":159},[49,113143,5140],{"class":73},[49,113145,78],{"class":77},[49,113147,112721],{"class":73},[49,113149,105791],{"class":159},[49,113151,7215],{"class":77},[49,113153,112728],{"class":73},[49,113155,915],{"class":159},[49,113157,112733],{"class":73},[49,113159,1361],{"class":77},[49,113161,102934],{"class":159},[49,113163,13132],{"class":73},[49,113165,102934],{"class":159},[49,113167,847],{"class":73},[49,113169,113170,113172,113174,113176,113178,113180,113182,113184,113186,113188,113190,113192,113194,113196,113198],{"class":51,"line":70},[49,113171,106402],{"class":73},[49,113173,1047],{"class":159},[49,113175,5140],{"class":73},[49,113177,78],{"class":77},[49,113179,112721],{"class":73},[49,113181,105791],{"class":159},[49,113183,7215],{"class":77},[49,113185,112728],{"class":73},[49,113187,1021],{"class":159},[49,113189,112733],{"class":73},[49,113191,1361],{"class":77},[49,113193,102934],{"class":159},[49,113195,13132],{"class":73},[49,113197,102934],{"class":159},[49,113199,847],{"class":73},[14,113201,113202],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[18,113204,102239],{"id":102239},[40,113206,113207],{"className":30909,"code":113017,"language":30911,"meta":27,"style":27},[46,113208,113209],{"__ignoreMap":27},[49,113210,113211,113213,113215,113217,113219],{"class":51,"line":52},[49,113212,32478],{"class":77},[49,113214,112387],{"class":55},[49,113216,112390],{"class":73},[49,113218,1999],{"class":159},[49,113220,112395],{"class":73},[14,113222,113223,113224,113226,113227,83070,113229,28916],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[46,113225,80341],{}," 是 site 的名字，比如 ",[46,113228,112067],{},[46,113230,112490],{},[40,113232,113234],{"className":30909,"code":113233,"language":30911,"meta":27,"style":27},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[46,113235,113236],{"__ignoreMap":27},[49,113237,113238,113240,113242],{"class":51,"line":52},[49,113239,104165],{"class":73},[49,113241,78],{"class":77},[49,113243,112404],{"class":73},[14,113245,113246],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[40,113248,113250],{"className":30909,"code":113249,"language":30911,"meta":27,"style":27},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[46,113251,113252,113264],{"__ignoreMap":27},[49,113253,113254,113256,113258,113260,113262],{"class":51,"line":52},[49,113255,2230],{"class":77},[49,113257,103980],{"class":73},[49,113259,1739],{"class":77},[49,113261,4790],{"class":159},[49,113263,4436],{"class":73},[49,113265,113266,113268,113270,113272,113274,113276,113278,113280,113282,113284],{"class":51,"line":63},[49,113267,104426],{"class":77},[49,113269,103966],{"class":159},[49,113271,841],{"class":73},[49,113273,891],{"class":77},[49,113275,112429],{"class":59},[49,113277,1725],{"class":159},[49,113279,80341],{"class":73},[49,113281,1775],{"class":159},[49,113283,1080],{"class":59},[49,113285,847],{"class":73},[14,113287,113288,113289,113292,113293,113295],{},"如果 site 没找到，就主动报错。",[46,113290,113291],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[46,113294,80341],{}," 的值放进字符串里。",[40,113297,113299],{"className":30909,"code":113298,"language":30911,"meta":27,"style":27},"return data.site_xpos[site_id].copy()\n",[46,113300,113301],{"__ignoreMap":27},[49,113302,113303,113305],{"class":51,"line":52},[49,113304,17743],{"class":77},[49,113306,112446],{"class":73},[14,113308,113309,113310,113312,113313,113316],{},"返回这个 site 的世界坐标。",[46,113311,104211],{}," 里的每一行都是一个 site 的 ",[46,113314,113315],{},"(x, y, z)"," 坐标。",[40,113318,113320],{"className":30909,"code":113319,"language":30911,"meta":27,"style":27},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[46,113321,113322],{"__ignoreMap":27},[49,113323,113324,113326,113328],{"class":51,"line":52},[49,113325,32478],{"class":77},[49,113327,112461],{"class":55},[49,113329,112464],{"class":73},[14,113331,113332],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[40,113334,113336],{"className":30909,"code":113335,"language":30911,"meta":27,"style":27},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[46,113337,113338,113350],{"__ignoreMap":27},[49,113339,113340,113342,113344,113346,113348],{"class":51,"line":52},[49,113341,112099],{"class":73},[49,113343,78],{"class":77},[49,113345,112474],{"class":73},[49,113347,112067],{"class":59},[49,113349,847],{"class":73},[49,113351,113352,113354,113356,113358,113360],{"class":51,"line":63},[49,113353,112109],{"class":73},[49,113355,78],{"class":77},[49,113357,112474],{"class":73},[49,113359,112490],{"class":59},[49,113361,847],{"class":73},[14,113363,113364],{},"分别读取末端点和目标点的世界坐标。",[40,113366,113367],{"className":30909,"code":113039,"language":30911,"meta":27,"style":27},[46,113368,113369],{"__ignoreMap":27},[49,113370,113371,113373],{"class":51,"line":52},[49,113372,17743],{"class":77},[49,113374,112499],{"class":73},[14,113376,113377],{},"把四部分拼成一个观测数组：",[40,113379,113382],{"className":113380,"code":113381,"language":5884,"meta":27},[5882],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[46,113383,113381],{"__ignoreMap":27},[40,113385,113387],{"className":30909,"code":113386,"language":30911,"meta":27,"style":27},"dist = np.linalg.norm(tip - target)\n",[46,113388,113389],{"__ignoreMap":27},[49,113390,113391,113393,113395,113397,113399],{"class":51,"line":52},[49,113392,112127],{"class":73},[49,113394,78],{"class":77},[49,113396,112132],{"class":73},[49,113398,1361],{"class":77},[49,113400,112137],{"class":73},[14,113402,113403,113404,113407,113408,113411],{},"计算 tip 到 target 的距离。",[46,113405,113406],{},"tip - target"," 得到一个三维向量，",[46,113409,113410],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,113413,15330],{},[40,113415,113418],{"className":113416,"code":113417,"language":5884,"meta":27},[5882],"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",[46,113419,113417],{"__ignoreMap":27},[40,113421,113423],{"className":30909,"code":113422,"language":30911,"meta":27,"style":27},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[46,113424,113425],{"__ignoreMap":27},[49,113426,113427,113429,113431,113433,113435],{"class":51,"line":52},[49,113428,113074],{"class":73},[49,113430,78],{"class":77},[49,113432,112568],{"class":159},[49,113434,7215],{"class":77},[49,113436,112573],{"class":73},[14,113438,113439,113440,113443,113444,113447],{},"计算动作惩罚。",[46,113441,113442],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[46,113445,113446],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[40,113449,113451],{"className":30909,"code":113450,"language":30911,"meta":27,"style":27},"return float(-dist - control_cost)\n",[46,113452,113453],{"__ignoreMap":27},[49,113454,113455,113457,113459,113461,113463,113465,113467],{"class":51,"line":52},[49,113456,17743],{"class":77},[49,113458,110328],{"class":159},[49,113460,841],{"class":73},[49,113462,1361],{"class":77},[49,113464,112127],{"class":73},[49,113466,1361],{"class":77},[49,113468,112590],{"class":73},[14,113470,113471],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[40,113473,113474],{"className":30909,"code":111334,"language":30911,"meta":27,"style":27},[46,113475,113476],{"__ignoreMap":27},[49,113477,113478,113480,113482],{"class":51,"line":52},[49,113479,111341],{"class":73},[49,113481,78],{"class":77},[49,113483,105292],{"class":159},[14,113485,113486],{},"累计奖励变量，记录整个运行过程的总分。",[40,113488,113490],{"className":30909,"code":113489,"language":30911,"meta":27,"style":27},"for step in range(500):\n",[46,113491,113492],{"__ignoreMap":27},[49,113493,113494,113496,113498,113500,113502,113504,113506],{"class":51,"line":52},[49,113495,3722],{"class":77},[49,113497,32147],{"class":73},[49,113499,26732],{"class":77},[49,113501,32974],{"class":159},[49,113503,841],{"class":73},[49,113505,65605],{"class":159},[49,113507,31317],{"class":73},[14,113509,113510],{},"运行 500 个控制步。",[40,113512,113513],{"className":30909,"code":105074,"language":30911,"meta":27,"style":27},[46,113514,113515],{"__ignoreMap":27},[49,113516,113517],{"class":51,"line":52},[49,113518,105074],{"class":73},[14,113520,113521,113522,101549,113524,113526],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[46,113523,103762],{},[46,113525,103765],{}," 是当前状态下的坐标。",[40,113528,113530],{"className":30909,"code":113529,"language":30911,"meta":27,"style":27},"error = target - tip\n",[46,113531,113532],{"__ignoreMap":27},[49,113533,113534,113536,113538,113540,113542],{"class":51,"line":52},[49,113535,113127],{"class":73},[49,113537,78],{"class":77},[49,113539,112699],{"class":73},[49,113541,1361],{"class":77},[49,113543,112704],{"class":73},[14,113545,113546],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[40,113548,113550],{"className":30909,"code":113549,"language":30911,"meta":27,"style":27},"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",[46,113551,113552,113584],{"__ignoreMap":27},[49,113553,113554,113556,113558,113560,113562,113564,113566,113568,113570,113572,113574,113576,113578,113580,113582],{"class":51,"line":52},[49,113555,106402],{"class":73},[49,113557,1021],{"class":159},[49,113559,5140],{"class":73},[49,113561,78],{"class":77},[49,113563,112721],{"class":73},[49,113565,105791],{"class":159},[49,113567,7215],{"class":77},[49,113569,112728],{"class":73},[49,113571,915],{"class":159},[49,113573,112733],{"class":73},[49,113575,1361],{"class":77},[49,113577,102934],{"class":159},[49,113579,13132],{"class":73},[49,113581,102934],{"class":159},[49,113583,847],{"class":73},[49,113585,113586,113588,113590,113592,113594,113596,113598,113600,113602,113604,113606,113608,113610,113612,113614],{"class":51,"line":63},[49,113587,106402],{"class":73},[49,113589,1047],{"class":159},[49,113591,5140],{"class":73},[49,113593,78],{"class":77},[49,113595,112721],{"class":73},[49,113597,105791],{"class":159},[49,113599,7215],{"class":77},[49,113601,112728],{"class":73},[49,113603,1021],{"class":159},[49,113605,112733],{"class":73},[49,113607,1361],{"class":77},[49,113609,102934],{"class":159},[49,113611,13132],{"class":73},[49,113613,102934],{"class":159},[49,113615,847],{"class":73},[14,113617,113618,113619,113622],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[46,113620,113621],{},"error -> ctrl -> step"," 的流程。",[40,113624,113625],{"className":30909,"code":105036,"language":30911,"meta":27,"style":27},[46,113626,113627],{"__ignoreMap":27},[49,113628,113629],{"class":51,"line":52},[49,113630,105036],{"class":73},[14,113632,113633],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[40,113635,113637],{"className":30909,"code":113636,"language":30911,"meta":27,"style":27},"obs = get_obs(model, data)\n",[46,113638,113639],{"__ignoreMap":27},[49,113640,113641,113643,113645],{"class":51,"line":52},[49,113642,111385],{"class":73},[49,113644,78],{"class":77},[49,113646,112822],{"class":73},[14,113648,113649,113650,113653],{},"读取最新观测。后面打印 ",[46,113651,113652],{},"obs.shape[0]","，用来确认观测维度是 10。",[782,113655,102847],{"id":102846},[14,113657,113658],{},"观测维度为:",[40,113660,113663],{"className":113661,"code":113662,"language":5884,"meta":27},[5882],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[46,113664,113662],{"__ignoreMap":27},[14,113666,113667],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113669,113670],{},"程序每 100 步打印：",[40,113672,113675],{"className":113673,"code":113674,"language":5884,"meta":27},[5882],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[46,113676,113674],{"__ignoreMap":27},[14,113678,113679,113680,113682],{},"如果控制有效，你应该看到最终 ",[46,113681,103762],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[782,113684,102879],{"id":102878},[30,113686,113687,113690,113693,113699,113705,113712,113722],{},[33,113688,113689],{},"修改目标点位置。",[33,113691,113692],{},"重新运行，观察最终 tip 是否变化。",[33,113694,113695,113696,113698],{},"把 gravity 改成 ",[46,113697,103120],{},"，观察控制是否变差。",[33,113700,111712,113701,111716,113703,28916],{},[46,113702,102689],{},[46,113704,915],{},[33,113706,102942,113707,102945,113709,113711],{},[46,113708,111127],{},[46,113710,107838],{},"，观察机械臂是否更难移动。",[33,113713,102942,113714,83061,113716,102945,113718,113721],{},[46,113715,103765],{},[46,113717,104677],{},[46,113719,113720],{},"0.2 0 0.6","，观察 reward 和 final tip。",[33,113723,113724],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[782,113726,102984],{"id":102983},[18,113728,113730],{"id":113729},"site-not-found",[46,113731,113732],{},"site not found",[14,113734,113735,113736,101549,113739,28916],{},"检查 XML 中是否有 ",[46,113737,113738],{},"site name=\"tip\"",[46,113740,113741],{},"site name=\"target\"",[18,113743,113744],{"id":113744},"机械臂完全不动",[14,113746,103054],{},[30,113748,113749,113754,113757,113762],{},[33,113750,113751,113753],{},[46,113752,102689],{}," 是否为 2",[33,113755,113756],{},"actuator 是否引用正确 joint",[33,113758,113759,113761],{},[46,113760,101607],{}," 是否被赋值",[33,113763,113764,113765],{},"是否执行了 ",[46,113766,101216],{},[18,113768,113769],{"id":113769},"控制效果不好",[14,113771,113772],{},"正常。本章重点不是控制器最优，而是任务结构:",[40,113774,113777],{"className":113775,"code":113776,"language":5884,"meta":27},[5882],"obs → action → mj_step → reward → next_obs\n",[46,113778,113776],{"__ignoreMap":27},[18,113780,113782],{"id":113781},"tip-坐标不变化","tip 坐标不变化",[14,113784,103106],{},[30,113786,113787,113792,113800,113809],{},[33,113788,113789,113790,28916],{},"是否每步调用了 ",[46,113791,101216],{},[33,113793,113794,113795,101549,113797,28916],{},"是否写入了 ",[46,113796,106657],{},[46,113798,113799],{},"data.ctrl[1]",[33,113801,113802,113803,1042,113806,28916],{},"actuator 是否正确引用 ",[46,113804,113805],{},"joint1",[46,113807,113808],{},"joint2",[33,113810,113811],{},"控制输入是否太小。",[18,113813,113814],{"id":113814},"目标点不会动",[14,113816,113817],{},"本章的 target 是固定 site：",[40,113819,113821],{"className":53598,"code":113820,"language":53600,"meta":27,"style":27},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[46,113822,113823],{"__ignoreMap":27},[49,113824,113825,113827,113829,113831,113833,113835,113837,113839,113842],{"class":51,"line":52},[49,113826,1739],{"class":73},[49,113828,103741],{"class":51831},[49,113830,15617],{"class":55},[49,113832,78],{"class":73},[49,113834,112490],{"class":59},[49,113836,101637],{"class":55},[49,113838,78],{"class":73},[49,113840,113841],{"class":59},"\"0.5 0 0.4\"",[49,113843,113844],{"class":73}," ...\u002F>\n",[14,113846,113847,113848,113850],{},"它直接挂在 ",[46,113849,102372],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[18,113852,113853],{"id":113853},"机械臂不像真实机械臂",[14,113855,113856],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[782,113858,103138],{"id":103137},[14,113860,113861],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113863,113864],{},"核心公式：",[40,113866,113869],{"className":113867,"code":113868,"language":5884,"meta":27},[5882],"distance = ||tip - target||\nreward = -distance - action_cost\n",[46,113870,113868],{"__ignoreMap":27},[14,113872,113873],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[757,113875,113876],{},"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":27,"searchDepth":63,"depth":63,"links":113878},[113879,113880,113881,113886,113890,113891,113892,113900],{"id":101177,"depth":63,"text":101178},{"id":101300,"depth":63,"text":101301},{"id":101575,"depth":63,"text":101576,"children":113882},[113883,113884,113885],{"id":112082,"depth":70,"text":112083},{"id":112158,"depth":70,"text":112158},{"id":112188,"depth":70,"text":112189},{"id":101783,"depth":63,"text":101784,"children":113887},[113888,113889],{"id":102103,"depth":70,"text":102103},{"id":102239,"depth":70,"text":102239},{"id":102846,"depth":63,"text":102847},{"id":102878,"depth":63,"text":102879},{"id":102983,"depth":63,"text":102984,"children":113893},[113894,113895,113896,113897,113898,113899],{"id":113729,"depth":70,"text":113732},{"id":113744,"depth":70,"text":113744},{"id":113769,"depth":70,"text":113769},{"id":113781,"depth":70,"text":113782},{"id":113814,"depth":70,"text":113814},{"id":113853,"depth":70,"text":113853},{"id":103137,"depth":63,"text":103138},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111886,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113907,"title":113908,"body":113909,"description":27,"extension":766,"meta":117371,"navigation":398,"path":117372,"seo":117373,"stem":117374,"__hash__":117375},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113910,"toc":117342},[113911,113914,113916,113919,113922,113947,113950,113956,113959,113965,113967,113969,113993,113995,114013,114015,114058,114060,114087,114089,114092,114144,114147,114153,114162,114165,114203,114206,114245,114248,114256,114263,114266,114272,114274,114328,114335,114380,114383,114387,114403,114413,114415,115676,115678,115690,115692,115703,115705,115708,115729,115732,115735,115768,115774,115777,115810,115813,115816,115857,115862,115876,115879,115892,115897,115920,115922,115937,115947,115962,115969,115989,116004,116022,116025,116042,116050,116066,116072,116104,116117,116149,116159,116194,116208,116254,116268,116310,116321,116334,116340,116373,116376,116403,116413,116453,116463,116480,116487,116505,116508,116549,116562,116577,116580,116603,116606,116618,116621,116640,116645,116666,116669,116684,116687,116721,116733,116748,116751,116776,116779,116798,116801,116833,116836,116860,116866,116896,116903,116916,116919,116921,116923,116929,116932,116935,116947,116950,116952,117006,117008,117012,117018,117027,117030,117037,117039,117062,117065,117069,117071,117089,117095,117097,117130,117133,117139,117143,117146,117166,117171,117175,117182,117202,117207,117211,117214,117234,117237,117323,117327,117330,117336,117339],[10,113912,113908],{"id":113913},"_8gymnasium-风格强化学习接口基础",[782,113915,101178],{"id":101177},[14,113917,113918],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113920,113921],{},"你将实现:",[40,113923,113925],{"className":30909,"code":113924,"language":30911,"meta":27,"style":27},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[46,113926,113927,113937],{"__ignoreMap":27},[49,113928,113929,113932,113934],{"class":51,"line":52},[49,113930,113931],{"class":73},"obs, info ",[49,113933,78],{"class":77},[49,113935,113936],{"class":73}," env.reset()\n",[49,113938,113939,113942,113944],{"class":51,"line":63},[49,113940,113941],{"class":73},"obs, reward, terminated, truncated, info ",[49,113943,78],{"class":77},[49,113945,113946],{"class":73}," env.step(action)\n",[14,113948,113949],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113951,113952,113953,113955],{},"前面章节的代码都是“脚本式”的：在 ",[46,113954,102826],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113957,113958],{},"可以先记住 Gymnasium 环境的核心交互：",[40,113960,113963],{"className":113961,"code":113962,"language":5884,"meta":27},[5882],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[46,113964,113962],{"__ignoreMap":27},[782,113966,101301],{"id":101300},[14,113968,101304],{},[40,113970,113971],{"className":42,"code":104919,"language":44,"meta":27,"style":27},[46,113972,113973],{"__ignoreMap":27},[49,113974,113975,113977,113979,113981,113983,113985,113987,113989,113991],{"class":51,"line":52},[49,113976,264],{"class":55},[49,113978,384],{"class":59},[49,113980,269],{"class":59},[49,113982,272],{"class":159},[49,113984,104934],{"class":59},[49,113986,101329],{"class":59},[49,113988,103032],{"class":59},[49,113990,101345],{"class":59},[49,113992,104943],{"class":59},[14,113994,103350],{},[40,113996,113998],{"className":42,"code":113997,"language":44,"meta":27,"style":27},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[46,113999,114000],{"__ignoreMap":27},[49,114001,114002,114004,114006,114008,114010],{"class":51,"line":52},[49,114003,24524],{"class":55},[49,114005,269],{"class":59},[49,114007,101461],{"class":59},[49,114009,108242],{"class":59},[49,114011,114012],{"class":59}," gymnasium\n",[14,114014,103367],{},[40,114016,114018],{"className":42,"code":114017,"language":44,"meta":27,"style":27},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[46,114019,114020,114037,114046],{"__ignoreMap":27},[49,114021,114022,114024,114026,114028,114031,114033,114035],{"class":51,"line":52},[49,114023,30861],{"class":55},[49,114025,29707],{"class":59},[49,114027,25804],{"class":159},[49,114029,114030],{"class":59}," mujoco-gym-api",[49,114032,101506],{"class":59},[49,114034,101509],{"class":159},[49,114036,101512],{"class":159},[49,114038,114039,114041,114043],{"class":51,"line":63},[49,114040,30861],{"class":55},[49,114042,101519],{"class":59},[49,114044,114045],{"class":59}," mujoco-gym-api\n",[49,114047,114048,114050,114052,114054,114056],{"class":51,"line":70},[49,114049,24524],{"class":55},[49,114051,269],{"class":59},[49,114053,101461],{"class":59},[49,114055,108242],{"class":59},[49,114057,114012],{"class":59},[14,114059,101535],{},[30,114061,114062,114072,114075,114081],{},[33,114063,114064,114065,114068,114069,28916],{},"本章使用 ",[46,114066,114067],{},"gymnasium","，不是旧版 ",[46,114070,114071],{},"gym",[33,114073,114074],{},"Gymnasium API 与旧 Gym API 有差异。",[33,114076,114077,114078,28916],{},"旧 Gym 常见返回值是 4 个: ",[46,114079,114080],{},"obs, reward, done, info",[33,114082,114083,114084,28916],{},"Gymnasium 返回值是 5 个: ",[46,114085,114086],{},"obs, reward, terminated, truncated, info",[782,114088,101576],{"id":101575},[14,114090,114091],{},"强化学习环境接口包含:",[610,114093,114094,114103],{},[613,114095,114096],{},[616,114097,114098,114101],{},[619,114099,114100],{"align":621},"方法",[619,114102,103227],{"align":621},[633,114104,114105,114115,114125,114135],{},[616,114106,114107,114112],{},[638,114108,114109],{"align":621},[46,114110,114111],{},"reset()",[638,114113,114114],{"align":621},"重置环境",[616,114116,114117,114122],{},[638,114118,114119],{"align":621},[46,114120,114121],{},"step(action)",[638,114123,114124],{"align":621},"执行动作",[616,114126,114127,114132],{},[638,114128,114129],{"align":621},[46,114130,114131],{},"observation_space",[638,114133,114134],{"align":621},"观测空间",[616,114136,114137,114142],{},[638,114138,114139],{"align":621},[46,114140,114141],{},"action_space",[638,114143,24350],{"align":621},[14,114145,114146],{},"一个最小环境需要完成:",[40,114148,114151],{"className":114149,"code":114150,"language":5884,"meta":27},[5882],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[46,114152,114150],{"__ignoreMap":27},[18,114154,114156,101549,114159,105169],{"id":114155},"terminated-和-truncated-的区别",[46,114157,114158],{},"terminated",[46,114160,114161],{},"truncated",[14,114163,114164],{},"Gymnasium 把“结束”拆成两个概念：",[610,114166,114167,114177],{},[613,114168,114169],{},[616,114170,114171,114173,114175],{},[619,114172,105105],{"align":621},[619,114174,101231],{"align":621},[619,114176,21884],{"align":621},[633,114178,114179,114191],{},[616,114180,114181,114185,114188],{},[638,114182,114183],{"align":621},[46,114184,114158],{},[638,114186,114187],{"align":621},"任务自然结束",[638,114189,114190],{"align":621},"机械臂到达目标、机器人摔倒",[616,114192,114193,114197,114200],{},[638,114194,114195],{"align":621},[46,114196,114161],{},[638,114198,114199],{"align":621},"因外部限制截断",[638,114201,114202],{"align":621},"达到最大步数、时间限制",[14,114204,114205],{},"本章中：",[40,114207,114209],{"className":30909,"code":114208,"language":30911,"meta":27,"style":27},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[46,114210,114211,114226],{"__ignoreMap":27},[49,114212,114213,114216,114218,114221,114223],{"class":51,"line":52},[49,114214,114215],{"class":73},"terminated ",[49,114217,78],{"class":77},[49,114219,114220],{"class":73}," dist ",[49,114222,1739],{"class":77},[49,114224,114225],{"class":159}," 0.05\n",[49,114227,114228,114231,114233,114235,114238,114240,114242],{"class":51,"line":63},[49,114229,114230],{"class":73},"truncated ",[49,114232,78],{"class":77},[49,114234,39404],{"class":159},[49,114236,114237],{"class":73},".steps ",[49,114239,2409],{"class":77},[49,114241,39404],{"class":159},[49,114243,114244],{"class":73},".max_steps\n",[14,114246,114247],{},"也就是：",[30,114249,114250,114253],{},[33,114251,114252],{},"末端距离目标小于 0.05，任务成功结束。",[33,114254,114255],{},"步数超过上限，episode 被截断。",[18,114257,114259,101549,114261],{"id":114258},"observation_space-和-action_space",[46,114260,114131],{},[46,114262,114141],{},[14,114264,114265],{},"这两个对象告诉算法：",[40,114267,114270],{"className":114268,"code":114269,"language":5884,"meta":27},[5882],"观测长什么样\n动作允许多大\n",[46,114271,114269],{"__ignoreMap":27},[14,114273,15330],{},[40,114275,114277],{"className":30909,"code":114276,"language":30911,"meta":27,"style":27},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[46,114278,114279],{"__ignoreMap":27},[49,114280,114281,114283,114286,114288,114291,114294,114297,114299,114301,114304,114306,114308,114310,114312,114314,114316,114318,114321,114323,114325],{"class":51,"line":52},[49,114282,31354],{"class":159},[49,114284,114285],{"class":73},".action_space ",[49,114287,78],{"class":77},[49,114289,114290],{"class":73}," spaces.Box(",[49,114292,114293],{"class":5913},"low",[49,114295,114296],{"class":77},"=-",[49,114298,102934],{"class":159},[49,114300,13132],{"class":73},[49,114302,114303],{"class":5913},"high",[49,114305,78],{"class":77},[49,114307,102934],{"class":159},[49,114309,13132],{"class":73},[49,114311,96494],{"class":5913},[49,114313,78],{"class":77},[49,114315,841],{"class":73},[49,114317,915],{"class":159},[49,114319,114320],{"class":73},",), ",[49,114322,94031],{"class":5913},[49,114324,78],{"class":77},[49,114326,114327],{"class":73},"np.float32)\n",[14,114329,114330,114331,114334],{},"表示动作是 2 维数组，每个值都在 ",[46,114332,114333],{},"[-1, 1]"," 范围内。",[40,114336,114338],{"className":30909,"code":114337,"language":30911,"meta":27,"style":27},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[46,114339,114340],{"__ignoreMap":27},[49,114341,114342,114344,114347,114349,114351,114353,114355,114358,114360,114362,114364,114366,114368,114370,114372,114374,114376,114378],{"class":51,"line":52},[49,114343,31354],{"class":159},[49,114345,114346],{"class":73},".observation_space ",[49,114348,78],{"class":77},[49,114350,114290],{"class":73},[49,114352,114293],{"class":5913},[49,114354,114296],{"class":77},[49,114356,114357],{"class":73},"np.inf, ",[49,114359,114303],{"class":5913},[49,114361,78],{"class":77},[49,114363,114357],{"class":73},[49,114365,96494],{"class":5913},[49,114367,78],{"class":77},[49,114369,841],{"class":73},[49,114371,1275],{"class":159},[49,114373,114320],{"class":73},[49,114375,94031],{"class":5913},[49,114377,78],{"class":77},[49,114379,114327],{"class":73},[14,114381,114382],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[18,114384,114386],{"id":114385},"frame_skip-是什么","frame_skip 是什么",[40,114388,114390],{"className":30909,"code":114389,"language":30911,"meta":27,"style":27},"self.frame_skip = 5\n",[46,114391,114392],{"__ignoreMap":27},[49,114393,114394,114396,114399,114401],{"class":51,"line":52},[49,114395,31354],{"class":159},[49,114397,114398],{"class":73},".frame_skip ",[49,114400,78],{"class":77},[49,114402,54958],{"class":159},[14,114404,114405,114406,114409,114410,114412],{},"表示外部调用一次 ",[46,114407,114408],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[46,114411,101746],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[782,114414,101784],{"id":101783},[40,114416,114418],{"className":30909,"code":114417,"language":30911,"meta":27,"style":27},"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",[46,114419,114420,114432,114438,114448,114459,114463,114467,114475,114480,114484,114488,114492,114496,114500,114504,114508,114513,114517,114521,114525,114530,114534,114538,114542,114546,114550,114554,114558,114562,114566,114570,114574,114578,114582,114600,114615,114619,114632,114642,114657,114674,114678,114699,114718,114743,114757,114761,114771,114783,114793,114797,114839,114877,114881,114891,114907,114922,114941,114948,114952,114965,114980,114995,115008,115027,115043,115047,115088,115103,115118,115122,115161,115172,115185,115189,115199,115208,115212,115222,115237,115255,115259,115270,115287,115300,115304,115314,115318,115329,115340,115344,115358,115372,115388,115392,115405,115422,115437,115444,115448,115452,115464,115474,115492,115504,115516,115520,115528,115544,115553,115562,115570,115612,115625,115630,115634,115652,115656,115660,115672],{"__ignoreMap":27},[49,114421,114422,114424,114427,114429],{"class":51,"line":52},[49,114423,30923],{"class":77},[49,114425,114426],{"class":73}," gymnasium ",[49,114428,31914],{"class":77},[49,114430,114431],{"class":73}," gym\n",[49,114433,114434,114436],{"class":51,"line":63},[49,114435,30923],{"class":77},[49,114437,101832],{"class":73},[49,114439,114440,114442,114444,114446],{"class":51,"line":70},[49,114441,30923],{"class":77},[49,114443,31911],{"class":73},[49,114445,31914],{"class":77},[49,114447,31917],{"class":73},[49,114449,114450,114452,114454,114456],{"class":51,"line":219},[49,114451,31268],{"class":77},[49,114453,114426],{"class":73},[49,114455,30923],{"class":77},[49,114457,114458],{"class":73}," spaces\n",[49,114460,114461],{"class":51,"line":233},[49,114462,399],{"emptyLinePlaceholder":398},[49,114464,114465],{"class":51,"line":241},[49,114466,399],{"emptyLinePlaceholder":398},[49,114468,114469,114471,114473],{"class":51,"line":1920},[49,114470,101845],{"class":159},[49,114472,14261],{"class":77},[49,114474,101850],{"class":59},[49,114476,114477],{"class":51,"line":2011},[49,114478,114479],{"class":59},"\u003Cmujoco model=\"gym_reacher\">\n",[49,114481,114482],{"class":51,"line":2017},[49,114483,112269],{"class":59},[49,114485,114486],{"class":51,"line":2029},[49,114487,399],{"emptyLinePlaceholder":398},[49,114489,114490],{"class":51,"line":2311},[49,114491,101869],{"class":59},[49,114493,114494],{"class":51,"line":2316},[49,114495,112287],{"class":59},[49,114497,114498],{"class":51,"line":2322},[49,114499,399],{"emptyLinePlaceholder":398},[49,114501,114502],{"class":51,"line":2327},[49,114503,112296],{"class":59},[49,114505,114506],{"class":51,"line":2341},[49,114507,112301],{"class":59},[49,114509,114510],{"class":51,"line":2346},[49,114511,114512],{"class":59},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[49,114514,114515],{"class":51,"line":2352},[49,114516,399],{"emptyLinePlaceholder":398},[49,114518,114519],{"class":51,"line":2373},[49,114520,112315],{"class":59},[49,114522,114523],{"class":51,"line":2378},[49,114524,112320],{"class":59},[49,114526,114527],{"class":51,"line":2392},[49,114528,114529],{"class":59},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[49,114531,114532],{"class":51,"line":2397},[49,114533,112330],{"class":59},[49,114535,114536],{"class":51,"line":2426},[49,114537,106969],{"class":59},[49,114539,114540],{"class":51,"line":2431},[49,114541,101898],{"class":59},[49,114543,114544],{"class":51,"line":2448},[49,114545,101903],{"class":59},[49,114547,114548],{"class":51,"line":2453},[49,114549,399],{"emptyLinePlaceholder":398},[49,114551,114552],{"class":51,"line":2458},[49,114553,106986],{"class":59},[49,114555,114556],{"class":51,"line":2463},[49,114557,112355],{"class":59},[49,114559,114560],{"class":51,"line":2477},[49,114561,112360],{"class":59},[49,114563,114564],{"class":51,"line":2482},[49,114565,106996],{"class":59},[49,114567,114568],{"class":51,"line":3274},[49,114569,101908],{"class":59},[49,114571,114572],{"class":51,"line":3288},[49,114573,96229],{"class":59},[49,114575,114576],{"class":51,"line":3296},[49,114577,399],{"emptyLinePlaceholder":398},[49,114579,114580],{"class":51,"line":3301},[49,114581,399],{"emptyLinePlaceholder":398},[49,114583,114584,114586,114589,114591,114593,114595,114598],{"class":51,"line":3307},[49,114585,15391],{"class":77},[49,114587,114588],{"class":55}," ReacherEnv",[49,114590,841],{"class":73},[49,114592,114071],{"class":55},[49,114594,1387],{"class":73},[49,114596,114597],{"class":55},"Env",[49,114599,31317],{"class":73},[49,114601,114602,114605,114607,114609,114612],{"class":51,"line":3313},[49,114603,114604],{"class":73},"    metadata ",[49,114606,78],{"class":77},[49,114608,5145],{"class":73},[49,114610,114611],{"class":59},"\"render_modes\"",[49,114613,114614],{"class":73},": []}\n",[49,114616,114617],{"class":51,"line":3318},[49,114618,399],{"emptyLinePlaceholder":398},[49,114620,114621,114623,114625,114628,114630],{"class":51,"line":8645},[49,114622,31332],{"class":77},[49,114624,31335],{"class":159},[49,114626,114627],{"class":73},"(self) -> ",[49,114629,96217],{"class":159},[49,114631,4436],{"class":73},[49,114633,114634,114636,114638,114640],{"class":51,"line":8669},[49,114635,31348],{"class":159},[49,114637,17958],{"class":73},[49,114639,31360],{"class":159},[49,114641,2674],{"class":73},[49,114643,114644,114646,114649,114651,114653,114655],{"class":51,"line":8674},[49,114645,31376],{"class":159},[49,114647,114648],{"class":73},".model ",[49,114650,78],{"class":77},[49,114652,101943],{"class":73},[49,114654,101845],{"class":159},[49,114656,847],{"class":73},[49,114658,114659,114661,114664,114666,114669,114671],{"class":51,"line":8680},[49,114660,31376],{"class":159},[49,114662,114663],{"class":73},".data ",[49,114665,78],{"class":77},[49,114667,114668],{"class":73}," mujoco.MjData(",[49,114670,31354],{"class":159},[49,114672,114673],{"class":73},".model)\n",[49,114675,114676],{"class":51,"line":8707},[49,114677,399],{"emptyLinePlaceholder":398},[49,114679,114680,114682,114685,114687,114690,114692,114695,114697],{"class":51,"line":8712},[49,114681,31376],{"class":159},[49,114683,114684],{"class":73},".tip_site_id ",[49,114686,78],{"class":77},[49,114688,114689],{"class":73}," mujoco.mj_name2id(",[49,114691,31354],{"class":159},[49,114693,114694],{"class":73},".model, mujoco.mjtObj.mjOBJ_SITE, ",[49,114696,112067],{"class":59},[49,114698,847],{"class":73},[49,114700,114701,114703,114706,114708,114710,114712,114714,114716],{"class":51,"line":8718},[49,114702,31376],{"class":159},[49,114704,114705],{"class":73},".target_site_id ",[49,114707,78],{"class":77},[49,114709,114689],{"class":73},[49,114711,31354],{"class":159},[49,114713,114694],{"class":73},[49,114715,112490],{"class":59},[49,114717,847],{"class":73},[49,114719,114720,114722,114724,114726,114728,114730,114733,114735,114737,114739,114741],{"class":51,"line":8730},[49,114721,3194],{"class":77},[49,114723,39404],{"class":159},[49,114725,114684],{"class":73},[49,114727,1739],{"class":77},[49,114729,4790],{"class":159},[49,114731,114732],{"class":77}," or",[49,114734,39404],{"class":159},[49,114736,114705],{"class":73},[49,114738,1739],{"class":77},[49,114740,4790],{"class":159},[49,114742,4436],{"class":73},[49,114744,114745,114748,114750,114752,114755],{"class":51,"line":8742},[49,114746,114747],{"class":77},"            raise",[49,114749,103966],{"class":159},[49,114751,841],{"class":73},[49,114753,114754],{"class":59},"\"required sites not found\"",[49,114756,847],{"class":73},[49,114758,114759],{"class":51,"line":8754},[49,114760,399],{"emptyLinePlaceholder":398},[49,114762,114763,114765,114767,114769],{"class":51,"line":10413},[49,114764,31376],{"class":159},[49,114766,114398],{"class":73},[49,114768,78],{"class":77},[49,114770,54958],{"class":159},[49,114772,114773,114775,114778,114780],{"class":51,"line":10438},[49,114774,31376],{"class":159},[49,114776,114777],{"class":73},".max_steps ",[49,114779,78],{"class":77},[49,114781,114782],{"class":159}," 200\n",[49,114784,114785,114787,114789,114791],{"class":51,"line":10461},[49,114786,31376],{"class":159},[49,114788,114237],{"class":73},[49,114790,78],{"class":77},[49,114792,47864],{"class":159},[49,114794,114795],{"class":51,"line":10485},[49,114796,399],{"emptyLinePlaceholder":398},[49,114798,114799,114801,114803,114805,114807,114809,114811,114813,114815,114817,114819,114821,114823,114825,114827,114829,114831,114833,114835,114837],{"class":51,"line":10490},[49,114800,31376],{"class":159},[49,114802,114285],{"class":73},[49,114804,78],{"class":77},[49,114806,114290],{"class":73},[49,114808,114293],{"class":5913},[49,114810,114296],{"class":77},[49,114812,102934],{"class":159},[49,114814,13132],{"class":73},[49,114816,114303],{"class":5913},[49,114818,78],{"class":77},[49,114820,102934],{"class":159},[49,114822,13132],{"class":73},[49,114824,96494],{"class":5913},[49,114826,78],{"class":77},[49,114828,841],{"class":73},[49,114830,915],{"class":159},[49,114832,114320],{"class":73},[49,114834,94031],{"class":5913},[49,114836,78],{"class":77},[49,114838,114327],{"class":73},[49,114840,114841,114843,114845,114847,114849,114851,114853,114855,114857,114859,114861,114863,114865,114867,114869,114871,114873,114875],{"class":51,"line":10495},[49,114842,31376],{"class":159},[49,114844,114346],{"class":73},[49,114846,78],{"class":77},[49,114848,114290],{"class":73},[49,114850,114293],{"class":5913},[49,114852,114296],{"class":77},[49,114854,114357],{"class":73},[49,114856,114303],{"class":5913},[49,114858,78],{"class":77},[49,114860,114357],{"class":73},[49,114862,96494],{"class":5913},[49,114864,78],{"class":77},[49,114866,841],{"class":73},[49,114868,1275],{"class":159},[49,114870,114320],{"class":73},[49,114872,94031],{"class":5913},[49,114874,78],{"class":77},[49,114876,114327],{"class":73},[49,114878,114879],{"class":51,"line":10500},[49,114880,399],{"emptyLinePlaceholder":398},[49,114882,114883,114885,114888],{"class":51,"line":10509},[49,114884,31332],{"class":77},[49,114886,114887],{"class":55}," _get_obs",[49,114889,114890],{"class":73},"(self) -> np.ndarray:\n",[49,114892,114893,114895,114897,114899,114902,114904],{"class":51,"line":10514},[49,114894,112668],{"class":73},[49,114896,78],{"class":77},[49,114898,39404],{"class":159},[49,114900,114901],{"class":73},".data.site_xpos[",[49,114903,31354],{"class":159},[49,114905,114906],{"class":73},".tip_site_id].copy()\n",[49,114908,114909,114911,114913,114915,114917,114919],{"class":51,"line":10520},[49,114910,112681],{"class":73},[49,114912,78],{"class":77},[49,114914,39404],{"class":159},[49,114916,114901],{"class":73},[49,114918,31354],{"class":159},[49,114920,114921],{"class":73},".target_site_id].copy()\n",[49,114923,114924,114926,114928,114931,114933,114936,114938],{"class":51,"line":10541},[49,114925,110713],{"class":73},[49,114927,78],{"class":77},[49,114929,114930],{"class":73}," np.concatenate([",[49,114932,31354],{"class":159},[49,114934,114935],{"class":73},".data.qpos.copy(), ",[49,114937,31354],{"class":159},[49,114939,114940],{"class":73},".data.qvel.copy(), tip, target])\n",[49,114942,114943,114945],{"class":51,"line":10547},[49,114944,15449],{"class":77},[49,114946,114947],{"class":73}," obs.astype(np.float32)\n",[49,114949,114950],{"class":51,"line":10561},[49,114951,399],{"emptyLinePlaceholder":398},[49,114953,114954,114956,114959,114961,114963],{"class":51,"line":10567},[49,114955,31332],{"class":77},[49,114957,114958],{"class":55}," _get_reward",[49,114960,114627],{"class":73},[49,114962,880],{"class":159},[49,114964,4436],{"class":73},[49,114966,114967,114969,114971,114973,114975,114977],{"class":51,"line":10594},[49,114968,112668],{"class":73},[49,114970,78],{"class":77},[49,114972,39404],{"class":159},[49,114974,114901],{"class":73},[49,114976,31354],{"class":159},[49,114978,114979],{"class":73},".tip_site_id]\n",[49,114981,114982,114984,114986,114988,114990,114992],{"class":51,"line":10603},[49,114983,112681],{"class":73},[49,114985,78],{"class":77},[49,114987,39404],{"class":159},[49,114989,114901],{"class":73},[49,114991,31354],{"class":159},[49,114993,114994],{"class":73},".target_site_id]\n",[49,114996,114997,115000,115002,115004,115006],{"class":51,"line":10609},[49,114998,114999],{"class":73},"        dist ",[49,115001,78],{"class":77},[49,115003,112132],{"class":73},[49,115005,1361],{"class":77},[49,115007,112137],{"class":73},[49,115009,115010,115013,115015,115017,115019,115022,115024],{"class":51,"line":10617},[49,115011,115012],{"class":73},"        control_cost ",[49,115014,78],{"class":77},[49,115016,112568],{"class":159},[49,115018,7215],{"class":77},[49,115020,115021],{"class":73}," np.sum(np.square(",[49,115023,31354],{"class":159},[49,115025,115026],{"class":73},".data.ctrl))\n",[49,115028,115029,115031,115033,115035,115037,115039,115041],{"class":51,"line":10622},[49,115030,15449],{"class":77},[49,115032,110328],{"class":159},[49,115034,841],{"class":73},[49,115036,1361],{"class":77},[49,115038,112127],{"class":73},[49,115040,1361],{"class":77},[49,115042,112590],{"class":73},[49,115044,115045],{"class":51,"line":17301},[49,115046,399],{"emptyLinePlaceholder":398},[49,115048,115049,115051,115054,115057,115059,115062,115064,115066,115068,115070,115072,115075,115078,115080,115082,115084,115086],{"class":51,"line":17307},[49,115050,31332],{"class":77},[49,115052,115053],{"class":55}," reset",[49,115055,115056],{"class":73},"(self, ",[49,115058,1284],{"class":77},[49,115060,115061],{"class":73},", seed: ",[49,115063,844],{"class":159},[49,115065,166],{"class":77},[49,115067,39464],{"class":159},[49,115069,14261],{"class":77},[49,115071,39464],{"class":159},[49,115073,115074],{"class":73},", options: ",[49,115076,115077],{"class":159},"dict",[49,115079,166],{"class":77},[49,115081,39464],{"class":159},[49,115083,14261],{"class":77},[49,115085,39464],{"class":159},[49,115087,31317],{"class":73},[49,115089,115090,115092,115095,115098,115100],{"class":51,"line":17330},[49,115091,31348],{"class":159},[49,115093,115094],{"class":73},"().reset(",[49,115096,115097],{"class":5913},"seed",[49,115099,78],{"class":77},[49,115101,115102],{"class":73},"seed)\n",[49,115104,115105,115108,115110,115113,115115],{"class":51,"line":17336},[49,115106,115107],{"class":73},"        mujoco.mj_resetData(",[49,115109,31354],{"class":159},[49,115111,115112],{"class":73},".model, ",[49,115114,31354],{"class":159},[49,115116,115117],{"class":73},".data)\n",[49,115119,115120],{"class":51,"line":17359},[49,115121,399],{"emptyLinePlaceholder":398},[49,115123,115124,115126,115129,115131,115133,115136,115138,115140,115142,115144,115146,115148,115150,115152,115154,115156,115158],{"class":51,"line":17373},[49,115125,31376],{"class":159},[49,115127,115128],{"class":73},".data.qpos[:] ",[49,115130,78],{"class":77},[49,115132,39404],{"class":159},[49,115134,115135],{"class":73},".np_random.uniform(",[49,115137,114293],{"class":5913},[49,115139,114296],{"class":77},[49,115141,86741],{"class":159},[49,115143,13132],{"class":73},[49,115145,114303],{"class":5913},[49,115147,78],{"class":77},[49,115149,86741],{"class":159},[49,115151,13132],{"class":73},[49,115153,32027],{"class":5913},[49,115155,78],{"class":77},[49,115157,31354],{"class":159},[49,115159,115160],{"class":73},".model.nq)\n",[49,115162,115163,115165,115168,115170],{"class":51,"line":17393},[49,115164,31376],{"class":159},[49,115166,115167],{"class":73},".data.qvel[:] ",[49,115169,78],{"class":77},[49,115171,105292],{"class":159},[49,115173,115174,115177,115179,115181,115183],{"class":51,"line":17399},[49,115175,115176],{"class":73},"        mujoco.mj_forward(",[49,115178,31354],{"class":159},[49,115180,115112],{"class":73},[49,115182,31354],{"class":159},[49,115184,115117],{"class":73},[49,115186,115187],{"class":51,"line":17410},[49,115188,399],{"emptyLinePlaceholder":398},[49,115190,115191,115193,115195,115197],{"class":51,"line":17433},[49,115192,31376],{"class":159},[49,115194,114237],{"class":73},[49,115196,78],{"class":77},[49,115198,47864],{"class":159},[49,115200,115201,115203,115205],{"class":51,"line":17455},[49,115202,15449],{"class":77},[49,115204,39404],{"class":159},[49,115206,115207],{"class":73},"._get_obs(), {}\n",[49,115209,115210],{"class":51,"line":17460},[49,115211,399],{"emptyLinePlaceholder":398},[49,115213,115214,115216,115219],{"class":51,"line":17466},[49,115215,31332],{"class":77},[49,115217,115218],{"class":55}," step",[49,115220,115221],{"class":73},"(self, action):\n",[49,115223,115224,115226,115228,115231,115233,115235],{"class":51,"line":17480},[49,115225,110753],{"class":73},[49,115227,78],{"class":77},[49,115229,115230],{"class":73}," np.asarray(action, ",[49,115232,94031],{"class":5913},[49,115234,78],{"class":77},[49,115236,114327],{"class":73},[49,115238,115239,115241,115243,115245,115247,115250,115252],{"class":51,"line":17493},[49,115240,110753],{"class":73},[49,115242,78],{"class":77},[49,115244,107978],{"class":73},[49,115246,31354],{"class":159},[49,115248,115249],{"class":73},".action_space.low, ",[49,115251,31354],{"class":159},[49,115253,115254],{"class":73},".action_space.high)\n",[49,115256,115257],{"class":51,"line":17498},[49,115258,399],{"emptyLinePlaceholder":398},[49,115260,115261,115263,115266,115268],{"class":51,"line":17512},[49,115262,31376],{"class":159},[49,115264,115265],{"class":73},".data.ctrl[:] ",[49,115267,78],{"class":77},[49,115269,108001],{"class":73},[49,115271,115272,115274,115276,115278,115280,115282,115284],{"class":51,"line":17517},[49,115273,4100],{"class":77},[49,115275,102032],{"class":73},[49,115277,26732],{"class":77},[49,115279,32974],{"class":159},[49,115281,841],{"class":73},[49,115283,31354],{"class":159},[49,115285,115286],{"class":73},".frame_skip):\n",[49,115288,115289,115292,115294,115296,115298],{"class":51,"line":17523},[49,115290,115291],{"class":73},"            mujoco.mj_step(",[49,115293,31354],{"class":159},[49,115295,115112],{"class":73},[49,115297,31354],{"class":159},[49,115299,115117],{"class":73},[49,115301,115302],{"class":51,"line":17528},[49,115303,399],{"emptyLinePlaceholder":398},[49,115305,115306,115308,115310,115312],{"class":51,"line":17542},[49,115307,31376],{"class":159},[49,115309,114237],{"class":73},[49,115311,10174],{"class":77},[49,115313,56230],{"class":159},[49,115315,115316],{"class":51,"line":17547},[49,115317,399],{"emptyLinePlaceholder":398},[49,115319,115320,115322,115324,115326],{"class":51,"line":17552},[49,115321,110713],{"class":73},[49,115323,78],{"class":77},[49,115325,39404],{"class":159},[49,115327,115328],{"class":73},"._get_obs()\n",[49,115330,115331,115333,115335,115337],{"class":51,"line":17566},[49,115332,110818],{"class":73},[49,115334,78],{"class":77},[49,115336,39404],{"class":159},[49,115338,115339],{"class":73},"._get_reward()\n",[49,115341,115342],{"class":51,"line":17578},[49,115343,399],{"emptyLinePlaceholder":398},[49,115345,115346,115348,115350,115352,115354,115356],{"class":51,"line":17583},[49,115347,112668],{"class":73},[49,115349,78],{"class":77},[49,115351,39404],{"class":159},[49,115353,114901],{"class":73},[49,115355,31354],{"class":159},[49,115357,114979],{"class":73},[49,115359,115360,115362,115364,115366,115368,115370],{"class":51,"line":17596},[49,115361,112681],{"class":73},[49,115363,78],{"class":77},[49,115365,39404],{"class":159},[49,115367,114901],{"class":73},[49,115369,31354],{"class":159},[49,115371,114994],{"class":73},[49,115373,115374,115376,115378,115380,115383,115385],{"class":51,"line":17601},[49,115375,114999],{"class":73},[49,115377,78],{"class":77},[49,115379,110328],{"class":159},[49,115381,115382],{"class":73},"(np.linalg.norm(tip ",[49,115384,1361],{"class":77},[49,115386,115387],{"class":73}," target))\n",[49,115389,115390],{"class":51,"line":17606},[49,115391,399],{"emptyLinePlaceholder":398},[49,115393,115394,115397,115399,115401,115403],{"class":51,"line":17611},[49,115395,115396],{"class":73},"        terminated ",[49,115398,78],{"class":77},[49,115400,114220],{"class":73},[49,115402,1739],{"class":77},[49,115404,114225],{"class":159},[49,115406,115407,115410,115412,115414,115416,115418,115420],{"class":51,"line":17624},[49,115408,115409],{"class":73},"        truncated ",[49,115411,78],{"class":77},[49,115413,39404],{"class":159},[49,115415,114237],{"class":73},[49,115417,2409],{"class":77},[49,115419,39404],{"class":159},[49,115421,114244],{"class":73},[49,115423,115424,115427,115429,115431,115434],{"class":51,"line":17629},[49,115425,115426],{"class":73},"        info ",[49,115428,78],{"class":77},[49,115430,5145],{"class":73},[49,115432,115433],{"class":59},"\"distance\"",[49,115435,115436],{"class":73},": dist}\n",[49,115438,115439,115441],{"class":51,"line":33164},[49,115440,15449],{"class":77},[49,115442,115443],{"class":73}," obs, reward, terminated, truncated, info\n",[49,115445,115446],{"class":51,"line":33170},[49,115447,399],{"emptyLinePlaceholder":398},[49,115449,115450],{"class":51,"line":33176},[49,115451,399],{"emptyLinePlaceholder":398},[49,115453,115454,115456,115458,115460,115462],{"class":51,"line":33182},[49,115455,32478],{"class":77},[49,115457,2671],{"class":55},[49,115459,101929],{"class":73},[49,115461,96217],{"class":159},[49,115463,4436],{"class":73},[49,115465,115466,115469,115471],{"class":51,"line":33188},[49,115467,115468],{"class":73},"    env ",[49,115470,78],{"class":77},[49,115472,115473],{"class":73}," ReacherEnv()\n",[49,115475,115476,115479,115481,115484,115486,115488,115490],{"class":51,"line":33199},[49,115477,115478],{"class":73},"    obs, info ",[49,115480,78],{"class":77},[49,115482,115483],{"class":73}," env.reset(",[49,115485,115097],{"class":5913},[49,115487,78],{"class":77},[49,115489,1021],{"class":159},[49,115491,847],{"class":73},[49,115493,115494,115496,115498,115501],{"class":51,"line":33205},[49,115495,31830],{"class":159},[49,115497,841],{"class":73},[49,115499,115500],{"class":59},"\"initial obs shape:\"",[49,115502,115503],{"class":73},", obs.shape)\n",[49,115505,115506,115508,115510,115513],{"class":51,"line":33225},[49,115507,31830],{"class":159},[49,115509,841],{"class":73},[49,115511,115512],{"class":59},"\"initial info:\"",[49,115514,115515],{"class":73},", info)\n",[49,115517,115518],{"class":51,"line":33231},[49,115519,399],{"emptyLinePlaceholder":398},[49,115521,115522,115524,115526],{"class":51,"line":33242},[49,115523,110684],{"class":73},[49,115525,78],{"class":77},[49,115527,105292],{"class":159},[49,115529,115530,115532,115534,115536,115538,115540,115542],{"class":51,"line":33248},[49,115531,3898],{"class":77},[49,115533,32147],{"class":73},[49,115535,26732],{"class":77},[49,115537,32974],{"class":159},[49,115539,841],{"class":73},[49,115541,1529],{"class":159},[49,115543,31317],{"class":73},[49,115545,115546,115548,115550],{"class":51,"line":33254},[49,115547,110753],{"class":73},[49,115549,78],{"class":77},[49,115551,115552],{"class":73}," env.action_space.sample()\n",[49,115554,115555,115558,115560],{"class":51,"line":33260},[49,115556,115557],{"class":73},"        obs, reward, terminated, truncated, info ",[49,115559,78],{"class":77},[49,115561,113946],{"class":73},[49,115563,115564,115566,115568],{"class":51,"line":33266},[49,115565,110828],{"class":73},[49,115567,10174],{"class":77},[49,115569,110833],{"class":73},[49,115571,115572,115574,115576,115578,115580,115583,115585,115587,115590,115592,115594,115597,115599,115601,115604,115606,115608,115610],{"class":51,"line":33272},[49,115573,32982],{"class":159},[49,115575,841],{"class":73},[49,115577,110862],{"class":59},[49,115579,110865],{"class":73},[49,115581,115582],{"class":59},"\"reward:\"",[49,115584,13132],{"class":73},[49,115586,32549],{"class":159},[49,115588,115589],{"class":73},"(reward, ",[49,115591,909],{"class":159},[49,115593,110876],{"class":73},[49,115595,115596],{"class":59},"\"distance:\"",[49,115598,13132],{"class":73},[49,115600,32549],{"class":159},[49,115602,115603],{"class":73},"(info[",[49,115605,115433],{"class":59},[49,115607,112733],{"class":73},[49,115609,909],{"class":159},[49,115611,31028],{"class":73},[49,115613,115614,115616,115619,115622],{"class":51,"line":33278},[49,115615,3194],{"class":77},[49,115617,115618],{"class":73}," terminated ",[49,115620,115621],{"class":77},"or",[49,115623,115624],{"class":73}," truncated:\n",[49,115626,115627],{"class":51,"line":33284},[49,115628,115629],{"class":77},"            break\n",[49,115631,115632],{"class":51,"line":33304},[49,115633,399],{"emptyLinePlaceholder":398},[49,115635,115636,115638,115640,115642,115644,115646,115648,115650],{"class":51,"line":33310},[49,115637,31830],{"class":159},[49,115639,841],{"class":73},[49,115641,110907],{"class":59},[49,115643,13132],{"class":73},[49,115645,32549],{"class":159},[49,115647,110914],{"class":73},[49,115649,909],{"class":159},[49,115651,31028],{"class":73},[49,115653,115654],{"class":51,"line":33326},[49,115655,399],{"emptyLinePlaceholder":398},[49,115657,115658],{"class":51,"line":33332},[49,115659,399],{"emptyLinePlaceholder":398},[49,115661,115662,115664,115666,115668,115670],{"class":51,"line":33346},[49,115663,2230],{"class":77},[49,115665,31751],{"class":159},[49,115667,102090],{"class":77},[49,115669,102093],{"class":59},[49,115671,4436],{"class":73},[49,115673,115674],{"class":51,"line":33352},[49,115675,102100],{"class":73},[14,115677,104101],{},[40,115679,115681],{"className":42,"code":115680,"language":44,"meta":27,"style":27},"touch ch8_gym_env.py\n",[46,115682,115683],{"__ignoreMap":27},[49,115684,115685,115687],{"class":51,"line":52},[49,115686,101814],{"class":55},[49,115688,115689],{"class":59}," ch8_gym_env.py\n",[14,115691,110975],{},[40,115693,115695],{"className":42,"code":115694,"language":44,"meta":27,"style":27},"python ch8_gym_env.py\n",[46,115696,115697],{"__ignoreMap":27},[49,115698,115699,115701],{"class":51,"line":52},[49,115700,30911],{"class":55},[49,115702,115689],{"class":59},[18,115704,102103],{"id":102103},[14,115706,115707],{},"继承 Gymnasium 环境：",[40,115709,115711],{"className":30909,"code":115710,"language":30911,"meta":27,"style":27},"class ReacherEnv(gym.Env):\n",[46,115712,115713],{"__ignoreMap":27},[49,115714,115715,115717,115719,115721,115723,115725,115727],{"class":51,"line":52},[49,115716,15391],{"class":77},[49,115718,114588],{"class":55},[49,115720,841],{"class":73},[49,115722,114071],{"class":55},[49,115724,1387],{"class":73},[49,115726,114597],{"class":55},[49,115728,31317],{"class":73},[14,115730,115731],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115733,115734],{},"初始化模型：",[40,115736,115738],{"className":30909,"code":115737,"language":30911,"meta":27,"style":27},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[46,115739,115740,115754],{"__ignoreMap":27},[49,115741,115742,115744,115746,115748,115750,115752],{"class":51,"line":52},[49,115743,31354],{"class":159},[49,115745,114648],{"class":73},[49,115747,78],{"class":77},[49,115749,101943],{"class":73},[49,115751,101845],{"class":159},[49,115753,847],{"class":73},[49,115755,115756,115758,115760,115762,115764,115766],{"class":51,"line":63},[49,115757,31354],{"class":159},[49,115759,114663],{"class":73},[49,115761,78],{"class":77},[49,115763,114668],{"class":73},[49,115765,31354],{"class":159},[49,115767,114673],{"class":73},[14,115769,115770,115771,115773],{},"这和前面章节一样，只是现在放到了类的 ",[46,115772,31360],{}," 里。",[14,115775,115776],{},"缓存 site ID：",[40,115778,115780],{"className":30909,"code":115779,"language":30911,"meta":27,"style":27},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[46,115781,115782,115796],{"__ignoreMap":27},[49,115783,115784,115786,115788,115790,115792,115794],{"class":51,"line":52},[49,115785,31354],{"class":159},[49,115787,114684],{"class":73},[49,115789,78],{"class":77},[49,115791,114689],{"class":73},[49,115793,90085],{"class":159},[49,115795,847],{"class":73},[49,115797,115798,115800,115802,115804,115806,115808],{"class":51,"line":63},[49,115799,31354],{"class":159},[49,115801,114705],{"class":73},[49,115803,78],{"class":77},[49,115805,114689],{"class":73},[49,115807,90085],{"class":159},[49,115809,847],{"class":73},[14,115811,115812],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115814,115815],{},"reset：",[40,115817,115819],{"className":30909,"code":115818,"language":30911,"meta":27,"style":27},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[46,115820,115821],{"__ignoreMap":27},[49,115822,115823,115825,115827,115829,115831,115833,115835,115837,115839,115841,115843,115845,115847,115849,115851,115853,115855],{"class":51,"line":52},[49,115824,32478],{"class":77},[49,115826,115053],{"class":55},[49,115828,115056],{"class":73},[49,115830,1284],{"class":77},[49,115832,115061],{"class":73},[49,115834,844],{"class":159},[49,115836,166],{"class":77},[49,115838,39464],{"class":159},[49,115840,14261],{"class":77},[49,115842,39464],{"class":159},[49,115844,115074],{"class":73},[49,115846,115077],{"class":159},[49,115848,166],{"class":77},[49,115850,39464],{"class":159},[49,115852,14261],{"class":77},[49,115854,39464],{"class":159},[49,115856,31317],{"class":73},[14,115858,115859,115861],{},[46,115860,70587],{}," 做四件事：",[30,115863,115864,115867,115870,115873],{},[33,115865,115866],{},"设置随机种子。",[33,115868,115869],{},"重置 MuJoCo data。",[33,115871,115872],{},"随机初始化关节角。",[33,115874,115875],{},"返回初始观测和 info。",[14,115877,115878],{},"step：",[40,115880,115882],{"className":30909,"code":115881,"language":30911,"meta":27,"style":27},"def step(self, action):\n",[46,115883,115884],{"__ignoreMap":27},[49,115885,115886,115888,115890],{"class":51,"line":52},[49,115887,32478],{"class":77},[49,115889,115218],{"class":55},[49,115891,115221],{"class":73},[14,115893,115894,115896],{},[46,115895,107665],{}," 做六件事：",[30,115898,115899,115902,115908,115911,115914,115917],{},[33,115900,115901],{},"检查并裁剪 action。",[33,115903,115904,115905,28916],{},"写入 ",[46,115906,115907],{},"self.data.ctrl",[33,115909,115910],{},"连续推进若干个 MuJoCo 物理步。",[33,115912,115913],{},"计算新观测。",[33,115915,115916],{},"计算奖励和结束条件。",[33,115918,115919],{},"返回 Gymnasium 标准五元组。",[18,115921,102239],{"id":102239},[40,115923,115925],{"className":30909,"code":115924,"language":30911,"meta":27,"style":27},"import gymnasium as gym\n",[46,115926,115927],{"__ignoreMap":27},[49,115928,115929,115931,115933,115935],{"class":51,"line":52},[49,115930,30923],{"class":77},[49,115932,114426],{"class":73},[49,115934,31914],{"class":77},[49,115936,114431],{"class":73},[14,115938,115939,115940,115942,115943,115946],{},"导入 Gymnasium，并起别名 ",[46,115941,114071],{},"。后面写 ",[46,115944,115945],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[40,115948,115950],{"className":30909,"code":115949,"language":30911,"meta":27,"style":27},"from gymnasium import spaces\n",[46,115951,115952],{"__ignoreMap":27},[49,115953,115954,115956,115958,115960],{"class":51,"line":52},[49,115955,31268],{"class":77},[49,115957,114426],{"class":73},[49,115959,30923],{"class":77},[49,115961,114458],{"class":73},[14,115963,115964,115965,115968],{},"导入空间定义工具。",[46,115966,115967],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[40,115970,115971],{"className":30909,"code":115710,"language":30911,"meta":27,"style":27},[46,115972,115973],{"__ignoreMap":27},[49,115974,115975,115977,115979,115981,115983,115985,115987],{"class":51,"line":52},[49,115976,15391],{"class":77},[49,115978,114588],{"class":55},[49,115980,841],{"class":73},[49,115982,114071],{"class":55},[49,115984,1387],{"class":73},[49,115986,114597],{"class":55},[49,115988,31317],{"class":73},[14,115990,115991,115992,115995,115996,115998,115999,101549,116001,116003],{},"定义一个类，名字叫 ",[46,115993,115994],{},"ReacherEnv","。括号里的 ",[46,115997,115945],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[46,116000,70587],{},[46,116002,107665],{}," 这两个核心方法。",[40,116005,116007],{"className":30909,"code":116006,"language":30911,"meta":27,"style":27},"metadata = {\"render_modes\": []}\n",[46,116008,116009],{"__ignoreMap":27},[49,116010,116011,116014,116016,116018,116020],{"class":51,"line":52},[49,116012,116013],{"class":73},"metadata ",[49,116015,78],{"class":77},[49,116017,5145],{"class":73},[49,116019,114611],{"class":59},[49,116021,114614],{"class":73},[14,116023,116024],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[40,116026,116028],{"className":30909,"code":116027,"language":30911,"meta":27,"style":27},"def __init__(self) -> None:\n",[46,116029,116030],{"__ignoreMap":27},[49,116031,116032,116034,116036,116038,116040],{"class":51,"line":52},[49,116033,32478],{"class":77},[49,116035,31335],{"class":159},[49,116037,114627],{"class":73},[49,116039,96217],{"class":159},[49,116041,4436],{"class":73},[14,116043,116044,116046,116047,28916],{},[46,116045,31360],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[46,116048,116049],{},"env = ReacherEnv()",[40,116051,116053],{"className":30909,"code":116052,"language":30911,"meta":27,"style":27},"super().__init__()\n",[46,116054,116055],{"__ignoreMap":27},[49,116056,116057,116060,116062,116064],{"class":51,"line":52},[49,116058,116059],{"class":159},"super",[49,116061,17958],{"class":73},[49,116063,31360],{"class":159},[49,116065,2674],{"class":73},[14,116067,116068,116069,116071],{},"调用父类 ",[46,116070,115945],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[40,116073,116074],{"className":30909,"code":115737,"language":30911,"meta":27,"style":27},[46,116075,116076,116090],{"__ignoreMap":27},[49,116077,116078,116080,116082,116084,116086,116088],{"class":51,"line":52},[49,116079,31354],{"class":159},[49,116081,114648],{"class":73},[49,116083,78],{"class":77},[49,116085,101943],{"class":73},[49,116087,101845],{"class":159},[49,116089,847],{"class":73},[49,116091,116092,116094,116096,116098,116100,116102],{"class":51,"line":63},[49,116093,31354],{"class":159},[49,116095,114663],{"class":73},[49,116097,78],{"class":77},[49,116099,114668],{"class":73},[49,116101,31354],{"class":159},[49,116103,114673],{"class":73},[14,116105,116106,116107,116109,116110,101549,116113,116116],{},"把 MuJoCo 模型和状态保存到 ",[46,116108,31354],{}," 上。",[46,116111,116112],{},"self.model",[46,116114,116115],{},"self.data"," 表示这个环境对象自己的模型和状态。",[40,116118,116119],{"className":30909,"code":115779,"language":30911,"meta":27,"style":27},[46,116120,116121,116135],{"__ignoreMap":27},[49,116122,116123,116125,116127,116129,116131,116133],{"class":51,"line":52},[49,116124,31354],{"class":159},[49,116126,114684],{"class":73},[49,116128,78],{"class":77},[49,116130,114689],{"class":73},[49,116132,90085],{"class":159},[49,116134,847],{"class":73},[49,116136,116137,116139,116141,116143,116145,116147],{"class":51,"line":63},[49,116138,31354],{"class":159},[49,116140,114705],{"class":73},[49,116142,78],{"class":77},[49,116144,114689],{"class":73},[49,116146,90085],{"class":159},[49,116148,847],{"class":73},[14,116150,116151,116152,101549,116155,116158],{},"提前查好 tip 和 target 的 site ID。这样 ",[46,116153,116154],{},"_get_obs",[46,116156,116157],{},"_get_reward"," 里就不用每次按名字查找。",[40,116160,116162],{"className":30909,"code":116161,"language":30911,"meta":27,"style":27},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[46,116163,116164,116174,116184],{"__ignoreMap":27},[49,116165,116166,116168,116170,116172],{"class":51,"line":52},[49,116167,31354],{"class":159},[49,116169,114398],{"class":73},[49,116171,78],{"class":77},[49,116173,54958],{"class":159},[49,116175,116176,116178,116180,116182],{"class":51,"line":63},[49,116177,31354],{"class":159},[49,116179,114777],{"class":73},[49,116181,78],{"class":77},[49,116183,114782],{"class":159},[49,116185,116186,116188,116190,116192],{"class":51,"line":70},[49,116187,31354],{"class":159},[49,116189,114237],{"class":73},[49,116191,78],{"class":77},[49,116193,47864],{"class":159},[14,116195,116196,116199,116200,116203,116204,116207],{},[46,116197,116198],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[46,116201,116202],{},"max_steps"," 是一个 episode 最多运行多少步。",[46,116205,116206],{},"steps"," 记录当前 episode 已经走了多少步。",[40,116209,116210],{"className":30909,"code":114276,"language":30911,"meta":27,"style":27},[46,116211,116212],{"__ignoreMap":27},[49,116213,116214,116216,116218,116220,116222,116224,116226,116228,116230,116232,116234,116236,116238,116240,116242,116244,116246,116248,116250,116252],{"class":51,"line":52},[49,116215,31354],{"class":159},[49,116217,114285],{"class":73},[49,116219,78],{"class":77},[49,116221,114290],{"class":73},[49,116223,114293],{"class":5913},[49,116225,114296],{"class":77},[49,116227,102934],{"class":159},[49,116229,13132],{"class":73},[49,116231,114303],{"class":5913},[49,116233,78],{"class":77},[49,116235,102934],{"class":159},[49,116237,13132],{"class":73},[49,116239,96494],{"class":5913},[49,116241,78],{"class":77},[49,116243,841],{"class":73},[49,116245,915],{"class":159},[49,116247,114320],{"class":73},[49,116249,94031],{"class":5913},[49,116251,78],{"class":77},[49,116253,114327],{"class":73},[14,116255,116256,116257,116260,116261,101549,116264,116267],{},"定义动作空间。",[46,116258,116259],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[46,116262,116263],{},"low=-1.0",[46,116265,116266],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[40,116269,116270],{"className":30909,"code":114337,"language":30911,"meta":27,"style":27},[46,116271,116272],{"__ignoreMap":27},[49,116273,116274,116276,116278,116280,116282,116284,116286,116288,116290,116292,116294,116296,116298,116300,116302,116304,116306,116308],{"class":51,"line":52},[49,116275,31354],{"class":159},[49,116277,114346],{"class":73},[49,116279,78],{"class":77},[49,116281,114290],{"class":73},[49,116283,114293],{"class":5913},[49,116285,114296],{"class":77},[49,116287,114357],{"class":73},[49,116289,114303],{"class":5913},[49,116291,78],{"class":77},[49,116293,114357],{"class":73},[49,116295,96494],{"class":5913},[49,116297,78],{"class":77},[49,116299,841],{"class":73},[49,116301,1275],{"class":159},[49,116303,114320],{"class":73},[49,116305,94031],{"class":5913},[49,116307,78],{"class":77},[49,116309,114327],{"class":73},[14,116311,116312,116313,116316,116317,116320],{},"定义观测空间。",[46,116314,116315],{},"shape=(10,)"," 表示观测是 10 个数。",[46,116318,116319],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[40,116322,116324],{"className":30909,"code":116323,"language":30911,"meta":27,"style":27},"def _get_obs(self) -> np.ndarray:\n",[46,116325,116326],{"__ignoreMap":27},[49,116327,116328,116330,116332],{"class":51,"line":52},[49,116329,32478],{"class":77},[49,116331,114887],{"class":55},[49,116333,114890],{"class":73},[14,116335,116336,116337,116339],{},"定义内部函数，用来生成观测。函数名前面的 ",[46,116338,1821],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[40,116341,116343],{"className":30909,"code":116342,"language":30911,"meta":27,"style":27},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[46,116344,116345,116359],{"__ignoreMap":27},[49,116346,116347,116349,116351,116353,116355,116357],{"class":51,"line":52},[49,116348,112099],{"class":73},[49,116350,78],{"class":77},[49,116352,39404],{"class":159},[49,116354,114901],{"class":73},[49,116356,31354],{"class":159},[49,116358,114906],{"class":73},[49,116360,116361,116363,116365,116367,116369,116371],{"class":51,"line":63},[49,116362,112109],{"class":73},[49,116364,78],{"class":77},[49,116366,39404],{"class":159},[49,116368,114901],{"class":73},[49,116370,31354],{"class":159},[49,116372,114921],{"class":73},[14,116374,116375],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[40,116377,116379],{"className":30909,"code":116378,"language":30911,"meta":27,"style":27},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[46,116380,116381,116397],{"__ignoreMap":27},[49,116382,116383,116385,116387,116389,116391,116393,116395],{"class":51,"line":52},[49,116384,111385],{"class":73},[49,116386,78],{"class":77},[49,116388,114930],{"class":73},[49,116390,31354],{"class":159},[49,116392,114935],{"class":73},[49,116394,31354],{"class":159},[49,116396,114940],{"class":73},[49,116398,116399,116401],{"class":51,"line":63},[49,116400,17743],{"class":77},[49,116402,114947],{"class":73},[14,116404,116405,116406,116409,116410,116412],{},"拼接观测，并转换成 ",[46,116407,116408],{},"float32","。很多强化学习库默认使用 ",[46,116411,116408],{},"，所以这里主动转换。",[40,116414,116415],{"className":30909,"code":115818,"language":30911,"meta":27,"style":27},[46,116416,116417],{"__ignoreMap":27},[49,116418,116419,116421,116423,116425,116427,116429,116431,116433,116435,116437,116439,116441,116443,116445,116447,116449,116451],{"class":51,"line":52},[49,116420,32478],{"class":77},[49,116422,115053],{"class":55},[49,116424,115056],{"class":73},[49,116426,1284],{"class":77},[49,116428,115061],{"class":73},[49,116430,844],{"class":159},[49,116432,166],{"class":77},[49,116434,39464],{"class":159},[49,116436,14261],{"class":77},[49,116438,39464],{"class":159},[49,116440,115074],{"class":73},[49,116442,115077],{"class":159},[49,116444,166],{"class":77},[49,116446,39464],{"class":159},[49,116448,14261],{"class":77},[49,116450,39464],{"class":159},[49,116452,31317],{"class":73},[14,116454,116455,116456,116458,116459,116462],{},"定义 reset。",[46,116457,115097],{}," 用来控制随机数，保证实验可以复现。",[46,116460,116461],{},"options"," 用来接收额外配置，本章暂时不用。",[40,116464,116466],{"className":30909,"code":116465,"language":30911,"meta":27,"style":27},"super().reset(seed=seed)\n",[46,116467,116468],{"__ignoreMap":27},[49,116469,116470,116472,116474,116476,116478],{"class":51,"line":52},[49,116471,116059],{"class":159},[49,116473,115094],{"class":73},[49,116475,115097],{"class":5913},[49,116477,78],{"class":77},[49,116479,115102],{"class":73},[14,116481,116482,116483,116486],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[46,116484,116485],{},"self.np_random"," 生成可复现的随机数。",[40,116488,116490],{"className":30909,"code":116489,"language":30911,"meta":27,"style":27},"mujoco.mj_resetData(self.model, self.data)\n",[46,116491,116492],{"__ignoreMap":27},[49,116493,116494,116497,116499,116501,116503],{"class":51,"line":52},[49,116495,116496],{"class":73},"mujoco.mj_resetData(",[49,116498,31354],{"class":159},[49,116500,115112],{"class":73},[49,116502,31354],{"class":159},[49,116504,115117],{"class":73},[14,116506,116507],{},"把 MuJoCo 状态重置到默认状态。",[40,116509,116511],{"className":30909,"code":116510,"language":30911,"meta":27,"style":27},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[46,116512,116513],{"__ignoreMap":27},[49,116514,116515,116517,116519,116521,116523,116525,116527,116529,116531,116533,116535,116537,116539,116541,116543,116545,116547],{"class":51,"line":52},[49,116516,31354],{"class":159},[49,116518,115128],{"class":73},[49,116520,78],{"class":77},[49,116522,39404],{"class":159},[49,116524,115135],{"class":73},[49,116526,114293],{"class":5913},[49,116528,114296],{"class":77},[49,116530,86741],{"class":159},[49,116532,13132],{"class":73},[49,116534,114303],{"class":5913},[49,116536,78],{"class":77},[49,116538,86741],{"class":159},[49,116540,13132],{"class":73},[49,116542,32027],{"class":5913},[49,116544,78],{"class":77},[49,116546,31354],{"class":159},[49,116548,115160],{"class":73},[14,116550,115872,116551,116554,116555,116558,116559,116561],{},[46,116552,116553],{},"[:]"," 表示修改整个数组。",[46,116556,116557],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[46,116560,102681],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[40,116563,116565],{"className":30909,"code":116564,"language":30911,"meta":27,"style":27},"self.data.qvel[:] = 0.0\n",[46,116566,116567],{"__ignoreMap":27},[49,116568,116569,116571,116573,116575],{"class":51,"line":52},[49,116570,31354],{"class":159},[49,116572,115167],{"class":73},[49,116574,78],{"class":77},[49,116576,105292],{"class":159},[14,116578,116579],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[40,116581,116583],{"className":30909,"code":116582,"language":30911,"meta":27,"style":27},"self.steps = 0\nreturn self._get_obs(), {}\n",[46,116584,116585,116595],{"__ignoreMap":27},[49,116586,116587,116589,116591,116593],{"class":51,"line":52},[49,116588,31354],{"class":159},[49,116590,114237],{"class":73},[49,116592,78],{"class":77},[49,116594,47864],{"class":159},[49,116596,116597,116599,116601],{"class":51,"line":63},[49,116598,17743],{"class":77},[49,116600,39404],{"class":159},[49,116602,115207],{"class":73},[14,116604,116605],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[40,116607,116608],{"className":30909,"code":115881,"language":30911,"meta":27,"style":27},[46,116609,116610],{"__ignoreMap":27},[49,116611,116612,116614,116616],{"class":51,"line":52},[49,116613,32478],{"class":77},[49,116615,115218],{"class":55},[49,116617,115221],{"class":73},[14,116619,116620],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[40,116622,116624],{"className":30909,"code":116623,"language":30911,"meta":27,"style":27},"action = np.asarray(action, dtype=np.float32)\n",[46,116625,116626],{"__ignoreMap":27},[49,116627,116628,116630,116632,116634,116636,116638],{"class":51,"line":52},[49,116629,107973],{"class":73},[49,116631,78],{"class":77},[49,116633,115230],{"class":73},[49,116635,94031],{"class":5913},[49,116637,78],{"class":77},[49,116639,114327],{"class":73},[14,116641,116642,116643,28916],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[46,116644,116408],{},[40,116646,116648],{"className":30909,"code":116647,"language":30911,"meta":27,"style":27},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[46,116649,116650],{"__ignoreMap":27},[49,116651,116652,116654,116656,116658,116660,116662,116664],{"class":51,"line":52},[49,116653,107973],{"class":73},[49,116655,78],{"class":77},[49,116657,107978],{"class":73},[49,116659,31354],{"class":159},[49,116661,115249],{"class":73},[49,116663,31354],{"class":159},[49,116665,115254],{"class":73},[14,116667,116668],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[40,116670,116672],{"className":30909,"code":116671,"language":30911,"meta":27,"style":27},"self.data.ctrl[:] = action\n",[46,116673,116674],{"__ignoreMap":27},[49,116675,116676,116678,116680,116682],{"class":51,"line":52},[49,116677,31354],{"class":159},[49,116679,115265],{"class":73},[49,116681,78],{"class":77},[49,116683,108001],{"class":73},[14,116685,116686],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[40,116688,116690],{"className":30909,"code":116689,"language":30911,"meta":27,"style":27},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[46,116691,116692,116708],{"__ignoreMap":27},[49,116693,116694,116696,116698,116700,116702,116704,116706],{"class":51,"line":52},[49,116695,3722],{"class":77},[49,116697,102032],{"class":73},[49,116699,26732],{"class":77},[49,116701,32974],{"class":159},[49,116703,841],{"class":73},[49,116705,31354],{"class":159},[49,116707,115286],{"class":73},[49,116709,116710,116713,116715,116717,116719],{"class":51,"line":63},[49,116711,116712],{"class":73},"    mujoco.mj_step(",[49,116714,31354],{"class":159},[49,116716,115112],{"class":73},[49,116718,31354],{"class":159},[49,116720,115117],{"class":73},[14,116722,116723,116724,116727,116728,116730,116731,28916],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[46,116725,116726],{},"frame_skip=5","，所以外部调用一次 ",[46,116729,114408],{},"，内部实际执行 5 次 ",[46,116732,101746],{},[40,116734,116736],{"className":30909,"code":116735,"language":30911,"meta":27,"style":27},"self.steps += 1\n",[46,116737,116738],{"__ignoreMap":27},[49,116739,116740,116742,116744,116746],{"class":51,"line":52},[49,116741,31354],{"class":159},[49,116743,114237],{"class":73},[49,116745,10174],{"class":77},[49,116747,56230],{"class":159},[14,116749,116750],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[40,116752,116754],{"className":30909,"code":116753,"language":30911,"meta":27,"style":27},"obs = self._get_obs()\nreward = self._get_reward()\n",[46,116755,116756,116766],{"__ignoreMap":27},[49,116757,116758,116760,116762,116764],{"class":51,"line":52},[49,116759,111385],{"class":73},[49,116761,78],{"class":77},[49,116763,39404],{"class":159},[49,116765,115328],{"class":73},[49,116767,116768,116770,116772,116774],{"class":51,"line":63},[49,116769,111536],{"class":73},[49,116771,78],{"class":77},[49,116773,39404],{"class":159},[49,116775,115339],{"class":73},[14,116777,116778],{},"计算新的观测和奖励。",[40,116780,116782],{"className":30909,"code":116781,"language":30911,"meta":27,"style":27},"dist = float(np.linalg.norm(tip - target))\n",[46,116783,116784],{"__ignoreMap":27},[49,116785,116786,116788,116790,116792,116794,116796],{"class":51,"line":52},[49,116787,112127],{"class":73},[49,116789,78],{"class":77},[49,116791,110328],{"class":159},[49,116793,115382],{"class":73},[49,116795,1361],{"class":77},[49,116797,115387],{"class":73},[14,116799,116800],{},"计算末端到目标的距离，并转换成 Python float。",[40,116802,116803],{"className":30909,"code":114208,"language":30911,"meta":27,"style":27},[46,116804,116805,116817],{"__ignoreMap":27},[49,116806,116807,116809,116811,116813,116815],{"class":51,"line":52},[49,116808,114215],{"class":73},[49,116810,78],{"class":77},[49,116812,114220],{"class":73},[49,116814,1739],{"class":77},[49,116816,114225],{"class":159},[49,116818,116819,116821,116823,116825,116827,116829,116831],{"class":51,"line":63},[49,116820,114230],{"class":73},[49,116822,78],{"class":77},[49,116824,39404],{"class":159},[49,116826,114237],{"class":73},[49,116828,2409],{"class":77},[49,116830,39404],{"class":159},[49,116832,114244],{"class":73},[14,116834,116835],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[40,116837,116839],{"className":30909,"code":116838,"language":30911,"meta":27,"style":27},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[46,116840,116841,116854],{"__ignoreMap":27},[49,116842,116843,116846,116848,116850,116852],{"class":51,"line":52},[49,116844,116845],{"class":73},"info ",[49,116847,78],{"class":77},[49,116849,5145],{"class":73},[49,116851,115433],{"class":59},[49,116853,115436],{"class":73},[49,116855,116856,116858],{"class":51,"line":63},[49,116857,17743],{"class":77},[49,116859,115443],{"class":73},[14,116861,116862,116865],{},[46,116863,116864],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[40,116867,116869],{"className":30909,"code":116868,"language":30911,"meta":27,"style":27},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[46,116870,116871,116880],{"__ignoreMap":27},[49,116872,116873,116876,116878],{"class":51,"line":52},[49,116874,116875],{"class":73},"env ",[49,116877,78],{"class":77},[49,116879,115473],{"class":73},[49,116881,116882,116884,116886,116888,116890,116892,116894],{"class":51,"line":63},[49,116883,113931],{"class":73},[49,116885,78],{"class":77},[49,116887,115483],{"class":73},[49,116889,115097],{"class":5913},[49,116891,78],{"class":77},[49,116893,1021],{"class":159},[49,116895,847],{"class":73},[14,116897,116898,116899,116902],{},"创建环境并重置。",[46,116900,116901],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[40,116904,116906],{"className":30909,"code":116905,"language":30911,"meta":27,"style":27},"action = env.action_space.sample()\n",[46,116907,116908],{"__ignoreMap":27},[49,116909,116910,116912,116914],{"class":51,"line":52},[49,116911,107973],{"class":73},[49,116913,78],{"class":77},[49,116915,115552],{"class":73},[14,116917,116918],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[782,116920,102847],{"id":102846},[14,116922,106015],{},[40,116924,116927],{"className":116925,"code":116926,"language":5884,"meta":27},[5882],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[46,116928,116926],{"__ignoreMap":27},[14,116930,116931],{},"这个环境已经具备强化学习环境的基本结构。",[14,116933,116934],{},"主函数里使用随机动作：",[40,116936,116937],{"className":30909,"code":116905,"language":30911,"meta":27,"style":27},[46,116938,116939],{"__ignoreMap":27},[49,116940,116941,116943,116945],{"class":51,"line":52},[49,116942,107973],{"class":73},[49,116944,78],{"class":77},[49,116946,115552],{"class":73},[14,116948,116949],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[782,116951,102879],{"id":102878},[30,116953,116954,116957,116963,116972,116981,116990,116996],{},[33,116955,116956],{},"运行程序。",[33,116958,116959,116960,28916],{},"确认 ",[46,116961,116962],{},"obs.shape == (10,)",[33,116964,111712,116965,116968,116969,28916],{},[46,116966,116967],{},"env.action_space","，应类似 ",[46,116970,116971],{},"Box(-1.0, 1.0, (2,), float32)",[33,116973,106116,116974,116977,116978,28916],{},[46,116975,116976],{},"self.max_steps = 10","，确认环境会更快 ",[46,116979,116980],{},"truncated=True",[33,116982,102942,116983,102945,116986,116989],{},[46,116984,116985],{},"terminated = dist \u003C 0.05",[46,116987,116988],{},"dist \u003C 0.2","，观察是否更容易结束。",[33,116991,102942,116992,116995],{},[46,116993,116994],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[33,116997,116998,116999,117001,117002,117005],{},"在 ",[46,117000,116864],{}," 里加入 ",[46,117003,117004],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[782,117007,102984],{"id":102983},[18,117009,117011],{"id":117010},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,117013,117014,117015,117017],{},"Gymnasium 的 ",[46,117016,107665],{}," 返回 5 个值:",[40,117019,117021],{"className":30909,"code":117020,"language":30911,"meta":27,"style":27},"obs, reward, terminated, truncated, info\n",[46,117022,117023],{"__ignoreMap":27},[49,117024,117025],{"class":51,"line":52},[49,117026,117020],{"class":73},[14,117028,117029],{},"不是旧 Gym 的 4 个值。",[18,117031,117033,117036],{"id":117032},"datactrl-action-维度错误",[46,117034,117035],{},"data.ctrl[:] = action"," 维度错误",[14,117038,103054],{},[40,117040,117042],{"className":30909,"code":117041,"language":30911,"meta":27,"style":27},"print(self.model.nu)\nprint(action.shape)\n",[46,117043,117044,117055],{"__ignoreMap":27},[49,117045,117046,117048,117050,117052],{"class":51,"line":52},[49,117047,30946],{"class":159},[49,117049,841],{"class":73},[49,117051,31354],{"class":159},[49,117053,117054],{"class":73},".model.nu)\n",[49,117056,117057,117059],{"class":51,"line":63},[49,117058,30946],{"class":159},[49,117060,117061],{"class":73},"(action.shape)\n",[14,117063,117064],{},"两者必须匹配。",[18,117066,117068],{"id":117067},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,117070,102993],{},[40,117072,117074],{"className":30909,"code":117073,"language":30911,"meta":27,"style":27},"mujoco.mj_forward(self.model, self.data)\n",[46,117075,117076],{"__ignoreMap":27},[49,117077,117078,117081,117083,117085,117087],{"class":51,"line":52},[49,117079,117080],{"class":73},"mujoco.mj_forward(",[49,117082,31354],{"class":159},[49,117084,115112],{"class":73},[49,117086,31354],{"class":159},[49,117088,115117],{"class":73},[18,117090,117092,117094],{"id":117091},"observation_space-维度和-obs-不一致",[46,117093,114131],{}," 维度和 obs 不一致",[14,117096,103106],{},[40,117098,117100],{"className":30909,"code":117099,"language":30911,"meta":27,"style":27},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[46,117101,117102,117112,117119],{"__ignoreMap":27},[49,117103,117104,117106,117108,117110],{"class":51,"line":52},[49,117105,111385],{"class":73},[49,117107,78],{"class":77},[49,117109,39404],{"class":159},[49,117111,115328],{"class":73},[49,117113,117114,117116],{"class":51,"line":63},[49,117115,30946],{"class":159},[49,117117,117118],{"class":73},"(obs.shape)\n",[49,117120,117121,117123,117125,117127],{"class":51,"line":70},[49,117122,30946],{"class":159},[49,117124,841],{"class":73},[49,117126,31354],{"class":159},[49,117128,117129],{"class":73},".observation_space.shape)\n",[14,117131,117132],{},"两者必须一致。本章观测是：",[40,117134,117137],{"className":117135,"code":117136,"language":5884,"meta":27},[5882],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[46,117138,117136],{"__ignoreMap":27},[18,117140,117142],{"id":117141},"action-超过范围","action 超过范围",[14,117144,117145],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[40,117147,117148],{"className":30909,"code":116647,"language":30911,"meta":27,"style":27},[46,117149,117150],{"__ignoreMap":27},[49,117151,117152,117154,117156,117158,117160,117162,117164],{"class":51,"line":52},[49,117153,107973],{"class":73},[49,117155,78],{"class":77},[49,117157,107978],{"class":73},[49,117159,31354],{"class":159},[49,117161,115249],{"class":73},[49,117163,31354],{"class":159},[49,117165,115254],{"class":73},[14,117167,117168,117169,28916],{},"这能避免无效动作直接写入 ",[46,117170,101607],{},[18,117172,117174],{"id":117173},"忘记返回-info","忘记返回 info",[14,117176,117014,117177,101549,117179,117181],{},[46,117178,70587],{},[46,117180,107665],{}," 都会返回 info：",[40,117183,117184],{"className":30909,"code":113924,"language":30911,"meta":27,"style":27},[46,117185,117186,117194],{"__ignoreMap":27},[49,117187,117188,117190,117192],{"class":51,"line":52},[49,117189,113931],{"class":73},[49,117191,78],{"class":77},[49,117193,113936],{"class":73},[49,117195,117196,117198,117200],{"class":51,"line":63},[49,117197,113941],{"class":73},[49,117199,78],{"class":77},[49,117201,113946],{"class":73},[14,117203,117204,117205,28916],{},"即使暂时没有额外信息，也返回 ",[46,117206,32990],{},[782,117208,117210],{"id":117209},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,117212,117213],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[30,117215,117216,117219,117222,117225,117228,117231],{},[33,117217,117218],{},"更稳定的 reward。",[33,117220,117221],{},"合理的 episode 长度。",[33,117223,117224],{},"可重复的随机目标采样。",[33,117226,117227],{},"render 接口。",[33,117229,117230],{},"环境注册代码。",[33,117232,117233],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,117235,117236],{},"如果只是自己写训练循环，最小形式是：",[40,117238,117240],{"className":30909,"code":117239,"language":30911,"meta":27,"style":27},"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",[46,117241,117242,117250,117266,117270,117286,117295,117304,117314],{"__ignoreMap":27},[49,117243,117244,117246,117248],{"class":51,"line":52},[49,117245,116875],{"class":73},[49,117247,78],{"class":77},[49,117249,115473],{"class":73},[49,117251,117252,117254,117256,117258,117260,117262,117264],{"class":51,"line":63},[49,117253,113931],{"class":73},[49,117255,78],{"class":77},[49,117257,115483],{"class":73},[49,117259,115097],{"class":5913},[49,117261,78],{"class":77},[49,117263,1021],{"class":159},[49,117265,847],{"class":73},[49,117267,117268],{"class":51,"line":70},[49,117269,399],{"emptyLinePlaceholder":398},[49,117271,117272,117274,117276,117278,117280,117282,117284],{"class":51,"line":219},[49,117273,3722],{"class":77},[49,117275,102032],{"class":73},[49,117277,26732],{"class":77},[49,117279,32974],{"class":159},[49,117281,841],{"class":73},[49,117283,7107],{"class":159},[49,117285,31317],{"class":73},[49,117287,117288,117291,117293],{"class":51,"line":233},[49,117289,117290],{"class":73},"    action ",[49,117292,78],{"class":77},[49,117294,115552],{"class":73},[49,117296,117297,117300,117302],{"class":51,"line":241},[49,117298,117299],{"class":73},"    obs, reward, terminated, truncated, info ",[49,117301,78],{"class":77},[49,117303,113946],{"class":73},[49,117305,117306,117308,117310,117312],{"class":51,"line":1920},[49,117307,3798],{"class":77},[49,117309,115618],{"class":73},[49,117311,115621],{"class":77},[49,117313,115624],{"class":73},[49,117315,117316,117319,117321],{"class":51,"line":2011},[49,117317,117318],{"class":73},"        obs, info ",[49,117320,78],{"class":77},[49,117322,113936],{"class":73},[782,117324,117326],{"id":117325},"_9本章小结","9.本章小结",[14,117328,117329],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[40,117331,117334],{"className":117332,"code":117333,"language":5884,"meta":27},[5882],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[46,117335,117333],{"__ignoreMap":27},[14,117337,117338],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[757,117340,117341],{},"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":27,"searchDepth":63,"depth":63,"links":117343},[117344,117345,117346,117353,117357,117358,117359,117369,117370],{"id":101177,"depth":63,"text":101178},{"id":101300,"depth":63,"text":101301},{"id":101575,"depth":63,"text":101576,"children":117347},[117348,117350,117352],{"id":114155,"depth":70,"text":117349},"terminated 和 truncated 的区别",{"id":114258,"depth":70,"text":117351},"observation_space 和 action_space",{"id":114385,"depth":70,"text":114386},{"id":101783,"depth":63,"text":101784,"children":117354},[117355,117356],{"id":102103,"depth":70,"text":102103},{"id":102239,"depth":70,"text":102239},{"id":102846,"depth":63,"text":102847},{"id":102878,"depth":63,"text":102879},{"id":102983,"depth":63,"text":102984,"children":117360},[117361,117362,117364,117365,117367,117368],{"id":117010,"depth":70,"text":117011},{"id":117032,"depth":70,"text":117363},"data.ctrl[:] = action 维度错误",{"id":117067,"depth":70,"text":117068},{"id":117091,"depth":70,"text":117366},"observation_space 维度和 obs 不一致",{"id":117141,"depth":70,"text":117142},{"id":117173,"depth":70,"text":117174},{"id":117209,"depth":63,"text":117210},{"id":117325,"depth":63,"text":117326},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113908,"description":27},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117377,"title":117378,"body":117379,"description":117802,"extension":766,"meta":117803,"navigation":398,"path":117804,"seo":117805,"stem":117806,"__hash__":117807},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117380,"toc":117792},[117381,117385,117388,117391,117411,117417,117423,117433,117436,117439,117459,117462,117466,117469,117475,117478,117492,117495,117498,117572,117575,117581,117584,117607,117610,117660,117663,117669,117672,117675,117678,117697,117700,117706,117709,117712,117715,117735,117738,117741,117744,117789],[10,117382,117384],{"id":117383},"mujoco-学习","MuJoCo 学习",[14,117386,117387],{},"初版",[14,117389,117390],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[30,117392,117393,117396,117399,117408],{},[33,117394,117395],{},"MuJoCo 模型文件在描述什么。",[33,117397,117398],{},"Python 代码怎样读取和推进仿真。",[33,117400,117401,1042,117403,1042,117405,117407],{},[46,117402,104561],{},[46,117404,104891],{},[46,117406,104894],{}," 这些数组为什么重要。",[33,117409,117410],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,117412,117413,117414,117416],{},"默认环境为 Fedora 44、Python >= 3.10、",[46,117415,101558],{}," 官方 Python bindings。",[14,117418,117419,117420,117422],{},"注意：本文禁止使用 ",[46,117421,101543],{},"。所有示例均使用：",[40,117424,117425],{"className":30909,"code":102109,"language":30911,"meta":27,"style":27},[46,117426,117427],{"__ignoreMap":27},[49,117428,117429,117431],{"class":51,"line":52},[49,117430,30923],{"class":77},[49,117432,101832],{"class":73},[782,117434,117435],{"id":117435},"适合谁阅读",[14,117437,117438],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[30,117440,117441,117444,117447,117450],{},[33,117442,117443],{},"没学过 MuJoCo，只会一点 Python。",[33,117445,117446],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[33,117448,117449],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[33,117451,117452,117453,117455,117456,117458],{},"以前接触过 ",[46,117454,101543],{},"，现在想迁移到官方 ",[46,117457,101552],{}," Python bindings。",[14,117460,117461],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[782,117463,117465],{"id":117464},"mujoco-到底是什么","MuJoCo 到底是什么",[14,117467,117468],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[40,117470,117473],{"className":117471,"code":117472,"language":5884,"meta":27},[5882],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[46,117474,117472],{"__ignoreMap":27},[14,117476,117477],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[30,117479,117480,117483,117486,117489],{},[33,117481,117482],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[33,117484,117485],{},"快速测试控制算法，不必一开始就上真实机器人。",[33,117487,117488],{},"生成强化学习环境。",[33,117490,117491],{},"采集状态、动作、图像、奖励等训练数据。",[782,117493,117494],{"id":117494},"学习前的心智模型",[14,117496,117497],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[610,117499,117500,117512],{},[613,117501,117502],{},[616,117503,117504,117507,117510],{},[619,117505,117506],{"align":621},"部分",[619,117508,117509],{"align":621},"负责什么",[619,117511,21884],{"align":621},[633,117513,117514,117525,117537,117549,117561],{},[616,117515,117516,117519,117522],{},[638,117517,117518],{"align":621},"MJCF XML",[638,117520,117521],{"align":621},"定义世界和机器人结构",[638,117523,117524],{"align":621},"地面、盒子、关节、电机、摄像头",[616,117526,117527,117531,117534],{},[638,117528,117529],{"align":621},[46,117530,101240],{},[638,117532,117533],{"align":621},"编译后的静态模型",[638,117535,117536],{"align":621},"有几个关节、有几个电机、时间步长是多少",[616,117538,117539,117543,117546],{},[638,117540,117541],{"align":621},[46,117542,101250],{},[638,117544,117545],{"align":621},"运行中的动态状态",[638,117547,117548],{"align":621},"当前时间、位置、速度、电机输入",[616,117550,117551,117555,117558],{},[638,117552,117553],{"align":621},[46,117554,101746],{},[638,117556,117557],{"align":621},"推进一步物理仿真",[638,117559,117560],{"align":621},"根据重力、力、碰撞更新状态",[616,117562,117563,117566,117569],{},[638,117564,117565],{"align":621},"Viewer \u002F Renderer",[638,117567,117568],{"align":621},"把仿真显示出来",[638,117570,117571],{"align":621},"打开窗口或保存图片",[14,117573,117574],{},"一句话总结：",[40,117576,117579],{"className":117577,"code":117578,"language":5884,"meta":27},[5882],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[46,117580,117578],{"__ignoreMap":27},[14,117582,117583],{},"参考来源：",[742,117585,117586,117593,117600],{},[33,117587,117588,117589],{},"MuJoCo Python 官方文档：",[124,117590,117591],{"href":117591,"rel":117592},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[128],[33,117594,117595,117596],{},"MuJoCo XML Reference：",[124,117597,117598],{"href":117598,"rel":117599},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[128],[33,117601,117602,117603],{},"MuJoCo Overview：",[124,117604,117605],{"href":117605,"rel":117606},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[128],[782,117608,117609],{"id":117609},"章节目录",[30,117611,117612,117618,117624,117630,117636,117642,117648,117654],{},[33,117613,117614],{},[124,117615,117617],{"href":117616},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[33,117619,117620],{},[124,117621,117623],{"href":117622},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[33,117625,117626],{},[124,117627,117629],{"href":117628},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[33,117631,117632],{},[124,117633,117635],{"href":117634},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[33,117637,117638],{},[124,117639,117641],{"href":117640},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[33,117643,117644],{},[124,117645,117647],{"href":117646},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[33,117649,117650],{},[124,117651,117653],{"href":117652},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[33,117655,117656],{},[124,117657,117659],{"href":117658},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[782,117661,117662],{"id":117662},"推荐学习路线",[40,117664,117667],{"className":117665,"code":117666,"language":5884,"meta":27},[5882],"环境安装\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",[46,117668,117666],{"__ignoreMap":27},[14,117670,117671],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[782,117673,117674],{"id":117674},"建议的目录结构",[14,117676,117677],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[40,117679,117681],{"className":42,"code":117680,"language":44,"meta":27,"style":27},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[46,117682,117683,117691],{"__ignoreMap":27},[49,117684,117685,117687,117689],{"class":51,"line":52},[49,117686,101797],{"class":55},[49,117688,29747],{"class":159},[49,117690,101802],{"class":59},[49,117692,117693,117695],{"class":51,"line":63},[49,117694,101807],{"class":159},[49,117696,101802],{"class":59},[14,117698,117699],{},"每一章的代码都单独保存：",[40,117701,117704],{"className":117702,"code":117703,"language":5884,"meta":27},[5882],"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",[46,117705,117703],{"__ignoreMap":27},[14,117707,117708],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[782,117710,117711],{"id":117711},"学习方法",[14,117713,117714],{},"每章建议按这个顺序操作：",[30,117716,117717,117720,117723,117726,117729,117732],{},[33,117718,117719],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[33,117721,117722],{},"复制最小可运行代码，保存成指定文件。",[33,117724,117725],{},"运行代码，确认没有报错。",[33,117727,117728],{},"对照“运行结果说明”理解输出。",[33,117730,117731],{},"做“验证步骤”，主动改一两个参数。",[33,117733,117734],{},"遇到报错先看“常见错误与解决方案”。",[14,117736,117737],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[782,117739,117740],{"id":117740},"全局排错顺序",[14,117742,117743],{},"遇到问题时，按下面顺序查：",[30,117745,117746,117752,117758,117763,117766,117769,117776,117786],{},[33,117747,117748,117749],{},"Python 环境是否激活：",[46,117750,117751],{},"which python",[33,117753,117754,117755],{},"MuJoCo 是否能导入：",[46,117756,117757],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[33,117759,117760,117761],{},"是否误装了 ",[46,117762,101543],{},[33,117764,117765],{},"XML 标签是否闭合、属性是否拼写正确",[33,117767,117768],{},"actuator 引用的 joint 名字是否存在",[33,117770,117771,117773,117774],{},[46,117772,101607],{}," 的长度是否等于 ",[46,117775,102689],{},[33,117777,106116,117778,83070,117780,117782,117783],{},[46,117779,104561],{},[46,117781,104891],{}," 后是否调用了 ",[46,117784,117785],{},"mujoco.mj_forward",[33,117787,117788],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[757,117790,117791],{},"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":27,"searchDepth":63,"depth":63,"links":117793},[117794,117795,117796,117797,117798,117799,117800,117801],{"id":117435,"depth":63,"text":117435},{"id":117464,"depth":63,"text":117465},{"id":117494,"depth":63,"text":117494},{"id":117609,"depth":63,"text":117609},{"id":117662,"depth":63,"text":117662},{"id":117674,"depth":63,"text":117674},{"id":117711,"depth":63,"text":117711},{"id":117740,"depth":63,"text":117740},"仿真搭建。",{"category":24074},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117378,"description":117802},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117809,"title":117810,"body":117811,"description":24072,"extension":766,"meta":118266,"navigation":398,"path":118267,"seo":118268,"stem":118269,"__hash__":118270},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117812,"toc":118264},[117813,117816,117819,117825,118261],[10,117814,117810],{"id":117815},"_1-最常用的基本操作更新",[14,117817,117818],{},"装linux系统教程：",[14,117820,117821],{},[124,117822,117823],{"href":117823,"rel":117824},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[128],[40,117826,117830],{"className":117827,"code":117828,"language":117829,"meta":27,"style":27},"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",[46,117831,117832,117837,117842,117851,117856,117865,117870,117890,117895,117906,117911,117920,117925,117953,117958,117977,117982,118001,118005,118010,118026,118030,118035,118065,118069,118074,118090,118094,118099,118114,118118,118123,118139,118143,118148,118160,118172,118176,118181,118198,118202,118207,118225,118229,118234,118243,118247,118252],{"__ignoreMap":27},[49,117833,117834],{"class":51,"line":52},[49,117835,117836],{"class":66},"#更新相关的知识\n",[49,117838,117839],{"class":51,"line":63},[49,117840,117841],{"class":66},"# 更新软件包列表（从服务器获取最新软件信息）\n",[49,117843,117844,117846,117849],{"class":51,"line":70},[49,117845,264],{"class":55},[49,117847,117848],{"class":59}," apt",[49,117850,249],{"class":59},[49,117852,117853],{"class":51,"line":219},[49,117854,117855],{"class":66},"# 升级所有可更新的软件包（不删除旧包）\n",[49,117857,117858,117860,117862],{"class":51,"line":233},[49,117859,264],{"class":55},[49,117861,117848],{"class":59},[49,117863,117864],{"class":59}," upgrade\n",[49,117866,117867],{"class":51,"line":241},[49,117868,117869],{"class":66},"#更新和升级软件包\n",[49,117871,117872,117874,117876,117879,117881,117883,117885,117888],{"class":51,"line":1920},[49,117873,264],{"class":55},[49,117875,117848],{"class":59},[49,117877,117878],{"class":59}," update",[49,117880,26876],{"class":73},[49,117882,264],{"class":55},[49,117884,117848],{"class":59},[49,117886,117887],{"class":59}," upgrade",[49,117889,101512],{"class":159},[49,117891,117892],{"class":51,"line":2011},[49,117893,117894],{"class":66},"#列出可更新的软件包及版本信息\n",[49,117896,117897,117900,117903],{"class":51,"line":2017},[49,117898,117899],{"class":55},"apt",[49,117901,117902],{"class":59}," list",[49,117904,117905],{"class":159}," --upgradable\n",[49,117907,117908],{"class":51,"line":2029},[49,117909,117910],{"class":66},"#彻底升级（处理依赖关系，可能删除旧包）\n",[49,117912,117913,117915,117917],{"class":51,"line":2311},[49,117914,264],{"class":55},[49,117916,117848],{"class":59},[49,117918,117919],{"class":59}," full-upgrade\n",[49,117921,117922],{"class":51,"line":2316},[49,117923,117924],{"class":66},"#设置指定版本\n",[49,117926,117927,117929,117931,117933,117935,117938,117940,117942,117944,117946,117949,117951],{"class":51,"line":2322},[49,117928,264],{"class":55},[49,117930,117848],{"class":59},[49,117932,269],{"class":59},[49,117934,29433],{"class":77},[49,117936,117937],{"class":59},"package_nam",[49,117939,912],{"class":73},[49,117941,1789],{"class":77},[49,117943,78],{"class":59},[49,117945,1739],{"class":77},[49,117947,117948],{"class":59},"version_numbe",[49,117950,1499],{"class":73},[49,117952,51838],{"class":77},[49,117954,117955],{"class":51,"line":2327},[49,117956,117957],{"class":66},"#只安装软件包不升级\n",[49,117959,117960,117962,117964,117966,117968,117970,117972,117974],{"class":51,"line":2341},[49,117961,264],{"class":55},[49,117963,117848],{"class":59},[49,117965,269],{"class":59},[49,117967,29433],{"class":77},[49,117969,117937],{"class":59},[49,117971,912],{"class":73},[49,117973,1789],{"class":77},[49,117975,117976],{"class":159}," --no-upgrade\n",[49,117978,117979],{"class":51,"line":2346},[49,117980,117981],{"class":66},"#只升级，不存在就不安装\n",[49,117983,117984,117986,117988,117990,117992,117994,117996,117998],{"class":51,"line":2352},[49,117985,264],{"class":55},[49,117987,117848],{"class":59},[49,117989,269],{"class":59},[49,117991,29433],{"class":77},[49,117993,117937],{"class":59},[49,117995,912],{"class":73},[49,117997,1789],{"class":77},[49,117999,118000],{"class":159}," --only-upgrade\n",[49,118002,118003],{"class":51,"line":2373},[49,118004,399],{"emptyLinePlaceholder":398},[49,118006,118007],{"class":51,"line":2378},[49,118008,118009],{"class":66},"#安装指定的软件命令\n",[49,118011,118012,118014,118016,118018,118020,118022,118024],{"class":51,"line":2392},[49,118013,264],{"class":55},[49,118015,117848],{"class":59},[49,118017,269],{"class":59},[49,118019,29433],{"class":77},[49,118021,117937],{"class":59},[49,118023,912],{"class":73},[49,118025,51838],{"class":77},[49,118027,118028],{"class":51,"line":2397},[49,118029,399],{"emptyLinePlaceholder":398},[49,118031,118032],{"class":51,"line":2426},[49,118033,118034],{"class":66},"#安装多个软件包\n",[49,118036,118037,118039,118041,118043,118045,118048,118051,118053,118055,118058,118060,118062],{"class":51,"line":2431},[49,118038,264],{"class":55},[49,118040,117848],{"class":59},[49,118042,269],{"class":59},[49,118044,29433],{"class":77},[49,118046,118047],{"class":59},"package_",[49,118049,118050],{"class":77},"1>",[49,118052,29433],{"class":77},[49,118054,118047],{"class":59},[49,118056,118057],{"class":77},"2>",[49,118059,29433],{"class":77},[49,118061,118047],{"class":59},[49,118063,118064],{"class":77},"3>\n",[49,118066,118067],{"class":51,"line":2448},[49,118068,399],{"emptyLinePlaceholder":398},[49,118070,118071],{"class":51,"line":2453},[49,118072,118073],{"class":66},"#更新指定的软件命令\n",[49,118075,118076,118078,118080,118082,118084,118086,118088],{"class":51,"line":2458},[49,118077,264],{"class":55},[49,118079,117848],{"class":59},[49,118081,117878],{"class":59},[49,118083,29433],{"class":77},[49,118085,117937],{"class":59},[49,118087,912],{"class":73},[49,118089,51838],{"class":77},[49,118091,118092],{"class":51,"line":2463},[49,118093,399],{"emptyLinePlaceholder":398},[49,118095,118096],{"class":51,"line":2477},[49,118097,118098],{"class":66},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[49,118100,118101,118103,118106,118108,118110,118112],{"class":51,"line":2482},[49,118102,117899],{"class":55},[49,118104,118105],{"class":59}," show",[49,118107,29433],{"class":77},[49,118109,117937],{"class":59},[49,118111,912],{"class":73},[49,118113,51838],{"class":77},[49,118115,118116],{"class":51,"line":3274},[49,118117,399],{"emptyLinePlaceholder":398},[49,118119,118120],{"class":51,"line":3288},[49,118121,118122],{"class":66},"#删除软件包命令\n",[49,118124,118125,118127,118129,118131,118133,118135,118137],{"class":51,"line":3296},[49,118126,264],{"class":55},[49,118128,117848],{"class":59},[49,118130,26766],{"class":59},[49,118132,29433],{"class":77},[49,118134,117937],{"class":59},[49,118136,912],{"class":73},[49,118138,51838],{"class":77},[49,118140,118141],{"class":51,"line":3301},[49,118142,399],{"emptyLinePlaceholder":398},[49,118144,118145],{"class":51,"line":3307},[49,118146,118147],{"class":66},"# 清理旧版本和缓存（释放磁盘空间）\n",[49,118149,118150,118152,118154,118157],{"class":51,"line":3313},[49,118151,264],{"class":55},[49,118153,117848],{"class":59},[49,118155,118156],{"class":59}," autoremove",[49,118158,118159],{"class":66},"  # 删除不再需要的依赖和库文件\n",[49,118161,118162,118164,118166,118169],{"class":51,"line":3318},[49,118163,264],{"class":55},[49,118165,117848],{"class":59},[49,118167,118168],{"class":59}," clean",[49,118170,118171],{"class":66},"       # 清理下载的缓存包\n",[49,118173,118174],{"class":51,"line":8645},[49,118175,399],{"emptyLinePlaceholder":398},[49,118177,118178],{"class":51,"line":8669},[49,118179,118180],{"class":66},"#移除软件包及配置文件\n",[49,118182,118183,118185,118187,118190,118192,118194,118196],{"class":51,"line":8674},[49,118184,264],{"class":55},[49,118186,117848],{"class":59},[49,118188,118189],{"class":59}," purge",[49,118191,29433],{"class":77},[49,118193,117937],{"class":59},[49,118195,912],{"class":73},[49,118197,51838],{"class":77},[49,118199,118200],{"class":51,"line":8680},[49,118201,399],{"emptyLinePlaceholder":398},[49,118203,118204],{"class":51,"line":8707},[49,118205,118206],{"class":66},"#查找软件包命令\n",[49,118208,118209,118211,118213,118216,118218,118221,118223],{"class":51,"line":8712},[49,118210,264],{"class":55},[49,118212,117848],{"class":59},[49,118214,118215],{"class":59}," search",[49,118217,29433],{"class":77},[49,118219,118220],{"class":59},"keywor",[49,118222,1143],{"class":73},[49,118224,51838],{"class":77},[49,118226,118227],{"class":51,"line":8718},[49,118228,399],{"emptyLinePlaceholder":398},[49,118230,118231],{"class":51,"line":8730},[49,118232,118233],{"class":66},"#列出所有已安装的包\n",[49,118235,118236,118238,118240],{"class":51,"line":8742},[49,118237,117899],{"class":55},[49,118239,117902],{"class":59},[49,118241,118242],{"class":159}," --installed\n",[49,118244,118245],{"class":51,"line":8754},[49,118246,399],{"emptyLinePlaceholder":398},[49,118248,118249],{"class":51,"line":10413},[49,118250,118251],{"class":66},"#列出所有已安装的包的版本信息\n",[49,118253,118254,118256,118258],{"class":51,"line":10438},[49,118255,117899],{"class":55},[49,118257,117902],{"class":59},[49,118259,118260],{"class":159}," --all-versions\n",[757,118262,118263],{},"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":27,"searchDepth":63,"depth":63,"links":118265},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117810,"description":24072},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118272,"title":118273,"body":118274,"description":24072,"extension":766,"meta":119015,"navigation":398,"path":119016,"seo":119017,"stem":119018,"__hash__":119019},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118275,"toc":119002},[118276,118279,118283,118286,118292,118296,118300,118306,118311,118316,118321,118326,118331,118334,118337,118340,118343,118347,118350,118355,118358,118363,118366,118371,118378,118381,118384,118387,118390,118393,118404,118408,118412,118417,118422,118426,118431,118435,118440,118444,118448,118453,118456,118501,118506,118510,118514,118519,118525,118530,118540,118545,118555,118560,118565,118592,118596,118599,118604,118607,118632,118636,118641,118644,118649,118654,118674,118679,118682,118697,118701,118754,118757,118762,118766,118769,118784,118787,118790,118795,118799,118803,118806,118810,118814,118817,118822,118827,118831,118838,118846,118849,118856,118861,118866,118869,118874,118881,118886,118893,118897,118899,118904,118908,118911,118914,118919,118922,118927,118930,118935,118940,118945,118949,118954,118958,118999],[10,118277,118273],{"id":118278},"_2-linux装机教程",[782,118280,118282],{"id":118281},"_21-实体机","2.1 实体机",[14,118284,118285],{},"使用清华源：（Ubuntu24.04）",[14,118287,118288],{},[124,118289,118290],{"href":118290,"rel":118291},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[128],[782,118293,118295],{"id":118294},"_22-普通虚拟机","2.2 普通虚拟机",[18,118297,118299],{"id":118298},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,118301,118302],{},[124,118303,118304],{"href":118304,"rel":118305},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[128],[14,118307,118308],{},[25,118309],{"alt":27,"src":118310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,118312,118313],{},[25,118314],{"alt":27,"src":118315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,118317,118318],{},[25,118319],{"alt":27,"src":118320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,118322,118323],{},[25,118324],{"alt":27,"src":118325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,118327,118328],{},[25,118329],{"alt":27,"src":118330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,118332,118333],{},"内存4G（4096MB）；",[14,118335,118336],{},"CPU给4个核；",[14,118338,118339],{},"硬盘动态分配60G；",[14,118341,118342],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[18,118344,118346],{"id":118345},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,118348,118349],{},"按照1.1的步骤下载Ubuntu",[14,118351,118352],{},[25,118353],{"alt":27,"src":118354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,118356,118357],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,118359,118360],{},[25,118361],{"alt":27,"src":118362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,118364,118365],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,118367,118368],{},[25,118369],{"alt":27,"src":118370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,118372,118373,118374,118377],{},"选择“正常安装”(找不到都用Alt+F7)， ",[112,118375,118376],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,118379,118380],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,118382,118383],{},"将改动写入磁盘吗 继续",[14,118385,118386],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,118388,118389],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,118391,118392],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,118394,118395,118396,118399,118400,118403],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[112,118397,118398],{},"除了"," 选不发送系统信息与不升级之外， ",[112,118401,118402],{},"其它"," 都跳过或前进）",[18,118405,118407],{"id":118406},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[130,118409,118411],{"id":118410},"_2231-全屏","2.2.3.1 全屏",[14,118413,118414],{},[25,118415],{"alt":27,"src":118416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,118418,118419],{},[25,118420],{"alt":27,"src":118421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[130,118423,118425],{"id":118424},"_2232-文件交换","2.2.3.2 文件交换",[14,118427,118428],{},[25,118429],{"alt":27,"src":118430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[130,118432,118434],{"id":118433},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,118436,118437],{},[25,118438],{"alt":27,"src":118439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[782,118441,118443],{"id":118442},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[18,118445,118447],{"id":118446},"_231-简介与优缺点","2.3.1 简介与优缺点",[30,118449,118450],{},[33,118451,118452],{},"什么情况下推荐？",[14,118454,118455],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[30,118457,118458],{"start":63},[33,118459,118460,118461],{},"优缺点：",[30,118462,118463,118493],{},[33,118464,118465,118466],{},"优点：",[30,118467,118468,118471,118478,118481,118484,118487,118490],{},[33,118469,118470],{},"WSL2是最好的Linux发行版;(bushi)",[33,118472,118473,118474,118477],{},"性能损耗极低。且比在Windows上跑深度性能 ",[112,118475,118476],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[33,118479,118480],{},"非常方便调用USB设备，可以USB直通;",[33,118482,118483],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[33,118485,118486],{},"非常方便Win与WSL2互相传文件等协同操作;",[33,118488,118489],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[33,118491,118492],{},"非常方便使用Windows的VScode远程开发;",[33,118494,118495,118496],{},"缺点：",[30,118497,118498],{},[33,118499,118500],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118502,118503],{},[25,118504],{"alt":27,"src":118505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[18,118507,118509],{"id":118508},"_232-安装教程","2.3.2 安装教程",[130,118511,118513],{"id":118512},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[30,118515,118516],{},[33,118517,118518],{},"方法一(图形界面)",[14,118520,118521,118522,25309],{},"用Win+R输入",[46,118523,118524],{},"appwiz.cpl",[14,118526,118527],{},[25,118528],{"alt":27,"src":118529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118531,118532,118533,118536,118537,27151],{},"点击OK进入 ",[112,118534,118535],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[112,118538,118539],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118541,118542],{},[25,118543],{"alt":27,"src":118544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118546,118547,118548,101549,118551,118554],{},"选择 ",[112,118549,118550],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[112,118552,118553],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118556,118557],{},[25,118558],{"alt":27,"src":118559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[30,118561,118562],{"start":63},[33,118563,118564],{},"方法二(命令行)",[40,118566,118570],{"className":118567,"code":118568,"language":118569,"meta":27,"style":27},"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",[46,118571,118572,118577,118582,118587],{"__ignoreMap":27},[49,118573,118574],{"class":51,"line":52},[49,118575,118576],{},"# 开启 Linux 子系统\n",[49,118578,118579],{"class":51,"line":63},[49,118580,118581],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[49,118583,118584],{"class":51,"line":70},[49,118585,118586],{},"# 开启虚拟机平台\n",[49,118588,118589],{"class":51,"line":219},[49,118590,118591],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[130,118593,118595],{"id":118594},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118597,118598],{},"用管理员权限打开powershell",[14,118600,118601],{},[25,118602],{"alt":27,"src":118603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118605,118606],{},"升级WSL并设置默认版本为WSL2",[40,118608,118610],{"className":118567,"code":118609,"language":118569,"meta":27,"style":27},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[46,118611,118612,118617,118622,118627],{"__ignoreMap":27},[49,118613,118614],{"class":51,"line":52},[49,118615,118616],{},"# 更新 wsl\n",[49,118618,118619],{"class":51,"line":63},[49,118620,118621],{},"wsl --update\n",[49,118623,118624],{"class":51,"line":70},[49,118625,118626],{},"# 将 wsl 版本设置为 wsl2\n",[49,118628,118629],{"class":51,"line":219},[49,118630,118631],{},"wsl --set-default-version 2\n",[130,118633,118635],{"id":118634},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[30,118637,118638],{},[33,118639,118640],{},"方式一(商店下载)",[14,118642,118643],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118645,118646],{},[25,118647],{"alt":27,"src":118648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[30,118650,118651],{"start":63},[33,118652,118653],{},"方式二(命令行安装)",[40,118655,118657],{"className":118567,"code":118656,"language":118569,"meta":27,"style":27},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[46,118658,118659,118664,118669],{"__ignoreMap":27},[49,118660,118661],{"class":51,"line":52},[49,118662,118663],{},"# 列出可安装的 Linux 版本\n",[49,118665,118666],{"class":51,"line":63},[49,118667,118668],{},"#（需要科学手段）\n",[49,118670,118671],{"class":51,"line":70},[49,118672,118673],{},"wsl --list --online\n",[14,118675,118676],{},[25,118677],{"alt":27,"src":118678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118680,118681],{},"选择对应发行版并安装",[40,118683,118685],{"className":118567,"code":118684,"language":118569,"meta":27,"style":27},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[46,118686,118687,118692],{"__ignoreMap":27},[49,118688,118689],{"class":51,"line":52},[49,118690,118691],{},"# Ubuntu安装完毕后需要重启系统\n",[49,118693,118694],{"class":51,"line":63},[49,118695,118696],{},"wsl --install -d Ubuntu-24.04\n",[130,118698,118700],{"id":118699},"_2324-查看系统状态","2.3.2.4 查看系统状态",[40,118702,118704],{"className":118567,"code":118703,"language":118569,"meta":27,"style":27},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[46,118705,118706,118711,118716,118721,118726,118730,118734,118739,118744,118749],{"__ignoreMap":27},[49,118707,118708],{"class":51,"line":52},[49,118709,118710],{},"# 查看 wsl\n",[49,118712,118713],{"class":51,"line":63},[49,118714,118715],{},"wsl -l\n",[49,118717,118718],{"class":51,"line":70},[49,118719,118720],{},"# 查看 wsl 运行版本或模式\n",[49,118722,118723],{"class":51,"line":219},[49,118724,118725],{},"wsl -l -v\n",[49,118727,118728],{"class":51,"line":233},[49,118729,399],{"emptyLinePlaceholder":398},[49,118731,118732],{"class":51,"line":241},[49,118733,399],{"emptyLinePlaceholder":398},[49,118735,118736],{"class":51,"line":1920},[49,118737,118738],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[49,118740,118741],{"class":51,"line":2011},[49,118742,118743],{},"wsl --set-version \u003Cdistro> 2\n",[49,118745,118746],{"class":51,"line":2017},[49,118747,118748],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[49,118750,118751],{"class":51,"line":2029},[49,118752,118753],{},"wsl --unregister \u003Cdistro>\n",[14,118755,118756],{},"输出Version为2即正常",[14,118758,118759],{},[25,118760],{"alt":27,"src":118761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[130,118763,118765],{"id":118764},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118767,118768],{},"直接在Powershell里输入wsl命令进入子系统",[40,118770,118772],{"className":118567,"code":118771,"language":118569,"meta":27,"style":27},"# 进入子系统\nwsl\n",[46,118773,118774,118779],{"__ignoreMap":27},[49,118775,118776],{"class":51,"line":52},[49,118777,118778],{},"# 进入子系统\n",[49,118780,118781],{"class":51,"line":63},[49,118782,118783],{},"wsl\n",[14,118785,118786],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118788,118789],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118791,118792],{},[25,118793],{"alt":27,"src":118794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[18,118796,118798],{"id":118797},"_233-配置各种环境","2.3.3 配置各种环境",[130,118800,118802],{"id":118801},"_2331-换源","2.3.3.1 换源",[14,118804,118805],{},"(同实体机LINUX，往下找教程)",[130,118807,118809],{"id":118808},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[138,118811,118813],{"id":118812},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118815,118816],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118818,118819],{},[25,118820],{"alt":27,"src":118821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118823,118824],{},[25,118825],{"alt":27,"src":118826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[138,118828,118830],{"id":118829},"_23322-cuda","2.3.3.2.2 CUDA",[14,118832,118833,118834],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[124,118835,118836],{"href":118836,"rel":118837},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[128],[14,118839,118840,118843],{},[25,118841],{"alt":27,"src":118842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[25,118844],{"alt":27,"src":118845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118847,118848],{},"在下方的网站，选择合适的版本。",[14,118850,118851,118852],{},"WSL2 专属 CUDA 指南：",[124,118853,118854],{"href":118854,"rel":118855},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[128],[14,118857,118858],{},[112,118859,118860],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118862,118863],{},[25,118864],{"alt":27,"src":118865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118867,118868],{},"挨行敲一遍",[14,118870,118871],{},[25,118872],{"alt":27,"src":118873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118875,118876,118877,118880],{},"敲完后，输入",[46,118878,118879],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118882,118883],{},[25,118884],{"alt":27,"src":118885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118887,118888,118889,118892],{},"（请详看下方教程的",[112,118890,118891],{},"安装CUDA的配置环境来看","如何配置环境）",[138,118894,118896],{"id":118895},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118898,118805],{},[14,118900,118901],{},[25,118902],{"alt":27,"src":118903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[130,118905,118907],{"id":118906},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118909,118910],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118912,118913],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118915,118916],{},[25,118917],{"alt":27,"src":118918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118920,118921],{},"连接WSL2",[14,118923,118924],{},[25,118925],{"alt":27,"src":118926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118928,118929],{},"远程开发成功。",[14,118931,118932],{},[25,118933],{"alt":27,"src":118934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118936,118937],{},[25,118938],{"alt":27,"src":118939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118941,118942],{},[25,118943],{"alt":27,"src":118944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[130,118946,118948],{"id":118947},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118950,118951],{},[25,118952],{"alt":27,"src":118953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[130,118955,118957],{"id":118956},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[40,118959,118961],{"className":117827,"code":118960,"language":117829,"meta":27,"style":27},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[46,118962,118963,118971,118979,118990,118994],{"__ignoreMap":27},[49,118964,118965,118967,118969],{"class":51,"line":52},[49,118966,264],{"class":55},[49,118968,117848],{"class":59},[49,118970,249],{"class":59},[49,118972,118973,118975,118977],{"class":51,"line":63},[49,118974,264],{"class":55},[49,118976,117848],{"class":59},[49,118978,117864],{"class":59},[49,118980,118981,118983,118985,118987],{"class":51,"line":70},[49,118982,264],{"class":55},[49,118984,117848],{"class":59},[49,118986,269],{"class":59},[49,118988,118989],{"class":59}," mesa-utils\n",[49,118991,118992],{"class":51,"line":219},[49,118993,399],{"emptyLinePlaceholder":398},[49,118995,118996],{"class":51,"line":233},[49,118997,118998],{"class":66},"#然后重启wsl2即可\n",[757,119000,119001],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":27,"searchDepth":63,"depth":63,"links":119003},[119004,119005,119010],{"id":118281,"depth":63,"text":118282},{"id":118294,"depth":63,"text":118295,"children":119006},[119007,119008,119009],{"id":118298,"depth":70,"text":118299},{"id":118345,"depth":70,"text":118346},{"id":118406,"depth":70,"text":118407},{"id":118442,"depth":63,"text":118443,"children":119011},[119012,119013,119014],{"id":118446,"depth":70,"text":118447},{"id":118508,"depth":70,"text":118509},{"id":118797,"depth":70,"text":118798},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118273,"description":24072},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119021,"title":119022,"body":119023,"description":24072,"extension":766,"meta":121959,"navigation":398,"path":121960,"seo":121961,"stem":121962,"__hash__":121963},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119024,"toc":121931},[119025,119028,119032,119038,119042,119048,119052,119240,119243,119248,119252,119256,119259,119262,119268,119273,119276,119279,119284,119317,119322,119326,119403,119406,119411,119415,119418,119457,119460,119469,119487,119492,119499,119616,119621,119624,119651,119656,119660,119669,119719,119726,119730,119733,119747,119754,119788,119793,119797,119820,119823,119828,119832,119835,119838,119841,119883,119887,119890,119893,119934,119938,119942,119945,119950,119955,119958,119981,119984,119992,119997,120000,120005,120010,120013,120018,120022,120027,120050,120055,120117,120125,120130,120135,120138,120143,120146,120151,120156,120174,120179,120185,120190,120204,120208,120211,120214,120217,120260,120263,120268,120369,120372,120377,120381,120385,120422,120426,120430,120434,120480,120484,120529,120533,120540,120548,120603,120606,120683,120686,120709,120713,120716,120721,120726,120734,120737,120742,120747,120752,120755,120760,120769,120772,120777,120780,120851,120856,120859,120864,120867,120872,120875,120880,120883,120888,120893,120896,120971,120974,120987,120992,120995,121009,121012,121041,121046,121075,121078,121083,121087,121092,121101,121104,121109,121112,121117,121120,121123,121128,121131,121136,121141,121144,121149,121152,121277,121282,121312,121315,121320,121325,121342,121345,121388,121391,121418,121423,121436,121579,121583,121588,121602,121605,121656,121659,121689,121692,121708,121713,121727,121730,121797,121802,121811,121816,121819,121831,121836,121843,121867,121870,121875,121878,121897,121902,121909,121921,121928],[10,119026,119022],{"id":119027},"_3-安装必备配置",[782,119029,119031],{"id":119030},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[40,119033,119036],{"className":119034,"code":119035,"language":5884},[5882],"  打开下方网站（注意，该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",[46,119037,119035],{"__ignoreMap":27},[18,119039,119041],{"id":119040},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[40,119043,119046],{"className":119044,"code":119045,"language":5884},[5882],"  输入以下命令\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",[46,119047,119045],{"__ignoreMap":27},[18,119049,119051],{"id":119050},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[40,119053,119057],{"className":119054,"code":119055,"language":119056,"meta":27,"style":27},"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",[46,119058,119059,119067,119078,119090,119104,119108,119118,119123,119127,119131,119136,119140,119152,119156,119161,119165,119176,119180,119196,119200,119211,119215,119220,119224,119232],{"__ignoreMap":27},[49,119060,119061,119063,119065],{"class":51,"line":52},[49,119062,264],{"class":55},[49,119064,117848],{"class":59},[49,119066,249],{"class":59},[49,119068,119069,119071,119073,119075],{"class":51,"line":63},[49,119070,264],{"class":55},[49,119072,117848],{"class":59},[49,119074,269],{"class":59},[49,119076,119077],{"class":59}," vim\n",[49,119079,119080,119082,119085,119087],{"class":51,"line":70},[49,119081,264],{"class":55},[49,119083,119084],{"class":59}," rm",[49,119086,26014],{"class":159},[49,119088,119089],{"class":59}," \u002Fetc\u002Fapt\u002Fsources.list\n",[49,119091,119092,119094,119096,119098,119101],{"class":51,"line":219},[49,119093,264],{"class":55},[49,119095,119084],{"class":59},[49,119097,26014],{"class":159},[49,119099,119100],{"class":59}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[49,119102,119103],{"class":159},"**\n",[49,119105,119106],{"class":51,"line":233},[49,119107,399],{"emptyLinePlaceholder":398},[49,119109,119110,119112,119115],{"class":51,"line":241},[49,119111,264],{"class":55},[49,119113,119114],{"class":59}," vim",[49,119116,119117],{"class":59}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[49,119119,119120],{"class":51,"line":1920},[49,119121,119122],{"class":59},"```\n",[49,119124,119125],{"class":51,"line":2011},[49,119126,399],{"emptyLinePlaceholder":398},[49,119128,119129],{"class":51,"line":2017},[49,119130,399],{"emptyLinePlaceholder":398},[49,119132,119133],{"class":51,"line":2029},[49,119134,119135],{"class":55},"选择好Ubuntu版本后，复制下方的内容。\n",[49,119137,119138],{"class":51,"line":2311},[49,119139,399],{"emptyLinePlaceholder":398},[49,119141,119142,119144,119147,119150],{"class":51,"line":2316},[49,119143,1056],{"class":77},[49,119145,119146],{"class":59},"[](",[49,119148,119149],{"class":55},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[49,119151,847],{"class":59},[49,119153,119154],{"class":51,"line":2322},[49,119155,399],{"emptyLinePlaceholder":398},[49,119157,119158],{"class":51,"line":2327},[49,119159,119160],{"class":55},"粘贴进去\n",[49,119162,119163],{"class":51,"line":2341},[49,119164,399],{"emptyLinePlaceholder":398},[49,119166,119167,119169,119171,119174],{"class":51,"line":2346},[49,119168,1056],{"class":77},[49,119170,119146],{"class":59},[49,119172,119173],{"class":55},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[49,119175,847],{"class":59},[49,119177,119178],{"class":51,"line":2352},[49,119179,399],{"emptyLinePlaceholder":398},[49,119181,119182,119185,119188,119191,119193],{"class":51,"line":2373},[49,119183,119184],{"class":55},"按一下ESC，然后英文冒号，输入",[49,119186,119187],{"class":59}," `",[49,119189,119190],{"class":55},":wq!",[49,119192,1801],{"class":59},[49,119194,119195],{"class":55},"然后回车\n",[49,119197,119198],{"class":51,"line":2378},[49,119199,399],{"emptyLinePlaceholder":398},[49,119201,119202,119204,119206,119209],{"class":51,"line":2392},[49,119203,1056],{"class":77},[49,119205,119146],{"class":59},[49,119207,119208],{"class":55},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[49,119210,847],{"class":59},[49,119212,119213],{"class":51,"line":2397},[49,119214,399],{"emptyLinePlaceholder":398},[49,119216,119217],{"class":51,"line":2426},[49,119218,119219],{"class":55},"输入以下命令\n",[49,119221,119222],{"class":51,"line":2431},[49,119223,399],{"emptyLinePlaceholder":398},[49,119225,119226,119229],{"class":51,"line":2448},[49,119227,119228],{"class":59},"```",[49,119230,119231],{"class":55},"Bash\n",[49,119233,119234,119236,119238],{"class":51,"line":2453},[49,119235,264],{"class":55},[49,119237,117848],{"class":59},[49,119239,249],{"class":59},[14,119241,119242],{},"这里被替换成对应学校则成功",[14,119244,119245],{},[25,119246],{"alt":27,"src":119247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[782,119249,119251],{"id":119250},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[18,119253,119255],{"id":119254},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,119257,119258],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,119260,119261],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,119263,119264],{},[124,119265,119266],{"href":119266,"rel":119267},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[128],[14,119269,119270],{},[25,119271],{"alt":27,"src":119272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,119274,119275],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,119277,119278],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,119280,119281],{},[25,119282],{"alt":27,"src":119283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[40,119285,119287],{"className":117827,"code":119286,"language":117829,"meta":27,"style":27},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[46,119288,119289,119294,119301,119306],{"__ignoreMap":27},[49,119290,119291],{"class":51,"line":52},[49,119292,119293],{"class":66},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[49,119295,119296,119298],{"class":51,"line":63},[49,119297,101807],{"class":159},[49,119299,119300],{"class":59}," ~\u002FDownloads\n",[49,119302,119303],{"class":51,"line":70},[49,119304,119305],{"class":66},"#下方chrome安装包名不一定是这个，根据名字来看\n",[49,119307,119308,119310,119312,119314],{"class":51,"line":219},[49,119309,264],{"class":55},[49,119311,117848],{"class":59},[49,119313,269],{"class":59},[49,119315,119316],{"class":59}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,119318,119319],{},[25,119320],{"alt":27,"src":119321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[18,119323,119325],{"id":119324},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[40,119327,119329],{"className":117827,"code":119328,"language":117829,"meta":27,"style":27},"# 老版\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",[46,119330,119331,119336,119344,119355,119360,119364,119369,119379,119387,119398],{"__ignoreMap":27},[49,119332,119333],{"class":51,"line":52},[49,119334,119335],{"class":66},"# 老版\n",[49,119337,119338,119340,119342],{"class":51,"line":63},[49,119339,264],{"class":55},[49,119341,117848],{"class":59},[49,119343,249],{"class":59},[49,119345,119346,119348,119350,119352],{"class":51,"line":70},[49,119347,264],{"class":55},[49,119349,117848],{"class":59},[49,119351,269],{"class":59},[49,119353,119354],{"class":59}," neofetch\n",[49,119356,119357],{"class":51,"line":219},[49,119358,119359],{"class":55},"neofetch\n",[49,119361,119362],{"class":51,"line":233},[49,119363,399],{"emptyLinePlaceholder":398},[49,119365,119366],{"class":51,"line":241},[49,119367,119368],{"class":66},"# 新版\n",[49,119370,119371,119373,119376],{"class":51,"line":1920},[49,119372,264],{"class":55},[49,119374,119375],{"class":59}," add-apt-repository",[49,119377,119378],{"class":59}," ppa:zhangsongcui3371\u002Ffastfetch\n",[49,119380,119381,119383,119385],{"class":51,"line":2011},[49,119382,264],{"class":55},[49,119384,117848],{"class":59},[49,119386,249],{"class":59},[49,119388,119389,119391,119393,119395],{"class":51,"line":2017},[49,119390,264],{"class":55},[49,119392,117848],{"class":59},[49,119394,269],{"class":59},[49,119396,119397],{"class":59}," fastfetch\n",[49,119399,119400],{"class":51,"line":2029},[49,119401,119402],{"class":55},"fastfetch\n",[14,119404,119405],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,119407,119408],{},[25,119409],{"alt":27,"src":119410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[18,119412,119414],{"id":119413},"_323-移除snap应用","3.2.3 移除snap应用",[14,119416,119417],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[40,119419,119421],{"className":117827,"code":119420,"language":117829,"meta":27,"style":27},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[46,119422,119423,119435,119446],{"__ignoreMap":27},[49,119424,119425,119427,119429,119432],{"class":51,"line":52},[49,119426,264],{"class":55},[49,119428,318],{"class":59},[49,119430,119431],{"class":59}," disable",[49,119433,119434],{"class":59}," snapd.service\n",[49,119436,119437,119439,119441,119443],{"class":51,"line":63},[49,119438,264],{"class":55},[49,119440,318],{"class":59},[49,119442,119431],{"class":59},[49,119444,119445],{"class":59}," snapd.socket\n",[49,119447,119448,119450,119452,119454],{"class":51,"line":70},[49,119449,264],{"class":55},[49,119451,318],{"class":59},[49,119453,119431],{"class":59},[49,119455,119456],{"class":59}," snapd.seeded.service\n",[14,119458,119459],{},"然后查看snap应用列表",[14,119461,119462,119463,119468],{},"根据你安装的选择不同（最小安装或普通安装），有",[124,119464,119467],{"href":119465,"rel":119466},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[128],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[40,119470,119472],{"className":117827,"code":119471,"language":117829,"meta":27,"style":27},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[46,119473,119474,119479],{"__ignoreMap":27},[49,119475,119476],{"class":51,"line":52},[49,119477,119478],{"class":66},"# 查询当前系统上snap安装了哪些app\n",[49,119480,119481,119484],{"class":51,"line":63},[49,119482,119483],{"class":55},"snap",[49,119485,119486],{"class":59}," list\n",[14,119488,119489],{},[25,119490],{"alt":27,"src":119491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119493,119494,119495,119498],{},"卸载掉图中所有应用，按照 ",[112,119496,119497],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[40,119500,119502],{"className":117827,"code":119501,"language":117829,"meta":27,"style":27},"#移除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",[46,119503,119504,119509,119521,119526,119537,119542,119553,119558,119569,119574,119578,119583,119594,119605],{"__ignoreMap":27},[49,119505,119506],{"class":51,"line":52},[49,119507,119508],{"class":66},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[49,119510,119511,119513,119516,119518],{"class":51,"line":63},[49,119512,264],{"class":55},[49,119514,119515],{"class":59}," snap",[49,119517,26766],{"class":59},[49,119519,119520],{"class":59}," snap-store\n",[49,119522,119523],{"class":51,"line":70},[49,119524,119525],{"class":66},"#移除firefox浏览器\n",[49,119527,119528,119530,119532,119534],{"class":51,"line":219},[49,119529,264],{"class":55},[49,119531,119515],{"class":59},[49,119533,26766],{"class":59},[49,119535,119536],{"class":59}," firefox\n",[49,119538,119539],{"class":51,"line":233},[49,119540,119541],{"class":66},"#移除gnome-42-2204\n",[49,119543,119544,119546,119548,119550],{"class":51,"line":241},[49,119545,264],{"class":55},[49,119547,119515],{"class":59},[49,119549,26766],{"class":59},[49,119551,119552],{"class":59}," gnome-42-2204\n",[49,119554,119555],{"class":51,"line":1920},[49,119556,119557],{"class":66},"#移除gtk-common-themes\n",[49,119559,119560,119562,119564,119566],{"class":51,"line":2011},[49,119561,264],{"class":55},[49,119563,119515],{"class":59},[49,119565,26766],{"class":59},[49,119567,119568],{"class":59}," gtk-common-themes\n",[49,119570,119571],{"class":51,"line":2017},[49,119572,119573],{"class":66},"#移除其它...\n",[49,119575,119576],{"class":51,"line":2029},[49,119577,3371],{"class":73},[49,119579,119580],{"class":51,"line":2311},[49,119581,119582],{"class":66},"#移除core22,bare以及snapd\n",[49,119584,119585,119587,119589,119591],{"class":51,"line":2316},[49,119586,264],{"class":55},[49,119588,119515],{"class":59},[49,119590,26766],{"class":59},[49,119592,119593],{"class":59}," core22\n",[49,119595,119596,119598,119600,119602],{"class":51,"line":2322},[49,119597,264],{"class":55},[49,119599,119515],{"class":59},[49,119601,26766],{"class":59},[49,119603,119604],{"class":59}," bare\n",[49,119606,119607,119609,119611,119613],{"class":51,"line":2327},[49,119608,264],{"class":55},[49,119610,119515],{"class":59},[49,119612,26766],{"class":59},[49,119614,119615],{"class":59}," snapd\n",[14,119617,119618],{},[25,119619],{"alt":27,"src":119620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119622,119623],{},"输入以下命令查看是否还有snap包",[40,119625,119627],{"className":117827,"code":119626,"language":117829,"meta":27,"style":27},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[46,119628,119629,119635,119639,119643,119647],{"__ignoreMap":27},[49,119630,119631,119633],{"class":51,"line":52},[49,119632,119483],{"class":55},[49,119634,119486],{"class":59},[49,119636,119637],{"class":51,"line":63},[49,119638,119335],{"class":66},[49,119640,119641],{"class":51,"line":70},[49,119642,119359],{"class":55},[49,119644,119645],{"class":51,"line":219},[49,119646,119368],{"class":66},[49,119648,119649],{"class":51,"line":233},[49,119650,119402],{"class":55},[14,119652,119653],{},[25,119654],{"alt":27,"src":119655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[18,119657,119659],{"id":119658},"_324-移除snap","3.2.4 移除snap",[14,119661,119662,119663,119668],{},"在删除掉",[124,119664,119667],{"href":119665,"rel":119666},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[128],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[40,119670,119672],{"className":117827,"code":119671,"language":117829,"meta":27,"style":27}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[46,119673,119674,119679,119692,119697,119708],{"__ignoreMap":27},[49,119675,119676],{"class":51,"line":52},[49,119677,119678],{"class":66}," #使用apt移除掉snap\n",[49,119680,119681,119683,119685,119687,119690],{"class":51,"line":63},[49,119682,264],{"class":55},[49,119684,117848],{"class":59},[49,119686,118156],{"class":59},[49,119688,119689],{"class":159}," --purge",[49,119691,119615],{"class":59},[49,119693,119694],{"class":51,"line":70},[49,119695,119696],{"class":66},"#移除snapd的一些目录\n",[49,119698,119699,119701,119703,119705],{"class":51,"line":219},[49,119700,264],{"class":55},[49,119702,119084],{"class":59},[49,119704,26014],{"class":159},[49,119706,119707],{"class":59}," \u002Fvar\u002Fcache\u002Fsnapd\n",[49,119709,119710,119712,119714,119716],{"class":51,"line":233},[49,119711,264],{"class":55},[49,119713,119084],{"class":59},[49,119715,26014],{"class":159},[49,119717,119718],{"class":59}," ~\u002Fsnap\n",[14,119720,119721,119722,119725],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[46,119723,119724],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[18,119727,119729],{"id":119728},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119731,119732],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[40,119734,119736],{"className":117827,"code":119735,"language":117829,"meta":27,"style":27},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[46,119737,119738],{"__ignoreMap":27},[49,119739,119740,119742,119744],{"class":51,"line":52},[49,119741,264],{"class":55},[49,119743,119114],{"class":59},[49,119745,119746],{"class":59}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119748,119749,119750,119753],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[46,119751,119752],{},":wq"," 回车",[40,119755,119757],{"className":117827,"code":119756,"language":117829,"meta":27,"style":27},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[46,119758,119759,119766,119780],{"__ignoreMap":27},[49,119760,119761,119764],{"class":51,"line":52},[49,119762,119763],{"class":55},"Package:",[49,119765,119615],{"class":59},[49,119767,119768,119771,119774,119777],{"class":51,"line":63},[49,119769,119770],{"class":55},"Pin:",[49,119772,119773],{"class":59}," release",[49,119775,119776],{"class":59}," a=",[49,119778,119779],{"class":159},"*\n",[49,119781,119782,119785],{"class":51,"line":70},[49,119783,119784],{"class":55},"Pin-Priority:",[49,119786,119787],{"class":159}," -10\n",[14,119789,119790],{},[25,119791],{"alt":27,"src":119792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[18,119794,119796],{"id":119795},"_326-测试是否成功","3.2.6 测试是否成功",[40,119798,119800],{"className":117827,"code":119799,"language":117829,"meta":27,"style":27},"sudo apt update\nsudo apt install firefox\n",[46,119801,119802,119810],{"__ignoreMap":27},[49,119803,119804,119806,119808],{"class":51,"line":52},[49,119805,264],{"class":55},[49,119807,117848],{"class":59},[49,119809,249],{"class":59},[49,119811,119812,119814,119816,119818],{"class":51,"line":63},[49,119813,264],{"class":55},[49,119815,117848],{"class":59},[49,119817,269],{"class":59},[49,119819,119536],{"class":59},[14,119821,119822],{},"这里提示snapd无法被安装，就证明成功了",[14,119824,119825],{},[25,119826],{"alt":27,"src":119827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[18,119829,119831],{"id":119830},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119833,119834],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119836,119837],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119839,119840],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[40,119842,119844],{"className":117827,"code":119843,"language":117829,"meta":27,"style":27},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[46,119845,119846,119851,119860,119865,119873],{"__ignoreMap":27},[49,119847,119848],{"class":51,"line":52},[49,119849,119850],{"class":66},"# 添加Mozilla提供的源\n",[49,119852,119853,119855,119857],{"class":51,"line":63},[49,119854,264],{"class":55},[49,119856,119375],{"class":59},[49,119858,119859],{"class":59}," ppa:mozillateam\u002Fppa\n",[49,119861,119862],{"class":51,"line":70},[49,119863,119864],{"class":66},"# 安装Firefox\n",[49,119866,119867,119869,119871],{"class":51,"line":219},[49,119868,264],{"class":55},[49,119870,117848],{"class":59},[49,119872,249],{"class":59},[49,119874,119875,119877,119879,119881],{"class":51,"line":233},[49,119876,264],{"class":55},[49,119878,117848],{"class":59},[49,119880,269],{"class":59},[49,119882,119536],{"class":59},[18,119884,119886],{"id":119885},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119888,119889],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119891,119892],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[40,119894,119896],{"className":117827,"code":119895,"language":117829,"meta":27,"style":27},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[46,119897,119898,119903,119913,119921,119925],{"__ignoreMap":27},[49,119899,119900],{"class":51,"line":52},[49,119901,119902],{"class":66},"#删掉禁止安装snap的配置文件\n",[49,119904,119905,119907,119909,119911],{"class":51,"line":63},[49,119906,264],{"class":55},[49,119908,119084],{"class":59},[49,119910,26014],{"class":159},[49,119912,119746],{"class":59},[49,119914,119915,119917,119919],{"class":51,"line":70},[49,119916,264],{"class":55},[49,119918,117848],{"class":59},[49,119920,249],{"class":59},[49,119922,119923],{"class":51,"line":219},[49,119924,399],{"emptyLinePlaceholder":398},[49,119926,119927,119929,119931],{"class":51,"line":233},[49,119928,264],{"class":55},[49,119930,117848],{"class":59},[49,119932,119933],{"class":59}," dist-update\n",[782,119935,119937],{"id":119936},"_33-中文输入法","3.3 中文输入法",[18,119939,119941],{"id":119940},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119943,119944],{},"官网下载搜狗输入法",[14,119946,119947],{},[25,119948],{"alt":27,"src":119949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119951,119952],{},[25,119953],{"alt":27,"src":119954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119956,119957],{},"打开终端输入如下",[40,119959,119961],{"className":117827,"code":119960,"language":117829,"meta":27,"style":27},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[46,119962,119963,119970],{"__ignoreMap":27},[49,119964,119965,119967],{"class":51,"line":52},[49,119966,101807],{"class":159},[49,119968,119969],{"class":59}," ~\u002FDownloads\u002F\n",[49,119971,119972,119974,119976,119978],{"class":51,"line":63},[49,119973,264],{"class":55},[49,119975,117848],{"class":59},[49,119977,269],{"class":59},[49,119979,119980],{"class":59}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119982,119983],{},"打开Fcitx",[14,119985,119986,119989],{},[25,119987],{"alt":27,"src":119988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[25,119990],{"alt":27,"src":119991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119993,119994],{},[25,119995],{"alt":27,"src":119996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119998,119999],{},"添加搜狗输入法",[14,120001,120002],{},[25,120003],{"alt":27,"src":120004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,120006,120007],{},[25,120008],{"alt":27,"src":120009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,120011,120012],{},"将搜狗输入法设置为唯一输入法",[14,120014,120015],{},[25,120016],{"alt":27,"src":120017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[18,120019,120021],{"id":120020},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[30,120023,120024],{},[33,120025,120026],{},"卸载旧输入法",[40,120028,120030],{"className":119054,"code":120029,"language":119056,"meta":27,"style":27},"sudo apt purge fcitx* ibus*\n",[46,120031,120032],{"__ignoreMap":27},[49,120033,120034,120036,120038,120040,120043,120045,120048],{"class":51,"line":52},[49,120035,264],{"class":55},[49,120037,117848],{"class":59},[49,120039,118189],{"class":59},[49,120041,120042],{"class":59}," fcitx",[49,120044,1284],{"class":159},[49,120046,120047],{"class":59}," ibus",[49,120049,119779],{"class":159},[30,120051,120052],{"start":63},[33,120053,120054],{},"安装Fcitx5",[40,120056,120058],{"className":117827,"code":120057,"language":117829,"meta":27,"style":27},"# 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",[46,120059,120060,120065,120079,120083,120088,120097,120105],{"__ignoreMap":27},[49,120061,120062],{"class":51,"line":52},[49,120063,120064],{"class":66},"# Ubuntu22.04及以上、Debian12及以上\n",[49,120066,120067,120069,120071,120073,120076],{"class":51,"line":63},[49,120068,264],{"class":55},[49,120070,117848],{"class":59},[49,120072,269],{"class":59},[49,120074,120075],{"class":59}," fcitx5",[49,120077,120078],{"class":59}," fcitx5-chinese-addons\n",[49,120080,120081],{"class":51,"line":70},[49,120082,399],{"emptyLinePlaceholder":398},[49,120084,120085],{"class":51,"line":219},[49,120086,120087],{"class":66},"# Ubuntu20.04\n",[49,120089,120090,120092,120094],{"class":51,"line":233},[49,120091,264],{"class":55},[49,120093,119375],{"class":59},[49,120095,120096],{"class":59}," ppa:zhsj\u002Ffcitx5\n",[49,120098,120099,120101,120103],{"class":51,"line":241},[49,120100,264],{"class":55},[49,120102,117848],{"class":59},[49,120104,249],{"class":59},[49,120106,120107,120109,120111,120113,120115],{"class":51,"line":1920},[49,120108,264],{"class":55},[49,120110,117848],{"class":59},[49,120112,269],{"class":59},[49,120114,120075],{"class":59},[49,120116,120078],{"class":59},[30,120118,120119,120122],{"start":70},[33,120120,120121],{},"Reboot System",[33,120123,120124],{},"启动Fcitx5",[14,120126,120127],{},[25,120128],{"alt":27,"src":120129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[30,120131,120132],{"start":233},[33,120133,120134],{},"修改一些设置",[14,120136,120137],{},"将Pinyin和Keyboard - English US加入到左边。",[14,120139,120140],{},[25,120141],{"alt":27,"src":120142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,120144,120145],{},"添加快捷键以便于更好切换中英文",[14,120147,120148],{},[25,120149],{"alt":27,"src":120150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[30,120152,120153],{"start":241},[33,120154,120155],{},"重启",[40,120157,120159],{"className":119054,"code":120158,"language":119056,"meta":27,"style":27},"sudo shutdown -r now\n",[46,120160,120161],{"__ignoreMap":27},[49,120162,120163,120165,120168,120171],{"class":51,"line":52},[49,120164,264],{"class":55},[49,120166,120167],{"class":59}," shutdown",[49,120169,120170],{"class":159}," -r",[49,120172,120173],{"class":59}," now\n",[30,120175,120176],{"start":1920},[33,120177,120178],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,120180,120181],{},[124,120182,120183],{"href":120183,"rel":120184},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[128],[30,120186,120187],{"start":2011},[33,120188,120189],{},"再重启",[40,120191,120192],{"className":119054,"code":120158,"language":119056,"meta":27,"style":27},[46,120193,120194],{"__ignoreMap":27},[49,120195,120196,120198,120200,120202],{"class":51,"line":52},[49,120197,264],{"class":55},[49,120199,120167],{"class":59},[49,120201,120170],{"class":159},[49,120203,120173],{"class":59},[782,120205,120207],{"id":120206},"_34-pip3源替换","3.4 pip3源替换",[14,120209,120210],{},"非Debian系发行版需要做。",[14,120212,120213],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,120215,120216],{},"使用dnf的系统也可能不用做。",[40,120218,120220],{"className":117827,"code":120219,"language":117829,"meta":27,"style":27},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[46,120221,120222,120227,120234,120239,120244],{"__ignoreMap":27},[49,120223,120224],{"class":51,"line":52},[49,120225,120226],{"class":66},"# 检查是否已安装 pip\n",[49,120228,120229,120232],{"class":51,"line":63},[49,120230,120231],{"class":55},"pip3",[49,120233,26976],{"class":159},[49,120235,120236],{"class":51,"line":70},[49,120237,120238],{"class":66},"# 如果未安装，先安装 pip3（见下方）\n",[49,120240,120241],{"class":51,"line":219},[49,120242,120243],{"class":66},"# 配置 pip 使用清华源\n",[49,120245,120246,120248,120251,120254,120257],{"class":51,"line":233},[49,120247,120231],{"class":55},[49,120249,120250],{"class":59}," config",[49,120252,120253],{"class":59}," set",[49,120255,120256],{"class":59}," global.index-url",[49,120258,120259],{"class":59}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,120261,120262],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,120264,120265],{},[25,120266],{"alt":27,"src":120267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[40,120269,120271],{"className":117827,"code":120270,"language":117829,"meta":27,"style":27},"#安装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",[46,120272,120273,120278,120286,120297,120301,120306,120325,120329,120334,120346,120350,120355],{"__ignoreMap":27},[49,120274,120275],{"class":51,"line":52},[49,120276,120277],{"class":66},"#安装pip3\n",[49,120279,120280,120282,120284],{"class":51,"line":63},[49,120281,264],{"class":55},[49,120283,117848],{"class":59},[49,120285,249],{"class":59},[49,120287,120288,120290,120292,120294],{"class":51,"line":70},[49,120289,264],{"class":55},[49,120291,246],{"class":59},[49,120293,269],{"class":59},[49,120295,120296],{"class":59}," python3-pip\n",[49,120298,120299],{"class":51,"line":219},[49,120300,399],{"emptyLinePlaceholder":398},[49,120302,120303],{"class":51,"line":233},[49,120304,120305],{"class":66},"#更新pip3\n",[49,120307,120308,120310,120312,120314,120316,120318,120321,120323],{"class":51,"line":241},[49,120309,101410],{"class":55},[49,120311,101413],{"class":159},[49,120313,101436],{"class":59},[49,120315,269],{"class":59},[49,120317,27108],{"class":159},[49,120319,120320],{"class":59}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[49,120322,101441],{"class":159},[49,120324,101444],{"class":59},[49,120326,120327],{"class":51,"line":1920},[49,120328,399],{"emptyLinePlaceholder":398},[49,120330,120331],{"class":51,"line":2011},[49,120332,120333],{"class":66},"#设置pip源为清华源\n",[49,120335,120336,120338,120340,120342,120344],{"class":51,"line":2017},[49,120337,120231],{"class":55},[49,120339,120250],{"class":59},[49,120341,120253],{"class":59},[49,120343,120256],{"class":59},[49,120345,120259],{"class":59},[49,120347,120348],{"class":51,"line":2029},[49,120349,399],{"emptyLinePlaceholder":398},[49,120351,120352],{"class":51,"line":2311},[49,120353,120354],{"class":66},"#测试\n",[49,120356,120357,120359,120361,120363,120365,120367],{"class":51,"line":2316},[49,120358,101410],{"class":55},[49,120360,101413],{"class":159},[49,120362,101436],{"class":59},[49,120364,269],{"class":59},[49,120366,101441],{"class":159},[49,120368,101444],{"class":59},[14,120370,120371],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,120373,120374],{},[25,120375],{"alt":27,"src":120376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[782,120378,120380],{"id":120379},"_35-显卡驱动安装","3.5 显卡驱动安装",[18,120382,120384],{"id":120383},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[40,120386,120388],{"className":119054,"code":120387,"language":119056,"meta":27,"style":27},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[46,120389,120390,120395,120410,120415],{"__ignoreMap":27},[49,120391,120392],{"class":51,"line":52},[49,120393,120394],{"class":66},"# 如果是使用apt安装的驱动\n",[49,120396,120397,120399,120401,120403,120405,120408],{"class":51,"line":63},[49,120398,264],{"class":55},[49,120400,246],{"class":59},[49,120402,26766],{"class":59},[49,120404,119689],{"class":159},[49,120406,120407],{"class":59}," nvidia",[49,120409,119779],{"class":159},[49,120411,120412],{"class":51,"line":70},[49,120413,120414],{"class":66},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[49,120416,120417,120419],{"class":51,"line":219},[49,120418,264],{"class":55},[49,120420,120421],{"class":59}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[18,120423,120425],{"id":120424},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[130,120427,120429],{"id":120428},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[138,120431,120433],{"id":120432},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[40,120435,120437],{"className":119054,"code":120436,"language":119056,"meta":27,"style":27},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[46,120438,120439,120444,120455,120460,120470,120475],{"__ignoreMap":27},[49,120440,120441],{"class":51,"line":52},[49,120442,120443],{"class":66},"# 安装英伟达驱动\n",[49,120445,120446,120448,120450,120452],{"class":51,"line":63},[49,120447,264],{"class":55},[49,120449,117848],{"class":59},[49,120451,269],{"class":59},[49,120453,120454],{"class":59}," nvidia-driver-版本号\n",[49,120456,120457],{"class":51,"line":70},[49,120458,120459],{"class":66},"# 重启 \n",[49,120461,120462,120464,120466,120468],{"class":51,"line":219},[49,120463,264],{"class":55},[49,120465,120167],{"class":59},[49,120467,120170],{"class":159},[49,120469,120173],{"class":59},[49,120471,120472],{"class":51,"line":233},[49,120473,120474],{"class":66},"# 检查驱动是否安装成功\n",[49,120476,120477],{"class":51,"line":241},[49,120478,120479],{"class":55},"nvidia-smi\n",[138,120481,120483],{"id":120482},"_35212-debian","3.5.2.1.2 Debian",[40,120485,120487],{"className":119054,"code":120486,"language":119056,"meta":27,"style":27},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[46,120488,120489,120493,120507,120511,120521,120525],{"__ignoreMap":27},[49,120490,120491],{"class":51,"line":52},[49,120492,120443],{"class":66},[49,120494,120495,120497,120499,120501,120504],{"class":51,"line":63},[49,120496,264],{"class":55},[49,120498,117848],{"class":59},[49,120500,269],{"class":59},[49,120502,120503],{"class":59}," nvidia-driver",[49,120505,120506],{"class":59}," nvidia-settings\n",[49,120508,120509],{"class":51,"line":70},[49,120510,120459],{"class":66},[49,120512,120513,120515,120517,120519],{"class":51,"line":219},[49,120514,264],{"class":55},[49,120516,120167],{"class":59},[49,120518,120170],{"class":159},[49,120520,120173],{"class":59},[49,120522,120523],{"class":51,"line":233},[49,120524,120474],{"class":66},[49,120526,120527],{"class":51,"line":241},[49,120528,120479],{"class":55},[130,120530,120532],{"id":120531},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120534,120535,120536,120539],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[112,120537,120538],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120541,120542,120543],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24249,120544,120545],{},[112,120546,120547],{},"（也可以不禁用桌面环境，直接进行下一步。）",[40,120549,120551],{"className":119054,"code":120550,"language":119056,"meta":27,"style":27},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[46,120552,120553,120558,120568,120573,120586,120591],{"__ignoreMap":27},[49,120554,120555],{"class":51,"line":52},[49,120556,120557],{"class":66},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[49,120559,120560,120562,120565],{"class":51,"line":63},[49,120561,264],{"class":55},[49,120563,120564],{"class":59}," telinit",[49,120566,120567],{"class":159}," 3\n",[49,120569,120570],{"class":51,"line":70},[49,120571,120572],{"class":66},"# ubuntu 使用下方命令\n",[49,120574,120575,120577,120580,120583],{"class":51,"line":219},[49,120576,264],{"class":55},[49,120578,120579],{"class":59}," service",[49,120581,120582],{"class":59}," lightdm",[49,120584,120585],{"class":59}," stop\n",[49,120587,120588],{"class":51,"line":233},[49,120589,120590],{"class":66},"# Fedora 使用下方命令\n",[49,120592,120593,120595,120597,120600],{"class":51,"line":241},[49,120594,264],{"class":55},[49,120596,318],{"class":59},[49,120598,120599],{"class":59}," isolate",[49,120601,120602],{"class":59}," multi-user.target\n",[14,120604,120605],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[40,120607,120609],{"className":119054,"code":120608,"language":119056,"meta":27,"style":27},"# 编译环境+准备工作\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",[46,120610,120611,120616,120627,120632,120639,120644,120656,120661,120668,120673],{"__ignoreMap":27},[49,120612,120613],{"class":51,"line":52},[49,120614,120615],{"class":66},"# 编译环境+准备工作\n",[49,120617,120618,120620,120622,120624],{"class":51,"line":63},[49,120619,264],{"class":55},[49,120621,117848],{"class":59},[49,120623,269],{"class":59},[49,120625,120626],{"class":59}," build-essential\n",[49,120628,120629],{"class":51,"line":70},[49,120630,120631],{"class":66},"# 进入到.run目录中\n",[49,120633,120634,120636],{"class":51,"line":219},[49,120635,101807],{"class":159},[49,120637,120638],{"class":59}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[49,120640,120641],{"class":51,"line":233},[49,120642,120643],{"class":66},"# 给驱动文件增加可执行权限：\n",[49,120645,120646,120648,120650,120653],{"class":51,"line":241},[49,120647,264],{"class":55},[49,120649,25270],{"class":59},[49,120651,120652],{"class":59}," a+x",[49,120654,120655],{"class":59}," NVIDIA-Linux-x86_64-550.107.02.run\n",[49,120657,120658],{"class":51,"line":1920},[49,120659,120660],{"class":66},"# 然后执行安装：\n",[49,120662,120663,120665],{"class":51,"line":2011},[49,120664,264],{"class":55},[49,120666,120667],{"class":59}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[49,120669,120670],{"class":51,"line":2017},[49,120671,120672],{"class":66},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[49,120674,120675,120677,120680],{"class":51,"line":2029},[49,120676,264],{"class":55},[49,120678,120679],{"class":59}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[49,120681,120682],{"class":159},"  --no-opengl-files\n",[14,120684,120685],{},"安装完毕重启即可",[40,120687,120689],{"className":119054,"code":120688,"language":119056,"meta":27,"style":27},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[46,120690,120691,120695,120701,120705],{"__ignoreMap":27},[49,120692,120693],{"class":51,"line":52},[49,120694,120459],{"class":66},[49,120696,120697,120699],{"class":51,"line":63},[49,120698,264],{"class":55},[49,120700,27323],{"class":59},[49,120702,120703],{"class":51,"line":70},[49,120704,120474],{"class":66},[49,120706,120707],{"class":51,"line":219},[49,120708,120479],{"class":55},[18,120710,120712],{"id":120711},"_353-安装cuda","3.5.3 安装CUDA",[14,120714,120715],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120717,120718],{},[25,120719],{"alt":27,"src":120720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[30,120722,120723],{},[33,120724,120725],{},"先查看显卡驱动所支持的最高CUDA版本",[40,120727,120728],{"className":119054,"code":120479,"language":119056,"meta":27,"style":27},[46,120729,120730],{"__ignoreMap":27},[49,120731,120732],{"class":51,"line":52},[49,120733,120479],{"class":55},[14,120735,120736],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120738,120739],{},[25,120740],{"alt":27,"src":120741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[30,120743,120744],{"start":63},[33,120745,120746],{},"下载CUDA并安装CUDA",[14,120748,118833,120749],{},[124,120750,118836],{"href":118836,"rel":120751},[128],[14,120753,120754],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120756,120757],{},[25,120758],{"alt":27,"src":120759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120761,120762,120763,120768],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[124,120764,120767],{"href":120765,"rel":120766},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[128],"Vinci机器人队单片机教程","）",[14,120770,120771],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120773,120774],{},[25,120775],{"alt":27,"src":120776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120778,120779],{},"将最下方框框里的命令敲入终端",[40,120781,120783],{"className":119054,"code":120782,"language":119056,"meta":27,"style":27},"# 在当前文件夹下创建一个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",[46,120784,120785,120790,120799,120804,120811,120816,120824,120829,120840,120845],{"__ignoreMap":27},[49,120786,120787],{"class":51,"line":52},[49,120788,120789],{"class":66},"# 在当前文件夹下创建一个ttt的子文件夹\n",[49,120791,120792,120794,120796],{"class":51,"line":63},[49,120793,101797],{"class":55},[49,120795,29747],{"class":159},[49,120797,120798],{"class":59}," .\u002Fttt\n",[49,120800,120801],{"class":51,"line":70},[49,120802,120803],{"class":66},"# 进入ttt文件夹\n",[49,120805,120806,120808],{"class":51,"line":219},[49,120807,101807],{"class":159},[49,120809,120810],{"class":59}," ttt\n",[49,120812,120813],{"class":51,"line":233},[49,120814,120815],{"class":66},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[49,120817,120818,120821],{"class":51,"line":241},[49,120819,120820],{"class":55},"wget",[49,120822,120823],{"class":59}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[49,120825,120826],{"class":51,"line":1920},[49,120827,120828],{"class":66},"# 给予权限\n",[49,120830,120831,120833,120835,120837],{"class":51,"line":2011},[49,120832,264],{"class":55},[49,120834,25270],{"class":59},[49,120836,120652],{"class":59},[49,120838,120839],{"class":59}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[49,120841,120842],{"class":51,"line":2017},[49,120843,120844],{"class":66},"# 运行脚本\n",[49,120846,120847,120849],{"class":51,"line":2029},[49,120848,264],{"class":55},[49,120850,120839],{"class":59},[14,120852,120853],{},[25,120854],{"alt":27,"src":120855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120857,120858],{},"正在安装中：",[14,120860,120861],{},[25,120862],{"alt":27,"src":120863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120865,120866],{},"输入accept接受即可",[14,120868,120869],{},[25,120870],{"alt":27,"src":120871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120873,120874],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120876,120877],{},[25,120878],{"alt":27,"src":120879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120881,120882],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120884,120885],{},[25,120886],{"alt":27,"src":120887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[30,120889,120890],{"start":70},[33,120891,120892],{},"配置环境",[14,120894,120895],{},"根据上方确认一下路径，比如我上面红色框起来的为",[40,120897,120899],{"className":119054,"code":120898,"language":119056,"meta":27,"style":27},"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",[46,120900,120901,120917,120932],{"__ignoreMap":27},[49,120902,120903,120906,120909,120912,120915],{"class":51,"line":52},[49,120904,120905],{"class":55},"Please",[49,120907,120908],{"class":59}," make",[49,120910,120911],{"class":59}," sure",[49,120913,120914],{"class":59}," that",[49,120916,3371],{"class":73},[49,120918,120919,120921,120924,120927,120930],{"class":51,"line":63},[49,120920,52802],{"class":55},[49,120922,120923],{"class":59},"   PATH",[49,120925,120926],{"class":59}," includes",[49,120928,120929],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[49,120931,3371],{"class":73},[49,120933,120934,120936,120939,120941,120944,120947,120949,120952,120955,120958,120961,120963,120966,120968],{"class":51,"line":70},[49,120935,52802],{"class":55},[49,120937,120938],{"class":59},"   LD_LIBRARY_PATH",[49,120940,120926],{"class":59},[49,120942,120943],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[49,120945,120946],{"class":59}," or,",[49,120948,5906],{"class":59},[49,120950,120951],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[49,120953,120954],{"class":59}," to",[49,120956,120957],{"class":59}," \u002Fetc\u002Fld.so.conf",[49,120959,120960],{"class":59}," and",[49,120962,560],{"class":59},[49,120964,120965],{"class":59}," ldconfig",[49,120967,65135],{"class":59},[49,120969,120970],{"class":59}," root\n",[14,120972,120973],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[40,120975,120977],{"className":119054,"code":120976,"language":119056,"meta":27,"style":27},"which nvcc\n",[46,120978,120979],{"__ignoreMap":27},[49,120980,120981,120984],{"class":51,"line":52},[49,120982,120983],{"class":159},"which",[49,120985,120986],{"class":59}," nvcc\n",[14,120988,120989],{},[25,120990],{"alt":27,"src":120991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120993,120994],{},"所以我进行以下操作：",[40,120996,120998],{"className":119054,"code":120997,"language":119056,"meta":27,"style":27},"sudo vim ~\u002F.bashrc\n",[46,120999,121000],{"__ignoreMap":27},[49,121001,121002,121004,121006],{"class":51,"line":52},[49,121003,264],{"class":55},[49,121005,119114],{"class":59},[49,121007,121008],{"class":59}," ~\u002F.bashrc\n",[14,121010,121011],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[40,121013,121015],{"className":119054,"code":121014,"language":119056,"meta":27,"style":27},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[46,121016,121017,121029],{"__ignoreMap":27},[49,121018,121019,121021,121024,121026],{"class":51,"line":52},[49,121020,25732],{"class":77},[49,121022,121023],{"class":73}," PATH",[49,121025,78],{"class":77},[49,121027,121028],{"class":73},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[49,121030,121031,121033,121036,121038],{"class":51,"line":63},[49,121032,25732],{"class":77},[49,121034,121035],{"class":73}," LD_LIBRARY_PATH",[49,121037,78],{"class":77},[49,121039,121040],{"class":73},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,121042,121043],{},[25,121044],{"alt":27,"src":121045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[40,121047,121049],{"className":119054,"code":121048,"language":119056,"meta":27,"style":27},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[46,121050,121051,121056,121062,121067],{"__ignoreMap":27},[49,121052,121053],{"class":51,"line":52},[49,121054,121055],{"class":66},"# 刷新当前终端的环境变量\n",[49,121057,121058,121060],{"class":51,"line":63},[49,121059,101424],{"class":159},[49,121061,121008],{"class":59},[49,121063,121064],{"class":51,"line":70},[49,121065,121066],{"class":66},"# 验证CUDA是否安装成功\n",[49,121068,121069,121072],{"class":51,"line":219},[49,121070,121071],{"class":55},"nvcc",[49,121073,121074],{"class":159}," -V\n",[14,121076,121077],{},"出现下图这种则安装成功。",[14,121079,121080],{},[25,121081],{"alt":27,"src":121082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[18,121084,121086],{"id":121085},"_354-安装cudnn","3.5.4 安装cuDNN",[30,121088,121089],{},[33,121090,121091],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,121093,121094,121095,121100],{},"前往 NVIDIA cuDNN 下载页面：",[124,121096,121099],{"href":121097,"rel":121098},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[128],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,121102,121103],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,121105,121106],{},[25,121107],{"alt":27,"src":121108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,121110,121111],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,121113,121114],{},[25,121115],{"alt":27,"src":121116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,121118,121119],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,121121,121122],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,121124,121125],{},[112,121126,121127],{},"我这里选择所有Linux X86_64最通用的办法：",[14,121129,121130],{},"下载好的：",[14,121132,121133],{},[25,121134],{"alt":27,"src":121135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[30,121137,121138],{"start":63},[33,121139,121140],{},"安装cuDNN",[14,121142,121143],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,121145,121146],{},[25,121147],{"alt":27,"src":121148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,121150,121151],{},"解压文件，并复制到对应位置完成安装",[40,121153,121155],{"className":119054,"code":121154,"language":119056,"meta":27,"style":27},"# 解压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",[46,121156,121157,121162,121173,121178,121185,121190,121206,121220,121225,121236,121245,121249,121265],{"__ignoreMap":27},[49,121158,121159],{"class":51,"line":52},[49,121160,121161],{"class":66},"# 解压cuDNN文件\n",[49,121163,121164,121167,121170],{"class":51,"line":63},[49,121165,121166],{"class":55},"tar",[49,121168,121169],{"class":159}," -xvf",[49,121171,121172],{"class":59}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[49,121174,121175],{"class":51,"line":70},[49,121176,121177],{"class":66},"# cd进文件夹\n",[49,121179,121180,121182],{"class":51,"line":219},[49,121181,101807],{"class":159},[49,121183,121184],{"class":59}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[49,121186,121187],{"class":51,"line":233},[49,121188,121189],{"class":66},"# 复制cuDNN文件到CUDA目录\n",[49,121191,121192,121194,121196,121199,121201,121204],{"class":51,"line":241},[49,121193,264],{"class":55},[49,121195,28392],{"class":59},[49,121197,121198],{"class":59}," include\u002Fcudnn",[49,121200,1284],{"class":159},[49,121202,121203],{"class":59},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[49,121205,3371],{"class":73},[49,121207,121208,121210,121212,121215,121217],{"class":51,"line":1920},[49,121209,264],{"class":55},[49,121211,28392],{"class":59},[49,121213,121214],{"class":59}," lib\u002Flibcudnn",[49,121216,1284],{"class":159},[49,121218,121219],{"class":59},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[49,121221,121222],{"class":51,"line":2011},[49,121223,121224],{"class":66},"# 对比一下有没有缺文件\n",[49,121226,121227,121229,121232,121234],{"class":51,"line":2017},[49,121228,56],{"class":55},[49,121230,121231],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[49,121233,1284],{"class":159},[49,121235,3371],{"class":73},[49,121237,121238,121240,121243],{"class":51,"line":2029},[49,121239,56],{"class":55},[49,121241,121242],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[49,121244,119779],{"class":159},[49,121246,121247],{"class":51,"line":2311},[49,121248,120828],{"class":66},[49,121250,121251,121253,121255,121258,121260,121262],{"class":51,"line":2316},[49,121252,264],{"class":55},[49,121254,25270],{"class":59},[49,121256,121257],{"class":59}," a+r",[49,121259,121231],{"class":59},[49,121261,1284],{"class":159},[49,121263,121264],{"class":73},"   \n",[49,121266,121267,121269,121271,121273,121275],{"class":51,"line":2322},[49,121268,264],{"class":55},[49,121270,25270],{"class":59},[49,121272,121257],{"class":59},[49,121274,121242],{"class":59},[49,121276,119779],{"class":159},[30,121278,121279],{"start":70},[33,121280,121281],{},"检查是否安装成功",[40,121283,121285],{"className":119054,"code":121284,"language":119056,"meta":27,"style":27},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[46,121286,121287,121292],{"__ignoreMap":27},[49,121288,121289],{"class":51,"line":52},[49,121290,121291],{"class":66},"# 检查cuDNN版本命令\n",[49,121293,121294,121297,121300,121302,121304,121307,121310],{"class":51,"line":63},[49,121295,121296],{"class":55},"cat",[49,121298,121299],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[49,121301,166],{"class":77},[49,121303,30767],{"class":55},[49,121305,121306],{"class":59}," CUDNN_MAJOR",[49,121308,121309],{"class":159}," -A",[49,121311,48254],{"class":159},[14,121313,121314],{},"出现下图这样的就是安装成功了",[14,121316,121317],{},[25,121318],{"alt":27,"src":121319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[30,121321,121322],{"start":219},[33,121323,121324],{},"软链接(一般不需要)",[40,121326,121328],{"className":119054,"code":121327,"language":119056,"meta":27,"style":27},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[46,121329,121330,121335],{"__ignoreMap":27},[49,121331,121332],{"class":51,"line":52},[49,121333,121334],{"class":66},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[49,121336,121337,121339],{"class":51,"line":63},[49,121338,264],{"class":55},[49,121340,121341],{"class":59}," ldconfig\n",[14,121343,121344],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[40,121346,121351],{"className":121347,"code":121348,"language":121349,"meta":121350,"style":27},"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",[46,121352,121353,121358,121363,121368,121373,121378,121383],{"__ignoreMap":27},[49,121354,121355],{"class":51,"line":52},[49,121356,121357],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[49,121359,121360],{"class":51,"line":63},[49,121361,121362],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[49,121364,121365],{"class":51,"line":70},[49,121366,121367],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[49,121369,121370],{"class":51,"line":219},[49,121371,121372],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[49,121374,121375],{"class":51,"line":233},[49,121376,121377],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[49,121379,121380],{"class":51,"line":241},[49,121381,121382],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[49,121384,121385],{"class":51,"line":1920},[49,121386,121387],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,121389,121390],{},"运行下方的命令",[40,121392,121394],{"className":119054,"code":121393,"language":119056,"meta":27,"style":27},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[46,121395,121396,121401,121408,121413],{"__ignoreMap":27},[49,121397,121398],{"class":51,"line":52},[49,121399,121400],{"class":66},"# cd进入CUDA路径\n",[49,121402,121403,121405],{"class":51,"line":63},[49,121404,101807],{"class":159},[49,121406,121407],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[49,121409,121410],{"class":51,"line":70},[49,121411,121412],{"class":66}," # 查看本路径下的需要软链接的文件名\n",[49,121414,121415],{"class":51,"line":219},[49,121416,121417],{"class":55}," ls\n",[14,121419,121420],{},[25,121421],{"alt":27,"src":121422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,121424,121425,121426,19107,121429,19107,121432,121435],{},"如上图，我需要将",[46,121427,121428],{},"libcudnn_xxx_xxxxx.so.8.9.7",[46,121430,121431],{},"libcudnn_xxx_xxxxx.so.8",[46,121433,121434],{},"libcudnn_xxx_xxxxx.so","软链接",[40,121437,121439],{"className":119054,"code":121438,"language":119056,"meta":27,"style":27},"# 创建符号链接。对于每个 .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",[46,121440,121441,121446,121462,121476,121490,121504,121518,121532,121546,121551,121557,121562],{"__ignoreMap":27},[49,121442,121443],{"class":51,"line":52},[49,121444,121445],{"class":66},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[49,121447,121448,121450,121453,121456,121459],{"class":51,"line":63},[49,121449,264],{"class":55},[49,121451,121452],{"class":59}," ln",[49,121454,121455],{"class":159}," -sf",[49,121457,121458],{"class":59}," libcudnn_cnn_train.so.8.9.7",[49,121460,121461],{"class":59}," libcudnn_cnn_train.so.8\n",[49,121463,121464,121466,121468,121470,121473],{"class":51,"line":70},[49,121465,264],{"class":55},[49,121467,121452],{"class":59},[49,121469,121455],{"class":159},[49,121471,121472],{"class":59}," libcudnn_adv_infer.so.8.9.7",[49,121474,121475],{"class":59}," libcudnn_adv_infer.so.8\n",[49,121477,121478,121480,121482,121484,121487],{"class":51,"line":219},[49,121479,264],{"class":55},[49,121481,121452],{"class":59},[49,121483,121455],{"class":159},[49,121485,121486],{"class":59}," libcudnn_adv_train.so.8.9.7",[49,121488,121489],{"class":59}," libcudnn_adv_train.so.8\n",[49,121491,121492,121494,121496,121498,121501],{"class":51,"line":233},[49,121493,264],{"class":55},[49,121495,121452],{"class":59},[49,121497,121455],{"class":159},[49,121499,121500],{"class":59}," libcudnn_cnn_infer.so.8.9.7",[49,121502,121503],{"class":59}," libcudnn_cnn_infer.so.8\n",[49,121505,121506,121508,121510,121512,121515],{"class":51,"line":241},[49,121507,264],{"class":55},[49,121509,121452],{"class":59},[49,121511,121455],{"class":159},[49,121513,121514],{"class":59}," libcudnn.so.8.9.7",[49,121516,121517],{"class":59}," libcudnn.so.8\n",[49,121519,121520,121522,121524,121526,121529],{"class":51,"line":1920},[49,121521,264],{"class":55},[49,121523,121452],{"class":59},[49,121525,121455],{"class":159},[49,121527,121528],{"class":59}," libcudnn_ops_infer.so.8.9.7",[49,121530,121531],{"class":59}," libcudnn_ops_infer.so.8\n",[49,121533,121534,121536,121538,121540,121543],{"class":51,"line":2011},[49,121535,264],{"class":55},[49,121537,121452],{"class":59},[49,121539,121455],{"class":159},[49,121541,121542],{"class":59}," libcudnn_ops_train.so.8.9.7",[49,121544,121545],{"class":59}," libcudnn_ops_train.so.8\n",[49,121547,121548],{"class":51,"line":2017},[49,121549,121550],{"class":66},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[49,121552,121553,121555],{"class":51,"line":2029},[49,121554,264],{"class":55},[49,121556,121341],{"class":59},[49,121558,121559],{"class":51,"line":2311},[49,121560,121561],{"class":66},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[49,121563,121564,121566,121569,121572,121574,121577],{"class":51,"line":2316},[49,121565,56],{"class":55},[49,121567,121568],{"class":159}," -l",[49,121570,121571],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[49,121573,1284],{"class":159},[49,121575,121576],{"class":59},".so",[49,121578,119779],{"class":159},[18,121580,121582],{"id":121581},"_355-常见问题","3.5.5 常见问题",[30,121584,121585],{},[33,121586,121587],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[40,121589,121591],{"className":119054,"code":121590,"language":119056,"meta":27,"style":27},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[46,121592,121593],{"__ignoreMap":27},[49,121594,121595,121597,121599],{"class":51,"line":52},[49,121596,264],{"class":55},[49,121598,119114],{"class":59},[49,121600,121601],{"class":59}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121603,121604],{},"blacklist-nouveau.conf文件内容如下：",[40,121606,121608],{"className":119054,"code":121607,"language":119056,"meta":27,"style":27},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[46,121609,121610,121618,121625,121637,121647],{"__ignoreMap":27},[49,121611,121612,121615],{"class":51,"line":52},[49,121613,121614],{"class":55},"blacklist",[49,121616,121617],{"class":59}," nouveau\n",[49,121619,121620,121622],{"class":51,"line":63},[49,121621,121614],{"class":55},[49,121623,121624],{"class":59}," lbm-nouveau\n",[49,121626,121627,121629,121632,121635],{"class":51,"line":70},[49,121628,116461],{"class":55},[49,121630,121631],{"class":59}," nouveau",[49,121633,121634],{"class":59}," modeset=",[49,121636,3782],{"class":159},[49,121638,121639,121642,121644],{"class":51,"line":219},[49,121640,121641],{"class":159},"alias",[49,121643,121631],{"class":59},[49,121645,121646],{"class":59}," off\n",[49,121648,121649,121651,121654],{"class":51,"line":233},[49,121650,121641],{"class":159},[49,121652,121653],{"class":59}," lbm-nouveau",[49,121655,121646],{"class":59},[14,121657,121658],{},"接着运行下方命令",[40,121660,121662],{"className":119054,"code":121661,"language":119056,"meta":27,"style":27},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[46,121663,121664,121674,121679],{"__ignoreMap":27},[49,121665,121666,121668,121671],{"class":51,"line":52},[49,121667,264],{"class":55},[49,121669,121670],{"class":59}," update-initramfs",[49,121672,121673],{"class":159}," -u\n",[49,121675,121676],{"class":51,"line":63},[49,121677,121678],{"class":55},"或者\n",[49,121680,121681,121683,121686],{"class":51,"line":70},[49,121682,264],{"class":55},[49,121684,121685],{"class":59}," dracut",[49,121687,121688],{"class":159}," --force\n",[14,121690,121691],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[40,121693,121695],{"className":119054,"code":121694,"language":119056,"meta":27,"style":27},"lsmod | grep nouveau\n",[46,121696,121697],{"__ignoreMap":27},[49,121698,121699,121702,121704,121706],{"class":51,"line":52},[49,121700,121701],{"class":55},"lsmod",[49,121703,166],{"class":77},[49,121705,30767],{"class":55},[49,121707,121617],{"class":59},[30,121709,121710],{"start":63},[33,121711,121712],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[40,121714,121716],{"className":119054,"code":121715,"language":119056,"meta":27,"style":27},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[46,121717,121718],{"__ignoreMap":27},[49,121719,121720,121722,121724],{"class":51,"line":52},[49,121721,264],{"class":55},[49,121723,119114],{"class":59},[49,121725,121726],{"class":59}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121728,121729],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[40,121731,121733],{"className":119054,"code":121732,"language":119056,"meta":27,"style":27},"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",[46,121734,121735,121743,121751,121759,121766,121774,121784,121792],{"__ignoreMap":27},[49,121736,121737,121740],{"class":51,"line":52},[49,121738,121739],{"class":55},"Section",[49,121741,121742],{"class":59}," \"OutputClass\"\n",[49,121744,121745,121748],{"class":51,"line":63},[49,121746,121747],{"class":55},"   Identifier",[49,121749,121750],{"class":59}," \"nvidia\"\n",[49,121752,121753,121756],{"class":51,"line":70},[49,121754,121755],{"class":55},"   MatchDriver",[49,121757,121758],{"class":59}," \"nvidia-drm\"\n",[49,121760,121761,121764],{"class":51,"line":219},[49,121762,121763],{"class":55},"   Driver",[49,121765,121750],{"class":59},[49,121767,121768,121771],{"class":51,"line":233},[49,121769,121770],{"class":55},"   Option",[49,121772,121773],{"class":59}," \"AllowEmptyInitialConfiguration\"\n",[49,121775,121776,121778,121781],{"class":51,"line":241},[49,121777,121770],{"class":55},[49,121779,121780],{"class":59}," \"PrimaryGPU\"",[49,121782,121783],{"class":59}," \"yes\"\n",[49,121785,121786,121789],{"class":51,"line":1920},[49,121787,121788],{"class":55},"   ModulePath",[49,121790,121791],{"class":59}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[49,121793,121794],{"class":51,"line":2011},[49,121795,121796],{"class":55},"EndSection\n",[30,121798,121799],{"start":70},[33,121800,121801],{},"安装N卡驱动提示错误",[40,121803,121805],{"className":121347,"code":121804,"language":121349,"meta":121350,"style":27},"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",[46,121806,121807],{"__ignoreMap":27},[49,121808,121809],{"class":51,"line":52},[49,121810,121804],{},[30,121812,121813],{},[33,121814,121815],{},"检查当前运行的内核版本：",[14,121817,121818],{},"运行以下命令以查看你当前正在使用的内核版本：",[40,121820,121822],{"className":117827,"code":121821,"language":117829,"meta":27,"style":27},"uname -r\n",[46,121823,121824],{"__ignoreMap":27},[49,121825,121826,121828],{"class":51,"line":52},[49,121827,70735],{"class":55},[49,121829,121830],{"class":159}," -r\n",[30,121832,121833],{"start":63},[33,121834,121835],{},"安装内核开发文件：",[14,121837,121838,121839,121842],{},"确保你已经安装了与当前内核版本相匹配的 ",[46,121840,121841],{},"kernel-devel"," 包。运行以下命令来安装：",[40,121844,121846],{"className":117827,"code":121845,"language":117829,"meta":27,"style":27},"sudo dnf install kernel-devel-$(uname -r)\n",[46,121847,121848],{"__ignoreMap":27},[49,121849,121850,121852,121854,121856,121859,121861,121863,121865],{"class":51,"line":52},[49,121851,264],{"class":55},[49,121853,384],{"class":59},[49,121855,269],{"class":59},[49,121857,121858],{"class":59}," kernel-devel-",[49,121860,25789],{"class":73},[49,121862,70735],{"class":55},[49,121864,120170],{"class":159},[49,121866,847],{"class":73},[14,121868,121869],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[30,121871,121872],{"start":70},[33,121873,121874],{},"安装内核源代码（如果需要）：",[14,121876,121877],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[40,121879,121881],{"className":117827,"code":121880,"language":117829,"meta":27,"style":27},"sudo dnf install kernel-headers kernel-source\n",[46,121882,121883],{"__ignoreMap":27},[49,121884,121885,121887,121889,121891,121894],{"class":51,"line":52},[49,121886,264],{"class":55},[49,121888,384],{"class":59},[49,121890,269],{"class":59},[49,121892,121893],{"class":59}," kernel-headers",[49,121895,121896],{"class":59}," kernel-source\n",[30,121898,121899],{"start":219},[33,121900,121901],{},"检查安装：",[14,121903,121904,121905,121908],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[46,121906,121907],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[40,121910,121912],{"className":117827,"code":121911,"language":117829,"meta":27,"style":27},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[46,121913,121914],{"__ignoreMap":27},[49,121915,121916,121918],{"class":51,"line":52},[49,121917,56],{"class":55},[49,121919,121920],{"class":59}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121922,121923,121924,121927],{},"如果仍然遇到问题，可以通过 ",[46,121925,121926],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[757,121929,121930],{},"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":27,"searchDepth":63,"depth":63,"links":121932},[121933,121937,121947,121951,121952],{"id":119030,"depth":63,"text":119031,"children":121934},[121935,121936],{"id":119040,"depth":70,"text":119041},{"id":119050,"depth":70,"text":119051},{"id":119250,"depth":63,"text":119251,"children":121938},[121939,121940,121941,121942,121943,121944,121945,121946],{"id":119254,"depth":70,"text":119255},{"id":119324,"depth":70,"text":119325},{"id":119413,"depth":70,"text":119414},{"id":119658,"depth":70,"text":119659},{"id":119728,"depth":70,"text":119729},{"id":119795,"depth":70,"text":119796},{"id":119830,"depth":70,"text":119831},{"id":119885,"depth":70,"text":119886},{"id":119936,"depth":63,"text":119937,"children":121948},[121949,121950],{"id":119940,"depth":70,"text":119941},{"id":120020,"depth":70,"text":120021},{"id":120206,"depth":63,"text":120207},{"id":120379,"depth":63,"text":120380,"children":121953},[121954,121955,121956,121957,121958],{"id":120383,"depth":70,"text":120384},{"id":120424,"depth":70,"text":120425},{"id":120711,"depth":70,"text":120712},{"id":121085,"depth":70,"text":121086},{"id":121581,"depth":70,"text":121582},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119022,"description":24072},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121965,"title":121966,"body":121967,"description":24072,"extension":766,"meta":122307,"navigation":398,"path":122308,"seo":122309,"stem":122310,"__hash__":122311},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121968,"toc":122305},[121969,121972,121977,121980,122226,122231,122234,122270,122273,122302],[10,121970,121966],{"id":121971},"_4-命令教程长期积累",[30,121973,121974],{},[33,121975,121976],{},"大多数命令",[14,121978,121979],{},"常用 Linux 命令速查：",[40,121981,121983],{"className":117827,"code":121982,"language":117829,"meta":27,"style":27},"# 文件与目录\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",[46,121984,121985,121990,121997,122004,122012,122019,122026,122034,122042,122049,122056,122064,122068,122073,122080,122088,122095,122099,122104,122111,122119,122127,122135,122143,122147,122152,122160,122167,122174,122182,122190,122194,122199,122208,122217],{"__ignoreMap":27},[49,121986,121987],{"class":51,"line":52},[49,121988,121989],{"class":66},"# 文件与目录\n",[49,121991,121992,121994],{"class":51,"line":63},[49,121993,56],{"class":55},[49,121995,121996],{"class":66},"        # 列出目录内容\n",[49,121998,121999,122001],{"class":51,"line":70},[49,122000,101807],{"class":159},[49,122002,122003],{"class":66},"        # 切换目录\n",[49,122005,122006,122009],{"class":51,"line":219},[49,122007,122008],{"class":159},"pwd",[49,122010,122011],{"class":66},"       # 显示当前路径\n",[49,122013,122014,122016],{"class":51,"line":233},[49,122015,101797],{"class":55},[49,122017,122018],{"class":66},"     # 创建目录\n",[49,122020,122021,122023],{"class":51,"line":241},[49,122022,26011],{"class":55},[49,122024,122025],{"class":66},"        # 删除文件或目录\n",[49,122027,122028,122031],{"class":51,"line":1920},[49,122029,122030],{"class":55},"cp",[49,122032,122033],{"class":66},"        # 复制文件或目录\n",[49,122035,122036,122039],{"class":51,"line":2011},[49,122037,122038],{"class":55},"mv",[49,122040,122041],{"class":66},"        # 移动\u002F重命名文件或目录\n",[49,122043,122044,122046],{"class":51,"line":2017},[49,122045,101814],{"class":55},[49,122047,122048],{"class":66},"     # 创建空文件\n",[49,122050,122051,122053],{"class":51,"line":2029},[49,122052,121296],{"class":55},[49,122054,122055],{"class":66},"       # 查看文件内容\n",[49,122057,122058,122061],{"class":51,"line":2311},[49,122059,122060],{"class":55},"head\u002Ftail",[49,122062,122063],{"class":66}," # 查看文件头部\u002F尾部\n",[49,122065,122066],{"class":51,"line":2316},[49,122067,399],{"emptyLinePlaceholder":398},[49,122069,122070],{"class":51,"line":2322},[49,122071,122072],{"class":66},"# 权限管理\n",[49,122074,122075,122077],{"class":51,"line":2327},[49,122076,25302],{"class":55},[49,122078,122079],{"class":66},"     # 修改文件权限\n",[49,122081,122082,122085],{"class":51,"line":2341},[49,122083,122084],{"class":55},"chown",[49,122086,122087],{"class":66},"     # 修改文件所有者\n",[49,122089,122090,122092],{"class":51,"line":2346},[49,122091,264],{"class":55},[49,122093,122094],{"class":66},"      # 以管理员身份执行\n",[49,122096,122097],{"class":51,"line":2352},[49,122098,399],{"emptyLinePlaceholder":398},[49,122100,122101],{"class":51,"line":2373},[49,122102,122103],{"class":66},"# 系统信息\n",[49,122105,122106,122108],{"class":51,"line":2378},[49,122107,70735],{"class":55},[49,122109,122110],{"class":66},"     # 系统信息\n",[49,122112,122113,122116],{"class":51,"line":2392},[49,122114,122115],{"class":55},"df",[49,122117,122118],{"class":66},"        # 磁盘使用情况\n",[49,122120,122121,122124],{"class":51,"line":2397},[49,122122,122123],{"class":55},"free",[49,122125,122126],{"class":66},"      # 内存使用情况\n",[49,122128,122129,122132],{"class":51,"line":2426},[49,122130,122131],{"class":55},"top\u002Fhtop",[49,122133,122134],{"class":66},"  # 进程监控\n",[49,122136,122137,122140],{"class":51,"line":2431},[49,122138,122139],{"class":55},"ps",[49,122141,122142],{"class":66},"        # 查看进程\n",[49,122144,122145],{"class":51,"line":2448},[49,122146,399],{"emptyLinePlaceholder":398},[49,122148,122149],{"class":51,"line":2453},[49,122150,122151],{"class":66},"# 网络\n",[49,122153,122154,122157],{"class":51,"line":2458},[49,122155,122156],{"class":55},"ping",[49,122158,122159],{"class":66},"      # 测试网络连通性\n",[49,122161,122162,122164],{"class":51,"line":2463},[49,122163,156],{"class":55},[49,122165,122166],{"class":66},"      # 发送 HTTP 请求\n",[49,122168,122169,122171],{"class":51,"line":2477},[49,122170,120820],{"class":55},[49,122172,122173],{"class":66},"      # 下载文件\n",[49,122175,122176,122179],{"class":51,"line":2482},[49,122177,122178],{"class":55},"ssh",[49,122180,122181],{"class":66},"       # 远程登录\n",[49,122183,122184,122187],{"class":51,"line":3274},[49,122185,122186],{"class":55},"scp",[49,122188,122189],{"class":66},"       # 远程文件传输\n",[49,122191,122192],{"class":51,"line":3288},[49,122193,399],{"emptyLinePlaceholder":398},[49,122195,122196],{"class":51,"line":3296},[49,122197,122198],{"class":66},"# 包管理（Debian\u002FUbuntu）\n",[49,122200,122201,122203,122205],{"class":51,"line":3301},[49,122202,117899],{"class":55},[49,122204,117878],{"class":59},[49,122206,122207],{"class":66},"   # 更新软件源\n",[49,122209,122210,122212,122214],{"class":51,"line":3307},[49,122211,117899],{"class":55},[49,122213,269],{"class":59},[49,122215,122216],{"class":66},"  # 安装软件包\n",[49,122218,122219,122221,122223],{"class":51,"line":3313},[49,122220,117899],{"class":55},[49,122222,26766],{"class":59},[49,122224,122225],{"class":66},"   # 卸载软件包\n",[30,122227,122228],{"start":63},[33,122229,122230],{},"KDE Dolphin 以root打开",[14,122232,122233],{},"kde5",[40,122235,122237],{"className":117827,"code":122236,"language":117829,"meta":27,"style":27},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[46,122238,122239],{"__ignoreMap":27},[49,122240,122241,122244,122247,122250,122252,122254,122257,122260,122262,122265,122267],{"class":51,"line":52},[49,122242,122243],{"class":55},"pkexec",[49,122245,122246],{"class":59}," env",[49,122248,122249],{"class":59}," DISPLAY=",[49,122251,28674],{"class":73},[49,122253,28732],{"class":59},[49,122255,122256],{"class":73},"$XAUTHORITY ",[49,122258,122259],{"class":59},"KDE_SESSION_VERSION=",[49,122261,1148],{"class":159},[49,122263,122264],{"class":59}," KDE_FULL_SESSION=",[49,122266,2062],{"class":159},[49,122268,122269],{"class":59}," dolphin\n",[14,122271,122272],{},"kde6",[40,122274,122276],{"className":117827,"code":122275,"language":117829,"meta":27,"style":27},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[46,122277,122278],{"__ignoreMap":27},[49,122279,122280,122282,122284,122286,122288,122290,122292,122294,122296,122298,122300],{"class":51,"line":52},[49,122281,122243],{"class":55},[49,122283,122246],{"class":59},[49,122285,122249],{"class":59},[49,122287,28674],{"class":73},[49,122289,28732],{"class":59},[49,122291,122256],{"class":73},[49,122293,122259],{"class":59},[49,122295,1173],{"class":159},[49,122297,122264],{"class":59},[49,122299,2062],{"class":159},[49,122301,122269],{"class":59},[757,122303,122304],{},"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":27,"searchDepth":63,"depth":63,"links":122306},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121966,"description":24072},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122313,"title":122314,"body":122315,"description":24072,"extension":766,"meta":122329,"navigation":398,"path":122330,"seo":122331,"stem":122332,"__hash__":122333},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122316,"toc":122327},[122317,122320],[10,122318,122314],{"id":122319},"_5-各种环境配置",[14,122321,122322],{},[124,122323,122326],{"href":122324,"rel":122325},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[128],"电控组环境搭建大全",{"title":27,"searchDepth":63,"depth":63,"links":122328},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122314,"description":24072},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122335,"title":122336,"body":122337,"description":24072,"extension":766,"meta":122685,"navigation":398,"path":122686,"seo":122687,"stem":122688,"__hash__":122689},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122338,"toc":122677},[122339,122342,122346,122350,122354,122359,122366,122370,122663,122667,122674],[10,122340,122336],{"id":122341},"_6-拓展功能",[782,122343,122345],{"id":122344},"_61-wine","6.1 Wine",[782,122347,122349],{"id":122348},"_62-android","6.2 Android",[18,122351,122353],{"id":122352},"_621-i卡a卡","6.2.1 I卡、A卡",[30,122355,122356],{},[33,122357,122358],{},"Wayland-Waydroid(体验超级好)",[14,122360,122361,122362],{},"Waydroid 官网与安装指南：",[124,122363,122364],{"href":122364,"rel":122365},"https:\u002F\u002Fwaydro.id\u002F",[128],[18,122367,122369],{"id":122368},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[30,122371,122372],{},[33,122373,122374,122375,122377,122378,122382,122384,122387,122392,122589],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54247,122376],{},"BlissOS 官网下载：",[124,122379,122380],{"href":122380,"rel":122381},"https:\u002F\u002Fblissos.org\u002F",[128],[54247,122383],{},[25,122385],{"alt":27,"src":122386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[30,122388,122389],{"start":70},[33,122390,122391],{},"比较推荐的配置",[40,122393,122395],{"className":117827,"code":122394,"language":117829,"meta":27,"style":27},"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",[46,122396,122397,122404,122414,122424,122434,122446,122456,122463,122473,122482,122491,122501,122511,122520,122530,122540,122552,122562,122571,122581],{"__ignoreMap":27},[49,122398,122399,122402],{"class":51,"line":52},[49,122400,122401],{"class":55},"qemu-system-x86_64",[49,122403,184],{"class":159},[49,122405,122406,122409,122412],{"class":51,"line":63},[49,122407,122408],{"class":159},"        -M",[49,122410,122411],{"class":59}," q35,vmport=off",[49,122413,184],{"class":159},[49,122415,122416,122419,122422],{"class":51,"line":70},[49,122417,122418],{"class":159},"        -accel",[49,122420,122421],{"class":59}," kvm",[49,122423,184],{"class":159},[49,122425,122426,122429,122432],{"class":51,"line":219},[49,122427,122428],{"class":159},"        -cpu",[49,122430,122431],{"class":59}," qemu64,+sse3,+sse4.2",[49,122433,184],{"class":159},[49,122435,122436,122439,122442,122444],{"class":51,"line":233},[49,122437,122438],{"class":159},"        -smp",[49,122440,122441],{"class":59}," 8,cores=",[49,122443,1122],{"class":159},[49,122445,184],{"class":159},[49,122447,122448,122451,122454],{"class":51,"line":241},[49,122449,122450],{"class":159},"        -m",[49,122452,122453],{"class":59}," 6G",[49,122455,184],{"class":159},[49,122457,122458,122461],{"class":51,"line":1920},[49,122459,122460],{"class":159},"        -usb",[49,122462,184],{"class":159},[49,122464,122465,122468,122471],{"class":51,"line":2011},[49,122466,122467],{"class":159},"        -device",[49,122469,122470],{"class":59}," virtio-tablet",[49,122472,184],{"class":159},[49,122474,122475,122477,122480],{"class":51,"line":2017},[49,122476,122467],{"class":159},[49,122478,122479],{"class":59}," virtio-keyboard",[49,122481,184],{"class":159},[49,122483,122484,122486,122489],{"class":51,"line":2029},[49,122485,122467],{"class":159},[49,122487,122488],{"class":59}," usb-tablet",[49,122490,184],{"class":159},[49,122492,122493,122496,122499],{"class":51,"line":2311},[49,122494,122495],{"class":159},"        -bios",[49,122497,122498],{"class":59}," OVMF-pure-efi64.fd",[49,122500,184],{"class":159},[49,122502,122503,122506,122509],{"class":51,"line":2316},[49,122504,122505],{"class":159},"        -net",[49,122507,122508],{"class":59}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[49,122510,184],{"class":159},[49,122512,122513,122515,122518],{"class":51,"line":2322},[49,122514,122505],{"class":159},[49,122516,122517],{"class":59}," nic,model=virtio",[49,122519,184],{"class":159},[49,122521,122522,122525,122528],{"class":51,"line":2327},[49,122523,122524],{"class":159},"        -audio",[49,122526,122527],{"class":59}," sdl,model=hda",[49,122529,184],{"class":159},[49,122531,122532,122535,122538],{"class":51,"line":2341},[49,122533,122534],{"class":159},"        -display",[49,122536,122537],{"class":59}," sdl,gl=on,show-cursor=on",[49,122539,184],{"class":159},[49,122541,122542,122544,122547,122550],{"class":51,"line":2346},[49,122543,122467],{"class":159},[49,122545,122546],{"class":59}," virtio-vga-gl,xres=1920,yres=",[49,122548,122549],{"class":159},"1080",[49,122551,184],{"class":159},[49,122553,122554,122557,122560],{"class":51,"line":2352},[49,122555,122556],{"class":159},"        -drive",[49,122558,122559],{"class":59}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[49,122561,184],{"class":159},[49,122563,122564,122566,122569],{"class":51,"line":2373},[49,122565,122556],{"class":159},[49,122567,122568],{"class":59}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[49,122570,184],{"class":159},[49,122572,122573,122576,122579],{"class":51,"line":2378},[49,122574,122575],{"class":159},"        -monitor",[49,122577,122578],{"class":59}," stdio",[49,122580,184],{"class":159},[49,122582,122583,122586],{"class":51,"line":2392},[49,122584,122585],{"class":159},"        -serial",[49,122587,122588],{"class":59}," none\n",[30,122590,122591],{"start":233},[33,122592,122593,122594],{},"常用操作：",[30,122595,122596,122599,122655],{},[33,122597,122598],{},"全屏：Ctrl+Alt+F",[33,122600,122601,122602,122607],{},"adb调试",[30,122603,122604],{},[33,122605,122606],{},"使Linux与Android用ADB连接。",[40,122608,122610],{"className":117827,"code":122609,"language":117829,"meta":27,"style":27},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[46,122611,122612,122617,122628,122633,122645,122650],{"__ignoreMap":27},[49,122613,122614],{"class":51,"line":52},[49,122615,122616],{"class":66},"# 连接安卓\n",[49,122618,122619,122622,122625],{"class":51,"line":63},[49,122620,122621],{"class":55},"adb",[49,122623,122624],{"class":59}," connect",[49,122626,122627],{"class":159}," 127.0.0.1\n",[49,122629,122630],{"class":51,"line":70},[49,122631,122632],{"class":66},"# 打开shell\n",[49,122634,122635,122637,122639,122642],{"class":51,"line":219},[49,122636,122621],{"class":55},[49,122638,194],{"class":159},[49,122640,122641],{"class":59}," 127.0.0.1:5555",[49,122643,122644],{"class":59}," shell\n",[49,122646,122647],{"class":51,"line":233},[49,122648,122649],{"class":66},"# 使用root权限\n",[49,122651,122652],{"class":51,"line":241},[49,122653,122654],{"class":55},"su\n",[33,122656,122657,122658],{},"中文输入法",[30,122659,122660],{},[33,122661,122662],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[782,122664,122666],{"id":122665},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122668,122669,122670],{},"rEFInd 官网与文档：",[124,122671,122672],{"href":122672,"rel":122673},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[128],[757,122675,122676],{},"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":27,"searchDepth":63,"depth":63,"links":122678},[122679,122680,122684],{"id":122344,"depth":63,"text":122345},{"id":122348,"depth":63,"text":122349,"children":122681},[122682,122683],{"id":122352,"depth":70,"text":122353},{"id":122368,"depth":70,"text":122369},{"id":122665,"depth":63,"text":122666},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122336,"description":24072},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122691,"title":122692,"body":122693,"description":24072,"extension":766,"meta":125992,"navigation":398,"path":125993,"seo":125994,"stem":125995,"__hash__":125996},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122694,"toc":125966},[122695,122698,122702,122705,122712,122962,122965,123037,123040,123044,123048,123053,123056,123059,123062,123067,123070,123073,123076,123081,123084,123089,123092,123095,123100,123103,123108,123111,123115,123119,123122,123127,123130,123144,123147,123150,123159,123162,123171,123174,123177,123186,123189,123198,123201,123204,123213,123216,123219,123234,123237,123240,123249,123254,123257,123260,123269,123272,123281,123284,123293,123296,123305,123310,123313,123321,123326,123329,123338,123341,123349,123354,123357,123366,123369,123372,123376,123379,123384,123387,123392,123406,123411,123416,123427,123432,123438,123443,123458,123463,123466,123471,123476,123481,123489,123494,123501,123506,123517,123522,123525,123529,123532,123535,123540,123543,123562,123567,123570,123579,123584,123587,123609,123612,123642,123645,123650,123653,123667,123672,123691,123694,123697,123702,123714,123719,123724,123727,123732,123735,123750,123753,123758,123763,123767,123772,123812,123815,123819,123825,123831,123836,123839,123846,123851,123858,123861,123864,123871,123885,123888,123948,123951,123965,123977,123980,123983,123986,124050,124053,124056,124059,124079,124082,124087,124094,124098,124101,124105,124110,124115,124119,124122,124125,124167,124172,124175,124197,124212,124214,124219,124231,124291,124293,124295,124349,124351,124353,124359,124364,124367,124372,124376,124379,124441,124446,124449,124451,124455,124467,124549,124551,124553,124607,124613,124615,124619,124624,124626,124631,124635,124655,124690,124694,124697,124700,124703,124710,124713,124725,124728,124743,124746,124765,124813,124816,124833,124836,124850,124855,124858,124867,124882,124894,124932,124937,124946,124951,124956,124982,124991,124995,124999,125004,125007,125011,125015,125020,125023,125028,125031,125036,125039,125044,125047,125051,125056,125059,125064,125067,125071,125076,125079,125084,125087,125092,125095,125099,125104,125107,125112,125115,125120,125123,125127,125132,125135,125140,125143,125148,125151,125156,125159,125164,125167,125172,125175,125179,125184,125187,125192,125199,125203,125208,125211,125216,125219,125223,125228,125231,125234,125237,125240,125243,125247,125250,125260,125265,125270,125292,125297,125302,125309,125313,125318,125321,125324,125329,125332,125335,125338,125341,125344,125347,125350,125353,125356,125359,125362,125365,125370,125375,125380,125385,125390,125395,125400,125403,125407,125410,125414,125419,125424,125429,125434,125438,125444,125452,125457,125460,125465,125480,125483,125488,125522,125537,125540,125595,125621,125633,125636,125645,125648,125663,125668,125671,125677,125682,125685,125690,125693,125698,125703,125710,125713,125728,125731,125766,125771,125779,125817,125820,125823,125828,125831,125836,125847,125881,125886,125889,125898,125903,125909,125912,125917,125926,125931,125934,125937,125942,125950,125953,125958,125963],[10,122696,122692],{"id":122697},"_7-其他操作",[782,122699,122701],{"id":122700},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122703,122704],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122706,122707,122708,122711],{},"进入工控机的硬盘目录，进入",[46,122709,122710],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[40,122713,122717],{"className":122714,"code":122715,"language":122716,"meta":27,"style":27},"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",[46,122718,122719,122727,122738,122745,122752,122764,122771,122783,122794,122805,122812,122819,122826,122838,122850,122857,122869,122881,122888,122900,122912,122924,122935,122942,122953],{"__ignoreMap":27},[49,122720,122721,122724],{"class":51,"line":52},[49,122722,122723],{"class":51831},"network",[49,122725,122726],{"class":73},": \n",[49,122728,122729,122732,122734,122736],{"class":51,"line":63},[49,122730,122731],{"class":51831},"  version",[49,122733,51968],{"class":73},[49,122735,915],{"class":159},[49,122737,3371],{"class":73},[49,122739,122740,122743],{"class":51,"line":70},[49,122741,122742],{"class":51831},"  wifis",[49,122744,122726],{"class":73},[49,122746,122747,122750],{"class":51,"line":219},[49,122748,122749],{"class":51831},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[49,122751,122726],{"class":73},[49,122753,122754,122757,122759,122762],{"class":51,"line":233},[49,122755,122756],{"class":51831},"      renderer",[49,122758,51968],{"class":73},[49,122760,122761],{"class":59},"NetworkManager",[49,122763,3371],{"class":73},[49,122765,122766,122769],{"class":51,"line":241},[49,122767,122768],{"class":51831},"      match",[49,122770,122726],{"class":73},[49,122772,122773,122776,122778,122781],{"class":51,"line":1920},[49,122774,122775],{"class":51831},"        name",[49,122777,51968],{"class":73},[49,122779,122780],{"class":59},"\"wlan0\"",[49,122782,3371],{"class":73},[49,122784,122785,122788,122790,122792],{"class":51,"line":2011},[49,122786,122787],{"class":51831},"      dhcp4",[49,122789,51968],{"class":73},[49,122791,2062],{"class":159},[49,122793,3371],{"class":73},[49,122795,122796,122799,122801,122803],{"class":51,"line":2017},[49,122797,122798],{"class":51831},"      dhcp6",[49,122800,51968],{"class":73},[49,122802,2062],{"class":159},[49,122804,3371],{"class":73},[49,122806,122807,122810],{"class":51,"line":2029},[49,122808,122809],{"class":51831},"      access-points",[49,122811,122726],{"class":73},[49,122813,122814,122817],{"class":51,"line":2311},[49,122815,122816],{"class":59},"        \"EMIS_Vinci_Robocon_5G\"",[49,122818,122726],{"class":73},[49,122820,122821,122824],{"class":51,"line":2316},[49,122822,122823],{"class":51831},"          auth",[49,122825,122726],{"class":73},[49,122827,122828,122831,122833,122836],{"class":51,"line":2322},[49,122829,122830],{"class":51831},"            key-management",[49,122832,51968],{"class":73},[49,122834,122835],{"class":59},"\"psk\"",[49,122837,3371],{"class":73},[49,122839,122840,122843,122845,122848],{"class":51,"line":2327},[49,122841,122842],{"class":51831},"            password",[49,122844,51968],{"class":73},[49,122846,122847],{"class":59},"\"vinci666\"",[49,122849,3371],{"class":73},[49,122851,122852,122855],{"class":51,"line":2341},[49,122853,122854],{"class":51831},"          networkmanager",[49,122856,122726],{"class":73},[49,122858,122859,122862,122864,122867],{"class":51,"line":2346},[49,122860,122861],{"class":51831},"            uuid",[49,122863,51968],{"class":73},[49,122865,122866],{"class":59},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[49,122868,3371],{"class":73},[49,122870,122871,122874,122876,122879],{"class":51,"line":2352},[49,122872,122873],{"class":51831},"            name",[49,122875,51968],{"class":73},[49,122877,122878],{"class":59},"\"EMIS_Vinci_Robocon_5G\"",[49,122880,3371],{"class":73},[49,122882,122883,122886],{"class":51,"line":2373},[49,122884,122885],{"class":51831},"            passthrough",[49,122887,122726],{"class":73},[49,122889,122890,122893,122895,122898],{"class":51,"line":2378},[49,122891,122892],{"class":51831},"              wifi-security.auth-alg",[49,122894,51968],{"class":73},[49,122896,122897],{"class":59},"\"open\"",[49,122899,3371],{"class":73},[49,122901,122902,122905,122907,122910],{"class":51,"line":2392},[49,122903,122904],{"class":51831},"              ipv6.addr-gen-mode",[49,122906,51968],{"class":73},[49,122908,122909],{"class":59},"\"default\"",[49,122911,3371],{"class":73},[49,122913,122914,122917,122919,122922],{"class":51,"line":2397},[49,122915,122916],{"class":51831},"              ipv6.ip6-privacy",[49,122918,51968],{"class":73},[49,122920,122921],{"class":59},"\"-1\"",[49,122923,3371],{"class":73},[49,122925,122926,122929,122931,122933],{"class":51,"line":2426},[49,122927,122928],{"class":51831},"              proxy._",[49,122930,51968],{"class":73},[49,122932,8349],{"class":59},[49,122934,3371],{"class":73},[49,122936,122937,122940],{"class":51,"line":2431},[49,122938,122939],{"class":51831},"      networkmanager",[49,122941,122726],{"class":73},[49,122943,122944,122947,122949,122951],{"class":51,"line":2448},[49,122945,122946],{"class":51831},"        uuid",[49,122948,51968],{"class":73},[49,122950,122866],{"class":59},[49,122952,3371],{"class":73},[49,122954,122955,122957,122959],{"class":51,"line":2453},[49,122956,122775],{"class":51831},[49,122958,51968],{"class":73},[49,122960,122961],{"class":59},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122963,122964],{},"将其改为新wifi的名和密码：",[40,122966,122968],{"className":122714,"code":122967,"language":122716,"meta":27,"style":27},"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",[46,122969,122970,122976,122985,122991,122998,123007,123015,123021,123027],{"__ignoreMap":27},[49,122971,122972,122974],{"class":51,"line":52},[49,122973,122723],{"class":51831},[49,122975,4436],{"class":73},[49,122977,122978,122980,122982],{"class":51,"line":63},[49,122979,122731],{"class":51831},[49,122981,51968],{"class":73},[49,122983,122984],{"class":159},"2\n",[49,122986,122987,122989],{"class":51,"line":70},[49,122988,122742],{"class":51831},[49,122990,4436],{"class":73},[49,122992,122993,122996],{"class":51,"line":219},[49,122994,122995],{"class":51831},"    wlan0",[49,122997,4436],{"class":73},[49,122999,123000,123002,123004],{"class":51,"line":233},[49,123001,122787],{"class":51831},[49,123003,51968],{"class":73},[49,123005,123006],{"class":159},"true\n",[49,123008,123009,123011,123013],{"class":51,"line":241},[49,123010,122798],{"class":51831},[49,123012,51968],{"class":73},[49,123014,123006],{"class":159},[49,123016,123017,123019],{"class":51,"line":1920},[49,123018,122809],{"class":51831},[49,123020,4436],{"class":73},[49,123022,123023,123025],{"class":51,"line":2011},[49,123024,122816],{"class":59},[49,123026,4436],{"class":73},[49,123028,123029,123032,123034],{"class":51,"line":2017},[49,123030,123031],{"class":51831},"          password",[49,123033,51968],{"class":73},[49,123035,123036],{"class":59},"\"vinci666\"\n",[14,123038,123039],{},"工控机开机即可连上网。",[782,123041,123043],{"id":123042},"_72-ssh远程开发","7.2 SSH远程开发",[18,123045,123047],{"id":123046},"_721-环境准备","7.2.1 环境准备",[14,123049,123050],{},[112,123051,123052],{},"1.硬件准备",[14,123054,123055],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,123057,123058],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,123060,123061],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,123063,123064],{},[112,123065,123066],{},"2.设置固定IP",[14,123068,123069],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,123071,123072],{},"1.进入设置界面",[14,123074,123075],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,123077,123078],{},[25,123079],{"alt":27,"src":123080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,123082,123083],{},"2.配置所连接的网络",[14,123085,123086],{},[25,123087],{"alt":27,"src":123088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,123090,123091],{},"3.设置固定IP",[14,123093,123094],{},"查看当前IP地址。",[14,123096,123097],{},[25,123098],{"alt":27,"src":123099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,123101,123102],{},"设置固定IP。",[14,123104,123105],{},[25,123106],{"alt":27,"src":123107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,123109,123110],{},"至此，IP配置完毕。",[18,123112,123114],{"id":123113},"_722-环境搭建","7.2.2 环境搭建",[14,123116,123117],{},[112,123118,26442],{},[14,123120,123121],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,123123,123124],{},[112,123125,123126],{},"实现",[14,123128,123129],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[30,123131,123132,123135,123138,123141],{},[33,123133,123134],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[33,123136,123137],{},"远程主机启动SSH服务；",[33,123139,123140],{},"本地主机登陆远程主机；",[33,123142,123143],{},"实现数据传输。",[14,123145,123146],{},"1.安装SSH客户端与服务端",[14,123148,123149],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[40,123151,123153],{"className":121347,"code":123152,"language":121349,"meta":121350,"style":27}," sudo apt install openssh-server\n",[46,123154,123155],{"__ignoreMap":27},[49,123156,123157],{"class":51,"line":52},[49,123158,123152],{},[14,123160,123161],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[40,123163,123165],{"className":121347,"code":123164,"language":121349,"meta":121350,"style":27},"sudo apt install openssh-client\n",[46,123166,123167],{"__ignoreMap":27},[49,123168,123169],{"class":51,"line":52},[49,123170,123164],{},[14,123172,123173],{},"2.远程主机启动SSH服务",[14,123175,123176],{},"远程主机启动 ssh 服务命令如下：",[40,123178,123180],{"className":121347,"code":123179,"language":121349,"meta":121350,"style":27},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[46,123181,123182],{"__ignoreMap":27},[49,123183,123184],{"class":51,"line":52},[49,123185,123179],{},[14,123187,123188],{},"启动后可使用如下命令查看服务是否正常运行：",[40,123190,123192],{"className":121347,"code":123191,"language":121349,"meta":121350,"style":27},"ps -e | grep ssh\n",[46,123193,123194],{"__ignoreMap":27},[49,123195,123196],{"class":51,"line":52},[49,123197,123191],{},[14,123199,123200],{},"如果启动成功，会包含 sshd 程序。",[14,123202,123203],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[40,123205,123207],{"className":121347,"code":123206,"language":121349,"meta":121350,"style":27},"sudo systemctl enable ssh\n",[46,123208,123209],{"__ignoreMap":27},[49,123210,123211],{"class":51,"line":52},[49,123212,123206],{},[14,123214,123215],{},"3.本地远程登录",[14,123217,123218],{},"登录远程主机可以调用如下命令:",[40,123220,123222],{"className":117827,"code":123221,"language":117829,"meta":27,"style":27},"ssh -X 用户名@ip地址\n",[46,123223,123224],{"__ignoreMap":27},[49,123225,123226,123228,123231],{"class":51,"line":52},[49,123227,122178],{"class":55},[49,123229,123230],{"class":159}," -X",[49,123232,123233],{"class":59}," 用户名@ip地址\n",[14,123235,123236],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,123238,123239],{},"如果退出，可以调用exit命令：",[40,123241,123243],{"className":121347,"code":123242,"language":121349,"meta":121350,"style":27},"exit\n",[46,123244,123245],{"__ignoreMap":27},[49,123246,123247],{"class":51,"line":52},[49,123248,123242],{},[14,123250,123251],{},[112,123252,123253],{},"4.实现数据传输",[14,123255,123256],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,123258,123259],{},"上传文件指令格式如下：",[40,123261,123263],{"className":121347,"code":123262,"language":121349,"meta":121350,"style":27},"scp 本地文件路径 账号@ip:路径\n",[46,123264,123265],{"__ignoreMap":27},[49,123266,123267],{"class":51,"line":52},[49,123268,123262],{},[14,123270,123271],{},"上传文件夹指令格式如下：",[40,123273,123275],{"className":121347,"code":123274,"language":121349,"meta":121350,"style":27},"scp -r 本地文件夹路径 账号@ip:路径\n",[46,123276,123277],{"__ignoreMap":27},[49,123278,123279],{"class":51,"line":52},[49,123280,123274],{},[14,123282,123283],{},"下载文件指令格式如下：",[40,123285,123287],{"className":121347,"code":123286,"language":121349,"meta":121350,"style":27},"scp 账号@ip:路径 本地文件夹路径\n",[46,123288,123289],{"__ignoreMap":27},[49,123290,123291],{"class":51,"line":52},[49,123292,123286],{},[14,123294,123295],{},"下载文件夹指令格式如下：",[40,123297,123299],{"className":121347,"code":123298,"language":121349,"meta":121350,"style":27},"scp -r 账号@ip:路径 本地文件夹路径\n",[46,123300,123301],{"__ignoreMap":27},[49,123302,123303],{"class":51,"line":52},[49,123304,123298],{},[14,123306,123307],{},[112,123308,123309],{},"优化",[14,123311,123312],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[30,123314,123315,123318],{},[33,123316,123317],{},"本地生成密钥对；",[33,123319,123320],{},"将公钥上传至远程主机。",[14,123322,123323],{},[112,123324,123325],{},"1.生成密钥对",[14,123327,123328],{},"本地客户端生成公私钥：（一路回车默认即可）",[40,123330,123332],{"className":121347,"code":123331,"language":121349,"meta":121350,"style":27},"ssh-keygen\n",[46,123333,123334],{"__ignoreMap":27},[49,123335,123336],{"class":51,"line":52},[49,123337,123331],{},[14,123339,123340],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[30,123342,123343,123346],{},[33,123344,123345],{},"id_rsa （私钥）；",[33,123347,123348],{},"id_rsa.pub (公钥)。",[14,123350,123351],{},[112,123352,123353],{},"2.公钥上传",[14,123355,123356],{},"上传指令如下：",[40,123358,123360],{"className":121347,"code":123359,"language":121349,"meta":121350,"style":27},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[46,123361,123362],{"__ignoreMap":27},[49,123363,123364],{"class":51,"line":52},[49,123365,123359],{},[14,123367,123368],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,123370,123371],{},"以后再远程登录就无需录入密码了。",[18,123373,123375],{"id":123374},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,123377,123378],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,123380,123381],{},[112,123382,123383],{},"1.准备工作",[14,123385,123386],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,123388,123389],{},[112,123390,123391],{},"2.为VScode安装远程开发插件",[14,123393,123394,123395,123398,123399,123402,123403,28916],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[46,123396,123397],{},"扩展：商店","的搜索栏输入",[46,123400,123401],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[46,123404,123405],{},"安装",[14,123407,123408],{},[25,123409],{"alt":27,"src":123410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,123412,123413],{},[112,123414,123415],{},"3.配置远程连接",[14,123417,123418,123419,123422,123423,123426],{},"步骤1：使用快捷键",[46,123420,123421],{},"ctrl + shift + p","打开命令输入窗口，并输入",[46,123424,123425],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,123428,123429],{},[25,123430],{"alt":27,"src":123431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,123433,123434,123435,28916],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[46,123436,123437],{},"Add New SSH Host",[14,123439,123440],{},[25,123441],{"alt":27,"src":123442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,123444,123445,123446,123449,123450,123453,123454,123457],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[46,123447,123448],{},"ssh +X ubuntu@192.168.43.164","，其中，",[46,123451,123452],{},"ubuntu","需要替换为你的登录用户名，",[46,123455,123456],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,123459,123460],{},[25,123461],{"alt":27,"src":123462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,123464,123465],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,123467,123468],{},[25,123469],{"alt":27,"src":123470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,123472,123473],{},[25,123474],{"alt":27,"src":123475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,123477,123478],{},[112,123479,123480],{},"4.使用",[14,123482,123483,123484,123422,123486,123488],{},"步骤1：继续使用快捷键",[46,123485,123421],{},[46,123487,123425],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123490,123491],{},[25,123492],{"alt":27,"src":123493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123495,123496,123497,123500],{},"或者，也可以点击侧边栏的",[46,123498,123499],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123502,123503],{},[25,123504],{"alt":27,"src":123505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123507,123508,123509,123512,123513,123516],{},"步骤2：选择菜单栏的",[46,123510,123511],{},"文件","下的",[46,123514,123515],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123518,123519],{},[25,123520],{"alt":27,"src":123521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123523,123524],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[782,123526,123528],{"id":123527},"_73-远程桌面","7.3 远程桌面",[14,123530,123531],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123533,123534],{},"我们选择使用VNC来看。",[30,123536,123537],{},[33,123538,123539],{},"安装VNC服务器：",[14,123541,123542],{},"这里以TigerVNC为例进行安装：",[40,123544,123546],{"className":117827,"code":123545,"language":117829,"meta":27,"style":27},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[46,123547,123548],{"__ignoreMap":27},[49,123549,123550,123552,123554,123556,123559],{"class":51,"line":52},[49,123551,264],{"class":55},[49,123553,117848],{"class":59},[49,123555,269],{"class":59},[49,123557,123558],{"class":59}," tigervnc-standalone-server",[49,123560,123561],{"class":59}," tigervnc-common\n",[30,123563,123564],{"start":63},[33,123565,123566],{},"设置VNC密码：",[14,123568,123569],{},"为VNC用户设置密码，运行以下命令：",[40,123571,123573],{"className":117827,"code":123572,"language":117829,"meta":27,"style":27},"vncpasswd\n",[46,123574,123575],{"__ignoreMap":27},[49,123576,123577],{"class":51,"line":52},[49,123578,123572],{"class":55},[30,123580,123581],{"start":70},[33,123582,123583],{},"配置VNC启动脚本:",[14,123585,123586],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[40,123588,123590],{"className":117827,"code":123589,"language":117829,"meta":27,"style":27},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[46,123591,123592,123601],{"__ignoreMap":27},[49,123593,123594,123596,123598],{"class":51,"line":52},[49,123595,101797],{"class":55},[49,123597,29747],{"class":159},[49,123599,123600],{"class":59}," ~\u002F.vnc\n",[49,123602,123603,123606],{"class":51,"line":63},[49,123604,123605],{"class":55},"nano",[49,123607,123608],{"class":59}," ~\u002F.vnc\u002Fxstartup\n",[14,123610,123611],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[40,123613,123615],{"className":117827,"code":123614,"language":117829,"meta":27,"style":27},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[46,123616,123617,123622,123630,123637],{"__ignoreMap":27},[49,123618,123619],{"class":51,"line":52},[49,123620,123621],{"class":66},"#!\u002Fbin\u002Fsh\n",[49,123623,123624,123627],{"class":51,"line":63},[49,123625,123626],{"class":159},"unset",[49,123628,123629],{"class":59}," SESSION_MANAGER\n",[49,123631,123632,123634],{"class":51,"line":70},[49,123633,123626],{"class":159},[49,123635,123636],{"class":59}," DBUS_SESSION_BUS_ADDRESS\n",[49,123638,123639],{"class":51,"line":219},[49,123640,123641],{"class":55},"gnome-session\n",[14,123643,123644],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[30,123646,123647],{"start":219},[33,123648,123649],{},"给予执行权限：",[14,123651,123652],{},"为xstartup文件设置执行权限：",[40,123654,123656],{"className":117827,"code":123655,"language":117829,"meta":27,"style":27},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[46,123657,123658],{"__ignoreMap":27},[49,123659,123660,123662,123665],{"class":51,"line":52},[49,123661,25302],{"class":55},[49,123663,123664],{"class":59}," +x",[49,123666,123608],{"class":59},[30,123668,123669],{"start":233},[33,123670,123671],{},"启动VNC服务器：",[40,123673,123675],{"className":117827,"code":123674,"language":117829,"meta":27,"style":27},"vncserver -geometry 1920x1080 -localhost=0\n",[46,123676,123677],{"__ignoreMap":27},[49,123678,123679,123682,123685,123688],{"class":51,"line":52},[49,123680,123681],{"class":55},"vncserver",[49,123683,123684],{"class":159}," -geometry",[49,123686,123687],{"class":59}," 1920x1080",[49,123689,123690],{"class":159}," -localhost=0\n",[14,123692,123693],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123695,123696],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[30,123698,123699],{"start":241},[33,123700,123701],{},"查看已开启的VNC服务器：",[40,123703,123705],{"className":117827,"code":123704,"language":117829,"meta":27,"style":27},"vncserver -list\n",[46,123706,123707],{"__ignoreMap":27},[49,123708,123709,123711],{"class":51,"line":52},[49,123710,123681],{"class":55},[49,123712,123713],{"class":159}," -list\n",[14,123715,123716],{},[25,123717],{"alt":27,"src":123718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[30,123720,123721],{"start":1920},[33,123722,123723],{},"连接到VNC服务器：",[14,123725,123726],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[30,123728,123729],{"start":2011},[33,123730,123731],{},"停止VNC服务器：",[14,123733,123734],{},"如果需要停止VNC服务器，可以使用以下命令：",[40,123736,123738],{"className":117827,"code":123737,"language":117829,"meta":27,"style":27},"vncserver -kill :1\n",[46,123739,123740],{"__ignoreMap":27},[49,123741,123742,123744,123747],{"class":51,"line":52},[49,123743,123681],{"class":55},[49,123745,123746],{"class":159}," -kill",[49,123748,123749],{"class":59}," :1\n",[14,123751,123752],{},"将:1替换为你实际使用的显示编号。",[14,123754,123755],{},[25,123756],{"alt":27,"src":123757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123759,123760],{},[25,123761],{"alt":27,"src":123762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[782,123764,123766],{"id":123765},"_74-usb端口设置","7.4 USB端口设置",[14,123768,123769],{},[112,123770,123771],{},"首先先配置好权限",[40,123773,123775],{"className":117827,"code":123774,"language":117829,"meta":27,"style":27},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[46,123776,123777,123782,123795,123802,123807],{"__ignoreMap":27},[49,123778,123779],{"class":51,"line":52},[49,123780,123781],{"class":66},"# 将用户权限提高\n",[49,123783,123784,123786,123788,123790,123793],{"class":51,"line":63},[49,123785,264],{"class":55},[49,123787,27250],{"class":59},[49,123789,27253],{"class":159},[49,123791,123792],{"class":59}," dialout",[49,123794,27258],{"class":73},[49,123796,123797,123799],{"class":51,"line":70},[49,123798,27277],{"class":55},[49,123800,123801],{"class":59}," dialout\n",[49,123803,123804],{"class":51,"line":219},[49,123805,123806],{"class":66},"# 查看下面命令是否输出dialout（若输出才正常）\n",[49,123808,123809],{"class":51,"line":233},[49,123810,123811],{"class":55},"groups\n",[14,123813,123814],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[18,123816,123818],{"id":123817},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123820,123821,123824],{},[112,123822,123823],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123826,123827,123830],{},[112,123828,123829],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123832,123833],{},[112,123834,123835],{},"流程如下：",[14,123837,123838],{},"（1）.查找设备idVendor和idProduct",[14,123840,123841,123842,123845],{},"接入两个USB设备，在终端调用指令",[46,123843,123844],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123847,123848],{},[25,123849],{"alt":27,"src":123850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123852,123853,123854,123857],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[46,123855,123856],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123859,123860],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123862,123863],{},"（2）.编写映射规则",[14,123865,123866,123867,123870],{},"在",[46,123868,123869],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[40,123872,123874],{"className":117827,"code":123873,"language":117829,"meta":27,"style":27},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[46,123875,123876],{"__ignoreMap":27},[49,123877,123878,123880,123882],{"class":51,"line":52},[49,123879,264],{"class":55},[49,123881,119114],{"class":59},[49,123883,123884],{"class":59}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123886,123887],{},"输入如下内容：",[40,123889,123891],{"className":117827,"code":123890,"language":117829,"meta":27,"style":27},"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",[46,123892,123893,123923],{"__ignoreMap":27},[49,123894,123895,123898,123900,123903,123906,123909,123912,123914,123917,123920],{"class":51,"line":52},[49,123896,123897],{"class":73},"KERNEL",[49,123899,78],{"class":77},[49,123901,123902],{"class":59},"=\"ttyUSB*\",",[49,123904,123905],{"class":55}," ATTRS",[49,123907,123908],{"class":59},"{idVendor}==",[49,123910,123911],{"class":55},"\"10c4\"",[49,123913,1207],{"class":55},[49,123915,123916],{"class":59}," ATTRS{idProduct}==\"ea60\",",[49,123918,123919],{"class":59}," MODE:=\"0777\",",[49,123921,123922],{"class":59}," SYMLINK+=\"mylidar\"\n",[49,123924,123925,123927,123929,123931,123933,123935,123938,123940,123943,123945],{"class":51,"line":63},[49,123926,123897],{"class":73},[49,123928,78],{"class":77},[49,123930,123902],{"class":59},[49,123932,123905],{"class":55},[49,123934,123908],{"class":59},[49,123936,123937],{"class":55},"\"1a86\"",[49,123939,1207],{"class":55},[49,123941,123942],{"class":59}," ATTRS{idProduct}==\"7523\",",[49,123944,123919],{"class":59},[49,123946,123947],{"class":59}," SYMLINK+=\"mycar\"\n",[14,123949,123950],{},"代码解释：",[742,123952,123953,123956,123959,123962],{},[33,123954,123955],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[33,123957,123958],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[33,123960,123961],{},"SYMLINK是符号连接，即绑定的别名；",[33,123963,123964],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123966,123967,123968,123971,123974],{},"***小提示：***",[24249,123969,123970],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[46,123972,123973],{},"\u002Fetc\u002Fudev\u002Frule.d",[24249,123975,123976],{},"目录即可。",[14,123978,123979],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123981,123982],{},"（3）.使规则生效",[14,123984,123985],{},"在终端下输入如下指令：",[40,123987,123989],{"className":117827,"code":123988,"language":117829,"meta":27,"style":27},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[46,123990,123991,123996,124008,124019,124023,124028,124041],{"__ignoreMap":27},[49,123992,123993],{"class":51,"line":52},[49,123994,123995],{"class":66},"# Ubuntu用下方命令\n",[49,123997,123998,124000,124002,124005],{"class":51,"line":63},[49,123999,264],{"class":55},[49,124001,120579],{"class":59},[49,124003,124004],{"class":59}," udev",[49,124006,124007],{"class":59}," reload\n",[49,124009,124010,124012,124014,124016],{"class":51,"line":70},[49,124011,264],{"class":55},[49,124013,120579],{"class":59},[49,124015,124004],{"class":59},[49,124017,124018],{"class":59}," restart\n",[49,124020,124021],{"class":51,"line":219},[49,124022,399],{"emptyLinePlaceholder":398},[49,124024,124025],{"class":51,"line":233},[49,124026,124027],{"class":66},"#Fedora用下方命令\n",[49,124029,124030,124032,124035,124038],{"class":51,"line":241},[49,124031,264],{"class":55},[49,124033,124034],{"class":59}," udevadm",[49,124036,124037],{"class":59}," control",[49,124039,124040],{"class":159}," --reload\n",[49,124042,124043,124045,124047],{"class":51,"line":1920},[49,124044,264],{"class":55},[49,124046,124034],{"class":59},[49,124048,124049],{"class":59}," trigger\n",[14,124051,124052],{},"再重新插拔设备即可。",[14,124054,124055],{},"（4）.测试",[14,124057,124058],{},"终端下输入如下指令",[40,124060,124062],{"className":117827,"code":124061,"language":117829,"meta":27,"style":27},"ll \u002Fdev | grep ttyUSB\n",[46,124063,124064],{"__ignoreMap":27},[49,124065,124066,124069,124072,124074,124076],{"class":51,"line":52},[49,124067,124068],{"class":55},"ll",[49,124070,124071],{"class":59}," \u002Fdev",[49,124073,166],{"class":77},[49,124075,30767],{"class":55},[49,124077,124078],{"class":59}," ttyUSB\n",[14,124080,124081],{},"运行结果如下：",[14,124083,124084],{},[25,124085],{"alt":27,"src":124086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,124088,124089,124090,124093],{},"也可以多次插拔USB设备，会发现设备端口",[46,124091,124092],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,124095,124096],{},[112,124097,118495],{},[14,124099,124100],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[18,124102,124104],{"id":124103},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,124106,124107,124109],{},[112,124108,123823],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,124111,124112,124114],{},[112,124113,123829],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,124116,124117],{},[112,124118,123835],{},[14,124120,124121],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,124123,124124],{},"调用如下指令查看第一台雷达的USB信息：",[40,124126,124128],{"className":117827,"code":124127,"language":117829,"meta":27,"style":27},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[46,124129,124130,124150],{"__ignoreMap":27},[49,124131,124132,124135,124137,124140,124143,124145,124147],{"class":51,"line":52},[49,124133,124134],{"class":55},"udevadm",[49,124136,70352],{"class":59},[49,124138,124139],{"class":159}," --attribute-walk",[49,124141,124142],{"class":159}," --name=\u002Fdev\u002FttyUSB0",[49,124144,166],{"class":77},[49,124146,30767],{"class":55},[49,124148,124149],{"class":59}," KERNELS\n",[49,124151,124152,124154,124156,124158,124161,124163,124165],{"class":51,"line":63},[49,124153,124134],{"class":55},[49,124155,70352],{"class":59},[49,124157,124139],{"class":159},[49,124159,124160],{"class":159}," --name=\u002Fdev\u002FttyACM0",[49,124162,166],{"class":77},[49,124164,30767],{"class":55},[49,124166,124149],{"class":59},[14,124168,124169],{},[25,124170],{"alt":27,"src":124171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,124173,124174],{},"调用如下指令查看第二台雷达的USB信息：",[40,124176,124178],{"className":117827,"code":124177,"language":117829,"meta":27,"style":27},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[46,124179,124180],{"__ignoreMap":27},[49,124181,124182,124184,124186,124188,124191,124193,124195],{"class":51,"line":52},[49,124183,124134],{"class":55},[49,124185,70352],{"class":59},[49,124187,124139],{"class":159},[49,124189,124190],{"class":159}," --name=\u002Fdev\u002FttyUSB1",[49,124192,166],{"class":77},[49,124194,30767],{"class":55},[49,124196,124149],{"class":59},[14,124198,124199,124200,124203,124204,124207,124208,124211],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[46,124201,124202],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[46,124205,124206],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[112,124209,124210],{},"唯一性标识","”。",[14,124213,123863],{},[14,124215,123866,124216,124218],{},[46,124217,123869],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[40,124220,124221],{"className":117827,"code":123873,"language":117829,"meta":27,"style":27},[46,124222,124223],{"__ignoreMap":27},[49,124224,124225,124227,124229],{"class":51,"line":52},[49,124226,264],{"class":55},[49,124228,119114],{"class":59},[49,124230,123884],{"class":59},[40,124232,124234],{"className":117827,"code":124233,"language":117829,"meta":27,"style":27},"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",[46,124235,124236,124265],{"__ignoreMap":27},[49,124237,124238,124240,124242,124244,124247,124249,124252,124255,124257,124260,124262],{"class":51,"line":52},[49,124239,123897],{"class":73},[49,124241,78],{"class":77},[49,124243,123902],{"class":59},[49,124245,124246],{"class":73}," KERNELS",[49,124248,78],{"class":77},[49,124250,124251],{"class":59},"=\"1-1.3:1.0\",",[49,124253,124254],{"class":55}," MODE:",[49,124256,78],{"class":59},[49,124258,124259],{"class":55},"\"0777\"",[49,124261,1207],{"class":55},[49,124263,124264],{"class":59}," SYMLINK+=\"rplidar_front\"\n",[49,124266,124267,124269,124271,124273,124275,124277,124280,124282,124284,124286,124288],{"class":51,"line":63},[49,124268,123897],{"class":73},[49,124270,78],{"class":77},[49,124272,123902],{"class":59},[49,124274,124246],{"class":73},[49,124276,78],{"class":77},[49,124278,124279],{"class":59},"=\"1-1.4:1.0\",",[49,124281,124254],{"class":55},[49,124283,78],{"class":59},[49,124285,124259],{"class":55},[49,124287,1207],{"class":55},[49,124289,124290],{"class":59}," SYMLINK+=\"rplidar_back\"\n",[14,124292,123982],{},[14,124294,123985],{},[40,124296,124297],{"className":117827,"code":123988,"language":117829,"meta":27,"style":27},[46,124298,124299,124303,124313,124323,124327,124331,124341],{"__ignoreMap":27},[49,124300,124301],{"class":51,"line":52},[49,124302,123995],{"class":66},[49,124304,124305,124307,124309,124311],{"class":51,"line":63},[49,124306,264],{"class":55},[49,124308,120579],{"class":59},[49,124310,124004],{"class":59},[49,124312,124007],{"class":59},[49,124314,124315,124317,124319,124321],{"class":51,"line":70},[49,124316,264],{"class":55},[49,124318,120579],{"class":59},[49,124320,124004],{"class":59},[49,124322,124018],{"class":59},[49,124324,124325],{"class":51,"line":219},[49,124326,399],{"emptyLinePlaceholder":398},[49,124328,124329],{"class":51,"line":233},[49,124330,124027],{"class":66},[49,124332,124333,124335,124337,124339],{"class":51,"line":241},[49,124334,264],{"class":55},[49,124336,124034],{"class":59},[49,124338,124037],{"class":59},[49,124340,124040],{"class":159},[49,124342,124343,124345,124347],{"class":51,"line":1920},[49,124344,264],{"class":55},[49,124346,124034],{"class":59},[49,124348,124049],{"class":59},[14,124350,124052],{},[14,124352,124055],{},[14,124354,124058,124355,124358],{},[46,124356,124357],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,124360,124361],{},[25,124362],{"alt":27,"src":124363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,124365,124366],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,124368,124369,124371],{},[112,124370,118495],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[18,124373,124375],{"id":124374},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,124377,124378],{},"（1）.查看所连接的主机USB接口的信息",[40,124380,124382],{"className":117827,"code":124381,"language":117829,"meta":27,"style":27},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[46,124383,124384,124414],{"__ignoreMap":27},[49,124385,124386,124388,124390,124393,124395,124397,124399,124401,124404,124407,124409,124412],{"class":51,"line":52},[49,124387,124134],{"class":55},[49,124389,70352],{"class":59},[49,124391,124392],{"class":159}," -a",[49,124394,29747],{"class":159},[49,124396,28953],{"class":73},[49,124398,124134],{"class":55},[49,124400,70352],{"class":59},[49,124402,124403],{"class":159}," -q",[49,124405,124406],{"class":59}," path",[49,124408,25804],{"class":159},[49,124410,124411],{"class":59}," \u002Fdev\u002FttyACM0",[49,124413,847],{"class":73},[49,124415,124416,124418,124420,124422,124424,124426,124428,124430,124432,124434,124436,124439],{"class":51,"line":63},[49,124417,124134],{"class":55},[49,124419,70352],{"class":59},[49,124421,124392],{"class":159},[49,124423,29747],{"class":159},[49,124425,28953],{"class":73},[49,124427,124134],{"class":55},[49,124429,70352],{"class":59},[49,124431,124403],{"class":159},[49,124433,124406],{"class":59},[49,124435,25804],{"class":159},[49,124437,124438],{"class":59}," \u002Fdev\u002FttyUSB0",[49,124440,847],{"class":73},[14,124442,124443],{},[25,124444],{"alt":27,"src":124445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,124447,124448],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,124450,123863],{},[14,124452,123866,124453,124218],{},[46,124454,123869],{},[40,124456,124457],{"className":117827,"code":123873,"language":117829,"meta":27,"style":27},[46,124458,124459],{"__ignoreMap":27},[49,124460,124461,124463,124465],{"class":51,"line":52},[49,124462,264],{"class":55},[49,124464,119114],{"class":59},[49,124466,123884],{"class":59},[40,124468,124470],{"className":117827,"code":124469,"language":117829,"meta":27,"style":27},"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",[46,124471,124472,124500,124526],{"__ignoreMap":27},[49,124473,124474,124476,124478,124481,124483,124485,124487,124489,124492,124495,124497],{"class":51,"line":52},[49,124475,123897],{"class":73},[49,124477,78],{"class":77},[49,124479,124480],{"class":59},"=\"ttyACM*\",",[49,124482,123905],{"class":55},[49,124484,123908],{"class":59},[49,124486,123937],{"class":55},[49,124488,1207],{"class":55},[49,124490,124491],{"class":59}," ATTRS{idProduct}==\"55d4\",",[49,124493,124494],{"class":59}," ATTRS{serial}==\"0001\",",[49,124496,123919],{"class":59},[49,124498,124499],{"class":59}," SYMLINK+=\"ttyACM_MCU\"\n",[49,124501,124502,124504,124506,124508,124510,124512,124514,124516,124518,124521,124523],{"class":51,"line":63},[49,124503,123897],{"class":73},[49,124505,78],{"class":77},[49,124507,124480],{"class":59},[49,124509,123905],{"class":55},[49,124511,123908],{"class":59},[49,124513,123937],{"class":55},[49,124515,1207],{"class":55},[49,124517,124491],{"class":59},[49,124519,124520],{"class":59}," ATTRS{serial}==\"0002\",",[49,124522,123919],{"class":59},[49,124524,124525],{"class":59}," SYMLINK+=\"ttyACM_Lidar\"\n",[49,124527,124528,124530,124532,124534,124536,124538,124540,124542,124544,124546],{"class":51,"line":70},[49,124529,123897],{"class":73},[49,124531,78],{"class":77},[49,124533,123902],{"class":59},[49,124535,123905],{"class":55},[49,124537,123908],{"class":59},[49,124539,123937],{"class":55},[49,124541,1207],{"class":55},[49,124543,123942],{"class":59},[49,124545,123919],{"class":59},[49,124547,124548],{"class":59}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124550,123982],{},[14,124552,123985],{},[40,124554,124555],{"className":117827,"code":123988,"language":117829,"meta":27,"style":27},[46,124556,124557,124561,124571,124581,124585,124589,124599],{"__ignoreMap":27},[49,124558,124559],{"class":51,"line":52},[49,124560,123995],{"class":66},[49,124562,124563,124565,124567,124569],{"class":51,"line":63},[49,124564,264],{"class":55},[49,124566,120579],{"class":59},[49,124568,124004],{"class":59},[49,124570,124007],{"class":59},[49,124572,124573,124575,124577,124579],{"class":51,"line":70},[49,124574,264],{"class":55},[49,124576,120579],{"class":59},[49,124578,124004],{"class":59},[49,124580,124018],{"class":59},[49,124582,124583],{"class":51,"line":219},[49,124584,399],{"emptyLinePlaceholder":398},[49,124586,124587],{"class":51,"line":233},[49,124588,124027],{"class":66},[49,124590,124591,124593,124595,124597],{"class":51,"line":241},[49,124592,264],{"class":55},[49,124594,124034],{"class":59},[49,124596,124037],{"class":59},[49,124598,124040],{"class":159},[49,124600,124601,124603,124605],{"class":51,"line":1920},[49,124602,264],{"class":55},[49,124604,124034],{"class":59},[49,124606,124049],{"class":59},[14,124608,124609,124610],{},"再重新插拔设备即可，或者 ",[112,124611,124612],{},"直接重启系统。",[14,124614,124055],{},[14,124616,124058,124617,124358],{},[46,124618,124357],{},[14,124620,124621],{},[25,124622],{"alt":27,"src":124623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124625,124366],{},[14,124627,124628,124630],{},[112,124629,118495],{}," 一些设备可能没有串口号等。",[18,124632,124634],{"id":124633},"_744-其他注意事项","7.4.4 其他注意事项",[14,124636,124637,124638,124640,124641,124644,124645,19107,124648,124651,124652,124654],{},"并非所有的USB设备端口号都是",[46,124639,124092],{},"的格式，比如Arduino的端口号可能是",[46,124642,124643],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[46,124646,124647],{},"videon",[46,124649,124650],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[46,124653,124647],{},"端口，绑定时需要关联的也是该接口。",[14,124656,124657,124658,124661,124662,124665,124666,124668,124669,124672,124673,124676,124677,124680,124681,124680,124684,124680,124687,28916],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[46,124659,124660],{},"KERNEL==\"ttyUSB*\"","修改为",[46,124663,124664],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[46,124667,124660],{},"修改为类似于",[46,124670,124671],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[46,124674,124675],{},"video[0,2,4,6]","表示可以绑定的端口为",[46,124678,124679],{},"video0","或",[46,124682,124683],{},"video2",[46,124685,124686],{},"video4",[46,124688,124689],{},"video6",[782,124691,124693],{"id":124692},"_75-挂载内网网页","7.5 挂载内网网页",[14,124695,124696],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124698,124699],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124701,124702],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124704,124705,124706],{},"Termux 下载地址（F-Droid）：",[124,124707,124708],{"href":124708,"rel":124709},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[128],[14,124711,124712],{},"首先打开app后，先更新软件缓存：",[40,124714,124716],{"className":117827,"code":124715,"language":117829,"meta":27,"style":27},"pkg update\n",[46,124717,124718],{"__ignoreMap":27},[49,124719,124720,124723],{"class":51,"line":52},[49,124721,124722],{"class":55},"pkg",[49,124724,249],{"class":59},[14,124726,124727],{},"然后换源",[40,124729,124731],{"className":117827,"code":124730,"language":117829,"meta":27,"style":27},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[46,124732,124733],{"__ignoreMap":27},[49,124734,124735,124737,124740],{"class":51,"line":52},[49,124736,123605],{"class":55},[49,124738,124739],{"class":73}," $PREFIX",[49,124741,124742],{"class":59},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124744,124745],{},"将该文件内容替换为下面：",[40,124747,124749],{"className":117827,"code":124748,"language":117829,"meta":27,"style":27},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[46,124750,124751],{"__ignoreMap":27},[49,124752,124753,124756,124759,124762],{"class":51,"line":52},[49,124754,124755],{"class":55},"deb",[49,124757,124758],{"class":59}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[49,124760,124761],{"class":59}," stable",[49,124763,124764],{"class":59}," main\n",[742,124766,124767,124794],{},[33,124768,124769,124770,124772,124773],{},"如果你使用的是",[46,124771,123605],{},"编辑器：",[742,124774,124775,124782,124788],{},[33,124776,124777,124778,124781],{},"按 ",[46,124779,124780],{},"Ctrl+O"," 保存文件。",[33,124783,124777,124784,124787],{},[46,124785,124786],{},"Enter"," 确认文件名。",[33,124789,124777,124790,124793],{},[46,124791,124792],{},"Ctrl+X"," 退出编辑器。",[33,124795,124769,124796,124772,124799],{},[46,124797,124798],{},"vim",[742,124800,124801,124807],{},[33,124802,124777,124803,124806],{},[46,124804,124805],{},"Esc"," 退出编辑模式。",[33,124808,124809,124810,124812],{},"输入 ",[46,124811,119752],{}," 保存并退出。",[14,124814,124815],{},"接下来重新更新软件源：",[40,124817,124819],{"className":117827,"code":124818,"language":117829,"meta":27,"style":27},"pkg update && pkg upgrade\n",[46,124820,124821],{"__ignoreMap":27},[49,124822,124823,124825,124827,124829,124831],{"class":51,"line":52},[49,124824,124722],{"class":55},[49,124826,117878],{"class":59},[49,124828,26876],{"class":73},[49,124830,124722],{"class":55},[49,124832,117864],{"class":59},[14,124834,124835],{},"安装python：",[40,124837,124839],{"className":117827,"code":124838,"language":117829,"meta":27,"style":27},"pkg install python\n",[46,124840,124841],{"__ignoreMap":27},[49,124842,124843,124845,124847],{"class":51,"line":52},[49,124844,124722],{"class":55},[49,124846,269],{"class":59},[49,124848,124849],{"class":59}," python\n",[14,124851,124852,27151],{},[112,124853,124854],{},"通过Termux访问设备存储",[14,124856,124857],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[40,124859,124861],{"className":117827,"code":124860,"language":117829,"meta":27,"style":27},"termux-setup-storage\n",[46,124862,124863],{"__ignoreMap":27},[49,124864,124865],{"class":51,"line":52},[49,124866,124860],{"class":55},[30,124868,124869],{},[33,124870,124871,27151,124874],{},[112,124872,124873],{},"进入HTML文件所在的目录",[30,124875,124876],{},[33,124877,124878,124879,124881],{},"使用",[46,124880,101807],{},"命令进入HTML文件所在的目录：",[40,124883,124885],{"className":117827,"code":124884,"language":117829,"meta":27,"style":27},"cd ~\u002Fyour_html_folder\n",[46,124886,124887],{"__ignoreMap":27},[49,124888,124889,124891],{"class":51,"line":52},[49,124890,101807],{"class":159},[49,124892,124893],{"class":59}," ~\u002Fyour_html_folder\n",[30,124895,124896],{"start":63},[33,124897,124898,27151,124901,124906,124923],{},[112,124899,124900],{},"启动Python HTTP服务器",[30,124902,124903],{},[33,124904,124905],{},"运行以下命令启动一个简单的HTTP服务器：",[40,124907,124909],{"className":117827,"code":124908,"language":117829,"meta":27,"style":27},"python -m http.server 8000\n",[46,124910,124911],{"__ignoreMap":27},[49,124912,124913,124915,124917,124920],{"class":51,"line":52},[49,124914,30911],{"class":55},[49,124916,101413],{"class":159},[49,124918,124919],{"class":59}," http.server",[49,124921,124922],{"class":159}," 8000\n",[30,124924,124925],{"start":70},[33,124926,124927,124928,124931],{},"这会在端口",[46,124929,124930],{},"8000","上启动一个Web服务器。",[742,124933,124934],{},[33,124935,124936],{},"启动服务器后，Termux会显示日志信息，例如：",[40,124938,124940],{"className":121347,"code":124939,"language":121349,"meta":121350,"style":27},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[46,124941,124942],{"__ignoreMap":27},[49,124943,124944],{"class":51,"line":52},[49,124945,124939],{},[742,124947,124948],{},[33,124949,124950],{},"这表示服务器已成功启动。",[14,124952,124953],{},[112,124954,124955],{},"在浏览器中访问HTML文件",[30,124957,124958],{},[33,124959,124960,27151,124963,124968],{},[112,124961,124962],{},"在同一设备上访问",[30,124964,124965],{},[33,124966,124967],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[40,124969,124972],{"className":124970,"code":124971,"language":72195,"meta":27,"style":27},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[46,124973,124974],{"__ignoreMap":27},[49,124975,124976,124979],{"class":51,"line":52},[49,124977,124978],{"class":73},"http:",[49,124980,124981],{"class":66},"\u002F\u002Flocalhost:8000\n",[742,124983,124984],{},[33,124985,124986,124987,124990],{},"如果HTML文件中有",[46,124988,124989],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[782,124992,124994],{"id":124993},"_76-linux重点知识","7.6 Linux重点知识",[18,124996,124998],{"id":124997},"_761-关于点的说明","7.6.1 关于点的说明",[14,125000,125001],{},[25,125002],{"alt":27,"src":125003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,125005,125006],{},"一点本目录，两点上目录",[18,125008,125010],{"id":125009},"_762-目录","7.6.2 目录",[130,125012,125014],{"id":125013},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,125016,125017],{},[112,125018,125019],{},"\u002Fboot:",[14,125021,125022],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,125024,125025],{},[112,125026,125027],{},"\u002Fetc:",[14,125029,125030],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,125032,125033],{},[112,125034,125035],{},"\u002Flib：",[14,125037,125038],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,125040,125041],{},[112,125042,125043],{},"\u002Fsys:",[14,125045,125046],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[130,125048,125050],{"id":125049},"_7622-指令集合","7.6.2.2 指令集合",[14,125052,125053],{},[112,125054,125055],{},"\u002Fbin:",[14,125057,125058],{},"为二进制文件的缩写，存放最经常使用的命令",[14,125060,125061],{},[112,125062,125063],{},"\u002Fsbin:",[14,125065,125066],{},"只有系统管理员才能使用的程序和指令",[130,125068,125070],{"id":125069},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,125072,125073],{},[112,125074,125075],{},"\u002Fdev:",[14,125077,125078],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,125080,125081],{},[112,125082,125083],{},"\u002Fmedia:",[14,125085,125086],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,125088,125089],{},[112,125090,125091],{},"\u002Fmnt:",[14,125093,125094],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[130,125096,125098],{"id":125097},"_7624-临时文件","7.6.2.4 临时文件",[14,125100,125101],{},[112,125102,125103],{},"\u002Frun:",[14,125105,125106],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,125108,125109],{},[112,125110,125111],{},"\u002Flost+found:",[14,125113,125114],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,125116,125117],{},[112,125118,125119],{},"\u002Ftmp:",[14,125121,125122],{},"这个目录是用来存放一些临时文件的",[130,125124,125126],{"id":125125},"_7625-账户","7.6.2.5 账户",[14,125128,125129],{},[112,125130,125131],{},"\u002Froot：",[14,125133,125134],{},"系统管理员的用户主目录",[14,125136,125137,27151],{},[112,125138,125139],{},"\u002Fhome",[14,125141,125142],{},"用户的主目录，以用户的账号命名的",[14,125144,125145,27151],{},[112,125146,125147],{},"\u002Fusr",[14,125149,125150],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,125152,125153],{},[112,125154,125155],{},"\u002Fusr\u002Fbin：",[14,125157,125158],{},"系统用户使用的应用程序与指令",[14,125160,125161],{},[112,125162,125163],{},"\u002Fusr\u002Fsbin：",[14,125165,125166],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,125168,125169],{},[112,125170,125171],{},"\u002Fusr\u002Fsrc：",[14,125173,125174],{},"内核源代码默认的放置目录",[130,125176,125178],{"id":125177},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,125180,125181],{},[112,125182,125183],{},"\u002Fvar：",[14,125185,125186],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,125188,125189],{},[112,125190,125191],{},"\u002Fproc:",[14,125193,125194,125195,125198],{},"管理 ",[112,125196,125197],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[130,125200,125202],{"id":125201},"_7627-扩展用的","7.6.2.7 扩展用的",[14,125204,125205],{},[112,125206,125207],{},"\u002Fopt:",[14,125209,125210],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,125212,125213],{},[112,125214,125215],{},"\u002Fsrv:",[14,125217,125218],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[18,125220,125222],{"id":125221},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,125224,125225],{},[25,125226],{"alt":27,"src":125227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,125229,125230],{},"windows-->linux:",[14,125232,125233],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,125235,125236],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,125238,125239],{},"linux传输文件到windows",[14,125241,125242],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[18,125244,125246],{"id":125245},"_764-易忘知识","7.6.4 易忘知识",[14,125248,125249],{},"操作系统内核查看",[40,125251,125252],{"className":117827,"code":121821,"language":117829,"meta":27,"style":27},[46,125253,125254],{"__ignoreMap":27},[49,125255,125256,125258],{"class":51,"line":52},[49,125257,70735],{"class":55},[49,125259,121830],{"class":159},[14,125261,125262],{},[25,125263],{"alt":27,"src":125264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,125266,125267],{},[25,125268],{"alt":27,"src":125269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[40,125271,125273],{"className":117827,"code":125272,"language":117829,"meta":27,"style":27},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[46,125274,125275,125287],{"__ignoreMap":27},[49,125276,125277,125279,125282,125285],{"class":51,"line":52},[49,125278,122038],{"class":55},[49,125280,125281],{"class":59}," mvtest",[49,125283,125284],{"class":59}," mvtest2",[49,125286,3371],{"class":73},[49,125288,125289],{"class":51,"line":63},[49,125290,125291],{"class":55},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,125293,125294],{},[25,125295],{"alt":27,"src":125296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,125298,125299],{},[25,125300],{"alt":27,"src":125301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,125303,125304,125305,125308],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[46,125306,125307],{},"du -a"," 可以快速查看磁盘使用细节。",[18,125310,125312],{"id":125311},"_765-vim","7.6.5 Vim",[14,125314,125315],{},[25,125316],{"alt":27,"src":125317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,125319,125320],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,125322,125323],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,125325,125326],{},[112,125327,125328],{},"1.命令模式：",[14,125330,125331],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,125333,125334],{},"x 删除当前光标所在处的字符",[14,125336,125337],{},"：切换到底线命令模式，以在最底一行输入命令",[14,125339,125340],{},"a 进行插入模式，在光标下一个位置输入文本",[14,125342,125343],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,125345,125346],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,125348,125349],{},"dd 剪切当前行",[14,125351,125352],{},"yy 复制当前行",[14,125354,125355],{},"p 粘贴剪贴板内容到光标下方",[14,125357,125358],{},"P 粘贴剪贴板内容到光标上方",[14,125360,125361],{},"u 撤销上一次操作",[14,125363,125364],{},"ctrl+r 重做上一次操作",[14,125366,125367,125369],{},[1624,125368],{}," 保存文件",[14,125371,125372,125374],{},[1474,125373],{}," 退出Vim编辑器",[14,125376,125377,125379],{},[1474,125378],{},"! 强制退出Vim编辑器，不保存修改",[14,125381,125382],{},[112,125383,125384],{},"2.输入模式：",[14,125386,125387],{},[25,125388],{"alt":27,"src":125389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,125391,125392],{},[112,125393,125394],{},"3.底线命令模式：",[14,125396,125397],{},[25,125398],{"alt":27,"src":125399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,125401,125402],{},"按下esc可以退出底线命令模式",[18,125404,125406],{"id":125405},"_766-apt","7.6.6 apt",[14,125408,125409],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[18,125411,125413],{"id":125412},"_767-home与root的区别","7.6.7 home与root的区别",[14,125415,125416],{},[25,125417],{"alt":27,"src":125418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,125420,125421],{},[25,125422],{"alt":27,"src":125423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,125425,125426],{},[25,125427],{"alt":27,"src":125428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,125430,125431],{},[25,125432],{"alt":27,"src":125433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[18,125435,125437],{"id":125436},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,125439,125440],{},[124,125441,125442],{"href":125442,"rel":125443},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[128],[30,125445,125446,125449],{},[33,125447,125448],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[33,125450,125451],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,125453,125454],{},[25,125455],{"alt":27,"src":125456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,125458,125459],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,125461,125462],{},[25,125463],{"alt":27,"src":125464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[40,125466,125468],{"className":121347,"code":125467,"language":121349,"meta":121350,"style":27},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[46,125469,125470,125475],{"__ignoreMap":27},[49,125471,125472],{"class":51,"line":52},[49,125473,125474],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[49,125476,125477],{"class":51,"line":63},[49,125478,125479],{},".\u002Fpycharm.sh\n",[14,125481,125482],{},"3️⃣创建.desktop文件",[14,125484,125485],{},[112,125486,125487],{},"原理：",[742,125489,125490,125500],{},[33,125491,125492,125493,125499],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[112,125494,125495,125498],{},[46,125496,125497],{},".desktop"," 文件"," 来识别应用。",[33,125501,125502,125504,125505],{},[46,125503,125497],{}," 文件相当于一个“应用注册表”，告诉系统：",[742,125506,125507,125510,125513,125516,125519],{},[33,125508,125509],{},"应用名字（Name）",[33,125511,125512],{},"图标（Icon）",[33,125514,125515],{},"执行命令（Exec）",[33,125517,125518],{},"分类（Categories）",[33,125520,125521],{},"是否需要终端（Terminal）",[40,125523,125525],{"className":121347,"code":125524,"language":121349,"meta":121350,"style":27},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[46,125526,125527,125532],{"__ignoreMap":27},[49,125528,125529],{"class":51,"line":52},[49,125530,125531],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[49,125533,125534],{"class":51,"line":63},[49,125535,125536],{},"nano pycharm.desktop\n",[14,125538,125539],{},"nano是一个命令行下的编辑器，也可以使用vim",[40,125541,125543],{"className":121347,"code":125542,"language":121349,"meta":121350,"style":27},"[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",[46,125544,125545,125550,125555,125560,125565,125570,125575,125580,125585,125590],{"__ignoreMap":27},[49,125546,125547],{"class":51,"line":52},[49,125548,125549],{},"[Desktop Entry]\n",[49,125551,125552],{"class":51,"line":63},[49,125553,125554],{},"Version=1.0\n",[49,125556,125557],{"class":51,"line":70},[49,125558,125559],{},"Type=Application\n",[49,125561,125562],{"class":51,"line":219},[49,125563,125564],{},"Name=PyCharm\n",[49,125566,125567],{"class":51,"line":233},[49,125568,125569],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[49,125571,125572],{"class":51,"line":241},[49,125573,125574],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[49,125576,125577],{"class":51,"line":1920},[49,125578,125579],{},"Comment=JetBrains PyCharm IDE\n",[49,125581,125582],{"class":51,"line":2011},[49,125583,125584],{},"Categories=Development;IDE;\n",[49,125586,125587],{"class":51,"line":2017},[49,125588,125589],{},"Terminal=false\n",[49,125591,125592],{"class":51,"line":2029},[49,125593,125594],{},"StartupWMClass=jetbrains-pycharm\n",[742,125596,125597,125603,125609,125615],{},[33,125598,125599,125602],{},[46,125600,125601],{},"Exec"," → 点击图标时执行的命令",[33,125604,125605,125608],{},[46,125606,125607],{},"Icon"," → 显示在菜单和桌面上的图标",[33,125610,125611,125614],{},[46,125612,125613],{},"Terminal=false"," → 不打开终端",[33,125616,125617,125620],{},[46,125618,125619],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125622,125623,125624],"blockquote",{},[14,125625,125626,125627,125629,125630],{},"可以理解成 ",[46,125628,125497],{}," 文件是 Linux 的 ",[112,125631,125632],{},"快捷方式配置文件",[14,125634,125635],{},"4️⃣设置可执行权限",[40,125637,125639],{"className":121347,"code":125638,"language":121349,"meta":121350,"style":27},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[46,125640,125641],{"__ignoreMap":27},[49,125642,125643],{"class":51,"line":52},[49,125644,125638],{},[14,125646,125647],{},"5️⃣桌面图标启动的话如下：",[40,125649,125651],{"className":121347,"code":125650,"language":121349,"meta":121350,"style":27},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[46,125652,125653,125658],{"__ignoreMap":27},[49,125654,125655],{"class":51,"line":52},[49,125656,125657],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[49,125659,125660],{"class":51,"line":63},[49,125661,125662],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[30,125664,125665],{"start":70},[33,125666,125667],{},"下载Appimage文件实现软件的安装",[14,125669,125670],{},"1️⃣先下载appimage",[14,125672,125673],{},[124,125674,125675],{"href":125675,"rel":125676},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[128],[14,125678,125679],{},[25,125680],{"alt":27,"src":125681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125683,125684],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125686,125687],{},[25,125688],{"alt":27,"src":125689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125691,125692],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125694,125695],{},[25,125696],{"alt":27,"src":125697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125699,125700],{},[25,125701],{"alt":27,"src":125702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125704,125705,125706,125709],{},"3️⃣给他们放在",[46,125707,125708],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125711,125712],{},"4️⃣给软件执行权限",[40,125714,125716],{"className":121347,"code":125715,"language":121349,"meta":121350,"style":27},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[46,125717,125718,125723],{"__ignoreMap":27},[49,125719,125720],{"class":51,"line":52},[49,125721,125722],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[49,125724,125725],{"class":51,"line":63},[49,125726,125727],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125729,125730],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[40,125732,125734],{"className":117827,"code":125733,"language":117829,"meta":27,"style":27},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[46,125735,125736,125743,125750,125756],{"__ignoreMap":27},[49,125737,125738,125740],{"class":51,"line":52},[49,125739,101807],{"class":159},[49,125741,125742],{"class":59}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[49,125744,125745,125747],{"class":51,"line":63},[49,125746,101814],{"class":55},[49,125748,125749],{"class":59}," .\u002Fqqmusic.desktop\n",[49,125751,125752,125754],{"class":51,"line":70},[49,125753,124798],{"class":55},[49,125755,125749],{"class":59},[49,125757,125758,125760,125762,125764],{"class":51,"line":219},[49,125759,264],{"class":55},[49,125761,25270],{"class":59},[49,125763,123664],{"class":59},[49,125765,125749],{"class":59},[14,125767,125768,125770],{},[46,125769,101814],{},"：一个 Linux 命令，主要功能是：",[742,125772,125773,125776],{},[33,125774,125775],{},"如果文件不存在，就创建一个新的空文件",[33,125777,125778],{},"如果文件已存在，就更新该文件的最后修改时间",[40,125780,125782],{"className":121347,"code":125781,"language":121349,"meta":121350,"style":27},"[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",[46,125783,125784,125788,125793,125798,125803,125807,125812],{"__ignoreMap":27},[49,125785,125786],{"class":51,"line":52},[49,125787,125549],{},[49,125789,125790],{"class":51,"line":63},[49,125791,125792],{},"Name=QQ音乐\n",[49,125794,125795],{"class":51,"line":70},[49,125796,125797],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[49,125799,125800],{"class":51,"line":219},[49,125801,125802],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[49,125804,125805],{"class":51,"line":233},[49,125806,125559],{},[49,125808,125809],{"class":51,"line":241},[49,125810,125811],{},"Categories=Audio;Music;Player;\n",[49,125813,125814],{"class":51,"line":1920},[49,125815,125816],{},"Comment=QQ Music Client for Linux\n",[14,125818,125819],{},"将文件复制进去",[14,125821,125822],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125824,125825],{},[25,125826],{"alt":27,"src":125827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125829,125830],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125832,125833],{},[25,125834],{"alt":27,"src":125835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125837,125838,125839,125842,125843,125846],{},"如果你用的不是KDE，那么也可以直接修改",[46,125840,125841],{},"qqmuic.desktop","：在exec的末尾加上",[46,125844,125845],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[40,125848,125850],{"className":121347,"code":125849,"language":121349,"meta":121350,"style":27},"[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",[46,125851,125852,125856,125860,125865,125869,125873,125877],{"__ignoreMap":27},[49,125853,125854],{"class":51,"line":52},[49,125855,125549],{},[49,125857,125858],{"class":51,"line":63},[49,125859,125792],{},[49,125861,125862],{"class":51,"line":70},[49,125863,125864],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[49,125866,125867],{"class":51,"line":219},[49,125868,125802],{},[49,125870,125871],{"class":51,"line":233},[49,125872,125559],{},[49,125874,125875],{"class":51,"line":241},[49,125876,125811],{},[49,125878,125879],{"class":51,"line":1920},[49,125880,125816],{},[14,125882,125883],{},[25,125884],{"alt":27,"src":125885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125887,125888],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[40,125890,125892],{"className":121347,"code":125891,"language":121349,"meta":121350,"style":27},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[46,125893,125894],{"__ignoreMap":27},[49,125895,125896],{"class":51,"line":52},[49,125897,125891],{},[30,125899,125900],{"start":219},[33,125901,125902],{},"去Flathub上安装软件",[14,125904,125905],{},[124,125906,125907],{"href":125907,"rel":125908},"https:\u002F\u002Fflathub.org\u002F",[128],[14,125910,125911],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125913,125914],{},[25,125915],{"alt":27,"src":125916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[40,125918,125920],{"className":121347,"code":125919,"language":121349,"meta":121350,"style":27},"flatpak install flathub com.obsproject.Studio\n",[46,125921,125922],{"__ignoreMap":27},[49,125923,125924],{"class":51,"line":52},[49,125925,125919],{},[14,125927,125928],{},[25,125929],{"alt":27,"src":125930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125932,125933],{},"2️⃣运行软件",[14,125935,125936],{},"a.官方方式：",[14,125938,125939],{},[25,125940],{"alt":27,"src":125941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[40,125943,125944],{"className":121347,"code":125919,"language":121349,"meta":121350,"style":27},[46,125945,125946],{"__ignoreMap":27},[49,125947,125948],{"class":51,"line":52},[49,125949,125919],{},[14,125951,125952],{},"b.当普通软件运行：",[14,125954,125955],{},[25,125956],{"alt":27,"src":125957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125959,125960],{},[25,125961],{"alt":27,"src":125962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[757,125964,125965],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":27,"searchDepth":63,"depth":63,"links":125967},[125968,125969,125974,125975,125981,125982],{"id":122700,"depth":63,"text":122701},{"id":123042,"depth":63,"text":123043,"children":125970},[125971,125972,125973],{"id":123046,"depth":70,"text":123047},{"id":123113,"depth":70,"text":123114},{"id":123374,"depth":70,"text":123375},{"id":123527,"depth":63,"text":123528},{"id":123765,"depth":63,"text":123766,"children":125976},[125977,125978,125979,125980],{"id":123817,"depth":70,"text":123818},{"id":124103,"depth":70,"text":124104},{"id":124374,"depth":70,"text":124375},{"id":124633,"depth":70,"text":124634},{"id":124692,"depth":63,"text":124693},{"id":124993,"depth":63,"text":124994,"children":125983},[125984,125985,125986,125987,125988,125989,125990,125991],{"id":124997,"depth":70,"text":124998},{"id":125009,"depth":70,"text":125010},{"id":125221,"depth":70,"text":125222},{"id":125245,"depth":70,"text":125246},{"id":125311,"depth":70,"text":125312},{"id":125405,"depth":70,"text":125406},{"id":125412,"depth":70,"text":125413},{"id":125436,"depth":70,"text":125437},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122692,"description":24072},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125998,"title":125999,"body":126000,"description":24072,"extension":766,"meta":126004,"navigation":398,"path":126005,"seo":126006,"stem":126007,"__hash__":126008},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126001,"toc":126002},[],{"title":27,"searchDepth":63,"depth":63,"links":126003},[],{"category":30794},"\u002Fwiki\u002F2025-01-27-linux",{"title":125999,"description":24072},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126010,"title":126011,"body":126012,"description":126016,"extension":766,"meta":126407,"navigation":398,"path":126408,"seo":126409,"stem":126410,"__hash__":126411},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126013,"toc":126405},[126014,126017,126021,126038,126041,126094,126098,126100,126140,126149,126153,126156,126397,126402],[14,126015,126016],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126018,126020],{"id":126019},"_1ubuntu环境配置","1.Ubuntu环境配置",[30,126022,126023,126026,126029,126032,126035],{},[33,126024,126025],{},"ubuntu环境换源",[33,126027,126028],{},"安装cuda",[33,126030,126031],{},"安装miniconda",[33,126033,126034],{},"安装pytorch",[33,126036,126037],{},"安装genesis",[14,126039,126040],{},"参考链接：",[40,126042,126044],{"className":42,"code":126043,"language":44,"meta":27,"style":27},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[46,126045,126046],{"__ignoreMap":27},[49,126047,126048,126051,126054,126057,126059,126062,126065,126067,126070,126073,126075,126078,126081,126083,126086,126089,126091],{"class":51,"line":52},[49,126049,126050],{"class":55},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[49,126052,126053],{"class":59},"=blogdetail",[49,126055,126056],{"class":73},"&sharetype",[49,126058,78],{"class":77},[49,126060,126061],{"class":59},"blogdetail",[49,126063,126064],{"class":73},"&sharerId",[49,126066,78],{"class":77},[49,126068,126069],{"class":59},"144728092",[49,126071,126072],{"class":73},"&sharerefer",[49,126074,78],{"class":77},[49,126076,126077],{"class":59},"PC",[49,126079,126080],{"class":73},"&sharesource",[49,126082,78],{"class":77},[49,126084,126085],{"class":59},"qq_69379513",[49,126087,126088],{"class":73},"&sharefrom",[49,126090,78],{"class":77},[49,126092,126093],{"class":59},"from_link\n",[10,126095,126097],{"id":126096},"_2genesis-报错issue","2.Genesis 报错issue",[14,126099,126040],{},[40,126101,126102],{"className":42,"code":126043,"language":44,"meta":27,"style":27},[46,126103,126104],{"__ignoreMap":27},[49,126105,126106,126108,126110,126112,126114,126116,126118,126120,126122,126124,126126,126128,126130,126132,126134,126136,126138],{"class":51,"line":52},[49,126107,126050],{"class":55},[49,126109,126053],{"class":59},[49,126111,126056],{"class":73},[49,126113,78],{"class":77},[49,126115,126061],{"class":59},[49,126117,126064],{"class":73},[49,126119,78],{"class":77},[49,126121,126069],{"class":59},[49,126123,126072],{"class":73},[49,126125,78],{"class":77},[49,126127,126077],{"class":59},[49,126129,126080],{"class":73},[49,126131,78],{"class":77},[49,126133,126085],{"class":59},[49,126135,126088],{"class":73},[49,126137,78],{"class":77},[49,126139,126093],{"class":59},[40,126141,126143],{"className":42,"code":126142,"language":44,"meta":27,"style":27},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[46,126144,126145],{"__ignoreMap":27},[49,126146,126147],{"class":51,"line":52},[49,126148,126142],{"class":55},[10,126150,126152],{"id":126151},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,126154,126155],{},"hello_robot.py",[40,126157,126159],{"className":30909,"code":126158,"language":30911,"meta":27,"style":27},"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",[46,126160,126161,126167,126182,126186,126198,126210,126214,126227,126231,126250,126260,126270,126284,126288,126292,126297,126301,126311,126318,126332,126339,126349,126354,126358,126376,126381,126385,126392],{"__ignoreMap":27},[49,126162,126163,126165],{"class":51,"line":52},[49,126164,30923],{"class":77},[49,126166,45836],{"class":73},[49,126168,126169,126172,126175,126177,126179],{"class":51,"line":63},[49,126170,126171],{"class":73},"os.environ[",[49,126173,126174],{"class":59},"'PYOPENGL_PLATFORM'",[49,126176,5140],{"class":73},[49,126178,78],{"class":77},[49,126180,126181],{"class":59}," 'glx'\n",[49,126183,126184],{"class":51,"line":70},[49,126185,399],{"emptyLinePlaceholder":398},[49,126187,126188,126190,126193,126195],{"class":51,"line":219},[49,126189,30923],{"class":77},[49,126191,126192],{"class":73}," genesis ",[49,126194,31914],{"class":77},[49,126196,126197],{"class":73}," gs\n",[49,126199,126200,126202,126205,126207],{"class":51,"line":233},[49,126201,31268],{"class":77},[49,126203,126204],{"class":73}," pynput ",[49,126206,30923],{"class":77},[49,126208,126209],{"class":73}," keyboard\n",[49,126211,126212],{"class":51,"line":241},[49,126213,399],{"emptyLinePlaceholder":398},[49,126215,126216,126219,126222,126224],{"class":51,"line":1920},[49,126217,126218],{"class":73},"gs.init(",[49,126220,126221],{"class":5913},"backend",[49,126223,78],{"class":77},[49,126225,126226],{"class":73},"gs.gpu)\n",[49,126228,126229],{"class":51,"line":2011},[49,126230,399],{"emptyLinePlaceholder":398},[49,126232,126233,126236,126238,126241,126244,126246,126248],{"class":51,"line":2017},[49,126234,126235],{"class":73},"scene ",[49,126237,78],{"class":77},[49,126239,126240],{"class":73}," gs.Scene(",[49,126242,126243],{"class":5913},"show_viewer",[49,126245,78],{"class":77},[49,126247,32007],{"class":159},[49,126249,847],{"class":73},[49,126251,126252,126255,126257],{"class":51,"line":2029},[49,126253,126254],{"class":73},"plane ",[49,126256,78],{"class":77},[49,126258,126259],{"class":73}," scene.add_entity(gs.morphs.Plane())\n",[49,126261,126262,126265,126267],{"class":51,"line":2311},[49,126263,126264],{"class":73},"franka ",[49,126266,78],{"class":77},[49,126268,126269],{"class":73}," scene.add_entity(\n",[49,126271,126272,126275,126277,126279,126282],{"class":51,"line":2316},[49,126273,126274],{"class":73},"    gs.morphs.MJCF(",[49,126276,45885],{"class":5913},[49,126278,78],{"class":77},[49,126280,126281],{"class":59},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[49,126283,38578],{"class":73},[49,126285,126286],{"class":51,"line":2322},[49,126287,847],{"class":73},[49,126289,126290],{"class":51,"line":2327},[49,126291,399],{"emptyLinePlaceholder":398},[49,126293,126294],{"class":51,"line":2341},[49,126295,126296],{"class":73},"scene.build()\n",[49,126298,126299],{"class":51,"line":2346},[49,126300,399],{"emptyLinePlaceholder":398},[49,126302,126303,126305,126308],{"class":51,"line":2352},[49,126304,32478],{"class":77},[49,126306,126307],{"class":55}," on_press",[49,126309,126310],{"class":73},"(key):\n",[49,126312,126313,126316],{"class":51,"line":2373},[49,126314,126315],{"class":77},"    try",[49,126317,4436],{"class":73},[49,126319,126320,126322,126325,126327,126330],{"class":51,"line":2378},[49,126321,3194],{"class":77},[49,126323,126324],{"class":73}," key.char ",[49,126326,3646],{"class":77},[49,126328,126329],{"class":59}," 'q'",[49,126331,4436],{"class":73},[49,126333,126334,126336],{"class":51,"line":2392},[49,126335,16429],{"class":77},[49,126337,126338],{"class":159}," False\n",[49,126340,126341,126344,126347],{"class":51,"line":2397},[49,126342,126343],{"class":77},"    except",[49,126345,126346],{"class":159}," AttributeError",[49,126348,4436],{"class":73},[49,126350,126351],{"class":51,"line":2426},[49,126352,126353],{"class":77},"        pass\n",[49,126355,126356],{"class":51,"line":2431},[49,126357,399],{"emptyLinePlaceholder":398},[49,126359,126360,126363,126365,126368,126371,126373],{"class":51,"line":2448},[49,126361,126362],{"class":73},"listener ",[49,126364,78],{"class":77},[49,126366,126367],{"class":73}," keyboard.Listener(",[49,126369,126370],{"class":5913},"on_press",[49,126372,78],{"class":77},[49,126374,126375],{"class":73},"on_press)\n",[49,126377,126378],{"class":51,"line":2453},[49,126379,126380],{"class":73},"listener.start()\n",[49,126382,126383],{"class":51,"line":2458},[49,126384,399],{"emptyLinePlaceholder":398},[49,126386,126387,126389],{"class":51,"line":2463},[49,126388,109194],{"class":77},[49,126390,126391],{"class":73}," listener.running:\n",[49,126393,126394],{"class":51,"line":2477},[49,126395,126396],{"class":73},"    scene.step()\n",[14,126398,126399],{},[25,126400],{"alt":27,"src":126401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[757,126403,126404],{},"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":27,"searchDepth":63,"depth":63,"links":126406},[],{"category":24074},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126011,"description":126016},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126413,"title":126414,"body":126415,"description":24072,"extension":766,"meta":126430,"navigation":398,"path":126431,"seo":126432,"stem":126433,"__hash__":126434},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126416,"toc":126427},[126417,126420,126424],[10,126418,126414],{"id":126419},"_1-基础知识",[782,126421,126423],{"id":126422},"_11-js的组成","1.1 js的组成",[14,126425,126426],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":27,"searchDepth":63,"depth":63,"links":126428},[126429],{"id":126422,"depth":63,"text":126423},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126414,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126436,"title":126437,"body":126438,"description":24072,"extension":766,"meta":126577,"navigation":398,"path":126578,"seo":126579,"stem":126580,"__hash__":126581},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126439,"toc":126565},[126440,126443,126447,126450,126454,126464,126468,126471,126474,126477,126481,126488,126494,126498,126504,126515,126519,126522,126526,126529,126533,126536,126540,126543,126547,126550,126553,126556,126559,126562],[10,126441,126437],{"id":126442},"_2-vscode必备内容",[782,126444,126446],{"id":126445},"_21-标签分类","2.1 标签分类",[14,126448,126449],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[782,126451,126453],{"id":126452},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,126455,126456,126457,126459,126460,126463],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[46,126458,1056],{}," 然后按 ",[46,126461,126462],{},"Tab","，快速自动生成基本结构。",[782,126465,126467],{"id":126466},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,126469,126470],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,126472,126473],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,126475,126476],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[782,126478,126480],{"id":126479},"_24-视图缩放","2.4 视图缩放",[14,126482,126483,126484,126487],{},"缩放视图 ",[46,126485,126486],{},"ctrl+"," 可实现代码增大。",[14,126489,126490,126493],{},[46,126491,126492],{},"ctrl-"," 可实现代码减小。",[782,126495,126497],{"id":126496},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126499,126500,126501,28916],{},"VSCode 新建文件快捷键为 ",[46,126502,126503],{},"ctrl+N",[14,126505,126506,126507,126510,126511,126514],{},"保存快捷键为 ",[46,126508,126509],{},"ctrl+S","，将文本保存为 ",[46,126512,126513],{},".html"," 文件。",[782,126516,126518],{"id":126517},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126520,126521],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[782,126523,126525],{"id":126524},"_27-vscode-icons","2.7 vscode-icons",[14,126527,126528],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[782,126530,126532],{"id":126531},"_28-easy-less","2.8 Easy LESS",[14,126534,126535],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[782,126537,126539],{"id":126538},"_29-会了吧插件","2.9 会了吧插件",[14,126541,126542],{},"会了吧插件可以展示代码中英语单词的意思。",[782,126544,126546],{"id":126545},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126548,126549],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126551,126552],{},"②选定多个相同的单词:ctrl+D",[14,126554,126555],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126557,126558],{},"④全局替换某些单词:ctrl+h",[14,126560,126561],{},"⑤快速定位到某一行:ctrl+g",[14,126563,126564],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":27,"searchDepth":63,"depth":63,"links":126566},[126567,126568,126569,126570,126571,126572,126573,126574,126575,126576],{"id":126445,"depth":63,"text":126446},{"id":126452,"depth":63,"text":126453},{"id":126466,"depth":63,"text":126467},{"id":126479,"depth":63,"text":126480},{"id":126496,"depth":63,"text":126497},{"id":126517,"depth":63,"text":126518},{"id":126524,"depth":63,"text":126525},{"id":126531,"depth":63,"text":126532},{"id":126538,"depth":63,"text":126539},{"id":126545,"depth":63,"text":126546},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126437,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126583,"title":126584,"body":126585,"description":24072,"extension":766,"meta":126744,"navigation":398,"path":126745,"seo":126746,"stem":126747,"__hash__":126748},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126586,"toc":126736},[126587,126590,126594,126604,126610,126616,126620,126629,126633,126638,126641,126644,126648,126651,126661,126670,126679,126688,126698,126705,126710,126715,126728],[10,126588,126584],{"id":126589},"_3-html文本与容器标签",[782,126591,126593],{"id":126592},"_31-标题标签","3.1 标题标签",[14,126595,126596,126599,126600,126603],{},[46,126597,126598],{},"\u003Ch1>","我是一级标签",[46,126601,126602],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126605,126606,126599,126608],{},[46,126607,126598],{},[46,126609,126602],{},[14,126611,123866,126612,126615],{},[46,126613,126614],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[782,126617,126619],{"id":126618},"_32-段落标签","3.2 段落标签",[14,126621,126622,126625,126626],{},[46,126623,126624],{},"\u003Cp>","....",[46,126627,126628],{},"\u003C\u002Fp>",[782,126630,126632],{"id":126631},"_33-换行标签","3.3 换行标签",[14,126634,126635],{},[46,126636,126637],{},"\u003Cbr \u002F>",[14,126639,126640],{},"具有强制换行的作用",[14,126642,126643],{},"单标签",[782,126645,126647],{"id":126646},"_34-文本格式化标签","3.4 文本格式化标签",[14,126649,126650],{},"提供粗体、斜体和下划线等效果",[14,126652,126653,126654,83070,126657,126660],{},"加粗：",[46,126655,126656],{},"\u003Cstrong>...\u003C\u002Fstrong>",[46,126658,126659],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126662,126663,126664,83070,126667,126660],{},"斜体：",[46,126665,126666],{},"\u003Cem>...\u003C\u002Fem>",[46,126668,126669],{},"\u003Ci>...\u003C\u002Fi>",[14,126671,126672,126673,83070,126676,126660],{},"删除线：",[46,126674,126675],{},"\u003Cdel>...\u003C\u002Fdel>",[46,126677,126678],{},"\u003Cs>...\u003C\u002Fs>",[14,126680,126681,126682,83070,126685,126660],{},"下划线：",[46,126683,126684],{},"\u003Cins>...\u003C\u002Fins>",[46,126686,126687],{},"\u003Cu>...\u003C\u002Fu>",[782,126689,126691,126692,19107,126695,103224],{"id":126690},"_35-div和span标签","3.5 ",[46,126693,126694],{},"\u003Cdiv>",[46,126696,126697],{},"\u003Cspan>",[14,126699,126700,101549,126702,126704],{},[46,126701,126694],{},[46,126703,126697],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126706,126707],{},[46,126708,126709],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126711,126712],{},[46,126713,126714],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126716,126717,126718,126720,126721,126723,126724,126727],{},"两者特点：①",[46,126719,126694],{}," 标签用来布局，但一行通常只放一个 ",[46,126722,126694],{},"。可以理解为一个大盒子，独占一行，在 ",[46,126725,126726],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126729,77780,126730,126732,126733,126735],{},[46,126731,126697],{}," 标签也可用于布局，一行可以放多个 ",[46,126734,126697],{},"，可理解为小盒子。",{"title":27,"searchDepth":63,"depth":63,"links":126737},[126738,126739,126740,126741,126742],{"id":126592,"depth":63,"text":126593},{"id":126618,"depth":63,"text":126619},{"id":126631,"depth":63,"text":126632},{"id":126646,"depth":63,"text":126647},{"id":126690,"depth":63,"text":126743},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126584,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126750,"title":126751,"body":126752,"description":24072,"extension":766,"meta":126949,"navigation":398,"path":126950,"seo":126951,"stem":126952,"__hash__":126953},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126753,"toc":126941},[126754,126757,126761,126764,126770,126777,126783,126789,126792,126795,126798,126801,126804,126807,126810,126814,126817,126820,126823,126829,126835,126841,126848,126852,126858,126864,126867,126870,126876,126882,126888,126891,126894,126898,126901,126911,126917,126921,126930,126934,126937],[10,126755,126751],{"id":126756},"_4-html图像与链接",[782,126758,126760],{"id":126759},"_41-图像标签","4.1 图像标签",[14,126762,126763],{},"（1）标签",[14,126765,126766,126769],{},[46,126767,126768],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126771,126772,126773,126776],{},"src是",[46,126774,126775],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126778,126779,126780],{},"alt:文本，替换文本。图像不能显示的文字 ",[46,126781,126782],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126784,126785,126786],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[46,126787,126788],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126790,126791],{},"width:像素，设置图像的宽度",[14,126793,126794],{},"height:像素，设置图像的高度",[14,126796,126797],{},"border：像素，设置图像的边框粗细",[14,126799,126800],{},"（2）图像标签属性的注意点：",[14,126802,126803],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126805,126806],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126808,126809],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[782,126811,126813],{"id":126812},"_42-路径注意要点","4.2 路径注意要点：",[14,126815,126816],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126818,126819],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126821,126822],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126824,126825,126826],{},"①同一级路径：图像文件位于HTML文件同一级，如",[46,126827,126828],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126830,126831,126832],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[46,126833,126834],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126836,126837,126838],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[46,126839,126840],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126842,126843,126844,1080],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[124,126845,126846],{"href":126846,"rel":126847},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[128],[782,126849,126851],{"id":126850},"_43-超链接标签","4.3 超链接标签",[14,126853,126854,126857],{},[46,126855,126856],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126859,126860,126861],{},"①语法格式：",[46,126862,126863],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126865,126866],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126868,126869],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126871,126872,126873],{},"③链接分类：外部链接：",[46,126874,126875],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126877,126878,126879],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[46,126880,126881],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126883,126884,126885],{},"空链接：如果当时没有确定链接目标时，",[46,126886,126887],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126889,126890],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126892,126893],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[782,126895,126897],{"id":126896},"_44-锚点链接","4.4 锚点链接",[14,126899,126900],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126902,126903,126904,126907,126908],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[46,126905,126906],{},"\u003Ca href=\"#two\">","第二级",[46,126909,126910],{},"\u003C\u002Fa>",[14,126912,126913,126914],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[46,126915,126916],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[782,126918,126920],{"id":126919},"_45-注释标签","4.5 注释标签",[14,126922,126923,126926,126927],{},[46,126924,126925],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[46,126928,126929],{},"ctrl+\u002F",[782,126931,126933],{"id":126932},"_46-特殊字符","4.6 特殊字符",[14,126935,126936],{},"可以实现添加多个空格",[25,126938],{"style":126939,"src":126940},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":27,"searchDepth":63,"depth":63,"links":126942},[126943,126944,126945,126946,126947,126948],{"id":126759,"depth":63,"text":126760},{"id":126812,"depth":63,"text":126813},{"id":126850,"depth":63,"text":126851},{"id":126896,"depth":63,"text":126897},{"id":126919,"depth":63,"text":126920},{"id":126932,"depth":63,"text":126933},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126751,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126955,"title":126956,"body":126957,"description":24072,"extension":766,"meta":127250,"navigation":398,"path":127251,"seo":127252,"stem":127253,"__hash__":127254},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126958,"toc":127241},[126959,126962,126966,126969,126972,126975,126978,126981,126984,126987,126990,126993,127013,127019,127023,127026,127029,127032,127035,127038,127041,127045,127048,127051,127054,127057,127070,127075,127078,127081,127096,127099,127102,127105,127108,127111,127115,127118,127125,127128,127131,127134,127137,127140,127146,127149,127152,127158,127161,127164,127167,127173,127176,127179,127193,127200,127203,127206,127213,127222,127225,127228,127231,127235,127238],[10,126960,126956],{"id":126961},"_5-html表格列表与表单",[782,126963,126965],{"id":126964},"_51-表格标签","5.1 表格标签",[14,126967,126968],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126970,126971],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126973,126974],{},"②表格基本语法：",[25,126976],{"style":126939,"src":126977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126979,126980],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[25,126982],{"style":126939,"src":126983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126985,126986],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[25,126988],{"style":126939,"src":126989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126991,126992],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126994,126995,126998,126999,127001,127002,127005,127006,127008,127009,127012],{},[46,126996,126997],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[46,127000,126997],{},"内部必须拥有",[46,127003,127004],{},"\u003Ctr>","标签，一般位于第一行，",[46,127007,126997],{},"比",[46,127010,127011],{},"\u003Cth>","范围广",[14,127014,127015,127018],{},[46,127016,127017],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[782,127020,127022],{"id":127021},"_52-合并单元格","5.2 合并单元格",[14,127024,127025],{},"（1）合并单元格方式：",[14,127027,127028],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,127030,127031],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,127033,127034],{},"（2）目标单元格：",[14,127036,127037],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,127039,127040],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[782,127042,127044],{"id":127043},"_53-列表标签","5.3 列表标签",[14,127046,127047],{},"（1）分类：无序列表、有序列表、自定义列表",[14,127049,127050],{},"①无序列表：",[25,127052],{"style":126939,"src":127053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,127055,127056],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,127058,127059,127062,127063,127066,127067,127069],{},[46,127060,127061],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[46,127064,127065],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[46,127068,127061],{},"中输入其他标签或文字是不对的",[14,127071,127072,127074],{},[46,127073,127065],{},"之间相当于一个容器，可以容纳所有元素",[14,127076,127077],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,127079,127080],{},"在css中去除前边的小圆点采用如下代码:",[40,127082,127086],{"className":127083,"code":127084,"language":127085,"meta":27,"style":27},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[46,127087,127088],{"__ignoreMap":27},[49,127089,127090,127093],{"class":51,"line":52},[49,127091,127092],{"class":51831},"list-style",[49,127094,127095],{"class":73},": none;\n",[14,127097,127098],{},"②有序列表：",[25,127100],{"style":126939,"src":127101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,127103,127104],{},"③自定义列表：",[25,127106],{"style":126939,"src":127107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[25,127109],{"style":126939,"src":127110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[782,127112,127114],{"id":127113},"_54-表单标签","5.4 表单标签",[14,127116,127117],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,127119,127120,127121,127124],{},"（1）表单域：包含单元素的区域，",[46,127122,127123],{},"\u003Cform>","标签可以实现信息的收集和传递。",[25,127126],{"style":126939,"src":127127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,127129,127130],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,127132,127133],{},"表单元素提交必须有name属性",[14,127135,127136],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,127138,127139],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,127141,77757,127142,127145],{},[46,127143,127144],{},"\u003Cinput>","输入表单元素",[25,127147],{"style":126939,"src":127148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[25,127150],{"style":126939,"src":127151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,127153,127154,127155],{},"单选按钮：",[46,127156,127157],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[25,127159],{"style":126939,"src":127160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,127162,127163],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[25,127165],{"style":126939,"src":127166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,127168,127169,127172],{},[112,127170,127171],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,127174,127175],{},"②select下拉表单元素：可以节约页面控件",[25,127177],{"style":126939,"src":127178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,127180,127181,14492,127183,127186,127187,127189,127190,127192],{},[112,127182,870],{},[46,127184,127185],{},"\u003Cselect>","中至少包含一对",[46,127188,103245],{},"；在",[46,127191,103245],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,127194,127195,127196,127199],{},"③",[46,127197,127198],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[25,127201],{"style":126939,"src":127202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,127204,127205],{},"3行20列",[782,127207,127209,127210,103224],{"id":127208},"_55-lable标签","5.5 ",[46,127211,127212],{},"\u003Clable>",[14,127214,127215,127216,127218,127219,127221],{},"它不是表单标签，但常常与表单标签搭配使用，",[46,127217,127212],{},"标签用于绑定一个表单标签，当点击",[46,127220,127212],{},"标签内的文本",[14,127223,127224],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[25,127226],{"style":126939,"src":127227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[25,127229],{"style":126939,"src":127230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[782,127232,127234],{"id":127233},"_56-实例","5.6 实例",[25,127236],{"style":126939,"src":127237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[757,127239,127240],{},"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":27,"searchDepth":63,"depth":63,"links":127242},[127243,127244,127245,127246,127247,127249],{"id":126964,"depth":63,"text":126965},{"id":127021,"depth":63,"text":127022},{"id":127043,"depth":63,"text":127044},{"id":127113,"depth":63,"text":127114},{"id":127208,"depth":63,"text":127248},"5.5 \u003Clable>标签",{"id":127233,"depth":63,"text":127234},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126956,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127256,"title":127257,"body":127258,"description":24072,"extension":766,"meta":127807,"navigation":398,"path":127808,"seo":127809,"stem":127810,"__hash__":127811},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127259,"toc":127782},[127260,127263,127267,127270,127273,127277,127280,127283,127286,127289,127292,127295,127298,127302,127305,127309,127312,127315,127318,127322,127325,127328,127331,127337,127340,127343,127346,127349,127352,127355,127358,127391,127395,127398,127401,127404,127408,127411,127414,127417,127420,127423,127427,127430,127433,127436,127440,127443,127447,127450,127454,127457,127462,127466,127469,127473,127476,127479,127482,127485,127512,127515,127519,127522,127525,127530,127533,127536,127540,127543,127548,127551,127554,127557,127561,127564,127567,127570,127574,127577,127580,127583,127587,127591,127594,127634,127637,127641,127648,127651,127655,127658,127704,127708,127711,127714,127717,127745,127749,127752,127779],[10,127261,127257],{"id":127262},"_6-css语法与文本样式",[782,127264,127266],{"id":127265},"_61-css语法规范","6.1 css语法规范",[14,127268,127269],{},"由两部分组成，选择器及一条或多条声明",[25,127271],{"style":126939,"src":127272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,127274,127275],{},[112,127276,870],{},[14,127278,127279],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,127281,127282],{},"②属性与属性值以“键值对”的形式出现",[14,127284,127285],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,127287,127288],{},"④属性和属性值之间用英文“;”分开",[25,127290],{"style":126939,"src":127291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[25,127293],{"style":126939,"src":127294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[25,127296],{"style":126939,"src":127297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[782,127299,127301],{"id":127300},"_62-css选择器","6.2 css选择器",[14,127303,127304],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[18,127306,127308],{"id":127307},"_621-标签选择器","6.2.1 标签选择器",[14,127310,127311],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,127313,127314],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[25,127316],{"style":126939,"src":127317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[18,127319,127321],{"id":127320},"_622-类选择器","6.2.2 类选择器",[14,127323,127324],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,127326,127327],{},"②样例",[25,127329],{"style":126939,"src":127330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,127332,127333,127334,127336],{},"③ ",[112,127335,127171],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,127338,127339],{},"可以理解为给这个标签起了个名字，来表示；",[14,127341,127342],{},"长名称或词组可以使用横线来为选择器命名；",[14,127344,127345],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,127347,127348],{},"命名要有意义；",[25,127350],{"style":126939,"src":127351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,127353,127354],{},"类选择器也可以指定特殊的元素p.center{}",[14,127356,127357],{},"p.center和.center都对",[40,127359,127361],{"className":127083,"code":127360,"language":127085,"meta":27,"style":27},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[46,127362,127363,127368,127377,127387],{"__ignoreMap":27},[49,127364,127365],{"class":51,"line":52},[49,127366,127367],{"class":66},"\u002F* 类选择器指定特殊元素 *\u002F\n",[49,127369,127370,127372,127375],{"class":51,"line":63},[49,127371,14],{"class":51831},[49,127373,127374],{"class":55},".center",[49,127376,16269],{"class":73},[49,127378,127379,127381,127383,127385],{"class":51,"line":70},[49,127380,71057],{"class":159},[49,127382,51968],{"class":73},[49,127384,52123],{"class":159},[49,127386,1990],{"class":73},[49,127388,127389],{"class":51,"line":219},[49,127390,2264],{"class":73},[18,127392,127394],{"id":127393},"_623-多类名使用","6.2.3 多类名使用",[14,127396,127397],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[25,127399],{"style":126939,"src":127400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,127402,127403],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[18,127405,127407],{"id":127406},"_624-id选择器","6.2.4 id选择器",[14,127409,127410],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,127412,127413],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[25,127415],{"style":126939,"src":127416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,127418,127419],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,127421,127422],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[18,127424,127426],{"id":127425},"_625-通配符选择器","6.2.5 通配符选择器",[14,127428,127429],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,127431,127432],{},"* {",[14,127434,127435],{},"color=\"red\"}",[18,127437,127439],{"id":127438},"_626-总结","6.2.6 总结",[25,127441],{"style":126939,"src":127442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[782,127444,127446],{"id":127445},"_63-css字体属性","6.3 css字体属性",[14,127448,127449],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[18,127451,127453],{"id":127452},"_631-字体系列","6.3.1 字体系列",[14,127455,127456],{},"font-family: '宋体';",[14,127458,127459,127461],{},[112,127460,870],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[18,127463,127465],{"id":127464},"_632-字体大小","6.3.2 字体大小",[14,127467,127468],{},"font-size: 20px",[14,127470,127471,27151],{},[112,127472,127171],{},[14,127474,127475],{},"①px（像素）大小是网页的最常用单位",[14,127477,127478],{},"②谷歌浏览器默认为16px",[14,127480,127481],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,127483,127484],{},"④可以给body指定整个页面的大小：会自动引用",[40,127486,127488],{"className":127083,"code":127487,"language":127085,"meta":27,"style":27},"body {\n  font-size: 16px;\n}\n",[46,127489,127490,127496,127508],{"__ignoreMap":27},[49,127491,127492,127494],{"class":51,"line":52},[49,127493,52331],{"class":51831},[49,127495,16269],{"class":73},[49,127497,127498,127500,127502,127504,127506],{"class":51,"line":63},[49,127499,71157],{"class":159},[49,127501,51968],{"class":73},[49,127503,1430],{"class":159},[49,127505,52023],{"class":77},[49,127507,1990],{"class":73},[49,127509,127510],{"class":51,"line":70},[49,127511,2264],{"class":73},[14,127513,127514],{},"⑤标题标签比较特殊，需要单独指定大小",[18,127516,127518],{"id":127517},"_633-字体粗细","6.3.3 字体粗细",[14,127520,127521],{},"font-weight: bold;",[14,127523,127524],{},"font-weight: 100；",[14,127526,127527,127529],{},[112,127528,870],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127531,127532],{},"font-weight= 400;",[14,127534,127535],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[18,127537,127539],{"id":127538},"_634-文字样式","6.3.4 文字样式",[14,127541,127542],{},"font-style: normal；",[14,127544,127545,27151],{},[112,127546,127547],{},"属性值",[14,127549,127550],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127552,127553],{},"②italic：浏览器会显示斜体的字体样式",[25,127555],{"style":126939,"src":127556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[18,127558,127560],{"id":127559},"_635-字体符合属性","6.3.5 字体符合属性",[25,127562],{"style":126939,"src":127563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[25,127565],{"style":126939,"src":127566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127568,127569],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127571,127572,27151],{},[112,127573,127171],{},[14,127575,127576],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127578,127579],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127581,127582],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[782,127584,127586],{"id":127585},"_64-css-test文本属性","6.4 css test文本属性",[18,127588,127590],{"id":127589},"_641-文本颜色","6.4.1 文本颜色",[14,127592,127593],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[40,127595,127597],{"className":127083,"code":127596,"language":127085,"meta":27,"style":27},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[46,127598,127599,127604,127610,127620,127625,127630],{"__ignoreMap":27},[49,127600,127601],{"class":51,"line":52},[49,127602,127603],{"class":66},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[49,127605,127606,127608],{"class":51,"line":63},[49,127607,14],{"class":51831},[49,127609,16269],{"class":73},[49,127611,127612,127614,127616,127618],{"class":51,"line":70},[49,127613,71436],{"class":159},[49,127615,51968],{"class":73},[49,127617,57952],{"class":159},[49,127619,1990],{"class":73},[49,127621,127622],{"class":51,"line":219},[49,127623,127624],{"class":66},"  \u002F* color: #ff0000; *\u002F\n",[49,127626,127627],{"class":51,"line":233},[49,127628,127629],{"class":66},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[49,127631,127632],{"class":51,"line":241},[49,127633,2264],{"class":73},[25,127635],{"style":126939,"src":127636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[18,127638,127640],{"id":127639},"_642-对齐文本","6.4.2 对齐文本",[14,127642,127643,127644,127647],{},"text-align属于用于设置元素内文本内容的 ",[112,127645,127646],{},"水平对齐"," 方式",[14,127649,127650],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[18,127652,127654],{"id":127653},"_643-装饰文本","6.4.3 装饰文本",[14,127656,127657],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[40,127659,127661],{"className":127083,"code":127660,"language":127085,"meta":27,"style":27},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[46,127662,127663,127669,127679,127683,127689,127700],{"__ignoreMap":27},[49,127664,127665,127667],{"class":51,"line":52},[49,127666,124],{"class":51831},[49,127668,16269],{"class":73},[49,127670,127671,127673,127675,127677],{"class":51,"line":63},[49,127672,71033],{"class":159},[49,127674,51968],{"class":73},[49,127676,55268],{"class":159},[49,127678,1990],{"class":73},[49,127680,127681],{"class":51,"line":70},[49,127682,2264],{"class":73},[49,127684,127685,127687],{"class":51,"line":219},[49,127686,14],{"class":51831},[49,127688,16269],{"class":73},[49,127690,127691,127693,127695,127698],{"class":51,"line":233},[49,127692,71033],{"class":159},[49,127694,51968],{"class":73},[49,127696,127697],{"class":159},"underline",[49,127699,1990],{"class":73},[49,127701,127702],{"class":51,"line":241},[49,127703,2264],{"class":73},[18,127705,127707],{"id":127706},"_644-文本缩进","6.4.4 文本缩进",[14,127709,127710],{},"实现文本的第一行首行缩进自己指定的距离",[14,127712,127713],{},"20px往右边走；-20px往左边走",[14,127715,127716],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[40,127718,127720],{"className":127083,"code":127719,"language":127085,"meta":27,"style":27},"p {\n  text-indent: 2em;\n}\n",[46,127721,127722,127728,127741],{"__ignoreMap":27},[49,127723,127724,127726],{"class":51,"line":52},[49,127725,14],{"class":51831},[49,127727,16269],{"class":73},[49,127729,127730,127733,127735,127737,127739],{"class":51,"line":63},[49,127731,127732],{"class":159},"  text-indent",[49,127734,51968],{"class":73},[49,127736,915],{"class":159},[49,127738,24249],{"class":77},[49,127740,1990],{"class":73},[49,127742,127743],{"class":51,"line":70},[49,127744,2264],{"class":73},[18,127746,127748],{"id":127747},"_645-行间距","6.4.5 行间距",[14,127750,127751],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[40,127753,127755],{"className":127083,"code":127754,"language":127085,"meta":27,"style":27},"p {\n  line-height: 1.6;\n}\n",[46,127756,127757,127763,127775],{"__ignoreMap":27},[49,127758,127759,127761],{"class":51,"line":52},[49,127760,14],{"class":51831},[49,127762,16269],{"class":73},[49,127764,127765,127768,127770,127773],{"class":51,"line":63},[49,127766,127767],{"class":159},"  line-height",[49,127769,51968],{"class":73},[49,127771,127772],{"class":159},"1.6",[49,127774,1990],{"class":73},[49,127776,127777],{"class":51,"line":70},[49,127778,2264],{"class":73},[757,127780,127781],{},"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":27,"searchDepth":63,"depth":63,"links":127783},[127784,127785,127793,127800],{"id":127265,"depth":63,"text":127266},{"id":127300,"depth":63,"text":127301,"children":127786},[127787,127788,127789,127790,127791,127792],{"id":127307,"depth":70,"text":127308},{"id":127320,"depth":70,"text":127321},{"id":127393,"depth":70,"text":127394},{"id":127406,"depth":70,"text":127407},{"id":127425,"depth":70,"text":127426},{"id":127438,"depth":70,"text":127439},{"id":127445,"depth":63,"text":127446,"children":127794},[127795,127796,127797,127798,127799],{"id":127452,"depth":70,"text":127453},{"id":127464,"depth":70,"text":127465},{"id":127517,"depth":70,"text":127518},{"id":127538,"depth":70,"text":127539},{"id":127559,"depth":70,"text":127560},{"id":127585,"depth":63,"text":127586,"children":127801},[127802,127803,127804,127805,127806],{"id":127589,"depth":70,"text":127590},{"id":127639,"depth":70,"text":127640},{"id":127653,"depth":70,"text":127654},{"id":127706,"depth":70,"text":127707},{"id":127747,"depth":70,"text":127748},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127257,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127813,"title":127814,"body":127815,"description":24072,"extension":766,"meta":128464,"navigation":398,"path":128465,"seo":128466,"stem":128467,"__hash__":128468},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127816,"toc":128445},[127817,127820,127824,127828,127888,127892,127902,127905,127908,127912,127937,127941,127944,127947,127950,127953,127956,127960,127963,127966,128008,128011,128037,128043,128046,128050,128054,128060,128063,128066,128069,128072,128075,128078,128123,128127,128130,128133,128137,128141,128170,128173,128178,128181,128184,128187,128190,128194,128198,128201,128203,128206,128210,128213,128217,128220,128223,128226,128230,128234,128240,128250,128253,128256,128259,128262,128265,128388,128396,128404,128442],[10,127818,127814],{"id":127819},"_7-css引入方式与选择器进阶",[782,127821,127823],{"id":127822},"_71-css引入方式","7.1 css引入方式",[18,127825,127827],{"id":127826},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[40,127829,127833],{"className":127830,"code":127831,"language":127832,"meta":27,"style":27},"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",[46,127834,127835,127843,127850,127862,127875,127880],{"__ignoreMap":27},[49,127836,127837,127839,127841],{"class":51,"line":52},[49,127838,1739],{"class":73},[49,127840,757],{"class":51831},[49,127842,51838],{"class":73},[49,127844,127845,127848],{"class":51,"line":63},[49,127846,127847],{"class":51831},"  h1",[49,127849,16269],{"class":73},[49,127851,127852,127855,127857,127860],{"class":51,"line":70},[49,127853,127854],{"class":159},"    color",[49,127856,51968],{"class":73},[49,127858,127859],{"class":159},"blue",[49,127861,1990],{"class":73},[49,127863,127864,127867,127869,127871,127873],{"class":51,"line":219},[49,127865,127866],{"class":159},"    font-size",[49,127868,51968],{"class":73},[49,127870,1629],{"class":159},[49,127872,52023],{"class":77},[49,127874,1990],{"class":73},[49,127876,127877],{"class":51,"line":233},[49,127878,127879],{"class":73},"  }\n",[49,127881,127882,127884,127886],{"class":51,"line":241},[49,127883,52316],{"class":73},[49,127885,757],{"class":51831},[49,127887,51838],{"class":73},[14,127889,127890,27151],{},[112,127891,127171],{},[14,127893,77757,127894,127897,127898,127901],{},[46,127895,127896],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[46,127899,127900],{},"\u003Chead>","标签中",[14,127903,127904],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127906,127907],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[18,127909,127911],{"id":127910},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[40,127913,127915],{"className":127830,"code":127914,"language":127832,"meta":27,"style":27},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[46,127916,127917],{"__ignoreMap":27},[49,127918,127919,127921,127923,127925,127927,127930,127933,127935],{"class":51,"line":52},[49,127920,1739],{"class":73},[49,127922,14],{"class":51831},[49,127924,63157],{"class":55},[49,127926,78],{"class":73},[49,127928,127929],{"class":59},"\"color: red; font-size: 16px;\"",[49,127931,127932],{"class":73},">这是一个段落\u003C\u002F",[49,127934,14],{"class":51831},[49,127936,51838],{"class":73},[14,127938,127939,27151],{},[112,127940,127171],{},[14,127942,127943],{},"①style其实就是标签的属性",[14,127945,127946],{},"②在双引号中间，写法要符合css规范",[14,127948,127949],{},"③可以控制当前的标签设置样式",[14,127951,127952],{},"④书写繁琐，简单时才用",[14,127954,127955],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[18,127957,127959],{"id":127958},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127961,127962],{},"使用最多，单独建一个css文件，然后html引用",[14,127964,127965],{},"①css文件部分： style.css",[40,127967,127969],{"className":127083,"code":127968,"language":127085,"meta":27,"style":27},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[46,127970,127971,127976,127982,127992,128004],{"__ignoreMap":27},[49,127972,127973],{"class":51,"line":52},[49,127974,127975],{"class":66},"\u002F* style.css *\u002F\n",[49,127977,127978,127980],{"class":51,"line":63},[49,127979,10],{"class":51831},[49,127981,16269],{"class":73},[49,127983,127984,127986,127988,127990],{"class":51,"line":70},[49,127985,71436],{"class":159},[49,127987,51968],{"class":73},[49,127989,127859],{"class":159},[49,127991,1990],{"class":73},[49,127993,127994,127996,127998,128000,128002],{"class":51,"line":219},[49,127995,71157],{"class":159},[49,127997,51968],{"class":73},[49,127999,1629],{"class":159},[49,128001,52023],{"class":77},[49,128003,1990],{"class":73},[49,128005,128006],{"class":51,"line":233},[49,128007,2264],{"class":73},[14,128009,128010],{},"②html部分",[40,128012,128014],{"className":127830,"code":128013,"language":127832,"meta":27,"style":27},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[46,128015,128016],{"__ignoreMap":27},[49,128017,128018,128020,128022,128024,128026,128028,128030,128032,128035],{"class":51,"line":52},[49,128019,1739],{"class":73},[49,128021,69536],{"class":51831},[49,128023,69539],{"class":55},[49,128025,78],{"class":73},[49,128027,69544],{"class":59},[49,128029,61588],{"class":55},[49,128031,78],{"class":73},[49,128033,128034],{"class":59},"\"style.css\"",[49,128036,51838],{"class":73},[14,128038,128039,128042],{},[46,128040,128041],{},"\u003Chr>","水平线标签（但是不常用！）",[14,128044,128045],{},"ctrl+0回到页面原来大小",[782,128047,128049],{"id":128048},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[18,128051,128053],{"id":128052},"_721-快速生成html","7.2.1 快速生成html",[14,128055,128056,128057],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[46,128058,128059],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,128061,128062],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,128064,128065],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,128067,128068],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,128070,128071],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,128073,128074],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,128076,128077],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[40,128079,128081],{"className":127830,"code":128080,"language":127832,"meta":27,"style":27},"\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",[46,128082,128083,128088,128093,128098,128103,128108,128113,128118],{"__ignoreMap":27},[49,128084,128085],{"class":51,"line":52},[49,128086,128087],{"class":66},"\u003C!-- Emmet 语法示例 -->\n",[49,128089,128090],{"class":51,"line":63},[49,128091,128092],{"class":66},"\u003C!-- div*3        → 生成3个div -->\n",[49,128094,128095],{"class":51,"line":70},[49,128096,128097],{"class":66},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[49,128099,128100],{"class":51,"line":219},[49,128101,128102],{"class":66},"\u003C!-- div+p        → 兄弟div和p -->\n",[49,128104,128105],{"class":51,"line":233},[49,128106,128107],{"class":66},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[49,128109,128110],{"class":51,"line":241},[49,128111,128112],{"class":66},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[49,128114,128115],{"class":51,"line":1920},[49,128116,128117],{"class":66},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[49,128119,128120],{"class":51,"line":2011},[49,128121,128122],{"class":66},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[18,128124,128126],{"id":128125},"_722-快速生成css","7.2.2 快速生成css",[14,128128,128129],{},"简写开头",[14,128131,128132],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[782,128134,128136],{"id":128135},"_73-css复合选择器","7.3 css复合选择器",[18,128138,128140],{"id":128139},"_731-后代选择器","7.3.1 后代选择器",[40,128142,128144],{"className":127083,"code":128143,"language":127085,"meta":27,"style":27},".parent .child {\n  color: blue;\n}\n",[46,128145,128146,128156,128166],{"__ignoreMap":27},[49,128147,128148,128151,128154],{"class":51,"line":52},[49,128149,128150],{"class":55},".parent",[49,128152,128153],{"class":55}," .child",[49,128155,16269],{"class":73},[49,128157,128158,128160,128162,128164],{"class":51,"line":63},[49,128159,71436],{"class":159},[49,128161,51968],{"class":73},[49,128163,127859],{"class":159},[49,128165,1990],{"class":73},[49,128167,128168],{"class":51,"line":70},[49,128169,2264],{"class":73},[14,128171,128172],{},"元素1 元素2 {样式声明}",[14,128174,128175],{},[112,128176,128177],{},"注意点:",[14,128179,128180],{},"①元素1和元素2中间用空格隔开",[14,128182,128183],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,128185,128186],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,128188,128189],{},"④元素1和元素2可以是任意基础选择器",[18,128191,128193],{"id":128192},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,128195,128196],{},[112,128197,128177],{},[14,128199,128200],{},"①元素1和元素2中间用大于号隔开",[14,128202,128183],{},[14,128204,128205],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[18,128207,128209],{"id":128208},"_733-并集选择器","7.3.3 并集选择器",[14,128211,128212],{},"元素1，元素2 {样式声明}",[14,128214,128215],{},[112,128216,128177],{},[14,128218,128219],{},"①元素1和元素2中间用逗号隔开",[14,128221,128222],{},"②逗号可以理解为和的意思",[14,128224,128225],{},"③并集选择器通常用于集体声明",[18,128227,128229],{"id":128228},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,128231,128232],{},[112,128233,128177],{},[14,128235,128236,128237,128239],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69536,128238],{},"－:visited－:hover－:active。",[14,128241,128242,128243,128246,128247,26429],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128244,128245],"hover",{}," 、 ",[128248,128249],"first-child",{},[14,128251,128252],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,128254,128255],{},"link对没访问的进行设置",[14,128257,128258],{},"vistied对已访问的进行改变",[14,128260,128261],{},"hover鼠标经过就会变",[14,128263,128264],{},"active常按(点)就会变",[40,128266,128268],{"className":127083,"code":128267,"language":127085,"meta":27,"style":27},"\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",[46,128269,128270,128275,128284,128294,128304,128308,128317,128328,128332,128340,128350,128360,128364,128373,128384],{"__ignoreMap":27},[49,128271,128272],{"class":51,"line":52},[49,128273,128274],{"class":66},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[49,128276,128277,128279,128282],{"class":51,"line":63},[49,128278,124],{"class":51831},[49,128280,128281],{"class":55},":link",[49,128283,16269],{"class":73},[49,128285,128286,128288,128290,128292],{"class":51,"line":70},[49,128287,71436],{"class":159},[49,128289,51968],{"class":73},[49,128291,62900],{"class":159},[49,128293,1990],{"class":73},[49,128295,128296,128298,128300,128302],{"class":51,"line":219},[49,128297,71033],{"class":159},[49,128299,51968],{"class":73},[49,128301,55268],{"class":159},[49,128303,1990],{"class":73},[49,128305,128306],{"class":51,"line":233},[49,128307,2264],{"class":73},[49,128309,128310,128312,128315],{"class":51,"line":241},[49,128311,124],{"class":51831},[49,128313,128314],{"class":55},":visited",[49,128316,16269],{"class":73},[49,128318,128319,128321,128323,128326],{"class":51,"line":1920},[49,128320,71436],{"class":159},[49,128322,51968],{"class":73},[49,128324,128325],{"class":159},"purple",[49,128327,1990],{"class":73},[49,128329,128330],{"class":51,"line":2011},[49,128331,2264],{"class":73},[49,128333,128334,128336,128338],{"class":51,"line":2017},[49,128335,124],{"class":51831},[49,128337,61471],{"class":55},[49,128339,16269],{"class":73},[49,128341,128342,128344,128346,128348],{"class":51,"line":2029},[49,128343,71436],{"class":159},[49,128345,51968],{"class":73},[49,128347,55420],{"class":159},[49,128349,1990],{"class":73},[49,128351,128352,128354,128356,128358],{"class":51,"line":2311},[49,128353,71033],{"class":159},[49,128355,51968],{"class":73},[49,128357,127697],{"class":159},[49,128359,1990],{"class":73},[49,128361,128362],{"class":51,"line":2316},[49,128363,2264],{"class":73},[49,128365,128366,128368,128371],{"class":51,"line":2322},[49,128367,124],{"class":51831},[49,128369,128370],{"class":55},":active",[49,128372,16269],{"class":73},[49,128374,128375,128377,128379,128382],{"class":51,"line":2327},[49,128376,71436],{"class":159},[49,128378,51968],{"class":73},[49,128380,128381],{"class":159},"green",[49,128383,1990],{"class":73},[49,128385,128386],{"class":51,"line":2341},[49,128387,2264],{"class":73},[18,128389,128391,128392,128395],{"id":128390},"_735-伪类选择器","7.3.5 ",[128393,128394],"focus",{},"伪类选择器",[14,128397,128398,128400,128401,128403],{},[128393,128399],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[46,128402,127144],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[40,128405,128407],{"className":127083,"code":128406,"language":127085,"meta":27,"style":27},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[46,128408,128409,128417,128428,128438],{"__ignoreMap":27},[49,128410,128411,128413,128415],{"class":51,"line":52},[49,128412,54352],{"class":51831},[49,128414,62431],{"class":55},[49,128416,16269],{"class":73},[49,128418,128419,128422,128424,128426],{"class":51,"line":63},[49,128420,128421],{"class":159},"  border-color",[49,128423,51968],{"class":73},[49,128425,55420],{"class":159},[49,128427,1990],{"class":73},[49,128429,128430,128432,128434,128436],{"class":51,"line":70},[49,128431,71329],{"class":159},[49,128433,51968],{"class":73},[49,128435,55268],{"class":159},[49,128437,1990],{"class":73},[49,128439,128440],{"class":51,"line":219},[49,128441,2264],{"class":73},[757,128443,128444],{},"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":27,"searchDepth":63,"depth":63,"links":128446},[128447,128452,128456],{"id":127822,"depth":63,"text":127823,"children":128448},[128449,128450,128451],{"id":127826,"depth":70,"text":127827},{"id":127910,"depth":70,"text":127911},{"id":127958,"depth":70,"text":127959},{"id":128048,"depth":63,"text":128049,"children":128453},[128454,128455],{"id":128052,"depth":70,"text":128053},{"id":128125,"depth":70,"text":128126},{"id":128135,"depth":63,"text":128136,"children":128457},[128458,128459,128460,128461,128462],{"id":128139,"depth":70,"text":128140},{"id":128192,"depth":70,"text":128193},{"id":128208,"depth":70,"text":128209},{"id":128228,"depth":70,"text":128229},{"id":128390,"depth":70,"text":128463},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127814,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128470,"title":128471,"body":128472,"description":24072,"extension":766,"meta":130395,"navigation":398,"path":130396,"seo":130397,"stem":130398,"__hash__":130399},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128473,"toc":130369},[128474,128477,128481,128490,128494,128520,128525,128528,128531,128534,128537,128541,128544,128554,128562,128566,128601,128606,128609,128612,128615,128618,128622,128625,128634,128638,128651,128656,128659,128662,128665,128669,128672,128676,128679,128734,128737,128768,128771,128825,128829,128832,128998,129121,129124,129127,129130,129133,129137,129140,129144,129147,129150,129154,129157,129188,129215,129243,129246,129250,129276,129319,129323,129417,129420,129447,129450,129453,129456,129459,129462,129465,129468,129471,129474,129478,129535,129562,129566,129614,129618,129659,129661,129664,129667,129670,129673,129677,129769,129772,129775,129778,129782,129905,130106,130110,130114,130117,130120,130123,130127,130130,130133,130158,130161,130164,130167,130170,130173,130177,130185,130247,130250,130308,130311,130314,130317,130320,130323,130326,130329,130366],[10,128475,128471],{"id":128476},"_8-css显示模式与背景特性",[782,128478,128480],{"id":128479},"_81-css元素显示模式","8.1 css元素显示模式",[14,128482,128483,128484,128486,128487,128489],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[46,128485,126694],{},"自己占一行，比如一行可以放多个",[46,128488,126697],{},"，HTML 元素一般分为块元素和行内元素两种类型",[18,128491,128493],{"id":128492},"_811-块元素","8.1.1 块元素",[14,128495,128496,128497,128499,128500,1042,128503,1042,128505,1042,128507,1042,128510,1042,128513,128516,128517,128519],{},"常见的块元素有",[46,128498,126598],{},"~",[46,128501,128502],{},"\u003Ch6>",[46,128504,126624],{},[46,128506,126694],{},[46,128508,128509],{},"\u003Cul>",[46,128511,128512],{},"\u003Col>",[46,128514,128515],{},"\u003Cli>","等，其中 ",[46,128518,126694],{}," 标签是最典型的块元素",[14,128521,128522],{},[112,128523,128524],{},"块级元素的特点：",[14,128526,128527],{},"① 比较霸道，自己独占一行。",[14,128529,128530],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128532,128533],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128535,128536],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128538,128539],{},[112,128540,870],{},[14,128542,128543],{},"①文字类的元素内不能使用块级元素",[14,128545,77780,128546,128548,128549,128551,128552],{},[46,128547,126624],{}," 标签主要用于存放文字，因此 ",[46,128550,126624],{}," 里面不能放块级元素，特别是不能放",[46,128553,126694],{},[14,128555,128556,128557,128499,128559,128561],{},"⑥同理， ",[46,128558,126598],{},[46,128560,128502],{},"等都是文字类块级标签，里面也不能放其他块级元素",[18,128563,128565],{"id":128564},"_812-行内元素","8.1.2 行内元素",[14,128567,128568,128569,1042,128571,1042,128574,1042,128577,1042,128580,1042,128583,1042,128586,1042,128589,1042,128592,1042,128595,128597,128598,128600],{},"常见的行内元素有 ",[46,128570,126856],{},[46,128572,128573],{},"\u003Cstrong>",[46,128575,128576],{},"\u003Cb>",[46,128578,128579],{},"\u003Cem>",[46,128581,128582],{},"\u003Ci>",[46,128584,128585],{},"\u003Cdel>",[46,128587,128588],{},"\u003Cs>",[46,128590,128591],{},"\u003Cins>",[46,128593,128594],{},"\u003Cu>",[46,128596,126697],{}," 等，其中 ",[46,128599,126697],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128602,128603],{},[112,128604,128605],{},"特点：",[14,128607,128608],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128610,128611],{},"② 高、宽直接设置是无效的。",[14,128613,128614],{},"③ 默认宽度就是它本身内容的宽度。",[14,128616,128617],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128619,128620],{},[112,128621,870],{},[14,128623,128624],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128626,128627,128628,128630,128631,128633],{},"②特殊情况链接 ",[46,128629,126856],{}," 里面可以放块级元素，但是给 ",[46,128632,126856],{}," 转换一下块级模式最安全",[18,128635,128637],{"id":128636},"_813-行内块元素","8.1.3 行内块元素",[14,128639,128640,128641,1042,128644,1042,128647,128650],{},"在行内元素中有几个特殊的标签 —— ",[46,128642,128643],{},"\u003Cimg \u002F>",[46,128645,128646],{},"\u003Cinput \u002F>",[46,128648,128649],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128652,128653],{},[112,128654,128655],{},"行内块元素的特点：",[14,128657,128658],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128660,128661],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128663,128664],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[18,128666,128668],{"id":128667},"_814-总结","8.1.4 总结",[25,128670],{"style":126939,"src":128671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[18,128673,128675],{"id":128674},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128677,128678],{},"①转换为块元素：display:block;",[40,128680,128682],{"className":127083,"code":128681,"language":127085,"meta":27,"style":27},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[46,128683,128684,128689,128695,128706,128718,128730],{"__ignoreMap":27},[49,128685,128686],{"class":51,"line":52},[49,128687,128688],{"class":66},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[49,128690,128691,128693],{"class":51,"line":63},[49,128692,124],{"class":51831},[49,128694,16269],{"class":73},[49,128696,128697,128700,128702,128704],{"class":51,"line":70},[49,128698,128699],{"class":159},"  display",[49,128701,51968],{"class":73},[49,128703,61400],{"class":159},[49,128705,1990],{"class":73},[49,128707,128708,128710,128712,128714,128716],{"class":51,"line":219},[49,128709,71099],{"class":159},[49,128711,51968],{"class":73},[49,128713,1140],{"class":159},[49,128715,52023],{"class":77},[49,128717,1990],{"class":73},[49,128719,128720,128722,128724,128726,128728],{"class":51,"line":233},[49,128721,71319],{"class":159},[49,128723,51968],{"class":73},[49,128725,1230],{"class":159},[49,128727,52023],{"class":77},[49,128729,1990],{"class":73},[49,128731,128732],{"class":51,"line":241},[49,128733,2264],{"class":73},[14,128735,128736],{},"②转换为行内元素：display:inline;",[40,128738,128740],{"className":127083,"code":128739,"language":127085,"meta":27,"style":27},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[46,128741,128742,128747,128753,128764],{"__ignoreMap":27},[49,128743,128744],{"class":51,"line":52},[49,128745,128746],{"class":66},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[49,128748,128749,128751],{"class":51,"line":63},[49,128750,52142],{"class":51831},[49,128752,16269],{"class":73},[49,128754,128755,128757,128759,128762],{"class":51,"line":70},[49,128756,128699],{"class":159},[49,128758,51968],{"class":73},[49,128760,128761],{"class":159},"inline",[49,128763,1990],{"class":73},[49,128765,128766],{"class":51,"line":219},[49,128767,2264],{"class":73},[14,128769,128770],{},"③转换为行内块：display:inline-block;",[40,128772,128774],{"className":127083,"code":128773,"language":127085,"meta":27,"style":27},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[46,128775,128776,128781,128787,128797,128809,128821],{"__ignoreMap":27},[49,128777,128778],{"class":51,"line":52},[49,128779,128780],{"class":66},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[49,128782,128783,128785],{"class":51,"line":63},[49,128784,49],{"class":51831},[49,128786,16269],{"class":73},[49,128788,128789,128791,128793,128795],{"class":51,"line":70},[49,128790,128699],{"class":159},[49,128792,51968],{"class":73},[49,128794,72914],{"class":159},[49,128796,1990],{"class":73},[49,128798,128799,128801,128803,128805,128807],{"class":51,"line":219},[49,128800,71099],{"class":159},[49,128802,51968],{"class":73},[49,128804,1441],{"class":159},[49,128806,52023],{"class":77},[49,128808,1990],{"class":73},[49,128810,128811,128813,128815,128817,128819],{"class":51,"line":233},[49,128812,71319],{"class":159},[49,128814,51968],{"class":73},[49,128816,1780],{"class":159},[49,128818,52023],{"class":77},[49,128820,1990],{"class":73},[49,128822,128823],{"class":51,"line":241},[49,128824,2264],{"class":73},[18,128826,128828],{"id":128827},"_816-小米侧边栏","8.1.6 小米侧边栏",[25,128830],{"style":126939,"src":128831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[40,128833,128835],{"className":127830,"code":128834,"language":127832,"meta":27,"style":27},"\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",[46,128836,128837,128842,128857,128876,128895,128914,128933,128952,128971,128990],{"__ignoreMap":27},[49,128838,128839],{"class":51,"line":52},[49,128840,128841],{"class":66},"\u003C!-- 小米侧边栏案例 -->\n",[49,128843,128844,128846,128848,128850,128852,128855],{"class":51,"line":63},[49,128845,1739],{"class":73},[49,128847,52142],{"class":51831},[49,128849,54017],{"class":55},[49,128851,78],{"class":73},[49,128853,128854],{"class":59},"\"sidebar\"",[49,128856,51838],{"class":73},[49,128858,128859,128861,128863,128865,128867,128869,128872,128874],{"class":51,"line":70},[49,128860,52675],{"class":73},[49,128862,124],{"class":51831},[49,128864,61588],{"class":55},[49,128866,78],{"class":73},[49,128868,61593],{"class":59},[49,128870,128871],{"class":73},">手机 电话卡\u003C\u002F",[49,128873,124],{"class":51831},[49,128875,51838],{"class":73},[49,128877,128878,128880,128882,128884,128886,128888,128891,128893],{"class":51,"line":219},[49,128879,52675],{"class":73},[49,128881,124],{"class":51831},[49,128883,61588],{"class":55},[49,128885,78],{"class":73},[49,128887,61593],{"class":59},[49,128889,128890],{"class":73},">电视 盒子\u003C\u002F",[49,128892,124],{"class":51831},[49,128894,51838],{"class":73},[49,128896,128897,128899,128901,128903,128905,128907,128910,128912],{"class":51,"line":233},[49,128898,52675],{"class":73},[49,128900,124],{"class":51831},[49,128902,61588],{"class":55},[49,128904,78],{"class":73},[49,128906,61593],{"class":59},[49,128908,128909],{"class":73},">笔记本 平板\u003C\u002F",[49,128911,124],{"class":51831},[49,128913,51838],{"class":73},[49,128915,128916,128918,128920,128922,128924,128926,128929,128931],{"class":51,"line":241},[49,128917,52675],{"class":73},[49,128919,124],{"class":51831},[49,128921,61588],{"class":55},[49,128923,78],{"class":73},[49,128925,61593],{"class":59},[49,128927,128928],{"class":73},">出行 穿戴\u003C\u002F",[49,128930,124],{"class":51831},[49,128932,51838],{"class":73},[49,128934,128935,128937,128939,128941,128943,128945,128948,128950],{"class":51,"line":1920},[49,128936,52675],{"class":73},[49,128938,124],{"class":51831},[49,128940,61588],{"class":55},[49,128942,78],{"class":73},[49,128944,61593],{"class":59},[49,128946,128947],{"class":73},">智能 路由器\u003C\u002F",[49,128949,124],{"class":51831},[49,128951,51838],{"class":73},[49,128953,128954,128956,128958,128960,128962,128964,128967,128969],{"class":51,"line":2011},[49,128955,52675],{"class":73},[49,128957,124],{"class":51831},[49,128959,61588],{"class":55},[49,128961,78],{"class":73},[49,128963,61593],{"class":59},[49,128965,128966],{"class":73},">健康 儿童\u003C\u002F",[49,128968,124],{"class":51831},[49,128970,51838],{"class":73},[49,128972,128973,128975,128977,128979,128981,128983,128986,128988],{"class":51,"line":2017},[49,128974,52675],{"class":73},[49,128976,124],{"class":51831},[49,128978,61588],{"class":55},[49,128980,78],{"class":73},[49,128982,61593],{"class":59},[49,128984,128985],{"class":73},">耳机 音响\u003C\u002F",[49,128987,124],{"class":51831},[49,128989,51838],{"class":73},[49,128991,128992,128994,128996],{"class":51,"line":2029},[49,128993,52316],{"class":73},[49,128995,52142],{"class":51831},[49,128997,51838],{"class":73},[40,128999,129001],{"className":127083,"code":129000,"language":127085,"meta":27,"style":27},".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",[46,129002,129003,129012,129022,129035,129047,129059,129071,129081,129092,129096,129106,129117],{"__ignoreMap":27},[49,129004,129005,129008,129010],{"class":51,"line":52},[49,129006,129007],{"class":55},".sidebar",[49,129009,2098],{"class":51831},[49,129011,16269],{"class":73},[49,129013,129014,129016,129018,129020],{"class":51,"line":63},[49,129015,128699],{"class":159},[49,129017,51968],{"class":73},[49,129019,61400],{"class":159},[49,129021,1990],{"class":73},[49,129023,129024,129026,129028,129031,129033],{"class":51,"line":70},[49,129025,71099],{"class":159},[49,129027,51968],{"class":73},[49,129029,129030],{"class":159},"234",[49,129032,52023],{"class":77},[49,129034,1990],{"class":73},[49,129036,129037,129039,129041,129043,129045],{"class":51,"line":219},[49,129038,71319],{"class":159},[49,129040,51968],{"class":73},[49,129042,1281],{"class":159},[49,129044,52023],{"class":77},[49,129046,1990],{"class":73},[49,129048,129049,129051,129053,129055,129057],{"class":51,"line":233},[49,129050,127767],{"class":159},[49,129052,51968],{"class":73},[49,129054,1281],{"class":159},[49,129056,52023],{"class":77},[49,129058,1990],{"class":73},[49,129060,129061,129063,129065,129067,129069],{"class":51,"line":241},[49,129062,71354],{"class":159},[49,129064,51968],{"class":73},[49,129066,1780],{"class":159},[49,129068,52023],{"class":77},[49,129070,1990],{"class":73},[49,129072,129073,129075,129077,129079],{"class":51,"line":1920},[49,129074,71436],{"class":159},[49,129076,51968],{"class":73},[49,129078,61373],{"class":159},[49,129080,1990],{"class":73},[49,129082,129083,129085,129087,129090],{"class":51,"line":2011},[49,129084,71409],{"class":159},[49,129086,51968],{"class":73},[49,129088,129089],{"class":159},"#55585a",[49,129091,1990],{"class":73},[49,129093,129094],{"class":51,"line":2017},[49,129095,2264],{"class":73},[49,129097,129098,129100,129102,129104],{"class":51,"line":2029},[49,129099,129007],{"class":55},[49,129101,2098],{"class":51831},[49,129103,61471],{"class":55},[49,129105,16269],{"class":73},[49,129107,129108,129110,129112,129115],{"class":51,"line":2311},[49,129109,71409],{"class":159},[49,129111,51968],{"class":73},[49,129113,129114],{"class":159},"#ff6700",[49,129116,1990],{"class":73},[49,129118,129119],{"class":51,"line":2316},[49,129120,2264],{"class":73},[25,129122],{"style":126939,"src":129123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,129125,129126],{},"行高=盒子高度：实现文字的垂直居中",[14,129128,129129],{},"原理讲解：",[25,129131],{"style":126939,"src":129132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[782,129134,129136],{"id":129135},"_82-css背景","8.2 css背景",[14,129138,129139],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[18,129141,129143],{"id":129142},"_821-背景颜色","8.2.1 背景颜色",[14,129145,129146],{},"background-color:颜色值;",[14,129148,129149],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[18,129151,129153],{"id":129152},"_822-背景图片","8.2.2 背景图片",[14,129155,129156],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[40,129158,129160],{"className":127083,"code":129159,"language":127085,"meta":27,"style":27},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[46,129161,129162,129168,129184],{"__ignoreMap":27},[49,129163,129164,129166],{"class":51,"line":52},[49,129165,52142],{"class":51831},[49,129167,16269],{"class":73},[49,129169,129170,129173,129175,129177,129179,129182],{"class":51,"line":63},[49,129171,129172],{"class":159},"  background-image",[49,129174,51968],{"class":73},[49,129176,62257],{"class":159},[49,129178,841],{"class":73},[49,129180,129181],{"class":5913},"images\u002Fbg.png",[49,129183,3416],{"class":73},[49,129185,129186],{"class":51,"line":70},[49,129187,2264],{"class":73},[610,129189,129190,129199],{},[613,129191,129192],{},[616,129193,129194,129197],{},[619,129195,129196],{"align":621},"参数值",[619,129198,103227],{"align":621},[633,129200,129201,129208],{},[616,129202,129203,129205],{},[638,129204,55268],{"align":621},[638,129206,129207],{"align":621},"无背景图（默认的）",[616,129209,129210,129212],{},[638,129211,62257],{"align":621},[638,129213,129214],{"align":621},"使用绝对或相对地址指定背景图像",[40,129216,129217],{"className":127083,"code":129159,"language":127085,"meta":27,"style":27},[46,129218,129219,129225,129239],{"__ignoreMap":27},[49,129220,129221,129223],{"class":51,"line":52},[49,129222,52142],{"class":51831},[49,129224,16269],{"class":73},[49,129226,129227,129229,129231,129233,129235,129237],{"class":51,"line":63},[49,129228,129172],{"class":159},[49,129230,51968],{"class":73},[49,129232,62257],{"class":159},[49,129234,841],{"class":73},[49,129236,129181],{"class":5913},[49,129238,3416],{"class":73},[49,129240,129241],{"class":51,"line":70},[49,129242,2264],{"class":73},[14,129244,129245],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[18,129247,129249],{"id":129248},"_823-背景平铺","8.2.3 背景平铺",[40,129251,129253],{"className":127083,"code":129252,"language":127085,"meta":27,"style":27},"div {\n  background-repeat: no-repeat;\n}\n",[46,129254,129255,129261,129272],{"__ignoreMap":27},[49,129256,129257,129259],{"class":51,"line":52},[49,129258,52142],{"class":51831},[49,129260,16269],{"class":73},[49,129262,129263,129266,129268,129270],{"class":51,"line":63},[49,129264,129265],{"class":159},"  background-repeat",[49,129267,51968],{"class":73},[49,129269,62267],{"class":159},[49,129271,1990],{"class":73},[49,129273,129274],{"class":51,"line":70},[49,129275,2264],{"class":73},[610,129277,129278,129286],{},[613,129279,129280],{},[616,129281,129282,129284],{},[619,129283,129196],{"align":621},[619,129285,103227],{"align":621},[633,129287,129288,129296,129303,129311],{},[616,129289,129290,129293],{},[638,129291,129292],{"align":621},"repeat",[638,129294,129295],{"align":621},"背景图像在纵向和横向上平铺（默认的）",[616,129297,129298,129300],{},[638,129299,62267],{"align":621},[638,129301,129302],{"align":621},"背景图像不平铺",[616,129304,129305,129308],{},[638,129306,129307],{"align":621},"repeat-x",[638,129309,129310],{"align":621},"背景图像在横向上平铺",[616,129312,129313,129316],{},[638,129314,129315],{"align":621},"repeat-y",[638,129317,129318],{"align":621},"背景图像在纵向平铺",[18,129320,129322],{"id":129321},"_824-背景图片位置","8.2.4 背景图片位置",[40,129324,129326],{"className":127083,"code":129325,"language":127085,"meta":27,"style":27},"\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",[46,129327,129328,129333,129339,129353,129357,129362,129368,129384,129388,129393,129399,129413],{"__ignoreMap":27},[49,129329,129330],{"class":51,"line":52},[49,129331,129332],{"class":66},"\u002F* 方位名词 *\u002F\n",[49,129334,129335,129337],{"class":51,"line":63},[49,129336,52142],{"class":51831},[49,129338,16269],{"class":73},[49,129340,129341,129344,129346,129348,129351],{"class":51,"line":70},[49,129342,129343],{"class":159},"  background-position",[49,129345,51968],{"class":73},[49,129347,52123],{"class":159},[49,129349,129350],{"class":159}," top",[49,129352,1990],{"class":73},[49,129354,129355],{"class":51,"line":219},[49,129356,2264],{"class":73},[49,129358,129359],{"class":51,"line":233},[49,129360,129361],{"class":66},"\u002F* 精确单位 *\u002F\n",[49,129363,129364,129366],{"class":51,"line":241},[49,129365,52142],{"class":51831},[49,129367,16269],{"class":73},[49,129369,129370,129372,129374,129376,129378,129380,129382],{"class":51,"line":1920},[49,129371,129343],{"class":159},[49,129373,51968],{"class":73},[49,129375,1529],{"class":159},[49,129377,52023],{"class":77},[49,129379,58035],{"class":159},[49,129381,52023],{"class":77},[49,129383,1990],{"class":73},[49,129385,129386],{"class":51,"line":2011},[49,129387,2264],{"class":73},[49,129389,129390],{"class":51,"line":2017},[49,129391,129392],{"class":66},"\u002F* 混合单位 *\u002F\n",[49,129394,129395,129397],{"class":51,"line":2029},[49,129396,52142],{"class":51831},[49,129398,16269],{"class":73},[49,129400,129401,129403,129405,129407,129409,129411],{"class":51,"line":2311},[49,129402,129343],{"class":159},[49,129404,51968],{"class":73},[49,129406,1529],{"class":159},[49,129408,52023],{"class":77},[49,129410,17841],{"class":159},[49,129412,1990],{"class":73},[49,129414,129415],{"class":51,"line":2316},[49,129416,2264],{"class":73},[14,129418,129419],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[610,129421,129422,129430],{},[613,129423,129424],{},[616,129425,129426,129428],{},[619,129427,129196],{"align":621},[619,129429,26558],{"align":621},[633,129431,129432,129439],{},[616,129433,129434,129436],{},[638,129435,52499],{"align":621},[638,129437,129438],{"align":621},"百分数|由浮点数和单位标识符组成的长度值",[616,129440,129441,129444],{},[638,129442,129443],{"align":621},"position",[638,129445,129446],{"align":621},"top|center|bottom|left|center|right 方位名词",[14,129448,129449],{},"其他说明：",[14,129451,129452],{},"①参数是方位名词",[14,129454,129455],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,129457,129458],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,129460,129461],{},"②参数是精确单位",[14,129463,129464],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,129466,129467],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,129469,129470],{},"③参数是混合单位",[14,129472,129473],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[18,129475,129477],{"id":129476},"_825-背景图片固定","8.2.5 背景图片固定",[40,129479,129481],{"className":127083,"code":129480,"language":127085,"meta":27,"style":27},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[46,129482,129483,129488,129494,129506,129510,129515,129521,129531],{"__ignoreMap":27},[49,129484,129485],{"class":51,"line":52},[49,129486,129487],{"class":66},"\u002F* 背景滚动（默认） *\u002F\n",[49,129489,129490,129492],{"class":51,"line":63},[49,129491,52142],{"class":51831},[49,129493,16269],{"class":73},[49,129495,129496,129499,129501,129504],{"class":51,"line":70},[49,129497,129498],{"class":159},"  background-attachment",[49,129500,51968],{"class":73},[49,129502,129503],{"class":159},"scroll",[49,129505,1990],{"class":73},[49,129507,129508],{"class":51,"line":219},[49,129509,2264],{"class":73},[49,129511,129512],{"class":51,"line":233},[49,129513,129514],{"class":66},"\u002F* 背景固定 *\u002F\n",[49,129516,129517,129519],{"class":51,"line":241},[49,129518,52142],{"class":51831},[49,129520,16269],{"class":73},[49,129522,129523,129525,129527,129529],{"class":51,"line":1920},[49,129524,129498],{"class":159},[49,129526,51968],{"class":73},[49,129528,86764],{"class":159},[49,129530,1990],{"class":73},[49,129532,129533],{"class":51,"line":2011},[49,129534,2264],{"class":73},[610,129536,129537,129546],{},[613,129538,129539],{},[616,129540,129541,129544],{},[619,129542,129543],{"align":621},"参数",[619,129545,103227],{"align":621},[633,129547,129548,129555],{},[616,129549,129550,129552],{},[638,129551,129503],{"align":621},[638,129553,129554],{"align":621},"背景图像是随对象内容滚动",[616,129556,129557,129559],{},[638,129558,86764],{"align":621},[638,129560,129561],{"align":621},"背景图像固定",[18,129563,129565],{"id":129564},"_826-背景样式合写","8.2.6 背景样式合写",[40,129567,129569],{"className":127083,"code":129568,"language":127085,"meta":27,"style":27},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[46,129570,129571,129576,129582,129610],{"__ignoreMap":27},[49,129572,129573],{"class":51,"line":52},[49,129574,129575],{"class":66},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[49,129577,129578,129580],{"class":51,"line":63},[49,129579,52142],{"class":51831},[49,129581,16269],{"class":73},[49,129583,129584,129586,129588,129590,129593,129595,129597,129599,129601,129604,129606,129608],{"class":51,"line":70},[49,129585,71142],{"class":159},[49,129587,51968],{"class":73},[49,129589,61373],{"class":159},[49,129591,129592],{"class":159}," url",[49,129594,841],{"class":73},[49,129596,129181],{"class":5913},[49,129598,14411],{"class":73},[49,129600,62267],{"class":159},[49,129602,129603],{"class":159}," fixed",[49,129605,17841],{"class":159},[49,129607,129350],{"class":159},[49,129609,1990],{"class":73},[49,129611,129612],{"class":51,"line":219},[49,129613,2264],{"class":73},[18,129615,129617],{"id":129616},"_827-背景色半透明","8.2.7 背景色半透明",[40,129619,129621],{"className":127083,"code":129620,"language":127085,"meta":27,"style":27},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[46,129622,129623,129629,129655],{"__ignoreMap":27},[49,129624,129625,129627],{"class":51,"line":52},[49,129626,52142],{"class":51831},[49,129628,16269],{"class":73},[49,129630,129631,129633,129635,129637,129639,129641,129643,129645,129647,129649,129651,129653],{"class":51,"line":63},[49,129632,71142],{"class":159},[49,129634,51968],{"class":73},[49,129636,55641],{"class":159},[49,129638,841],{"class":73},[49,129640,1021],{"class":159},[49,129642,13132],{"class":73},[49,129644,1021],{"class":159},[49,129646,13132],{"class":73},[49,129648,1021],{"class":159},[49,129650,13132],{"class":73},[49,129652,101052],{"class":159},[49,129654,3416],{"class":73},[49,129656,129657],{"class":51,"line":70},[49,129658,2264],{"class":73},[14,129660,99927],{},[14,129662,129663],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129665,129666],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129668,129669],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129671,129672],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[18,129674,129676],{"id":129675},"_828-总结","8.2.8 总结",[610,129678,129679,129690],{},[613,129680,129681],{},[616,129682,129683,129686,129688],{},[619,129684,129685],{"align":621},"属性",[619,129687,103227],{"align":621},[619,129689,984],{"align":621},[633,129691,129692,129703,129714,129725,129736,129747,129758],{},[616,129693,129694,129697,129700],{},[638,129695,129696],{"align":621},"background-color",[638,129698,129699],{"align":621},"背景颜色",[638,129701,129702],{"align":621},"预定义的颜色值\u002F十六进制\u002FRGB代码",[616,129704,129705,129708,129711],{},[638,129706,129707],{"align":621},"background-image",[638,129709,129710],{"align":621},"背景图片",[638,129712,129713],{"align":621},"url(图片路径)",[616,129715,129716,129719,129722],{},[638,129717,129718],{"align":621},"background-repeat",[638,129720,129721],{"align":621},"是否平铺",[638,129723,129724],{"align":621},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[616,129726,129727,129730,129733],{},[638,129728,129729],{"align":621},"background-position",[638,129731,129732],{"align":621},"背景位置",[638,129734,129735],{"align":621},"length\u002Fposition 分别是x和y坐标",[616,129737,129738,129741,129744],{},[638,129739,129740],{"align":621},"background-attachment",[638,129742,129743],{"align":621},"背景附着",[638,129745,129746],{"align":621},"scroll(背景滚动) \u002Ffixed (背景固定)",[616,129748,129749,129752,129755],{},[638,129750,129751],{"align":621},"背景简写",[638,129753,129754],{"align":621},"书写更简单",[638,129756,129757],{"align":621},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[616,129759,129760,129763,129766],{},[638,129761,129762],{"align":621},"背景半透明",[638,129764,129765],{"align":621},"背景颜色半透明",[638,129767,129768],{"align":621},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129770,129771],{},"颜色渐变：",[25,129773],{"style":126939,"src":129774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[25,129776],{"style":126939,"src":129777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[18,129779,129781],{"id":129780},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[40,129783,129785],{"className":127830,"code":129784,"language":127832,"meta":27,"style":27},"\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",[46,129786,129787,129802,129821,129840,129859,129878,129897],{"__ignoreMap":27},[49,129788,129789,129791,129793,129795,129797,129800],{"class":51,"line":52},[49,129790,1739],{"class":73},[49,129792,52142],{"class":51831},[49,129794,54017],{"class":55},[49,129796,78],{"class":73},[49,129798,129799],{"class":59},"\"nav\"",[49,129801,51838],{"class":73},[49,129803,129804,129806,129808,129810,129812,129814,129817,129819],{"class":51,"line":63},[49,129805,52675],{"class":73},[49,129807,124],{"class":51831},[49,129809,61588],{"class":55},[49,129811,78],{"class":73},[49,129813,61593],{"class":59},[49,129815,129816],{"class":73},">五彩导航1\u003C\u002F",[49,129818,124],{"class":51831},[49,129820,51838],{"class":73},[49,129822,129823,129825,129827,129829,129831,129833,129836,129838],{"class":51,"line":70},[49,129824,52675],{"class":73},[49,129826,124],{"class":51831},[49,129828,61588],{"class":55},[49,129830,78],{"class":73},[49,129832,61593],{"class":59},[49,129834,129835],{"class":73},">五彩导航2\u003C\u002F",[49,129837,124],{"class":51831},[49,129839,51838],{"class":73},[49,129841,129842,129844,129846,129848,129850,129852,129855,129857],{"class":51,"line":219},[49,129843,52675],{"class":73},[49,129845,124],{"class":51831},[49,129847,61588],{"class":55},[49,129849,78],{"class":73},[49,129851,61593],{"class":59},[49,129853,129854],{"class":73},">五彩导航3\u003C\u002F",[49,129856,124],{"class":51831},[49,129858,51838],{"class":73},[49,129860,129861,129863,129865,129867,129869,129871,129874,129876],{"class":51,"line":233},[49,129862,52675],{"class":73},[49,129864,124],{"class":51831},[49,129866,61588],{"class":55},[49,129868,78],{"class":73},[49,129870,61593],{"class":59},[49,129872,129873],{"class":73},">五彩导航4\u003C\u002F",[49,129875,124],{"class":51831},[49,129877,51838],{"class":73},[49,129879,129880,129882,129884,129886,129888,129890,129893,129895],{"class":51,"line":241},[49,129881,52675],{"class":73},[49,129883,124],{"class":51831},[49,129885,61588],{"class":55},[49,129887,78],{"class":73},[49,129889,61593],{"class":59},[49,129891,129892],{"class":73},">五彩导航5\u003C\u002F",[49,129894,124],{"class":51831},[49,129896,51838],{"class":73},[49,129898,129899,129901,129903],{"class":51,"line":1920},[49,129900,52316],{"class":73},[49,129902,52142],{"class":51831},[49,129904,51838],{"class":73},[40,129906,129908],{"className":127083,"code":129907,"language":127085,"meta":27,"style":27},".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",[46,129909,129910,129919,129929,129941,129953,129963,129975,129985,129989,130014,130037,130060,130083],{"__ignoreMap":27},[49,129911,129912,129915,129917],{"class":51,"line":52},[49,129913,129914],{"class":55},".nav",[49,129916,2098],{"class":51831},[49,129918,16269],{"class":73},[49,129920,129921,129923,129925,129927],{"class":51,"line":63},[49,129922,128699],{"class":159},[49,129924,51968],{"class":73},[49,129926,72914],{"class":159},[49,129928,1990],{"class":73},[49,129930,129931,129933,129935,129937,129939],{"class":51,"line":70},[49,129932,71099],{"class":159},[49,129934,51968],{"class":73},[49,129936,1646],{"class":159},[49,129938,52023],{"class":77},[49,129940,1990],{"class":73},[49,129942,129943,129945,129947,129949,129951],{"class":51,"line":219},[49,129944,71319],{"class":159},[49,129946,51968],{"class":73},[49,129948,1685],{"class":159},[49,129950,52023],{"class":77},[49,129952,1990],{"class":73},[49,129954,129955,129957,129959,129961],{"class":51,"line":233},[49,129956,71057],{"class":159},[49,129958,51968],{"class":73},[49,129960,52123],{"class":159},[49,129962,1990],{"class":73},[49,129964,129965,129967,129969,129971,129973],{"class":51,"line":241},[49,129966,127767],{"class":159},[49,129968,51968],{"class":73},[49,129970,1685],{"class":159},[49,129972,52023],{"class":77},[49,129974,1990],{"class":73},[49,129976,129977,129979,129981,129983],{"class":51,"line":1920},[49,129978,71436],{"class":159},[49,129980,51968],{"class":73},[49,129982,61373],{"class":159},[49,129984,1990],{"class":73},[49,129986,129987],{"class":51,"line":2011},[49,129988,2264],{"class":73},[49,129990,129991,129993,129995,129998,130000,130002,130005,130007,130009,130011],{"class":51,"line":2017},[49,129992,129914],{"class":55},[49,129994,2098],{"class":51831},[49,129996,129997],{"class":55},":nth-child",[49,129999,841],{"class":73},[49,130001,1047],{"class":159},[49,130003,130004],{"class":73},") { ",[49,130006,129696],{"class":159},[49,130008,51968],{"class":73},[49,130010,129114],{"class":159},[49,130012,130013],{"class":73},"; }\n",[49,130015,130016,130018,130020,130022,130024,130026,130028,130030,130032,130035],{"class":51,"line":2029},[49,130017,129914],{"class":55},[49,130019,2098],{"class":51831},[49,130021,129997],{"class":55},[49,130023,841],{"class":73},[49,130025,915],{"class":159},[49,130027,130004],{"class":73},[49,130029,129696],{"class":159},[49,130031,51968],{"class":73},[49,130033,130034],{"class":159},"#ff0000",[49,130036,130013],{"class":73},[49,130038,130039,130041,130043,130045,130047,130049,130051,130053,130055,130058],{"class":51,"line":2311},[49,130040,129914],{"class":55},[49,130042,2098],{"class":51831},[49,130044,129997],{"class":55},[49,130046,841],{"class":73},[49,130048,909],{"class":159},[49,130050,130004],{"class":73},[49,130052,129696],{"class":159},[49,130054,51968],{"class":73},[49,130056,130057],{"class":159},"#00a4ff",[49,130059,130013],{"class":73},[49,130061,130062,130064,130066,130068,130070,130072,130074,130076,130078,130081],{"class":51,"line":2316},[49,130063,129914],{"class":55},[49,130065,2098],{"class":51831},[49,130067,129997],{"class":55},[49,130069,841],{"class":73},[49,130071,1122],{"class":159},[49,130073,130004],{"class":73},[49,130075,129696],{"class":159},[49,130077,51968],{"class":73},[49,130079,130080],{"class":159},"#ff00ff",[49,130082,130013],{"class":73},[49,130084,130085,130087,130089,130091,130093,130095,130097,130099,130101,130104],{"class":51,"line":2322},[49,130086,129914],{"class":55},[49,130088,2098],{"class":51831},[49,130090,129997],{"class":55},[49,130092,841],{"class":73},[49,130094,1148],{"class":159},[49,130096,130004],{"class":73},[49,130098,129696],{"class":159},[49,130100,51968],{"class":73},[49,130102,130103],{"class":159},"#00ff00",[49,130105,130013],{"class":73},[782,130107,130109],{"id":130108},"_83-css三大特性","8.3 css三大特性",[18,130111,130113],{"id":130112},"_831-层叠性","8.3.1 层叠性",[14,130115,130116],{},"为了解决样式冲突问题",[14,130118,130119],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,130121,130122],{},"   ②样式不冲突，不会层叠",[18,130124,130126],{"id":130125},"_832-继承性","8.3.2 继承性",[14,130128,130129],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,130131,130132],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[40,130134,130136],{"className":127083,"code":130135,"language":127085,"meta":27,"style":27},"p {\n  color: #333;\n}\n",[46,130137,130138,130144,130154],{"__ignoreMap":27},[49,130139,130140,130142],{"class":51,"line":52},[49,130141,14],{"class":51831},[49,130143,16269],{"class":73},[49,130145,130146,130148,130150,130152],{"class":51,"line":63},[49,130147,71436],{"class":159},[49,130149,51968],{"class":73},[49,130151,62900],{"class":159},[49,130153,1990],{"class":73},[49,130155,130156],{"class":51,"line":70},[49,130157,2264],{"class":73},[25,130159],{"style":126939,"src":130160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,130162,130163],{},"解释：①行高可以跟单位也可以不跟单位",[14,130165,130166],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,130168,130169],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,130171,130172],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[18,130174,130176],{"id":130175},"_833-优先级","8.3.3 优先级",[30,130178,130179,130182],{},[33,130180,130181],{},"选择器相同，则执行层叠性",[33,130183,130184],{},"选择器不同，则根据选择器权重执行",[610,130186,130187,130197],{},[613,130188,130189],{},[616,130190,130191,130194],{},[619,130192,130193],{"align":621},"选择器",[619,130195,130196],{"align":621},"选择器权重",[633,130198,130199,130207,130215,130223,130231,130239],{},[616,130200,130201,130204],{},[638,130202,130203],{"align":621},"继承 或者*",[638,130205,130206],{"align":621},"0，0，0，0",[616,130208,130209,130212],{},[638,130210,130211],{"align":621},"标签选择器",[638,130213,130214],{"align":621},"0，0，0，1",[616,130216,130217,130220],{},[638,130218,130219],{"align":621},"类选择器，伪类选择器",[638,130221,130222],{"align":621},"0，0，1，0",[616,130224,130225,130228],{},[638,130226,130227],{"align":621},"ID选择器",[638,130229,130230],{"align":621},"0，1，0，0",[616,130232,130233,130236],{},[638,130234,130235],{"align":621},"行内样式",[638,130237,130238],{"align":621},"1，0，0，0",[616,130240,130241,130244],{},[638,130242,130243],{"align":621},"！important",[638,130245,130246],{"align":621},"无穷大",[14,130248,130249],{},"! important用法：",[40,130251,130253],{"className":127083,"code":130252,"language":127085,"meta":27,"style":27},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[46,130254,130255,130260,130266,130279,130283,130288,130294,130304],{"__ignoreMap":27},[49,130256,130257],{"class":51,"line":52},[49,130258,130259],{"class":66},"\u002F* !important 拥有最高优先级 *\u002F\n",[49,130261,130262,130264],{"class":51,"line":63},[49,130263,52142],{"class":51831},[49,130265,16269],{"class":73},[49,130267,130268,130270,130272,130274,130277],{"class":51,"line":70},[49,130269,71436],{"class":159},[49,130271,51968],{"class":73},[49,130273,52176],{"class":159},[49,130275,130276],{"class":77}," !important",[49,130278,1990],{"class":73},[49,130280,130281],{"class":51,"line":219},[49,130282,2264],{"class":73},[49,130284,130285],{"class":51,"line":233},[49,130286,130287],{"class":66},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[49,130289,130290,130292],{"class":51,"line":241},[49,130291,52142],{"class":51831},[49,130293,16269],{"class":73},[49,130295,130296,130298,130300,130302],{"class":51,"line":1920},[49,130297,71436],{"class":159},[49,130299,51968],{"class":73},[49,130301,57952],{"class":159},[49,130303,1990],{"class":73},[49,130305,130306],{"class":51,"line":2011},[49,130307,2264],{"class":73},[14,130309,130310],{},"优先级注意点：",[14,130312,130313],{},"①权重是有4组数字组成,但是不会有进位",[14,130315,130316],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,130318,130319],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,130321,130322],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,130324,130325],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,130327,130328],{},"⑥复合选择器",[610,130330,130331,130341],{},[613,130332,130333],{},[616,130334,130335,130338],{},[619,130336,130337],{"align":621},"div ul li",[619,130339,130340],{"align":621},"0,0,0,3",[633,130342,130343,130351,130359],{},[616,130344,130345,130348],{},[638,130346,130347],{"align":621},".nav ul li",[638,130349,130350],{"align":621},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[616,130352,130353,130356],{},[638,130354,130355],{"align":621},"a:hover",[638,130357,130358],{"align":621},"0,0,1,1",[616,130360,130361,130364],{},[638,130362,130363],{"align":621},".nav a",[638,130365,130358],{"align":621},[757,130367,130368],{},"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":27,"searchDepth":63,"depth":63,"links":130370},[130371,130379,130390],{"id":128479,"depth":63,"text":128480,"children":130372},[130373,130374,130375,130376,130377,130378],{"id":128492,"depth":70,"text":128493},{"id":128564,"depth":70,"text":128565},{"id":128636,"depth":70,"text":128637},{"id":128667,"depth":70,"text":128668},{"id":128674,"depth":70,"text":128675},{"id":128827,"depth":70,"text":128828},{"id":129135,"depth":63,"text":129136,"children":130380},[130381,130382,130383,130384,130385,130386,130387,130388,130389],{"id":129142,"depth":70,"text":129143},{"id":129152,"depth":70,"text":129153},{"id":129248,"depth":70,"text":129249},{"id":129321,"depth":70,"text":129322},{"id":129476,"depth":70,"text":129477},{"id":129564,"depth":70,"text":129565},{"id":129616,"depth":70,"text":129617},{"id":129675,"depth":70,"text":129676},{"id":129780,"depth":70,"text":129781},{"id":130108,"depth":63,"text":130109,"children":130391},[130392,130393,130394],{"id":130112,"depth":70,"text":130113},{"id":130125,"depth":70,"text":130126},{"id":130175,"depth":70,"text":130176},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128471,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130401,"title":130402,"body":130403,"description":24072,"extension":766,"meta":131993,"navigation":398,"path":131994,"seo":131995,"stem":131996,"__hash__":131997},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130404,"toc":131972},[130405,130408,130412,130415,130418,130421,130424,130427,130430,130433,130437,130445,130482,130518,130521,130535,130540,130574,130577,130670,130675,130678,130708,130711,130716,130724,130728,130735,130781,130825,130830,130833,130836,130839,130842,130845,130848,130850,130853,130857,130862,130906,130911,130914,130917,130954,130959,130962,130965,130968,130971,131003,131006,131009,131012,131044,131047,131050,131053,131057,131060,131092,131095,131099,131119,131122,131130,131133,131137,131142,131145,131177,131182,131185,131223,131227,131232,131235,131238,131269,131272,131289,131294,131346,131406,131411,131465,131503,131507,131511,131514,131518,131526,131529,131531,131542,131547,131595,131629,131632,131635,131638,131641,131685,131688,131691,131694,131697,131700,131703,131747,131750,131753,131756,131759,131762,131765,131771,131774,131818,131821,131824,131827,131830,131833,131877,131880,131882,131885,131889,131893,131931,131935,131938,131941,131945,131953,131957,131960,131963,131966,131969],[10,130406,130402],{"id":130407},"_9-css盒模型浮动与切图",[782,130409,130411],{"id":130410},"_91-盒子模型","9.1 盒子模型",[14,130413,130414],{},"利用盒子来设计网页",[14,130416,130417],{},"盒子包含：边框、外边距、内边距、实际内容",[14,130419,130420],{},"网页布局设置：",[14,130422,130423],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,130425,130426],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,130428,130429],{},"③往盒子里装内容",[25,130431],{"style":126939,"src":130432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[18,130434,130436],{"id":130435},"_911-边框border","9.1.1 边框（border）",[30,130438,130439,130442],{},[33,130440,130441],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[33,130443,130444],{},"语法",[40,130446,130448],{"className":127083,"code":130447,"language":127085,"meta":27,"style":27},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[46,130449,130450,130455,130461,130478],{"__ignoreMap":27},[49,130451,130452],{"class":51,"line":52},[49,130453,130454],{"class":66},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[49,130456,130457,130459],{"class":51,"line":63},[49,130458,52142],{"class":51831},[49,130460,16269],{"class":73},[49,130462,130463,130465,130467,130469,130471,130473,130476],{"class":51,"line":70},[49,130464,71427],{"class":159},[49,130466,51968],{"class":73},[49,130468,1047],{"class":159},[49,130470,52023],{"class":77},[49,130472,52052],{"class":159},[49,130474,130475],{"class":159}," #ccc",[49,130477,1990],{"class":73},[49,130479,130480],{"class":51,"line":219},[49,130481,2264],{"class":73},[610,130483,130484,130492],{},[613,130485,130486],{},[616,130487,130488,130490],{},[619,130489,129685],{"align":621},[619,130491,103227],{"align":621},[633,130493,130494,130502,130510],{},[616,130495,130496,130499],{},[638,130497,130498],{"align":621},"border-width",[638,130500,130501],{"align":621},"定义边框粗细，单位是px",[616,130503,130504,130507],{},[638,130505,130506],{"align":621},"border-style",[638,130508,130509],{"align":621},"边框的样式",[616,130511,130512,130515],{},[638,130513,130514],{"align":621},"border-color",[638,130516,130517],{"align":621},"边框的颜色",[14,130519,130520],{},"边框样式 border-style 可以设置如下值：",[742,130522,130523,130526,130529,130532],{},[33,130524,130525],{},"none：没有边框即忽略所有边框的宽度（默认值）",[33,130527,130528],{},"solid：边框为单实线(最为常用的)",[33,130530,130531],{},"dashed：边框为虚线",[33,130533,130534],{},"dotted：边框为点线",[30,130536,130537],{"start":70},[33,130538,130539],{},"边框的合写分写",[40,130541,130542],{"className":127083,"code":130447,"language":127085,"meta":27,"style":27},[46,130543,130544,130548,130554,130570],{"__ignoreMap":27},[49,130545,130546],{"class":51,"line":52},[49,130547,130454],{"class":66},[49,130549,130550,130552],{"class":51,"line":63},[49,130551,52142],{"class":51831},[49,130553,16269],{"class":73},[49,130555,130556,130558,130560,130562,130564,130566,130568],{"class":51,"line":70},[49,130557,71427],{"class":159},[49,130559,51968],{"class":73},[49,130561,1047],{"class":159},[49,130563,52023],{"class":77},[49,130565,52052],{"class":159},[49,130567,130475],{"class":159},[49,130569,1990],{"class":73},[49,130571,130572],{"class":51,"line":219},[49,130573,2264],{"class":73},[14,130575,130576],{},"边框分开写法：",[40,130578,130580],{"className":127083,"code":130579,"language":127085,"meta":27,"style":27},"\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",[46,130581,130582,130587,130593,130611,130629,130648,130666],{"__ignoreMap":27},[49,130583,130584],{"class":51,"line":52},[49,130585,130586],{"class":66},"\u002F* 边框分开写法 *\u002F\n",[49,130588,130589,130591],{"class":51,"line":63},[49,130590,52142],{"class":51831},[49,130592,16269],{"class":73},[49,130594,130595,130598,130600,130602,130604,130606,130609],{"class":51,"line":70},[49,130596,130597],{"class":159},"  border-top",[49,130599,51968],{"class":73},[49,130601,1047],{"class":159},[49,130603,52023],{"class":77},[49,130605,52052],{"class":159},[49,130607,130608],{"class":159}," #000",[49,130610,1990],{"class":73},[49,130612,130613,130616,130618,130620,130622,130624,130627],{"class":51,"line":219},[49,130614,130615],{"class":159},"  border-right",[49,130617,51968],{"class":73},[49,130619,915],{"class":159},[49,130621,52023],{"class":77},[49,130623,62772],{"class":159},[49,130625,130626],{"class":159}," #333",[49,130628,1990],{"class":73},[49,130630,130631,130634,130636,130638,130640,130643,130646],{"class":51,"line":233},[49,130632,130633],{"class":159},"  border-bottom",[49,130635,51968],{"class":73},[49,130637,909],{"class":159},[49,130639,52023],{"class":77},[49,130641,130642],{"class":159}," dotted",[49,130644,130645],{"class":159}," #666",[49,130647,1990],{"class":73},[49,130649,130650,130653,130655,130657,130659,130661,130664],{"class":51,"line":241},[49,130651,130652],{"class":159},"  border-left",[49,130654,51968],{"class":73},[49,130656,1047],{"class":159},[49,130658,52023],{"class":77},[49,130660,52052],{"class":159},[49,130662,130663],{"class":159}," #999",[49,130665,1990],{"class":73},[49,130667,130668],{"class":51,"line":1920},[49,130669,2264],{"class":73},[30,130671,130672],{"start":219},[33,130673,130674],{},"表格的细线边框",[14,130676,130677],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[40,130679,130681],{"className":127083,"code":130680,"language":127085,"meta":27,"style":27},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[46,130682,130683,130688,130694,130704],{"__ignoreMap":27},[49,130684,130685],{"class":51,"line":52},[49,130686,130687],{"class":66},"\u002F* 表格细线边框合并 *\u002F\n",[49,130689,130690,130692],{"class":51,"line":63},[49,130691,610],{"class":51831},[49,130693,16269],{"class":73},[49,130695,130696,130698,130700,130702],{"class":51,"line":70},[49,130697,71109],{"class":159},[49,130699,51968],{"class":73},[49,130701,65566],{"class":159},[49,130703,1990],{"class":73},[49,130705,130706],{"class":51,"line":219},[49,130707,2264],{"class":73},[14,130709,130710],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[30,130712,130713],{"start":233},[33,130714,130715],{},"解决边框额外增加盒子的实际大小的方法：",[742,130717,130718,130721],{},[33,130719,130720],{},"测量盒子大小的时候,不量边框",[33,130722,130723],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[18,130725,130727],{"id":130726},"_912-内边距","9.1.2 内边距",[30,130729,130730,130733],{},[33,130731,130732],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[33,130734,130444],{},[610,130736,130737,130747],{},[613,130738,130739],{},[616,130740,130741,130744],{},[619,130742,130743],{"align":621},"值的个数",[619,130745,130746],{"align":621},"表达意思",[633,130748,130749,130757,130765,130773],{},[616,130750,130751,130754],{},[638,130752,130753],{"align":621},"padding: 5px;",[638,130755,130756],{"align":621},"1个值，代表上下左右都有5个元素",[616,130758,130759,130762],{},[638,130760,130761],{"align":621},"padding: 5px 10px;",[638,130763,130764],{"align":621},"2个值，代表上下内边距为5像素，左右内边距为10像素",[616,130766,130767,130770],{},[638,130768,130769],{"align":621},"padding: 5px 10px 20px;",[638,130771,130772],{"align":621},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[616,130774,130775,130778],{},[638,130776,130777],{"align":621},"padding: 5px 10px 20px 30px;",[638,130779,130780],{"align":621},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[610,130782,130783,130791],{},[613,130784,130785],{},[616,130786,130787,130789],{},[619,130788,129685],{"align":621},[619,130790,103227],{"align":621},[633,130792,130793,130801,130809,130817],{},[616,130794,130795,130798],{},[638,130796,130797],{"align":621},"padding-left",[638,130799,130800],{"align":621},"左内边距",[616,130802,130803,130806],{},[638,130804,130805],{"align":621},"padding-right",[638,130807,130808],{"align":621},"右内边距",[616,130810,130811,130814],{},[638,130812,130813],{"align":621},"padding-top",[638,130815,130816],{"align":621},"上内边距",[616,130818,130819,130822],{},[638,130820,130821],{"align":621},"padding-bottom",[638,130823,130824],{"align":621},"下内边距",[30,130826,130827],{"start":70},[33,130828,130829],{},"内边距会影响盒子的实际大小",[14,130831,130832],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130834,130835],{},"①内容和边框有了距离，添加了内边距",[14,130837,130838],{},"②padding影响了盒子实际大小",[14,130840,130841],{},"内边距对盒子大小的影响：",[14,130843,130844],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130846,130847],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130849,95751],{},[14,130851,130852],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[18,130854,130856],{"id":130855},"_913-外边距","9.1.3 外边距",[30,130858,130859],{},[33,130860,130861],{},"控制盒子与盒子之间的距离",[610,130863,130864,130872],{},[613,130865,130866],{},[616,130867,130868,130870],{},[619,130869,129685],{"align":621},[619,130871,103227],{"align":621},[633,130873,130874,130882,130890,130898],{},[616,130875,130876,130879],{},[638,130877,130878],{"align":621},"margin-left",[638,130880,130881],{"align":621},"左外边距",[616,130883,130884,130887],{},[638,130885,130886],{"align":621},"margin-right",[638,130888,130889],{"align":621},"右外边距",[616,130891,130892,130895],{},[638,130893,130894],{"align":621},"margin-top",[638,130896,130897],{"align":621},"上外边距",[616,130899,130900,130903],{},[638,130901,130902],{"align":621},"margin-bottom",[638,130904,130905],{"align":621},"下外边距",[30,130907,130908],{"start":63},[33,130909,130910],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130912,130913],{},"①盒子必须指定了宽度（width）",[14,130915,130916],{},"②盒子左右的外边距都设置为 auto",[40,130918,130920],{"className":127083,"code":130919,"language":127085,"meta":27,"style":27},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[46,130921,130922,130927,130934,130950],{"__ignoreMap":27},[49,130923,130924],{"class":51,"line":52},[49,130925,130926],{"class":66},"\u002F* margin 复合写法（同上） *\u002F\n",[49,130928,130929,130932],{"class":51,"line":63},[49,130930,130931],{"class":55},".box",[49,130933,16269],{"class":73},[49,130935,130936,130938,130940,130942,130944,130947],{"class":51,"line":70},[49,130937,71001],{"class":159},[49,130939,51968],{"class":73},[49,130941,1021],{"class":159},[49,130943,52087],{"class":159},[49,130945,130946],{"class":73},";  ",[49,130948,130949],{"class":66},"\u002F* 块级盒子水平居中 *\u002F\n",[49,130951,130952],{"class":51,"line":219},[49,130953,2264],{"class":73},[30,130955,130956],{"start":70},[33,130957,130958],{},"外边距塌陷问题",[14,130960,130961],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[25,130963],{"style":126939,"src":130964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130966,130967],{},"解决方案：",[14,130969,130970],{},"①可以为父亲元素定义上边距",[40,130972,130973],{"className":127083,"code":130919,"language":127085,"meta":27,"style":27},[46,130974,130975,130979,130985,130999],{"__ignoreMap":27},[49,130976,130977],{"class":51,"line":52},[49,130978,130926],{"class":66},[49,130980,130981,130983],{"class":51,"line":63},[49,130982,130931],{"class":55},[49,130984,16269],{"class":73},[49,130986,130987,130989,130991,130993,130995,130997],{"class":51,"line":70},[49,130988,71001],{"class":159},[49,130990,51968],{"class":73},[49,130992,1021],{"class":159},[49,130994,52087],{"class":159},[49,130996,130946],{"class":73},[49,130998,130949],{"class":66},[49,131000,131001],{"class":51,"line":219},[49,131002,2264],{"class":73},[14,131004,131005],{},"②可以为父亲元素定义上内边距",[14,131007,131008],{},"③可以为父亲元素添加overflow:hidden",[25,131010],{"style":126939,"src":131011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[40,131013,131014],{"className":127083,"code":130919,"language":127085,"meta":27,"style":27},[46,131015,131016,131020,131026,131040],{"__ignoreMap":27},[49,131017,131018],{"class":51,"line":52},[49,131019,130926],{"class":66},[49,131021,131022,131024],{"class":51,"line":63},[49,131023,130931],{"class":55},[49,131025,16269],{"class":73},[49,131027,131028,131030,131032,131034,131036,131038],{"class":51,"line":70},[49,131029,71001],{"class":159},[49,131031,51968],{"class":73},[49,131033,1021],{"class":159},[49,131035,52087],{"class":159},[49,131037,130946],{"class":73},[49,131039,130949],{"class":66},[49,131041,131042],{"class":51,"line":219},[49,131043,2264],{"class":73},[25,131045],{"style":126939,"src":131046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,131048,131049],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,131051,131052],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[18,131054,131056],{"id":131055},"_914-清除内外边距","9.1.4 清除内外边距",[14,131058,131059],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[40,131061,131062],{"className":127083,"code":130919,"language":127085,"meta":27,"style":27},[46,131063,131064,131068,131074,131088],{"__ignoreMap":27},[49,131065,131066],{"class":51,"line":52},[49,131067,130926],{"class":66},[49,131069,131070,131072],{"class":51,"line":63},[49,131071,130931],{"class":55},[49,131073,16269],{"class":73},[49,131075,131076,131078,131080,131082,131084,131086],{"class":51,"line":70},[49,131077,71001],{"class":159},[49,131079,51968],{"class":73},[49,131081,1021],{"class":159},[49,131083,52087],{"class":159},[49,131085,130946],{"class":73},[49,131087,130949],{"class":66},[49,131089,131090],{"class":51,"line":219},[49,131091,2264],{"class":73},[14,131093,131094],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[18,131096,131098],{"id":131097},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[742,131100,131101,131104,131107,131110,131113,131116],{},[33,131102,131103],{},"文件→打开 ：可以打开我们要测量的图片",[33,131105,131106],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[33,131108,131109],{},"右击标尺，把里面的单位改为像素",[33,131111,131112],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[33,131114,131115],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[33,131117,131118],{},"用选区拖动 可以测量大小",[25,131120],{"style":126939,"src":131121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[742,131123,131124,131127],{},[33,131125,131126],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[33,131128,131129],{},"吸管取色工具",[25,131131],{"style":126939,"src":131132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[18,131134,131136],{"id":131135},"_916-案例","9.1.6 案例",[30,131138,131139],{},[33,131140,131141],{},"小米商品",[25,131143],{"style":126939,"src":131144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[40,131146,131147],{"className":127083,"code":130919,"language":127085,"meta":27,"style":27},[46,131148,131149,131153,131159,131173],{"__ignoreMap":27},[49,131150,131151],{"class":51,"line":52},[49,131152,130926],{"class":66},[49,131154,131155,131157],{"class":51,"line":63},[49,131156,130931],{"class":55},[49,131158,16269],{"class":73},[49,131160,131161,131163,131165,131167,131169,131171],{"class":51,"line":70},[49,131162,71001],{"class":159},[49,131164,51968],{"class":73},[49,131166,1021],{"class":159},[49,131168,52087],{"class":159},[49,131170,130946],{"class":73},[49,131172,130949],{"class":66},[49,131174,131175],{"class":51,"line":219},[49,131176,2264],{"class":73},[30,131178,131179],{"start":63},[33,131180,131181],{},"快报模块",[25,131183],{"style":126939,"src":131184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[40,131186,131188],{"className":127830,"code":131187,"language":127832,"meta":27,"style":27},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[46,131189,131190,131195,131210,131215],{"__ignoreMap":27},[49,131191,131192],{"class":51,"line":52},[49,131193,131194],{"class":66},"\u003C!-- HTML 代码示例 -->\n",[49,131196,131197,131199,131201,131203,131205,131208],{"class":51,"line":63},[49,131198,1739],{"class":73},[49,131200,52142],{"class":51831},[49,131202,54017],{"class":55},[49,131204,78],{"class":73},[49,131206,131207],{"class":59},"\"example\"",[49,131209,51838],{"class":73},[49,131211,131212],{"class":51,"line":70},[49,131213,131214],{"class":73},"  示例内容\n",[49,131216,131217,131219,131221],{"class":51,"line":219},[49,131218,52316],{"class":73},[49,131220,52142],{"class":51831},[49,131222,51838],{"class":73},[18,131224,131226],{"id":131225},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[30,131228,131229],{},[33,131230,131231],{},"圆角边框",[14,131233,131234],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[25,131236],{"style":126939,"src":131237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[40,131239,131241],{"className":127083,"code":131240,"language":127085,"meta":27,"style":27},"div {\n  border: 1px solid #ccc;\n}\n",[46,131242,131243,131249,131265],{"__ignoreMap":27},[49,131244,131245,131247],{"class":51,"line":52},[49,131246,52142],{"class":51831},[49,131248,16269],{"class":73},[49,131250,131251,131253,131255,131257,131259,131261,131263],{"class":51,"line":63},[49,131252,71427],{"class":159},[49,131254,51968],{"class":73},[49,131256,1047],{"class":159},[49,131258,52023],{"class":77},[49,131260,52052],{"class":159},[49,131262,130475],{"class":159},[49,131264,1990],{"class":73},[49,131266,131267],{"class":51,"line":70},[49,131268,2264],{"class":73},[14,131270,131271],{},"解释:",[742,131273,131274,131277,131280,131283,131286],{},[33,131275,131276],{},"参数值可以为数值或百分比的形式",[33,131278,131279],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[33,131281,131282],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[33,131284,131285],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[33,131287,131288],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[30,131290,131291],{"start":63},[33,131292,131293],{},"盒子阴影",[40,131295,131297],{"className":127083,"code":131296,"language":127085,"meta":27,"style":27},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[46,131298,131299,131305,131342],{"__ignoreMap":27},[49,131300,131301,131303],{"class":51,"line":52},[49,131302,52142],{"class":51831},[49,131304,16269],{"class":73},[49,131306,131307,131310,131312,131314,131316,131318,131320,131322,131324,131326,131328,131330,131332,131334,131336,131338,131340],{"class":51,"line":63},[49,131308,131309],{"class":159},"  box-shadow",[49,131311,51968],{"class":73},[49,131313,1021],{"class":159},[49,131315,15452],{"class":159},[49,131317,52023],{"class":77},[49,131319,2736],{"class":159},[49,131321,52023],{"class":77},[49,131323,79298],{"class":159},[49,131325,841],{"class":73},[49,131327,1021],{"class":159},[49,131329,13132],{"class":73},[49,131331,1021],{"class":159},[49,131333,13132],{"class":73},[49,131335,1021],{"class":159},[49,131337,13132],{"class":73},[49,131339,86741],{"class":159},[49,131341,3416],{"class":73},[49,131343,131344],{"class":51,"line":70},[49,131345,2264],{"class":73},[610,131347,131348,131356],{},[613,131349,131350],{},[616,131351,131352,131354],{},[619,131353,984],{"align":621},[619,131355,28020],{"align":621},[633,131357,131358,131366,131374,131382,131390,131398],{},[616,131359,131360,131363],{},[638,131361,131362],{"align":621},"h-shadow",[638,131364,131365],{"align":621},"必需,水平阴影的位置,允许负值",[616,131367,131368,131371],{},[638,131369,131370],{"align":621},"v-shadow",[638,131372,131373],{"align":621},"必需,垂直阴影的位置,允许负值",[616,131375,131376,131379],{},[638,131377,131378],{"align":621},"blur",[638,131380,131381],{"align":621},"可选,模糊距离,就是影子的虚实",[616,131383,131384,131387],{},[638,131385,131386],{"align":621},"spread",[638,131388,131389],{"align":621},"可选,阴影尺寸",[616,131391,131392,131395],{},[638,131393,131394],{"align":621},"color",[638,131396,131397],{"align":621},"可选,阴影的颜色",[616,131399,131400,131403],{},[638,131401,131402],{"align":621},"inset",[638,131404,131405],{"align":621},"可选,将外部阴影(outset)改为内部阴影",[30,131407,131408],{"start":70},[33,131409,131410],{},"文字阴影",[40,131412,131414],{"className":127083,"code":131413,"language":127085,"meta":27,"style":27},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[46,131415,131416,131422,131461],{"__ignoreMap":27},[49,131417,131418,131420],{"class":51,"line":52},[49,131419,14],{"class":51831},[49,131421,16269],{"class":73},[49,131423,131424,131427,131429,131431,131433,131435,131437,131439,131441,131443,131445,131447,131449,131451,131453,131455,131457,131459],{"class":51,"line":63},[49,131425,131426],{"class":159},"  text-shadow",[49,131428,51968],{"class":73},[49,131430,1047],{"class":159},[49,131432,52023],{"class":77},[49,131434,25807],{"class":159},[49,131436,52023],{"class":77},[49,131438,15452],{"class":159},[49,131440,52023],{"class":77},[49,131442,79298],{"class":159},[49,131444,841],{"class":73},[49,131446,1021],{"class":159},[49,131448,13132],{"class":73},[49,131450,1021],{"class":159},[49,131452,13132],{"class":73},[49,131454,1021],{"class":159},[49,131456,13132],{"class":73},[49,131458,101052],{"class":159},[49,131460,3416],{"class":73},[49,131462,131463],{"class":51,"line":70},[49,131464,2264],{"class":73},[610,131466,131467,131475],{},[613,131468,131469],{},[616,131470,131471,131473],{},[619,131472,984],{"align":621},[619,131474,28020],{"align":621},[633,131476,131477,131483,131490,131497],{},[616,131478,131479,131481],{},[638,131480,131362],{"align":621},[638,131482,131365],{"align":621},[616,131484,131485,131487],{},[638,131486,131370],{"align":621},[638,131488,131489],{"align":621},"必需,垂直阴影位置,允许负值",[616,131491,131492,131494],{},[638,131493,131378],{"align":621},[638,131495,131496],{"align":621},"可选,模糊的距离",[616,131498,131499,131501],{},[638,131500,131394],{"align":621},[638,131502,131397],{"align":621},[782,131504,131506],{"id":131505},"_92-浮动","9.2 浮动",[18,131508,131510],{"id":131509},"_921-浮动介绍","9.2.1 浮动介绍",[14,131512,131513],{},"在16.2中详细介绍",[18,131515,131517],{"id":131516},"_922-清除浮动","9.2.2 清除浮动",[30,131519,131520,131523],{},[33,131521,131522],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[33,131524,131525],{},"清除浮动的本质",[14,131527,131528],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131530,9722],{},[742,131532,131533,131536,131539],{},[33,131534,131535],{},"如果父盒子本身有高度，则不需要清除浮动",[33,131537,131538],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[33,131540,131541],{},"父级有了高度，就不会影响下面的标准流了",[30,131543,131544],{"start":70},[33,131545,131546],{},"清除浮动样式",[40,131548,131550],{"className":127083,"code":131549,"language":127085,"meta":27,"style":27},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[46,131551,131552,131559,131570,131574,131581,131591],{"__ignoreMap":27},[49,131553,131554,131557],{"class":51,"line":52},[49,131555,131556],{"class":55},".left",[49,131558,16269],{"class":73},[49,131560,131561,131564,131566,131568],{"class":51,"line":63},[49,131562,131563],{"class":159},"  float",[49,131565,51968],{"class":73},[49,131567,621],{"class":159},[49,131569,1990],{"class":73},[49,131571,131572],{"class":51,"line":70},[49,131573,2264],{"class":73},[49,131575,131576,131579],{"class":51,"line":219},[49,131577,131578],{"class":55},".right",[49,131580,16269],{"class":73},[49,131582,131583,131585,131587,131589],{"class":51,"line":233},[49,131584,131563],{"class":159},[49,131586,51968],{"class":73},[49,131588,73053],{"class":159},[49,131590,1990],{"class":73},[49,131592,131593],{"class":51,"line":241},[49,131594,2264],{"class":73},[610,131596,131597,131605],{},[613,131598,131599],{},[616,131600,131601,131603],{},[619,131602,127547],{"align":621},[619,131604,28020],{"align":621},[633,131606,131607,131614,131621],{},[616,131608,131609,131611],{},[638,131610,621],{"align":621},[638,131612,131613],{"align":621},"不允许左侧有浮动元素（清除左侧浮动的影响）",[616,131615,131616,131618],{},[638,131617,73053],{"align":621},[638,131619,131620],{"align":621},"不允许右侧有浮动元素（清除右侧浮动的影响）",[616,131622,131623,131626],{},[638,131624,131625],{"align":621},"both",[638,131627,131628],{"align":621},"同时清除左右侧浮动的影响",[14,131630,131631],{},"法一",[14,131633,131634],{},"额外标签法也称为隔墙法",[14,131636,131637],{},"使用方式：",[14,131639,131640],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[40,131642,131643],{"className":127083,"code":131549,"language":127085,"meta":27,"style":27},[46,131644,131645,131651,131661,131665,131671,131681],{"__ignoreMap":27},[49,131646,131647,131649],{"class":51,"line":52},[49,131648,131556],{"class":55},[49,131650,16269],{"class":73},[49,131652,131653,131655,131657,131659],{"class":51,"line":63},[49,131654,131563],{"class":159},[49,131656,51968],{"class":73},[49,131658,621],{"class":159},[49,131660,1990],{"class":73},[49,131662,131663],{"class":51,"line":70},[49,131664,2264],{"class":73},[49,131666,131667,131669],{"class":51,"line":219},[49,131668,131578],{"class":55},[49,131670,16269],{"class":73},[49,131672,131673,131675,131677,131679],{"class":51,"line":233},[49,131674,131563],{"class":159},[49,131676,51968],{"class":73},[49,131678,73053],{"class":159},[49,131680,1990],{"class":73},[49,131682,131683],{"class":51,"line":241},[49,131684,2264],{"class":73},[14,131686,131687],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131689,131690],{},"优点： 通俗易懂，书写方便",[14,131692,131693],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131695,131696],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131698,131699],{},"法二",[14,131701,131702],{},"父级添加overflow属性",[40,131704,131705],{"className":127083,"code":131549,"language":127085,"meta":27,"style":27},[46,131706,131707,131713,131723,131727,131733,131743],{"__ignoreMap":27},[49,131708,131709,131711],{"class":51,"line":52},[49,131710,131556],{"class":55},[49,131712,16269],{"class":73},[49,131714,131715,131717,131719,131721],{"class":51,"line":63},[49,131716,131563],{"class":159},[49,131718,51968],{"class":73},[49,131720,621],{"class":159},[49,131722,1990],{"class":73},[49,131724,131725],{"class":51,"line":70},[49,131726,2264],{"class":73},[49,131728,131729,131731],{"class":51,"line":219},[49,131730,131578],{"class":55},[49,131732,16269],{"class":73},[49,131734,131735,131737,131739,131741],{"class":51,"line":233},[49,131736,131563],{"class":159},[49,131738,51968],{"class":73},[49,131740,73053],{"class":159},[49,131742,1990],{"class":73},[49,131744,131745],{"class":51,"line":241},[49,131746,2264],{"class":73},[14,131748,131749],{},"overflow: hidden;",[14,131751,131752],{},"优点：代码简洁",[14,131754,131755],{},"缺点：无法显示溢出的部分",[14,131757,131758],{},"注意：是给父元素添加代码",[14,131760,131761],{},"法三",[14,131763,131764],{},"父级添加after伪元素",[14,131766,131767,131770],{},[131768,131769],"after",{}," 方式是额外标签法的升级版",[14,131772,131773],{},"使用的时候复制就可以",[40,131775,131776],{"className":127083,"code":131549,"language":127085,"meta":27,"style":27},[46,131777,131778,131784,131794,131798,131804,131814],{"__ignoreMap":27},[49,131779,131780,131782],{"class":51,"line":52},[49,131781,131556],{"class":55},[49,131783,16269],{"class":73},[49,131785,131786,131788,131790,131792],{"class":51,"line":63},[49,131787,131563],{"class":159},[49,131789,51968],{"class":73},[49,131791,621],{"class":159},[49,131793,1990],{"class":73},[49,131795,131796],{"class":51,"line":70},[49,131797,2264],{"class":73},[49,131799,131800,131802],{"class":51,"line":219},[49,131801,131578],{"class":55},[49,131803,16269],{"class":73},[49,131805,131806,131808,131810,131812],{"class":51,"line":233},[49,131807,131563],{"class":159},[49,131809,51968],{"class":73},[49,131811,73053],{"class":159},[49,131813,1990],{"class":73},[49,131815,131816],{"class":51,"line":241},[49,131817,2264],{"class":73},[14,131819,131820],{},"优点：没有增加标签，结构更简单",[14,131822,131823],{},"缺点：照顾低版本浏览器",[14,131825,131826],{},"代表网站： 百度、淘宝网、网易等",[14,131828,131829],{},"法四",[14,131831,131832],{},"父级添加双伪元素",[40,131834,131835],{"className":127083,"code":131549,"language":127085,"meta":27,"style":27},[46,131836,131837,131843,131853,131857,131863,131873],{"__ignoreMap":27},[49,131838,131839,131841],{"class":51,"line":52},[49,131840,131556],{"class":55},[49,131842,16269],{"class":73},[49,131844,131845,131847,131849,131851],{"class":51,"line":63},[49,131846,131563],{"class":159},[49,131848,51968],{"class":73},[49,131850,621],{"class":159},[49,131852,1990],{"class":73},[49,131854,131855],{"class":51,"line":70},[49,131856,2264],{"class":73},[49,131858,131859,131861],{"class":51,"line":219},[49,131860,131578],{"class":55},[49,131862,16269],{"class":73},[49,131864,131865,131867,131869,131871],{"class":51,"line":233},[49,131866,131563],{"class":159},[49,131868,51968],{"class":73},[49,131870,73053],{"class":159},[49,131872,1990],{"class":73},[49,131874,131875],{"class":51,"line":241},[49,131876,2264],{"class":73},[14,131878,131879],{},"优点：代码更简洁",[14,131881,131823],{},[14,131883,131884],{},"代表网站：小米、腾讯等",[782,131886,131888],{"id":131887},"_93-ps切图","9.3 PS切图",[18,131890,131892],{"id":131891},"_931-常见图片格式","9.3.1 常见图片格式",[610,131894,131895,131905],{},[613,131896,131897],{},[616,131898,131899,131902],{},[619,131900,131901],{"align":621},"jpg图像格式",[619,131903,131904],{"align":621},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[633,131906,131907,131915,131923],{},[616,131908,131909,131912],{},[638,131910,131911],{"align":621},"gif图像格式",[638,131913,131914],{"align":621},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[616,131916,131917,131920],{},[638,131918,131919],{"align":621},"png图像格式",[638,131921,131922],{"align":621},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[616,131924,131925,131928],{},[638,131926,131927],{"align":621},"PSD图像格式",[638,131929,131930],{"align":621},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[18,131932,131934],{"id":131933},"_932-图层切图","9.3.2 图层切图",[14,131936,131937],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131939,131940],{},"按住shift选中两个图层->图层菜单->合并图层",[18,131942,131944],{"id":131943},"_933-切片切图","9.3.3 切片切图",[742,131946,131947,131950],{},[33,131948,131949],{},"利用切片工具手动划出",[33,131951,131952],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[18,131954,131956],{"id":131955},"_934-切图步骤","9.3.4 切图步骤",[14,131958,131959],{},"用切片工具选中：",[25,131961],{"style":126939,"src":131962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131964,131965],{},"文件 -> 导出",[25,131967],{"style":126939,"src":131968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[757,131970,131971],{},"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":27,"searchDepth":63,"depth":63,"links":131973},[131974,131983,131987],{"id":130410,"depth":63,"text":130411,"children":131975},[131976,131977,131978,131979,131980,131981,131982],{"id":130435,"depth":70,"text":130436},{"id":130726,"depth":70,"text":130727},{"id":130855,"depth":70,"text":130856},{"id":131055,"depth":70,"text":131056},{"id":131097,"depth":70,"text":131098},{"id":131135,"depth":70,"text":131136},{"id":131225,"depth":70,"text":131226},{"id":131505,"depth":63,"text":131506,"children":131984},[131985,131986],{"id":131509,"depth":70,"text":131510},{"id":131516,"depth":70,"text":131517},{"id":131887,"depth":63,"text":131888,"children":131988},[131989,131990,131991,131992],{"id":131891,"depth":70,"text":131892},{"id":131933,"depth":70,"text":131934},{"id":131943,"depth":70,"text":131944},{"id":131955,"depth":70,"text":131956},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130402,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131999,"title":132000,"body":132001,"description":24072,"extension":766,"meta":132642,"navigation":398,"path":132643,"seo":132644,"stem":132645,"__hash__":132646},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132002,"toc":132630},[132003,132006,132010,132036,132070,132074,132078,132081,132123,132130,132140,132148,132150,132153,132156,132159,132166,132180,132184,132187,132216,132220,132223,132237,132241,132244,132272,132276,132279,132305,132309,132314,132347,132352,132380,132384,132401,132447,132452,132496,132513,132620,132628],[10,132004,132000],{"id":132005},"_10-css规范与学成在线案例",[782,132007,132009],{"id":132008},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[30,132011,132012,132018,132024,132030],{},[33,132013,132014,132017],{},[112,132015,132016],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[33,132019,132020,132023],{},[112,132021,132022],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[33,132025,132026,132029],{},[112,132027,132028],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[33,132031,132032,132035],{},[112,132033,132034],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[40,132037,132038],{"className":127083,"code":130447,"language":127085,"meta":27,"style":27},[46,132039,132040,132044,132050,132066],{"__ignoreMap":27},[49,132041,132042],{"class":51,"line":52},[49,132043,130454],{"class":66},[49,132045,132046,132048],{"class":51,"line":63},[49,132047,52142],{"class":51831},[49,132049,16269],{"class":73},[49,132051,132052,132054,132056,132058,132060,132062,132064],{"class":51,"line":70},[49,132053,71427],{"class":159},[49,132055,51968],{"class":73},[49,132057,1047],{"class":159},[49,132059,52023],{"class":77},[49,132061,52052],{"class":159},[49,132063,130475],{"class":159},[49,132065,1990],{"class":73},[49,132067,132068],{"class":51,"line":219},[49,132069,2264],{"class":73},[782,132071,132073],{"id":132072},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[18,132075,132077],{"id":132076},"_1021-header头部制作","10.2.1 header头部制作",[25,132079],{"style":126939,"src":132080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[742,132082,132083,132090,132097,132103,132110,132117],{},[33,132084,132085,132086,132089],{},"1号是版心盒子 ",[112,132087,132088],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[33,132091,132092,132093,132096],{},"版心盒子 里面包含 2号盒子 ",[112,132094,132095],{},"logo"," 图标",[33,132098,132099,132100,132102],{},"版心盒子 里面包含 3号盒子 ",[112,132101,54244],{}," 导航栏",[33,132104,132105,132106,132109],{},"版心盒子 里面包含 4号盒子 ",[112,132107,132108],{},"search"," 搜索框",[33,132111,132112,132113,132116],{},"版心盒子 里面包含 5号盒子 ",[112,132114,132115],{},"user"," 个人信息",[33,132118,132119,132120],{},"注意，要求里面的 ",[112,132121,132122],{},"4个子盒子 必须都浮动",[30,132124,132125],{},[33,132126,132127],{},[112,132128,132129],{},"导航栏注意点:",[14,132131,132132,132133,132136,132137],{},"实际开发中， ",[112,132134,132135],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[112,132138,132139],{},"用 li 包含链接(li+a)的做法",[742,132141,132142,132145],{},[33,132143,132144],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[33,132146,132147],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,132149,9722],{},[14,132151,132152],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,132154,132155],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,132157,132158],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[30,132160,132161],{"start":63},[33,132162,132163],{},[112,132164,132165],{},"4号盒子search的细节：",[742,132167,132168,132171,132174],{},[33,132169,132170],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[33,132172,132173],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[33,132175,132176,132179],{},[46,132177,132178],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[18,132181,132183],{"id":132182},"_1022-banner制作","10.2.2 banner制作",[25,132185],{"style":126939,"src":132186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[742,132188,132189,132196,132202,132209],{},[33,132190,132191,132192,132195],{},"1号盒子是通栏的大盒子 ",[112,132193,132194],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[33,132197,132198,132199,132201],{},"2号盒子是版心 ",[112,132200,1624],{}," ， 要水平居中对齐",[33,132203,132204,132205,132208],{},"3号盒子版心内，左对齐 ",[112,132206,132207],{},"subnav"," 侧导航栏",[33,132210,132211,132212,132215],{},"4号盒子版心内，右对齐 ",[112,132213,132214],{},"course"," 课程",[18,132217,132219],{"id":132218},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[25,132221],{"style":126939,"src":132222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[742,132224,132225,132228,132231,132234],{},[33,132226,132227],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[33,132229,132230],{},"1号盒子是标题 H3 左侧浮动",[33,132232,132233],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[33,132235,132236],{},"3号盒子 右浮动 mod 修改",[18,132238,132240],{"id":132239},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[25,132242],{"style":126939,"src":132243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[742,132245,132246,132252,132259,132266,132269],{},[33,132247,132248,132249,132251],{},"1号盒子为最大的盒子 ",[112,132250,54245],{}," 版心水平居中对齐",[33,132253,132254,132255,132258],{},"2号盒子为上面部分 ",[112,132256,132257],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[33,132260,132261,132262,132265],{},"3号盒子为底下部分 ",[112,132263,132264],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[33,132267,132268],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[33,132270,132271],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[18,132273,132275],{"id":132274},"_1025-底部模块制作","10.2.5 底部模块制作",[25,132277],{"style":126939,"src":132278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[742,132280,132281,132288,132291,132298],{},[33,132282,132283,132284,132287],{},"1号盒子通栏大盒子 底部 ",[112,132285,132286],{},"footer"," 给高度 底色是白色",[33,132289,132290],{},"2号盒子版心水平居中",[33,132292,132293,132294,132297],{},"3号盒子版权 ",[112,132295,132296],{},"copyright"," 左对齐",[33,132299,132300,132301,132304],{},"4号盒子 链接组 ",[112,132302,132303],{},"links"," 右对齐",[18,132306,132308],{"id":132307},"_1026-代码模块","10.2.6 代码模块",[30,132310,132311],{},[33,132312,132313],{},"html部分",[40,132315,132317],{"className":127830,"code":132316,"language":127832,"meta":27,"style":27},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[46,132318,132319],{"__ignoreMap":27},[49,132320,132321,132323,132325,132327,132329,132332,132335,132337,132340,132343,132345],{"class":51,"line":52},[49,132322,1739],{"class":73},[49,132324,124],{"class":51831},[49,132326,61588],{"class":55},[49,132328,78],{"class":73},[49,132330,132331],{"class":59},"\"https:\u002F\u002Fexample.com\"",[49,132333,132334],{"class":55}," target",[49,132336,78],{"class":73},[49,132338,132339],{"class":59},"\"_blank\"",[49,132341,132342],{"class":73},">链接文字\u003C\u002F",[49,132344,124],{"class":51831},[49,132346,51838],{"class":73},[30,132348,132349],{"start":63},[33,132350,132351],{},"css部分",[40,132353,132354],{"className":127830,"code":132316,"language":127832,"meta":27,"style":27},[46,132355,132356],{"__ignoreMap":27},[49,132357,132358,132360,132362,132364,132366,132368,132370,132372,132374,132376,132378],{"class":51,"line":52},[49,132359,1739],{"class":73},[49,132361,124],{"class":51831},[49,132363,61588],{"class":55},[49,132365,78],{"class":73},[49,132367,132331],{"class":59},[49,132369,132334],{"class":55},[49,132371,78],{"class":73},[49,132373,132339],{"class":59},[49,132375,132342],{"class":73},[49,132377,124],{"class":51831},[49,132379,51838],{"class":73},[18,132381,132383],{"id":132382},"_1027-收获","10.2.7 收获",[30,132385,132386,132389,132392,132395,132398],{},[33,132387,132388],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[33,132390,132391],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[33,132393,132394],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[33,132396,132397],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[33,132399,132400],{},"遗忘代码",[40,132402,132404],{"className":127083,"code":132403,"language":127085,"meta":27,"style":27},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[46,132405,132406,132428,132433,132443],{"__ignoreMap":27},[49,132407,132408,132410,132412,132414,132416,132418,132420,132422,132424,132426],{"class":51,"line":52},[49,132409,52142],{"class":51831},[49,132411,13132],{"class":73},[49,132413,14],{"class":51831},[49,132415,13132],{"class":73},[49,132417,10],{"class":51831},[49,132419,13132],{"class":73},[49,132421,742],{"class":51831},[49,132423,13132],{"class":73},[49,132425,33],{"class":51831},[49,132427,16269],{"class":73},[49,132429,132430],{"class":51,"line":63},[49,132431,132432],{"class":66},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[49,132434,132435,132437,132439,132441],{"class":51,"line":70},[49,132436,128699],{"class":159},[49,132438,51968],{"class":73},[49,132440,61400],{"class":159},[49,132442,1990],{"class":73},[49,132444,132445],{"class":51,"line":219},[49,132446,2264],{"class":73},[30,132448,132449],{"start":241},[33,132450,132451],{},"html引css的程序",[40,132453,132454],{"className":127083,"code":132403,"language":127085,"meta":27,"style":27},[46,132455,132456,132478,132482,132492],{"__ignoreMap":27},[49,132457,132458,132460,132462,132464,132466,132468,132470,132472,132474,132476],{"class":51,"line":52},[49,132459,52142],{"class":51831},[49,132461,13132],{"class":73},[49,132463,14],{"class":51831},[49,132465,13132],{"class":73},[49,132467,10],{"class":51831},[49,132469,13132],{"class":73},[49,132471,742],{"class":51831},[49,132473,13132],{"class":73},[49,132475,33],{"class":51831},[49,132477,16269],{"class":73},[49,132479,132480],{"class":51,"line":63},[49,132481,132432],{"class":66},[49,132483,132484,132486,132488,132490],{"class":51,"line":70},[49,132485,128699],{"class":159},[49,132487,51968],{"class":73},[49,132489,61400],{"class":159},[49,132491,1990],{"class":73},[49,132493,132494],{"class":51,"line":219},[49,132495,2264],{"class":73},[30,132497,132498,132501,132504,132507,132510],{"start":1920},[33,132499,132500],{},"浮动的盒子不会有外边距合并问题",[33,132502,132503],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[33,132505,132506],{},"ctrl+g快速定位行；shift+alt多个光标",[33,132508,132509],{},"学习上方各个模块的选择器起名方法，以后就这样用",[33,132511,132512],{},"在写选择器时尽量写全一些，例如",[40,132514,132516],{"className":127083,"code":132515,"language":127085,"meta":27,"style":27},"\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",[46,132517,132518,132523,132539,132544,132559,132564,132579,132584,132599,132604],{"__ignoreMap":27},[49,132519,132520],{"class":51,"line":52},[49,132521,132522],{"class":66},"\u002F* 静态定位（默认） *\u002F\n",[49,132524,132525,132528,132530,132532,132534,132537],{"class":51,"line":63},[49,132526,132527],{"class":55},".static",[49,132529,80338],{"class":73},[49,132531,129443],{"class":159},[49,132533,51968],{"class":73},[49,132535,132536],{"class":159},"static",[49,132538,130013],{"class":73},[49,132540,132541],{"class":51,"line":70},[49,132542,132543],{"class":66},"\u002F* 相对定位 *\u002F\n",[49,132545,132546,132549,132551,132553,132555,132557],{"class":51,"line":219},[49,132547,132548],{"class":55},".relative",[49,132550,80338],{"class":73},[49,132552,129443],{"class":159},[49,132554,51968],{"class":73},[49,132556,55295],{"class":159},[49,132558,130013],{"class":73},[49,132560,132561],{"class":51,"line":233},[49,132562,132563],{"class":66},"\u002F* 绝对定位 *\u002F\n",[49,132565,132566,132569,132571,132573,132575,132577],{"class":51,"line":241},[49,132567,132568],{"class":55},".absolute",[49,132570,80338],{"class":73},[49,132572,129443],{"class":159},[49,132574,51968],{"class":73},[49,132576,55362],{"class":159},[49,132578,130013],{"class":73},[49,132580,132581],{"class":51,"line":1920},[49,132582,132583],{"class":66},"\u002F* 固定定位 *\u002F\n",[49,132585,132586,132589,132591,132593,132595,132597],{"class":51,"line":2011},[49,132587,132588],{"class":55},".fixed",[49,132590,80338],{"class":73},[49,132592,129443],{"class":159},[49,132594,51968],{"class":73},[49,132596,86764],{"class":159},[49,132598,130013],{"class":73},[49,132600,132601],{"class":51,"line":2017},[49,132602,132603],{"class":66},"\u002F* 粘性定位 *\u002F\n",[49,132605,132606,132609,132611,132613,132615,132618],{"class":51,"line":2029},[49,132607,132608],{"class":55},".sticky",[49,132610,80338],{"class":73},[49,132612,129443],{"class":159},[49,132614,51968],{"class":73},[49,132616,132617],{"class":159},"sticky",[49,132619,130013],{"class":73},[30,132621,132622,132625],{"start":2316},[33,132623,132624],{},"一定要用好注释",[33,132626,132627],{},"浮动的盒子不会有外边距合并的问题",[757,132629,131971],{},{"title":27,"searchDepth":63,"depth":63,"links":132631},[132632,132633],{"id":132008,"depth":63,"text":132009},{"id":132072,"depth":63,"text":132073,"children":132634},[132635,132636,132637,132638,132639,132640,132641],{"id":132076,"depth":70,"text":132077},{"id":132182,"depth":70,"text":132183},{"id":132218,"depth":70,"text":132219},{"id":132239,"depth":70,"text":132240},{"id":132274,"depth":70,"text":132275},{"id":132307,"depth":70,"text":132308},{"id":132382,"depth":70,"text":132383},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132000,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132648,"title":132649,"body":132650,"description":24072,"extension":766,"meta":134136,"navigation":398,"path":134137,"seo":134138,"stem":134139,"__hash__":134140},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132651,"toc":134128},[132652,132655,132659,132663,132674,132678,132695,132739,132772,132775,132792,132795,132798,132842,132846,132850,132853,132856,132860,132863,132874,132937,132978,132981,132996,133050,133058,133061,133072,133126,133152,133155,133168,133222,133254,133308,133331,133385,133388,133391,133398,133452,133473,133527,133530,133533,133618,133626,133683,133706,133710,133713,133731,133735,133754,133808,133846,133850,133853,133856,133878,133882,133890,133893,133898,133909,133912,133916,133930,133974,133977,133981,133984,133989,134015,134020,134097,134100,134104,134107,134110,134113,134116,134119,134122,134125],[10,132653,132649],{"id":132654},"_11-传统布局与定位体系",[782,132656,132658],{"id":132657},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[18,132660,132662],{"id":132661},"_1111-普通流标准流","11.1.1 普通流（标准流）",[742,132664,132665,132668,132671],{},[33,132666,132667],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[33,132669,132670],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[33,132672,132673],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[18,132675,132677],{"id":132676},"_1112-浮动","11.1.2 浮动",[742,132679,132680,132683,132686,132689,132692],{},[33,132681,132682],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[33,132684,132685],{},"浮动可以改变元素标签默认的排列方式",[33,132687,132688],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[33,132690,132691],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[33,132693,132694],{},"在使用行内块转换时盒子之间是有空隙的",[40,132696,132697],{"className":127083,"code":131549,"language":127085,"meta":27,"style":27},[46,132698,132699,132705,132715,132719,132725,132735],{"__ignoreMap":27},[49,132700,132701,132703],{"class":51,"line":52},[49,132702,131556],{"class":55},[49,132704,16269],{"class":73},[49,132706,132707,132709,132711,132713],{"class":51,"line":63},[49,132708,131563],{"class":159},[49,132710,51968],{"class":73},[49,132712,621],{"class":159},[49,132714,1990],{"class":73},[49,132716,132717],{"class":51,"line":70},[49,132718,2264],{"class":73},[49,132720,132721,132723],{"class":51,"line":219},[49,132722,131578],{"class":55},[49,132724,16269],{"class":73},[49,132726,132727,132729,132731,132733],{"class":51,"line":233},[49,132728,131563],{"class":159},[49,132730,51968],{"class":73},[49,132732,73053],{"class":159},[49,132734,1990],{"class":73},[49,132736,132737],{"class":51,"line":241},[49,132738,2264],{"class":73},[610,132740,132741,132749],{},[613,132742,132743],{},[616,132744,132745,132747],{},[619,132746,127547],{"align":621},[619,132748,28020],{"align":621},[633,132750,132751,132758,132765],{},[616,132752,132753,132755],{},[638,132754,55268],{"align":621},[638,132756,132757],{"align":621},"元素不浮动（默认值）",[616,132759,132760,132762],{},[638,132761,621],{"align":621},[638,132763,132764],{"align":621},"元素向左浮动",[616,132766,132767,132769],{},[638,132768,73053],{"align":621},[638,132770,132771],{"align":621},"元素向右浮动",[14,132773,132774],{},"浮动重点：",[742,132776,132777,132780,132783,132786,132789],{},[33,132778,132779],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[33,132781,132782],{},"浮动的元素会一行内显示并且元素顶部对齐",[33,132784,132785],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[33,132787,132788],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[33,132790,132791],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132793,132794],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132796,132797],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[40,132799,132800],{"className":127083,"code":131549,"language":127085,"meta":27,"style":27},[46,132801,132802,132808,132818,132822,132828,132838],{"__ignoreMap":27},[49,132803,132804,132806],{"class":51,"line":52},[49,132805,131556],{"class":55},[49,132807,16269],{"class":73},[49,132809,132810,132812,132814,132816],{"class":51,"line":63},[49,132811,131563],{"class":159},[49,132813,51968],{"class":73},[49,132815,621],{"class":159},[49,132817,1990],{"class":73},[49,132819,132820],{"class":51,"line":70},[49,132821,2264],{"class":73},[49,132823,132824,132826],{"class":51,"line":219},[49,132825,131578],{"class":55},[49,132827,16269],{"class":73},[49,132829,132830,132832,132834,132836],{"class":51,"line":233},[49,132831,131563],{"class":159},[49,132833,51968],{"class":73},[49,132835,73053],{"class":159},[49,132837,1990],{"class":73},[49,132839,132840],{"class":51,"line":241},[49,132841,2264],{"class":73},[18,132843,132845],{"id":132844},"_1113-定位","11.1.3 定位",[130,132847,132849],{"id":132848},"_11131-使用场景","11.1.3.1 使用场景",[14,132851,132852],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132854,132855],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[130,132857,132859],{"id":132858},"_11132-定位组成","11.1.3.2 定位组成",[14,132861,132862],{},"定位 = 定位模式 + 边偏移",[30,132864,132865],{},[33,132866,132867,132870,132871],{},[112,132868,132869],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[112,132872,132873],{},"定位模式",[40,132875,132877],{"className":127083,"code":132876,"language":127085,"meta":27,"style":27},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[46,132878,132879,132885,132899,132916,132933],{"__ignoreMap":27},[49,132880,132881,132883],{"class":51,"line":52},[49,132882,130931],{"class":55},[49,132884,16269],{"class":73},[49,132886,132887,132890,132892,132894,132896],{"class":51,"line":63},[49,132888,132889],{"class":159},"  position",[49,132891,51968],{"class":73},[49,132893,55295],{"class":159},[49,132895,130946],{"class":73},[49,132897,132898],{"class":66},"\u002F* 定位模式 *\u002F\n",[49,132900,132901,132904,132906,132908,132910,132913],{"class":51,"line":70},[49,132902,132903],{"class":159},"  top",[49,132905,51968],{"class":73},[49,132907,1275],{"class":159},[49,132909,52023],{"class":77},[49,132911,132912],{"class":73},";           ",[49,132914,132915],{"class":66},"\u002F* 边偏移：上 *\u002F\n",[49,132917,132918,132921,132923,132925,132927,132930],{"class":51,"line":219},[49,132919,132920],{"class":159},"  left",[49,132922,51968],{"class":73},[49,132924,1529],{"class":159},[49,132926,52023],{"class":77},[49,132928,132929],{"class":73},";          ",[49,132931,132932],{"class":66},"\u002F* 边偏移：左 *\u002F\n",[49,132934,132935],{"class":51,"line":233},[49,132936,2264],{"class":73},[610,132938,132939,132948],{},[613,132940,132941],{},[616,132942,132943,132945],{},[619,132944,984],{"align":621},[619,132946,132947],{"align":621},"语义",[633,132949,132950,132957,132964,132971],{},[616,132951,132952,132954],{},[638,132953,132536],{"align":621},[638,132955,132956],{"align":621},"静态定位",[616,132958,132959,132961],{},[638,132960,55295],{"align":621},[638,132962,132963],{"align":621},"相对定位",[616,132965,132966,132968],{},[638,132967,55362],{"align":621},[638,132969,132970],{"align":621},"绝对定位",[616,132972,132973,132975],{},[638,132974,86764],{"align":621},[638,132976,132977],{"align":621},"固定定位",[14,132979,132980],{},"（1）静态定位：",[742,132982,132983,132994],{},[33,132984,132985,132986,132989,132990,132993],{},"静态定位是元素的 ",[112,132987,132988],{},"默认定位方式"," ， ",[112,132991,132992],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[33,132995,5878],{},[40,132997,132998],{"className":127083,"code":132876,"language":127085,"meta":27,"style":27},[46,132999,133000,133006,133018,133032,133046],{"__ignoreMap":27},[49,133001,133002,133004],{"class":51,"line":52},[49,133003,130931],{"class":55},[49,133005,16269],{"class":73},[49,133007,133008,133010,133012,133014,133016],{"class":51,"line":63},[49,133009,132889],{"class":159},[49,133011,51968],{"class":73},[49,133013,55295],{"class":159},[49,133015,130946],{"class":73},[49,133017,132898],{"class":66},[49,133019,133020,133022,133024,133026,133028,133030],{"class":51,"line":70},[49,133021,132903],{"class":159},[49,133023,51968],{"class":73},[49,133025,1275],{"class":159},[49,133027,52023],{"class":77},[49,133029,132912],{"class":73},[49,133031,132915],{"class":66},[49,133033,133034,133036,133038,133040,133042,133044],{"class":51,"line":219},[49,133035,132920],{"class":159},[49,133037,51968],{"class":73},[49,133039,1529],{"class":159},[49,133041,52023],{"class":77},[49,133043,132929],{"class":73},[49,133045,132932],{"class":66},[49,133047,133048],{"class":51,"line":233},[49,133049,2264],{"class":73},[742,133051,133052,133055],{},[33,133053,133054],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[33,133056,133057],{},"静态定位在布局时我们几乎不用的",[14,133059,133060],{},"（2）相对定位",[742,133062,133063,133070],{},[33,133064,133065,133066,133069],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[112,133067,133068],{},"原来的位置"," 来说的（自恋型）",[33,133071,5878],{},[40,133073,133074],{"className":127083,"code":132876,"language":127085,"meta":27,"style":27},[46,133075,133076,133082,133094,133108,133122],{"__ignoreMap":27},[49,133077,133078,133080],{"class":51,"line":52},[49,133079,130931],{"class":55},[49,133081,16269],{"class":73},[49,133083,133084,133086,133088,133090,133092],{"class":51,"line":63},[49,133085,132889],{"class":159},[49,133087,51968],{"class":73},[49,133089,55295],{"class":159},[49,133091,130946],{"class":73},[49,133093,132898],{"class":66},[49,133095,133096,133098,133100,133102,133104,133106],{"class":51,"line":70},[49,133097,132903],{"class":159},[49,133099,51968],{"class":73},[49,133101,1275],{"class":159},[49,133103,52023],{"class":77},[49,133105,132912],{"class":73},[49,133107,132915],{"class":66},[49,133109,133110,133112,133114,133116,133118,133120],{"class":51,"line":219},[49,133111,132920],{"class":159},[49,133113,51968],{"class":73},[49,133115,1529],{"class":159},[49,133117,52023],{"class":77},[49,133119,132929],{"class":73},[49,133121,132932],{"class":66},[49,133123,133124],{"class":51,"line":233},[49,133125,2264],{"class":73},[742,133127,133128],{},[33,133129,133130,133131,133133,133134,133136,133137,133140,133141,133144,133145,133147,133148,133151],{},"相对定位的特点：",[54247,133132],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54247,133135],{},"  ② ",[112,133138,133139],{},"原来"," 在标准流的 ",[112,133142,133143],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54247,133146],{},"  ③因此， ",[112,133149,133150],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,133153,133154],{},"（3）绝对定位",[742,133156,133157,133166],{},[33,133158,133159,133161,133162,133165],{},[112,133160,132970],{}," 是元素在移动位置的时候，是相对于它 ",[112,133163,133164],{},"祖先元素"," 来说的（拼爹型）",[33,133167,5878],{},[40,133169,133170],{"className":127083,"code":132876,"language":127085,"meta":27,"style":27},[46,133171,133172,133178,133190,133204,133218],{"__ignoreMap":27},[49,133173,133174,133176],{"class":51,"line":52},[49,133175,130931],{"class":55},[49,133177,16269],{"class":73},[49,133179,133180,133182,133184,133186,133188],{"class":51,"line":63},[49,133181,132889],{"class":159},[49,133183,51968],{"class":73},[49,133185,55295],{"class":159},[49,133187,130946],{"class":73},[49,133189,132898],{"class":66},[49,133191,133192,133194,133196,133198,133200,133202],{"class":51,"line":70},[49,133193,132903],{"class":159},[49,133195,51968],{"class":73},[49,133197,1275],{"class":159},[49,133199,52023],{"class":77},[49,133201,132912],{"class":73},[49,133203,132915],{"class":66},[49,133205,133206,133208,133210,133212,133214,133216],{"class":51,"line":219},[49,133207,132920],{"class":159},[49,133209,51968],{"class":73},[49,133211,1529],{"class":159},[49,133213,52023],{"class":77},[49,133215,132929],{"class":73},[49,133217,132932],{"class":66},[49,133219,133220],{"class":51,"line":233},[49,133221,2264],{"class":73},[742,133223,133224,133239,133248,133251],{},[33,133225,133226,133227,133229,133230,133232,133233,133235,133236,133238],{},"绝对定位的特点：",[54247,133228],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54247,133231],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54247,133234],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54247,133237],{},"  (4)固定定位",[33,133240,133241,133243,133244,133247],{},[112,133242,132977],{}," 是元素 ",[112,133245,133246],{},"固定于浏览器可视区的位置"," 。（认死理型）",[33,133249,133250],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[33,133252,133253],{},"语法:",[40,133255,133256],{"className":127083,"code":132876,"language":127085,"meta":27,"style":27},[46,133257,133258,133264,133276,133290,133304],{"__ignoreMap":27},[49,133259,133260,133262],{"class":51,"line":52},[49,133261,130931],{"class":55},[49,133263,16269],{"class":73},[49,133265,133266,133268,133270,133272,133274],{"class":51,"line":63},[49,133267,132889],{"class":159},[49,133269,51968],{"class":73},[49,133271,55295],{"class":159},[49,133273,130946],{"class":73},[49,133275,132898],{"class":66},[49,133277,133278,133280,133282,133284,133286,133288],{"class":51,"line":70},[49,133279,132903],{"class":159},[49,133281,51968],{"class":73},[49,133283,1275],{"class":159},[49,133285,52023],{"class":77},[49,133287,132912],{"class":73},[49,133289,132915],{"class":66},[49,133291,133292,133294,133296,133298,133300,133302],{"class":51,"line":219},[49,133293,132920],{"class":159},[49,133295,51968],{"class":73},[49,133297,1529],{"class":159},[49,133299,52023],{"class":77},[49,133301,132929],{"class":73},[49,133303,132932],{"class":66},[49,133305,133306],{"class":51,"line":233},[49,133307,2264],{"class":73},[742,133309,133310,133319],{},[33,133311,133312,133313,133315,133316,133318],{},"特点:",[54247,133314],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54247,133317],{},"  ②固定定位不再占有原先的位置,完全脱标",[33,133320,133321,133322,133324,133325,133327,133328,133330],{},"固定在版心位置的方法:",[54247,133323],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54247,133326],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54247,133329],{},"  实例：",[40,133332,133333],{"className":127083,"code":132876,"language":127085,"meta":27,"style":27},[46,133334,133335,133341,133353,133367,133381],{"__ignoreMap":27},[49,133336,133337,133339],{"class":51,"line":52},[49,133338,130931],{"class":55},[49,133340,16269],{"class":73},[49,133342,133343,133345,133347,133349,133351],{"class":51,"line":63},[49,133344,132889],{"class":159},[49,133346,51968],{"class":73},[49,133348,55295],{"class":159},[49,133350,130946],{"class":73},[49,133352,132898],{"class":66},[49,133354,133355,133357,133359,133361,133363,133365],{"class":51,"line":70},[49,133356,132903],{"class":159},[49,133358,51968],{"class":73},[49,133360,1275],{"class":159},[49,133362,52023],{"class":77},[49,133364,132912],{"class":73},[49,133366,132915],{"class":66},[49,133368,133369,133371,133373,133375,133377,133379],{"class":51,"line":219},[49,133370,132920],{"class":159},[49,133372,51968],{"class":73},[49,133374,1529],{"class":159},[49,133376,52023],{"class":77},[49,133378,132929],{"class":73},[49,133380,132932],{"class":66},[49,133382,133383],{"class":51,"line":233},[49,133384,2264],{"class":73},[25,133386],{"style":126939,"src":133387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,133389,133390],{},"(5)粘性定位",[742,133392,133393,133396],{},[33,133394,133395],{},"粘性定位可以被认为是相对定位和固定定位的混合",[33,133397,5878],{},[40,133399,133400],{"className":127083,"code":132876,"language":127085,"meta":27,"style":27},[46,133401,133402,133408,133420,133434,133448],{"__ignoreMap":27},[49,133403,133404,133406],{"class":51,"line":52},[49,133405,130931],{"class":55},[49,133407,16269],{"class":73},[49,133409,133410,133412,133414,133416,133418],{"class":51,"line":63},[49,133411,132889],{"class":159},[49,133413,51968],{"class":73},[49,133415,55295],{"class":159},[49,133417,130946],{"class":73},[49,133419,132898],{"class":66},[49,133421,133422,133424,133426,133428,133430,133432],{"class":51,"line":70},[49,133423,132903],{"class":159},[49,133425,51968],{"class":73},[49,133427,1275],{"class":159},[49,133429,52023],{"class":77},[49,133431,132912],{"class":73},[49,133433,132915],{"class":66},[49,133435,133436,133438,133440,133442,133444,133446],{"class":51,"line":219},[49,133437,132920],{"class":159},[49,133439,51968],{"class":73},[49,133441,1529],{"class":159},[49,133443,52023],{"class":77},[49,133445,132929],{"class":73},[49,133447,132932],{"class":66},[49,133449,133450],{"class":51,"line":233},[49,133451,2264],{"class":73},[742,133453,133454],{},[33,133455,133456,133457,133459,133460,133462,133463,133465,133466,133469,133470,133472],{},"粘性定位的特点：",[54247,133458],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54247,133461],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54247,133464],{},"  ③必须添加 top 、left、right、bottom ",[112,133467,133468],{},"其中一个"," 才有效",[54247,133471],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[40,133474,133475],{"className":127083,"code":132876,"language":127085,"meta":27,"style":27},[46,133476,133477,133483,133495,133509,133523],{"__ignoreMap":27},[49,133478,133479,133481],{"class":51,"line":52},[49,133480,130931],{"class":55},[49,133482,16269],{"class":73},[49,133484,133485,133487,133489,133491,133493],{"class":51,"line":63},[49,133486,132889],{"class":159},[49,133488,51968],{"class":73},[49,133490,55295],{"class":159},[49,133492,130946],{"class":73},[49,133494,132898],{"class":66},[49,133496,133497,133499,133501,133503,133505,133507],{"class":51,"line":70},[49,133498,132903],{"class":159},[49,133500,51968],{"class":73},[49,133502,1275],{"class":159},[49,133504,52023],{"class":77},[49,133506,132912],{"class":73},[49,133508,132915],{"class":66},[49,133510,133511,133513,133515,133517,133519,133521],{"class":51,"line":219},[49,133512,132920],{"class":159},[49,133514,51968],{"class":73},[49,133516,1529],{"class":159},[49,133518,52023],{"class":77},[49,133520,132929],{"class":73},[49,133522,132932],{"class":66},[49,133524,133525],{"class":51,"line":233},[49,133526,2264],{"class":73},[25,133528],{"style":126939,"src":133529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133531,133532],{},"(6)总结",[610,133534,133535,133550],{},[613,133536,133537],{},[616,133538,133539,133541,133544,133547],{},[619,133540,132873],{"align":621},[619,133542,133543],{"align":621},"是否脱标",[619,133545,133546],{"align":621},"移动位置",[619,133548,133549],{"align":621},"是否常用",[633,133551,133552,133565,133579,133593,133606],{},[616,133553,133554,133557,133559,133562],{},[638,133555,133556],{"align":621},"Static 静态定位",[638,133558,105209],{"align":621},[638,133560,133561],{"align":621},"不能使用边偏移",[638,133563,133564],{"align":621},"很少",[616,133566,133567,133570,133573,133576],{},[638,133568,133569],{"align":621},"Relative 相对定位",[638,133571,133572],{"align":621},"否(占有位置)",[638,133574,133575],{"align":621},"相对于自身位置移动",[638,133577,133578],{"align":621},"基本单独使用",[616,133580,133581,133584,133587,133590],{},[638,133582,133583],{"align":621},"Absolute 绝对定位",[638,133585,133586],{"align":621},"是(不占有位置)",[638,133588,133589],{"align":621},"带有定位的父级",[638,133591,133592],{"align":621},"要和定位父级元素搭配使用",[616,133594,133595,133598,133600,133603],{},[638,133596,133597],{"align":621},"Fixed 固定定位",[638,133599,133586],{"align":621},[638,133601,133602],{"align":621},"浏览器可视区",[638,133604,133605],{"align":621},"单独使用,不需要父级",[616,133607,133608,133611,133613,133615],{},[638,133609,133610],{"align":621},"Sticky 粘性定位",[638,133612,133572],{"align":621},[638,133614,133602],{"align":621},[638,133616,133617],{"align":621},"当前阶段少",[30,133619,133620],{"start":63},[33,133621,133622,133625],{},[112,133623,133624],{},"边偏移"," 则决定了该元素的最终位置",[610,133627,133628,133639],{},[613,133629,133630],{},[616,133631,133632,133635,133637],{},[619,133633,133634],{"align":621},"边偏移属性",[619,133636,28023],{"align":621},[619,133638,28020],{"align":621},[633,133640,133641,133652,133663,133673],{},[616,133642,133643,133646,133649],{},[638,133644,133645],{"align":621},"top",[638,133647,133648],{"align":621},"top: 80px;",[638,133650,133651],{"align":621},"顶端偏移量，定义元素相对于父元素上边线的距离",[616,133653,133654,133657,133660],{},[638,133655,133656],{"align":621},"bottom",[638,133658,133659],{"align":621},"bottom: 80px ;",[638,133661,133662],{"align":621},"底部偏移量，定义元素相对于其父元素下边线的距离",[616,133664,133665,133667,133670],{},[638,133666,621],{"align":621},[638,133668,133669],{"align":621},"left: 80px ;",[638,133671,133672],{"align":621},"左侧偏移量，定义元素相对于其父元素左边线的距离",[616,133674,133675,133677,133680],{},[638,133676,73053],{"align":621},[638,133678,133679],{"align":621},"right: 80px ;",[638,133681,133682],{"align":621},"右侧偏移量，定义元素相对于其父元素右边线的距离",[742,133684,133685],{},[33,133686,9722,133687,133689,133690,133692,133693,133695,133696,133699,133700,133702,133703,133705],{},[54247,133688],{},"  ① ",[112,133691,133624],{}," 需要和 ",[112,133694,132873],{}," 联合使用， ",[112,133697,133698],{},"单独使用无效"," ；",[54247,133701],{},"  ②top和bottom不要同时使用",[54247,133704],{},"  ③left和right不要同时使用",[130,133707,133709],{"id":133708},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133711,133712],{},"子级是绝对定位的话，父级要用相对定位",[742,133714,133715,133718,133721,133724],{},[33,133716,133717],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[33,133719,133720],{},"父盒子需要加定位限制子盒子在父盒子内显示",[33,133722,133723],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[33,133725,133726,133727,133730],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[112,133728,133729],{},"子绝父绝"," 也会遇到",[130,133732,133734],{"id":133733},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[742,133736,133737,133752],{},[33,133738,133739,133740,133743,133744,133747,133748,133751],{},"在使用 ",[112,133741,133742],{},"定位"," 布局时，可能会 ",[112,133745,133746],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[112,133749,133750],{},"z-index"," 来控制盒子的前后次序 (z轴)",[33,133753,5878],{},[40,133755,133756],{"className":127083,"code":132876,"language":127085,"meta":27,"style":27},[46,133757,133758,133764,133776,133790,133804],{"__ignoreMap":27},[49,133759,133760,133762],{"class":51,"line":52},[49,133761,130931],{"class":55},[49,133763,16269],{"class":73},[49,133765,133766,133768,133770,133772,133774],{"class":51,"line":63},[49,133767,132889],{"class":159},[49,133769,51968],{"class":73},[49,133771,55295],{"class":159},[49,133773,130946],{"class":73},[49,133775,132898],{"class":66},[49,133777,133778,133780,133782,133784,133786,133788],{"class":51,"line":70},[49,133779,132903],{"class":159},[49,133781,51968],{"class":73},[49,133783,1275],{"class":159},[49,133785,52023],{"class":77},[49,133787,132912],{"class":73},[49,133789,132915],{"class":66},[49,133791,133792,133794,133796,133798,133800,133802],{"class":51,"line":219},[49,133793,132920],{"class":159},[49,133795,51968],{"class":73},[49,133797,1529],{"class":159},[49,133799,52023],{"class":77},[49,133801,132929],{"class":73},[49,133803,132932],{"class":66},[49,133805,133806],{"class":51,"line":233},[49,133807,2264],{"class":73},[742,133809,133810],{},[33,133811,133812,133813,133689,133815,133817,133818,128246,133821,83070,133824,133826,133827,133829,133830,133833,133834,133699,133837,133839,133840,133843,133845],{},"z-index的特性",[54247,133814],{},[112,133816,127547],{}," ： ",[112,133819,133820],{},"正整数",[112,133822,133823],{},"负整数",[112,133825,1021],{}," ，默认值是 0，数值越大，盒子越靠上；",[54247,133828],{},"  ②如果 ",[112,133831,133832],{},"属性值相同"," ，则按照书写顺序， ",[112,133835,133836],{},"后来居上",[54247,133838],{},"  ③数字后面 ",[112,133841,133842],{},"不能加单位",[54247,133844],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[130,133847,133849],{"id":133848},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133851,133852],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133854,133855],{},"方法:",[742,133857,133858,133868],{},[33,133859,133860,133861,133864,133865],{},"left: 50%; 让 ",[112,133862,133863],{},"盒子的左侧"," 移动到 ",[112,133866,133867],{},"父级元素的水平中心位置",[33,133869,133870,133871,133874,133875],{},"margin-left: -100px; 让盒子 ",[112,133872,133873],{},"向左"," 移动 ",[112,133876,133877],{},"自身宽度的一半",[130,133879,133881],{"id":133880},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[30,133883,133884,133887],{},[33,133885,133886],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[33,133888,133889],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133891,133892],{},"也就是说绝对定位和固定定位和浮动类似",[30,133894,133895],{"start":70},[33,133896,133897],{},"display 是显示模式， 可以改变显示模式有以下方式:",[742,133899,133900,133903,133906],{},[33,133901,133902],{},"可以用inline-block 转换为行内块",[33,133904,133905],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[33,133907,133908],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133910,133911],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[130,133913,133915],{"id":133914},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[30,133917,133918,133921,133924,133927],{},[33,133919,133920],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[33,133922,133923],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[33,133925,133926],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[33,133928,133929],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[40,133931,133932],{"className":127083,"code":131549,"language":127085,"meta":27,"style":27},[46,133933,133934,133940,133950,133954,133960,133970],{"__ignoreMap":27},[49,133935,133936,133938],{"class":51,"line":52},[49,133937,131556],{"class":55},[49,133939,16269],{"class":73},[49,133941,133942,133944,133946,133948],{"class":51,"line":63},[49,133943,131563],{"class":159},[49,133945,51968],{"class":73},[49,133947,621],{"class":159},[49,133949,1990],{"class":73},[49,133951,133952],{"class":51,"line":70},[49,133953,2264],{"class":73},[49,133955,133956,133958],{"class":51,"line":219},[49,133957,131578],{"class":55},[49,133959,16269],{"class":73},[49,133961,133962,133964,133966,133968],{"class":51,"line":233},[49,133963,131563],{"class":159},[49,133965,51968],{"class":73},[49,133967,73053],{"class":159},[49,133969,1990],{"class":73},[49,133971,133972],{"class":51,"line":241},[49,133973,2264],{"class":73},[25,133975],{"style":126939,"src":133976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[130,133978,133980],{"id":133979},"_11138-轮播图","11.1.3.8 轮播图",[25,133982],{"style":126939,"src":133983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[30,133985,133986],{},[33,133987,133988],{},"制作顺序:",[742,133990,133991,133994,133997,134006],{},[33,133992,133993],{},"大盒子我们类名为： tb-promo 淘宝广告",[33,133995,133996],{},"里面先放一张图片",[33,133998,133999,134000,134002,134003,134005],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54247,134001],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54247,134004],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[33,134007,134008,134009,134011,134012,134014],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54247,134010],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54247,134013],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[30,134016,134017],{"start":63},[33,134018,134019],{},"代码模块",[40,134021,134023],{"className":127083,"code":134022,"language":127085,"meta":27,"style":27},"\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",[46,134024,134025,134030,134037,134047,134057,134067,134071,134076,134083,134093],{"__ignoreMap":27},[49,134026,134027],{"class":51,"line":52},[49,134028,134029],{"class":66},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[49,134031,134032,134035],{"class":51,"line":63},[49,134033,134034],{"class":55},".son",[49,134036,16269],{"class":73},[49,134038,134039,134041,134043,134045],{"class":51,"line":70},[49,134040,132889],{"class":159},[49,134042,51968],{"class":73},[49,134044,55362],{"class":159},[49,134046,1990],{"class":73},[49,134048,134049,134051,134053,134055],{"class":51,"line":219},[49,134050,132903],{"class":159},[49,134052,51968],{"class":73},[49,134054,1021],{"class":159},[49,134056,1990],{"class":73},[49,134058,134059,134061,134063,134065],{"class":51,"line":233},[49,134060,132920],{"class":159},[49,134062,51968],{"class":73},[49,134064,1021],{"class":159},[49,134066,1990],{"class":73},[49,134068,134069],{"class":51,"line":241},[49,134070,2264],{"class":73},[49,134072,134073],{"class":51,"line":1920},[49,134074,134075],{"class":66},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[49,134077,134078,134081],{"class":51,"line":2011},[49,134079,134080],{"class":55},".father",[49,134082,16269],{"class":73},[49,134084,134085,134087,134089,134091],{"class":51,"line":2017},[49,134086,132889],{"class":159},[49,134088,51968],{"class":73},[49,134090,55295],{"class":159},[49,134092,1990],{"class":73},[49,134094,134095],{"class":51,"line":2029},[49,134096,2264],{"class":73},[14,134098,134099],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[18,134101,134103],{"id":134102},"_1114-定位数值的移动","11.1.4 定位数值的移动",[25,134105],{"style":126939,"src":134106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,134108,134109],{},"✨ 黄金口诀：",[14,134111,134112],{},"\"TOP正下负上，LEFT正右负左\"",[14,134114,134115],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,134117,134118],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,134120,134121],{},"✨ 简单记：",[14,134123,134124],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[757,134126,134127],{},"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":27,"searchDepth":63,"depth":63,"links":134129},[134130],{"id":132657,"depth":63,"text":132658,"children":134131},[134132,134133,134134,134135],{"id":132661,"depth":70,"text":132662},{"id":132676,"depth":70,"text":132677},{"id":132844,"depth":70,"text":132845},{"id":134102,"depth":70,"text":134103},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132649,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134142,"title":134143,"body":134144,"description":24072,"extension":766,"meta":135567,"navigation":398,"path":135568,"seo":135569,"stem":135570,"__hash__":135571},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134145,"toc":135546},[134146,134149,134153,134161,134165,134170,134178,134190,134194,134199,134207,134218,134222,134227,134268,134276,134280,134283,134286,134289,134383,134386,134480,134483,134577,134580,134583,134618,134621,134624,134654,134657,134660,134663,134666,134669,134672,134675,134745,134748,134752,134756,134797,134801,134807,134810,134813,134817,134820,134823,134826,134907,134910,134913,134917,134921,134924,134927,134930,134933,134936,134942,134951,134955,134974,134978,134988,134991,134994,134997,135000,135003,135006,135009,135012,135021,135025,135034,135037,135042,135095,135100,135266,135269,135272,135277,135280,135283,135286,135289,135294,135442,135445,135448,135453,135456,135461,135495,135498,135501,135505,135508,135515,135518,135521,135524,135527,135530,135533,135536,135540,135543],[10,134147,134143],{"id":134148},"_12-显示隐藏与图形资源",[782,134150,134152],{"id":134151},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[742,134154,134155,134158],{},[33,134156,134157],{},"目的:让一个元素在页面中消失或者显示出来",[33,134159,134160],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[18,134162,134164],{"id":134163},"_1211-display-显示","12.1.1 display 显示",[30,134166,134167],{},[33,134168,134169],{},"display 设置或检索对象是否及如何显示",[742,134171,134172,134175],{},[33,134173,134174],{},"display: none;隐藏对象",[33,134176,134177],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[30,134179,134180,134187],{"start":63},[33,134181,134182,134183,134186],{},"特点： display 隐藏元素后， ",[112,134184,134185],{},"不再占"," 有原来的位置",[33,134188,134189],{},"在js中使用非常的广泛",[18,134191,134193],{"id":134192},"_1212-visibility可见性","12.1.2 visibility可见性",[30,134195,134196],{},[33,134197,134198],{},"visibility 属性用于指定一个元素应可见还是隐藏",[742,134200,134201,134204],{},[33,134202,134203],{},"visibility： visible；元素可见",[33,134205,134206],{},"visibility：hidden；元素隐藏",[30,134208,134209,134212,134215],{"start":63},[33,134210,134211],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[33,134213,134214],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[33,134216,134217],{},"隐藏后继续占有原有位置",[18,134219,134221],{"id":134220},"_1213-overflow溢出","12.1.3 overflow溢出",[742,134223,134224],{},[33,134225,134226],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[610,134228,134229,134237],{},[613,134230,134231],{},[616,134232,134233,134235],{},[619,134234,127547],{"align":621},[619,134236,28020],{"align":621},[633,134238,134239,134247,134254,134261],{},[616,134240,134241,134244],{},[638,134242,134243],{"align":621},"visible",[638,134245,134246],{"align":621},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[616,134248,134249,134251],{},[638,134250,62245],{"align":621},[638,134252,134253],{"align":621},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[616,134255,134256,134258],{},[638,134257,129503],{"align":621},[638,134259,134260],{"align":621},"不管超出内容否，总是显示滚动条",[616,134262,134263,134265],{},[638,134264,73194],{"align":621},[638,134266,134267],{"align":621},"超出自动显示滚动条，不超出不显示滚动条",[742,134269,134270,134273],{},[33,134271,134272],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[33,134274,134275],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[18,134277,134279],{"id":134278},"_1214-案例收获","12.1.4 案例收获",[25,134281],{"style":126939,"src":134282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,134284,134285],{},"问题：没做出来动态效果，使用hover没实现",[14,134287,134288],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[40,134290,134291],{"className":127083,"code":132515,"language":127085,"meta":27,"style":27},[46,134292,134293,134297,134311,134315,134329,134333,134347,134351,134365,134369],{"__ignoreMap":27},[49,134294,134295],{"class":51,"line":52},[49,134296,132522],{"class":66},[49,134298,134299,134301,134303,134305,134307,134309],{"class":51,"line":63},[49,134300,132527],{"class":55},[49,134302,80338],{"class":73},[49,134304,129443],{"class":159},[49,134306,51968],{"class":73},[49,134308,132536],{"class":159},[49,134310,130013],{"class":73},[49,134312,134313],{"class":51,"line":70},[49,134314,132543],{"class":66},[49,134316,134317,134319,134321,134323,134325,134327],{"class":51,"line":219},[49,134318,132548],{"class":55},[49,134320,80338],{"class":73},[49,134322,129443],{"class":159},[49,134324,51968],{"class":73},[49,134326,55295],{"class":159},[49,134328,130013],{"class":73},[49,134330,134331],{"class":51,"line":233},[49,134332,132563],{"class":66},[49,134334,134335,134337,134339,134341,134343,134345],{"class":51,"line":241},[49,134336,132568],{"class":55},[49,134338,80338],{"class":73},[49,134340,129443],{"class":159},[49,134342,51968],{"class":73},[49,134344,55362],{"class":159},[49,134346,130013],{"class":73},[49,134348,134349],{"class":51,"line":1920},[49,134350,132583],{"class":66},[49,134352,134353,134355,134357,134359,134361,134363],{"class":51,"line":2011},[49,134354,132588],{"class":55},[49,134356,80338],{"class":73},[49,134358,129443],{"class":159},[49,134360,51968],{"class":73},[49,134362,86764],{"class":159},[49,134364,130013],{"class":73},[49,134366,134367],{"class":51,"line":2017},[49,134368,132603],{"class":66},[49,134370,134371,134373,134375,134377,134379,134381],{"class":51,"line":2029},[49,134372,132608],{"class":55},[49,134374,80338],{"class":73},[49,134376,129443],{"class":159},[49,134378,51968],{"class":73},[49,134380,132617],{"class":159},[49,134382,130013],{"class":73},[14,134384,134385],{},"完整代码：",[40,134387,134388],{"className":127083,"code":132515,"language":127085,"meta":27,"style":27},[46,134389,134390,134394,134408,134412,134426,134430,134444,134448,134462,134466],{"__ignoreMap":27},[49,134391,134392],{"class":51,"line":52},[49,134393,132522],{"class":66},[49,134395,134396,134398,134400,134402,134404,134406],{"class":51,"line":63},[49,134397,132527],{"class":55},[49,134399,80338],{"class":73},[49,134401,129443],{"class":159},[49,134403,51968],{"class":73},[49,134405,132536],{"class":159},[49,134407,130013],{"class":73},[49,134409,134410],{"class":51,"line":70},[49,134411,132543],{"class":66},[49,134413,134414,134416,134418,134420,134422,134424],{"class":51,"line":219},[49,134415,132548],{"class":55},[49,134417,80338],{"class":73},[49,134419,129443],{"class":159},[49,134421,51968],{"class":73},[49,134423,55295],{"class":159},[49,134425,130013],{"class":73},[49,134427,134428],{"class":51,"line":233},[49,134429,132563],{"class":66},[49,134431,134432,134434,134436,134438,134440,134442],{"class":51,"line":241},[49,134433,132568],{"class":55},[49,134435,80338],{"class":73},[49,134437,129443],{"class":159},[49,134439,51968],{"class":73},[49,134441,55362],{"class":159},[49,134443,130013],{"class":73},[49,134445,134446],{"class":51,"line":1920},[49,134447,132583],{"class":66},[49,134449,134450,134452,134454,134456,134458,134460],{"class":51,"line":2011},[49,134451,132588],{"class":55},[49,134453,80338],{"class":73},[49,134455,129443],{"class":159},[49,134457,51968],{"class":73},[49,134459,86764],{"class":159},[49,134461,130013],{"class":73},[49,134463,134464],{"class":51,"line":2017},[49,134465,132603],{"class":66},[49,134467,134468,134470,134472,134474,134476,134478],{"class":51,"line":2029},[49,134469,132608],{"class":55},[49,134471,80338],{"class":73},[49,134473,129443],{"class":159},[49,134475,51968],{"class":73},[49,134477,132617],{"class":159},[49,134479,130013],{"class":73},[14,134481,134482],{},"分布思路重点详解：",[40,134484,134485],{"className":127083,"code":132515,"language":127085,"meta":27,"style":27},[46,134486,134487,134491,134505,134509,134523,134527,134541,134545,134559,134563],{"__ignoreMap":27},[49,134488,134489],{"class":51,"line":52},[49,134490,132522],{"class":66},[49,134492,134493,134495,134497,134499,134501,134503],{"class":51,"line":63},[49,134494,132527],{"class":55},[49,134496,80338],{"class":73},[49,134498,129443],{"class":159},[49,134500,51968],{"class":73},[49,134502,132536],{"class":159},[49,134504,130013],{"class":73},[49,134506,134507],{"class":51,"line":70},[49,134508,132543],{"class":66},[49,134510,134511,134513,134515,134517,134519,134521],{"class":51,"line":219},[49,134512,132548],{"class":55},[49,134514,80338],{"class":73},[49,134516,129443],{"class":159},[49,134518,51968],{"class":73},[49,134520,55295],{"class":159},[49,134522,130013],{"class":73},[49,134524,134525],{"class":51,"line":233},[49,134526,132563],{"class":66},[49,134528,134529,134531,134533,134535,134537,134539],{"class":51,"line":241},[49,134530,132568],{"class":55},[49,134532,80338],{"class":73},[49,134534,129443],{"class":159},[49,134536,51968],{"class":73},[49,134538,55362],{"class":159},[49,134540,130013],{"class":73},[49,134542,134543],{"class":51,"line":1920},[49,134544,132583],{"class":66},[49,134546,134547,134549,134551,134553,134555,134557],{"class":51,"line":2011},[49,134548,132588],{"class":55},[49,134550,80338],{"class":73},[49,134552,129443],{"class":159},[49,134554,51968],{"class":73},[49,134556,86764],{"class":159},[49,134558,130013],{"class":73},[49,134560,134561],{"class":51,"line":2017},[49,134562,132603],{"class":66},[49,134564,134565,134567,134569,134571,134573,134575],{"class":51,"line":2029},[49,134566,132608],{"class":55},[49,134568,80338],{"class":73},[49,134570,129443],{"class":159},[49,134572,51968],{"class":73},[49,134574,132617],{"class":159},[49,134576,130013],{"class":73},[25,134578],{"style":126939,"src":134579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134581,134582],{},"图片太大，盒子太小，此时需要修改图片的大小",[40,134584,134586],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[46,134587,134588],{"__ignoreMap":27},[49,134589,134590,134592,134594,134596,134598,134601,134603,134605,134608,134611,134613,134616],{"class":51,"line":52},[49,134591,1739],{"class":73},[49,134593,25],{"class":51831},[49,134595,55770],{"class":55},[49,134597,78],{"class":73},[49,134599,134600],{"class":59},"\"images\u002Fpic.jpg\"",[49,134602,55778],{"class":55},[49,134604,78],{"class":73},[49,134606,134607],{"class":59},"\"描述文字\"",[49,134609,134610],{"class":55}," title",[49,134612,78],{"class":73},[49,134614,134615],{"class":59},"\"悬停提示\"",[49,134617,51838],{"class":73},[25,134619],{"style":126939,"src":134620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134622,134623],{},"制造遮罩层",[40,134625,134626],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,134627,134628],{"__ignoreMap":27},[49,134629,134630,134632,134634,134636,134638,134640,134642,134644,134646,134648,134650,134652],{"class":51,"line":52},[49,134631,1739],{"class":73},[49,134633,25],{"class":51831},[49,134635,55770],{"class":55},[49,134637,78],{"class":73},[49,134639,134600],{"class":59},[49,134641,55778],{"class":55},[49,134643,78],{"class":73},[49,134645,134607],{"class":59},[49,134647,134610],{"class":55},[49,134649,78],{"class":73},[49,134651,134615],{"class":59},[49,134653,51838],{"class":73},[14,134655,134656],{},"此时是这样的为标准流",[25,134658],{"style":126939,"src":134659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134661,134662],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134664,134665],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134667,134668],{},"让他在中间，用center(background-position)",[14,134670,134671],{},"将需要变的尽可能放到一个盒子中",[14,134673,134674],{},"放大盒子上内部盒子发生变化",[40,134676,134678],{"className":127083,"code":134677,"language":127085,"meta":27,"style":27},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[46,134679,134680,134686,134696,134700,134707,134717,134729,134741],{"__ignoreMap":27},[49,134681,134682,134684],{"class":51,"line":52},[49,134683,128150],{"class":55},[49,134685,16269],{"class":73},[49,134687,134688,134690,134692,134694],{"class":51,"line":63},[49,134689,132889],{"class":159},[49,134691,51968],{"class":73},[49,134693,55295],{"class":159},[49,134695,1990],{"class":73},[49,134697,134698],{"class":51,"line":70},[49,134699,2264],{"class":73},[49,134701,134702,134705],{"class":51,"line":219},[49,134703,134704],{"class":55},".child",[49,134706,16269],{"class":73},[49,134708,134709,134711,134713,134715],{"class":51,"line":233},[49,134710,132889],{"class":159},[49,134712,51968],{"class":73},[49,134714,55362],{"class":159},[49,134716,1990],{"class":73},[49,134718,134719,134721,134723,134725,134727],{"class":51,"line":241},[49,134720,132903],{"class":159},[49,134722,51968],{"class":73},[49,134724,1485],{"class":159},[49,134726,1157],{"class":77},[49,134728,1990],{"class":73},[49,134730,134731,134733,134735,134737,134739],{"class":51,"line":1920},[49,134732,132920],{"class":159},[49,134734,51968],{"class":73},[49,134736,1485],{"class":159},[49,134738,1157],{"class":77},[49,134740,1990],{"class":73},[49,134742,134743],{"class":51,"line":2011},[49,134744,2264],{"class":73},[14,134746,134747],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[782,134749,134751],{"id":134750},"_122-精灵图","12.2 精灵图",[18,134753,134755],{"id":134754},"_1221-理解","12.2.1 理解",[30,134757,134758,134776],{},[33,134759,134760,134761,132989,134764,134767,134768,134771,134772,134775],{},"目的： ",[112,134762,134763],{},"为了有效地减少服务器接收和发送请求的次数",[112,134765,134766],{},"提高"," 页面的 ",[112,134769,134770],{},"加载速度"," ，出现了 ",[112,134773,134774],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[33,134777,134778,134779,134781,134782,134784,134785,134787,134788,134790,134791,134793,134794,134796],{},"使用精灵图核心：",[54247,134780],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54247,134783],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54247,134786],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54247,134789],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54247,134792],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54247,134795],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[18,134798,134800],{"id":134799},"_1222-扒图","12.2.2 扒图",[40,134802,134805],{"className":134803,"code":134804,"language":5884},[5882],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[46,134806,134804],{"__ignoreMap":27},[25,134808],{"style":126939,"src":134809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[25,134811],{"style":126939,"src":134812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[18,134814,134816],{"id":134815},"_1223-精灵图的实现","12.2.3 精灵图的实现",[25,134818],{"style":126939,"src":134819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134821,134822],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[25,134824],{"style":126939,"src":134825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[40,134827,134829],{"className":127083,"code":134828,"language":127085,"meta":27,"style":27},"\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",[46,134830,134831,134836,134843,134855,134867,134886,134903],{"__ignoreMap":27},[49,134832,134833],{"class":51,"line":52},[49,134834,134835],{"class":66},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[49,134837,134838,134841],{"class":51,"line":63},[49,134839,134840],{"class":55},".icon",[49,134842,16269],{"class":73},[49,134844,134845,134847,134849,134851,134853],{"class":51,"line":70},[49,134846,71099],{"class":159},[49,134848,51968],{"class":73},[49,134850,1529],{"class":159},[49,134852,52023],{"class":77},[49,134854,1990],{"class":73},[49,134856,134857,134859,134861,134863,134865],{"class":51,"line":219},[49,134858,71319],{"class":159},[49,134860,51968],{"class":73},[49,134862,1529],{"class":159},[49,134864,52023],{"class":77},[49,134866,1990],{"class":73},[49,134868,134869,134871,134873,134875,134877,134880,134882,134884],{"class":51,"line":233},[49,134870,71142],{"class":159},[49,134872,51968],{"class":73},[49,134874,62257],{"class":159},[49,134876,841],{"class":73},[49,134878,134879],{"class":5913},"sprites.png",[49,134881,14411],{"class":73},[49,134883,62267],{"class":159},[49,134885,1990],{"class":73},[49,134887,134888,134890,134892,134894,134896,134899,134901],{"class":51,"line":241},[49,134889,129343],{"class":159},[49,134891,51968],{"class":73},[49,134893,52294],{"class":159},[49,134895,52023],{"class":77},[49,134897,134898],{"class":159}," -20",[49,134900,52023],{"class":77},[49,134902,1990],{"class":73},[49,134904,134905],{"class":51,"line":1920},[49,134906,2264],{"class":73},[25,134908],{"style":126939,"src":134909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134911,134912],{},"在前端中坐标轴的正方向是右和下",[782,134914,134916],{"id":134915},"_123-字体图标","12.3 字体图标",[18,134918,134920],{"id":134919},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134922,134923],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134925,134926],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134928,134929],{},"1.图片文件还是比较大的。",[14,134931,134932],{},"2.图片本身放大和缩小会失真。",[14,134934,134935],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134937,134938,134939,26429],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[112,134940,134941],{},"字体图标 iconfont",[14,134943,134944,134947,134948,28916],{},[112,134945,134946],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[112,134949,134950],{},"展示的是图标，本质属于字体",[18,134952,134954],{"id":134953},"_1232-字体图标的优点","12.3.2 字体图标的优点",[742,134956,134957,134962,134965,134968,134971],{},[33,134958,134959,134961],{},[112,134960,26565],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[33,134963,134964],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[33,134966,134967],{},"兼容性：几乎支持所有的浏览器，请放心使用",[33,134969,134970],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[33,134972,134973],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[18,134975,134977],{"id":134976},"_1233-字体库下载网站","12.3.3 字体库下载网站",[742,134979,134980],{},[33,134981,134982,134983],{},"icomoon字体库：",[124,134984,134987],{"href":134985,"rel":134986},"http:\u002F\u002Ficomoon.io\u002F",[128],"http:\u002F\u002Ficomoon.io",[14,134989,134990],{},"进去之后点icomoon app",[25,134992],{"style":126939,"src":134993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134995,134996],{},"可以对其编辑：",[25,134998],{"style":126939,"src":134999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,135001,135002],{},"生成字体：",[25,135004],{"style":126939,"src":135005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,135007,135008],{},"下载：",[25,135010],{"style":126939,"src":135011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[742,135013,135014],{},[33,135015,135016,135017],{},"阿里iconfont字体库： ",[124,135018,135019],{"href":135019,"rel":135020},"http:\u002F\u002Fwww.iconfont.cn\u002F",[128],[18,135022,135024],{"id":135023},"_1234-字体图标的引入","12.3.4 字体图标的引入",[30,135026,135027],{},[33,135028,135029,135030,135033],{},"把下载包里面的 ",[112,135031,135032],{},"fonts"," 文件夹放入页面根目录下",[25,135035],{"style":126939,"src":135036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[30,135038,135039],{"start":63},[33,135040,135041],{},"字体文件格式",[610,135043,135044,135053],{},[613,135045,135046],{},[616,135047,135048,135051],{},[619,135049,135050],{"align":621},"格式",[619,135052,24435],{"align":621},[633,135054,135055,135065,135075,135085],{},[616,135056,135057,135062],{},[638,135058,135059],{"align":621},[112,135060,135061],{},".ttf",[638,135063,135064],{"align":621},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[616,135066,135067,135072],{},[638,135068,135069],{"align":621},[112,135070,135071],{},".woff",[638,135073,135074],{"align":621},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[616,135076,135077,135082],{},[638,135078,135079],{"align":621},[112,135080,135081],{},".eot",[638,135083,135084],{"align":621},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[616,135086,135087,135092],{},[638,135088,135089],{"align":621},[112,135090,135091],{},"svg",[638,135093,135094],{"align":621},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[30,135096,135097],{"start":70},[33,135098,135099],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[40,135101,135103],{"className":127083,"code":135102,"language":127085,"meta":27,"style":27},"\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",[46,135104,135105,135110,135117,135129,135145,135170,135191,135211,135231,135235,135241,135251,135262],{"__ignoreMap":27},[49,135106,135107],{"class":51,"line":52},[49,135108,135109],{"class":66},"\u002F* 引入字体图标 *\u002F\n",[49,135111,135112,135115],{"class":51,"line":63},[49,135113,135114],{"class":77},"@font-face",[49,135116,16269],{"class":73},[49,135118,135119,135122,135124,135127],{"class":51,"line":70},[49,135120,135121],{"class":159},"  font-family",[49,135123,51968],{"class":73},[49,135125,135126],{"class":59},"'icomoon'",[49,135128,1990],{"class":73},[49,135130,135131,135134,135136,135138,135140,135143],{"class":51,"line":219},[49,135132,135133],{"class":159},"  src",[49,135135,51968],{"class":73},[49,135137,62257],{"class":159},[49,135139,841],{"class":73},[49,135141,135142],{"class":59},"'fonts\u002Ficomoon.eot'",[49,135144,3416],{"class":73},[49,135146,135147,135149,135151,135153,135155,135158,135160,135163,135165,135168],{"class":51,"line":233},[49,135148,135133],{"class":159},[49,135150,51968],{"class":73},[49,135152,62257],{"class":159},[49,135154,841],{"class":73},[49,135156,135157],{"class":59},"'fonts\u002Ficomoon.eot?#iefix'",[49,135159,14411],{"class":73},[49,135161,135162],{"class":159},"format",[49,135164,841],{"class":73},[49,135166,135167],{"class":59},"'embedded-opentype'",[49,135169,38578],{"class":73},[49,135171,135172,135175,135177,135180,135182,135184,135186,135189],{"class":51,"line":241},[49,135173,135174],{"class":159},"       url",[49,135176,841],{"class":73},[49,135178,135179],{"class":59},"'fonts\u002Ficomoon.woff'",[49,135181,14411],{"class":73},[49,135183,135162],{"class":159},[49,135185,841],{"class":73},[49,135187,135188],{"class":59},"'woff'",[49,135190,38578],{"class":73},[49,135192,135193,135195,135197,135200,135202,135204,135206,135209],{"class":51,"line":1920},[49,135194,135174],{"class":159},[49,135196,841],{"class":73},[49,135198,135199],{"class":59},"'fonts\u002Ficomoon.ttf'",[49,135201,14411],{"class":73},[49,135203,135162],{"class":159},[49,135205,841],{"class":73},[49,135207,135208],{"class":59},"'truetype'",[49,135210,38578],{"class":73},[49,135212,135213,135215,135217,135220,135222,135224,135226,135229],{"class":51,"line":2011},[49,135214,135174],{"class":159},[49,135216,841],{"class":73},[49,135218,135219],{"class":59},"'fonts\u002Ficomoon.svg#icomoon'",[49,135221,14411],{"class":73},[49,135223,135162],{"class":159},[49,135225,841],{"class":73},[49,135227,135228],{"class":59},"'svg'",[49,135230,3416],{"class":73},[49,135232,135233],{"class":51,"line":2017},[49,135234,2264],{"class":73},[49,135236,135237,135239],{"class":51,"line":2029},[49,135238,134840],{"class":55},[49,135240,16269],{"class":73},[49,135242,135243,135245,135247,135249],{"class":51,"line":2311},[49,135244,135121],{"class":159},[49,135246,51968],{"class":73},[49,135248,135126],{"class":59},[49,135250,1990],{"class":73},[49,135252,135253,135256,135258,135260],{"class":51,"line":2316},[49,135254,135255],{"class":159},"  font-style",[49,135257,51968],{"class":73},[49,135259,64372],{"class":159},[49,135261,1990],{"class":73},[49,135263,135264],{"class":51,"line":2322},[49,135265,2264],{"class":73},[14,135267,135268],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[25,135270],{"style":126939,"src":135271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[30,135273,135274],{"start":219},[33,135275,135276],{},"添加字体",[25,135278],{"style":126939,"src":135279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,135281,135282],{},"复制：",[25,135284],{"style":126939,"src":135285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,135287,135288],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[30,135290,135291],{"start":233},[33,135292,135293],{},"代码展示：",[40,135295,135296],{"className":127083,"code":135102,"language":127085,"meta":27,"style":27},[46,135297,135298,135302,135308,135318,135332,135354,135372,135390,135408,135412,135418,135428,135438],{"__ignoreMap":27},[49,135299,135300],{"class":51,"line":52},[49,135301,135109],{"class":66},[49,135303,135304,135306],{"class":51,"line":63},[49,135305,135114],{"class":77},[49,135307,16269],{"class":73},[49,135309,135310,135312,135314,135316],{"class":51,"line":70},[49,135311,135121],{"class":159},[49,135313,51968],{"class":73},[49,135315,135126],{"class":59},[49,135317,1990],{"class":73},[49,135319,135320,135322,135324,135326,135328,135330],{"class":51,"line":219},[49,135321,135133],{"class":159},[49,135323,51968],{"class":73},[49,135325,62257],{"class":159},[49,135327,841],{"class":73},[49,135329,135142],{"class":59},[49,135331,3416],{"class":73},[49,135333,135334,135336,135338,135340,135342,135344,135346,135348,135350,135352],{"class":51,"line":233},[49,135335,135133],{"class":159},[49,135337,51968],{"class":73},[49,135339,62257],{"class":159},[49,135341,841],{"class":73},[49,135343,135157],{"class":59},[49,135345,14411],{"class":73},[49,135347,135162],{"class":159},[49,135349,841],{"class":73},[49,135351,135167],{"class":59},[49,135353,38578],{"class":73},[49,135355,135356,135358,135360,135362,135364,135366,135368,135370],{"class":51,"line":241},[49,135357,135174],{"class":159},[49,135359,841],{"class":73},[49,135361,135179],{"class":59},[49,135363,14411],{"class":73},[49,135365,135162],{"class":159},[49,135367,841],{"class":73},[49,135369,135188],{"class":59},[49,135371,38578],{"class":73},[49,135373,135374,135376,135378,135380,135382,135384,135386,135388],{"class":51,"line":1920},[49,135375,135174],{"class":159},[49,135377,841],{"class":73},[49,135379,135199],{"class":59},[49,135381,14411],{"class":73},[49,135383,135162],{"class":159},[49,135385,841],{"class":73},[49,135387,135208],{"class":59},[49,135389,38578],{"class":73},[49,135391,135392,135394,135396,135398,135400,135402,135404,135406],{"class":51,"line":2011},[49,135393,135174],{"class":159},[49,135395,841],{"class":73},[49,135397,135219],{"class":59},[49,135399,14411],{"class":73},[49,135401,135162],{"class":159},[49,135403,841],{"class":73},[49,135405,135228],{"class":59},[49,135407,3416],{"class":73},[49,135409,135410],{"class":51,"line":2017},[49,135411,2264],{"class":73},[49,135413,135414,135416],{"class":51,"line":2029},[49,135415,134840],{"class":55},[49,135417,16269],{"class":73},[49,135419,135420,135422,135424,135426],{"class":51,"line":2311},[49,135421,135121],{"class":159},[49,135423,51968],{"class":73},[49,135425,135126],{"class":59},[49,135427,1990],{"class":73},[49,135429,135430,135432,135434,135436],{"class":51,"line":2316},[49,135431,135255],{"class":159},[49,135433,51968],{"class":73},[49,135435,64372],{"class":159},[49,135437,1990],{"class":73},[49,135439,135440],{"class":51,"line":2322},[49,135441,2264],{"class":73},[25,135443],{"style":126939,"src":135444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,135446,135447],{},"更加细节展示：",[30,135449,135450],{},[33,135451,135452],{},"html 标签内添加小图标",[25,135454],{"style":126939,"src":135455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[30,135457,135458],{"start":63},[33,135459,135460],{},"给标签定义字体",[40,135462,135463],{"className":127830,"code":131187,"language":127832,"meta":27,"style":27},[46,135464,135465,135469,135483,135487],{"__ignoreMap":27},[49,135466,135467],{"class":51,"line":52},[49,135468,131194],{"class":66},[49,135470,135471,135473,135475,135477,135479,135481],{"class":51,"line":63},[49,135472,1739],{"class":73},[49,135474,52142],{"class":51831},[49,135476,54017],{"class":55},[49,135478,78],{"class":73},[49,135480,131207],{"class":59},[49,135482,51838],{"class":73},[49,135484,135485],{"class":51,"line":70},[49,135486,131214],{"class":73},[49,135488,135489,135491,135493],{"class":51,"line":219},[49,135490,52316],{"class":73},[49,135492,52142],{"class":51831},[49,135494,51838],{"class":73},[14,135496,135497],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[25,135499],{"style":126939,"src":135500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[18,135502,135504],{"id":135503},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135506,135507],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135509,135510,135511,135514],{},"把压缩包里面的 ",[112,135512,135513],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135516,135517],{},"打开网站，点下方：",[25,135519],{"style":126939,"src":135520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[25,135522],{"style":126939,"src":135523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[25,135525],{"style":126939,"src":135526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135528,135529],{},"点yes重新加载",[14,135531,135532],{},"然后重复之前的操作就可以实现了",[14,135534,135535],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[18,135537,135539],{"id":135538},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[25,135541],{"style":126939,"src":135542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[757,135544,135545],{},"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":27,"searchDepth":63,"depth":63,"links":135547},[135548,135554,135559],{"id":134151,"depth":63,"text":134152,"children":135549},[135550,135551,135552,135553],{"id":134163,"depth":70,"text":134164},{"id":134192,"depth":70,"text":134193},{"id":134220,"depth":70,"text":134221},{"id":134278,"depth":70,"text":134279},{"id":134750,"depth":63,"text":134751,"children":135555},[135556,135557,135558],{"id":134754,"depth":70,"text":134755},{"id":134799,"depth":70,"text":134800},{"id":134815,"depth":70,"text":134816},{"id":134915,"depth":63,"text":134916,"children":135560},[135561,135562,135563,135564,135565,135566],{"id":134919,"depth":70,"text":134920},{"id":134953,"depth":70,"text":134954},{"id":134976,"depth":70,"text":134977},{"id":135023,"depth":70,"text":135024},{"id":135503,"depth":70,"text":135504},{"id":135538,"depth":70,"text":135539},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134143,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135573,"title":135574,"body":135575,"description":24072,"extension":766,"meta":136802,"navigation":398,"path":136803,"seo":136804,"stem":136805,"__hash__":136806},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135576,"toc":136783},[135577,135580,135584,135587,135601,135669,135699,135702,135706,135710,135812,135859,135863,135866,135869,135903,135906,135909,135912,135915,135918,135921,135924,135926,135929,135932,135935,135938,135941,135944,135947,135975,135978,135982,135985,135992,135995,135998,136024,136027,136031,136034,136037,136044,136048,136051,136053,136085,136088,136091,136103,136109,136112,136115,136118,136120,136124,136127,136130,136133,136178,136182,136184,136187,136194,136236,136239,136243,136248,136262,136266,136269,136272,136275,136278,136281,136315,136318,136321,136375,136378,136381,136384,136387,136439,136442,136445,136494,136498,136500,136503,136506,136509,136512,136515,136573,136576,136582,136585,136588,136620,136623,136627,136631,136634,136666,136670,136673,136717,136721,136724,136727,136730,136733,136736,136739,136742,136744,136747,136749,136752,136755,136758,136761,136766,136769,136771,136774,136777,136780],[10,135578,135574],{"id":135579},"_13-界面样式与布局技巧",[782,135581,135583],{"id":135582},"_131-css三角","13.1 css三角",[14,135585,135586],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[742,135588,135589,135592,135595,135598],{},[33,135590,135591],{},"用css 边框可以模拟三角效果",[33,135593,135594],{},"宽度高度为0",[33,135596,135597],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[33,135599,135600],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[40,135602,135604],{"className":127083,"code":135603,"language":127085,"meta":27,"style":27},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[46,135605,135606,135611,135618,135628,135638,135654,135665],{"__ignoreMap":27},[49,135607,135608],{"class":51,"line":52},[49,135609,135610],{"class":66},"\u002F* CSS 实现三角形 *\u002F\n",[49,135612,135613,135616],{"class":51,"line":63},[49,135614,135615],{"class":55},".triangle",[49,135617,16269],{"class":73},[49,135619,135620,135622,135624,135626],{"class":51,"line":70},[49,135621,71099],{"class":159},[49,135623,51968],{"class":73},[49,135625,1021],{"class":159},[49,135627,1990],{"class":73},[49,135629,135630,135632,135634,135636],{"class":51,"line":219},[49,135631,71319],{"class":159},[49,135633,51968],{"class":73},[49,135635,1021],{"class":159},[49,135637,1990],{"class":73},[49,135639,135640,135642,135644,135646,135648,135650,135652],{"class":51,"line":233},[49,135641,71427],{"class":159},[49,135643,51968],{"class":73},[49,135645,1275],{"class":159},[49,135647,52023],{"class":77},[49,135649,52052],{"class":159},[49,135651,64522],{"class":159},[49,135653,1990],{"class":73},[49,135655,135656,135659,135661,135663],{"class":51,"line":241},[49,135657,135658],{"class":159},"  border-bottom-color",[49,135660,51968],{"class":73},[49,135662,62900],{"class":159},[49,135664,1990],{"class":73},[49,135666,135667],{"class":51,"line":1920},[49,135668,2264],{"class":73},[40,135670,135671],{"className":127083,"code":131240,"language":127085,"meta":27,"style":27},[46,135672,135673,135679,135695],{"__ignoreMap":27},[49,135674,135675,135677],{"class":51,"line":52},[49,135676,52142],{"class":51831},[49,135678,16269],{"class":73},[49,135680,135681,135683,135685,135687,135689,135691,135693],{"class":51,"line":63},[49,135682,71427],{"class":159},[49,135684,51968],{"class":73},[49,135686,1047],{"class":159},[49,135688,52023],{"class":77},[49,135690,52052],{"class":159},[49,135692,130475],{"class":159},[49,135694,1990],{"class":73},[49,135696,135697],{"class":51,"line":70},[49,135698,2264],{"class":73},[25,135700],{"style":126939,"src":135701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[782,135703,135705],{"id":135704},"_132-css用户界面样式","13.2 css用户界面样式",[18,135707,135709],{"id":135708},"_1321-鼠标样式","13.2.1 鼠标样式",[40,135711,135713],{"className":127083,"code":135712,"language":127085,"meta":27,"style":27},"\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",[46,135714,135715,135720,135739,135757,135776,135793],{"__ignoreMap":27},[49,135716,135717],{"class":51,"line":52},[49,135718,135719],{"class":66},"\u002F* 鼠标样式 *\u002F\n",[49,135721,135722,135724,135726,135729,135731,135733,135736],{"class":51,"line":63},[49,135723,52142],{"class":51831},[49,135725,80338],{"class":73},[49,135727,135728],{"class":159},"cursor",[49,135730,51968],{"class":73},[49,135732,62561],{"class":159},[49,135734,135735],{"class":73},"; }   ",[49,135737,135738],{"class":66},"\u002F* 手型 *\u002F\n",[49,135740,135741,135743,135745,135747,135749,135752,135754],{"class":51,"line":70},[49,135742,52142],{"class":51831},[49,135744,80338],{"class":73},[49,135746,135728],{"class":159},[49,135748,51968],{"class":73},[49,135750,135751],{"class":159},"default",[49,135753,135735],{"class":73},[49,135755,135756],{"class":66},"\u002F* 默认 *\u002F\n",[49,135758,135759,135761,135763,135765,135767,135770,135773],{"class":51,"line":219},[49,135760,52142],{"class":51831},[49,135762,80338],{"class":73},[49,135764,135728],{"class":159},[49,135766,51968],{"class":73},[49,135768,135769],{"class":159},"move",[49,135771,135772],{"class":73},"; }      ",[49,135774,135775],{"class":66},"\u002F* 移动 *\u002F\n",[49,135777,135778,135780,135782,135784,135786,135788,135790],{"class":51,"line":233},[49,135779,52142],{"class":51831},[49,135781,80338],{"class":73},[49,135783,135728],{"class":159},[49,135785,51968],{"class":73},[49,135787,5884],{"class":159},[49,135789,135772],{"class":73},[49,135791,135792],{"class":66},"\u002F* 文本 *\u002F\n",[49,135794,135795,135797,135799,135801,135803,135806,135809],{"class":51,"line":241},[49,135796,52142],{"class":51831},[49,135798,80338],{"class":73},[49,135800,135728],{"class":159},[49,135802,51968],{"class":73},[49,135804,135805],{"class":159},"not-allowed",[49,135807,135808],{"class":73},"; } ",[49,135810,135811],{"class":66},"\u002F* 禁止 *\u002F\n",[610,135813,135814,135822],{},[613,135815,135816],{},[616,135817,135818,135820],{},[619,135819,127547],{"align":621},[619,135821,28020],{"align":621},[633,135823,135824,135831,135838,135845,135852],{},[616,135825,135826,135828],{},[638,135827,135751],{"align":621},[638,135829,135830],{"align":621},"小白 默认",[616,135832,135833,135835],{},[638,135834,62561],{"align":621},[638,135836,135837],{"align":621},"小手",[616,135839,135840,135842],{},[638,135841,135769],{"align":621},[638,135843,135844],{"align":621},"移动",[616,135846,135847,135849],{},[638,135848,5884],{"align":621},[638,135850,135851],{"align":621},"文本",[616,135853,135854,135856],{},[638,135855,135805],{"align":621},[638,135857,135858],{"align":621},"禁止",[18,135860,135862],{"id":135861},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135864,135865],{},"去除表单轮廓线",[14,135867,135868],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[40,135870,135871],{"className":127083,"code":130447,"language":127085,"meta":27,"style":27},[46,135872,135873,135877,135883,135899],{"__ignoreMap":27},[49,135874,135875],{"class":51,"line":52},[49,135876,130454],{"class":66},[49,135878,135879,135881],{"class":51,"line":63},[49,135880,52142],{"class":51831},[49,135882,16269],{"class":73},[49,135884,135885,135887,135889,135891,135893,135895,135897],{"class":51,"line":70},[49,135886,71427],{"class":159},[49,135888,51968],{"class":73},[49,135890,1047],{"class":159},[49,135892,52023],{"class":77},[49,135894,52052],{"class":159},[49,135896,130475],{"class":159},[49,135898,1990],{"class":73},[49,135900,135901],{"class":51,"line":219},[49,135902,2264],{"class":73},[14,135904,135905],{},"文本域：",[25,135907],{"style":126939,"src":135908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135910,135911],{},"此时会有一个空白区域",[25,135913],{"style":126939,"src":135914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135916,135917],{},"写在同一行就不会出现这个问题",[25,135919],{"style":126939,"src":135920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135922,135923],{},"文本域是行内块元素，一定记住！！！",[14,135925,98764],{},[25,135927],{"style":126939,"src":135928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135930,135931],{},"文本域尽量放在一行",[14,135933,135934],{},"知识回顾：cols是列，rols是行",[25,135936],{"style":126939,"src":135937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135939,135940],{},"它可以进行拖动，显然这是我们不愿意看到的",[25,135942],{"style":126939,"src":135943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135945,135946],{},"使用resize进行解决",[40,135948,135950],{"className":127083,"code":135949,"language":127085,"meta":27,"style":27},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[46,135951,135952,135958,135971],{"__ignoreMap":27},[49,135953,135954,135956],{"class":51,"line":52},[49,135955,54352],{"class":51831},[49,135957,16269],{"class":73},[49,135959,135960,135962,135964,135966,135968],{"class":51,"line":63},[49,135961,71329],{"class":159},[49,135963,51968],{"class":73},[49,135965,55268],{"class":159},[49,135967,130946],{"class":73},[49,135969,135970],{"class":66},"\u002F* 取消表单轮廓线 *\u002F\n",[49,135972,135973],{"class":51,"line":70},[49,135974,2264],{"class":73},[14,135976,135977],{},"此时就无法通过右下方实现拖动了",[18,135979,135981],{"id":135980},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135983,135984],{},"实现一个盒子中的文字和图片对齐",[14,135986,135987,135988,135991],{},"用于设置一个元素的 ",[112,135989,135990],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135993,135994],{},"图片和文字默认是基线对齐",[25,135996],{"style":126939,"src":135997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[40,135999,136000],{"className":127083,"code":135949,"language":127085,"meta":27,"style":27},[46,136001,136002,136008,136020],{"__ignoreMap":27},[49,136003,136004,136006],{"class":51,"line":52},[49,136005,54352],{"class":51831},[49,136007,16269],{"class":73},[49,136009,136010,136012,136014,136016,136018],{"class":51,"line":63},[49,136011,71329],{"class":159},[49,136013,51968],{"class":73},[49,136015,55268],{"class":159},[49,136017,130946],{"class":73},[49,136019,135970],{"class":66},[49,136021,136022],{"class":51,"line":70},[49,136023,2264],{"class":73},[25,136025],{"style":126939,"src":136026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[130,136028,136030],{"id":136029},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,136032,136033],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[25,136035],{"style":126939,"src":136036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,136038,136039,136040,136043],{},"此时可以给图片、表单这些行内块元素的 ",[112,136041,136042],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[130,136045,136047],{"id":136046},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,136049,136050],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,136052,15330],{},[40,136054,136056],{"className":127083,"code":136055,"language":127085,"meta":27,"style":27},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[46,136057,136058,136063,136069,136081],{"__ignoreMap":27},[49,136059,136060],{"class":51,"line":52},[49,136061,136062],{"class":66},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[49,136064,136065,136067],{"class":51,"line":63},[49,136066,25],{"class":51831},[49,136068,16269],{"class":73},[49,136070,136071,136074,136076,136079],{"class":51,"line":70},[49,136072,136073],{"class":159},"  vertical-align",[49,136075,51968],{"class":73},[49,136077,136078],{"class":159},"middle",[49,136080,1990],{"class":73},[49,136082,136083],{"class":51,"line":219},[49,136084,2264],{"class":73},[25,136086],{"style":126939,"src":136087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,136089,136090],{},"主要解决方法有两种：",[30,136092,136093],{},[33,136094,136095,136098,136099,136102],{},[112,136096,136097],{},"给图片"," 添加 ",[112,136100,136101],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,136104,136105,136106],{},"2.把图片转换为块级元素 ",[112,136107,136108],{},"display: block",[14,136110,136111],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,136113,136114],{},"img {",[14,136116,136117],{},"vertical-align:middle;",[14,136119,1775],{},[18,136121,136123],{"id":136122},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,136125,136126],{},"效果：",[25,136128],{"style":126939,"src":136129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,136131,136132],{},"单行文本溢出显示省略号--必须满足三个条件：",[40,136134,136136],{"className":127083,"code":136135,"language":127085,"meta":27,"style":27},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[46,136137,136138,136143,136149,136159,136164,136174],{"__ignoreMap":27},[49,136139,136140],{"class":51,"line":52},[49,136141,136142],{"class":66},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[49,136144,136145,136147],{"class":51,"line":63},[49,136146,25],{"class":51831},[49,136148,16269],{"class":73},[49,136150,136151,136153,136155,136157],{"class":51,"line":70},[49,136152,136073],{"class":159},[49,136154,51968],{"class":73},[49,136156,136078],{"class":159},[49,136158,1990],{"class":73},[49,136160,136161],{"class":51,"line":219},[49,136162,136163],{"class":66},"  \u002F* 或 *\u002F\n",[49,136165,136166,136168,136170,136172],{"class":51,"line":233},[49,136167,128699],{"class":159},[49,136169,51968],{"class":73},[49,136171,61400],{"class":159},[49,136173,1990],{"class":73},[49,136175,136176],{"class":51,"line":241},[49,136177,2264],{"class":73},[18,136179,136181],{"id":136180},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,136183,136126],{},[25,136185],{"style":126939,"src":136186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,136188,136189,136190,136193],{},"多行文本溢出显示省略号， ",[112,136191,136192],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[40,136195,136196],{"className":127083,"code":136135,"language":127085,"meta":27,"style":27},[46,136197,136198,136202,136208,136218,136222,136232],{"__ignoreMap":27},[49,136199,136200],{"class":51,"line":52},[49,136201,136142],{"class":66},[49,136203,136204,136206],{"class":51,"line":63},[49,136205,25],{"class":51831},[49,136207,16269],{"class":73},[49,136209,136210,136212,136214,136216],{"class":51,"line":70},[49,136211,136073],{"class":159},[49,136213,51968],{"class":73},[49,136215,136078],{"class":159},[49,136217,1990],{"class":73},[49,136219,136220],{"class":51,"line":219},[49,136221,136163],{"class":66},[49,136223,136224,136226,136228,136230],{"class":51,"line":233},[49,136225,128699],{"class":159},[49,136227,51968],{"class":73},[49,136229,61400],{"class":159},[49,136231,1990],{"class":73},[49,136233,136234],{"class":51,"line":241},[49,136235,2264],{"class":73},[14,136237,136238],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[782,136240,136242],{"id":136241},"_133-常见布局技巧","13.3 常见布局技巧",[14,136244,136245],{},[112,136246,136247],{},"巧妙利用一个技术更快更好的布局：",[30,136249,136250,136253,136256,136259],{},[33,136251,136252],{},"margin负值的运用",[33,136254,136255],{},"文字围绕浮动元素",[33,136257,136258],{},"行内块的巧妙运用",[33,136260,136261],{},"CSS三角强化",[18,136263,136265],{"id":136264},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,136267,136268],{},"应用场景：",[25,136270],{"style":126939,"src":136271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[25,136273],{"style":126939,"src":136274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,136276,136277],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,136279,136280],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[40,136282,136283],{"className":127083,"code":130447,"language":127085,"meta":27,"style":27},[46,136284,136285,136289,136295,136311],{"__ignoreMap":27},[49,136286,136287],{"class":51,"line":52},[49,136288,130454],{"class":66},[49,136290,136291,136293],{"class":51,"line":63},[49,136292,52142],{"class":51831},[49,136294,16269],{"class":73},[49,136296,136297,136299,136301,136303,136305,136307,136309],{"class":51,"line":70},[49,136298,71427],{"class":159},[49,136300,51968],{"class":73},[49,136302,1047],{"class":159},[49,136304,52023],{"class":77},[49,136306,52052],{"class":159},[49,136308,130475],{"class":159},[49,136310,1990],{"class":73},[49,136312,136313],{"class":51,"line":219},[49,136314,2264],{"class":73},[25,136316],{"style":126939,"src":136317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,136319,136320],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[40,136322,136324],{"className":127083,"code":136323,"language":127085,"meta":27,"style":27},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[46,136325,136326,136331,136337,136347,136359,136371],{"__ignoreMap":27},[49,136327,136328],{"class":51,"line":52},[49,136329,136330],{"class":66},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[49,136332,136333,136335],{"class":51,"line":63},[49,136334,130931],{"class":55},[49,136336,16269],{"class":73},[49,136338,136339,136341,136343,136345],{"class":51,"line":70},[49,136340,132889],{"class":159},[49,136342,51968],{"class":73},[49,136344,55295],{"class":159},[49,136346,1990],{"class":73},[49,136348,136349,136351,136353,136355,136357],{"class":51,"line":219},[49,136350,132903],{"class":159},[49,136352,51968],{"class":73},[49,136354,1275],{"class":159},[49,136356,52023],{"class":77},[49,136358,1990],{"class":73},[49,136360,136361,136363,136365,136367,136369],{"class":51,"line":233},[49,136362,132920],{"class":159},[49,136364,51968],{"class":73},[49,136366,1529],{"class":159},[49,136368,52023],{"class":77},[49,136370,1990],{"class":73},[49,136372,136373],{"class":51,"line":241},[49,136374,2264],{"class":73},[14,136376,136377],{},"加上上述代码会发现：",[25,136379],{"style":126939,"src":136380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,136382,136383],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,136385,136386],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[40,136388,136389],{"className":127083,"code":136323,"language":127085,"meta":27,"style":27},[46,136390,136391,136395,136401,136411,136423,136435],{"__ignoreMap":27},[49,136392,136393],{"class":51,"line":52},[49,136394,136330],{"class":66},[49,136396,136397,136399],{"class":51,"line":63},[49,136398,130931],{"class":55},[49,136400,16269],{"class":73},[49,136402,136403,136405,136407,136409],{"class":51,"line":70},[49,136404,132889],{"class":159},[49,136406,51968],{"class":73},[49,136408,55295],{"class":159},[49,136410,1990],{"class":73},[49,136412,136413,136415,136417,136419,136421],{"class":51,"line":219},[49,136414,132903],{"class":159},[49,136416,51968],{"class":73},[49,136418,1275],{"class":159},[49,136420,52023],{"class":77},[49,136422,1990],{"class":73},[49,136424,136425,136427,136429,136431,136433],{"class":51,"line":233},[49,136426,132920],{"class":159},[49,136428,51968],{"class":73},[49,136430,1529],{"class":159},[49,136432,52023],{"class":77},[49,136434,1990],{"class":73},[49,136436,136437],{"class":51,"line":241},[49,136438,2264],{"class":73},[14,136440,136441],{},"解决方式2：",[14,136443,136444],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[40,136446,136448],{"className":127083,"code":136447,"language":127085,"meta":27,"style":27},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[46,136449,136450,136456,136466,136478,136490],{"__ignoreMap":27},[49,136451,136452,136454],{"class":51,"line":52},[49,136453,52142],{"class":51831},[49,136455,16269],{"class":73},[49,136457,136458,136460,136462,136464],{"class":51,"line":63},[49,136459,132889],{"class":159},[49,136461,51968],{"class":73},[49,136463,55295],{"class":159},[49,136465,1990],{"class":73},[49,136467,136468,136470,136472,136474,136476],{"class":51,"line":70},[49,136469,132903],{"class":159},[49,136471,51968],{"class":73},[49,136473,1275],{"class":159},[49,136475,52023],{"class":77},[49,136477,1990],{"class":73},[49,136479,136480,136482,136484,136486,136488],{"class":51,"line":219},[49,136481,132920],{"class":159},[49,136483,51968],{"class":73},[49,136485,1529],{"class":159},[49,136487,52023],{"class":77},[49,136489,1990],{"class":73},[49,136491,136492],{"class":51,"line":233},[49,136493,2264],{"class":73},[18,136495,136497],{"id":136496},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136499,136268],{},[25,136501],{"style":126939,"src":136502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136504,136505],{},"实现结构图：",[25,136507],{"style":126939,"src":136508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136510,136511],{},"巧妙运用浮动元素不会压住文字的特性",[14,136513,136514],{},"代码显示：",[40,136516,136518],{"className":127083,"code":136517,"language":127085,"meta":27,"style":27},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[46,136519,136520,136526,136536,136540,136545,136549,136555,136569],{"__ignoreMap":27},[49,136521,136522,136524],{"class":51,"line":52},[49,136523,130931],{"class":55},[49,136525,16269],{"class":73},[49,136527,136528,136530,136532,136534],{"class":51,"line":63},[49,136529,131563],{"class":159},[49,136531,51968],{"class":73},[49,136533,621],{"class":159},[49,136535,1990],{"class":73},[49,136537,136538],{"class":51,"line":70},[49,136539,2264],{"class":73},[49,136541,136542],{"class":51,"line":219},[49,136543,136544],{"class":73},"```Css\n",[49,136546,136547],{"class":51,"line":233},[49,136548,130926],{"class":66},[49,136550,136551,136553],{"class":51,"line":241},[49,136552,130931],{"class":55},[49,136554,16269],{"class":73},[49,136556,136557,136559,136561,136563,136565,136567],{"class":51,"line":1920},[49,136558,71001],{"class":159},[49,136560,51968],{"class":73},[49,136562,1021],{"class":159},[49,136564,52087],{"class":159},[49,136566,130946],{"class":73},[49,136568,130949],{"class":66},[49,136570,136571],{"class":51,"line":2011},[49,136572,2264],{"class":73},[14,136574,136575],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[40,136577,136580],{"className":136578,"code":136579,"language":5884},[5882],"\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",[46,136581,136579],{"__ignoreMap":27},[25,136583],{"style":126939,"src":136584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136586,136587],{},"最终展示结果：",[40,136589,136590],{"className":127083,"code":130919,"language":127085,"meta":27,"style":27},[46,136591,136592,136596,136602,136616],{"__ignoreMap":27},[49,136593,136594],{"class":51,"line":52},[49,136595,130926],{"class":66},[49,136597,136598,136600],{"class":51,"line":63},[49,136599,130931],{"class":55},[49,136601,16269],{"class":73},[49,136603,136604,136606,136608,136610,136612,136614],{"class":51,"line":70},[49,136605,71001],{"class":159},[49,136607,51968],{"class":73},[49,136609,1021],{"class":159},[49,136611,52087],{"class":159},[49,136613,130946],{"class":73},[49,136615,130949],{"class":66},[49,136617,136618],{"class":51,"line":219},[49,136619,2264],{"class":73},[25,136621],{"style":126939,"src":136622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[782,136624,136626],{"id":136625},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[18,136628,136630],{"id":136629},"_1341-原理","13.4.1 原理",[25,136632],{"style":126939,"src":136633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[40,136635,136636],{"className":127083,"code":130919,"language":127085,"meta":27,"style":27},[46,136637,136638,136642,136648,136662],{"__ignoreMap":27},[49,136639,136640],{"class":51,"line":52},[49,136641,130926],{"class":66},[49,136643,136644,136646],{"class":51,"line":63},[49,136645,130931],{"class":55},[49,136647,16269],{"class":73},[49,136649,136650,136652,136654,136656,136658,136660],{"class":51,"line":70},[49,136651,71001],{"class":159},[49,136653,51968],{"class":73},[49,136655,1021],{"class":159},[49,136657,52087],{"class":159},[49,136659,130946],{"class":73},[49,136661,130949],{"class":66},[49,136663,136664],{"class":51,"line":219},[49,136665,2264],{"class":73},[18,136667,136669],{"id":136668},"_1342-实例","13.4.2 实例",[25,136671],{"style":126939,"src":136672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[40,136674,136675],{"className":127083,"code":131549,"language":127085,"meta":27,"style":27},[46,136676,136677,136683,136693,136697,136703,136713],{"__ignoreMap":27},[49,136678,136679,136681],{"class":51,"line":52},[49,136680,131556],{"class":55},[49,136682,16269],{"class":73},[49,136684,136685,136687,136689,136691],{"class":51,"line":63},[49,136686,131563],{"class":159},[49,136688,51968],{"class":73},[49,136690,621],{"class":159},[49,136692,1990],{"class":73},[49,136694,136695],{"class":51,"line":70},[49,136696,2264],{"class":73},[49,136698,136699,136701],{"class":51,"line":219},[49,136700,131578],{"class":55},[49,136702,16269],{"class":73},[49,136704,136705,136707,136709,136711],{"class":51,"line":233},[49,136706,131563],{"class":159},[49,136708,51968],{"class":73},[49,136710,73053],{"class":159},[49,136712,1990],{"class":73},[49,136714,136715],{"class":51,"line":241},[49,136716,2264],{"class":73},[782,136718,136720],{"id":136719},"_135-css的初始化","13.5 css的初始化",[14,136722,136723],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136725,136726],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136728,136729],{},"每个网页都必须首先进行 CSS初始化。",[14,136731,136732],{},"这里我们以 京东CSS初始化代码为例。",[14,136734,136735],{},"在网页右键查看网页源代码",[14,136737,136738],{},"找到css的link引入语句",[14,136740,136741],{},"然后ctrl+f 输入body",[14,136743,77757],{},[25,136745],{"style":126939,"src":136746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136748,77780],{},[25,136750],{"style":126939,"src":136751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136753,136754],{},"③打开了网页上传压缩的代码",[25,136756],{"style":126939,"src":136757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136759,136760],{},"④从body前可以查看这个网页的初始化代码",[14,136762,136763],{},[112,136764,136765],{},"Unicode编码字体：",[14,136767,136768],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136770,83738],{},[14,136772,136773],{},"黑体 \\9ED1\\4F53",[14,136775,136776],{},"宋体 \\5B8B\\4F53",[14,136778,136779],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[757,136781,136782],{},"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":27,"searchDepth":63,"depth":63,"links":136784},[136785,136786,136793,136797,136801],{"id":135582,"depth":63,"text":135583},{"id":135704,"depth":63,"text":135705,"children":136787},[136788,136789,136790,136791,136792],{"id":135708,"depth":70,"text":135709},{"id":135861,"depth":70,"text":135862},{"id":135980,"depth":70,"text":135981},{"id":136122,"depth":70,"text":136123},{"id":136180,"depth":70,"text":136181},{"id":136241,"depth":63,"text":136242,"children":136794},[136795,136796],{"id":136264,"depth":70,"text":136265},{"id":136496,"depth":70,"text":136497},{"id":136625,"depth":63,"text":136626,"children":136798},[136799,136800],{"id":136629,"depth":70,"text":136630},{"id":136668,"depth":70,"text":136669},{"id":136719,"depth":63,"text":136720},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135574,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136808,"title":136809,"body":136810,"description":24072,"extension":766,"meta":138496,"navigation":398,"path":138497,"seo":138498,"stem":138499,"__hash__":138500},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136811,"toc":138485},[136812,136815,136819,136823,136826,136833,136836,136839,136877,136880,136882,136896,136900,136909,136913,136918,136921,136924,136927,136962,136967,136970,137000,137003,137008,137011,137014,137044,137047,137101,137104,137108,137113,137125,137128,137132,137162,137165,137170,137173,137203,137206,137210,137227,137231,137235,137238,137271,137274,137278,137281,137284,137287,137290,137293,137404,137407,137410,137413,137515,137518,137522,137526,137530,137533,137573,137576,137578,137594,137598,137601,137606,137687,137690,137693,137819,137824,137827,137835,137838,137843,137928,137931,137935,137938,137941,137945,137965,137970,138054,138057,138062,138065,138068,138146,138149,138152,138155,138158,138161,138166,138169,138172,138244,138247,138252,138255,138352,138355,138361,138364,138367,138370,138373,138376,138379,138382,138385,138389,138394,138397,138430,138435,138438,138479,138482],[10,136813,136809],{"id":136814},"_14-html5与css3新特性",[782,136816,136818],{"id":136817},"_141-html5的新特性","14.1 HTML5的新特性",[18,136820,136822],{"id":136821},"_1411-基本标签","14.1.1 基本标签",[14,136824,136825],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136827,136828,136829,136832],{},"这些新特性都有兼容性问题，基本是 ",[112,136830,136831],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136834,136835],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136837,136838],{},"现在使用的是新特性：",[742,136840,136841,136847,136853,136859,136865,136871],{},[33,136842,136843,136846],{},[46,136844,136845],{},"\u003Cheader>"," 头部标签",[33,136848,136849,136852],{},[46,136850,136851],{},"\u003Cnav>"," 导航标签",[33,136854,136855,136858],{},[46,136856,136857],{},"\u003Carticle>"," 内容标签",[33,136860,136861,136864],{},[46,136862,136863],{},"\u003Csection>"," 定义文档某个区域",[33,136866,136867,136870],{},[46,136868,136869],{},"\u003Caside>"," 侧边栏标签",[33,136872,136873,136876],{},[46,136874,136875],{},"\u003Cfooter>"," 尾部标签",[25,136878],{"style":126939,"src":136879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136881,870],{},[742,136883,136884,136887,136890,136893],{},[33,136885,136886],{},"这种语义化标准主要是针对搜索引擎的",[33,136888,136889],{},"这些标签页面中可以经常使用",[33,136891,136892],{},"在IE9中，需要把这些元素转换为块级元素",[33,136894,136895],{},"移动端更喜欢使用这些标签",[18,136897,136899],{"id":136898},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136901,136902,136903,136905,136906,136908],{},"音频 ",[112,136904,28705],{}," 和视频 ",[112,136907,28714],{}," 两个标签",[130,136910,136912],{"id":136911},"_14121-视频标签-video","14.1.2.1 视频标签- video",[30,136914,136915],{},[33,136916,136917],{},"支持格式：",[25,136919],{"style":126939,"src":136920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136922,136923],{},"尽量使用MP4，兼容性好",[14,136925,136926],{},"用MP4就可以",[40,136928,136930],{"className":127830,"code":136929,"language":127832,"meta":27,"style":27},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[46,136931,136932],{"__ignoreMap":27},[49,136933,136934,136936,136938,136940,136942,136945,136947,136950,136953,136956,136958,136960],{"class":51,"line":52},[49,136935,1739],{"class":73},[49,136937,28714],{"class":51831},[49,136939,55770],{"class":55},[49,136941,78],{"class":73},[49,136943,136944],{"class":59},"\"movie.mp4\"",[49,136946,92954],{"class":55},[49,136948,136949],{"class":55}," autoplay",[49,136951,136952],{"class":55}," muted",[49,136954,136955],{"class":55}," loop",[49,136957,55845],{"class":73},[49,136959,28714],{"class":51831},[49,136961,51838],{"class":73},[30,136963,136964],{"start":63},[33,136965,136966],{},"兼容写法",[14,136968,136969],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[40,136971,136972],{"className":127830,"code":136929,"language":127832,"meta":27,"style":27},[46,136973,136974],{"__ignoreMap":27},[49,136975,136976,136978,136980,136982,136984,136986,136988,136990,136992,136994,136996,136998],{"class":51,"line":52},[49,136977,1739],{"class":73},[49,136979,28714],{"class":51831},[49,136981,55770],{"class":55},[49,136983,78],{"class":73},[49,136985,136944],{"class":59},[49,136987,92954],{"class":55},[49,136989,136949],{"class":55},[49,136991,136952],{"class":55},[49,136993,136955],{"class":55},[49,136995,55845],{"class":73},[49,136997,28714],{"class":51831},[49,136999,51838],{"class":73},[14,137001,137002],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[30,137004,137005],{"start":70},[33,137006,137007],{},"video常用属性",[25,137009],{"style":126939,"src":137010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,137012,137013],{},"poster属性后面是跟的等待加载图片的地址",[40,137015,137016],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,137017,137018],{"__ignoreMap":27},[49,137019,137020,137022,137024,137026,137028,137030,137032,137034,137036,137038,137040,137042],{"class":51,"line":52},[49,137021,1739],{"class":73},[49,137023,25],{"class":51831},[49,137025,55770],{"class":55},[49,137027,78],{"class":73},[49,137029,134600],{"class":59},[49,137031,55778],{"class":55},[49,137033,78],{"class":73},[49,137035,134607],{"class":59},[49,137037,134610],{"class":55},[49,137039,78],{"class":73},[49,137041,134615],{"class":59},[49,137043,51838],{"class":73},[14,137045,137046],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[40,137048,137050],{"className":127083,"code":137049,"language":127085,"meta":27,"style":27},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[46,137051,137052,137057,137063,137087,137092,137097],{"__ignoreMap":27},[49,137053,137054],{"class":51,"line":52},[49,137055,137056],{"class":66},"\u002F* 2D 位移 *\u002F\n",[49,137058,137059,137061],{"class":51,"line":63},[49,137060,52142],{"class":51831},[49,137062,16269],{"class":73},[49,137064,137065,137068,137070,137073,137075,137077,137079,137081,137083,137085],{"class":51,"line":70},[49,137066,137067],{"class":159},"  transform",[49,137069,51968],{"class":73},[49,137071,137072],{"class":159},"translate",[49,137074,841],{"class":73},[49,137076,1140],{"class":159},[49,137078,52023],{"class":77},[49,137080,13132],{"class":73},[49,137082,1485],{"class":159},[49,137084,52023],{"class":77},[49,137086,3416],{"class":73},[49,137088,137089],{"class":51,"line":219},[49,137090,137091],{"class":66},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[49,137093,137094],{"class":51,"line":233},[49,137095,137096],{"class":66},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[49,137098,137099],{"class":51,"line":241},[49,137100,2264],{"class":73},[14,137102,137103],{},"muted:自动静音属性",[130,137105,137107],{"id":137106},"_14122-音频标签audio","14.1.2.2 音频标签audio",[30,137109,137110],{},[33,137111,137112],{},"基本使用",[14,137114,137115,137116,137121,137122],{},"当前 ",[112,137117,137118],{},[46,137119,137120],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[112,137123,137124],{},"mp3格式",[25,137126],{"style":126939,"src":137127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[30,137129,137130],{"start":63},[33,137131,136966],{},[40,137133,137134],{"className":127830,"code":136929,"language":127832,"meta":27,"style":27},[46,137135,137136],{"__ignoreMap":27},[49,137137,137138,137140,137142,137144,137146,137148,137150,137152,137154,137156,137158,137160],{"class":51,"line":52},[49,137139,1739],{"class":73},[49,137141,28714],{"class":51831},[49,137143,55770],{"class":55},[49,137145,78],{"class":73},[49,137147,136944],{"class":59},[49,137149,92954],{"class":55},[49,137151,136949],{"class":55},[49,137153,136952],{"class":55},[49,137155,136955],{"class":55},[49,137157,55845],{"class":73},[49,137159,28714],{"class":51831},[49,137161,51838],{"class":73},[14,137163,137164],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[30,137166,137167],{"start":70},[33,137168,137169],{},"常用属性",[25,137171],{"style":126939,"src":137172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[40,137174,137175],{"className":127830,"code":136929,"language":127832,"meta":27,"style":27},[46,137176,137177],{"__ignoreMap":27},[49,137178,137179,137181,137183,137185,137187,137189,137191,137193,137195,137197,137199,137201],{"class":51,"line":52},[49,137180,1739],{"class":73},[49,137182,28714],{"class":51831},[49,137184,55770],{"class":55},[49,137186,78],{"class":73},[49,137188,136944],{"class":59},[49,137190,92954],{"class":55},[49,137192,136949],{"class":55},[49,137194,136952],{"class":55},[49,137196,136955],{"class":55},[49,137198,55845],{"class":73},[49,137200,28714],{"class":51831},[49,137202,51838],{"class":73},[14,137204,137205],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[130,137207,137209],{"id":137208},"_14123-总结","14.1.2.3 总结",[742,137211,137212,137215,137218,137221,137224],{},[33,137213,137214],{},"音频标签和视频标签使用方式基本一致",[33,137216,137217],{},"浏览器支持情况不同",[33,137219,137220],{},"谷歌浏览器把音频和视频自动播放禁止了",[33,137222,137223],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[33,137225,137226],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[18,137228,137230],{"id":137229},"_1413-表单元素","14.1.3 表单元素",[130,137232,137234],{"id":137233},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[25,137236],{"style":126939,"src":137237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[40,137239,137241],{"className":127830,"code":137240,"language":127832,"meta":27,"style":27},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[46,137242,137243],{"__ignoreMap":27},[49,137244,137245,137247,137249,137251,137253,137255,137257,137259,137262,137264,137266,137269],{"class":51,"line":52},[49,137246,1739],{"class":73},[49,137248,54352],{"class":51831},[49,137250,54355],{"class":55},[49,137252,78],{"class":73},[49,137254,63230],{"class":59},[49,137256,15617],{"class":55},[49,137258,78],{"class":73},[49,137260,137261],{"class":59},"\"username\"",[49,137263,61551],{"class":55},[49,137265,78],{"class":73},[49,137267,137268],{"class":59},"\"请输入用户名\"",[49,137270,51838],{"class":73},[25,137272],{"style":126939,"src":137273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[130,137275,137277],{"id":137276},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[25,137279],{"style":126939,"src":137280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,137282,137283],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,137285,137286],{},"快捷操作：",[25,137288],{"style":126939,"src":137289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,137291,137292],{},"例子1：",[40,137294,137296],{"className":127830,"code":137295,"language":127832,"meta":27,"style":27},"\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",[46,137297,137298,137321,137348,137377,137396],{"__ignoreMap":27},[49,137299,137300,137302,137304,137306,137308,137311,137314,137316,137319],{"class":51,"line":52},[49,137301,1739],{"class":73},[49,137303,67156],{"class":51831},[49,137305,67159],{"class":55},[49,137307,78],{"class":73},[49,137309,137310],{"class":59},"\"\u002Fsubmit\"",[49,137312,137313],{"class":55}," method",[49,137315,78],{"class":73},[49,137317,137318],{"class":59},"\"post\"",[49,137320,51838],{"class":73},[49,137322,137323,137325,137327,137329,137331,137333,137335,137337,137339,137341,137343,137346],{"class":51,"line":63},[49,137324,52675],{"class":73},[49,137326,54352],{"class":51831},[49,137328,54355],{"class":55},[49,137330,78],{"class":73},[49,137332,63230],{"class":59},[49,137334,15617],{"class":55},[49,137336,78],{"class":73},[49,137338,137261],{"class":59},[49,137340,61551],{"class":55},[49,137342,78],{"class":73},[49,137344,137345],{"class":59},"\"用户名\"",[49,137347,51838],{"class":73},[49,137349,137350,137352,137354,137356,137358,137361,137363,137365,137368,137370,137372,137375],{"class":51,"line":70},[49,137351,52675],{"class":73},[49,137353,54352],{"class":51831},[49,137355,54355],{"class":55},[49,137357,78],{"class":73},[49,137359,137360],{"class":59},"\"password\"",[49,137362,15617],{"class":55},[49,137364,78],{"class":73},[49,137366,137367],{"class":59},"\"pwd\"",[49,137369,61551],{"class":55},[49,137371,78],{"class":73},[49,137373,137374],{"class":59},"\"密码\"",[49,137376,51838],{"class":73},[49,137378,137379,137381,137383,137385,137387,137389,137392,137394],{"class":51,"line":219},[49,137380,52675],{"class":73},[49,137382,54418],{"class":51831},[49,137384,54355],{"class":55},[49,137386,78],{"class":73},[49,137388,67179],{"class":59},[49,137390,137391],{"class":73},">提交\u003C\u002F",[49,137393,54418],{"class":51831},[49,137395,51838],{"class":73},[49,137397,137398,137400,137402],{"class":51,"line":233},[49,137399,52316],{"class":73},[49,137401,67156],{"class":51831},[49,137403,51838],{"class":73},[25,137405],{"style":126939,"src":137406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,137408,137409],{},"value是表单域的内容",[14,137411,137412],{},"例子2：",[40,137414,137415],{"className":127830,"code":137295,"language":127832,"meta":27,"style":27},[46,137416,137417,137437,137463,137489,137507],{"__ignoreMap":27},[49,137418,137419,137421,137423,137425,137427,137429,137431,137433,137435],{"class":51,"line":52},[49,137420,1739],{"class":73},[49,137422,67156],{"class":51831},[49,137424,67159],{"class":55},[49,137426,78],{"class":73},[49,137428,137310],{"class":59},[49,137430,137313],{"class":55},[49,137432,78],{"class":73},[49,137434,137318],{"class":59},[49,137436,51838],{"class":73},[49,137438,137439,137441,137443,137445,137447,137449,137451,137453,137455,137457,137459,137461],{"class":51,"line":63},[49,137440,52675],{"class":73},[49,137442,54352],{"class":51831},[49,137444,54355],{"class":55},[49,137446,78],{"class":73},[49,137448,63230],{"class":59},[49,137450,15617],{"class":55},[49,137452,78],{"class":73},[49,137454,137261],{"class":59},[49,137456,61551],{"class":55},[49,137458,78],{"class":73},[49,137460,137345],{"class":59},[49,137462,51838],{"class":73},[49,137464,137465,137467,137469,137471,137473,137475,137477,137479,137481,137483,137485,137487],{"class":51,"line":70},[49,137466,52675],{"class":73},[49,137468,54352],{"class":51831},[49,137470,54355],{"class":55},[49,137472,78],{"class":73},[49,137474,137360],{"class":59},[49,137476,15617],{"class":55},[49,137478,78],{"class":73},[49,137480,137367],{"class":59},[49,137482,61551],{"class":55},[49,137484,78],{"class":73},[49,137486,137374],{"class":59},[49,137488,51838],{"class":73},[49,137490,137491,137493,137495,137497,137499,137501,137503,137505],{"class":51,"line":219},[49,137492,52675],{"class":73},[49,137494,54418],{"class":51831},[49,137496,54355],{"class":55},[49,137498,78],{"class":73},[49,137500,67179],{"class":59},[49,137502,137391],{"class":73},[49,137504,54418],{"class":51831},[49,137506,51838],{"class":73},[49,137508,137509,137511,137513],{"class":51,"line":233},[49,137510,52316],{"class":73},[49,137512,67156],{"class":51831},[49,137514,51838],{"class":73},[25,137516],{"style":126939,"src":137517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[782,137519,137521],{"id":137520},"_142-css新特性","14.2 CSS新特性",[18,137523,137525],{"id":137524},"_1421-新增选择器","14.2.1 新增选择器",[130,137527,137529],{"id":137528},"_14211-属性选择器","14.2.1.1 属性选择器",[25,137531],{"style":126939,"src":137532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[40,137534,137536],{"className":127083,"code":137535,"language":127085,"meta":27,"style":27},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[46,137537,137538,137553,137569],{"__ignoreMap":27},[49,137539,137540,137542,137544,137546,137548,137550],{"class":51,"line":52},[49,137541,54352],{"class":51831},[49,137543,1719],{"class":73},[49,137545,103638],{"class":55},[49,137547,78],{"class":77},[49,137549,63230],{"class":59},[49,137551,137552],{"class":73},"] {\n",[49,137554,137555,137557,137559,137561,137563,137565,137567],{"class":51,"line":63},[49,137556,71427],{"class":159},[49,137558,51968],{"class":73},[49,137560,1047],{"class":159},[49,137562,52023],{"class":77},[49,137564,52052],{"class":159},[49,137566,130663],{"class":159},[49,137568,1990],{"class":73},[49,137570,137571],{"class":51,"line":70},[49,137572,2264],{"class":73},[25,137574],{"style":126939,"src":137575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137577,870],{},[742,137579,137580,137583,137586,137589],{},[33,137581,137582],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[33,137584,137585],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[33,137587,137588],{},"属性选择器也可以选择出来自定义的属性",[33,137590,137591,137593],{},[112,137592,9722],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[130,137595,137597],{"id":137596},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[25,137599],{"style":126939,"src":137600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[30,137602,137603],{},[33,137604,137605],{},"fist-child",[40,137607,137609],{"className":127083,"code":137608,"language":127085,"meta":27,"style":27},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[46,137610,137611,137616,137631,137651,137669],{"__ignoreMap":27},[49,137612,137613],{"class":51,"line":52},[49,137614,137615],{"class":66},"\u002F* 属性选择器 *\u002F\n",[49,137617,137618,137620,137622,137624,137626,137628],{"class":51,"line":63},[49,137619,54352],{"class":51831},[49,137621,1719],{"class":73},[49,137623,103638],{"class":55},[49,137625,78],{"class":77},[49,137627,63230],{"class":59},[49,137629,137630],{"class":73},"] { }\n",[49,137632,137633,137635,137637,137639,137642,137645,137648],{"class":51,"line":70},[49,137634,54352],{"class":51831},[49,137636,1719],{"class":73},[49,137638,15391],{"class":55},[49,137640,137641],{"class":77},"^=",[49,137643,137644],{"class":59},"\"icon\"",[49,137646,137647],{"class":73},"] { }  ",[49,137649,137650],{"class":66},"\u002F* 以 icon 开头 *\u002F\n",[49,137652,137653,137655,137657,137659,137662,137664,137666],{"class":51,"line":219},[49,137654,54352],{"class":51831},[49,137656,1719],{"class":73},[49,137658,15391],{"class":55},[49,137660,137661],{"class":77},"$=",[49,137663,137644],{"class":59},[49,137665,137647],{"class":73},[49,137667,137668],{"class":66},"\u002F* 以 icon 结尾 *\u002F\n",[49,137670,137671,137673,137675,137677,137680,137682,137684],{"class":51,"line":233},[49,137672,54352],{"class":51831},[49,137674,1719],{"class":73},[49,137676,15391],{"class":55},[49,137678,137679],{"class":77},"*=",[49,137681,137644],{"class":59},[49,137683,137647],{"class":73},[49,137685,137686],{"class":66},"\u002F* 包含 icon *\u002F\n",[14,137688,137689],{},"ul的第一个儿子文本为红色",[14,137691,137692],{},"一定要在冒号前加空格，不然就是选中所有的了",[40,137694,137696],{"className":127083,"code":137695,"language":127085,"meta":27,"style":27},".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",[46,137697,137698,137704,137714,137718,137722,137727,137740,137753,137769,137786,137803],{"__ignoreMap":27},[49,137699,137700,137702],{"class":51,"line":52},[49,137701,127374],{"class":55},[49,137703,16269],{"class":73},[49,137705,137706,137708,137710,137712],{"class":51,"line":63},[49,137707,71436],{"class":159},[49,137709,51968],{"class":73},[49,137711,57952],{"class":159},[49,137713,1990],{"class":73},[49,137715,137716],{"class":51,"line":70},[49,137717,2264],{"class":73},[49,137719,137720],{"class":51,"line":219},[49,137721,136544],{"class":73},[49,137723,137724],{"class":51,"line":233},[49,137725,137726],{"class":66},"\u002F* 结构伪类选择器 *\u002F\n",[49,137728,137729,137731,137734,137737],{"class":51,"line":241},[49,137730,33],{"class":51831},[49,137732,137733],{"class":55},":first-child",[49,137735,137736],{"class":73}," { }           ",[49,137738,137739],{"class":66},"\u002F* 第一个 *\u002F\n",[49,137741,137742,137744,137747,137750],{"class":51,"line":1920},[49,137743,33],{"class":51831},[49,137745,137746],{"class":55},":last-child",[49,137748,137749],{"class":73}," { }            ",[49,137751,137752],{"class":66},"\u002F* 最后一个 *\u002F\n",[49,137754,137755,137757,137759,137761,137763,137766],{"class":51,"line":2011},[49,137756,33],{"class":51831},[49,137758,129997],{"class":55},[49,137760,841],{"class":73},[49,137762,915],{"class":159},[49,137764,137765],{"class":73},") { }          ",[49,137767,137768],{"class":66},"\u002F* 第2个 *\u002F\n",[49,137770,137771,137773,137775,137777,137780,137783],{"class":51,"line":2017},[49,137772,33],{"class":51831},[49,137774,129997],{"class":55},[49,137776,841],{"class":73},[49,137778,137779],{"class":159},"2n",[49,137781,137782],{"class":73},") { }         ",[49,137784,137785],{"class":66},"\u002F* 偶数 *\u002F\n",[49,137787,137788,137790,137792,137794,137797,137800],{"class":51,"line":2029},[49,137789,33],{"class":51831},[49,137791,129997],{"class":55},[49,137793,841],{"class":73},[49,137795,137796],{"class":159},"2n+1",[49,137798,137799],{"class":73},") { }       ",[49,137801,137802],{"class":66},"\u002F* 奇数 *\u002F\n",[49,137804,137805,137807,137809,137811,137814,137816],{"class":51,"line":2311},[49,137806,33],{"class":51831},[49,137808,129997],{"class":55},[49,137810,841],{"class":73},[49,137812,137813],{"class":159},"-n+3",[49,137815,137799],{"class":73},[49,137817,137818],{"class":66},"\u002F* 前3个 *\u002F\n",[52142,137820,137823],{"className":137821},[137822],"example","\n  示例内容\n",[14,137825,137826],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[742,137828,137829],{},[33,137830,137831,137834],{},[46,137832,137833],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137836,137837],{},"也就是说它选择的是熊大",[30,137839,137840],{"start":241},[33,137841,137842],{},"权重",[40,137844,137846],{"className":127083,"code":137845,"language":127085,"meta":27,"style":27},"\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",[46,137847,137848,137852,137862,137872,137886,137900,137914],{"__ignoreMap":27},[49,137849,137850],{"class":51,"line":52},[49,137851,137726],{"class":66},[49,137853,137854,137856,137858,137860],{"class":51,"line":63},[49,137855,33],{"class":51831},[49,137857,137733],{"class":55},[49,137859,137736],{"class":73},[49,137861,137739],{"class":66},[49,137863,137864,137866,137868,137870],{"class":51,"line":70},[49,137865,33],{"class":51831},[49,137867,137746],{"class":55},[49,137869,137749],{"class":73},[49,137871,137752],{"class":66},[49,137873,137874,137876,137878,137880,137882,137884],{"class":51,"line":219},[49,137875,33],{"class":51831},[49,137877,129997],{"class":55},[49,137879,841],{"class":73},[49,137881,915],{"class":159},[49,137883,137765],{"class":73},[49,137885,137768],{"class":66},[49,137887,137888,137890,137892,137894,137896,137898],{"class":51,"line":233},[49,137889,33],{"class":51831},[49,137891,129997],{"class":55},[49,137893,841],{"class":73},[49,137895,137779],{"class":159},[49,137897,137782],{"class":73},[49,137899,137785],{"class":66},[49,137901,137902,137904,137906,137908,137910,137912],{"class":51,"line":241},[49,137903,33],{"class":51831},[49,137905,129997],{"class":55},[49,137907,841],{"class":73},[49,137909,137796],{"class":159},[49,137911,137799],{"class":73},[49,137913,137802],{"class":66},[49,137915,137916,137918,137920,137922,137924,137926],{"class":51,"line":1920},[49,137917,33],{"class":51831},[49,137919,129997],{"class":55},[49,137921,841],{"class":73},[49,137923,137813],{"class":159},[49,137925,137799],{"class":73},[49,137927,137818],{"class":66},[14,137929,137930],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[130,137932,137934],{"id":137933},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137936,137937],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[25,137939],{"style":126939,"src":137940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[30,137942,137943],{},[33,137944,870],{},[742,137946,137947,137950,137953,137956,137959,137962],{},[33,137948,137949],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[33,137951,137952],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[33,137954,137955],{},"语法： element::before {}",[33,137957,137958],{},"before 和 after 必须有 content 属性",[33,137960,137961],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[33,137963,137964],{},"伪元素选择器和标签选择器一样，权重为 1",[30,137966,137967],{"start":63},[33,137968,137969],{},"实例",[40,137971,137972],{"className":127083,"code":137845,"language":127085,"meta":27,"style":27},[46,137973,137974,137978,137988,137998,138012,138026,138040],{"__ignoreMap":27},[49,137975,137976],{"class":51,"line":52},[49,137977,137726],{"class":66},[49,137979,137980,137982,137984,137986],{"class":51,"line":63},[49,137981,33],{"class":51831},[49,137983,137733],{"class":55},[49,137985,137736],{"class":73},[49,137987,137739],{"class":66},[49,137989,137990,137992,137994,137996],{"class":51,"line":70},[49,137991,33],{"class":51831},[49,137993,137746],{"class":55},[49,137995,137749],{"class":73},[49,137997,137752],{"class":66},[49,137999,138000,138002,138004,138006,138008,138010],{"class":51,"line":219},[49,138001,33],{"class":51831},[49,138003,129997],{"class":55},[49,138005,841],{"class":73},[49,138007,915],{"class":159},[49,138009,137765],{"class":73},[49,138011,137768],{"class":66},[49,138013,138014,138016,138018,138020,138022,138024],{"class":51,"line":233},[49,138015,33],{"class":51831},[49,138017,129997],{"class":55},[49,138019,841],{"class":73},[49,138021,137779],{"class":159},[49,138023,137782],{"class":73},[49,138025,137785],{"class":66},[49,138027,138028,138030,138032,138034,138036,138038],{"class":51,"line":241},[49,138029,33],{"class":51831},[49,138031,129997],{"class":55},[49,138033,841],{"class":73},[49,138035,137796],{"class":159},[49,138037,137799],{"class":73},[49,138039,137802],{"class":66},[49,138041,138042,138044,138046,138048,138050,138052],{"class":51,"line":1920},[49,138043,33],{"class":51831},[49,138045,129997],{"class":55},[49,138047,841],{"class":73},[49,138049,137813],{"class":159},[49,138051,137799],{"class":73},[49,138053,137818],{"class":66},[25,138055],{"style":126939,"src":138056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[30,138058,138059],{"start":70},[33,138060,138061],{},"使用场景1",[25,138063],{"style":126939,"src":138064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,138066,138067],{},"不需要再加盒子来整红色那部分了",[40,138069,138071],{"className":127083,"code":138070,"language":127085,"meta":27,"style":27},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[46,138072,138073,138078,138087,138098,138108,138112,138121,138132,138142],{"__ignoreMap":27},[49,138074,138075],{"class":51,"line":52},[49,138076,138077],{"class":66},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[49,138079,138080,138082,138085],{"class":51,"line":63},[49,138081,52142],{"class":51831},[49,138083,138084],{"class":55},"::before",[49,138086,16269],{"class":73},[49,138088,138089,138092,138094,138096],{"class":51,"line":70},[49,138090,138091],{"class":159},"  content",[49,138093,51968],{"class":73},[49,138095,8349],{"class":59},[49,138097,1990],{"class":73},[49,138099,138100,138102,138104,138106],{"class":51,"line":219},[49,138101,128699],{"class":159},[49,138103,51968],{"class":73},[49,138105,61400],{"class":159},[49,138107,1990],{"class":73},[49,138109,138110],{"class":51,"line":233},[49,138111,2264],{"class":73},[49,138113,138114,138116,138119],{"class":51,"line":241},[49,138115,52142],{"class":51831},[49,138117,138118],{"class":55},"::after",[49,138120,16269],{"class":73},[49,138122,138123,138125,138127,138130],{"class":51,"line":1920},[49,138124,138091],{"class":159},[49,138126,51968],{"class":73},[49,138128,138129],{"class":59},"\"→\"",[49,138131,1990],{"class":73},[49,138133,138134,138136,138138,138140],{"class":51,"line":2011},[49,138135,71436],{"class":159},[49,138137,51968],{"class":73},[49,138139,62601],{"class":159},[49,138141,1990],{"class":73},[49,138143,138144],{"class":51,"line":2017},[49,138145,2264],{"class":73},[25,138147],{"style":126939,"src":138148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,138150,138151],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[25,138153],{"style":126939,"src":138154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,138156,138157],{},"但是在引用时需要先转义一下",[14,138159,138160],{},"content='\\e930'",[30,138162,138163],{"start":219},[33,138164,138165],{},"使用场景2",[14,138167,138168],{},"仿土豆效果",[14,138170,138171],{},"通过使用伪元素选择器可以减少body中盒子的数量",[40,138173,138174],{"className":127083,"code":138070,"language":127085,"meta":27,"style":27},[46,138175,138176,138180,138188,138198,138208,138212,138220,138230,138240],{"__ignoreMap":27},[49,138177,138178],{"class":51,"line":52},[49,138179,138077],{"class":66},[49,138181,138182,138184,138186],{"class":51,"line":63},[49,138183,52142],{"class":51831},[49,138185,138084],{"class":55},[49,138187,16269],{"class":73},[49,138189,138190,138192,138194,138196],{"class":51,"line":70},[49,138191,138091],{"class":159},[49,138193,51968],{"class":73},[49,138195,8349],{"class":59},[49,138197,1990],{"class":73},[49,138199,138200,138202,138204,138206],{"class":51,"line":219},[49,138201,128699],{"class":159},[49,138203,51968],{"class":73},[49,138205,61400],{"class":159},[49,138207,1990],{"class":73},[49,138209,138210],{"class":51,"line":233},[49,138211,2264],{"class":73},[49,138213,138214,138216,138218],{"class":51,"line":241},[49,138215,52142],{"class":51831},[49,138217,138118],{"class":55},[49,138219,16269],{"class":73},[49,138221,138222,138224,138226,138228],{"class":51,"line":1920},[49,138223,138091],{"class":159},[49,138225,51968],{"class":73},[49,138227,138129],{"class":59},[49,138229,1990],{"class":73},[49,138231,138232,138234,138236,138238],{"class":51,"line":2011},[49,138233,71436],{"class":159},[49,138235,51968],{"class":73},[49,138237,62601],{"class":159},[49,138239,1990],{"class":73},[49,138241,138242],{"class":51,"line":2017},[49,138243,2264],{"class":73},[25,138245],{"style":126939,"src":138246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[30,138248,138249],{"start":233},[33,138250,138251],{},"使用场景3",[14,138253,138254],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[40,138256,138258],{"className":127083,"code":138257,"language":127085,"meta":27,"style":27},".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",[46,138259,138260,138266,138276,138280,138284,138288,138296,138306,138316,138320,138328,138338,138348],{"__ignoreMap":27},[49,138261,138262,138264],{"class":51,"line":52},[49,138263,130931],{"class":55},[49,138265,16269],{"class":73},[49,138267,138268,138270,138272,138274],{"class":51,"line":63},[49,138269,131563],{"class":159},[49,138271,51968],{"class":73},[49,138273,621],{"class":159},[49,138275,1990],{"class":73},[49,138277,138278],{"class":51,"line":70},[49,138279,2264],{"class":73},[49,138281,138282],{"class":51,"line":219},[49,138283,136544],{"class":73},[49,138285,138286],{"class":51,"line":233},[49,138287,138077],{"class":66},[49,138289,138290,138292,138294],{"class":51,"line":241},[49,138291,52142],{"class":51831},[49,138293,138084],{"class":55},[49,138295,16269],{"class":73},[49,138297,138298,138300,138302,138304],{"class":51,"line":1920},[49,138299,138091],{"class":159},[49,138301,51968],{"class":73},[49,138303,8349],{"class":59},[49,138305,1990],{"class":73},[49,138307,138308,138310,138312,138314],{"class":51,"line":2011},[49,138309,128699],{"class":159},[49,138311,51968],{"class":73},[49,138313,61400],{"class":159},[49,138315,1990],{"class":73},[49,138317,138318],{"class":51,"line":2017},[49,138319,2264],{"class":73},[49,138321,138322,138324,138326],{"class":51,"line":2029},[49,138323,52142],{"class":51831},[49,138325,138118],{"class":55},[49,138327,16269],{"class":73},[49,138329,138330,138332,138334,138336],{"class":51,"line":2311},[49,138331,138091],{"class":159},[49,138333,51968],{"class":73},[49,138335,138129],{"class":59},[49,138337,1990],{"class":73},[49,138339,138340,138342,138344,138346],{"class":51,"line":2316},[49,138341,71436],{"class":159},[49,138343,51968],{"class":73},[49,138345,62601],{"class":159},[49,138347,1990],{"class":73},[49,138349,138350],{"class":51,"line":2322},[49,138351,2264],{"class":73},[14,138353,138354],{},"div {\nmargin: 0 auto;\n}",[40,138356,138359],{"className":138357,"code":138358,"language":5884},[5882],"\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",[46,138360,138358],{"__ignoreMap":27},[14,138362,138363],{},"如果想让多个元素都发生变化",[14,138365,138366],{},"不能如下操作：",[14,138368,138369],{},"transition: width 2s ease 0.5s;",[14,138371,138372],{},"transition: height 2s ease 0.5s;不对！！！",[14,138374,138375],{},"上方会样式冲突，导致不显示任何过渡效果",[14,138377,138378],{},"使用如下：加逗号隔开",[14,138380,138381],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,138383,138384],{},"transition all 2s ease;",[18,138386,138388],{"id":138387},"_1426-过渡练习","14.2.6 过渡练习",[30,138390,138391],{},[33,138392,138393],{},"进度条",[25,138395],{"style":126939,"src":138396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[40,138398,138400],{"className":127083,"code":138399,"language":127085,"meta":27,"style":27},"div {\n  transition: all 0.3s ease;\n}\n",[46,138401,138402,138408,138426],{"__ignoreMap":27},[49,138403,138404,138406],{"class":51,"line":52},[49,138405,52142],{"class":51831},[49,138407,16269],{"class":73},[49,138409,138410,138413,138415,138417,138420,138422,138424],{"class":51,"line":63},[49,138411,138412],{"class":159},"  transition",[49,138414,51968],{"class":73},[49,138416,28652],{"class":159},[49,138418,138419],{"class":159}," 0.3",[49,138421,1524],{"class":77},[49,138423,79211],{"class":159},[49,138425,1990],{"class":73},[49,138427,138428],{"class":51,"line":70},[49,138429,2264],{"class":73},[30,138431,138432],{"start":63},[33,138433,138434],{},"小米logo",[14,138436,138437],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[40,138439,138441],{"className":127083,"code":138440,"language":127085,"meta":27,"style":27},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[46,138442,138443,138448,138454,138470,138475],{"__ignoreMap":27},[49,138444,138445],{"class":51,"line":52},[49,138446,138447],{"class":66},"\u002F* CSS3 过渡 *\u002F\n",[49,138449,138450,138452],{"class":51,"line":63},[49,138451,52142],{"class":51831},[49,138453,16269],{"class":73},[49,138455,138456,138458,138460,138462,138464,138466,138468],{"class":51,"line":70},[49,138457,138412],{"class":159},[49,138459,51968],{"class":73},[49,138461,28652],{"class":159},[49,138463,138419],{"class":159},[49,138465,1524],{"class":77},[49,138467,79211],{"class":159},[49,138469,1990],{"class":73},[49,138471,138472],{"class":51,"line":219},[49,138473,138474],{"class":66},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[49,138476,138477],{"class":51,"line":233},[49,138478,2264],{"class":73},[14,138480,138481],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[757,138483,138484],{},"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":27,"searchDepth":63,"depth":63,"links":138486},[138487,138492],{"id":136817,"depth":63,"text":136818,"children":138488},[138489,138490,138491],{"id":136821,"depth":70,"text":136822},{"id":136898,"depth":70,"text":136899},{"id":137229,"depth":70,"text":137230},{"id":137520,"depth":63,"text":137521,"children":138493},[138494,138495],{"id":137524,"depth":70,"text":137525},{"id":138387,"depth":70,"text":138388},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136809,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138502,"title":138503,"body":138504,"description":24072,"extension":766,"meta":140248,"navigation":398,"path":140249,"seo":140250,"stem":140251,"__hash__":140252},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138505,"toc":140229},[138506,138509,138513,138516,138522,138528,138532,138534,138537,138540,138543,138546,138549,138552,138555,138559,138563,138566,138569,138572,138576,138579,138582,138587,138590,138593,138596,138600,138603,138612,138615,138618,138622,138625,138628,138633,138640,138654,138662,138669,138674,138677,138680,138683,138690,138694,138700,138706,138709,138712,138717,138723,138725,138733,138738,138741,138747,138749,138754,138759,138762,138764,138769,138772,138777,138782,138816,138820,138824,138827,138831,138834,138920,138923,138960,138963,138999,139003,139008,139021,139075,139077,139105,139107,139135,139141,139155,139157,139201,139203,139247,139250,139257,139268,139270,139297,139299,139325,139332,139348,139350,139444,139446,139540,139547,139550,139555,139561,139635,139638,139640,139676,139678,139714,139717,139724,139743,139746,139749,139751,139776,139778,139802,139805,139808,139838,139842,139845,139908,139910,139976,139978,140042,140045,140077,140079,140105,140107,140133,140136,140167,140169,140195,140197,140223,140226],[10,138507,138503],{"id":138508},"_15-品优购项目上篇-搭建与公共模块",[782,138510,138512],{"id":138511},"_151-项目规划","15.1 项目规划",[25,138514],{"style":126939,"src":138515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138517,138518,138521],{},[112,138519,138520],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138523,138524,138527],{},[112,138525,138526],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[782,138529,138531],{"id":138530},"_152-项目介绍","15.2 项目介绍",[14,138533,138520],{},[25,138535],{"style":126939,"src":138536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138538,138539],{},"主页：",[25,138541],{"style":126939,"src":138542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138544,138545],{},"列表页：",[25,138547],{"style":126939,"src":138548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138550,138551],{},"注册页：",[25,138553],{"style":126939,"src":138554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[782,138556,138558],{"id":138557},"_153-项目搭建工作","15.3 项目搭建工作",[18,138560,138562],{"id":138561},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[25,138564],{"style":126939,"src":138565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138567,138568],{},"经常更换的图片要放到upload文件夹中",[14,138570,138571],{},"不经常换的放到images文件夹中",[18,138573,138575],{"id":138574},"_1532-创建文件如下","15.3.2 创建文件如下",[25,138577],{"style":126939,"src":138578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[25,138580],{"style":126939,"src":138581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138583,138584],{},[112,138585,138586],{},"初始化样式：",[14,138588,138589],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138591,138592],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138594,138595],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[18,138597,138599],{"id":138598},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138601,138602],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138604,138605,138606,138611],{},"这里最典型的应用就是 ",[112,138607,138608],{},[46,138609,138610],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[25,138613],{"style":126939,"src":138614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138616,138617],{},"通过link方法来引入",[18,138619,138621],{"id":138620},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[25,138623],{"style":126939,"src":138624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138626,138627],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[30,138629,138630],{},[33,138631,138632],{},"制作favicon图标",[14,138634,138635,138636,138639],{},"①把品优购图标切成 ",[46,138637,138638],{},"png"," 图片",[14,138641,138642,138643,138645,138646,138649,138650],{},"②把 ",[46,138644,138638],{}," 图片转换为 ",[46,138647,138648],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[124,138651,138652],{"href":138652,"rel":138653},"http:\u002F\u002Fwww.bitbug.net\u002F",[128],[30,138655,138656,138659],{"start":63},[33,138657,138658],{},"favicon图标放到网站根目录下",[33,138660,138661],{},"HTML页面引入favicon",[14,138663,138664,138665,138668],{},"在html 页面里面的 ",[46,138666,138667],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138670,138671],{},[46,138672,138673],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138675,138676],{},"复制这行代码或者在生成这个的网站进行复制",[25,138678],{"style":126939,"src":138679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138681,138682],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138684,138685,138686],{},"例如:",[124,138687,138688],{"href":138688,"rel":138689},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[128],[18,138691,138693],{"id":138692},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138695,138696,138699],{},[112,138697,138698],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138701,138702,138705],{},[112,138703,138704],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138707,138708],{},"页面必须有三个标签用来符合 SEO 优化",[25,138710],{"style":126939,"src":138711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[30,138713,138714],{},[33,138715,138716],{},"title网站标题",[14,138718,138719,138722],{},[112,138720,138721],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138724,69321],{},[742,138726,138727,138730],{},[33,138728,138729],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[33,138731,138732],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[30,138734,138735],{"start":63},[33,138736,138737],{},"description网站描述",[14,138739,138740],{},"简要说明我们网站主要是做什么的",[14,138742,138743,138746],{},[112,138744,138745],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138748,69321],{},[14,138750,138751],{},[46,138752,138753],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[30,138755,138756],{"start":70},[33,138757,138758],{},"keywords关键词",[14,138760,138761],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138763,69321],{},[14,138765,138766],{},[46,138767,138768],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138770,138771],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138773,138774],{},[112,138775,138776],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[30,138778,138779],{"start":219},[33,138780,138781],{},"代码总结",[40,138783,138784],{"className":127830,"code":131187,"language":127832,"meta":27,"style":27},[46,138785,138786,138790,138804,138808],{"__ignoreMap":27},[49,138787,138788],{"class":51,"line":52},[49,138789,131194],{"class":66},[49,138791,138792,138794,138796,138798,138800,138802],{"class":51,"line":63},[49,138793,1739],{"class":73},[49,138795,52142],{"class":51831},[49,138797,54017],{"class":55},[49,138799,78],{"class":73},[49,138801,131207],{"class":59},[49,138803,51838],{"class":73},[49,138805,138806],{"class":51,"line":70},[49,138807,131214],{"class":73},[49,138809,138810,138812,138814],{"class":51,"line":219},[49,138811,52316],{"class":73},[49,138813,52142],{"class":51831},[49,138815,51838],{"class":73},[782,138817,138819],{"id":138818},"_154-项目公共部分制作","15.4 项目公共部分制作",[18,138821,138823],{"id":138822},"_1541-常用模块类命名","15.4.1 常用模块类命名",[25,138825],{"style":126939,"src":138826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[18,138828,138830],{"id":138829},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138832,138833],{},"布局思路：",[742,138835,138836,138839,138842,138864,138897],{},[33,138837,138838],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[33,138840,138841],{},"里面包含版心的盒子",[33,138843,138844,138845],{},"版心盒子里面包含 1 号左侧盒子左浮动",[742,138846,138847,138855,138861],{},[33,138848,138849,138850,22197,138852,138854],{},"1 号盒子 里面包含一个",[46,138851,742],{},[46,138853,742],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[33,138856,138857,138858,138860],{},"里面的内容是水平排列，所以需要给",[46,138859,33],{},"设置浮动",[33,138862,138863],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[33,138865,138866,138867],{},"版心盒子里面包含 2 号右侧盒子右浮动",[742,138868,138869,138883,138888],{},[33,138870,138871,138872,22197,138874,138876,138877,138879,138880,138882],{},"2 号盒子 里面包含一个",[46,138873,742],{},[46,138875,742],{},"包裹",[46,138878,33],{},"，中间的",[46,138881,1750],{},"可以用样式去设置，也可以用字符 |",[33,138884,138885,138886,138860],{},"里面内容水平排列，给",[46,138887,33],{},[33,138889,138890,138891,138893,138894,138896],{},"找到里面所有偶数的 ",[46,138892,33],{}," 设置样式（偶数的 ",[46,138895,33],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[33,138898,138899,138900],{},"需要用到字体图标",[742,138901,138902,138908,138911,138914,138917],{},[33,138903,138904,138905],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[46,138906,138907],{},"arrow-icon",[33,138909,138910],{},"先要引入字体图片的资源",[33,138912,138913],{},"在样式里面利用 font-face 来进行声明",[33,138915,138916],{},"在伪元素的 content属性设置 图标的编码",[33,138918,138919],{},"给伪元素设置font-family属性",[14,138921,138922],{},"结构实例代码：",[40,138924,138926],{"className":127083,"code":138925,"language":127085,"meta":27,"style":27},"div::before {\n  content: \"\";\n  display: block;\n}\n",[46,138927,138928,138936,138946,138956],{"__ignoreMap":27},[49,138929,138930,138932,138934],{"class":51,"line":52},[49,138931,52142],{"class":51831},[49,138933,138084],{"class":55},[49,138935,16269],{"class":73},[49,138937,138938,138940,138942,138944],{"class":51,"line":63},[49,138939,138091],{"class":159},[49,138941,51968],{"class":73},[49,138943,8349],{"class":59},[49,138945,1990],{"class":73},[49,138947,138948,138950,138952,138954],{"class":51,"line":70},[49,138949,128699],{"class":159},[49,138951,51968],{"class":73},[49,138953,61400],{"class":159},[49,138955,1990],{"class":73},[49,138957,138958],{"class":51,"line":219},[49,138959,2264],{"class":73},[14,138961,138962],{},"样式实例代码：",[40,138964,138965],{"className":127083,"code":138925,"language":127085,"meta":27,"style":27},[46,138966,138967,138975,138985,138995],{"__ignoreMap":27},[49,138968,138969,138971,138973],{"class":51,"line":52},[49,138970,52142],{"class":51831},[49,138972,138084],{"class":55},[49,138974,16269],{"class":73},[49,138976,138977,138979,138981,138983],{"class":51,"line":63},[49,138978,138091],{"class":159},[49,138980,51968],{"class":73},[49,138982,8349],{"class":59},[49,138984,1990],{"class":73},[49,138986,138987,138989,138991,138993],{"class":51,"line":70},[49,138988,128699],{"class":159},[49,138990,51968],{"class":73},[49,138992,61400],{"class":159},[49,138994,1990],{"class":73},[49,138996,138997],{"class":51,"line":219},[49,138998,2264],{"class":73},[18,139000,139002],{"id":139001},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[742,139004,139005],{},[33,139006,139007],{},"header 盒子必须要有高度",[14,139009,139010,139011,139013,139014],{},"1 号盒子是 ",[46,139012,132095],{}," 标志定位，在正常开发过程中， ",[112,139015,139016,139017,139020],{},"logo的布局其实是有讲究的，需要进行 ",[46,139018,139019],{},"logoSEO","的优化 （★★★）",[742,139022,139023,139031,139039,139066],{},[33,139024,139025,139027,139028,139030],{},[46,139026,132095],{}," 里面首先放一个 ",[46,139029,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[33,139032,139033,139035,139036,139038],{},[46,139034,10],{}," 里面再放一个链接，可以返回首页的，把 ",[46,139037,132095],{}," 的背景图片给链接即可",[33,139040,139041,139042],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[742,139043,139044,139059],{},[33,139045,139046,139047,139050,139051,139054,139055,139058],{},"方法1：",[46,139048,139049],{},"text-indent"," 移到盒子外面（",[46,139052,139053],{},"text-indent: -9999px",") ，然后 ",[46,139056,139057],{},"overflow:hidden"," ，淘宝的做法",[33,139060,139061,139062,139065],{},"方法2：直接给 ",[46,139063,139064],{},"font-size: 0;"," 就看不到文字了，京东的做法",[33,139067,139068,139069,139071,139072,139074],{},"最后给链接一个 ",[46,139070,51938],{}," 属性，这样鼠标放到 ",[46,139073,132095],{}," 上就可以看到提示文字了",[14,139076,138922],{},[40,139078,139079],{"className":127830,"code":132316,"language":127832,"meta":27,"style":27},[46,139080,139081],{"__ignoreMap":27},[49,139082,139083,139085,139087,139089,139091,139093,139095,139097,139099,139101,139103],{"class":51,"line":52},[49,139084,1739],{"class":73},[49,139086,124],{"class":51831},[49,139088,61588],{"class":55},[49,139090,78],{"class":73},[49,139092,132331],{"class":59},[49,139094,132334],{"class":55},[49,139096,78],{"class":73},[49,139098,132339],{"class":59},[49,139100,132342],{"class":73},[49,139102,124],{"class":51831},[49,139104,51838],{"class":73},[14,139106,138962],{},[40,139108,139109],{"className":127830,"code":132316,"language":127832,"meta":27,"style":27},[46,139110,139111],{"__ignoreMap":27},[49,139112,139113,139115,139117,139119,139121,139123,139125,139127,139129,139131,139133],{"class":51,"line":52},[49,139114,1739],{"class":73},[49,139116,124],{"class":51831},[49,139118,61588],{"class":55},[49,139120,78],{"class":73},[49,139122,132331],{"class":59},[49,139124,132334],{"class":55},[49,139126,78],{"class":73},[49,139128,132339],{"class":59},[49,139130,132342],{"class":73},[49,139132,124],{"class":51831},[49,139134,51838],{"class":73},[14,139136,139137,139138,139140],{},"2 号盒子是 ",[46,139139,132108],{}," 搜索模块定位",[742,139142,139143,139146,139149,139152],{},[33,139144,139145],{},"search盒子利用定位的方式放在对应的位置",[33,139147,139148],{},"search盒子设置绝对定位，header盒子设置相对定位",[33,139150,139151],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[33,139153,139154],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,139156,138922],{},[40,139158,139159],{"className":127083,"code":132403,"language":127085,"meta":27,"style":27},[46,139160,139161,139183,139187,139197],{"__ignoreMap":27},[49,139162,139163,139165,139167,139169,139171,139173,139175,139177,139179,139181],{"class":51,"line":52},[49,139164,52142],{"class":51831},[49,139166,13132],{"class":73},[49,139168,14],{"class":51831},[49,139170,13132],{"class":73},[49,139172,10],{"class":51831},[49,139174,13132],{"class":73},[49,139176,742],{"class":51831},[49,139178,13132],{"class":73},[49,139180,33],{"class":51831},[49,139182,16269],{"class":73},[49,139184,139185],{"class":51,"line":63},[49,139186,132432],{"class":66},[49,139188,139189,139191,139193,139195],{"class":51,"line":70},[49,139190,128699],{"class":159},[49,139192,51968],{"class":73},[49,139194,61400],{"class":159},[49,139196,1990],{"class":73},[49,139198,139199],{"class":51,"line":219},[49,139200,2264],{"class":73},[14,139202,138962],{},[40,139204,139205],{"className":127083,"code":132403,"language":127085,"meta":27,"style":27},[46,139206,139207,139229,139233,139243],{"__ignoreMap":27},[49,139208,139209,139211,139213,139215,139217,139219,139221,139223,139225,139227],{"class":51,"line":52},[49,139210,52142],{"class":51831},[49,139212,13132],{"class":73},[49,139214,14],{"class":51831},[49,139216,13132],{"class":73},[49,139218,10],{"class":51831},[49,139220,13132],{"class":73},[49,139222,742],{"class":51831},[49,139224,13132],{"class":73},[49,139226,33],{"class":51831},[49,139228,16269],{"class":73},[49,139230,139231],{"class":51,"line":63},[49,139232,132432],{"class":66},[49,139234,139235,139237,139239,139241],{"class":51,"line":70},[49,139236,128699],{"class":159},[49,139238,51968],{"class":73},[49,139240,61400],{"class":159},[49,139242,1990],{"class":73},[49,139244,139245],{"class":51,"line":219},[49,139246,2264],{"class":73},[14,139248,139249],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,139251,139252,139253,139256],{},"3 号盒子是 ",[46,139254,139255],{},"hotwords"," 热词模块定位",[742,139258,139259,139262,139265],{},[33,139260,139261],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[33,139263,139264],{},"给里面所有的a标签设置 左右10px的外边距",[33,139266,139267],{},"给第一个a标签设置文字变红色（#c81623）",[14,139269,138922],{},[40,139271,139273],{"className":127083,"code":139272,"language":127085,"meta":27,"style":27},"div {\n  margin: 0 auto;\n}\n",[46,139274,139275,139281,139293],{"__ignoreMap":27},[49,139276,139277,139279],{"class":51,"line":52},[49,139278,52142],{"class":51831},[49,139280,16269],{"class":73},[49,139282,139283,139285,139287,139289,139291],{"class":51,"line":63},[49,139284,71001],{"class":159},[49,139286,51968],{"class":73},[49,139288,1021],{"class":159},[49,139290,52087],{"class":159},[49,139292,1990],{"class":73},[49,139294,139295],{"class":51,"line":70},[49,139296,2264],{"class":73},[14,139298,138962],{},[40,139300,139301],{"className":127083,"code":139272,"language":127085,"meta":27,"style":27},[46,139302,139303,139309,139321],{"__ignoreMap":27},[49,139304,139305,139307],{"class":51,"line":52},[49,139306,52142],{"class":51831},[49,139308,16269],{"class":73},[49,139310,139311,139313,139315,139317,139319],{"class":51,"line":63},[49,139312,71001],{"class":159},[49,139314,51968],{"class":73},[49,139316,1021],{"class":159},[49,139318,52087],{"class":159},[49,139320,1990],{"class":73},[49,139322,139323],{"class":51,"line":70},[49,139324,2264],{"class":73},[14,139326,139327,139328,139331],{},"4 号盒子是 ",[46,139329,139330],{},"shopcar"," 购物车模块",[742,139333,139334,139339,139342,139345],{},[33,139335,123866,139336,139338],{},[46,139337,139330],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[33,139340,139341],{},"count 统计部分用绝对定位做",[33,139343,139344],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[33,139346,139347],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,139349,138922],{},[40,139351,139352],{"className":127083,"code":132515,"language":127085,"meta":27,"style":27},[46,139353,139354,139358,139372,139376,139390,139394,139408,139412,139426,139430],{"__ignoreMap":27},[49,139355,139356],{"class":51,"line":52},[49,139357,132522],{"class":66},[49,139359,139360,139362,139364,139366,139368,139370],{"class":51,"line":63},[49,139361,132527],{"class":55},[49,139363,80338],{"class":73},[49,139365,129443],{"class":159},[49,139367,51968],{"class":73},[49,139369,132536],{"class":159},[49,139371,130013],{"class":73},[49,139373,139374],{"class":51,"line":70},[49,139375,132543],{"class":66},[49,139377,139378,139380,139382,139384,139386,139388],{"class":51,"line":219},[49,139379,132548],{"class":55},[49,139381,80338],{"class":73},[49,139383,129443],{"class":159},[49,139385,51968],{"class":73},[49,139387,55295],{"class":159},[49,139389,130013],{"class":73},[49,139391,139392],{"class":51,"line":233},[49,139393,132563],{"class":66},[49,139395,139396,139398,139400,139402,139404,139406],{"class":51,"line":241},[49,139397,132568],{"class":55},[49,139399,80338],{"class":73},[49,139401,129443],{"class":159},[49,139403,51968],{"class":73},[49,139405,55362],{"class":159},[49,139407,130013],{"class":73},[49,139409,139410],{"class":51,"line":1920},[49,139411,132583],{"class":66},[49,139413,139414,139416,139418,139420,139422,139424],{"class":51,"line":2011},[49,139415,132588],{"class":55},[49,139417,80338],{"class":73},[49,139419,129443],{"class":159},[49,139421,51968],{"class":73},[49,139423,86764],{"class":159},[49,139425,130013],{"class":73},[49,139427,139428],{"class":51,"line":2017},[49,139429,132603],{"class":66},[49,139431,139432,139434,139436,139438,139440,139442],{"class":51,"line":2029},[49,139433,132608],{"class":55},[49,139435,80338],{"class":73},[49,139437,129443],{"class":159},[49,139439,51968],{"class":73},[49,139441,132617],{"class":159},[49,139443,130013],{"class":73},[14,139445,138962],{},[40,139447,139448],{"className":127083,"code":132515,"language":127085,"meta":27,"style":27},[46,139449,139450,139454,139468,139472,139486,139490,139504,139508,139522,139526],{"__ignoreMap":27},[49,139451,139452],{"class":51,"line":52},[49,139453,132522],{"class":66},[49,139455,139456,139458,139460,139462,139464,139466],{"class":51,"line":63},[49,139457,132527],{"class":55},[49,139459,80338],{"class":73},[49,139461,129443],{"class":159},[49,139463,51968],{"class":73},[49,139465,132536],{"class":159},[49,139467,130013],{"class":73},[49,139469,139470],{"class":51,"line":70},[49,139471,132543],{"class":66},[49,139473,139474,139476,139478,139480,139482,139484],{"class":51,"line":219},[49,139475,132548],{"class":55},[49,139477,80338],{"class":73},[49,139479,129443],{"class":159},[49,139481,51968],{"class":73},[49,139483,55295],{"class":159},[49,139485,130013],{"class":73},[49,139487,139488],{"class":51,"line":233},[49,139489,132563],{"class":66},[49,139491,139492,139494,139496,139498,139500,139502],{"class":51,"line":241},[49,139493,132568],{"class":55},[49,139495,80338],{"class":73},[49,139497,129443],{"class":159},[49,139499,51968],{"class":73},[49,139501,55362],{"class":159},[49,139503,130013],{"class":73},[49,139505,139506],{"class":51,"line":1920},[49,139507,132583],{"class":66},[49,139509,139510,139512,139514,139516,139518,139520],{"class":51,"line":2011},[49,139511,132588],{"class":55},[49,139513,80338],{"class":73},[49,139515,129443],{"class":159},[49,139517,51968],{"class":73},[49,139519,86764],{"class":159},[49,139521,130013],{"class":73},[49,139523,139524],{"class":51,"line":2017},[49,139525,132603],{"class":66},[49,139527,139528,139530,139532,139534,139536,139538],{"class":51,"line":2029},[49,139529,132608],{"class":55},[49,139531,80338],{"class":73},[49,139533,129443],{"class":159},[49,139535,51968],{"class":73},[49,139537,132617],{"class":159},[49,139539,130013],{"class":73},[18,139541,139543,139544,139546],{"id":139542},"_1544-nav导航模块制作","15.4.4 ",[46,139545,54244],{},"导航模块制作",[25,139548],{"style":126939,"src":139549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139551,139552,139554],{},[46,139553,54244],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139556,139557,139558],{},"1 号盒子左侧浮动，",[46,139559,139560],{},"dropdown",[742,139562,139563,139573,139581,139587,139595,139605,139613,139624],{},[33,139564,139565,139566,101549,139569,139572],{},"1号盒子有讲究，根据相关性 里面包含 ",[46,139567,139568],{},".dt",[46,139570,139571],{},".dd"," 两个盒子",[33,139574,139575,139577,139578,139580],{},[46,139576,139568],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[46,139579,139571],{}," 挤到下面去了",[33,139582,139583,139584,139586],{},"给 ",[46,139585,139571],{}," 盒子设置宽度 和 高度，以及背景颜色",[33,139588,139583,139589,139591,139592,120768],{},[46,139590,139571],{}," 盒子里面定义 无序列表 （",[46,139593,139594],{},"ul > li > a",[33,139596,139597,139598,139600,139601,139604],{},"每个 ",[46,139599,33],{}," 都有一个高度（",[46,139602,139603],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[33,139606,139583,139607,139609,139610,120768],{},[46,139608,33],{}," 里面的a设置文字大小（",[46,139611,139612],{},"14px",[33,139614,139583,139615,139617,139618,139620,139621,139623],{},[46,139616,33],{}," 设置 ",[46,139619,128244],{},"，当鼠标移入的时候，让",[46,139622,33],{},"的背景变成白色，让里面的文字变成红色",[33,139625,139626,139628,139629,139631,139632,139634],{},[46,139627,33],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[46,139630,33],{},"的右侧，那么给",[46,139633,33],{},"设置相对定位",[14,139636,139637],{},"一定要注意相关性",[14,139639,138922],{},[40,139641,139642],{"className":127083,"code":138925,"language":127085,"meta":27,"style":27},[46,139643,139644,139652,139662,139672],{"__ignoreMap":27},[49,139645,139646,139648,139650],{"class":51,"line":52},[49,139647,52142],{"class":51831},[49,139649,138084],{"class":55},[49,139651,16269],{"class":73},[49,139653,139654,139656,139658,139660],{"class":51,"line":63},[49,139655,138091],{"class":159},[49,139657,51968],{"class":73},[49,139659,8349],{"class":59},[49,139661,1990],{"class":73},[49,139663,139664,139666,139668,139670],{"class":51,"line":70},[49,139665,128699],{"class":159},[49,139667,51968],{"class":73},[49,139669,61400],{"class":159},[49,139671,1990],{"class":73},[49,139673,139674],{"class":51,"line":219},[49,139675,2264],{"class":73},[14,139677,138962],{},[40,139679,139680],{"className":127083,"code":138925,"language":127085,"meta":27,"style":27},[46,139681,139682,139690,139700,139710],{"__ignoreMap":27},[49,139683,139684,139686,139688],{"class":51,"line":52},[49,139685,52142],{"class":51831},[49,139687,138084],{"class":55},[49,139689,16269],{"class":73},[49,139691,139692,139694,139696,139698],{"class":51,"line":63},[49,139693,138091],{"class":159},[49,139695,51968],{"class":73},[49,139697,8349],{"class":59},[49,139699,1990],{"class":73},[49,139701,139702,139704,139706,139708],{"class":51,"line":70},[49,139703,128699],{"class":159},[49,139705,51968],{"class":73},[49,139707,61400],{"class":159},[49,139709,1990],{"class":73},[49,139711,139712],{"class":51,"line":219},[49,139713,2264],{"class":73},[14,139715,139716],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139718,139719,139720,139723],{},"2 号盒子左侧浮动，",[46,139721,139722],{},"navitems"," 导航栏组",[742,139725,139726,139731,139740],{},[33,139727,139728,139729],{},"里面结构是 ",[46,139730,139594],{},[33,139732,139733,139734,139736,139737,139739],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[46,139735,124],{},"左右的",[46,139738,31414],{},"把两侧撑开",[33,139741,139742],{},"让文字垂直居中（行高等于高度）",[25,139744],{"style":126939,"src":139745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139747,139748],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139750,138922],{},[40,139752,139754],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},".box {\n  float: left;\n}\n",[46,139755,139756,139762,139772],{"__ignoreMap":27},[49,139757,139758,139760],{"class":51,"line":52},[49,139759,130931],{"class":55},[49,139761,16269],{"class":73},[49,139763,139764,139766,139768,139770],{"class":51,"line":63},[49,139765,131563],{"class":159},[49,139767,51968],{"class":73},[49,139769,621],{"class":159},[49,139771,1990],{"class":73},[49,139773,139774],{"class":51,"line":70},[49,139775,2264],{"class":73},[14,139777,138962],{},[40,139779,139780],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},[46,139781,139782,139788,139798],{"__ignoreMap":27},[49,139783,139784,139786],{"class":51,"line":52},[49,139785,130931],{"class":55},[49,139787,16269],{"class":73},[49,139789,139790,139792,139794,139796],{"class":51,"line":63},[49,139791,131563],{"class":159},[49,139793,51968],{"class":73},[49,139795,621],{"class":159},[49,139797,1990],{"class":73},[49,139799,139800],{"class":51,"line":70},[49,139801,2264],{"class":73},[14,139803,139804],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[25,139806],{"style":126939,"src":139807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[40,139809,139810],{"className":127083,"code":131240,"language":127085,"meta":27,"style":27},[46,139811,139812,139818,139834],{"__ignoreMap":27},[49,139813,139814,139816],{"class":51,"line":52},[49,139815,52142],{"class":51831},[49,139817,16269],{"class":73},[49,139819,139820,139822,139824,139826,139828,139830,139832],{"class":51,"line":63},[49,139821,71427],{"class":159},[49,139823,51968],{"class":73},[49,139825,1047],{"class":159},[49,139827,52023],{"class":77},[49,139829,52052],{"class":159},[49,139831,130475],{"class":159},[49,139833,1990],{"class":73},[49,139835,139836],{"class":51,"line":70},[49,139837,2264],{"class":73},[18,139839,139841],{"id":139840},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[25,139843],{"style":126939,"src":139844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[742,139846,139847,139852,139857],{},[33,139848,139849,139851],{},[46,139850,132286],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[33,139853,139854,139856],{},[46,139855,132286],{}," 里面有一个大的版心",[33,139858,139859,139860,139863,139864],{},"版心里面包含 1 号盒子，",[46,139861,139862],{},"mod_service"," 是服务模块，mod 是模块的意思",[742,139865,139866,139871,139884,139900,139905],{},[33,139867,139583,139868,139870],{},[46,139869,139862],{}," 设置高度（80px）和下边框",[33,139872,139873,139874,139877,139878,139880,139881,139883],{},"在里面定义 ",[46,139875,139876],{},"ul > li"," ,每个",[46,139879,33],{}," 宽度是300px 高度是 50px，给每个",[46,139882,33],{},"设置35px的左内边距",[33,139885,139886,139887,139889,139890,139892,139893,139895,139896,19107,139898,120768],{},"在每个",[46,139888,33],{},"里面，放一个 ",[46,139891,138],{},"（里面放图标），一个",[46,139894,52142],{},"（里面放",[46,139897,52142],{},[46,139899,14],{},[33,139901,139583,139902,139904],{},[46,139903,138],{},"设置浮动，让h5与这个div左右排列",[33,139906,139907],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139909,138922],{},[40,139911,139913],{"className":127083,"code":139912,"language":127085,"meta":27,"style":27},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[46,139914,139915,139921,139933,139945,139972],{"__ignoreMap":27},[49,139916,139917,139919],{"class":51,"line":52},[49,139918,134840],{"class":55},[49,139920,16269],{"class":73},[49,139922,139923,139925,139927,139929,139931],{"class":51,"line":63},[49,139924,71099],{"class":159},[49,139926,51968],{"class":73},[49,139928,1529],{"class":159},[49,139930,52023],{"class":77},[49,139932,1990],{"class":73},[49,139934,139935,139937,139939,139941,139943],{"class":51,"line":70},[49,139936,71319],{"class":159},[49,139938,51968],{"class":73},[49,139940,1529],{"class":159},[49,139942,52023],{"class":77},[49,139944,1990],{"class":73},[49,139946,139947,139949,139951,139953,139955,139957,139959,139961,139964,139966,139968,139970],{"class":51,"line":219},[49,139948,71142],{"class":159},[49,139950,51968],{"class":73},[49,139952,62257],{"class":159},[49,139954,841],{"class":73},[49,139956,134879],{"class":5913},[49,139958,14411],{"class":73},[49,139960,62267],{"class":159},[49,139962,139963],{"class":159}," -10",[49,139965,52023],{"class":77},[49,139967,134898],{"class":159},[49,139969,52023],{"class":77},[49,139971,1990],{"class":73},[49,139973,139974],{"class":51,"line":233},[49,139975,2264],{"class":73},[14,139977,138962],{},[40,139979,139980],{"className":127083,"code":139912,"language":127085,"meta":27,"style":27},[46,139981,139982,139988,140000,140012,140038],{"__ignoreMap":27},[49,139983,139984,139986],{"class":51,"line":52},[49,139985,134840],{"class":55},[49,139987,16269],{"class":73},[49,139989,139990,139992,139994,139996,139998],{"class":51,"line":63},[49,139991,71099],{"class":159},[49,139993,51968],{"class":73},[49,139995,1529],{"class":159},[49,139997,52023],{"class":77},[49,139999,1990],{"class":73},[49,140001,140002,140004,140006,140008,140010],{"class":51,"line":70},[49,140003,71319],{"class":159},[49,140005,51968],{"class":73},[49,140007,1529],{"class":159},[49,140009,52023],{"class":77},[49,140011,1990],{"class":73},[49,140013,140014,140016,140018,140020,140022,140024,140026,140028,140030,140032,140034,140036],{"class":51,"line":219},[49,140015,71142],{"class":159},[49,140017,51968],{"class":73},[49,140019,62257],{"class":159},[49,140021,841],{"class":73},[49,140023,134879],{"class":5913},[49,140025,14411],{"class":73},[49,140027,62267],{"class":159},[49,140029,139963],{"class":159},[49,140031,52023],{"class":77},[49,140033,134898],{"class":159},[49,140035,52023],{"class":77},[49,140037,1990],{"class":73},[49,140039,140040],{"class":51,"line":233},[49,140041,2264],{"class":73},[14,140043,140044],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[742,140046,140047,140050,140056,140062,140074],{},[33,140048,140049],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[33,140051,140052,140053,120768],{},"里面的布局利用 自定义列表来实现（",[46,140054,140055],{},"dl > dt + dd",[33,140057,139583,140058,140061],{},[46,140059,140060],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[33,140063,139583,140064,140067,140068,19107,140070,140073],{},[46,140065,140066],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[46,140069,140066],{},[46,140071,140072],{},"dd","之间有些距离",[33,140075,140076],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,140078,138922],{},[40,140080,140081],{"className":127083,"code":139272,"language":127085,"meta":27,"style":27},[46,140082,140083,140089,140101],{"__ignoreMap":27},[49,140084,140085,140087],{"class":51,"line":52},[49,140086,52142],{"class":51831},[49,140088,16269],{"class":73},[49,140090,140091,140093,140095,140097,140099],{"class":51,"line":63},[49,140092,71001],{"class":159},[49,140094,51968],{"class":73},[49,140096,1021],{"class":159},[49,140098,52087],{"class":159},[49,140100,1990],{"class":73},[49,140102,140103],{"class":51,"line":70},[49,140104,2264],{"class":73},[14,140106,138962],{},[40,140108,140109],{"className":127083,"code":139272,"language":127085,"meta":27,"style":27},[46,140110,140111,140117,140129],{"__ignoreMap":27},[49,140112,140113,140115],{"class":51,"line":52},[49,140114,52142],{"class":51831},[49,140116,16269],{"class":73},[49,140118,140119,140121,140123,140125,140127],{"class":51,"line":63},[49,140120,71001],{"class":159},[49,140122,51968],{"class":73},[49,140124,1021],{"class":159},[49,140126,52087],{"class":159},[49,140128,1990],{"class":73},[49,140130,140131],{"class":51,"line":70},[49,140132,2264],{"class":73},[14,140134,140135],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[742,140137,140138,140147,140150,140161],{},[33,140139,140140,140141,140143,140144,140146],{},"分为上下两块，上面是 ",[46,140142,132303],{}," 友情链接，下面是 ",[46,140145,132296],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[33,140148,140149],{},"把内容分别复制到相应模块中",[33,140151,139583,140152,140154,140155,140157,140158,140160],{},[46,140153,132303],{}," 设置 15px 的下外边距，给",[46,140156,132303],{}," 里面 的 ",[46,140159,124],{}," 标签设置 左右 3px 的外边距",[33,140162,140163,140164,140166],{},"给",[46,140165,132296],{}," 设置 20px 的行高",[14,140168,138922],{},[40,140170,140171],{"className":127083,"code":139272,"language":127085,"meta":27,"style":27},[46,140172,140173,140179,140191],{"__ignoreMap":27},[49,140174,140175,140177],{"class":51,"line":52},[49,140176,52142],{"class":51831},[49,140178,16269],{"class":73},[49,140180,140181,140183,140185,140187,140189],{"class":51,"line":63},[49,140182,71001],{"class":159},[49,140184,51968],{"class":73},[49,140186,1021],{"class":159},[49,140188,52087],{"class":159},[49,140190,1990],{"class":73},[49,140192,140193],{"class":51,"line":70},[49,140194,2264],{"class":73},[14,140196,138962],{},[40,140198,140199],{"className":127083,"code":139272,"language":127085,"meta":27,"style":27},[46,140200,140201,140207,140219],{"__ignoreMap":27},[49,140202,140203,140205],{"class":51,"line":52},[49,140204,52142],{"class":51831},[49,140206,16269],{"class":73},[49,140208,140209,140211,140213,140215,140217],{"class":51,"line":63},[49,140210,71001],{"class":159},[49,140212,51968],{"class":73},[49,140214,1021],{"class":159},[49,140216,52087],{"class":159},[49,140218,1990],{"class":73},[49,140220,140221],{"class":51,"line":70},[49,140222,2264],{"class":73},[14,140224,140225],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[757,140227,140228],{},"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":27,"searchDepth":63,"depth":63,"links":140230},[140231,140232,140233,140240],{"id":138511,"depth":63,"text":138512},{"id":138530,"depth":63,"text":138531},{"id":138557,"depth":63,"text":138558,"children":140234},[140235,140236,140237,140238,140239],{"id":138561,"depth":70,"text":138562},{"id":138574,"depth":70,"text":138575},{"id":138598,"depth":70,"text":138599},{"id":138620,"depth":70,"text":138621},{"id":138692,"depth":70,"text":138693},{"id":138818,"depth":63,"text":138819,"children":140241},[140242,140243,140244,140245,140247],{"id":138822,"depth":70,"text":138823},{"id":138829,"depth":70,"text":138830},{"id":139001,"depth":70,"text":139002},{"id":139542,"depth":70,"text":140246},"15.4.4 nav导航模块制作",{"id":139840,"depth":70,"text":139841},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138503,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140254,"title":140255,"body":140256,"description":24072,"extension":766,"meta":142658,"navigation":398,"path":142659,"seo":142660,"stem":142661,"__hash__":142662},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140257,"toc":142635},[140258,140261,140265,140269,140281,140284,140287,140290,140301,140303,140327,140329,140353,140358,140361,140363,140399,140401,140437,140440,140445,140448,140451,140454,140484,140491,140494,140504,140506,140540,140543,140577,140583,140600,140602,140638,140640,140676,140681,140706,140708,140734,140736,140760,140767,140770,140834,140836,140878,140880,140920,140927,140932,140934,140964,140966,140996,141000,141003,141010,141022,141024,141050,141052,141076,141079,141081,141105,141111,141121,141123,141153,141155,141185,141192,141233,141235,141271,141273,141309,141313,141316,141319,141322,141328,141333,141336,141359,141362,141386,141389,141413,141418,141421,141424,141427,141430,141433,141507,141509,141539,141541,141571,141574,141577,141609,141613,141617,141631,141640,141643,141648,141650,141744,141746,141840,141863,141865,141889,141891,141915,141922,141925,141935,141937,141961,141966,141974,141976,142006,142011,142051,142053,142079,142081,142107,142111,142114,142119,142122,142126,142134,142141,142149,142151,142181,142183,142213,142221,142224,142227,142229,142259,142261,142291,142294,142299,142301,142325,142327,142351,142354,142439,142441,142465,142467,142491,142495,142497,142521,142523,142557,142561,142575,142578,142583,142586,142591,142594,142624,142632],[10,140259,140255],{"id":140260},"_16-品优购项目下篇-主体与页面开发",[782,140262,140264],{"id":140263},"_161-项目主体模块制作","16.1 项目主体模块制作",[18,140266,140268],{"id":140267},"_1611-首页制作","16.1.1 首页制作",[14,140270,140271,140273,140274,140276,140277,140280],{},[112,140272,102589],{}," 主体模块是 ",[112,140275,74589],{}," 里面专有的，注意需要新的样式文件 ",[112,140278,140279],{},"index.css，"," 就不要写在common.css中了",[25,140282],{"style":126939,"src":140283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[25,140285],{"style":126939,"src":140286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,140288,140289],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[742,140291,140292,140295,140298],{},[33,140293,140294],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[33,140296,140297],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[33,140299,140300],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,140302,138922],{},[40,140304,140305],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},[46,140306,140307,140313,140323],{"__ignoreMap":27},[49,140308,140309,140311],{"class":51,"line":52},[49,140310,130931],{"class":55},[49,140312,16269],{"class":73},[49,140314,140315,140317,140319,140321],{"class":51,"line":63},[49,140316,131563],{"class":159},[49,140318,51968],{"class":73},[49,140320,621],{"class":159},[49,140322,1990],{"class":73},[49,140324,140325],{"class":51,"line":70},[49,140326,2264],{"class":73},[14,140328,138962],{},[40,140330,140331],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},[46,140332,140333,140339,140349],{"__ignoreMap":27},[49,140334,140335,140337],{"class":51,"line":52},[49,140336,130931],{"class":55},[49,140338,16269],{"class":73},[49,140340,140341,140343,140345,140347],{"class":51,"line":63},[49,140342,131563],{"class":159},[49,140344,51968],{"class":73},[49,140346,621],{"class":159},[49,140348,1990],{"class":73},[49,140350,140351],{"class":51,"line":70},[49,140352,2264],{"class":73},[30,140354,140355],{},[33,140356,140357],{},"左侧focus模块制作",[25,140359],{"style":126939,"src":140360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,140362,138922],{},[40,140364,140365],{"className":127083,"code":128406,"language":127085,"meta":27,"style":27},[46,140366,140367,140375,140385,140395],{"__ignoreMap":27},[49,140368,140369,140371,140373],{"class":51,"line":52},[49,140370,54352],{"class":51831},[49,140372,62431],{"class":55},[49,140374,16269],{"class":73},[49,140376,140377,140379,140381,140383],{"class":51,"line":63},[49,140378,128421],{"class":159},[49,140380,51968],{"class":73},[49,140382,55420],{"class":159},[49,140384,1990],{"class":73},[49,140386,140387,140389,140391,140393],{"class":51,"line":70},[49,140388,71329],{"class":159},[49,140390,51968],{"class":73},[49,140392,55268],{"class":159},[49,140394,1990],{"class":73},[49,140396,140397],{"class":51,"line":219},[49,140398,2264],{"class":73},[14,140400,138962],{},[40,140402,140403],{"className":127083,"code":128406,"language":127085,"meta":27,"style":27},[46,140404,140405,140413,140423,140433],{"__ignoreMap":27},[49,140406,140407,140409,140411],{"class":51,"line":52},[49,140408,54352],{"class":51831},[49,140410,62431],{"class":55},[49,140412,16269],{"class":73},[49,140414,140415,140417,140419,140421],{"class":51,"line":63},[49,140416,128421],{"class":159},[49,140418,51968],{"class":73},[49,140420,55420],{"class":159},[49,140422,1990],{"class":73},[49,140424,140425,140427,140429,140431],{"class":51,"line":70},[49,140426,71329],{"class":159},[49,140428,51968],{"class":73},[49,140430,55268],{"class":159},[49,140432,1990],{"class":73},[49,140434,140435],{"class":51,"line":219},[49,140436,2264],{"class":73},[14,140438,140439],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[30,140441,140442],{"start":63},[33,140443,140444],{},"右侧newsflash模块制作",[25,140446],{"style":126939,"src":140447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,140449,140450],{},"右侧的模块 分为上中下三个盒子",[14,140452,140453],{},"结构代码：",[40,140455,140456],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,140457,140458],{"__ignoreMap":27},[49,140459,140460,140462,140464,140466,140468,140470,140472,140474,140476,140478,140480,140482],{"class":51,"line":52},[49,140461,1739],{"class":73},[49,140463,25],{"class":51831},[49,140465,55770],{"class":55},[49,140467,78],{"class":73},[49,140469,134600],{"class":59},[49,140471,55778],{"class":55},[49,140473,78],{"class":73},[49,140475,134607],{"class":59},[49,140477,134610],{"class":55},[49,140479,78],{"class":73},[49,140481,134615],{"class":59},[49,140483,51838],{"class":73},[14,140485,140486,140487,140490],{},"1 号盒子为 ",[46,140488,140489],{},"news"," 新闻模块 高度为 165px",[25,140492],{"style":126939,"src":140493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140495,140496,140497,140500,140501],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[46,140498,140499],{},"news-hd","，下面是 ",[46,140502,140503],{},"news-bd",[14,140505,140453],{},[40,140507,140508],{"className":127830,"code":131187,"language":127832,"meta":27,"style":27},[46,140509,140510,140514,140528,140532],{"__ignoreMap":27},[49,140511,140512],{"class":51,"line":52},[49,140513,131194],{"class":66},[49,140515,140516,140518,140520,140522,140524,140526],{"class":51,"line":63},[49,140517,1739],{"class":73},[49,140519,52142],{"class":51831},[49,140521,54017],{"class":55},[49,140523,78],{"class":73},[49,140525,131207],{"class":59},[49,140527,51838],{"class":73},[49,140529,140530],{"class":51,"line":70},[49,140531,131214],{"class":73},[49,140533,140534,140536,140538],{"class":51,"line":219},[49,140535,52316],{"class":73},[49,140537,52142],{"class":51831},[49,140539,51838],{"class":73},[14,140541,140542],{},"样式代码：",[40,140544,140545],{"className":127830,"code":131187,"language":127832,"meta":27,"style":27},[46,140546,140547,140551,140565,140569],{"__ignoreMap":27},[49,140548,140549],{"class":51,"line":52},[49,140550,131194],{"class":66},[49,140552,140553,140555,140557,140559,140561,140563],{"class":51,"line":63},[49,140554,1739],{"class":73},[49,140556,52142],{"class":51831},[49,140558,54017],{"class":55},[49,140560,78],{"class":73},[49,140562,131207],{"class":59},[49,140564,51838],{"class":73},[49,140566,140567],{"class":51,"line":70},[49,140568,131214],{"class":73},[49,140570,140571,140573,140575],{"class":51,"line":219},[49,140572,52316],{"class":73},[49,140574,52142],{"class":51831},[49,140576,51838],{"class":73},[14,140578,140579,140580,140582],{},"上面是",[46,140581,140499],{},"，设置高度是 33px，设置下边框",[742,140584,140585,140591],{},[33,140586,140587,140588,140590],{},"里面放一个",[46,140589,138],{}," 标题",[33,140592,140593,140594,140596,140597,140599],{},"放一个a",[46,140595,103224],{},"，内容是 更多，然后让 ",[46,140598,124],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140601,140453],{},[40,140603,140604],{"className":127083,"code":138925,"language":127085,"meta":27,"style":27},[46,140605,140606,140614,140624,140634],{"__ignoreMap":27},[49,140607,140608,140610,140612],{"class":51,"line":52},[49,140609,52142],{"class":51831},[49,140611,138084],{"class":55},[49,140613,16269],{"class":73},[49,140615,140616,140618,140620,140622],{"class":51,"line":63},[49,140617,138091],{"class":159},[49,140619,51968],{"class":73},[49,140621,8349],{"class":59},[49,140623,1990],{"class":73},[49,140625,140626,140628,140630,140632],{"class":51,"line":70},[49,140627,128699],{"class":159},[49,140629,51968],{"class":73},[49,140631,61400],{"class":159},[49,140633,1990],{"class":73},[49,140635,140636],{"class":51,"line":219},[49,140637,2264],{"class":73},[14,140639,140542],{},[40,140641,140642],{"className":127083,"code":138925,"language":127085,"meta":27,"style":27},[46,140643,140644,140652,140662,140672],{"__ignoreMap":27},[49,140645,140646,140648,140650],{"class":51,"line":52},[49,140647,52142],{"class":51831},[49,140649,138084],{"class":55},[49,140651,16269],{"class":73},[49,140653,140654,140656,140658,140660],{"class":51,"line":63},[49,140655,138091],{"class":159},[49,140657,51968],{"class":73},[49,140659,8349],{"class":59},[49,140661,1990],{"class":73},[49,140663,140664,140666,140668,140670],{"class":51,"line":70},[49,140665,128699],{"class":159},[49,140667,51968],{"class":73},[49,140669,61400],{"class":159},[49,140671,1990],{"class":73},[49,140673,140674],{"class":51,"line":219},[49,140675,2264],{"class":73},[14,140677,140678,140679],{},"下面是",[46,140680,140503],{},[742,140682,140683,140691],{},[33,140684,140685,140686,101549,140688,140690],{},"里面包含 ",[46,140687,742],{},[46,140689,33],{}," 还有链接",[33,140692,140163,140693,140695,140696,140698,140699,140702,140703],{},[46,140694,33],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[46,140697,131749],{}," 2.设置 ",[46,140700,140701],{},"white-space: nowrap;"," 3. 设置 ",[46,140704,140705],{},"text-overflow: ellipsis;",[14,140707,140453],{},[40,140709,140711],{"className":127083,"code":140710,"language":127085,"meta":27,"style":27},"div {\n  overflow: hidden;\n}\n",[46,140712,140713,140719,140730],{"__ignoreMap":27},[49,140714,140715,140717],{"class":51,"line":52},[49,140716,52142],{"class":51831},[49,140718,16269],{"class":73},[49,140720,140721,140724,140726,140728],{"class":51,"line":63},[49,140722,140723],{"class":159},"  overflow",[49,140725,51968],{"class":73},[49,140727,62245],{"class":159},[49,140729,1990],{"class":73},[49,140731,140732],{"class":51,"line":70},[49,140733,2264],{"class":73},[14,140735,140542],{},[40,140737,140738],{"className":127083,"code":140710,"language":127085,"meta":27,"style":27},[46,140739,140740,140746,140756],{"__ignoreMap":27},[49,140741,140742,140744],{"class":51,"line":52},[49,140743,52142],{"class":51831},[49,140745,16269],{"class":73},[49,140747,140748,140750,140752,140754],{"class":51,"line":63},[49,140749,140723],{"class":159},[49,140751,51968],{"class":73},[49,140753,62245],{"class":159},[49,140755,1990],{"class":73},[49,140757,140758],{"class":51,"line":70},[49,140759,2264],{"class":73},[14,140761,140762,140763,140766],{},"2 号盒子为 ",[46,140764,140765],{},"lifeservice"," 生活服务模块 高度为 209px",[25,140768],{"style":126939,"src":140769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[742,140771,140772,140775,140785,140809,140820],{},[33,140773,140774],{},"设置边框（左右下边框）",[33,140776,140777,140778,140781,140782,140784],{},"里面的内容 是 ",[46,140779,140780],{},"ul > 12*li","，给",[46,140783,33],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[33,140786,140787,140788],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[742,140789,140790,140795,140804],{},[33,140791,140792,140794],{},[46,140793,140765],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[33,140796,140797,140798,140800,140801,140803],{},"可以让 ",[46,140799,140765],{}," 里面的 ",[46,140802,742],{}," 宽度为 252，就可以装的下 4 个 小 li",[33,140805,140806,140808],{},[46,140807,140765],{}," 盒子 overflow 隐藏多余的部分就可以了",[33,140810,116998,140811,140813,140814,140816,140817,140819],{},[46,140812,33],{}," 里面放一个 ",[46,140815,1270],{},"（里面放图标），下面的文本用 ",[46,140818,14],{}," 标签包裹",[33,140821,139583,140822,140824,140825,140827,140828,139617,140830,140833],{},[46,140823,1270],{}," 设置 24px宽和28px的高（注意 ",[46,140826,1270],{}," 是行内元素， 转成行内块），给 ",[46,140829,33],{},[46,140831,140832],{},"text-align:center"," 让里面内容居中显示",[14,140835,140453],{},[40,140837,140839],{"className":127083,"code":140838,"language":127085,"meta":27,"style":27},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[46,140840,140841,140859,140864,140874],{"__ignoreMap":27},[49,140842,140843,140845,140847,140849,140851,140853,140855,140857],{"class":51,"line":52},[49,140844,49],{"class":51831},[49,140846,13132],{"class":73},[49,140848,124],{"class":51831},[49,140850,13132],{"class":73},[49,140852,24249],{"class":51831},[49,140854,13132],{"class":73},[49,140856,112],{"class":51831},[49,140858,16269],{"class":73},[49,140860,140861],{"class":51,"line":63},[49,140862,140863],{"class":66},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[49,140865,140866,140868,140870,140872],{"class":51,"line":70},[49,140867,128699],{"class":159},[49,140869,51968],{"class":73},[49,140871,128761],{"class":159},[49,140873,1990],{"class":73},[49,140875,140876],{"class":51,"line":219},[49,140877,2264],{"class":73},[14,140879,140542],{},[40,140881,140882],{"className":127083,"code":140838,"language":127085,"meta":27,"style":27},[46,140883,140884,140902,140906,140916],{"__ignoreMap":27},[49,140885,140886,140888,140890,140892,140894,140896,140898,140900],{"class":51,"line":52},[49,140887,49],{"class":51831},[49,140889,13132],{"class":73},[49,140891,124],{"class":51831},[49,140893,13132],{"class":73},[49,140895,24249],{"class":51831},[49,140897,13132],{"class":73},[49,140899,112],{"class":51831},[49,140901,16269],{"class":73},[49,140903,140904],{"class":51,"line":63},[49,140905,140863],{"class":66},[49,140907,140908,140910,140912,140914],{"class":51,"line":70},[49,140909,128699],{"class":159},[49,140911,51968],{"class":73},[49,140913,128761],{"class":159},[49,140915,1990],{"class":73},[49,140917,140918],{"class":51,"line":219},[49,140919,2264],{"class":73},[14,140921,140922,140923,140926],{},"3 号盒子为 ",[46,140924,140925],{},"bargain"," 特价商品",[742,140928,140929],{},[33,140930,140931],{},"这个比较简单，直接插入一张图片即可",[14,140933,140453],{},[40,140935,140936],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,140937,140938],{"__ignoreMap":27},[49,140939,140940,140942,140944,140946,140948,140950,140952,140954,140956,140958,140960,140962],{"class":51,"line":52},[49,140941,1739],{"class":73},[49,140943,25],{"class":51831},[49,140945,55770],{"class":55},[49,140947,78],{"class":73},[49,140949,134600],{"class":59},[49,140951,55778],{"class":55},[49,140953,78],{"class":73},[49,140955,134607],{"class":59},[49,140957,134610],{"class":55},[49,140959,78],{"class":73},[49,140961,134615],{"class":59},[49,140963,51838],{"class":73},[14,140965,140542],{},[40,140967,140968],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,140969,140970],{"__ignoreMap":27},[49,140971,140972,140974,140976,140978,140980,140982,140984,140986,140988,140990,140992,140994],{"class":51,"line":52},[49,140973,1739],{"class":73},[49,140975,25],{"class":51831},[49,140977,55770],{"class":55},[49,140979,78],{"class":73},[49,140981,134600],{"class":59},[49,140983,55778],{"class":55},[49,140985,78],{"class":73},[49,140987,134607],{"class":59},[49,140989,134610],{"class":55},[49,140991,78],{"class":73},[49,140993,134615],{"class":59},[49,140995,51838],{"class":73},[18,140997,140999],{"id":140998},"_1612-推荐模块制作","16.1.2 推荐模块制作",[25,141001],{"style":126939,"src":141002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,141004,141005,141006,141009],{},"大盒子 ",[46,141007,141008],{},"recom"," 推荐模块 recommend",[742,141011,141012],{},[33,141013,141014,141015,141017,141018,141021],{},"给这个 ",[46,141016,141008],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[46,141019,141020],{},"#ebebeb","），设置距离上边 12px",[14,141023,140453],{},[40,141025,141027],{"className":127083,"code":141026,"language":127085,"meta":27,"style":27},"div {\n  background-color: #f0f0f0;\n}\n",[46,141028,141029,141035,141046],{"__ignoreMap":27},[49,141030,141031,141033],{"class":51,"line":52},[49,141032,52142],{"class":51831},[49,141034,16269],{"class":73},[49,141036,141037,141039,141041,141044],{"class":51,"line":63},[49,141038,71409],{"class":159},[49,141040,51968],{"class":73},[49,141042,141043],{"class":159},"#f0f0f0",[49,141045,1990],{"class":73},[49,141047,141048],{"class":51,"line":70},[49,141049,2264],{"class":73},[14,141051,140542],{},[40,141053,141054],{"className":127083,"code":141026,"language":127085,"meta":27,"style":27},[46,141055,141056,141062,141072],{"__ignoreMap":27},[49,141057,141058,141060],{"class":51,"line":52},[49,141059,52142],{"class":51831},[49,141061,16269],{"class":73},[49,141063,141064,141066,141068,141070],{"class":51,"line":63},[49,141065,71409],{"class":159},[49,141067,51968],{"class":73},[49,141069,141043],{"class":159},[49,141071,1990],{"class":73},[49,141073,141074],{"class":51,"line":70},[49,141075,2264],{"class":73},[14,141077,141078],{},"里面包含 2 个盒子， 浮动即可",[14,141080,140453],{},[40,141082,141083],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},[46,141084,141085,141091,141101],{"__ignoreMap":27},[49,141086,141087,141089],{"class":51,"line":52},[49,141088,130931],{"class":55},[49,141090,16269],{"class":73},[49,141092,141093,141095,141097,141099],{"class":51,"line":63},[49,141094,131563],{"class":159},[49,141096,51968],{"class":73},[49,141098,621],{"class":159},[49,141100,1990],{"class":73},[49,141102,141103],{"class":51,"line":70},[49,141104,2264],{"class":73},[14,141106,141107,141108],{},"1 号盒子 ",[46,141109,141110],{},"recom_hd",[742,141112,141113,141116],{},[33,141114,141115],{},"设置宽度205px，高度163px",[33,141117,140587,141118,141120],{},[46,141119,25],{},"标签，插入图片即可",[14,141122,140453],{},[40,141124,141125],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,141126,141127],{"__ignoreMap":27},[49,141128,141129,141131,141133,141135,141137,141139,141141,141143,141145,141147,141149,141151],{"class":51,"line":52},[49,141130,1739],{"class":73},[49,141132,25],{"class":51831},[49,141134,55770],{"class":55},[49,141136,78],{"class":73},[49,141138,134600],{"class":59},[49,141140,55778],{"class":55},[49,141142,78],{"class":73},[49,141144,134607],{"class":59},[49,141146,134610],{"class":55},[49,141148,78],{"class":73},[49,141150,134615],{"class":59},[49,141152,51838],{"class":73},[14,141154,140542],{},[40,141156,141157],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,141158,141159],{"__ignoreMap":27},[49,141160,141161,141163,141165,141167,141169,141171,141173,141175,141177,141179,141181,141183],{"class":51,"line":52},[49,141162,1739],{"class":73},[49,141164,25],{"class":51831},[49,141166,55770],{"class":55},[49,141168,78],{"class":73},[49,141170,134600],{"class":59},[49,141172,55778],{"class":55},[49,141174,78],{"class":73},[49,141176,134607],{"class":59},[49,141178,134610],{"class":55},[49,141180,78],{"class":73},[49,141182,134615],{"class":59},[49,141184,51838],{"class":73},[14,141186,141187,141188,141191],{},"2 号盒子 ",[46,141189,141190],{},"recom_bd"," ，注意里面的小竖线",[742,141193,141194,141205,141208,141213,141218],{},[33,141195,141196,141197,141199,141200,141202,141203],{},"右侧结构里面放 ",[46,141198,742],{}," 包含 4个 ",[46,141201,33],{},"，每个li里面包含一个",[46,141204,25],{},[33,141206,141207],{},"直接利用切片工具把里面的内容当成一张图片",[33,141209,139583,141210,141212],{},[46,141211,33],{}," 设置浮动",[33,141214,139583,141215,141217],{},[46,141216,25],{}," 设置宽高，宽度 248px，高度 163px",[33,141219,141220,141221,140781,141224,141226,141227,141229,141230],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[46,141222,141223],{},"top 10px",[46,141225,33],{},"设置相对定位（注意，最后一个",[46,141228,33],{},"不用设置伪元素），可以利用 ",[46,141231,141232],{},"nth-child(-n+3){...}",[14,141234,140453],{},[40,141236,141237],{"className":127083,"code":138925,"language":127085,"meta":27,"style":27},[46,141238,141239,141247,141257,141267],{"__ignoreMap":27},[49,141240,141241,141243,141245],{"class":51,"line":52},[49,141242,52142],{"class":51831},[49,141244,138084],{"class":55},[49,141246,16269],{"class":73},[49,141248,141249,141251,141253,141255],{"class":51,"line":63},[49,141250,138091],{"class":159},[49,141252,51968],{"class":73},[49,141254,8349],{"class":59},[49,141256,1990],{"class":73},[49,141258,141259,141261,141263,141265],{"class":51,"line":70},[49,141260,128699],{"class":159},[49,141262,51968],{"class":73},[49,141264,61400],{"class":159},[49,141266,1990],{"class":73},[49,141268,141269],{"class":51,"line":219},[49,141270,2264],{"class":73},[14,141272,140542],{},[40,141274,141275],{"className":127083,"code":138925,"language":127085,"meta":27,"style":27},[46,141276,141277,141285,141295,141305],{"__ignoreMap":27},[49,141278,141279,141281,141283],{"class":51,"line":52},[49,141280,52142],{"class":51831},[49,141282,138084],{"class":55},[49,141284,16269],{"class":73},[49,141286,141287,141289,141291,141293],{"class":51,"line":63},[49,141288,138091],{"class":159},[49,141290,51968],{"class":73},[49,141292,8349],{"class":59},[49,141294,1990],{"class":73},[49,141296,141297,141299,141301,141303],{"class":51,"line":70},[49,141298,128699],{"class":159},[49,141300,51968],{"class":73},[49,141302,61400],{"class":159},[49,141304,1990],{"class":73},[49,141306,141307],{"class":51,"line":219},[49,141308,2264],{"class":73},[18,141310,141312],{"id":141311},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[25,141314],{"style":126939,"src":141315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,141317,141318],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,141320,141321],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,141323,141324,141327],{},[46,141325,141326],{},"box_hd"," 制作",[14,141329,141107,141330,141332],{},[46,141331,141326],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[25,141334],{"style":126939,"src":141335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[742,141337,141338,141343,141348,141351],{},[33,141339,141340,141342],{},[46,141341,141326],{}," 给 30px 的高度，2个像素的下边框",[33,141344,141345,141346],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[46,141347,139594],{},[33,141349,141350],{},"左侧盒左浮动，右侧盒子右浮动",[33,141352,141353,141355,141356,141358],{},[46,141354,124],{},"标签之间的距离用左右的",[46,141357,31414],{},"撑开即可",[14,141360,141361],{},"结构代码",[40,141363,141364],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},[46,141365,141366,141372,141382],{"__ignoreMap":27},[49,141367,141368,141370],{"class":51,"line":52},[49,141369,130931],{"class":55},[49,141371,16269],{"class":73},[49,141373,141374,141376,141378,141380],{"class":51,"line":63},[49,141375,131563],{"class":159},[49,141377,51968],{"class":73},[49,141379,621],{"class":159},[49,141381,1990],{"class":73},[49,141383,141384],{"class":51,"line":70},[49,141385,2264],{"class":73},[14,141387,141388],{},"样式代码",[40,141390,141391],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},[46,141392,141393,141399,141409],{"__ignoreMap":27},[49,141394,141395,141397],{"class":51,"line":52},[49,141396,130931],{"class":55},[49,141398,16269],{"class":73},[49,141400,141401,141403,141405,141407],{"class":51,"line":63},[49,141402,131563],{"class":159},[49,141404,51968],{"class":73},[49,141406,621],{"class":159},[49,141408,1990],{"class":73},[49,141410,141411],{"class":51,"line":70},[49,141412,2264],{"class":73},[14,141414,141415,141327],{},[46,141416,141417],{},"box_bd",[14,141419,141420],{},"2 号盒子 box_bd，不要给高度",[25,141422],{"style":126939,"src":141423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,141425,141426],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,141428,141429],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,141431,141432],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[742,141434,141435,141447,141463],{},[33,141436,141437,141439,141440,141443,141444,141446],{},[46,141438,141417],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[46,141441,141442],{},"tab_content","，在",[46,141445,141442],{}," 里面包裹tab选项卡对应的内容",[33,141448,141449,141450,141453,141454,141456,141457,141459,141460,141462],{},"内容被一个大盒子包裹（",[46,141451,141452],{},"tab_list_item","），里面是 ",[46,141455,742],{}," 包裹 5个 ",[46,141458,33],{},"，每个",[46,141461,33],{},"设置对应的宽度，然后设置浮动",[33,141464,141465,141466,141468,141469,141471,141472],{},"而这5个",[46,141467,33],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[46,141470,33],{},"设置",[742,141473,141474,141492,141495],{},[33,141475,141476,141477,141479,141480,141482,141483,141485,141486,141488,141489,141491],{},"第一个小 ",[46,141478,33],{}," 分为上下结构，上面是 ",[46,141481,742],{}," 包裹 ",[46,141484,33],{}," ，",[46,141487,33],{},"里面包裹 ",[46,141490,124],{},"，下面插入一张图片",[33,141493,141494],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[33,141496,141497,141498,141500,141501,141503,141504,141506],{},"后面的小 ",[46,141499,33],{}," 里面先放一个",[46,141502,124],{},"标签，然后在",[46,141505,124],{},"标签里面插入图片即可",[14,141508,141361],{},[40,141510,141511],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,141512,141513],{"__ignoreMap":27},[49,141514,141515,141517,141519,141521,141523,141525,141527,141529,141531,141533,141535,141537],{"class":51,"line":52},[49,141516,1739],{"class":73},[49,141518,25],{"class":51831},[49,141520,55770],{"class":55},[49,141522,78],{"class":73},[49,141524,134600],{"class":59},[49,141526,55778],{"class":55},[49,141528,78],{"class":73},[49,141530,134607],{"class":59},[49,141532,134610],{"class":55},[49,141534,78],{"class":73},[49,141536,134615],{"class":59},[49,141538,51838],{"class":73},[14,141540,141388],{},[40,141542,141543],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,141544,141545],{"__ignoreMap":27},[49,141546,141547,141549,141551,141553,141555,141557,141559,141561,141563,141565,141567,141569],{"class":51,"line":52},[49,141548,1739],{"class":73},[49,141550,25],{"class":51831},[49,141552,55770],{"class":55},[49,141554,78],{"class":73},[49,141556,134600],{"class":59},[49,141558,55778],{"class":55},[49,141560,78],{"class":73},[49,141562,134607],{"class":59},[49,141564,134610],{"class":55},[49,141566,78],{"class":73},[49,141568,134615],{"class":59},[49,141570,51838],{"class":73},[14,141572,141573],{},"tab栏切换需求！！！！！！介绍：",[25,141575],{"style":126939,"src":141576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[742,141578,141579,141587,141593,141596],{},[33,141580,141581,141584,141585],{},[46,141582,141583],{},"tab","栏的布局是 ",[46,141586,139594],{},[33,141588,141589,141590,141592],{},"有多少个",[46,141591,141583],{},"选项卡，那么对应就有多少个内容",[33,141594,141595],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[33,141597,141598,141599,141602,141603,141605,141606,141608],{},"等后面我们学习了",[46,141600,141601],{},"js","之后，我们就会配合",[46,141604,141601],{},"来实现，",[46,141607,141583],{},"栏的切换",[782,141610,141612],{"id":141611},"_162-列表制作","16.2 列表制作",[18,141614,141616],{"id":141615},"_1621-准备工作","16.2.1 准备工作",[742,141618,141619,141622,141625,141628],{},[33,141620,141621],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[33,141623,141624],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[33,141626,141627],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[33,141629,141630],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[18,141632,141634,141635,101549,141637,141639],{"id":141633},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[46,141636,132088],{},[46,141638,54244],{}," 修改",[25,141641],{"style":126939,"src":141642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[742,141644,141645],{},[33,141646,141647],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141649,140453],{},[40,141651,141652],{"className":127083,"code":132515,"language":127085,"meta":27,"style":27},[46,141653,141654,141658,141672,141676,141690,141694,141708,141712,141726,141730],{"__ignoreMap":27},[49,141655,141656],{"class":51,"line":52},[49,141657,132522],{"class":66},[49,141659,141660,141662,141664,141666,141668,141670],{"class":51,"line":63},[49,141661,132527],{"class":55},[49,141663,80338],{"class":73},[49,141665,129443],{"class":159},[49,141667,51968],{"class":73},[49,141669,132536],{"class":159},[49,141671,130013],{"class":73},[49,141673,141674],{"class":51,"line":70},[49,141675,132543],{"class":66},[49,141677,141678,141680,141682,141684,141686,141688],{"class":51,"line":219},[49,141679,132548],{"class":55},[49,141681,80338],{"class":73},[49,141683,129443],{"class":159},[49,141685,51968],{"class":73},[49,141687,55295],{"class":159},[49,141689,130013],{"class":73},[49,141691,141692],{"class":51,"line":233},[49,141693,132563],{"class":66},[49,141695,141696,141698,141700,141702,141704,141706],{"class":51,"line":241},[49,141697,132568],{"class":55},[49,141699,80338],{"class":73},[49,141701,129443],{"class":159},[49,141703,51968],{"class":73},[49,141705,55362],{"class":159},[49,141707,130013],{"class":73},[49,141709,141710],{"class":51,"line":1920},[49,141711,132583],{"class":66},[49,141713,141714,141716,141718,141720,141722,141724],{"class":51,"line":2011},[49,141715,132588],{"class":55},[49,141717,80338],{"class":73},[49,141719,129443],{"class":159},[49,141721,51968],{"class":73},[49,141723,86764],{"class":159},[49,141725,130013],{"class":73},[49,141727,141728],{"class":51,"line":2017},[49,141729,132603],{"class":66},[49,141731,141732,141734,141736,141738,141740,141742],{"class":51,"line":2029},[49,141733,132608],{"class":55},[49,141735,80338],{"class":73},[49,141737,129443],{"class":159},[49,141739,51968],{"class":73},[49,141741,132617],{"class":159},[49,141743,130013],{"class":73},[14,141745,140542],{},[40,141747,141748],{"className":127083,"code":132515,"language":127085,"meta":27,"style":27},[46,141749,141750,141754,141768,141772,141786,141790,141804,141808,141822,141826],{"__ignoreMap":27},[49,141751,141752],{"class":51,"line":52},[49,141753,132522],{"class":66},[49,141755,141756,141758,141760,141762,141764,141766],{"class":51,"line":63},[49,141757,132527],{"class":55},[49,141759,80338],{"class":73},[49,141761,129443],{"class":159},[49,141763,51968],{"class":73},[49,141765,132536],{"class":159},[49,141767,130013],{"class":73},[49,141769,141770],{"class":51,"line":70},[49,141771,132543],{"class":66},[49,141773,141774,141776,141778,141780,141782,141784],{"class":51,"line":219},[49,141775,132548],{"class":55},[49,141777,80338],{"class":73},[49,141779,129443],{"class":159},[49,141781,51968],{"class":73},[49,141783,55295],{"class":159},[49,141785,130013],{"class":73},[49,141787,141788],{"class":51,"line":233},[49,141789,132563],{"class":66},[49,141791,141792,141794,141796,141798,141800,141802],{"class":51,"line":241},[49,141793,132568],{"class":55},[49,141795,80338],{"class":73},[49,141797,129443],{"class":159},[49,141799,51968],{"class":73},[49,141801,55362],{"class":159},[49,141803,130013],{"class":73},[49,141805,141806],{"class":51,"line":1920},[49,141807,132583],{"class":66},[49,141809,141810,141812,141814,141816,141818,141820],{"class":51,"line":2011},[49,141811,132588],{"class":55},[49,141813,80338],{"class":73},[49,141815,129443],{"class":159},[49,141817,51968],{"class":73},[49,141819,86764],{"class":159},[49,141821,130013],{"class":73},[49,141823,141824],{"class":51,"line":2017},[49,141825,132603],{"class":66},[49,141827,141828,141830,141832,141834,141836,141838],{"class":51,"line":2029},[49,141829,132608],{"class":55},[49,141831,80338],{"class":73},[49,141833,129443],{"class":159},[49,141835,51968],{"class":73},[49,141837,132617],{"class":159},[49,141839,130013],{"class":73},[742,141841,141842,141853],{},[33,141843,141844,141845,141848,141849,101549,141851],{},"1 号盒子左侧浮动 ",[46,141846,141847],{},"sk_list"," 里面包含 ",[46,141850,742],{},[46,141852,33],{},[33,141854,141855,141856,141848,141859,101549,141861],{},"2 号盒子左侧浮动 ",[46,141857,141858],{},"sk_con",[46,141860,742],{},[46,141862,33],{},[14,141864,140453],{},[40,141866,141867],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},[46,141868,141869,141875,141885],{"__ignoreMap":27},[49,141870,141871,141873],{"class":51,"line":52},[49,141872,130931],{"class":55},[49,141874,16269],{"class":73},[49,141876,141877,141879,141881,141883],{"class":51,"line":63},[49,141878,131563],{"class":159},[49,141880,51968],{"class":73},[49,141882,621],{"class":159},[49,141884,1990],{"class":73},[49,141886,141887],{"class":51,"line":70},[49,141888,2264],{"class":73},[14,141890,140542],{},[40,141892,141893],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},[46,141894,141895,141901,141911],{"__ignoreMap":27},[49,141896,141897,141899],{"class":51,"line":52},[49,141898,130931],{"class":55},[49,141900,16269],{"class":73},[49,141902,141903,141905,141907,141909],{"class":51,"line":63},[49,141904,131563],{"class":159},[49,141906,51968],{"class":73},[49,141908,621],{"class":159},[49,141910,1990],{"class":73},[49,141912,141913],{"class":51,"line":70},[49,141914,2264],{"class":73},[18,141916,141918,141919],{"id":141917},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[46,141920,141921],{},"sk_container",[25,141923],{"style":126939,"src":141924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[742,141926,141927,141932],{},[33,141928,141107,141929,141931],{},[46,141930,141921],{}," 给宽度 1200，不要给高度",[33,141933,141934],{},"一定不要忘记清除浮动",[14,141936,140453],{},[40,141938,141939],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},[46,141940,141941,141947,141957],{"__ignoreMap":27},[49,141942,141943,141945],{"class":51,"line":52},[49,141944,130931],{"class":55},[49,141946,16269],{"class":73},[49,141948,141949,141951,141953,141955],{"class":51,"line":63},[49,141950,131563],{"class":159},[49,141952,51968],{"class":73},[49,141954,621],{"class":159},[49,141956,1990],{"class":73},[49,141958,141959],{"class":51,"line":70},[49,141960,2264],{"class":73},[30,141962,141963],{},[33,141964,141965],{},"sk_hd制作",[742,141967,141968],{},[33,141969,141187,141970,141973],{},[46,141971,141972],{},"sk_hd"," ，插入图片即可",[14,141975,140453],{},[40,141977,141978],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,141979,141980],{"__ignoreMap":27},[49,141981,141982,141984,141986,141988,141990,141992,141994,141996,141998,142000,142002,142004],{"class":51,"line":52},[49,141983,1739],{"class":73},[49,141985,25],{"class":51831},[49,141987,55770],{"class":55},[49,141989,78],{"class":73},[49,141991,134600],{"class":59},[49,141993,55778],{"class":55},[49,141995,78],{"class":73},[49,141997,134607],{"class":59},[49,141999,134610],{"class":55},[49,142001,78],{"class":73},[49,142003,134615],{"class":59},[49,142005,51838],{"class":73},[30,142007,142008],{"start":63},[33,142009,142010],{},"sk_bd制作",[742,142012,142013],{},[33,142014,142015,142016,142019,142020,101549,142022,142024],{},"3 号盒子 ",[46,142017,142018],{},"sk_bd"," ，里面包含很多的 ",[46,142021,742],{},[46,142023,33],{},[742,142025,142026,142035],{},[33,142027,142028,142029,142031,142032,142034],{},"当鼠标移入到 ",[46,142030,33],{}," 上面的时候显示红色的边框，在这里先给 ",[46,142033,33],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[33,142036,142037,142038,142040,142041,142043,142044,142047,142048,142050],{},"由于给每个 ",[46,142039,33],{}," 都设置了外边距，导致一行的最后一个 ",[46,142042,33],{}," 掉了下来，在这里我们利用 ",[46,142045,142046],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[46,142049,33],{},"，去掉外边距就好了",[14,142052,140453],{},[40,142054,142055],{"className":127083,"code":139272,"language":127085,"meta":27,"style":27},[46,142056,142057,142063,142075],{"__ignoreMap":27},[49,142058,142059,142061],{"class":51,"line":52},[49,142060,52142],{"class":51831},[49,142062,16269],{"class":73},[49,142064,142065,142067,142069,142071,142073],{"class":51,"line":63},[49,142066,71001],{"class":159},[49,142068,51968],{"class":73},[49,142070,1021],{"class":159},[49,142072,52087],{"class":159},[49,142074,1990],{"class":73},[49,142076,142077],{"class":51,"line":70},[49,142078,2264],{"class":73},[14,142080,140542],{},[40,142082,142083],{"className":127083,"code":139272,"language":127085,"meta":27,"style":27},[46,142084,142085,142091,142103],{"__ignoreMap":27},[49,142086,142087,142089],{"class":51,"line":52},[49,142088,52142],{"class":51831},[49,142090,16269],{"class":73},[49,142092,142093,142095,142097,142099,142101],{"class":51,"line":63},[49,142094,71001],{"class":159},[49,142096,51968],{"class":73},[49,142098,1021],{"class":159},[49,142100,52087],{"class":159},[49,142102,1990],{"class":73},[49,142104,142105],{"class":51,"line":70},[49,142106,2264],{"class":73},[782,142108,142110],{"id":142109},"_163-注册页面制作","16.3 注册页面制作",[25,142112],{"style":126939,"src":142113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,142115,142116,142118],{},[112,142117,9722],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[25,142120],{"style":126939,"src":142121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[18,142123,142125],{"id":142124},"_1631-准备工作","16.3.1 准备工作",[742,142127,142128,142131],{},[33,142129,142130],{},"创建register.html，引入 base.css，引入favicon图标",[33,142132,142133],{},"创建register.css ，在html页面进行引入",[18,142135,142137,142138,142140],{"id":142136},"_1632-header-头部实现","16.3.2 ",[46,142139,132088],{}," 头部实现",[742,142142,142143,142146],{},[33,142144,142145],{},"整个内容用 版心 进行包裹",[33,142147,142148],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,142150,140453],{},[40,142152,142153],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,142154,142155],{"__ignoreMap":27},[49,142156,142157,142159,142161,142163,142165,142167,142169,142171,142173,142175,142177,142179],{"class":51,"line":52},[49,142158,1739],{"class":73},[49,142160,25],{"class":51831},[49,142162,55770],{"class":55},[49,142164,78],{"class":73},[49,142166,134600],{"class":59},[49,142168,55778],{"class":55},[49,142170,78],{"class":73},[49,142172,134607],{"class":59},[49,142174,134610],{"class":55},[49,142176,78],{"class":73},[49,142178,134615],{"class":59},[49,142180,51838],{"class":73},[14,142182,140542],{},[40,142184,142185],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,142186,142187],{"__ignoreMap":27},[49,142188,142189,142191,142193,142195,142197,142199,142201,142203,142205,142207,142209,142211],{"class":51,"line":52},[49,142190,1739],{"class":73},[49,142192,25],{"class":51831},[49,142194,55770],{"class":55},[49,142196,78],{"class":73},[49,142198,134600],{"class":59},[49,142200,55778],{"class":55},[49,142202,78],{"class":73},[49,142204,134607],{"class":59},[49,142206,134610],{"class":55},[49,142208,78],{"class":73},[49,142210,134615],{"class":59},[49,142212,51838],{"class":73},[18,142214,142216,142217,142220],{"id":142215},"_1633-registerarea-主体模块实现","16.3.3 ",[46,142218,142219],{},"registerarea"," 主体模块实现",[25,142222],{"style":126939,"src":142223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,142225,142226],{},"整个大盒子 高度为 522px，设置4个边框",[14,142228,140453],{},[40,142230,142231],{"className":127083,"code":131240,"language":127085,"meta":27,"style":27},[46,142232,142233,142239,142255],{"__ignoreMap":27},[49,142234,142235,142237],{"class":51,"line":52},[49,142236,52142],{"class":51831},[49,142238,16269],{"class":73},[49,142240,142241,142243,142245,142247,142249,142251,142253],{"class":51,"line":63},[49,142242,71427],{"class":159},[49,142244,51968],{"class":73},[49,142246,1047],{"class":159},[49,142248,52023],{"class":77},[49,142250,52052],{"class":159},[49,142252,130475],{"class":159},[49,142254,1990],{"class":73},[49,142256,142257],{"class":51,"line":70},[49,142258,2264],{"class":73},[14,142260,140542],{},[40,142262,142263],{"className":127083,"code":131240,"language":127085,"meta":27,"style":27},[46,142264,142265,142271,142287],{"__ignoreMap":27},[49,142266,142267,142269],{"class":51,"line":52},[49,142268,52142],{"class":51831},[49,142270,16269],{"class":73},[49,142272,142273,142275,142277,142279,142281,142283,142285],{"class":51,"line":63},[49,142274,71427],{"class":159},[49,142276,51968],{"class":73},[49,142278,1047],{"class":159},[49,142280,52023],{"class":77},[49,142282,52052],{"class":159},[49,142284,130475],{"class":159},[49,142286,1990],{"class":73},[49,142288,142289],{"class":51,"line":70},[49,142290,2264],{"class":73},[14,142292,142293],{},"1号盒子 是一个 h3 标签，放标题",[742,142295,142296],{},[33,142297,142298],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,142300,140453],{},[40,142302,142303],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},[46,142304,142305,142311,142321],{"__ignoreMap":27},[49,142306,142307,142309],{"class":51,"line":52},[49,142308,130931],{"class":55},[49,142310,16269],{"class":73},[49,142312,142313,142315,142317,142319],{"class":51,"line":63},[49,142314,131563],{"class":159},[49,142316,51968],{"class":73},[49,142318,621],{"class":159},[49,142320,1990],{"class":73},[49,142322,142323],{"class":51,"line":70},[49,142324,2264],{"class":73},[14,142326,140542],{},[40,142328,142329],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},[46,142330,142331,142337,142347],{"__ignoreMap":27},[49,142332,142333,142335],{"class":51,"line":52},[49,142334,130931],{"class":55},[49,142336,16269],{"class":73},[49,142338,142339,142341,142343,142345],{"class":51,"line":63},[49,142340,131563],{"class":159},[49,142342,51968],{"class":73},[49,142344,621],{"class":159},[49,142346,1990],{"class":73},[49,142348,142349],{"class":51,"line":70},[49,142350,2264],{"class":73},[14,142352,142353],{},"2号盒子 里面放注册的内容",[742,142355,142356,142359,142368,142382,142395,142398,142401,142419,142433],{},[33,142357,142358],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[33,142360,142361,142362,142364,142365,142367],{},"里面的内容利用 ",[46,142363,742],{}," 包含 ",[46,142366,33],{}," 来实现的（不需要用表格）",[33,142369,139597,142370,142372,142373,142375,142376,142378,142379,142381],{},[46,142371,33],{}," 里面，左侧放 ",[46,142374,34139],{}," 标签， 中间放",[46,142377,54352],{}," 标签， 右侧放 ",[46,142380,49],{}," 提示信息",[33,142383,142384,142385,142387,142388,142390,142391,142394],{},"左侧 ",[46,142386,34139],{},"里面的文字都是右对齐，我们可以给",[46,142389,34139],{},"设置一个宽度（88px），然后利用",[46,142392,142393],{},"text-align"," 来设置右对齐",[33,142396,142397],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[33,142399,142400],{},"右侧 span修饰一下文字颜色",[33,142402,142403,142404],{},"提示信息的样式优化",[742,142405,142406,142409,142412],{},[33,142407,142408],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[33,142410,142411],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[33,142413,142414,142415,142418],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[46,142416,142417],{},"vertical-algin"," 来设置 图片与文字对齐方式",[33,142420,142421,142422],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[742,142423,142424,142430],{},[33,142425,142426,142427,142429],{},"设置 ",[46,142428,24249],{}," 的 左右 12px 的内边距，设置一下文字颜色",[33,142431,142432],{},"分别设置 背景颜色",[33,142434,142435,142436,142438],{},"同意协议 和 完成注册 都是用 ",[46,142437,33],{}," 进行包裹",[14,142440,140453],{},[40,142442,142443],{"className":127083,"code":141026,"language":127085,"meta":27,"style":27},[46,142444,142445,142451,142461],{"__ignoreMap":27},[49,142446,142447,142449],{"class":51,"line":52},[49,142448,52142],{"class":51831},[49,142450,16269],{"class":73},[49,142452,142453,142455,142457,142459],{"class":51,"line":63},[49,142454,71409],{"class":159},[49,142456,51968],{"class":73},[49,142458,141043],{"class":159},[49,142460,1990],{"class":73},[49,142462,142463],{"class":51,"line":70},[49,142464,2264],{"class":73},[14,142466,140542],{},[40,142468,142469],{"className":127083,"code":141026,"language":127085,"meta":27,"style":27},[46,142470,142471,142477,142487],{"__ignoreMap":27},[49,142472,142473,142475],{"class":51,"line":52},[49,142474,52142],{"class":51831},[49,142476,16269],{"class":73},[49,142478,142479,142481,142483,142485],{"class":51,"line":63},[49,142480,71409],{"class":159},[49,142482,51968],{"class":73},[49,142484,141043],{"class":159},[49,142486,1990],{"class":73},[49,142488,142489],{"class":51,"line":70},[49,142490,2264],{"class":73},[18,142492,142494],{"id":142493},"_1634-底部实现","16.3.4 底部实现",[14,142496,140453],{},[40,142498,142499],{"className":127083,"code":141026,"language":127085,"meta":27,"style":27},[46,142500,142501,142507,142517],{"__ignoreMap":27},[49,142502,142503,142505],{"class":51,"line":52},[49,142504,52142],{"class":51831},[49,142506,16269],{"class":73},[49,142508,142509,142511,142513,142515],{"class":51,"line":63},[49,142510,71409],{"class":159},[49,142512,51968],{"class":73},[49,142514,141043],{"class":159},[49,142516,1990],{"class":73},[49,142518,142519],{"class":51,"line":70},[49,142520,2264],{"class":73},[14,142522,140542],{},[40,142524,142525],{"className":127830,"code":131187,"language":127832,"meta":27,"style":27},[46,142526,142527,142531,142545,142549],{"__ignoreMap":27},[49,142528,142529],{"class":51,"line":52},[49,142530,131194],{"class":66},[49,142532,142533,142535,142537,142539,142541,142543],{"class":51,"line":63},[49,142534,1739],{"class":73},[49,142536,52142],{"class":51831},[49,142538,54017],{"class":55},[49,142540,78],{"class":73},[49,142542,131207],{"class":59},[49,142544,51838],{"class":73},[49,142546,142547],{"class":51,"line":70},[49,142548,131214],{"class":73},[49,142550,142551,142553,142555],{"class":51,"line":219},[49,142552,52316],{"class":73},[49,142554,52142],{"class":51831},[49,142556,51838],{"class":73},[782,142558,142560],{"id":142559},"_164-项目总结","16.4 项目总结",[30,142562,142563,142566,142569,142572],{},[33,142564,142565],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[33,142567,142568],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[33,142570,142571],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[33,142573,142574],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[25,142576],{"style":126939,"src":142577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[30,142579,142580],{"start":233},[33,142581,142582],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[25,142584],{"style":126939,"src":142585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[30,142587,142588],{"start":241},[33,142589,142590],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[25,142592],{"style":126939,"src":142593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[40,142595,142596],{"className":127830,"code":137240,"language":127832,"meta":27,"style":27},[46,142597,142598],{"__ignoreMap":27},[49,142599,142600,142602,142604,142606,142608,142610,142612,142614,142616,142618,142620,142622],{"class":51,"line":52},[49,142601,1739],{"class":73},[49,142603,54352],{"class":51831},[49,142605,54355],{"class":55},[49,142607,78],{"class":73},[49,142609,63230],{"class":59},[49,142611,15617],{"class":55},[49,142613,78],{"class":73},[49,142615,137261],{"class":59},[49,142617,61551],{"class":55},[49,142619,78],{"class":73},[49,142621,137268],{"class":59},[49,142623,51838],{"class":73},[30,142625,142626,142629],{"start":1920},[33,142627,142628],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[33,142630,142631],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[757,142633,142634],{},"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":27,"searchDepth":63,"depth":63,"links":142636},[142637,142642,142649,142657],{"id":140263,"depth":63,"text":140264,"children":142638},[142639,142640,142641],{"id":140267,"depth":70,"text":140268},{"id":140998,"depth":70,"text":140999},{"id":141311,"depth":70,"text":141312},{"id":141611,"depth":63,"text":141612,"children":142643},[142644,142645,142647],{"id":141615,"depth":70,"text":141616},{"id":141633,"depth":70,"text":142646},"16.2.2 列表页 header 和 nav 修改",{"id":141917,"depth":70,"text":142648},"16.2.3 列表页主体 sk_container",{"id":142109,"depth":63,"text":142110,"children":142650},[142651,142652,142654,142656],{"id":142124,"depth":70,"text":142125},{"id":142136,"depth":70,"text":142653},"16.3.2 header 头部实现",{"id":142215,"depth":70,"text":142655},"16.3.3 registerarea 主体模块实现",{"id":142493,"depth":70,"text":142494},{"id":142559,"depth":63,"text":142560},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140255,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142664,"title":142665,"body":142666,"description":24072,"extension":766,"meta":142774,"navigation":398,"path":142775,"seo":142776,"stem":142777,"__hash__":142778},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142667,"toc":142769},[142668,142671,142675,142678,142681,142690,142699,142703,142708,142715,142733,142736,142739,142742,142745,142748,142751,142754,142757,142760,142763,142766],[10,142669,142665],{"id":142670},"_17-web服务器与网站发布",[782,142672,142674],{"id":142673},"_171-web服务器","17.1 Web服务器",[14,142676,142677],{},"把自己网站上传到服务器上，可以让其他人访问",[25,142679],{"style":126939,"src":142680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142682,142683,142686,142687],{},[112,142684,142685],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[112,142688,142689],{},"Web 服务器等",[14,142691,142692,142693,101549,142696,26429],{},"根据服务器在网络中所在的位置不同，又可分为 ",[112,142694,142695],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[112,142697,142698],{},"远程服务器",[18,142700,142702],{"id":142701},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142704,142705],{},[112,142706,142707],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142709,142710,142711],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[124,142712,142713],{"href":142713,"rel":142714},"http:\u002F\u002Ffree.3v.do\u002F",[128],[742,142716,142717,142720,142723,142730],{},[33,142718,142719],{},"去免费空间网站注册账号。",[33,142721,142722],{},"记录下主机名、用户名、密码、域名。",[33,142724,142725,142726,142729],{},"利用 ",[46,142727,142728],{},"utftp"," 软件 上传网站到远程服务器",[33,142731,142732],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142734,142735],{},"使用软件上传，对上传软件文件进行解压",[25,142737],{"style":126939,"src":142738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[25,142740],{"style":126939,"src":142741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142743,142744],{},"输入刚刚申请的服务器账号信息：",[25,142746],{"style":126939,"src":142747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[25,142749],{"style":126939,"src":142750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[25,142752],{"style":126939,"src":142753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[25,142755],{"style":126939,"src":142756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142758,142759],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[25,142761],{"style":126939,"src":142762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142764,142765],{},"浏览器输入域名即可访问",[14,142767,142768],{},"首页一定必须是index",{"title":27,"searchDepth":63,"depth":63,"links":142770},[142771],{"id":142673,"depth":63,"text":142674,"children":142772},[142773],{"id":142701,"depth":70,"text":142702},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142665,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142780,"title":142781,"body":142782,"description":24072,"extension":766,"meta":143709,"navigation":398,"path":143710,"seo":143711,"stem":143712,"__hash__":143713},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142783,"toc":143692},[142784,142787,142791,142794,142797,142808,142811,142815,142819,142824,142827,142830,142833,142836,142840,142866,142870,142874,142877,142880,142884,142917,142921,142924,142927,142991,142995,142999,143002,143005,143008,143012,143057,143061,143064,143094,143098,143102,143105,143108,143112,143115,143184,143187,143295,143297,143303,143307,143310,143313,143409,143412,143416,143440,143444,143447,143451,143454,143458,143461,143464,143467,143470,143474,143477,143480,143484,143488,143491,143494,143497,143500,143504,143507,143511,143514,143517,143562,143566,143570,143573,143576,143579,143611,143615,143618,143652,143656,143659,143689],[10,142785,142781],{"id":142786},"_18-2d动画与3d转换",[782,142788,142790],{"id":142789},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142792,142793],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142795,142796],{},"转换（transform）你可以简单理解为变形",[742,142798,142799,142802,142805],{},[33,142800,142801],{},"移动：translate",[33,142803,142804],{},"旋转：rotate",[33,142806,142807],{},"缩放：scale",[25,142809],{"style":126939,"src":142810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[18,142812,142814],{"id":142813},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[130,142816,142818],{"id":142817},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142820,142821,142822],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[112,142823,133742],{},[25,142825],{"style":126939,"src":142826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142828,142829],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142831,142832],{},"对于行内元素无效",[14,142834,142835],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[130,142837,142839],{"id":142838},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[40,142841,142842],{"className":127083,"code":139272,"language":127085,"meta":27,"style":27},[46,142843,142844,142850,142862],{"__ignoreMap":27},[49,142845,142846,142848],{"class":51,"line":52},[49,142847,52142],{"class":51831},[49,142849,16269],{"class":73},[49,142851,142852,142854,142856,142858,142860],{"class":51,"line":63},[49,142853,71001],{"class":159},[49,142855,51968],{"class":73},[49,142857,1021],{"class":159},[49,142859,52087],{"class":159},[49,142861,1990],{"class":73},[49,142863,142864],{"class":51,"line":70},[49,142865,2264],{"class":73},[18,142867,142869],{"id":142868},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[130,142871,142873],{"id":142872},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142875,142876],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[25,142878],{"style":126939,"src":142879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[130,142881,142883],{"id":142882},"_18122-旋转效果","18.1.2.2 旋转效果",[40,142885,142887],{"className":127083,"code":142886,"language":127085,"meta":27,"style":27},"div {\n  transform: rotate(45deg);\n}\n",[46,142888,142889,142895,142913],{"__ignoreMap":27},[49,142890,142891,142893],{"class":51,"line":52},[49,142892,52142],{"class":51831},[49,142894,16269],{"class":73},[49,142896,142897,142899,142901,142904,142906,142908,142911],{"class":51,"line":63},[49,142898,137067],{"class":159},[49,142900,51968],{"class":73},[49,142902,142903],{"class":159},"rotate",[49,142905,841],{"class":73},[49,142907,1358],{"class":159},[49,142909,142910],{"class":77},"deg",[49,142912,3416],{"class":73},[49,142914,142915],{"class":51,"line":70},[49,142916,2264],{"class":73},[130,142918,142920],{"id":142919},"_18123-三角做法","18.1.2.3 三角做法",[14,142922,142923],{},"该下标当经过最外层大盒子时会实现向上反转",[25,142925],{"style":126939,"src":142926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[40,142928,142929],{"className":127083,"code":135603,"language":127085,"meta":27,"style":27},[46,142930,142931,142935,142941,142951,142961,142977,142987],{"__ignoreMap":27},[49,142932,142933],{"class":51,"line":52},[49,142934,135610],{"class":66},[49,142936,142937,142939],{"class":51,"line":63},[49,142938,135615],{"class":55},[49,142940,16269],{"class":73},[49,142942,142943,142945,142947,142949],{"class":51,"line":70},[49,142944,71099],{"class":159},[49,142946,51968],{"class":73},[49,142948,1021],{"class":159},[49,142950,1990],{"class":73},[49,142952,142953,142955,142957,142959],{"class":51,"line":219},[49,142954,71319],{"class":159},[49,142956,51968],{"class":73},[49,142958,1021],{"class":159},[49,142960,1990],{"class":73},[49,142962,142963,142965,142967,142969,142971,142973,142975],{"class":51,"line":233},[49,142964,71427],{"class":159},[49,142966,51968],{"class":73},[49,142968,1275],{"class":159},[49,142970,52023],{"class":77},[49,142972,52052],{"class":159},[49,142974,64522],{"class":159},[49,142976,1990],{"class":73},[49,142978,142979,142981,142983,142985],{"class":51,"line":241},[49,142980,135658],{"class":159},[49,142982,51968],{"class":73},[49,142984,62900],{"class":159},[49,142986,1990],{"class":73},[49,142988,142989],{"class":51,"line":1920},[49,142990,2264],{"class":73},[18,142992,142994],{"id":142993},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[130,142996,142998],{"id":142997},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,143000,143001],{},"设置中心点",[25,143003],{"style":126939,"src":143004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,143006,143007],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[130,143009,143011],{"id":143010},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[40,143013,143015],{"className":127083,"code":143014,"language":127085,"meta":27,"style":27},"\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",[46,143016,143017,143022,143028,143043,143048,143053],{"__ignoreMap":27},[49,143018,143019],{"class":51,"line":52},[49,143020,143021],{"class":66},"\u002F* 转换中心点 *\u002F\n",[49,143023,143024,143026],{"class":51,"line":63},[49,143025,52142],{"class":51831},[49,143027,16269],{"class":73},[49,143029,143030,143033,143035,143037,143039,143041],{"class":51,"line":70},[49,143031,143032],{"class":159},"  transform-origin",[49,143034,51968],{"class":73},[49,143036,52123],{"class":159},[49,143038,17841],{"class":159},[49,143040,130946],{"class":73},[49,143042,135756],{"class":66},[49,143044,143045],{"class":51,"line":219},[49,143046,143047],{"class":66},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[49,143049,143050],{"class":51,"line":233},[49,143051,143052],{"class":66},"  \u002F* transform-origin: left top; *\u002F\n",[49,143054,143055],{"class":51,"line":241},[49,143056,2264],{"class":73},[130,143058,143060],{"id":143059},"_18133-旋转案例","18.1.3.3 旋转案例",[25,143062],{"style":126939,"src":143063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[40,143065,143066],{"className":127083,"code":142886,"language":127085,"meta":27,"style":27},[46,143067,143068,143074,143090],{"__ignoreMap":27},[49,143069,143070,143072],{"class":51,"line":52},[49,143071,52142],{"class":51831},[49,143073,16269],{"class":73},[49,143075,143076,143078,143080,143082,143084,143086,143088],{"class":51,"line":63},[49,143077,137067],{"class":159},[49,143079,51968],{"class":73},[49,143081,142903],{"class":159},[49,143083,841],{"class":73},[49,143085,1358],{"class":159},[49,143087,142910],{"class":77},[49,143089,3416],{"class":73},[49,143091,143092],{"class":51,"line":70},[49,143093,2264],{"class":73},[18,143095,143097],{"id":143096},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[130,143099,143101],{"id":143100},"_18141-scale介绍","18.1.4.1 scale介绍",[14,143103,143104],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[25,143106],{"style":126939,"src":143107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[130,143109,143111],{"id":143110},"_18142-分页按钮","18.1.4.2 分页按钮",[25,143113],{"style":126939,"src":143114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[40,143116,143118],{"className":127083,"code":143117,"language":127085,"meta":27,"style":27},"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",[46,143119,143120,143126,143142,143146,143150,143155,143161,143175,143180],{"__ignoreMap":27},[49,143121,143122,143124],{"class":51,"line":52},[49,143123,52142],{"class":51831},[49,143125,16269],{"class":73},[49,143127,143128,143130,143132,143135,143137,143140],{"class":51,"line":63},[49,143129,137067],{"class":159},[49,143131,51968],{"class":73},[49,143133,143134],{"class":159},"scale",[49,143136,841],{"class":73},[49,143138,143139],{"class":159},"1.2",[49,143141,3416],{"class":73},[49,143143,143144],{"class":51,"line":70},[49,143145,2264],{"class":73},[49,143147,143148],{"class":51,"line":219},[49,143149,136544],{"class":73},[49,143151,143152],{"class":51,"line":233},[49,143153,143154],{"class":66},"\u002F* 2D 缩放 *\u002F\n",[49,143156,143157,143159],{"class":51,"line":241},[49,143158,52142],{"class":51831},[49,143160,16269],{"class":73},[49,143162,143163,143165,143167,143169,143171,143173],{"class":51,"line":1920},[49,143164,137067],{"class":159},[49,143166,51968],{"class":73},[49,143168,143134],{"class":159},[49,143170,841],{"class":73},[49,143172,143139],{"class":159},[49,143174,3416],{"class":73},[49,143176,143177],{"class":51,"line":2011},[49,143178,143179],{"class":66},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[49,143181,143182],{"class":51,"line":2017},[49,143183,2264],{"class":73},[14,143185,143186],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[40,143188,143190],{"className":127083,"code":143189,"language":127085,"meta":27,"style":27},"\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",[46,143191,143192,143197,143207,143228,143249,143253,143258,143264,143291],{"__ignoreMap":27},[49,143193,143194],{"class":51,"line":52},[49,143195,143196],{"class":66},"\u002F* 定义动画 *\u002F\n",[49,143198,143199,143202,143205],{"class":51,"line":63},[49,143200,143201],{"class":77},"@keyframes",[49,143203,143204],{"class":5913}," move",[49,143206,16269],{"class":73},[49,143208,143209,143212,143214,143216,143218,143221,143223,143225],{"class":51,"line":70},[49,143210,143211],{"class":55},"  0%",[49,143213,80338],{"class":73},[49,143215,48665],{"class":159},[49,143217,51968],{"class":73},[49,143219,143220],{"class":159},"translateX",[49,143222,841],{"class":73},[49,143224,1021],{"class":159},[49,143226,143227],{"class":73},"); }\n",[49,143229,143230,143233,143235,143237,143239,143241,143243,143245,143247],{"class":51,"line":219},[49,143231,143232],{"class":55},"  100%",[49,143234,80338],{"class":73},[49,143236,48665],{"class":159},[49,143238,51968],{"class":73},[49,143240,143220],{"class":159},[49,143242,841],{"class":73},[49,143244,1140],{"class":159},[49,143246,52023],{"class":77},[49,143248,143227],{"class":73},[49,143250,143251],{"class":51,"line":233},[49,143252,2264],{"class":73},[49,143254,143255],{"class":51,"line":241},[49,143256,143257],{"class":66},"\u002F* 调用动画 *\u002F\n",[49,143259,143260,143262],{"class":51,"line":1920},[49,143261,52142],{"class":51831},[49,143263,16269],{"class":73},[49,143265,143266,143269,143271,143273,143275,143277,143279,143281,143283,143286,143289],{"class":51,"line":2011},[49,143267,143268],{"class":159},"  animation",[49,143270,51968],{"class":73},[49,143272,135769],{"class":159},[49,143274,25807],{"class":159},[49,143276,1524],{"class":77},[49,143278,79211],{"class":159},[49,143280,4790],{"class":159},[49,143282,1524],{"class":77},[49,143284,143285],{"class":159}," infinite",[49,143287,143288],{"class":159}," alternate",[49,143290,1990],{"class":73},[49,143292,143293],{"class":51,"line":2017},[49,143294,2264],{"class":73},[14,143296,143186],{},[40,143298,143301],{"className":143299,"code":143300,"language":5884},[5882],"\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",[46,143302,143300],{"__ignoreMap":27},[130,143304,143306],{"id":143305},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,143308,143309],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[25,143311],{"style":126939,"src":143312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[40,143314,143315],{"className":127083,"code":143189,"language":127085,"meta":27,"style":27},[46,143316,143317,143321,143329,143347,143367,143371,143375,143381,143405],{"__ignoreMap":27},[49,143318,143319],{"class":51,"line":52},[49,143320,143196],{"class":66},[49,143322,143323,143325,143327],{"class":51,"line":63},[49,143324,143201],{"class":77},[49,143326,143204],{"class":5913},[49,143328,16269],{"class":73},[49,143330,143331,143333,143335,143337,143339,143341,143343,143345],{"class":51,"line":70},[49,143332,143211],{"class":55},[49,143334,80338],{"class":73},[49,143336,48665],{"class":159},[49,143338,51968],{"class":73},[49,143340,143220],{"class":159},[49,143342,841],{"class":73},[49,143344,1021],{"class":159},[49,143346,143227],{"class":73},[49,143348,143349,143351,143353,143355,143357,143359,143361,143363,143365],{"class":51,"line":219},[49,143350,143232],{"class":55},[49,143352,80338],{"class":73},[49,143354,48665],{"class":159},[49,143356,51968],{"class":73},[49,143358,143220],{"class":159},[49,143360,841],{"class":73},[49,143362,1140],{"class":159},[49,143364,52023],{"class":77},[49,143366,143227],{"class":73},[49,143368,143369],{"class":51,"line":233},[49,143370,2264],{"class":73},[49,143372,143373],{"class":51,"line":241},[49,143374,143257],{"class":66},[49,143376,143377,143379],{"class":51,"line":1920},[49,143378,52142],{"class":51831},[49,143380,16269],{"class":73},[49,143382,143383,143385,143387,143389,143391,143393,143395,143397,143399,143401,143403],{"class":51,"line":2011},[49,143384,143268],{"class":159},[49,143386,51968],{"class":73},[49,143388,135769],{"class":159},[49,143390,25807],{"class":159},[49,143392,1524],{"class":77},[49,143394,79211],{"class":159},[49,143396,4790],{"class":159},[49,143398,1524],{"class":77},[49,143400,143285],{"class":159},[49,143402,143288],{"class":159},[49,143404,1990],{"class":73},[49,143406,143407],{"class":51,"line":2017},[49,143408,2264],{"class":73},[14,143410,143411],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[18,143413,143415],{"id":143414},"_1823-知识点回顾","18.2.3 知识点回顾",[40,143417,143418],{"className":127083,"code":129252,"language":127085,"meta":27,"style":27},[46,143419,143420,143426,143436],{"__ignoreMap":27},[49,143421,143422,143424],{"class":51,"line":52},[49,143423,52142],{"class":51831},[49,143425,16269],{"class":73},[49,143427,143428,143430,143432,143434],{"class":51,"line":63},[49,143429,129265],{"class":159},[49,143431,51968],{"class":73},[49,143433,62267],{"class":159},[49,143435,1990],{"class":73},[49,143437,143438],{"class":51,"line":70},[49,143439,2264],{"class":73},[782,143441,143443],{"id":143442},"_183-3d-转换","18.3 3D 转换",[14,143445,143446],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[18,143448,143450],{"id":143449},"_1831-坐标轴认识","18.3.1 坐标轴认识",[25,143452],{"style":126939,"src":143453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[18,143455,143457],{"id":143456},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[25,143459],{"style":126939,"src":143460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,143462,143463],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,143465,143466],{},"translate3d的效果需要搭配透视perspective来使用",[25,143468],{"style":126939,"src":143469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[18,143471,143473],{"id":143472},"_1833-透视-perspective","18.3.3 透视 perspective",[25,143475],{"style":126939,"src":143476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,143478,143479],{},"透视写在父盒子上，单位为像素",[18,143481,143483],{"id":143482},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[130,143485,143487],{"id":143486},"_18341-分开解释","18.3.4.1 分开解释",[25,143489],{"style":126939,"src":143490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[25,143492],{"style":126939,"src":143493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[25,143495],{"style":126939,"src":143496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143498,143499],{},"总结来说就是左手原则",[130,143501,143503],{"id":143502},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[25,143505],{"style":126939,"src":143506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[18,143508,143510],{"id":143509},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[25,143512],{"style":126939,"src":143513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[25,143515],{"style":126939,"src":143516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[40,143518,143520],{"className":127083,"code":143519,"language":127085,"meta":27,"style":27},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[46,143521,143522,143528,143541,143558],{"__ignoreMap":27},[49,143523,143524,143526],{"class":51,"line":52},[49,143525,52142],{"class":51831},[49,143527,16269],{"class":73},[49,143529,143530,143533,143535,143537,143539],{"class":51,"line":63},[49,143531,143532],{"class":159},"  perspective",[49,143534,51968],{"class":73},[49,143536,65605],{"class":159},[49,143538,52023],{"class":77},[49,143540,1990],{"class":73},[49,143542,143543,143545,143547,143550,143552,143554,143556],{"class":51,"line":70},[49,143544,137067],{"class":159},[49,143546,51968],{"class":73},[49,143548,143549],{"class":159},"rotateX",[49,143551,841],{"class":73},[49,143553,1358],{"class":159},[49,143555,142910],{"class":77},[49,143557,3416],{"class":73},[49,143559,143560],{"class":51,"line":219},[49,143561,2264],{"class":73},[18,143563,143565],{"id":143564},"_1836-案例","18.3.6 案例",[130,143567,143569],{"id":143568},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[25,143571],{"style":126939,"src":143572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[25,143574],{"style":126939,"src":143575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[25,143577],{"style":126939,"src":143578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[40,143580,143582],{"className":127083,"code":143581,"language":127085,"meta":27,"style":27},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[46,143583,143584,143589,143595,143607],{"__ignoreMap":27},[49,143585,143586],{"class":51,"line":52},[49,143587,143588],{"class":66},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[49,143590,143591,143593],{"class":51,"line":63},[49,143592,134080],{"class":55},[49,143594,16269],{"class":73},[49,143596,143597,143599,143601,143603,143605],{"class":51,"line":70},[49,143598,143532],{"class":159},[49,143600,51968],{"class":73},[49,143602,65605],{"class":159},[49,143604,52023],{"class":77},[49,143606,1990],{"class":73},[49,143608,143609],{"class":51,"line":219},[49,143610,2264],{"class":73},[130,143612,143614],{"id":143613},"_18362-3d导航栏","18.3.6.2 3D导航栏",[25,143616],{"style":126939,"src":143617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[40,143619,143620],{"className":127830,"code":131187,"language":127832,"meta":27,"style":27},[46,143621,143622,143626,143640,143644],{"__ignoreMap":27},[49,143623,143624],{"class":51,"line":52},[49,143625,131194],{"class":66},[49,143627,143628,143630,143632,143634,143636,143638],{"class":51,"line":63},[49,143629,1739],{"class":73},[49,143631,52142],{"class":51831},[49,143633,54017],{"class":55},[49,143635,78],{"class":73},[49,143637,131207],{"class":59},[49,143639,51838],{"class":73},[49,143641,143642],{"class":51,"line":70},[49,143643,131214],{"class":73},[49,143645,143646,143648,143650],{"class":51,"line":219},[49,143647,52316],{"class":73},[49,143649,52142],{"class":51831},[49,143651,51838],{"class":73},[130,143653,143655],{"id":143654},"_18363-旋转木马","18.3.6.3 旋转木马",[25,143657],{"style":126939,"src":143658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[40,143660,143661],{"className":127083,"code":142886,"language":127085,"meta":27,"style":27},[46,143662,143663,143669,143685],{"__ignoreMap":27},[49,143664,143665,143667],{"class":51,"line":52},[49,143666,52142],{"class":51831},[49,143668,16269],{"class":73},[49,143670,143671,143673,143675,143677,143679,143681,143683],{"class":51,"line":63},[49,143672,137067],{"class":159},[49,143674,51968],{"class":73},[49,143676,142903],{"class":159},[49,143678,841],{"class":73},[49,143680,1358],{"class":159},[49,143682,142910],{"class":77},[49,143684,3416],{"class":73},[49,143686,143687],{"class":51,"line":70},[49,143688,2264],{"class":73},[757,143690,143691],{},"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":27,"searchDepth":63,"depth":63,"links":143693},[143694,143701],{"id":142789,"depth":63,"text":142790,"children":143695},[143696,143697,143698,143699,143700],{"id":142813,"depth":70,"text":142814},{"id":142868,"depth":70,"text":142869},{"id":142993,"depth":70,"text":142994},{"id":143096,"depth":70,"text":143097},{"id":143414,"depth":70,"text":143415},{"id":143442,"depth":63,"text":143443,"children":143702},[143703,143704,143705,143706,143707,143708],{"id":143449,"depth":70,"text":143450},{"id":143456,"depth":70,"text":143457},{"id":143472,"depth":70,"text":143473},{"id":143482,"depth":70,"text":143483},{"id":143509,"depth":70,"text":143510},{"id":143564,"depth":70,"text":143565},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142781,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143715,"title":143716,"body":143717,"description":24072,"extension":766,"meta":143920,"navigation":398,"path":143921,"seo":143922,"stem":143923,"__hash__":143924},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143718,"toc":143909},[143719,143722,143726,143729,143732,143736,143739,143742,143745,143749,143752,143756,143759,143763,143766,143770,143784,143788,143813,143816,143819,143836,143840,143844,143847,143850,143854,143857,143860,143878,143882,143885,143899,143903,143906],[10,143720,143716],{"id":143721},"_19-移动端基础-前缀现状与视口",[782,143723,143725],{"id":143724},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[25,143727],{"style":126939,"src":143728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143730,143731],{},"意思就是加个前缀，增加兼容性",[782,143733,143735],{"id":143734},"_192-移动端现状认识","19.2 移动端现状认识",[25,143737],{"style":126939,"src":143738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143740,143741],{},"调试方法：",[25,143743],{"style":126939,"src":143744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[782,143746,143748],{"id":143747},"_193-视口","19.3 视口",[14,143750,143751],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[18,143753,143755],{"id":143754},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[25,143757],{"style":126939,"src":143758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[18,143760,143762],{"id":143761},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[25,143764],{"style":126939,"src":143765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[18,143767,143769],{"id":143768},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[742,143771,143772,143775,143778,143781],{},[33,143773,143774],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[33,143776,143777],{},"理想视口，对设备来讲，是最理想的视口尺寸",[33,143779,143780],{},"需要手动添写meta视口标签通知浏览器操作",[33,143782,143783],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[18,143785,143787],{"id":143786},"_1934-meta视口标签","19.3.4 meta视口标签",[40,143789,143791],{"className":127830,"code":143790,"language":127832,"meta":27,"style":27},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[46,143792,143793],{"__ignoreMap":27},[49,143794,143795,143797,143799,143801,143803,143805,143807,143809,143811],{"class":51,"line":52},[49,143796,1739],{"class":73},[49,143798,51875],{"class":51831},[49,143800,15617],{"class":55},[49,143802,78],{"class":73},[49,143804,51922],{"class":59},[49,143806,51902],{"class":55},[49,143808,78],{"class":73},[49,143810,51929],{"class":59},[49,143812,51838],{"class":73},[25,143814],{"style":126939,"src":143815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143817,143818],{},"标准视口设置：",[30,143820,143821,143824,143827,143830,143833],{},[33,143822,143823],{},"视口宽度和设备保持一致",[33,143825,143826],{},"视口的默认缩放比例1.0",[33,143828,143829],{},"不允许用户自行缩放",[33,143831,143832],{},"最大允许的缩放比例1.0",[33,143834,143835],{},"最小允许的缩放比例1.0",[18,143837,143839],{"id":143838},"_1935-二倍图","19.3.5 二倍图",[130,143841,143843],{"id":143842},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[25,143845],{"style":126939,"src":143846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[25,143848],{"style":126939,"src":143849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[130,143851,143853],{"id":143852},"_19352-多倍图","19.3.5.2 多倍图",[25,143855],{"style":126939,"src":143856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143858,143859],{},"二倍图法，代码如下：",[40,143861,143863],{"className":127083,"code":143862,"language":127085,"meta":27,"style":27},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[46,143864,143865,143870],{"__ignoreMap":27},[49,143866,143867],{"class":51,"line":52},[49,143868,143869],{"class":66},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[49,143871,143872,143875],{"class":51,"line":63},[49,143873,143874],{"class":51831},"background-size",[49,143876,143877],{"class":73},": 50% 50%;\n",[130,143879,143881],{"id":143880},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[25,143883],{"style":126939,"src":143884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[30,143886,143887,143890,143893,143896],{},[33,143888,143889],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[33,143891,143892],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[33,143894,143895],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[33,143897,143898],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[130,143900,143902],{"id":143901},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[25,143904],{"style":126939,"src":143905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[757,143907,143908],{},"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":27,"searchDepth":63,"depth":63,"links":143910},[143911,143912,143913],{"id":143724,"depth":63,"text":143725},{"id":143734,"depth":63,"text":143735},{"id":143747,"depth":63,"text":143748,"children":143914},[143915,143916,143917,143918,143919],{"id":143754,"depth":70,"text":143755},{"id":143761,"depth":70,"text":143762},{"id":143768,"depth":70,"text":143769},{"id":143786,"depth":70,"text":143787},{"id":143838,"depth":70,"text":143839},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143716,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143926,"title":143927,"body":143928,"description":24072,"extension":766,"meta":144805,"navigation":398,"path":144806,"seo":144807,"stem":144808,"__hash__":144809},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143929,"toc":144789},[143930,143933,143937,143944,143947,143954,143957,143962,143965,143969,143973,143980,143983,143986,143990,143993,143996,143999,144002,144005,144009,144012,144016,144018,144021,144024,144027,144030,144032,144035,144037,144067,144069,144099,144103,144106,144110,144113,144130,144133,144136,144212,144214,144217,144220,144223,144226,144228,144231,144234,144238,144260,144263,144266,144270,144273,144279,144282,144286,144289,144292,144296,144299,144302,144305,144309,144312,144315,144318,144321,144325,144328,144332,144339,144342,144345,144348,144351,144361,144364,144367,144374,144377,144381,144384,144387,144391,144394,144397,144400,144445,144448,144451,144454,144456,144585,144587,144625,144628,144631,144633,144751,144753,144787],[10,143931,143927],{"id":143932},"_20-移动端布局实战上篇",[782,143934,143936],{"id":143935},"_201-移动端主流方案","20.1 移动端主流方案",[30,143938,143939],{},[33,143940,143941],{},[112,143942,143943],{},"单独移动端页面（主流）",[25,143945],{"style":126939,"src":143946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[30,143948,143949],{"start":63},[33,143950,143951],{},[112,143952,143953],{},"响应式兼容PC移动端",[25,143955],{"style":126939,"src":143956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[30,143958,143959],{"start":70},[33,143960,143961],{},"两种页面选型布局方式",[25,143963],{"style":126939,"src":143964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[782,143966,143968],{"id":143967},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[18,143970,143972],{"id":143971},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143974,143975,143976],{},"官网地址： ",[124,143977,143978],{"href":143978,"rel":143979},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[128],[25,143981],{"style":126939,"src":143982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[25,143984],{"style":126939,"src":143985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[18,143987,143989],{"id":143988},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[25,143991],{"style":126939,"src":143992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[25,143994],{"style":126939,"src":143995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143997,143998],{},"去除高亮：",[14,144000,144001],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,144003,144004],{},"-webkit- tap-highlight-color: transparent;",[782,144006,144008],{"id":144007},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[25,144010],{"style":126939,"src":144011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[782,144013,144015],{"id":144014},"_204-流式布局案例","20.4 流式布局案例",[14,144017,870],{},[14,144019,144020],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,144022,144023],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,144025,144026],{},"图片格式：",[25,144028],{"style":126939,"src":144029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,144031,136126],{},[25,144033],{"style":126939,"src":144034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,144036,140453],{},[40,144038,144039],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,144040,144041],{"__ignoreMap":27},[49,144042,144043,144045,144047,144049,144051,144053,144055,144057,144059,144061,144063,144065],{"class":51,"line":52},[49,144044,1739],{"class":73},[49,144046,25],{"class":51831},[49,144048,55770],{"class":55},[49,144050,78],{"class":73},[49,144052,134600],{"class":59},[49,144054,55778],{"class":55},[49,144056,78],{"class":73},[49,144058,134607],{"class":59},[49,144060,134610],{"class":55},[49,144062,78],{"class":73},[49,144064,134615],{"class":59},[49,144066,51838],{"class":73},[14,144068,140542],{},[40,144070,144071],{"className":127830,"code":134585,"language":127832,"meta":27,"style":27},[46,144072,144073],{"__ignoreMap":27},[49,144074,144075,144077,144079,144081,144083,144085,144087,144089,144091,144093,144095,144097],{"class":51,"line":52},[49,144076,1739],{"class":73},[49,144078,25],{"class":51831},[49,144080,55770],{"class":55},[49,144082,78],{"class":73},[49,144084,134600],{"class":59},[49,144086,55778],{"class":55},[49,144088,78],{"class":73},[49,144090,134607],{"class":59},[49,144092,134610],{"class":55},[49,144094,78],{"class":73},[49,144096,134615],{"class":59},[49,144098,51838],{"class":73},[782,144100,144102],{"id":144101},"_205-flex布局","20.5 flex布局",[25,144104],{"style":126939,"src":144105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[18,144107,144109],{"id":144108},"_2051-布局原理","20.5.1 布局原理",[14,144111,144112],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[742,144114,144115,144118,144121,144124,144127],{},[33,144116,144117],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[33,144119,144120],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[33,144122,144123],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[33,144125,144126],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[33,144128,144129],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,144131,144132],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,144134,144135],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[40,144137,144139],{"className":127083,"code":144138,"language":127085,"meta":27,"style":27},"\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",[46,144140,144141,144146,144153,144163,144175,144186,144197,144208],{"__ignoreMap":27},[49,144142,144143],{"class":51,"line":52},[49,144144,144145],{"class":66},"\u002F* Flex 弹性布局 *\u002F\n",[49,144147,144148,144151],{"class":51,"line":63},[49,144149,144150],{"class":55},".container",[49,144152,16269],{"class":73},[49,144154,144155,144157,144159,144161],{"class":51,"line":70},[49,144156,128699],{"class":159},[49,144158,51968],{"class":73},[49,144160,52008],{"class":159},[49,144162,1990],{"class":73},[49,144164,144165,144168,144170,144173],{"class":51,"line":219},[49,144166,144167],{"class":159},"  flex-direction",[49,144169,51968],{"class":73},[49,144171,144172],{"class":159},"row",[49,144174,1990],{"class":73},[49,144176,144177,144180,144182,144184],{"class":51,"line":233},[49,144178,144179],{"class":159},"  justify-content",[49,144181,51968],{"class":73},[49,144183,52199],{"class":159},[49,144185,1990],{"class":73},[49,144187,144188,144191,144193,144195],{"class":51,"line":241},[49,144189,144190],{"class":159},"  align-items",[49,144192,51968],{"class":73},[49,144194,52123],{"class":159},[49,144196,1990],{"class":73},[49,144198,144199,144202,144204,144206],{"class":51,"line":1920},[49,144200,144201],{"class":159},"  flex-wrap",[49,144203,51968],{"class":73},[49,144205,79141],{"class":159},[49,144207,1990],{"class":73},[49,144209,144210],{"class":51,"line":2011},[49,144211,2264],{"class":73},[14,144213,70984],{},[14,144215,144216],{},".form-item .male-label {",[14,144218,144219],{},"   margin-right: 20px;",[14,144221,144222],{},"   display: inline-flex;",[14,144224,144225],{},"   align-items: center;",[14,144227,1775],{},[25,144229],{"style":126939,"src":144230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[25,144232],{"style":126939,"src":144233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[18,144235,144237],{"id":144236},"_2052-常见父项属性","20.5.2 常见父项属性",[30,144239,144240,144243,144246,144249,144252,144255,144258],{},[33,144241,144242],{},"flex-direction：设置主轴的方向",[33,144244,144245],{},"justify-content：设置主轴上的子元素排列方式",[33,144247,144248],{},"flex-wrap：设置子元素是否换行",[33,144250,144251],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[33,144253,144254],{},"align-items：设置侧轴上的子元素排列方式（单行）",[33,144256,144257],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[33,144259,144242],{},[25,144261],{"style":126939,"src":144262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[25,144264],{"style":126939,"src":144265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[30,144267,144268],{"start":63},[33,144269,144245],{},[25,144271],{"style":126939,"src":144272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,144274,144275,144278],{},[46,144276,144277],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,144280,144281],{},"跟着主轴走",[30,144283,144284],{"start":70},[33,144285,144248],{},[25,144287],{"style":126939,"src":144288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,144290,144291],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[30,144293,144294],{"start":219},[33,144295,144251],{},[25,144297],{"style":126939,"src":144298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,144300,144301],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,144303,144304],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[30,144306,144307],{"start":233},[33,144308,144254],{},[25,144310],{"style":126939,"src":144311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,144313,144314],{},"align-items与align-content之间的区别：",[14,144316,144317],{},"单找items，多找content",[25,144319],{"style":126939,"src":144320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[30,144322,144323],{"start":241},[33,144324,144257],{},[25,144326],{"style":126939,"src":144327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[18,144329,144331],{"id":144330},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[30,144333,144334],{},[33,144335,144336],{},[112,144337,144338],{},"flex 属性",[14,144340,144341],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[25,144343],{"style":126939,"src":144344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,144346,144347],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,144349,144350],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[30,144352,144353],{"start":63},[33,144354,144355,14492,144358],{},[112,144356,144357],{},"align-self",[112,144359,144360],{},"控制子项自己在侧轴上的排列方式",[25,144362],{"style":126939,"src":144363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,144365,144366],{},"单个子盒子在父盒子侧轴上的排列方式",[30,144368,144369],{"start":70},[33,144370,144371,144373],{},[112,144372,95828],{}," 属性定义项目的排列顺序",[25,144375],{"style":126939,"src":144376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[18,144378,144380],{"id":144379},"_2054-背景线性渐变","20.5.4 背景线性渐变",[25,144382],{"style":126939,"src":144383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,144385,144386],{},"必须要添加浏览器的私有前缀",[18,144388,144390],{"id":144389},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,144392,144393],{},"学到最重要的知识：",[14,144395,144396],{},"flex处理这样的布局思路",[25,144398],{"style":126939,"src":144399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[40,144401,144403],{"className":127083,"code":144402,"language":127085,"meta":27,"style":27},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[46,144404,144405,144411,144421,144431,144441],{"__ignoreMap":27},[49,144406,144407,144409],{"class":51,"line":52},[49,144408,144150],{"class":55},[49,144410,16269],{"class":73},[49,144412,144413,144415,144417,144419],{"class":51,"line":63},[49,144414,128699],{"class":159},[49,144416,51968],{"class":73},[49,144418,52008],{"class":159},[49,144420,1990],{"class":73},[49,144422,144423,144425,144427,144429],{"class":51,"line":70},[49,144424,144179],{"class":159},[49,144426,51968],{"class":73},[49,144428,52123],{"class":159},[49,144430,1990],{"class":73},[49,144432,144433,144435,144437,144439],{"class":51,"line":219},[49,144434,144190],{"class":159},[49,144436,51968],{"class":73},[49,144438,52123],{"class":159},[49,144440,1990],{"class":73},[49,144442,144443],{"class":51,"line":233},[49,144444,2264],{"class":73},[14,144446,144447],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,144449,144450],{},"使用属性选择器",[25,144452],{"style":126939,"src":144453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,144455,69420],{},[40,144457,144459],{"className":127830,"code":144458,"language":127832,"meta":27,"style":27},"\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",[46,144460,144461,144466,144480,144485,144505,144510,144529,144534,144553,144558,144577],{"__ignoreMap":27},[49,144462,144463],{"class":51,"line":52},[49,144464,144465],{"class":66},"\u003C!-- 携程网移动端案例结构 -->\n",[49,144467,144468,144470,144472,144474,144476,144478],{"class":51,"line":63},[49,144469,1739],{"class":73},[49,144471,52142],{"class":51831},[49,144473,54017],{"class":55},[49,144475,78],{"class":73},[49,144477,92854],{"class":59},[49,144479,51838],{"class":73},[49,144481,144482],{"class":51,"line":70},[49,144483,144484],{"class":66},"  \u003C!-- 搜索栏 -->\n",[49,144486,144487,144489,144491,144493,144495,144498,144501,144503],{"class":51,"line":219},[49,144488,52675],{"class":73},[49,144490,52142],{"class":51831},[49,144492,54017],{"class":55},[49,144494,78],{"class":73},[49,144496,144497],{"class":59},"\"search-index\"",[49,144499,144500],{"class":73},">...\u003C\u002F",[49,144502,52142],{"class":51831},[49,144504,51838],{"class":73},[49,144506,144507],{"class":51,"line":233},[49,144508,144509],{"class":66},"  \u003C!-- 焦点图 -->\n",[49,144511,144512,144514,144516,144518,144520,144523,144525,144527],{"class":51,"line":241},[49,144513,52675],{"class":73},[49,144515,52142],{"class":51831},[49,144517,54017],{"class":55},[49,144519,78],{"class":73},[49,144521,144522],{"class":59},"\"focus\"",[49,144524,144500],{"class":73},[49,144526,52142],{"class":51831},[49,144528,51838],{"class":73},[49,144530,144531],{"class":51,"line":1920},[49,144532,144533],{"class":66},"  \u003C!-- 主导航 -->\n",[49,144535,144536,144538,144540,144542,144544,144547,144549,144551],{"class":51,"line":2011},[49,144537,52675],{"class":73},[49,144539,52142],{"class":51831},[49,144541,54017],{"class":55},[49,144543,78],{"class":73},[49,144545,144546],{"class":59},"\"local-nav\"",[49,144548,144500],{"class":73},[49,144550,52142],{"class":51831},[49,144552,51838],{"class":73},[49,144554,144555],{"class":51,"line":2017},[49,144556,144557],{"class":66},"  \u003C!-- 子导航 -->\n",[49,144559,144560,144562,144564,144566,144568,144571,144573,144575],{"class":51,"line":2029},[49,144561,52675],{"class":73},[49,144563,52142],{"class":51831},[49,144565,54017],{"class":55},[49,144567,78],{"class":73},[49,144569,144570],{"class":59},"\"nav-common\"",[49,144572,144500],{"class":73},[49,144574,52142],{"class":51831},[49,144576,51838],{"class":73},[49,144578,144579,144581,144583],{"class":51,"line":2311},[49,144580,52316],{"class":73},[49,144582,52142],{"class":51831},[49,144584,51838],{"class":73},[14,144586,70984],{},[40,144588,144589],{"className":127083,"code":137535,"language":127085,"meta":27,"style":27},[46,144590,144591,144605,144621],{"__ignoreMap":27},[49,144592,144593,144595,144597,144599,144601,144603],{"class":51,"line":52},[49,144594,54352],{"class":51831},[49,144596,1719],{"class":73},[49,144598,103638],{"class":55},[49,144600,78],{"class":77},[49,144602,63230],{"class":59},[49,144604,137552],{"class":73},[49,144606,144607,144609,144611,144613,144615,144617,144619],{"class":51,"line":63},[49,144608,71427],{"class":159},[49,144610,51968],{"class":73},[49,144612,1047],{"class":159},[49,144614,52023],{"class":77},[49,144616,52052],{"class":159},[49,144618,130663],{"class":159},[49,144620,1990],{"class":73},[49,144622,144623],{"class":51,"line":70},[49,144624,2264],{"class":73},[14,144626,144627],{},"总代码和效果展示：",[25,144629],{"style":126939,"src":144630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144632,69420],{},[40,144634,144635],{"className":127830,"code":144458,"language":127832,"meta":27,"style":27},[46,144636,144637,144641,144655,144659,144677,144681,144699,144703,144721,144725,144743],{"__ignoreMap":27},[49,144638,144639],{"class":51,"line":52},[49,144640,144465],{"class":66},[49,144642,144643,144645,144647,144649,144651,144653],{"class":51,"line":63},[49,144644,1739],{"class":73},[49,144646,52142],{"class":51831},[49,144648,54017],{"class":55},[49,144650,78],{"class":73},[49,144652,92854],{"class":59},[49,144654,51838],{"class":73},[49,144656,144657],{"class":51,"line":70},[49,144658,144484],{"class":66},[49,144660,144661,144663,144665,144667,144669,144671,144673,144675],{"class":51,"line":219},[49,144662,52675],{"class":73},[49,144664,52142],{"class":51831},[49,144666,54017],{"class":55},[49,144668,78],{"class":73},[49,144670,144497],{"class":59},[49,144672,144500],{"class":73},[49,144674,52142],{"class":51831},[49,144676,51838],{"class":73},[49,144678,144679],{"class":51,"line":233},[49,144680,144509],{"class":66},[49,144682,144683,144685,144687,144689,144691,144693,144695,144697],{"class":51,"line":241},[49,144684,52675],{"class":73},[49,144686,52142],{"class":51831},[49,144688,54017],{"class":55},[49,144690,78],{"class":73},[49,144692,144522],{"class":59},[49,144694,144500],{"class":73},[49,144696,52142],{"class":51831},[49,144698,51838],{"class":73},[49,144700,144701],{"class":51,"line":1920},[49,144702,144533],{"class":66},[49,144704,144705,144707,144709,144711,144713,144715,144717,144719],{"class":51,"line":2011},[49,144706,52675],{"class":73},[49,144708,52142],{"class":51831},[49,144710,54017],{"class":55},[49,144712,78],{"class":73},[49,144714,144546],{"class":59},[49,144716,144500],{"class":73},[49,144718,52142],{"class":51831},[49,144720,51838],{"class":73},[49,144722,144723],{"class":51,"line":2017},[49,144724,144557],{"class":66},[49,144726,144727,144729,144731,144733,144735,144737,144739,144741],{"class":51,"line":2029},[49,144728,52675],{"class":73},[49,144730,52142],{"class":51831},[49,144732,54017],{"class":55},[49,144734,78],{"class":73},[49,144736,144570],{"class":59},[49,144738,144500],{"class":73},[49,144740,52142],{"class":51831},[49,144742,51838],{"class":73},[49,144744,144745,144747,144749],{"class":51,"line":2311},[49,144746,52316],{"class":73},[49,144748,52142],{"class":51831},[49,144750,51838],{"class":73},[14,144752,70984],{},[40,144754,144755],{"className":127830,"code":131187,"language":127832,"meta":27,"style":27},[46,144756,144757,144761,144775,144779],{"__ignoreMap":27},[49,144758,144759],{"class":51,"line":52},[49,144760,131194],{"class":66},[49,144762,144763,144765,144767,144769,144771,144773],{"class":51,"line":63},[49,144764,1739],{"class":73},[49,144766,52142],{"class":51831},[49,144768,54017],{"class":55},[49,144770,78],{"class":73},[49,144772,131207],{"class":59},[49,144774,51838],{"class":73},[49,144776,144777],{"class":51,"line":70},[49,144778,131214],{"class":73},[49,144780,144781,144783,144785],{"class":51,"line":219},[49,144782,52316],{"class":73},[49,144784,52142],{"class":51831},[49,144786,51838],{"class":73},[757,144788,138484],{},{"title":27,"searchDepth":63,"depth":63,"links":144790},[144791,144792,144796,144797,144798],{"id":143935,"depth":63,"text":143936},{"id":143967,"depth":63,"text":143968,"children":144793},[144794,144795],{"id":143971,"depth":70,"text":143972},{"id":143988,"depth":70,"text":143989},{"id":144007,"depth":63,"text":144008},{"id":144014,"depth":63,"text":144015},{"id":144101,"depth":63,"text":144102,"children":144799},[144800,144801,144802,144803,144804],{"id":144108,"depth":70,"text":144109},{"id":144236,"depth":70,"text":144237},{"id":144330,"depth":70,"text":144331},{"id":144379,"depth":70,"text":144380},{"id":144389,"depth":70,"text":144390},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143927,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144811,"title":144812,"body":144813,"description":24072,"extension":766,"meta":146040,"navigation":398,"path":146041,"seo":146042,"stem":146043,"__hash__":146044},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144814,"toc":146018},[144815,144818,144822,144826,144829,144832,144836,144841,144844,144847,144850,144853,144856,144913,144916,144921,144924,144927,144931,144942,144946,144949,144952,144959,144964,144968,144971,144977,144980,144984,144987,144994,144997,145000,145007,145010,145017,145020,145023,145030,145033,145036,145038,145055,145059,145062,145065,145068,145072,145075,145078,145081,145084,145087,145090,145092,145095,145098,145160,145163,145273,145280,145286,145289,145292,145296,145299,145303,145308,145311,145318,145321,145327,145332,145335,145338,145341,145344,145347,145350,145353,145356,145412,145414,145440,145444,145447,145450,145453,145461,145464,145467,145471,145527,145530,145534,145540,145551,145554,145559,145562,145565,145571,145574,145577,145580,145583,145586,145589,145592,145595,145620,145626,145629,145632,145635,145638,145641,145644,145649,145652,145655,145658,145666,145669,145676,145679,145682,145684,145708,145710,145713,145716,145719,145722,145725,145728,145731,145765,145768,145771,145805,145812,145815,145818,145821,145824,145827,145830,145837,145840,145843,145846,145849,145856,145859,145862,145869,145872,145875,145879,145882,145885,145888,145891,145894,145897,145900,145903,145905,145929,145931,145955,145959,145970,145973,145976,145979,145982,145985,145988,145991,145994,145997,146000,146003,146006,146009,146012,146015],[10,144816,144812],{"id":144817},"_21-移动端布局实战下篇",[782,144819,144821],{"id":144820},"_211-rem适配布局","21.1 rem适配布局",[18,144823,144825],{"id":144824},"_2111-rem单位","21.1.1 rem单位",[25,144827],{"style":126939,"src":144828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144830,144831],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[18,144833,144835],{"id":144834},"_2112-媒体查询","21.1.2 媒体查询",[30,144837,144838],{},[33,144839,144840],{},"参数介绍",[25,144842],{"style":126939,"src":144843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[25,144845],{"style":126939,"src":144846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[25,144848],{"style":126939,"src":144849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[25,144851],{"style":126939,"src":144852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[25,144854],{"style":126939,"src":144855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[40,144857,144859],{"className":127083,"code":144858,"language":127085,"meta":27,"style":27},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[46,144860,144861,144866,144885,144892,144905,144909],{"__ignoreMap":27},[49,144862,144863],{"class":51,"line":52},[49,144864,144865],{"class":66},"\u002F* 媒体查询 *\u002F\n",[49,144867,144868,144871,144873,144876,144878,144881,144883],{"class":51,"line":63},[49,144869,144870],{"class":77},"@media",[49,144872,2357],{"class":73},[49,144874,144875],{"class":159},"max-width",[49,144877,51968],{"class":73},[49,144879,144880],{"class":159},"768",[49,144882,52023],{"class":77},[49,144884,13139],{"class":73},[49,144886,144887,144890],{"class":51,"line":70},[49,144888,144889],{"class":55},"  .container",[49,144891,16269],{"class":73},[49,144893,144894,144897,144899,144901,144903],{"class":51,"line":219},[49,144895,144896],{"class":159},"    width",[49,144898,51968],{"class":73},[49,144900,1140],{"class":159},[49,144902,1157],{"class":77},[49,144904,1990],{"class":73},[49,144906,144907],{"class":51,"line":233},[49,144908,127879],{"class":73},[49,144910,144911],{"class":51,"line":241},[49,144912,2264],{"class":73},[14,144914,144915],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[30,144917,144918],{"start":63},[33,144919,144920],{},"引入资源",[25,144922],{"style":126939,"src":144923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144925,144926],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[18,144928,144930],{"id":144929},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[742,144932,144933,144936,144939],{},[33,144934,144935],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[33,144937,144938],{},"媒体查询可以根据不同设备宽度来修改样式",[33,144940,144941],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[782,144943,144945],{"id":144944},"_212-less基础","21.2 Less基础",[14,144947,144948],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144950,144951],{},"Less可以解决该问题，它是css的扩展语言",[14,144953,144954,144955],{},"Less中文网址： ",[124,144956,144957],{"href":144957,"rel":144958},"http:\u002F\u002Flesscss.cn\u002F",[128],[14,144960,144961],{},[112,144962,144963],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[18,144965,144967],{"id":144966},"_2121-less安装","21.2.1 less安装",[14,144969,144970],{},"如果使用vscode，则无需进行下方安装步骤",[14,144972,144973],{},[124,144974,144975],{"href":144975,"rel":144976},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[128],[25,144978],{"style":126939,"src":144979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[18,144981,144983],{"id":144982},"_2122-less使用","21.2.2 less使用",[14,144985,144986],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[30,144988,144989],{},[33,144990,144991],{},[112,144992,144993],{},"Less 变量",[25,144995],{"style":126939,"src":144996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[25,144998],{"style":126939,"src":144999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[30,145001,145002],{"start":63},[33,145003,145004],{},[112,145005,145006],{},"Less 编译",[25,145008],{"style":126939,"src":145009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[30,145011,145012],{"start":70},[33,145013,145014],{},[112,145015,145016],{},"Less 嵌套",[25,145018],{"style":126939,"src":145019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[25,145021],{"style":126939,"src":145022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[30,145024,145025],{"start":219},[33,145026,145027],{},[112,145028,145029],{},"Less 运算",[25,145031],{"style":126939,"src":145032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,145034,145035],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,145037,870],{},[742,145039,145040,145043,145046,145049,145052],{},[33,145041,145042],{},"乘号（*）和除号（\u002F）的写法",[33,145044,145045],{},"运算符中间左右有个空格隔开 1px + 5",[33,145047,145048],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[33,145050,145051],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[33,145053,145054],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[782,145056,145058],{"id":145057},"_213-rem-适配方案","21.3 rem 适配方案",[14,145060,145061],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,145063,145064],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[25,145066],{"style":126939,"src":145067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[18,145069,145071],{"id":145070},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,145073,145074],{},"rem + 媒体查询 + less 技术",[25,145076],{"style":126939,"src":145077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,145079,145080],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,145082,145083],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[25,145085],{"style":126939,"src":145086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,145088,145089],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,145091,15330],{},[25,145093],{"style":126939,"src":145094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,145096,145097],{},"index.html:",[40,145099,145101],{"className":127083,"code":145100,"language":127085,"meta":27,"style":27},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[46,145102,145103,145108,145114,145130,145134,145140,145156],{"__ignoreMap":27},[49,145104,145105],{"class":51,"line":52},[49,145106,145107],{"class":66},"\u002F* rem 适配方案 *\u002F\n",[49,145109,145110,145112],{"class":51,"line":63},[49,145111,51166],{"class":51831},[49,145113,16269],{"class":73},[49,145115,145116,145118,145120,145123,145125,145127],{"class":51,"line":70},[49,145117,71157],{"class":159},[49,145119,51968],{"class":73},[49,145121,145122],{"class":159},"62.5",[49,145124,1157],{"class":77},[49,145126,130946],{"class":73},[49,145128,145129],{"class":66},"\u002F* 1rem = 10px *\u002F\n",[49,145131,145132],{"class":51,"line":219},[49,145133,2264],{"class":73},[49,145135,145136,145138],{"class":51,"line":233},[49,145137,130931],{"class":55},[49,145139,16269],{"class":73},[49,145141,145142,145144,145146,145148,145151,145153],{"class":51,"line":241},[49,145143,71099],{"class":159},[49,145145,51968],{"class":73},[49,145147,1275],{"class":159},[49,145149,145150],{"class":77},"rem",[49,145152,130946],{"class":73},[49,145154,145155],{"class":66},"\u002F* 100px *\u002F\n",[49,145157,145158],{"class":51,"line":1920},[49,145159,2264],{"class":73},[14,145161,145162],{},"common.less",[40,145164,145166],{"className":127083,"code":145165,"language":127085,"meta":27,"style":27},"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",[46,145167,145168,145174,145189,145193,145199,145213,145217,145221,145225,145231,145245,145249,145255,145269],{"__ignoreMap":27},[49,145169,145170,145172],{"class":51,"line":52},[49,145171,51166],{"class":51831},[49,145173,16269],{"class":73},[49,145175,145176,145178,145180,145182,145184,145186],{"class":51,"line":63},[49,145177,71157],{"class":159},[49,145179,51968],{"class":73},[49,145181,145122],{"class":159},[49,145183,1157],{"class":77},[49,145185,26756],{"class":73},[49,145187,145188],{"class":66},"\u002F* 10px *\u002F\n",[49,145190,145191],{"class":51,"line":70},[49,145192,2264],{"class":73},[49,145194,145195,145197],{"class":51,"line":219},[49,145196,52142],{"class":51831},[49,145198,16269],{"class":73},[49,145200,145201,145203,145205,145207,145209,145211],{"class":51,"line":233},[49,145202,71099],{"class":159},[49,145204,51968],{"class":73},[49,145206,1275],{"class":159},[49,145208,145150],{"class":77},[49,145210,26756],{"class":73},[49,145212,145155],{"class":66},[49,145214,145215],{"class":51,"line":241},[49,145216,2264],{"class":73},[49,145218,145219],{"class":51,"line":1920},[49,145220,136544],{"class":73},[49,145222,145223],{"class":51,"line":2011},[49,145224,145107],{"class":66},[49,145226,145227,145229],{"class":51,"line":2017},[49,145228,51166],{"class":51831},[49,145230,16269],{"class":73},[49,145232,145233,145235,145237,145239,145241,145243],{"class":51,"line":2029},[49,145234,71157],{"class":159},[49,145236,51968],{"class":73},[49,145238,145122],{"class":159},[49,145240,1157],{"class":77},[49,145242,130946],{"class":73},[49,145244,145129],{"class":66},[49,145246,145247],{"class":51,"line":2311},[49,145248,2264],{"class":73},[49,145250,145251,145253],{"class":51,"line":2316},[49,145252,130931],{"class":55},[49,145254,16269],{"class":73},[49,145256,145257,145259,145261,145263,145265,145267],{"class":51,"line":2322},[49,145258,71099],{"class":159},[49,145260,51968],{"class":73},[49,145262,1275],{"class":159},[49,145264,145150],{"class":77},[49,145266,130946],{"class":73},[49,145268,145155],{"class":66},[49,145270,145271],{"class":51,"line":2327},[49,145272,2264],{"class":73},[14,145274,145275,145276,145279],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24249,145277,145278],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[40,145281,145284],{"className":145282,"code":145283,"language":5884},[5882],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[46,145285,145283],{"__ignoreMap":27},[14,145287,145288],{},"less保存时会自动变成.css文件",[14,145290,145291],{},"好好搞懂上述代码写法",[18,145293,145295],{"id":145294},"_2132-样式导入样式","21.3.2 样式导入样式",[25,145297],{"style":126939,"src":145298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[18,145300,145302],{"id":145301},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[30,145304,145305],{},[33,145306,145307],{},"准备工作",[25,145309],{"style":126939,"src":145310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,145312,145313,145314],{},"github地址：",[124,145315,145316],{"href":145316,"rel":145317},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[128],[14,145319,145320],{},"下载之后，将index.js文件拖到项目中就可以了",[14,145322,145323,145324],{},"js文件引入到index.html中使用的是",[46,145325,145326],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[30,145328,145329],{"start":63},[33,145330,145331],{},"vscode插件",[25,145333],{"style":126939,"src":145334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,145336,145337],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,145339,145340],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[25,145342],{"style":126939,"src":145343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,145345,145346],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[25,145348],{"style":126939,"src":145349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,145351,145352],{},"修改成75就可以，alt+z为快捷键",[14,145354,145355],{},"index.css：",[40,145357,145358],{"className":127083,"code":145100,"language":127085,"meta":27,"style":27},[46,145359,145360,145364,145370,145384,145388,145394,145408],{"__ignoreMap":27},[49,145361,145362],{"class":51,"line":52},[49,145363,145107],{"class":66},[49,145365,145366,145368],{"class":51,"line":63},[49,145367,51166],{"class":51831},[49,145369,16269],{"class":73},[49,145371,145372,145374,145376,145378,145380,145382],{"class":51,"line":70},[49,145373,71157],{"class":159},[49,145375,51968],{"class":73},[49,145377,145122],{"class":159},[49,145379,1157],{"class":77},[49,145381,130946],{"class":73},[49,145383,145129],{"class":66},[49,145385,145386],{"class":51,"line":219},[49,145387,2264],{"class":73},[49,145389,145390,145392],{"class":51,"line":233},[49,145391,130931],{"class":55},[49,145393,16269],{"class":73},[49,145395,145396,145398,145400,145402,145404,145406],{"class":51,"line":241},[49,145397,71099],{"class":159},[49,145399,51968],{"class":73},[49,145401,1275],{"class":159},[49,145403,145150],{"class":77},[49,145405,130946],{"class":73},[49,145407,145155],{"class":66},[49,145409,145410],{"class":51,"line":1920},[49,145411,2264],{"class":73},[14,145413,145097],{},[40,145415,145416],{"className":127083,"code":127487,"language":127085,"meta":27,"style":27},[46,145417,145418,145424,145436],{"__ignoreMap":27},[49,145419,145420,145422],{"class":51,"line":52},[49,145421,52331],{"class":51831},[49,145423,16269],{"class":73},[49,145425,145426,145428,145430,145432,145434],{"class":51,"line":63},[49,145427,71157],{"class":159},[49,145429,51968],{"class":73},[49,145431,1430],{"class":159},[49,145433,52023],{"class":77},[49,145435,1990],{"class":73},[49,145437,145438],{"class":51,"line":70},[49,145439,2264],{"class":73},[782,145441,145443],{"id":145442},"_214-响应式开发","21.4 响应式开发",[14,145445,145446],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[25,145448],{"style":126939,"src":145449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,145451,145452],{},"做法：",[742,145454,145455,145458],{},[33,145456,145457],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[33,145459,145460],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[25,145462],{"style":126939,"src":145463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,145465,145466],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[18,145468,145470],{"id":145469},"_2141-简单代码示范","21.4.1 简单代码示范",[40,145472,145473],{"className":127083,"code":145100,"language":127085,"meta":27,"style":27},[46,145474,145475,145479,145485,145499,145503,145509,145523],{"__ignoreMap":27},[49,145476,145477],{"class":51,"line":52},[49,145478,145107],{"class":66},[49,145480,145481,145483],{"class":51,"line":63},[49,145482,51166],{"class":51831},[49,145484,16269],{"class":73},[49,145486,145487,145489,145491,145493,145495,145497],{"class":51,"line":70},[49,145488,71157],{"class":159},[49,145490,51968],{"class":73},[49,145492,145122],{"class":159},[49,145494,1157],{"class":77},[49,145496,130946],{"class":73},[49,145498,145129],{"class":66},[49,145500,145501],{"class":51,"line":219},[49,145502,2264],{"class":73},[49,145504,145505,145507],{"class":51,"line":233},[49,145506,130931],{"class":55},[49,145508,16269],{"class":73},[49,145510,145511,145513,145515,145517,145519,145521],{"class":51,"line":241},[49,145512,71099],{"class":159},[49,145514,51968],{"class":73},[49,145516,1275],{"class":159},[49,145518,145150],{"class":77},[49,145520,130946],{"class":73},[49,145522,145155],{"class":66},[49,145524,145525],{"class":51,"line":1920},[49,145526,2264],{"class":73},[14,145528,145529],{},"父盒子一般命名为container",[18,145531,145533],{"id":145532},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145535,145536,145537],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[112,145538,145539],{},"使得 Web 开发更加快捷",[742,145541,145542],{},[33,145543,145544,145545],{},"官网：",[112,145546,145547],{},[124,145548,145549],{"href":145549,"rel":145550},"http:\u002F\u002Fgetbootstrap.com\u002F",[128],[14,145552,145553],{},"可以直接去官网拿现成的东西",[30,145555,145556],{},[33,145557,145558],{},"Bootstrap的使用",[14,145560,145561],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145563,145564],{},"Bootstrap 使用四步曲：",[14,145566,145567,145570],{},[112,145568,145569],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[25,145572],{"style":126939,"src":145573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145575,145576],{},"打开Bootstrap官网，然后下载",[25,145578],{"style":126939,"src":145579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[25,145581],{"style":126939,"src":145582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145584,145585],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145587,145588],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145590,145591],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[25,145593],{"style":126939,"src":145594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[40,145596,145598],{"className":127083,"code":145597,"language":127085,"meta":27,"style":27},".center {\n  color: red;\n}\n",[46,145599,145600,145606,145616],{"__ignoreMap":27},[49,145601,145602,145604],{"class":51,"line":52},[49,145603,127374],{"class":55},[49,145605,16269],{"class":73},[49,145607,145608,145610,145612,145614],{"class":51,"line":63},[49,145609,71436],{"class":159},[49,145611,51968],{"class":73},[49,145613,57952],{"class":159},[49,145615,1990],{"class":73},[49,145617,145618],{"class":51,"line":70},[49,145619,2264],{"class":73},[14,145621,145622,145625],{},[46,145623,145624],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[25,145627],{"style":126939,"src":145628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[25,145630],{"style":126939,"src":145631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[25,145633],{"style":126939,"src":145634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145636,145637],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[25,145639],{"style":126939,"src":145640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145642,145643],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[30,145645,145646],{"start":63},[33,145647,145648],{},"布局容器",[25,145650],{"style":126939,"src":145651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145653,145654],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145656,145657],{},"container-fluid用于移动式布局比较方便",[30,145659,145660],{"start":70},[33,145661,145662,145663],{},"bootstrap ",[112,145664,145665],{},"栅格系统原理",[25,145667],{"style":126939,"src":145668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[30,145670,145671],{"start":219},[33,145672,145673],{},[112,145674,145675],{},"栅格选项参数",[25,145677],{"style":126939,"src":145678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145680,145681],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145683,15330],{},[40,145685,145686],{"className":127083,"code":145597,"language":127085,"meta":27,"style":27},[46,145687,145688,145694,145704],{"__ignoreMap":27},[49,145689,145690,145692],{"class":51,"line":52},[49,145691,127374],{"class":55},[49,145693,16269],{"class":73},[49,145695,145696,145698,145700,145702],{"class":51,"line":63},[49,145697,71436],{"class":159},[49,145699,51968],{"class":73},[49,145701,57952],{"class":159},[49,145703,1990],{"class":73},[49,145705,145706],{"class":51,"line":70},[49,145707,2264],{"class":73},[14,145709,136126],{},[25,145711],{"style":126939,"src":145712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145714,145715],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145717,145718],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145720,145721],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145723,145724],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145726,145727],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145729,145730],{},"汇总展示说明：",[40,145732,145733],{"className":127830,"code":131187,"language":127832,"meta":27,"style":27},[46,145734,145735,145739,145753,145757],{"__ignoreMap":27},[49,145736,145737],{"class":51,"line":52},[49,145738,131194],{"class":66},[49,145740,145741,145743,145745,145747,145749,145751],{"class":51,"line":63},[49,145742,1739],{"class":73},[49,145744,52142],{"class":51831},[49,145746,54017],{"class":55},[49,145748,78],{"class":73},[49,145750,131207],{"class":59},[49,145752,51838],{"class":73},[49,145754,145755],{"class":51,"line":70},[49,145756,131214],{"class":73},[49,145758,145759,145761,145763],{"class":51,"line":219},[49,145760,52316],{"class":73},[49,145762,52142],{"class":51831},[49,145764,51838],{"class":73},[25,145766],{"style":126939,"src":145767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145769,145770],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[40,145772,145773],{"className":127830,"code":131187,"language":127832,"meta":27,"style":27},[46,145774,145775,145779,145793,145797],{"__ignoreMap":27},[49,145776,145777],{"class":51,"line":52},[49,145778,131194],{"class":66},[49,145780,145781,145783,145785,145787,145789,145791],{"class":51,"line":63},[49,145782,1739],{"class":73},[49,145784,52142],{"class":51831},[49,145786,54017],{"class":55},[49,145788,78],{"class":73},[49,145790,131207],{"class":59},[49,145792,51838],{"class":73},[49,145794,145795],{"class":51,"line":70},[49,145796,131214],{"class":73},[49,145798,145799,145801,145803],{"class":51,"line":219},[49,145800,52316],{"class":73},[49,145802,52142],{"class":51831},[49,145804,51838],{"class":73},[30,145806,145807],{"start":233},[33,145808,145809],{},[112,145810,145811],{},"列嵌套",[25,145813],{"style":126939,"src":145814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145816,145817],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145819,145820],{},"没加row内部这样：",[25,145822],{"style":126939,"src":145823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145825,145826],{},"加上row之后内部为：",[25,145828],{"style":126939,"src":145829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[30,145831,145832],{"start":241},[33,145833,145834],{},[112,145835,145836],{},"列偏移",[25,145838],{"style":126939,"src":145839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145841,145842],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145844,145845],{},"要加偏移量，即偏移份数",[14,145847,145848],{},"偏移的份数=12-两个盒子的份数",[30,145850,145851],{"start":1920},[33,145852,145853],{},[112,145854,145855],{},"列排序",[25,145857],{"style":126939,"src":145858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145860,145861],{},"pull拉左；push推右",[30,145863,145864],{"start":2011},[33,145865,145866],{},[112,145867,145868],{},"响应式工具",[25,145870],{"style":126939,"src":145871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145873,145874],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[18,145876,145878],{"id":145877},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145880,145881],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145883,145884],{},"ul {",[14,145886,145887],{},"list-style: none;",[14,145889,145890],{},"margin:0;",[14,145892,145893],{},"padding:0; }",[25,145895],{"style":126939,"src":145896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[25,145898],{"style":126939,"src":145899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145901,145902],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145904,69420],{},[40,145906,145907],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},[46,145908,145909,145915,145925],{"__ignoreMap":27},[49,145910,145911,145913],{"class":51,"line":52},[49,145912,130931],{"class":55},[49,145914,16269],{"class":73},[49,145916,145917,145919,145921,145923],{"class":51,"line":63},[49,145918,131563],{"class":159},[49,145920,51968],{"class":73},[49,145922,621],{"class":159},[49,145924,1990],{"class":73},[49,145926,145927],{"class":51,"line":70},[49,145928,2264],{"class":73},[14,145930,70984],{},[40,145932,145933],{"className":127083,"code":139753,"language":127085,"meta":27,"style":27},[46,145934,145935,145941,145951],{"__ignoreMap":27},[49,145936,145937,145939],{"class":51,"line":52},[49,145938,130931],{"class":55},[49,145940,16269],{"class":73},[49,145942,145943,145945,145947,145949],{"class":51,"line":63},[49,145944,131563],{"class":159},[49,145946,51968],{"class":73},[49,145948,621],{"class":159},[49,145950,1990],{"class":73},[49,145952,145953],{"class":51,"line":70},[49,145954,2264],{"class":73},[782,145956,145958],{"id":145957},"_215-swiper-插件使用","21.5 swiper 插件使用",[742,145960,145961,145964,145967],{},[33,145962,145963],{},"下载需要的css和js文件html页面中 引入相关文件",[33,145965,145966],{},"官网找到类似案例，复制html结构，css样式 js 语法",[33,145968,145969],{},"根据需求定制修改模块",[25,145971],{"style":126939,"src":145972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145974,145975],{},"解压后将这两部分放到项目中",[25,145977],{"style":126939,"src":145978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145980,145981],{},"这个插件可以帮助我们实现轮播图效果",[14,145983,145984],{},"用法：",[25,145986],{"style":126939,"src":145987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145989,145990],{},"找到自己喜欢的",[25,145992],{"style":126939,"src":145993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145995,145996],{},"右键，查看网页源代码",[25,145998],{"style":126939,"src":145999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,146001,146002],{},"复制人家的结构内容",[14,146004,146005],{},"然后去看API文档：",[25,146007],{"style":126939,"src":146008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,146010,146011],{},"可以看看如何修改样式",[14,146013,146014],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[757,146016,146017],{},"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":27,"searchDepth":63,"depth":63,"links":146019},[146020,146025,146029,146034,146039],{"id":144820,"depth":63,"text":144821,"children":146021},[146022,146023,146024],{"id":144824,"depth":70,"text":144825},{"id":144834,"depth":70,"text":144835},{"id":144929,"depth":70,"text":144930},{"id":144944,"depth":63,"text":144945,"children":146026},[146027,146028],{"id":144966,"depth":70,"text":144967},{"id":144982,"depth":70,"text":144983},{"id":145057,"depth":63,"text":145058,"children":146030},[146031,146032,146033],{"id":145070,"depth":70,"text":145071},{"id":145294,"depth":70,"text":145295},{"id":145301,"depth":70,"text":145302},{"id":145442,"depth":63,"text":145443,"children":146035},[146036,146037,146038],{"id":145469,"depth":70,"text":145470},{"id":145532,"depth":70,"text":145533},{"id":145877,"depth":70,"text":145878},{"id":145957,"depth":63,"text":145958},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144812,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146046,"title":146047,"body":146048,"description":24072,"extension":766,"meta":146268,"navigation":398,"path":146269,"seo":146270,"stem":146271,"__hash__":146272},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146049,"toc":146264},[146050,146053,146057,146060,146075,146080,146083,146088,146123,146128,146140,146145,146158,146163,146180,146185,146205,146210,146228,146231,146234,146237,146240,146244,146247,146250,146253,146256,146259,146262],[10,146051,146047],{"id":146052},"_22-代码提交与新型相对单位",[782,146054,146056],{"id":146055},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,146058,146059],{},"法1：",[30,146061,146062,146069,146072],{},[33,146063,146064,146065],{},"登录网站注册：",[124,146066,146067],{"href":146067,"rel":146068},"https:\u002F\u002Fgitee.com\u002F",[128],[33,146070,146071],{},"码云创建新的仓库",[33,146073,146074],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[742,146076,146077],{},[33,146078,146079],{},"在网站根目录右键-- Git Bash Here",[25,146081],{"style":126939,"src":146082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[742,146084,146085],{},[33,146086,146087],{},"如果是第一次利用git提交，请配置好全局选项",[40,146089,146091],{"className":117827,"code":146090,"language":117829,"meta":27,"style":27},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[46,146092,146093,146109],{"__ignoreMap":27},[49,146094,146095,146098,146100,146103,146106],{"class":51,"line":52},[49,146096,146097],{"class":55},"git",[49,146099,120250],{"class":59},[49,146101,146102],{"class":159}," --global",[49,146104,146105],{"class":59}," user.name",[49,146107,146108],{"class":59}," \"你的名字\"\n",[49,146110,146111,146113,146115,146117,146120],{"class":51,"line":63},[49,146112,146097],{"class":55},[49,146114,120250],{"class":59},[49,146116,146102],{"class":159},[49,146118,146119],{"class":59}," user.email",[49,146121,146122],{"class":59}," \"你的邮箱\"\n",[742,146124,146125],{},[33,146126,146127],{},"初始化仓库",[40,146129,146131],{"className":117827,"code":146130,"language":117829,"meta":27,"style":27},"git init\n",[46,146132,146133],{"__ignoreMap":27},[49,146134,146135,146137],{"class":51,"line":52},[49,146136,146097],{"class":55},[49,146138,146139],{"class":59}," init\n",[742,146141,146142],{},[33,146143,146144],{},"把本地文件放到暂存区",[40,146146,146148],{"className":117827,"code":146147,"language":117829,"meta":27,"style":27},"git add .\n",[46,146149,146150],{"__ignoreMap":27},[49,146151,146152,146154,146156],{"class":51,"line":52},[49,146153,146097],{"class":55},[49,146155,5906],{"class":59},[49,146157,29272],{"class":59},[742,146159,146160],{},[33,146161,146162],{},"把本地文件放到本地仓库里面",[40,146164,146166],{"className":117827,"code":146165,"language":117829,"meta":27,"style":27},"git commit -m \"first commit\"\n",[46,146167,146168],{"__ignoreMap":27},[49,146169,146170,146172,146175,146177],{"class":51,"line":52},[49,146171,146097],{"class":55},[49,146173,146174],{"class":59}," commit",[49,146176,101413],{"class":159},[49,146178,146179],{"class":59}," \"first commit\"\n",[742,146181,146182],{},[33,146183,146184],{},"链接远程仓库",[40,146186,146188],{"className":117827,"code":146187,"language":117829,"meta":27,"style":27},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[46,146189,146190],{"__ignoreMap":27},[49,146191,146192,146194,146197,146199,146202],{"class":51,"line":52},[49,146193,146097],{"class":55},[49,146195,146196],{"class":59}," remote",[49,146198,5906],{"class":59},[49,146200,146201],{"class":59}," origin",[49,146203,146204],{"class":59}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[742,146206,146207],{},[33,146208,146209],{},"把本地仓库的文件推送到远程仓库 push",[40,146211,146213],{"className":117827,"code":146212,"language":117829,"meta":27,"style":27},"git push -u origin master\n",[46,146214,146215],{"__ignoreMap":27},[49,146216,146217,146219,146221,146223,146225],{"class":51,"line":52},[49,146218,146097],{"class":55},[49,146220,29547],{"class":59},[49,146222,28821],{"class":159},[49,146224,146201],{"class":59},[49,146226,146227],{"class":59}," master\n",[25,146229],{"style":126939,"src":146230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,146232,146233],{},"上方方法暂未实现，后边学完git后在整",[14,146235,146236],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[25,146238],{"style":126939,"src":146239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[782,146241,146243],{"id":146242},"_222-新型相对单位","22.2 新型相对单位",[25,146245],{"style":126939,"src":146246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[25,146248],{"style":126939,"src":146249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,146251,146252],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,146254,146255],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[25,146257],{"style":126939,"src":146258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,146260,146261],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[757,146263,24649],{},{"title":27,"searchDepth":63,"depth":63,"links":146265},[146266,146267],{"id":146055,"depth":63,"text":146056},{"id":146242,"depth":63,"text":146243},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146047,"description":24072},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146274,"title":146275,"body":146276,"description":146280,"extension":766,"meta":146281,"navigation":398,"path":146282,"seo":146283,"stem":146284,"__hash__":146285},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146277,"toc":146278},[],{"title":27,"searchDepth":63,"depth":63,"links":146279},[],"自己正经开始学编程的第一门语言！",{"category":93370},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146275,"description":146280},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146287,"title":146288,"body":146289,"description":24072,"extension":766,"meta":147436,"navigation":398,"path":147437,"seo":147438,"stem":147439,"__hash__":147440},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146290,"toc":147412},[146291,146294,146298,146301,146304,146329,146332,146338,146342,146345,146372,146375,146415,146418,146430,146433,146439,146443,146447,146474,146491,146498,146502,146505,146531,146534,146538,146541,146581,146584,146601,146607,146611,146616,146660,146663,146681,146684,146752,146756,146763,146766,146781,146784,146793,146796,146807,146810,146819,146822,146839,146842,146857,146861,146865,146868,146870,146890,146894,146897,146900,146911,146914,146920,146924,146930,146957,146960,146972,146975,146986,146989,146995,146999,147005,147055,147058,147100,147103,147136,147139,147173,147177,147180,147200,147203,147239,147242,147255,147259,147263,147269,147272,147285,147289,147292,147298,147301,147305,147308,147311,147360,147364,147380,147386,147393,147399,147409],[10,146292,146288],{"id":146293},"_1-python环境与第一个程序",[782,146295,146297],{"id":146296},"_11-什么是python","1.1 什么是Python",[14,146299,146300],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,146302,146303],{},"理解 Python 时抓住三个关键词：",[30,146305,146306,146309,146312],{},[33,146307,146308],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[33,146310,146311],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[33,146313,146314,146315,1042,146318,1042,146321,1042,146324,1042,146326,28916],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[46,146316,146317],{},"os",[46,146319,146320],{},"sys",[46,146322,146323],{},"json",[46,146325,58391],{},[46,146327,146328],{},"datetime",[14,146330,146331],{},"Python 程序的运行链路：",[40,146333,146336],{"className":146334,"code":146335,"language":5884,"meta":27},[5882],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[46,146337,146335],{"__ignoreMap":27},[782,146339,146341],{"id":146340},"_12-python解释器","1.2 Python解释器",[14,146343,146344],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[40,146346,146348],{"className":42,"code":146347,"language":44,"meta":27,"style":27},"python --version\npython3 --version\npython\npython3\n",[46,146349,146350,146356,146362,146367],{"__ignoreMap":27},[49,146351,146352,146354],{"class":51,"line":52},[49,146353,30911],{"class":55},[49,146355,26976],{"class":159},[49,146357,146358,146360],{"class":51,"line":63},[49,146359,101410],{"class":55},[49,146361,26976],{"class":159},[49,146363,146364],{"class":51,"line":70},[49,146365,146366],{"class":55},"python\n",[49,146368,146369],{"class":51,"line":219},[49,146370,146371],{"class":55},"python3\n",[14,146373,146374],{},"进入交互模式后，可以直接输入表达式：",[40,146376,146378],{"className":30909,"code":146377,"language":30911,"meta":27,"style":27},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[46,146379,146380,146391,146396,146410],{"__ignoreMap":27},[49,146381,146382,146385,146387,146389],{"class":51,"line":52},[49,146383,146384],{"class":77},">>>",[49,146386,25807],{"class":159},[49,146388,46097],{"class":77},[49,146390,48254],{"class":159},[49,146392,146393],{"class":51,"line":63},[49,146394,146395],{"class":159},"3\n",[49,146397,146398,146400,146403,146405,146408],{"class":51,"line":70},[49,146399,146384],{"class":77},[49,146401,146402],{"class":159}," print",[49,146404,841],{"class":73},[49,146406,146407],{"class":59},"\"hello python\"",[49,146409,847],{"class":73},[49,146411,146412],{"class":51,"line":219},[49,146413,146414],{"class":73},"hello python\n",[14,146416,146417],{},"退出交互模式：",[40,146419,146421],{"className":30909,"code":146420,"language":30911,"meta":27,"style":27},"exit()\n",[46,146422,146423],{"__ignoreMap":27},[49,146424,146425,146428],{"class":51,"line":52},[49,146426,146427],{"class":159},"exit",[49,146429,2674],{"class":73},[14,146431,146432],{},"或使用快捷键：",[40,146434,146437],{"className":146435,"code":146436,"language":5884,"meta":27},[5882],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[46,146438,146436],{"__ignoreMap":27},[782,146440,146442],{"id":146441},"_13-安装python","1.3 安装Python",[18,146444,146446],{"id":146445},"_131-windows安装","1.3.1 Windows安装",[30,146448,146449,146456,146459,146465,146471],{},[33,146450,146451,146452],{},"打开 Python 官网：",[124,146453,146454],{"href":146454,"rel":146455},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[128],[33,146457,146458],{},"下载 Windows Installer。",[33,146460,146461,146462,28916],{},"安装时勾选 ",[46,146463,146464],{},"Add Python to PATH",[33,146466,146467,146468,28916],{},"点击 ",[46,146469,146470],{},"Install Now",[33,146472,146473],{},"安装完成后打开命令提示符验证：",[40,146475,146477],{"className":42,"code":146476,"language":44,"meta":27,"style":27},"python --version\npip --version\n",[46,146478,146479,146485],{"__ignoreMap":27},[49,146480,146481,146483],{"class":51,"line":52},[49,146482,30911],{"class":55},[49,146484,26976],{"class":159},[49,146486,146487,146489],{"class":51,"line":63},[49,146488,24524],{"class":55},[49,146490,26976],{"class":159},[14,146492,146493,146494,146497],{},"如果提示 ",[46,146495,146496],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[18,146499,146501],{"id":146500},"_132-macos安装","1.3.2 macOS安装",[14,146503,146504],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[40,146506,146508],{"className":42,"code":146507,"language":44,"meta":27,"style":27},"brew install python\npython3 --version\npip3 --version\n",[46,146509,146510,146519,146525],{"__ignoreMap":27},[49,146511,146512,146515,146517],{"class":51,"line":52},[49,146513,146514],{"class":55},"brew",[49,146516,269],{"class":59},[49,146518,124849],{"class":59},[49,146520,146521,146523],{"class":51,"line":63},[49,146522,101410],{"class":55},[49,146524,26976],{"class":159},[49,146526,146527,146529],{"class":51,"line":70},[49,146528,120231],{"class":55},[49,146530,26976],{"class":159},[14,146532,146533],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[18,146535,146537],{"id":146536},"_133-linux安装","1.3.3 Linux安装",[14,146539,146540],{},"Ubuntu\u002FDebian：",[40,146542,146544],{"className":42,"code":146543,"language":44,"meta":27,"style":27},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[46,146545,146546,146554,146569,146575],{"__ignoreMap":27},[49,146547,146548,146550,146552],{"class":51,"line":52},[49,146549,264],{"class":55},[49,146551,117848],{"class":59},[49,146553,249],{"class":59},[49,146555,146556,146558,146560,146562,146564,146566],{"class":51,"line":63},[49,146557,264],{"class":55},[49,146559,117848],{"class":59},[49,146561,269],{"class":59},[49,146563,104934],{"class":59},[49,146565,101329],{"class":59},[49,146567,146568],{"class":59}," python3-venv\n",[49,146570,146571,146573],{"class":51,"line":70},[49,146572,101410],{"class":55},[49,146574,26976],{"class":159},[49,146576,146577,146579],{"class":51,"line":219},[49,146578,120231],{"class":55},[49,146580,26976],{"class":159},[14,146582,146583],{},"Fedora：",[40,146585,146587],{"className":42,"code":146586,"language":44,"meta":27,"style":27},"sudo dnf install python3 python3-pip\n",[46,146588,146589],{"__ignoreMap":27},[49,146590,146591,146593,146595,146597,146599],{"class":51,"line":52},[49,146592,264],{"class":55},[49,146594,384],{"class":59},[49,146596,269],{"class":59},[49,146598,104934],{"class":59},[49,146600,120296],{"class":59},[14,146602,146603,146604,146606],{},"Linux 上通常使用 ",[46,146605,101410],{}," 命令，避免和系统旧版本 Python 冲突。",[782,146608,146610],{"id":146609},"_14-pip包管理器","1.4 pip包管理器",[14,146612,146613,146615],{},[46,146614,24524],{}," 用来安装第三方库。",[40,146617,146619],{"className":42,"code":146618,"language":44,"meta":27,"style":27},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[46,146620,146621,146630,146639,146647,146653],{"__ignoreMap":27},[49,146622,146623,146625,146627],{"class":51,"line":52},[49,146624,24524],{"class":55},[49,146626,269],{"class":59},[49,146628,146629],{"class":59}," requests\n",[49,146631,146632,146634,146637],{"class":51,"line":63},[49,146633,24524],{"class":55},[49,146635,146636],{"class":59}," uninstall",[49,146638,146629],{"class":59},[49,146640,146641,146643,146645],{"class":51,"line":70},[49,146642,24524],{"class":55},[49,146644,118105],{"class":59},[49,146646,146629],{"class":59},[49,146648,146649,146651],{"class":51,"line":219},[49,146650,24524],{"class":55},[49,146652,119486],{"class":59},[49,146654,146655,146657],{"class":51,"line":233},[49,146656,24524],{"class":55},[49,146658,146659],{"class":59}," freeze\n",[14,146661,146662],{},"国内网络较慢时可以临时使用镜像：",[40,146664,146666],{"className":42,"code":146665,"language":44,"meta":27,"style":27},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[46,146667,146668],{"__ignoreMap":27},[49,146669,146670,146672,146674,146677,146679],{"class":51,"line":52},[49,146671,24524],{"class":55},[49,146673,269],{"class":59},[49,146675,146676],{"class":59}," requests",[49,146678,27108],{"class":159},[49,146680,120259],{"class":59},[14,146682,146683],{},"常见第三方库：",[610,146685,146686,146695],{},[613,146687,146688],{},[616,146689,146690,146693],{},[619,146691,146692],{},"库",[619,146694,103227],{},[633,146696,146697,146705,146712,146720,146728,146736,146744],{},[616,146698,146699,146702],{},[638,146700,146701],{},"requests",[638,146703,146704],{},"网络请求",[616,146706,146707,146709],{},[638,146708,101157],{},[638,146710,146711],{},"数值计算",[616,146713,146714,146717],{},[638,146715,146716],{},"pandas",[638,146718,146719],{},"表格数据处理",[616,146721,146722,146725],{},[638,146723,146724],{},"matplotlib",[638,146726,146727],{},"绘图",[616,146729,146730,146733],{},[638,146731,146732],{},"pyecharts",[638,146734,146735],{},"ECharts 图表",[616,146737,146738,146741],{},[638,146739,146740],{},"flask",[638,146742,146743],{},"Web 后端",[616,146745,146746,146749],{},[638,146747,146748],{},"pytest",[638,146750,146751],{},"自动化测试",[782,146753,146755],{"id":146754},"_15-虚拟环境","1.5 虚拟环境",[14,146757,146758,146759,146762],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[46,146760,146761],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146764,146765],{},"创建虚拟环境：",[40,146767,146769],{"className":42,"code":146768,"language":44,"meta":27,"style":27},"python -m venv .venv\n",[46,146770,146771],{"__ignoreMap":27},[49,146772,146773,146775,146777,146779],{"class":51,"line":52},[49,146774,30911],{"class":55},[49,146776,101413],{"class":159},[49,146778,101416],{"class":59},[49,146780,101419],{"class":59},[14,146782,146783],{},"Windows 激活：",[40,146785,146787],{"className":42,"code":146786,"language":44,"meta":27,"style":27},".venv\\Scripts\\activate\n",[46,146788,146789],{"__ignoreMap":27},[49,146790,146791],{"class":51,"line":52},[49,146792,146786],{"class":55},[14,146794,146795],{},"macOS\u002FLinux 激活：",[40,146797,146799],{"className":42,"code":146798,"language":44,"meta":27,"style":27},"source .venv\u002Fbin\u002Factivate\n",[46,146800,146801],{"__ignoreMap":27},[49,146802,146803,146805],{"class":51,"line":52},[49,146804,101424],{"class":159},[49,146806,101427],{"class":59},[14,146808,146809],{},"退出虚拟环境：",[40,146811,146813],{"className":42,"code":146812,"language":44,"meta":27,"style":27},"deactivate\n",[46,146814,146815],{"__ignoreMap":27},[49,146816,146817],{"class":51,"line":52},[49,146818,146812],{"class":55},[14,146820,146821],{},"保存依赖：",[40,146823,146825],{"className":42,"code":146824,"language":44,"meta":27,"style":27},"pip freeze > requirements.txt\n",[46,146826,146827],{"__ignoreMap":27},[49,146828,146829,146831,146834,146836],{"class":51,"line":52},[49,146830,24524],{"class":55},[49,146832,146833],{"class":59}," freeze",[49,146835,26907],{"class":77},[49,146837,146838],{"class":59}," requirements.txt\n",[14,146840,146841],{},"安装依赖：",[40,146843,146845],{"className":42,"code":146844,"language":44,"meta":27,"style":27},"pip install -r requirements.txt\n",[46,146846,146847],{"__ignoreMap":27},[49,146848,146849,146851,146853,146855],{"class":51,"line":52},[49,146850,24524],{"class":55},[49,146852,269],{"class":59},[49,146854,120170],{"class":159},[49,146856,146838],{"class":59},[782,146858,146860],{"id":146859},"_16-开发工具","1.6 开发工具",[18,146862,146864],{"id":146863},"_161-pycharm","1.6.1 PyCharm",[14,146866,146867],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146869,122593],{},[30,146871,146872,146875,146878,146884,146887],{},[33,146873,146874],{},"New Project：创建项目。",[33,146876,146877],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[33,146879,146880,146881,126514],{},"New Python File：创建 ",[46,146882,146883],{},".py",[33,146885,146886],{},"Run：运行当前文件。",[33,146888,146889],{},"Debug：断点调试。",[18,146891,146893],{"id":146892},"_162-vs-code","1.6.2 VS Code",[14,146895,146896],{},"VS Code 轻量，适合后续多语言开发。",[14,146898,146899],{},"建议安装插件：",[30,146901,146902,146905,146908],{},[33,146903,146904],{},"Python。",[33,146906,146907],{},"Pylance。",[33,146909,146910],{},"Jupyter。",[14,146912,146913],{},"选择解释器：",[40,146915,146918],{"className":146916,"code":146917,"language":5884,"meta":27},[5882],"Ctrl + Shift + P -> Python: Select Interpreter\n",[46,146919,146917],{"__ignoreMap":27},[782,146921,146923],{"id":146922},"_17-第一个python程序","1.7 第一个Python程序",[14,146925,146926,146927,25309],{},"创建文件 ",[46,146928,146929],{},"hello.py",[40,146931,146933],{"className":30909,"code":146932,"language":30911,"meta":27,"style":27},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[46,146934,146935,146946],{"__ignoreMap":27},[49,146936,146937,146939,146941,146944],{"class":51,"line":52},[49,146938,30946],{"class":159},[49,146940,841],{"class":73},[49,146942,146943],{"class":59},"\"Hello World\"",[49,146945,847],{"class":73},[49,146947,146948,146950,146952,146955],{"class":51,"line":63},[49,146949,30946],{"class":159},[49,146951,841],{"class":73},[49,146953,146954],{"class":59},"\"你好，Python\"",[49,146956,847],{"class":73},[14,146958,146959],{},"在终端运行：",[40,146961,146963],{"className":42,"code":146962,"language":44,"meta":27,"style":27},"python hello.py\n",[46,146964,146965],{"__ignoreMap":27},[49,146966,146967,146969],{"class":51,"line":52},[49,146968,30911],{"class":55},[49,146970,146971],{"class":59}," hello.py\n",[14,146973,146974],{},"或：",[40,146976,146978],{"className":42,"code":146977,"language":44,"meta":27,"style":27},"python3 hello.py\n",[46,146979,146980],{"__ignoreMap":27},[49,146981,146982,146984],{"class":51,"line":52},[49,146983,101410],{"class":55},[49,146985,146971],{"class":59},[14,146987,146988],{},"输出：",[40,146990,146993],{"className":146991,"code":146992,"language":5884,"meta":27},[5882],"Hello World\n你好，Python\n",[46,146994,146992],{"__ignoreMap":27},[782,146996,146998],{"id":146997},"_18-print函数","1.8 print函数",[14,147000,147001,147004],{},[46,147002,147003],{},"print()"," 用来输出内容。",[40,147006,147008],{"className":30909,"code":147007,"language":30911,"meta":27,"style":27},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[46,147009,147010,147020,147030,147040],{"__ignoreMap":27},[49,147011,147012,147014,147016,147018],{"class":51,"line":52},[49,147013,30946],{"class":159},[49,147015,841],{"class":73},[49,147017,6541],{"class":59},[49,147019,847],{"class":73},[49,147021,147022,147024,147026,147028],{"class":51,"line":63},[49,147023,30946],{"class":159},[49,147025,841],{"class":73},[49,147027,1140],{"class":159},[49,147029,847],{"class":73},[49,147031,147032,147034,147036,147038],{"class":51,"line":70},[49,147033,30946],{"class":159},[49,147035,841],{"class":73},[49,147037,888],{"class":159},[49,147039,847],{"class":73},[49,147041,147042,147044,147046,147049,147051,147053],{"class":51,"line":219},[49,147043,30946],{"class":159},[49,147045,841],{"class":73},[49,147047,147048],{"class":59},"\"年龄:\"",[49,147050,13132],{"class":73},[49,147052,1479],{"class":159},[49,147054,847],{"class":73},[14,147056,147057],{},"多个内容用逗号隔开，默认中间加空格：",[40,147059,147061],{"className":30909,"code":147060,"language":30911,"meta":27,"style":27},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[46,147062,147063,147073,147083],{"__ignoreMap":27},[49,147064,147065,147068,147070],{"class":51,"line":52},[49,147066,147067],{"class":73},"name ",[49,147069,78],{"class":77},[49,147071,147072],{"class":59}," \"张三\"\n",[49,147074,147075,147078,147080],{"class":51,"line":63},[49,147076,147077],{"class":73},"age ",[49,147079,78],{"class":77},[49,147081,147082],{"class":159}," 18\n",[49,147084,147085,147087,147089,147092,147095,147097],{"class":51,"line":70},[49,147086,30946],{"class":159},[49,147088,841],{"class":73},[49,147090,147091],{"class":59},"\"姓名:\"",[49,147093,147094],{"class":73},", name, ",[49,147096,147048],{"class":59},[49,147098,147099],{"class":73},", age)\n",[14,147101,147102],{},"修改分隔符：",[40,147104,147106],{"className":30909,"code":147105,"language":30911,"meta":27,"style":27},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[46,147107,147108],{"__ignoreMap":27},[49,147109,147110,147112,147114,147117,147119,147121,147123,147125,147127,147130,147132,147134],{"class":51,"line":52},[49,147111,30946],{"class":159},[49,147113,841],{"class":73},[49,147115,147116],{"class":59},"\"2024\"",[49,147118,13132],{"class":73},[49,147120,54847],{"class":59},[49,147122,13132],{"class":73},[49,147124,54847],{"class":59},[49,147126,13132],{"class":73},[49,147128,147129],{"class":5913},"sep",[49,147131,78],{"class":77},[49,147133,33014],{"class":59},[49,147135,847],{"class":73},[14,147137,147138],{},"修改结尾符：",[40,147140,147142],{"className":30909,"code":147141,"language":30911,"meta":27,"style":27},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[46,147143,147144,147162],{"__ignoreMap":27},[49,147145,147146,147148,147150,147152,147154,147156,147158,147160],{"class":51,"line":52},[49,147147,30946],{"class":159},[49,147149,841],{"class":73},[49,147151,6541],{"class":59},[49,147153,13132],{"class":73},[49,147155,46332],{"class":5913},[49,147157,78],{"class":77},[49,147159,5056],{"class":59},[49,147161,847],{"class":73},[49,147163,147164,147166,147168,147171],{"class":51,"line":63},[49,147165,30946],{"class":159},[49,147167,841],{"class":73},[49,147169,147170],{"class":59},"\"python\"",[49,147172,847],{"class":73},[782,147174,147176],{"id":147175},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,147178,147179],{},"交互运行适合临时验证：",[40,147181,147183],{"className":30909,"code":147182,"language":30911,"meta":27,"style":27},">>> 10 * 3\n30\n",[46,147184,147185,147195],{"__ignoreMap":27},[49,147186,147187,147189,147191,147193],{"class":51,"line":52},[49,147188,146384],{"class":77},[49,147190,2736],{"class":159},[49,147192,7215],{"class":77},[49,147194,120567],{"class":159},[49,147196,147197],{"class":51,"line":63},[49,147198,147199],{"class":159},"30\n",[14,147201,147202],{},"脚本运行适合保存程序：",[40,147204,147206],{"className":30909,"code":147205,"language":30911,"meta":27,"style":27},"price = 8\ncount = 5\nprint(price * count)\n",[46,147207,147208,147218,147227],{"__ignoreMap":27},[49,147209,147210,147213,147215],{"class":51,"line":52},[49,147211,147212],{"class":73},"price ",[49,147214,78],{"class":77},[49,147216,147217],{"class":159}," 8\n",[49,147219,147220,147223,147225],{"class":51,"line":63},[49,147221,147222],{"class":73},"count ",[49,147224,78],{"class":77},[49,147226,54958],{"class":159},[49,147228,147229,147231,147234,147236],{"class":51,"line":70},[49,147230,30946],{"class":159},[49,147232,147233],{"class":73},"(price ",[49,147235,1284],{"class":77},[49,147237,147238],{"class":73}," count)\n",[14,147240,147241],{},"实际学习中推荐：",[30,147243,147244,147247,147252],{},[33,147245,147246],{},"临时试一个语法，用交互模式。",[33,147248,147249,147250,126514],{},"写完整练习，用 ",[46,147251,146883],{},[33,147253,147254],{},"写项目，用独立目录和虚拟环境。",[782,147256,147258],{"id":147257},"_110-常见错误","1.10 常见错误",[18,147260,147262],{"id":147261},"_1101-命令找不到","1.10.1 命令找不到",[40,147264,147267],{"className":147265,"code":147266,"language":5884,"meta":27},[5882],"python: command not found\n",[46,147268,147266],{"__ignoreMap":27},[14,147270,147271],{},"原因：",[30,147273,147274,147277,147280],{},[33,147275,147276],{},"没安装 Python。",[33,147278,147279],{},"PATH 没配置。",[33,147281,147282,147283,28916],{},"Linux\u002FmacOS 应该使用 ",[46,147284,101410],{},[18,147286,147288],{"id":147287},"_1102-文件名冲突","1.10.2 文件名冲突",[14,147290,147291],{},"不要把文件命名为：",[40,147293,147296],{"className":147294,"code":147295,"language":5884,"meta":27},[5882],"random.py\njson.py\ntime.py\nrequests.py\n",[46,147297,147295],{"__ignoreMap":27},[14,147299,147300],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[18,147302,147304],{"id":147303},"_1103-中文乱码","1.10.3 中文乱码",[14,147306,147307],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,147309,147310],{},"如果读写文件出现乱码，要明确指定编码：",[40,147312,147314],{"className":30909,"code":147313,"language":30911,"meta":27,"style":27},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[46,147315,147316,147350],{"__ignoreMap":27},[49,147317,147318,147320,147323,147325,147328,147330,147333,147335,147338,147340,147343,147345,147347],{"class":51,"line":52},[49,147319,108364],{"class":77},[49,147321,147322],{"class":159}," open",[49,147324,841],{"class":73},[49,147326,147327],{"class":59},"\"data.txt\"",[49,147329,13132],{"class":73},[49,147331,147332],{"class":59},"\"r\"",[49,147334,13132],{"class":73},[49,147336,147337],{"class":5913},"encoding",[49,147339,78],{"class":77},[49,147341,147342],{"class":59},"\"utf-8\"",[49,147344,14411],{"class":73},[49,147346,31914],{"class":77},[49,147348,147349],{"class":73}," f:\n",[49,147351,147352,147355,147357],{"class":51,"line":63},[49,147353,147354],{"class":73},"    content ",[49,147356,78],{"class":77},[49,147358,147359],{"class":73}," f.read()\n",[782,147361,147363],{"id":147362},"_111-本章练习","1.11 本章练习",[30,147365,147366,147369,147375],{},[33,147367,147368],{},"安装 Python，并在终端输出版本号。",[33,147370,147371,147372,147374],{},"新建 ",[46,147373,146929],{},"，输出自己的姓名、年龄、学习目标。",[33,147376,104897,147377,147379],{},[46,147378,147003],{}," 输出下面格式：",[40,147381,147384],{"className":147382,"code":147383,"language":5884,"meta":27},[5882],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[46,147385,147383],{"__ignoreMap":27},[30,147387,147388],{"start":219},[33,147389,104897,147390,147392],{},[46,147391,147129],{}," 输出日期：",[40,147394,147397],{"className":147395,"code":147396,"language":5884,"meta":27},[5882],"2024-10-10\n",[46,147398,147396],{"__ignoreMap":27},[30,147400,147401],{"start":233},[33,147402,104897,147403,147405,147406,147408],{},[46,147404,46332],{}," 让两次 ",[46,147407,147003],{}," 输出在同一行。",[757,147410,147411],{},"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":27,"searchDepth":63,"depth":63,"links":147413},[147414,147415,147416,147421,147422,147423,147427,147428,147429,147430,147435],{"id":146296,"depth":63,"text":146297},{"id":146340,"depth":63,"text":146341},{"id":146441,"depth":63,"text":146442,"children":147417},[147418,147419,147420],{"id":146445,"depth":70,"text":146446},{"id":146500,"depth":70,"text":146501},{"id":146536,"depth":70,"text":146537},{"id":146609,"depth":63,"text":146610},{"id":146754,"depth":63,"text":146755},{"id":146859,"depth":63,"text":146860,"children":147424},[147425,147426],{"id":146863,"depth":70,"text":146864},{"id":146892,"depth":70,"text":146893},{"id":146922,"depth":63,"text":146923},{"id":146997,"depth":63,"text":146998},{"id":147175,"depth":63,"text":147176},{"id":147257,"depth":63,"text":147258,"children":147431},[147432,147433,147434],{"id":147261,"depth":70,"text":147262},{"id":147287,"depth":70,"text":147288},{"id":147303,"depth":70,"text":147304},{"id":147362,"depth":63,"text":147363},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146288,"description":24072},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147442,"title":147443,"body":147444,"description":24072,"extension":766,"meta":149848,"navigation":398,"path":149849,"seo":149850,"stem":149851,"__hash__":149852},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147445,"toc":149833},[147446,147449,147453,147456,147459,147476,147479,147521,147524,147528,147531,147534,147571,147574,147608,147611,147703,147707,147721,147724,147751,147754,147758,147861,147868,147871,147888,147892,147899,148088,148091,148164,148168,148171,148255,148258,148290,148294,148498,148501,148505,148511,148613,148616,148872,148876,148879,148882,148896,148898,149084,149088,149450,149456,149460,149463,149587,149590,149769,149772,149776,149809,149813,149830],[10,147447,147443],{"id":147448},"_10-json与pyecharts折线图",[782,147450,147452],{"id":147451},"_101-数据可视化","10.1 数据可视化",[14,147454,147455],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,147457,147458],{},"常见图表：",[30,147460,147461,147464,147467,147470,147473],{},[33,147462,147463],{},"折线图：看趋势。",[33,147465,147466],{},"柱状图：看分类对比。",[33,147468,147469],{},"饼图：看占比。",[33,147471,147472],{},"地图：看地域分布。",[33,147474,147475],{},"散点图：看两个变量之间的关系。",[14,147477,147478],{},"Python 可视化常用库：",[610,147480,147481,147489],{},[613,147482,147483],{},[616,147484,147485,147487],{},[619,147486,146692],{},[619,147488,24435],{},[633,147490,147491,147498,147506,147513],{},[616,147492,147493,147495],{},[638,147494,146724],{},[638,147496,147497],{},"基础、经典、可定制",[616,147499,147500,147503],{},[638,147501,147502],{},"seaborn",[638,147504,147505],{},"统计图表更美观",[616,147507,147508,147510],{},[638,147509,146732],{},[638,147511,147512],{},"生成交互式网页图表",[616,147514,147515,147518],{},[638,147516,147517],{},"plotly",[638,147519,147520],{},"交互图表能力强",[14,147522,147523],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[782,147525,147527],{"id":147526},"_102-json回顾","10.2 JSON回顾",[14,147529,147530],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147532,147533],{},"Python 字典：",[40,147535,147537],{"className":30909,"code":147536,"language":30911,"meta":27,"style":27},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[46,147538,147539,147547,147558,147567],{"__ignoreMap":27},[49,147540,147541,147543,147545],{"class":51,"line":52},[49,147542,102189],{"class":73},[49,147544,78],{"class":77},[49,147546,16269],{"class":73},[49,147548,147549,147552,147554,147556],{"class":51,"line":63},[49,147550,147551],{"class":59},"    \"name\"",[49,147553,51968],{"class":73},[49,147555,69800],{"class":59},[49,147557,31997],{"class":73},[49,147559,147560,147563,147565],{"class":51,"line":70},[49,147561,147562],{"class":59},"    \"value\"",[49,147564,51968],{"class":73},[49,147566,97989],{"class":159},[49,147568,147569],{"class":51,"line":219},[49,147570,2264],{"class":73},[14,147572,147573],{},"JSON 字符串：",[40,147575,147578],{"className":147576,"code":147577,"language":146323,"meta":27,"style":27},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[46,147579,147580,147584,147595,147604],{"__ignoreMap":27},[49,147581,147582],{"class":51,"line":52},[49,147583,2245],{"class":73},[49,147585,147586,147589,147591,147593],{"class":51,"line":63},[49,147587,147588],{"class":159},"  \"name\"",[49,147590,51968],{"class":73},[49,147592,69800],{"class":59},[49,147594,31997],{"class":73},[49,147596,147597,147600,147602],{"class":51,"line":70},[49,147598,147599],{"class":159},"  \"value\"",[49,147601,51968],{"class":73},[49,147603,97989],{"class":159},[49,147605,147606],{"class":51,"line":219},[49,147607,2264],{"class":73},[14,147609,147610],{},"Python 与 JSON 的转换：",[40,147612,147614],{"className":30909,"code":147613,"language":30911,"meta":27,"style":27},"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",[46,147615,147616,147623,147627,147652,147656,147675,147682,147686,147696],{"__ignoreMap":27},[49,147617,147618,147620],{"class":51,"line":52},[49,147619,30923],{"class":77},[49,147621,147622],{"class":73}," json\n",[49,147624,147625],{"class":51,"line":63},[49,147626,399],{"emptyLinePlaceholder":398},[49,147628,147629,147631,147633,147635,147637,147639,147641,147643,147646,147648,147650],{"class":51,"line":70},[49,147630,102189],{"class":73},[49,147632,78],{"class":77},[49,147634,5145],{"class":73},[49,147636,63210],{"class":59},[49,147638,51968],{"class":73},[49,147640,69800],{"class":59},[49,147642,13132],{"class":73},[49,147644,147645],{"class":59},"\"value\"",[49,147647,51968],{"class":73},[49,147649,1140],{"class":159},[49,147651,2264],{"class":73},[49,147653,147654],{"class":51,"line":219},[49,147655,399],{"emptyLinePlaceholder":398},[49,147657,147658,147661,147663,147666,147669,147671,147673],{"class":51,"line":233},[49,147659,147660],{"class":73},"json_text ",[49,147662,78],{"class":77},[49,147664,147665],{"class":73}," json.dumps(data, ",[49,147667,147668],{"class":5913},"ensure_ascii",[49,147670,78],{"class":77},[49,147672,34518],{"class":159},[49,147674,847],{"class":73},[49,147676,147677,147679],{"class":51,"line":241},[49,147678,30946],{"class":159},[49,147680,147681],{"class":73},"(json_text)\n",[49,147683,147684],{"class":51,"line":1920},[49,147685,399],{"emptyLinePlaceholder":398},[49,147687,147688,147691,147693],{"class":51,"line":2011},[49,147689,147690],{"class":73},"new_data ",[49,147692,78],{"class":77},[49,147694,147695],{"class":73}," json.loads(json_text)\n",[49,147697,147698,147700],{"class":51,"line":2017},[49,147699,30946],{"class":159},[49,147701,147702],{"class":73},"(new_data)\n",[782,147704,147706],{"id":147705},"_103-安装pyecharts","10.3 安装pyecharts",[40,147708,147710],{"className":42,"code":147709,"language":44,"meta":27,"style":27},"pip install pyecharts\n",[46,147711,147712],{"__ignoreMap":27},[49,147713,147714,147716,147718],{"class":51,"line":52},[49,147715,24524],{"class":55},[49,147717,269],{"class":59},[49,147719,147720],{"class":59}," pyecharts\n",[14,147722,147723],{},"验证：",[40,147725,147727],{"className":30909,"code":147726,"language":30911,"meta":27,"style":27},"import pyecharts\n\nprint(pyecharts.__version__)\n",[46,147728,147729,147735,147739],{"__ignoreMap":27},[49,147730,147731,147733],{"class":51,"line":52},[49,147732,30923],{"class":77},[49,147734,147720],{"class":73},[49,147736,147737],{"class":51,"line":63},[49,147738,399],{"emptyLinePlaceholder":398},[49,147740,147741,147743,147746,147749],{"class":51,"line":70},[49,147742,30946],{"class":159},[49,147744,147745],{"class":73},"(pyecharts.",[49,147747,147748],{"class":159},"__version__",[49,147750,847],{"class":73},[14,147752,147753],{},"如果使用虚拟环境，要先激活环境再安装。",[782,147755,147757],{"id":147756},"_104-第一个折线图","10.4 第一个折线图",[40,147759,147761],{"className":30909,"code":147760,"language":30911,"meta":27,"style":27},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[46,147762,147763,147775,147779,147789,147819,147851],{"__ignoreMap":27},[49,147764,147765,147767,147770,147772],{"class":51,"line":52},[49,147766,31268],{"class":77},[49,147768,147769],{"class":73}," pyecharts.charts ",[49,147771,30923],{"class":77},[49,147773,147774],{"class":73}," Line\n",[49,147776,147777],{"class":51,"line":63},[49,147778,399],{"emptyLinePlaceholder":398},[49,147780,147781,147784,147786],{"class":51,"line":70},[49,147782,147783],{"class":73},"line ",[49,147785,78],{"class":77},[49,147787,147788],{"class":73}," Line()\n",[49,147790,147791,147794,147797,147799,147802,147804,147807,147809,147812,147814,147817],{"class":51,"line":219},[49,147792,147793],{"class":73},"line.add_xaxis([",[49,147795,147796],{"class":59},"\"周一\"",[49,147798,13132],{"class":73},[49,147800,147801],{"class":59},"\"周二\"",[49,147803,13132],{"class":73},[49,147805,147806],{"class":59},"\"周三\"",[49,147808,13132],{"class":73},[49,147810,147811],{"class":59},"\"周四\"",[49,147813,13132],{"class":73},[49,147815,147816],{"class":59},"\"周五\"",[49,147818,5354],{"class":73},[49,147820,147821,147824,147827,147829,147831,147833,147835,147837,147839,147841,147844,147846,147849],{"class":51,"line":233},[49,147822,147823],{"class":73},"line.add_yaxis(",[49,147825,147826],{"class":59},"\"销售额\"",[49,147828,78049],{"class":73},[49,147830,1140],{"class":159},[49,147832,13132],{"class":73},[49,147834,1646],{"class":159},[49,147836,13132],{"class":73},[49,147838,1691],{"class":159},[49,147840,13132],{"class":73},[49,147842,147843],{"class":159},"150",[49,147845,13132],{"class":73},[49,147847,147848],{"class":159},"180",[49,147850,5354],{"class":73},[49,147852,147853,147856,147859],{"class":51,"line":241},[49,147854,147855],{"class":73},"line.render(",[49,147857,147858],{"class":59},"\"line.html\"",[49,147860,847],{"class":73},[14,147862,147863,147864,147867],{},"运行后会生成 ",[46,147865,147866],{},"line.html","，用浏览器打开即可看到图表。",[14,147869,147870],{},"核心步骤：",[30,147872,147873,147876,147879,147882,147885],{},[33,147874,147875],{},"导入图表类。",[33,147877,147878],{},"创建图表对象。",[33,147880,147881],{},"添加 x 轴数据。",[33,147883,147884],{},"添加 y 轴数据。",[33,147886,147887],{},"渲染为 HTML。",[782,147889,147891],{"id":147890},"_105-全局配置","10.5 全局配置",[14,147893,147894,147895,147898],{},"常用配置在 ",[46,147896,147897],{},"pyecharts.options"," 中。",[40,147900,147902],{"className":30909,"code":147901,"language":30911,"meta":27,"style":27},"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",[46,147903,147904,147921,147931,147935,147943,147967,147995,148000,148019,148038,148056,148076,148080],{"__ignoreMap":27},[49,147905,147906,147908,147911,147913,147916,147918],{"class":51,"line":52},[49,147907,31268],{"class":77},[49,147909,147910],{"class":73}," pyecharts ",[49,147912,30923],{"class":77},[49,147914,147915],{"class":73}," options ",[49,147917,31914],{"class":77},[49,147919,147920],{"class":73}," opts\n",[49,147922,147923,147925,147927,147929],{"class":51,"line":63},[49,147924,31268],{"class":77},[49,147926,147769],{"class":73},[49,147928,30923],{"class":77},[49,147930,147774],{"class":73},[49,147932,147933],{"class":51,"line":70},[49,147934,399],{"emptyLinePlaceholder":398},[49,147936,147937,147939,147941],{"class":51,"line":219},[49,147938,147783],{"class":73},[49,147940,78],{"class":77},[49,147942,147788],{"class":73},[49,147944,147945,147947,147949,147951,147953,147955,147957,147959,147961,147963,147965],{"class":51,"line":233},[49,147946,147793],{"class":73},[49,147948,147796],{"class":59},[49,147950,13132],{"class":73},[49,147952,147801],{"class":59},[49,147954,13132],{"class":73},[49,147956,147806],{"class":59},[49,147958,13132],{"class":73},[49,147960,147811],{"class":59},[49,147962,13132],{"class":73},[49,147964,147816],{"class":59},[49,147966,5354],{"class":73},[49,147968,147969,147971,147973,147975,147977,147979,147981,147983,147985,147987,147989,147991,147993],{"class":51,"line":241},[49,147970,147823],{"class":73},[49,147972,147826],{"class":59},[49,147974,78049],{"class":73},[49,147976,1140],{"class":159},[49,147978,13132],{"class":73},[49,147980,1646],{"class":159},[49,147982,13132],{"class":73},[49,147984,1691],{"class":159},[49,147986,13132],{"class":73},[49,147988,147843],{"class":159},[49,147990,13132],{"class":73},[49,147992,147848],{"class":159},[49,147994,5354],{"class":73},[49,147996,147997],{"class":51,"line":1920},[49,147998,147999],{"class":73},"line.set_global_opts(\n",[49,148001,148002,148005,148007,148010,148012,148014,148017],{"class":51,"line":2011},[49,148003,148004],{"class":5913},"    title_opts",[49,148006,78],{"class":77},[49,148008,148009],{"class":73},"opts.TitleOpts(",[49,148011,51938],{"class":5913},[49,148013,78],{"class":77},[49,148015,148016],{"class":59},"\"一周销售额\"",[49,148018,38578],{"class":73},[49,148020,148021,148024,148026,148029,148031,148033,148036],{"class":51,"line":2017},[49,148022,148023],{"class":5913},"    xaxis_opts",[49,148025,78],{"class":77},[49,148027,148028],{"class":73},"opts.AxisOpts(",[49,148030,80341],{"class":5913},[49,148032,78],{"class":77},[49,148034,148035],{"class":59},"\"日期\"",[49,148037,38578],{"class":73},[49,148039,148040,148043,148045,148047,148049,148051,148054],{"class":51,"line":2029},[49,148041,148042],{"class":5913},"    yaxis_opts",[49,148044,78],{"class":77},[49,148046,148028],{"class":73},[49,148048,80341],{"class":5913},[49,148050,78],{"class":77},[49,148052,148053],{"class":59},"\"金额\"",[49,148055,38578],{"class":73},[49,148057,148058,148061,148063,148066,148069,148071,148074],{"class":51,"line":2311},[49,148059,148060],{"class":5913},"    tooltip_opts",[49,148062,78],{"class":77},[49,148064,148065],{"class":73},"opts.TooltipOpts(",[49,148067,148068],{"class":5913},"trigger",[49,148070,78],{"class":77},[49,148072,148073],{"class":59},"\"axis\"",[49,148075,38578],{"class":73},[49,148077,148078],{"class":51,"line":2316},[49,148079,847],{"class":73},[49,148081,148082,148084,148086],{"class":51,"line":2322},[49,148083,147855],{"class":73},[49,148085,147858],{"class":59},[49,148087,847],{"class":73},[14,148089,148090],{},"常见全局配置：",[610,148092,148093,148102],{},[613,148094,148095],{},[616,148096,148097,148100],{},[619,148098,148099],{},"配置",[619,148101,103227],{},[633,148103,148104,148114,148124,148134,148144,148154],{},[616,148105,148106,148111],{},[638,148107,148108],{},[46,148109,148110],{},"TitleOpts",[638,148112,148113],{},"标题",[616,148115,148116,148121],{},[638,148117,148118],{},[46,148119,148120],{},"LegendOpts",[638,148122,148123],{},"图例",[616,148125,148126,148131],{},[638,148127,148128],{},[46,148129,148130],{},"TooltipOpts",[638,148132,148133],{},"提示框",[616,148135,148136,148141],{},[638,148137,148138],{},[46,148139,148140],{},"AxisOpts",[638,148142,148143],{},"坐标轴",[616,148145,148146,148151],{},[638,148147,148148],{},[46,148149,148150],{},"VisualMapOpts",[638,148152,148153],{},"视觉映射",[616,148155,148156,148161],{},[638,148157,148158],{},[46,148159,148160],{},"DataZoomOpts",[638,148162,148163],{},"区域缩放",[782,148165,148167],{"id":148166},"_106-系列配置","10.6 系列配置",[14,148169,148170],{},"系列配置作用于某一组数据。",[40,148172,148174],{"className":30909,"code":148173,"language":30911,"meta":27,"style":27},"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",[46,148175,148176,148181,148192,148221,148232,148251],{"__ignoreMap":27},[49,148177,148178],{"class":51,"line":52},[49,148179,148180],{"class":73},"line.add_yaxis(\n",[49,148182,148183,148186,148188,148190],{"class":51,"line":63},[49,148184,148185],{"class":5913},"    series_name",[49,148187,78],{"class":77},[49,148189,147826],{"class":59},[49,148191,31997],{"class":73},[49,148193,148194,148197,148199,148201,148203,148205,148207,148209,148211,148213,148215,148217,148219],{"class":51,"line":70},[49,148195,148196],{"class":5913},"    y_axis",[49,148198,78],{"class":77},[49,148200,1719],{"class":73},[49,148202,1140],{"class":159},[49,148204,13132],{"class":73},[49,148206,1646],{"class":159},[49,148208,13132],{"class":73},[49,148210,1691],{"class":159},[49,148212,13132],{"class":73},[49,148214,147843],{"class":159},[49,148216,13132],{"class":73},[49,148218,147848],{"class":159},[49,148220,88367],{"class":73},[49,148222,148223,148226,148228,148230],{"class":51,"line":219},[49,148224,148225],{"class":5913},"    is_smooth",[49,148227,78],{"class":77},[49,148229,32007],{"class":159},[49,148231,31997],{"class":73},[49,148233,148234,148237,148239,148242,148245,148247,148249],{"class":51,"line":233},[49,148235,148236],{"class":5913},"    label_opts",[49,148238,78],{"class":77},[49,148240,148241],{"class":73},"opts.LabelOpts(",[49,148243,148244],{"class":5913},"is_show",[49,148246,78],{"class":77},[49,148248,32007],{"class":159},[49,148250,38578],{"class":73},[49,148252,148253],{"class":51,"line":241},[49,148254,847],{"class":73},[14,148256,148257],{},"常用参数：",[30,148259,148260,148266,148272,148278,148284],{},[33,148261,148262,148265],{},[46,148263,148264],{},"series_name","：系列名称。",[33,148267,148268,148271],{},[46,148269,148270],{},"y_axis","：y 轴数据。",[33,148273,148274,148277],{},[46,148275,148276],{},"is_smooth","：是否平滑曲线。",[33,148279,148280,148283],{},[46,148281,148282],{},"label_opts","：标签配置。",[33,148285,148286,148289],{},[46,148287,148288],{},"symbol_size","：标记点大小。",[782,148291,148293],{"id":148292},"_107-多条折线","10.7 多条折线",[40,148295,148297],{"className":30909,"code":148296,"language":30911,"meta":27,"style":27},"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",[46,148298,148299,148313,148323,148327,148356,148360,148368,148373,148411,148448,148452,148469,148485,148489],{"__ignoreMap":27},[49,148300,148301,148303,148305,148307,148309,148311],{"class":51,"line":52},[49,148302,31268],{"class":77},[49,148304,147910],{"class":73},[49,148306,30923],{"class":77},[49,148308,147915],{"class":73},[49,148310,31914],{"class":77},[49,148312,147920],{"class":73},[49,148314,148315,148317,148319,148321],{"class":51,"line":63},[49,148316,31268],{"class":77},[49,148318,147769],{"class":73},[49,148320,30923],{"class":77},[49,148322,147774],{"class":73},[49,148324,148325],{"class":51,"line":70},[49,148326,399],{"emptyLinePlaceholder":398},[49,148328,148329,148332,148334,148336,148338,148340,148342,148344,148346,148348,148350,148352,148354],{"class":51,"line":219},[49,148330,148331],{"class":73},"dates ",[49,148333,78],{"class":77},[49,148335,52757],{"class":73},[49,148337,147796],{"class":59},[49,148339,13132],{"class":73},[49,148341,147801],{"class":59},[49,148343,13132],{"class":73},[49,148345,147806],{"class":59},[49,148347,13132],{"class":73},[49,148349,147811],{"class":59},[49,148351,13132],{"class":73},[49,148353,147816],{"class":59},[49,148355,33777],{"class":73},[49,148357,148358],{"class":51,"line":233},[49,148359,399],{"emptyLinePlaceholder":398},[49,148361,148362,148364,148366],{"class":51,"line":241},[49,148363,147783],{"class":73},[49,148365,78],{"class":77},[49,148367,147788],{"class":73},[49,148369,148370],{"class":51,"line":1920},[49,148371,148372],{"class":73},"line.add_xaxis(dates)\n",[49,148374,148375,148377,148380,148382,148384,148386,148389,148391,148393,148395,148397,148399,148401,148403,148405,148407,148409],{"class":51,"line":2011},[49,148376,147823],{"class":73},[49,148378,148379],{"class":59},"\"线上销售\"",[49,148381,78049],{"class":73},[49,148383,1140],{"class":159},[49,148385,13132],{"class":73},[49,148387,148388],{"class":159},"130",[49,148390,13132],{"class":73},[49,148392,1646],{"class":159},[49,148394,13132],{"class":73},[49,148396,21745],{"class":159},[49,148398,13132],{"class":73},[49,148400,2421],{"class":159},[49,148402,112733],{"class":73},[49,148404,148276],{"class":5913},[49,148406,78],{"class":77},[49,148408,32007],{"class":159},[49,148410,847],{"class":73},[49,148412,148413,148415,148418,148420,148422,148424,148426,148428,148430,148432,148434,148436,148438,148440,148442,148444,148446],{"class":51,"line":2017},[49,148414,147823],{"class":73},[49,148416,148417],{"class":59},"\"线下销售\"",[49,148419,78049],{"class":73},[49,148421,1441],{"class":159},[49,148423,13132],{"class":73},[49,148425,1691],{"class":159},[49,148427,13132],{"class":73},[49,148429,1140],{"class":159},[49,148431,13132],{"class":73},[49,148433,1646],{"class":159},[49,148435,13132],{"class":73},[49,148437,147843],{"class":159},[49,148439,112733],{"class":73},[49,148441,148276],{"class":5913},[49,148443,78],{"class":77},[49,148445,32007],{"class":159},[49,148447,847],{"class":73},[49,148449,148450],{"class":51,"line":2029},[49,148451,147999],{"class":73},[49,148453,148454,148456,148458,148460,148462,148464,148467],{"class":51,"line":2311},[49,148455,148004],{"class":5913},[49,148457,78],{"class":77},[49,148459,148009],{"class":73},[49,148461,51938],{"class":5913},[49,148463,78],{"class":77},[49,148465,148466],{"class":59},"\"线上线下销售趋势\"",[49,148468,38578],{"class":73},[49,148470,148471,148473,148475,148477,148479,148481,148483],{"class":51,"line":2316},[49,148472,148060],{"class":5913},[49,148474,78],{"class":77},[49,148476,148065],{"class":73},[49,148478,148068],{"class":5913},[49,148480,78],{"class":77},[49,148482,148073],{"class":59},[49,148484,38578],{"class":73},[49,148486,148487],{"class":51,"line":2322},[49,148488,847],{"class":73},[49,148490,148491,148493,148496],{"class":51,"line":2327},[49,148492,147855],{"class":73},[49,148494,148495],{"class":59},"\"sales.html\"",[49,148497,847],{"class":73},[14,148499,148500],{},"多条折线适合比较不同指标或不同地区。",[782,148502,148504],{"id":148503},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148506,148507,148508,25309],{},"假设 ",[46,148509,148510],{},"sales.json",[40,148512,148514],{"className":147576,"code":148513,"language":146323,"meta":27,"style":27},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[46,148515,148516,148521,148553,148581,148609],{"__ignoreMap":27},[49,148517,148518],{"class":51,"line":52},[49,148519,148520],{"class":73},"[\n",[49,148522,148523,148526,148529,148531,148533,148535,148538,148540,148542,148544,148547,148549,148551],{"class":51,"line":63},[49,148524,148525],{"class":73},"  {",[49,148527,148528],{"class":159},"\"date\"",[49,148530,51968],{"class":73},[49,148532,147796],{"class":59},[49,148534,13132],{"class":73},[49,148536,148537],{"class":159},"\"online\"",[49,148539,51968],{"class":73},[49,148541,1140],{"class":159},[49,148543,13132],{"class":73},[49,148545,148546],{"class":159},"\"offline\"",[49,148548,51968],{"class":73},[49,148550,1441],{"class":159},[49,148552,5627],{"class":73},[49,148554,148555,148557,148559,148561,148563,148565,148567,148569,148571,148573,148575,148577,148579],{"class":51,"line":70},[49,148556,148525],{"class":73},[49,148558,148528],{"class":159},[49,148560,51968],{"class":73},[49,148562,147801],{"class":59},[49,148564,13132],{"class":73},[49,148566,148537],{"class":159},[49,148568,51968],{"class":73},[49,148570,148388],{"class":159},[49,148572,13132],{"class":73},[49,148574,148546],{"class":159},[49,148576,51968],{"class":73},[49,148578,1691],{"class":159},[49,148580,5627],{"class":73},[49,148582,148583,148585,148587,148589,148591,148593,148595,148597,148599,148601,148603,148605,148607],{"class":51,"line":219},[49,148584,148525],{"class":73},[49,148586,148528],{"class":159},[49,148588,51968],{"class":73},[49,148590,147806],{"class":59},[49,148592,13132],{"class":73},[49,148594,148537],{"class":159},[49,148596,51968],{"class":73},[49,148598,1646],{"class":159},[49,148600,13132],{"class":73},[49,148602,148546],{"class":159},[49,148604,51968],{"class":73},[49,148606,1140],{"class":159},[49,148608,2264],{"class":73},[49,148610,148611],{"class":51,"line":233},[49,148612,33777],{"class":73},[14,148614,148615],{},"读取并绘图：",[40,148617,148619],{"className":30909,"code":148618,"language":30911,"meta":27,"style":27},"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",[46,148620,148621,148627,148641,148651,148655,148687,148700,148704,148712,148721,148730,148734,148746,148755,148764,148773,148777,148785,148789,148806,148823,148827,148844,148860,148864],{"__ignoreMap":27},[49,148622,148623,148625],{"class":51,"line":52},[49,148624,30923],{"class":77},[49,148626,147622],{"class":73},[49,148628,148629,148631,148633,148635,148637,148639],{"class":51,"line":63},[49,148630,31268],{"class":77},[49,148632,147910],{"class":73},[49,148634,30923],{"class":77},[49,148636,147915],{"class":73},[49,148638,31914],{"class":77},[49,148640,147920],{"class":73},[49,148642,148643,148645,148647,148649],{"class":51,"line":70},[49,148644,31268],{"class":77},[49,148646,147769],{"class":73},[49,148648,30923],{"class":77},[49,148650,147774],{"class":73},[49,148652,148653],{"class":51,"line":219},[49,148654,399],{"emptyLinePlaceholder":398},[49,148656,148657,148659,148661,148663,148666,148668,148670,148672,148674,148676,148678,148680,148682,148685],{"class":51,"line":233},[49,148658,108364],{"class":77},[49,148660,147322],{"class":159},[49,148662,841],{"class":73},[49,148664,148665],{"class":59},"\"sales.json\"",[49,148667,13132],{"class":73},[49,148669,147332],{"class":59},[49,148671,13132],{"class":73},[49,148673,147337],{"class":5913},[49,148675,78],{"class":77},[49,148677,147342],{"class":59},[49,148679,14411],{"class":73},[49,148681,31914],{"class":77},[49,148683,148684],{"class":5913}," file",[49,148686,4436],{"class":73},[49,148688,148689,148691,148693,148696,148698],{"class":51,"line":241},[49,148690,101952],{"class":73},[49,148692,78],{"class":77},[49,148694,148695],{"class":73}," json.load(",[49,148697,45885],{"class":5913},[49,148699,847],{"class":73},[49,148701,148702],{"class":51,"line":1920},[49,148703,399],{"emptyLinePlaceholder":398},[49,148705,148706,148708,148710],{"class":51,"line":2011},[49,148707,148331],{"class":73},[49,148709,78],{"class":77},[49,148711,52369],{"class":73},[49,148713,148714,148717,148719],{"class":51,"line":2017},[49,148715,148716],{"class":73},"online_sales ",[49,148718,78],{"class":77},[49,148720,52369],{"class":73},[49,148722,148723,148726,148728],{"class":51,"line":2029},[49,148724,148725],{"class":73},"offline_sales ",[49,148727,78],{"class":77},[49,148729,52369],{"class":73},[49,148731,148732],{"class":51,"line":2311},[49,148733,399],{"emptyLinePlaceholder":398},[49,148735,148736,148738,148741,148743],{"class":51,"line":2316},[49,148737,3722],{"class":77},[49,148739,148740],{"class":73}," item ",[49,148742,26732],{"class":77},[49,148744,148745],{"class":73}," data:\n",[49,148747,148748,148751,148753],{"class":51,"line":2322},[49,148749,148750],{"class":73},"    dates.append(item[",[49,148752,148528],{"class":59},[49,148754,5354],{"class":73},[49,148756,148757,148760,148762],{"class":51,"line":2327},[49,148758,148759],{"class":73},"    online_sales.append(item[",[49,148761,148537],{"class":59},[49,148763,5354],{"class":73},[49,148765,148766,148769,148771],{"class":51,"line":2341},[49,148767,148768],{"class":73},"    offline_sales.append(item[",[49,148770,148546],{"class":59},[49,148772,5354],{"class":73},[49,148774,148775],{"class":51,"line":2346},[49,148776,399],{"emptyLinePlaceholder":398},[49,148778,148779,148781,148783],{"class":51,"line":2352},[49,148780,147783],{"class":73},[49,148782,78],{"class":77},[49,148784,147788],{"class":73},[49,148786,148787],{"class":51,"line":2373},[49,148788,148372],{"class":73},[49,148790,148791,148793,148795,148798,148800,148802,148804],{"class":51,"line":2378},[49,148792,147823],{"class":73},[49,148794,148379],{"class":59},[49,148796,148797],{"class":73},", online_sales, ",[49,148799,148276],{"class":5913},[49,148801,78],{"class":77},[49,148803,32007],{"class":159},[49,148805,847],{"class":73},[49,148807,148808,148810,148812,148815,148817,148819,148821],{"class":51,"line":2392},[49,148809,147823],{"class":73},[49,148811,148417],{"class":59},[49,148813,148814],{"class":73},", offline_sales, ",[49,148816,148276],{"class":5913},[49,148818,78],{"class":77},[49,148820,32007],{"class":159},[49,148822,847],{"class":73},[49,148824,148825],{"class":51,"line":2397},[49,148826,147999],{"class":73},[49,148828,148829,148831,148833,148835,148837,148839,148842],{"class":51,"line":2426},[49,148830,148004],{"class":5913},[49,148832,78],{"class":77},[49,148834,148009],{"class":73},[49,148836,51938],{"class":5913},[49,148838,78],{"class":77},[49,148840,148841],{"class":59},"\"销售趋势\"",[49,148843,38578],{"class":73},[49,148845,148846,148848,148850,148852,148854,148856,148858],{"class":51,"line":2431},[49,148847,148060],{"class":5913},[49,148849,78],{"class":77},[49,148851,148065],{"class":73},[49,148853,148068],{"class":5913},[49,148855,78],{"class":77},[49,148857,148073],{"class":59},[49,148859,38578],{"class":73},[49,148861,148862],{"class":51,"line":2448},[49,148863,847],{"class":73},[49,148865,148866,148868,148870],{"class":51,"line":2453},[49,148867,147855],{"class":73},[49,148869,148495],{"class":59},[49,148871,847],{"class":73},[782,148873,148875],{"id":148874},"_109-数据清洗","10.9 数据清洗",[14,148877,148878],{},"真实数据经常不整齐，需要清洗。",[14,148880,148881],{},"常见问题：",[30,148883,148884,148887,148890,148893],{},[33,148885,148886],{},"数字是字符串。",[33,148888,148889],{},"字段缺失。",[33,148891,148892],{},"空值。",[33,148894,148895],{},"日期格式不统一。",[14,148897,15832],{},[40,148899,148901],{"className":30909,"code":148900,"language":30911,"meta":27,"style":27},"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",[46,148902,148903,148912,148935,148955,148976,148980,148984,148992,149001,149005,149016,149030,149039,149044,149048,149056,149066,149070,149077],{"__ignoreMap":27},[49,148904,148905,148908,148910],{"class":51,"line":52},[49,148906,148907],{"class":73},"raw_data ",[49,148909,78],{"class":77},[49,148911,55978],{"class":73},[49,148913,148914,148917,148919,148921,148923,148925,148928,148930,148933],{"class":51,"line":63},[49,148915,148916],{"class":73},"    {",[49,148918,148528],{"class":59},[49,148920,51968],{"class":73},[49,148922,147796],{"class":59},[49,148924,13132],{"class":73},[49,148926,148927],{"class":59},"\"sales\"",[49,148929,51968],{"class":73},[49,148931,148932],{"class":59},"\"100\"",[49,148934,5627],{"class":73},[49,148936,148937,148939,148941,148943,148945,148947,148949,148951,148953],{"class":51,"line":70},[49,148938,148916],{"class":73},[49,148940,148528],{"class":59},[49,148942,51968],{"class":73},[49,148944,147801],{"class":59},[49,148946,13132],{"class":73},[49,148948,148927],{"class":59},[49,148950,51968],{"class":73},[49,148952,8349],{"class":59},[49,148954,5627],{"class":73},[49,148956,148957,148959,148961,148963,148965,148967,148969,148971,148974],{"class":51,"line":219},[49,148958,148916],{"class":73},[49,148960,148528],{"class":59},[49,148962,51968],{"class":73},[49,148964,147806],{"class":59},[49,148966,13132],{"class":73},[49,148968,148927],{"class":59},[49,148970,51968],{"class":73},[49,148972,148973],{"class":59},"\"120\"",[49,148975,5627],{"class":73},[49,148977,148978],{"class":51,"line":233},[49,148979,33777],{"class":73},[49,148981,148982],{"class":51,"line":241},[49,148983,399],{"emptyLinePlaceholder":398},[49,148985,148986,148988,148990],{"class":51,"line":1920},[49,148987,148331],{"class":73},[49,148989,78],{"class":77},[49,148991,52369],{"class":73},[49,148993,148994,148997,148999],{"class":51,"line":2011},[49,148995,148996],{"class":73},"sales ",[49,148998,78],{"class":77},[49,149000,52369],{"class":73},[49,149002,149003],{"class":51,"line":2017},[49,149004,399],{"emptyLinePlaceholder":398},[49,149006,149007,149009,149011,149013],{"class":51,"line":2029},[49,149008,3722],{"class":77},[49,149010,148740],{"class":73},[49,149012,26732],{"class":77},[49,149014,149015],{"class":73}," raw_data:\n",[49,149017,149018,149021,149023,149026,149028],{"class":51,"line":2311},[49,149019,149020],{"class":73},"    value ",[49,149022,78],{"class":77},[49,149024,149025],{"class":73}," item.get(",[49,149027,148927],{"class":59},[49,149029,847],{"class":73},[49,149031,149032,149034,149036],{"class":51,"line":2316},[49,149033,3798],{"class":77},[49,149035,39461],{"class":77},[49,149037,149038],{"class":73}," value:\n",[49,149040,149041],{"class":51,"line":2322},[49,149042,149043],{"class":77},"        continue\n",[49,149045,149046],{"class":51,"line":2327},[49,149047,399],{"emptyLinePlaceholder":398},[49,149049,149050,149052,149054],{"class":51,"line":2341},[49,149051,148750],{"class":73},[49,149053,148528],{"class":59},[49,149055,5354],{"class":73},[49,149057,149058,149061,149063],{"class":51,"line":2346},[49,149059,149060],{"class":73},"    sales.append(",[49,149062,844],{"class":159},[49,149064,149065],{"class":73},"(value))\n",[49,149067,149068],{"class":51,"line":2352},[49,149069,399],{"emptyLinePlaceholder":398},[49,149071,149072,149074],{"class":51,"line":2373},[49,149073,30946],{"class":159},[49,149075,149076],{"class":73},"(dates)\n",[49,149078,149079,149081],{"class":51,"line":2378},[49,149080,30946],{"class":159},[49,149082,149083],{"class":73},"(sales)\n",[782,149085,149087],{"id":149086},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[40,149089,149091],{"className":30909,"code":149090,"language":30911,"meta":27,"style":27},"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",[46,149092,149093,149107,149117,149121,149129,149150,149172,149194,149216,149238,149242,149246,149268,149289,149293,149301,149305,149309,149319,149328,149338,149354,149358,149362,149379,149395,149411,149427,149437,149441],{"__ignoreMap":27},[49,149094,149095,149097,149099,149101,149103,149105],{"class":51,"line":52},[49,149096,31268],{"class":77},[49,149098,147910],{"class":73},[49,149100,30923],{"class":77},[49,149102,147915],{"class":73},[49,149104,31914],{"class":77},[49,149106,147920],{"class":73},[49,149108,149109,149111,149113,149115],{"class":51,"line":63},[49,149110,31268],{"class":77},[49,149112,147769],{"class":73},[49,149114,30923],{"class":77},[49,149116,147774],{"class":73},[49,149118,149119],{"class":51,"line":70},[49,149120,399],{"emptyLinePlaceholder":398},[49,149122,149123,149125,149127],{"class":51,"line":219},[49,149124,148996],{"class":73},[49,149126,78],{"class":77},[49,149128,55978],{"class":73},[49,149130,149131,149133,149135,149137,149140,149142,149144,149146,149148],{"class":51,"line":233},[49,149132,148916],{"class":73},[49,149134,148528],{"class":59},[49,149136,51968],{"class":73},[49,149138,149139],{"class":59},"\"2024-10-01\"",[49,149141,13132],{"class":73},[49,149143,84615],{"class":59},[49,149145,51968],{"class":73},[49,149147,92554],{"class":159},[49,149149,5627],{"class":73},[49,149151,149152,149154,149156,149158,149161,149163,149165,149167,149170],{"class":51,"line":241},[49,149153,148916],{"class":73},[49,149155,148528],{"class":59},[49,149157,51968],{"class":73},[49,149159,149160],{"class":59},"\"2024-10-02\"",[49,149162,13132],{"class":73},[49,149164,84615],{"class":59},[49,149166,51968],{"class":73},[49,149168,149169],{"class":159},"1800",[49,149171,5627],{"class":73},[49,149173,149174,149176,149178,149180,149183,149185,149187,149189,149192],{"class":51,"line":1920},[49,149175,148916],{"class":73},[49,149177,148528],{"class":59},[49,149179,51968],{"class":73},[49,149181,149182],{"class":59},"\"2024-10-03\"",[49,149184,13132],{"class":73},[49,149186,84615],{"class":59},[49,149188,51968],{"class":73},[49,149190,149191],{"class":159},"1500",[49,149193,5627],{"class":73},[49,149195,149196,149198,149200,149202,149205,149207,149209,149211,149214],{"class":51,"line":2011},[49,149197,148916],{"class":73},[49,149199,148528],{"class":59},[49,149201,51968],{"class":73},[49,149203,149204],{"class":59},"\"2024-10-04\"",[49,149206,13132],{"class":73},[49,149208,84615],{"class":59},[49,149210,51968],{"class":73},[49,149212,149213],{"class":159},"2100",[49,149215,5627],{"class":73},[49,149217,149218,149220,149222,149224,149227,149229,149231,149233,149236],{"class":51,"line":2017},[49,149219,148916],{"class":73},[49,149221,148528],{"class":59},[49,149223,51968],{"class":73},[49,149225,149226],{"class":59},"\"2024-10-05\"",[49,149228,13132],{"class":73},[49,149230,84615],{"class":59},[49,149232,51968],{"class":73},[49,149234,149235],{"class":159},"2600",[49,149237,5627],{"class":73},[49,149239,149240],{"class":51,"line":2029},[49,149241,33777],{"class":73},[49,149243,149244],{"class":51,"line":2311},[49,149245,399],{"emptyLinePlaceholder":398},[49,149247,149248,149250,149252,149255,149257,149259,149261,149263,149265],{"class":51,"line":2316},[49,149249,148331],{"class":73},[49,149251,78],{"class":77},[49,149253,149254],{"class":73}," [item[",[49,149256,148528],{"class":59},[49,149258,5140],{"class":73},[49,149260,3722],{"class":77},[49,149262,148740],{"class":73},[49,149264,26732],{"class":77},[49,149266,149267],{"class":73}," sales]\n",[49,149269,149270,149273,149275,149277,149279,149281,149283,149285,149287],{"class":51,"line":2322},[49,149271,149272],{"class":73},"amounts ",[49,149274,78],{"class":77},[49,149276,149254],{"class":73},[49,149278,84615],{"class":59},[49,149280,5140],{"class":73},[49,149282,3722],{"class":77},[49,149284,148740],{"class":73},[49,149286,26732],{"class":77},[49,149288,149267],{"class":73},[49,149290,149291],{"class":51,"line":2327},[49,149292,399],{"emptyLinePlaceholder":398},[49,149294,149295,149297,149299],{"class":51,"line":2341},[49,149296,147783],{"class":73},[49,149298,78],{"class":77},[49,149300,147788],{"class":73},[49,149302,149303],{"class":51,"line":2346},[49,149304,148372],{"class":73},[49,149306,149307],{"class":51,"line":2352},[49,149308,148180],{"class":73},[49,149310,149311,149313,149315,149317],{"class":51,"line":2373},[49,149312,148185],{"class":5913},[49,149314,78],{"class":77},[49,149316,147826],{"class":59},[49,149318,31997],{"class":73},[49,149320,149321,149323,149325],{"class":51,"line":2378},[49,149322,148196],{"class":5913},[49,149324,78],{"class":77},[49,149326,149327],{"class":73},"amounts,\n",[49,149329,149330,149332,149334,149336],{"class":51,"line":2392},[49,149331,148225],{"class":5913},[49,149333,78],{"class":77},[49,149335,32007],{"class":159},[49,149337,31997],{"class":73},[49,149339,149340,149342,149344,149346,149348,149350,149352],{"class":51,"line":2397},[49,149341,148236],{"class":5913},[49,149343,78],{"class":77},[49,149345,148241],{"class":73},[49,149347,148244],{"class":5913},[49,149349,78],{"class":77},[49,149351,32007],{"class":159},[49,149353,38578],{"class":73},[49,149355,149356],{"class":51,"line":2426},[49,149357,847],{"class":73},[49,149359,149360],{"class":51,"line":2431},[49,149361,147999],{"class":73},[49,149363,149364,149366,149368,149370,149372,149374,149377],{"class":51,"line":2448},[49,149365,148004],{"class":5913},[49,149367,78],{"class":77},[49,149369,148009],{"class":73},[49,149371,51938],{"class":5913},[49,149373,78],{"class":77},[49,149375,149376],{"class":59},"\"每日销售额\"",[49,149378,38578],{"class":73},[49,149380,149381,149383,149385,149387,149389,149391,149393],{"class":51,"line":2453},[49,149382,148023],{"class":5913},[49,149384,78],{"class":77},[49,149386,148028],{"class":73},[49,149388,80341],{"class":5913},[49,149390,78],{"class":77},[49,149392,148035],{"class":59},[49,149394,38578],{"class":73},[49,149396,149397,149399,149401,149403,149405,149407,149409],{"class":51,"line":2458},[49,149398,148042],{"class":5913},[49,149400,78],{"class":77},[49,149402,148028],{"class":73},[49,149404,80341],{"class":5913},[49,149406,78],{"class":77},[49,149408,148053],{"class":59},[49,149410,38578],{"class":73},[49,149412,149413,149415,149417,149419,149421,149423,149425],{"class":51,"line":2463},[49,149414,148060],{"class":5913},[49,149416,78],{"class":77},[49,149418,148065],{"class":73},[49,149420,148068],{"class":5913},[49,149422,78],{"class":77},[49,149424,148073],{"class":59},[49,149426,38578],{"class":73},[49,149428,149429,149432,149434],{"class":51,"line":2477},[49,149430,149431],{"class":5913},"    datazoom_opts",[49,149433,78],{"class":77},[49,149435,149436],{"class":73},"[opts.DataZoomOpts()],\n",[49,149438,149439],{"class":51,"line":2482},[49,149440,847],{"class":73},[49,149442,149443,149445,149448],{"class":51,"line":3274},[49,149444,147855],{"class":73},[49,149446,149447],{"class":59},"\"daily_sales.html\"",[49,149449,847],{"class":73},[14,149451,149452,149455],{},[46,149453,149454],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[782,149457,149459],{"id":149458},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,149461,149462],{},"如果数据结构如下：",[40,149464,149466],{"className":30909,"code":149465,"language":30911,"meta":27,"style":27},"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",[46,149467,149468,149476,149484,149506,149527,149532,149539,149559,149579,149583],{"__ignoreMap":27},[49,149469,149470,149472,149474],{"class":51,"line":52},[49,149471,102189],{"class":73},[49,149473,78],{"class":77},[49,149475,16269],{"class":73},[49,149477,149478,149481],{"class":51,"line":63},[49,149479,149480],{"class":59},"    \"北京\"",[49,149482,149483],{"class":73},": [\n",[49,149485,149486,149488,149490,149492,149495,149497,149500,149502,149504],{"class":51,"line":70},[49,149487,5614],{"class":73},[49,149489,148528],{"class":59},[49,149491,51968],{"class":73},[49,149493,149494],{"class":59},"\"2024-01-01\"",[49,149496,13132],{"class":73},[49,149498,149499],{"class":59},"\"confirm\"",[49,149501,51968],{"class":73},[49,149503,1275],{"class":159},[49,149505,5627],{"class":73},[49,149507,149508,149510,149512,149514,149517,149519,149521,149523,149525],{"class":51,"line":219},[49,149509,5614],{"class":73},[49,149511,148528],{"class":59},[49,149513,51968],{"class":73},[49,149515,149516],{"class":59},"\"2024-01-02\"",[49,149518,13132],{"class":73},[49,149520,149499],{"class":59},[49,149522,51968],{"class":73},[49,149524,1327],{"class":159},[49,149526,5627],{"class":73},[49,149528,149529],{"class":51,"line":233},[49,149530,149531],{"class":73},"    ],\n",[49,149533,149534,149537],{"class":51,"line":241},[49,149535,149536],{"class":59},"    \"上海\"",[49,149538,149483],{"class":73},[49,149540,149541,149543,149545,149547,149549,149551,149553,149555,149557],{"class":51,"line":1920},[49,149542,5614],{"class":73},[49,149544,148528],{"class":59},[49,149546,51968],{"class":73},[49,149548,149494],{"class":59},[49,149550,13132],{"class":73},[49,149552,149499],{"class":59},[49,149554,51968],{"class":73},[49,149556,1224],{"class":159},[49,149558,5627],{"class":73},[49,149560,149561,149563,149565,149567,149569,149571,149573,149575,149577],{"class":51,"line":2011},[49,149562,5614],{"class":73},[49,149564,148528],{"class":59},[49,149566,51968],{"class":73},[49,149568,149516],{"class":59},[49,149570,13132],{"class":73},[49,149572,149499],{"class":59},[49,149574,51968],{"class":73},[49,149576,1352],{"class":159},[49,149578,5627],{"class":73},[49,149580,149581],{"class":51,"line":2017},[49,149582,149531],{"class":73},[49,149584,149585],{"class":51,"line":2029},[49,149586,2264],{"class":73},[14,149588,149589],{},"绘制多地区趋势：",[40,149591,149593],{"className":30909,"code":149592,"language":30911,"meta":27,"style":27},"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",[46,149594,149595,149609,149619,149623,149648,149652,149660,149664,149668,149680,149702,149715,149719,149723,149740,149756,149760],{"__ignoreMap":27},[49,149596,149597,149599,149601,149603,149605,149607],{"class":51,"line":52},[49,149598,31268],{"class":77},[49,149600,147910],{"class":73},[49,149602,30923],{"class":77},[49,149604,147915],{"class":73},[49,149606,31914],{"class":77},[49,149608,147920],{"class":73},[49,149610,149611,149613,149615,149617],{"class":51,"line":63},[49,149612,31268],{"class":77},[49,149614,147769],{"class":73},[49,149616,30923],{"class":77},[49,149618,147774],{"class":73},[49,149620,149621],{"class":51,"line":70},[49,149622,399],{"emptyLinePlaceholder":398},[49,149624,149625,149627,149629,149631,149633,149635,149637,149639,149641,149644,149646],{"class":51,"line":219},[49,149626,148331],{"class":73},[49,149628,78],{"class":77},[49,149630,149254],{"class":73},[49,149632,148528],{"class":59},[49,149634,5140],{"class":73},[49,149636,3722],{"class":77},[49,149638,148740],{"class":73},[49,149640,26732],{"class":77},[49,149642,149643],{"class":73}," data[",[49,149645,69800],{"class":59},[49,149647,78058],{"class":73},[49,149649,149650],{"class":51,"line":233},[49,149651,399],{"emptyLinePlaceholder":398},[49,149653,149654,149656,149658],{"class":51,"line":241},[49,149655,147783],{"class":73},[49,149657,78],{"class":77},[49,149659,147788],{"class":73},[49,149661,149662],{"class":51,"line":1920},[49,149663,148372],{"class":73},[49,149665,149666],{"class":51,"line":2011},[49,149667,399],{"emptyLinePlaceholder":398},[49,149669,149670,149672,149675,149677],{"class":51,"line":2017},[49,149671,3722],{"class":77},[49,149673,149674],{"class":73}," city, records ",[49,149676,26732],{"class":77},[49,149678,149679],{"class":73}," data.items():\n",[49,149681,149682,149685,149687,149689,149691,149693,149695,149697,149699],{"class":51,"line":2029},[49,149683,149684],{"class":73},"    values ",[49,149686,78],{"class":77},[49,149688,149254],{"class":73},[49,149690,149499],{"class":59},[49,149692,5140],{"class":73},[49,149694,3722],{"class":77},[49,149696,148740],{"class":73},[49,149698,26732],{"class":77},[49,149700,149701],{"class":73}," records]\n",[49,149703,149704,149707,149709,149711,149713],{"class":51,"line":2311},[49,149705,149706],{"class":73},"    line.add_yaxis(city, values, ",[49,149708,148276],{"class":5913},[49,149710,78],{"class":77},[49,149712,32007],{"class":159},[49,149714,847],{"class":73},[49,149716,149717],{"class":51,"line":2316},[49,149718,399],{"emptyLinePlaceholder":398},[49,149720,149721],{"class":51,"line":2322},[49,149722,147999],{"class":73},[49,149724,149725,149727,149729,149731,149733,149735,149738],{"class":51,"line":2327},[49,149726,148004],{"class":5913},[49,149728,78],{"class":77},[49,149730,148009],{"class":73},[49,149732,51938],{"class":5913},[49,149734,78],{"class":77},[49,149736,149737],{"class":59},"\"多地区趋势图\"",[49,149739,38578],{"class":73},[49,149741,149742,149744,149746,149748,149750,149752,149754],{"class":51,"line":2341},[49,149743,148060],{"class":5913},[49,149745,78],{"class":77},[49,149747,148065],{"class":73},[49,149749,148068],{"class":5913},[49,149751,78],{"class":77},[49,149753,148073],{"class":59},[49,149755,38578],{"class":73},[49,149757,149758],{"class":51,"line":2346},[49,149759,847],{"class":73},[49,149761,149762,149764,149767],{"class":51,"line":2352},[49,149763,147855],{"class":73},[49,149765,149766],{"class":59},"\"trend.html\"",[49,149768,847],{"class":73},[14,149770,149771],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[782,149773,149775],{"id":149774},"_1012-易错点","10.12 易错点",[30,149777,149778,149784,149790,149800,149806],{},[33,149779,149780,149783],{},[46,149781,149782],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[33,149785,149786,149789],{},[46,149787,149788],{},"render()"," 生成的是 HTML，不是图片。",[33,149791,149792,149793,149796,149797,28916],{},"JSON 字符串用 ",[46,149794,149795],{},"json.loads()","，JSON 文件用 ",[46,149798,149799],{},"json.load()",[33,149801,149802,149803,28916],{},"中文 JSON 保存时加 ",[46,149804,149805],{},"ensure_ascii=False",[33,149807,149808],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[782,149810,149812],{"id":149811},"_1013-本章练习","10.13 本章练习",[30,149814,149815,149818,149821,149824,149827],{},[33,149816,149817],{},"安装 pyecharts 并生成第一个折线图。",[33,149819,149820],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[33,149822,149823],{},"绘制两条折线，对比线上和线下销售额。",[33,149825,149826],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[33,149828,149829],{},"对含有空值的销售数据进行清洗后再绘图。",[757,149831,149832],{},"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":27,"searchDepth":63,"depth":63,"links":149834},[149835,149836,149837,149838,149839,149840,149841,149842,149843,149844,149845,149846,149847],{"id":147451,"depth":63,"text":147452},{"id":147526,"depth":63,"text":147527},{"id":147705,"depth":63,"text":147706},{"id":147756,"depth":63,"text":147757},{"id":147890,"depth":63,"text":147891},{"id":148166,"depth":63,"text":148167},{"id":148292,"depth":63,"text":148293},{"id":148503,"depth":63,"text":148504},{"id":148874,"depth":63,"text":148875},{"id":149086,"depth":63,"text":149087},{"id":149458,"depth":63,"text":149459},{"id":149774,"depth":63,"text":149775},{"id":149811,"depth":63,"text":149812},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147443,"description":24072},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149854,"title":149855,"body":149856,"description":24072,"extension":766,"meta":152216,"navigation":398,"path":152217,"seo":152218,"stem":152219,"__hash__":152220},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149857,"toc":152193},[149858,149861,149865,149868,149871,149947,149950,150041,150044,150048,150051,150095,150108,150112,150115,150182,150185,150189,150192,150276,150284,150288,150293,150434,150437,150448,150454,150460,150574,150578,150581,150584,150837,150840,150844,150847,150951,150954,150958,151109,151113,151120,151233,151237,151240,151346,151349,151353,151356,151387,151390,151495,151498,151502,151506,151516,151584,151588,151595,151659,151662,151666,151672,151768,151777,151781,152105,152114,152118,152146,152150,152190],[10,149859,149855],{"id":149860},"_11-面向对象基础",[782,149862,149864],{"id":149863},"_111-什么是面向对象","11.1 什么是面向对象",[14,149866,149867],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149869,149870],{},"面向过程：",[40,149872,149874],{"className":30909,"code":149873,"language":30911,"meta":27,"style":27},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[46,149875,149876,149885,149893,149897,149907,149938,149942],{"__ignoreMap":27},[49,149877,149878,149880,149882],{"class":51,"line":52},[49,149879,147067],{"class":73},[49,149881,78],{"class":77},[49,149883,149884],{"class":59}," \"小明\"\n",[49,149886,149887,149889,149891],{"class":51,"line":63},[49,149888,147077],{"class":73},[49,149890,78],{"class":77},[49,149892,147082],{"class":159},[49,149894,149895],{"class":51,"line":70},[49,149896,399],{"emptyLinePlaceholder":398},[49,149898,149899,149901,149904],{"class":51,"line":219},[49,149900,32478],{"class":77},[49,149902,149903],{"class":55}," introduce",[49,149905,149906],{"class":73},"(name, age):\n",[49,149908,149909,149911,149913,149915,149918,149920,149922,149924,149927,149929,149931,149933,149936],{"class":51,"line":233},[49,149910,31830],{"class":159},[49,149912,841],{"class":73},[49,149914,891],{"class":77},[49,149916,149917],{"class":59},"\"我叫",[49,149919,1725],{"class":159},[49,149921,80341],{"class":73},[49,149923,1775],{"class":159},[49,149925,149926],{"class":59},"，今年",[49,149928,1725],{"class":159},[49,149930,70752],{"class":73},[49,149932,1775],{"class":159},[49,149934,149935],{"class":59},"岁\"",[49,149937,847],{"class":73},[49,149939,149940],{"class":51,"line":241},[49,149941,399],{"emptyLinePlaceholder":398},[49,149943,149944],{"class":51,"line":1920},[49,149945,149946],{"class":73},"introduce(name, age)\n",[14,149948,149949],{},"面向对象：",[40,149951,149953],{"className":30909,"code":149952,"language":30911,"meta":27,"style":27},"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",[46,149954,149955,149963,149971,150000,150004,150008,150018,150027,150036],{"__ignoreMap":27},[49,149956,149957,149959,149961],{"class":51,"line":52},[49,149958,15391],{"class":77},[49,149960,8595],{"class":55},[49,149962,4436],{"class":73},[49,149964,149965,149967,149969],{"class":51,"line":63},[49,149966,31332],{"class":77},[49,149968,149903],{"class":55},[49,149970,31338],{"class":73},[49,149972,149973,149975,149977,149979,149981,149984,149986,149988,149990,149992,149994,149996,149998],{"class":51,"line":70},[49,149974,32982],{"class":159},[49,149976,841],{"class":73},[49,149978,891],{"class":77},[49,149980,149917],{"class":59},[49,149982,149983],{"class":159},"{self",[49,149985,80832],{"class":73},[49,149987,1775],{"class":159},[49,149989,149926],{"class":59},[49,149991,149983],{"class":159},[49,149993,80844],{"class":73},[49,149995,1775],{"class":159},[49,149997,149935],{"class":59},[49,149999,847],{"class":73},[49,150001,150002],{"class":51,"line":219},[49,150003,399],{"emptyLinePlaceholder":398},[49,150005,150006],{"class":51,"line":233},[49,150007,399],{"emptyLinePlaceholder":398},[49,150009,150010,150013,150015],{"class":51,"line":241},[49,150011,150012],{"class":73},"student ",[49,150014,78],{"class":77},[49,150016,150017],{"class":73}," Student()\n",[49,150019,150020,150023,150025],{"class":51,"line":1920},[49,150021,150022],{"class":73},"student.name ",[49,150024,78],{"class":77},[49,150026,149884],{"class":59},[49,150028,150029,150032,150034],{"class":51,"line":2011},[49,150030,150031],{"class":73},"student.age ",[49,150033,78],{"class":77},[49,150035,147082],{"class":159},[49,150037,150038],{"class":51,"line":2017},[49,150039,150040],{"class":73},"student.introduce()\n",[14,150042,150043],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[782,150045,150047],{"id":150046},"_112-类和对象","11.2 类和对象",[14,150049,150050],{},"类是模板，对象是根据模板创建出来的具体实例。",[40,150052,150054],{"className":30909,"code":150053,"language":30911,"meta":27,"style":27},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[46,150055,150056,150064,150069,150073,150077,150086],{"__ignoreMap":27},[49,150057,150058,150060,150062],{"class":51,"line":52},[49,150059,15391],{"class":77},[49,150061,8595],{"class":55},[49,150063,4436],{"class":73},[49,150065,150066],{"class":51,"line":63},[49,150067,150068],{"class":77},"    pass\n",[49,150070,150071],{"class":51,"line":70},[49,150072,399],{"emptyLinePlaceholder":398},[49,150074,150075],{"class":51,"line":219},[49,150076,399],{"emptyLinePlaceholder":398},[49,150078,150079,150082,150084],{"class":51,"line":233},[49,150080,150081],{"class":73},"student1 ",[49,150083,78],{"class":77},[49,150085,150017],{"class":73},[49,150087,150088,150091,150093],{"class":51,"line":241},[49,150089,150090],{"class":73},"student2 ",[49,150092,78],{"class":77},[49,150094,150017],{"class":73},[14,150096,150097,150100,150101,101549,150104,150107],{},[46,150098,150099],{},"Student"," 是类，",[46,150102,150103],{},"student1",[46,150105,150106],{},"student2"," 是对象。",[782,150109,150111],{"id":150110},"_113-属性","11.3 属性",[14,150113,150114],{},"属性是对象保存的数据。",[40,150116,150118],{"className":30909,"code":150117,"language":30911,"meta":27,"style":27},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[46,150119,150120,150128,150132,150136,150140,150148,150156,150164,150168,150175],{"__ignoreMap":27},[49,150121,150122,150124,150126],{"class":51,"line":52},[49,150123,15391],{"class":77},[49,150125,8595],{"class":55},[49,150127,4436],{"class":73},[49,150129,150130],{"class":51,"line":63},[49,150131,150068],{"class":77},[49,150133,150134],{"class":51,"line":70},[49,150135,399],{"emptyLinePlaceholder":398},[49,150137,150138],{"class":51,"line":219},[49,150139,399],{"emptyLinePlaceholder":398},[49,150141,150142,150144,150146],{"class":51,"line":233},[49,150143,150012],{"class":73},[49,150145,78],{"class":77},[49,150147,150017],{"class":73},[49,150149,150150,150152,150154],{"class":51,"line":241},[49,150151,150022],{"class":73},[49,150153,78],{"class":77},[49,150155,149884],{"class":59},[49,150157,150158,150160,150162],{"class":51,"line":1920},[49,150159,150031],{"class":73},[49,150161,78],{"class":77},[49,150163,147082],{"class":159},[49,150165,150166],{"class":51,"line":2011},[49,150167,399],{"emptyLinePlaceholder":398},[49,150169,150170,150172],{"class":51,"line":2017},[49,150171,30946],{"class":159},[49,150173,150174],{"class":73},"(student.name)\n",[49,150176,150177,150179],{"class":51,"line":2029},[49,150178,30946],{"class":159},[49,150180,150181],{"class":73},"(student.age)\n",[14,150183,150184],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[782,150186,150188],{"id":150187},"_114-方法","11.4 方法",[14,150190,150191],{},"类中的函数叫方法。",[40,150193,150194],{"className":30909,"code":149952,"language":30911,"meta":27,"style":27},[46,150195,150196,150204,150212,150240,150244,150248,150256,150264,150272],{"__ignoreMap":27},[49,150197,150198,150200,150202],{"class":51,"line":52},[49,150199,15391],{"class":77},[49,150201,8595],{"class":55},[49,150203,4436],{"class":73},[49,150205,150206,150208,150210],{"class":51,"line":63},[49,150207,31332],{"class":77},[49,150209,149903],{"class":55},[49,150211,31338],{"class":73},[49,150213,150214,150216,150218,150220,150222,150224,150226,150228,150230,150232,150234,150236,150238],{"class":51,"line":70},[49,150215,32982],{"class":159},[49,150217,841],{"class":73},[49,150219,891],{"class":77},[49,150221,149917],{"class":59},[49,150223,149983],{"class":159},[49,150225,80832],{"class":73},[49,150227,1775],{"class":159},[49,150229,149926],{"class":59},[49,150231,149983],{"class":159},[49,150233,80844],{"class":73},[49,150235,1775],{"class":159},[49,150237,149935],{"class":59},[49,150239,847],{"class":73},[49,150241,150242],{"class":51,"line":219},[49,150243,399],{"emptyLinePlaceholder":398},[49,150245,150246],{"class":51,"line":233},[49,150247,399],{"emptyLinePlaceholder":398},[49,150249,150250,150252,150254],{"class":51,"line":241},[49,150251,150012],{"class":73},[49,150253,78],{"class":77},[49,150255,150017],{"class":73},[49,150257,150258,150260,150262],{"class":51,"line":1920},[49,150259,150022],{"class":73},[49,150261,78],{"class":77},[49,150263,149884],{"class":59},[49,150265,150266,150268,150270],{"class":51,"line":2011},[49,150267,150031],{"class":73},[49,150269,78],{"class":77},[49,150271,147082],{"class":159},[49,150273,150274],{"class":51,"line":2017},[49,150275,150040],{"class":73},[14,150277,150278,150280,150281,150283],{},[46,150279,31354],{}," 表示当前对象。调用方法时不需要手动传入 ",[46,150282,31354],{},"，Python 会自动传。",[782,150285,150287],{"id":150286},"_115-构造方法__init__","11.5 构造方法__init__",[14,150289,150290,150292],{},[46,150291,31360],{}," 在对象创建时自动执行，用于初始化属性。",[40,150294,150296],{"className":30909,"code":150295,"language":30911,"meta":27,"style":27},"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",[46,150297,150298,150306,150315,150327,150339,150350,150354,150362,150400,150404,150408,150430],{"__ignoreMap":27},[49,150299,150300,150302,150304],{"class":51,"line":52},[49,150301,15391],{"class":77},[49,150303,8595],{"class":55},[49,150305,4436],{"class":73},[49,150307,150308,150310,150312],{"class":51,"line":63},[49,150309,31332],{"class":77},[49,150311,31335],{"class":159},[49,150313,150314],{"class":73},"(self, name, age, score):\n",[49,150316,150317,150319,150322,150324],{"class":51,"line":70},[49,150318,31376],{"class":159},[49,150320,150321],{"class":73},".name ",[49,150323,78],{"class":77},[49,150325,150326],{"class":73}," name\n",[49,150328,150329,150331,150334,150336],{"class":51,"line":219},[49,150330,31376],{"class":159},[49,150332,150333],{"class":73},".age ",[49,150335,78],{"class":77},[49,150337,150338],{"class":73}," age\n",[49,150340,150341,150343,150346,150348],{"class":51,"line":233},[49,150342,31376],{"class":159},[49,150344,150345],{"class":73},".score ",[49,150347,78],{"class":77},[49,150349,2278],{"class":73},[49,150351,150352],{"class":51,"line":241},[49,150353,399],{"emptyLinePlaceholder":398},[49,150355,150356,150358,150360],{"class":51,"line":1920},[49,150357,31332],{"class":77},[49,150359,149903],{"class":55},[49,150361,31338],{"class":73},[49,150363,150364,150366,150368,150370,150372,150374,150376,150378,150380,150382,150384,150386,150389,150391,150394,150396,150398],{"class":51,"line":2011},[49,150365,32982],{"class":159},[49,150367,841],{"class":73},[49,150369,891],{"class":77},[49,150371,149917],{"class":59},[49,150373,149983],{"class":159},[49,150375,80832],{"class":73},[49,150377,1775],{"class":159},[49,150379,149926],{"class":59},[49,150381,149983],{"class":159},[49,150383,80844],{"class":73},[49,150385,1775],{"class":159},[49,150387,150388],{"class":59},"岁，成绩",[49,150390,149983],{"class":159},[49,150392,150393],{"class":73},".score",[49,150395,1775],{"class":159},[49,150397,1080],{"class":59},[49,150399,847],{"class":73},[49,150401,150402],{"class":51,"line":2017},[49,150403,399],{"emptyLinePlaceholder":398},[49,150405,150406],{"class":51,"line":2029},[49,150407,399],{"emptyLinePlaceholder":398},[49,150409,150410,150412,150414,150417,150420,150422,150424,150426,150428],{"class":51,"line":2311},[49,150411,150012],{"class":73},[49,150413,78],{"class":77},[49,150415,150416],{"class":73}," Student(",[49,150418,150419],{"class":59},"\"小明\"",[49,150421,13132],{"class":73},[49,150423,1479],{"class":159},[49,150425,13132],{"class":73},[49,150427,1818],{"class":159},[49,150429,847],{"class":73},[49,150431,150432],{"class":51,"line":2316},[49,150433,150040],{"class":73},[14,150435,150436],{},"构造方法的好处：",[30,150438,150439,150442,150445],{},[33,150440,150441],{},"创建对象时必须提供必要数据。",[33,150443,150444],{},"属性初始化集中，不容易漏。",[33,150446,150447],{},"对象状态更完整。",[782,150449,150451,150452],{"id":150450},"_116-str","11.6 ",[112,150453,1999],{},[14,150455,150456,150457,28916],{},"直接打印对象时，默认输出不直观。可以定义 ",[46,150458,150459],{},"__str__",[40,150461,150463],{"className":30909,"code":150462,"language":30911,"meta":27,"style":27},"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",[46,150464,150465,150473,150482,150492,150502,150506,150515,150543,150547,150551,150567],{"__ignoreMap":27},[49,150466,150467,150469,150471],{"class":51,"line":52},[49,150468,15391],{"class":77},[49,150470,8595],{"class":55},[49,150472,4436],{"class":73},[49,150474,150475,150477,150479],{"class":51,"line":63},[49,150476,31332],{"class":77},[49,150478,31335],{"class":159},[49,150480,150481],{"class":73},"(self, name, age):\n",[49,150483,150484,150486,150488,150490],{"class":51,"line":70},[49,150485,31376],{"class":159},[49,150487,150321],{"class":73},[49,150489,78],{"class":77},[49,150491,150326],{"class":73},[49,150493,150494,150496,150498,150500],{"class":51,"line":219},[49,150495,31376],{"class":159},[49,150497,150333],{"class":73},[49,150499,78],{"class":77},[49,150501,150338],{"class":73},[49,150503,150504],{"class":51,"line":233},[49,150505,399],{"emptyLinePlaceholder":398},[49,150507,150508,150510,150513],{"class":51,"line":241},[49,150509,31332],{"class":77},[49,150511,150512],{"class":159}," __str__",[49,150514,31338],{"class":73},[49,150516,150517,150519,150522,150525,150527,150529,150531,150534,150536,150538,150540],{"class":51,"line":1920},[49,150518,15449],{"class":77},[49,150520,150521],{"class":77}," f",[49,150523,150524],{"class":59},"\"Student(name=",[49,150526,149983],{"class":159},[49,150528,80832],{"class":73},[49,150530,1775],{"class":159},[49,150532,150533],{"class":59},", age=",[49,150535,149983],{"class":159},[49,150537,80844],{"class":73},[49,150539,1775],{"class":159},[49,150541,150542],{"class":59},")\"\n",[49,150544,150545],{"class":51,"line":2011},[49,150546,399],{"emptyLinePlaceholder":398},[49,150548,150549],{"class":51,"line":2017},[49,150550,399],{"emptyLinePlaceholder":398},[49,150552,150553,150555,150557,150559,150561,150563,150565],{"class":51,"line":2029},[49,150554,150012],{"class":73},[49,150556,78],{"class":77},[49,150558,150416],{"class":73},[49,150560,150419],{"class":59},[49,150562,13132],{"class":73},[49,150564,1479],{"class":159},[49,150566,847],{"class":73},[49,150568,150569,150571],{"class":51,"line":2311},[49,150570,30946],{"class":159},[49,150572,150573],{"class":73},"(student)\n",[782,150575,150577],{"id":150576},"_117-封装","11.7 封装",[14,150579,150580],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150582,150583],{},"Python 中以双下划线开头的属性通常视为私有属性。",[40,150585,150587],{"className":30909,"code":150586,"language":30911,"meta":27,"style":27},"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",[46,150588,150589,150598,150607,150619,150631,150635,150644,150653,150657,150667,150680,150691,150696,150707,150711,150720,150732,150743,150747,150760,150771,150775,150786,150790,150794,150812,150821,150830],{"__ignoreMap":27},[49,150590,150591,150593,150596],{"class":51,"line":52},[49,150592,15391],{"class":77},[49,150594,150595],{"class":55}," Account",[49,150597,4436],{"class":73},[49,150599,150600,150602,150604],{"class":51,"line":63},[49,150601,31332],{"class":77},[49,150603,31335],{"class":159},[49,150605,150606],{"class":73},"(self, owner, balance):\n",[49,150608,150609,150611,150614,150616],{"class":51,"line":70},[49,150610,31376],{"class":159},[49,150612,150613],{"class":73},".owner ",[49,150615,78],{"class":77},[49,150617,150618],{"class":73}," owner\n",[49,150620,150621,150623,150626,150628],{"class":51,"line":219},[49,150622,31376],{"class":159},[49,150624,150625],{"class":73},".__balance ",[49,150627,78],{"class":77},[49,150629,150630],{"class":73}," balance\n",[49,150632,150633],{"class":51,"line":233},[49,150634,399],{"emptyLinePlaceholder":398},[49,150636,150637,150639,150642],{"class":51,"line":241},[49,150638,31332],{"class":77},[49,150640,150641],{"class":55}," get_balance",[49,150643,31338],{"class":73},[49,150645,150646,150648,150650],{"class":51,"line":1920},[49,150647,15449],{"class":77},[49,150649,39404],{"class":159},[49,150651,150652],{"class":73},".__balance\n",[49,150654,150655],{"class":51,"line":2011},[49,150656,399],{"emptyLinePlaceholder":398},[49,150658,150659,150661,150664],{"class":51,"line":2017},[49,150660,31332],{"class":77},[49,150662,150663],{"class":55}," deposit",[49,150665,150666],{"class":73},"(self, money):\n",[49,150668,150669,150671,150674,150676,150678],{"class":51,"line":2029},[49,150670,3194],{"class":77},[49,150672,150673],{"class":73}," money ",[49,150675,2287],{"class":77},[49,150677,4790],{"class":159},[49,150679,4436],{"class":73},[49,150681,150682,150684,150686,150689],{"class":51,"line":2311},[49,150683,35181],{"class":159},[49,150685,841],{"class":73},[49,150687,150688],{"class":59},"\"存款金额必须大于0\"",[49,150690,847],{"class":73},[49,150692,150693],{"class":51,"line":2316},[49,150694,150695],{"class":77},"            return\n",[49,150697,150698,150700,150702,150704],{"class":51,"line":2322},[49,150699,31376],{"class":159},[49,150701,150625],{"class":73},[49,150703,10174],{"class":77},[49,150705,150706],{"class":73}," money\n",[49,150708,150709],{"class":51,"line":2327},[49,150710,399],{"emptyLinePlaceholder":398},[49,150712,150713,150715,150718],{"class":51,"line":2341},[49,150714,31332],{"class":77},[49,150716,150717],{"class":55}," withdraw",[49,150719,150666],{"class":73},[49,150721,150722,150724,150726,150728,150730],{"class":51,"line":2346},[49,150723,3194],{"class":77},[49,150725,150673],{"class":73},[49,150727,2287],{"class":77},[49,150729,4790],{"class":159},[49,150731,4436],{"class":73},[49,150733,150734,150736,150738,150741],{"class":51,"line":2352},[49,150735,35181],{"class":159},[49,150737,841],{"class":73},[49,150739,150740],{"class":59},"\"取款金额必须大于0\"",[49,150742,847],{"class":73},[49,150744,150745],{"class":51,"line":2373},[49,150746,150695],{"class":77},[49,150748,150749,150751,150753,150755,150757],{"class":51,"line":2378},[49,150750,3194],{"class":77},[49,150752,150673],{"class":73},[49,150754,1789],{"class":77},[49,150756,39404],{"class":159},[49,150758,150759],{"class":73},".__balance:\n",[49,150761,150762,150764,150766,150769],{"class":51,"line":2392},[49,150763,35181],{"class":159},[49,150765,841],{"class":73},[49,150767,150768],{"class":59},"\"余额不足\"",[49,150770,847],{"class":73},[49,150772,150773],{"class":51,"line":2397},[49,150774,150695],{"class":77},[49,150776,150777,150779,150781,150784],{"class":51,"line":2426},[49,150778,31376],{"class":159},[49,150780,150625],{"class":73},[49,150782,150783],{"class":77},"-=",[49,150785,150706],{"class":73},[49,150787,150788],{"class":51,"line":2431},[49,150789,399],{"emptyLinePlaceholder":398},[49,150791,150792],{"class":51,"line":2448},[49,150793,399],{"emptyLinePlaceholder":398},[49,150795,150796,150799,150801,150804,150806,150808,150810],{"class":51,"line":2453},[49,150797,150798],{"class":73},"account ",[49,150800,78],{"class":77},[49,150802,150803],{"class":73}," Account(",[49,150805,150419],{"class":59},[49,150807,13132],{"class":73},[49,150809,7107],{"class":159},[49,150811,847],{"class":73},[49,150813,150814,150817,150819],{"class":51,"line":2458},[49,150815,150816],{"class":73},"account.deposit(",[49,150818,2421],{"class":159},[49,150820,847],{"class":73},[49,150822,150823,150826,150828],{"class":51,"line":2463},[49,150824,150825],{"class":73},"account.withdraw(",[49,150827,1140],{"class":159},[49,150829,847],{"class":73},[49,150831,150832,150834],{"class":51,"line":2477},[49,150833,30946],{"class":159},[49,150835,150836],{"class":73},"(account.get_balance())\n",[14,150838,150839],{},"封装的意义是避免外部随意修改内部状态。",[782,150841,150843],{"id":150842},"_118-继承","11.8 继承",[14,150845,150846],{},"继承可以让子类复用父类的属性和方法。",[40,150848,150850],{"className":30909,"code":150849,"language":30911,"meta":27,"style":27},"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",[46,150851,150852,150861,150870,150881,150885,150889,150903,150912,150923,150927,150931,150941,150946],{"__ignoreMap":27},[49,150853,150854,150856,150859],{"class":51,"line":52},[49,150855,15391],{"class":77},[49,150857,150858],{"class":55}," Animal",[49,150860,4436],{"class":73},[49,150862,150863,150865,150868],{"class":51,"line":63},[49,150864,31332],{"class":77},[49,150866,150867],{"class":55}," eat",[49,150869,31338],{"class":73},[49,150871,150872,150874,150876,150879],{"class":51,"line":70},[49,150873,32982],{"class":159},[49,150875,841],{"class":73},[49,150877,150878],{"class":59},"\"吃东西\"",[49,150880,847],{"class":73},[49,150882,150883],{"class":51,"line":219},[49,150884,399],{"emptyLinePlaceholder":398},[49,150886,150887],{"class":51,"line":233},[49,150888,399],{"emptyLinePlaceholder":398},[49,150890,150891,150893,150896,150898,150901],{"class":51,"line":241},[49,150892,15391],{"class":77},[49,150894,150895],{"class":55}," Dog",[49,150897,841],{"class":73},[49,150899,150900],{"class":55},"Animal",[49,150902,31317],{"class":73},[49,150904,150905,150907,150910],{"class":51,"line":1920},[49,150906,31332],{"class":77},[49,150908,150909],{"class":55}," bark",[49,150911,31338],{"class":73},[49,150913,150914,150916,150918,150921],{"class":51,"line":2011},[49,150915,32982],{"class":159},[49,150917,841],{"class":73},[49,150919,150920],{"class":59},"\"汪汪\"",[49,150922,847],{"class":73},[49,150924,150925],{"class":51,"line":2017},[49,150926,399],{"emptyLinePlaceholder":398},[49,150928,150929],{"class":51,"line":2029},[49,150930,399],{"emptyLinePlaceholder":398},[49,150932,150933,150936,150938],{"class":51,"line":2311},[49,150934,150935],{"class":73},"dog ",[49,150937,78],{"class":77},[49,150939,150940],{"class":73}," Dog()\n",[49,150942,150943],{"class":51,"line":2316},[49,150944,150945],{"class":73},"dog.eat()\n",[49,150947,150948],{"class":51,"line":2322},[49,150949,150950],{"class":73},"dog.bark()\n",[14,150952,150953],{},"子类可以扩展新方法，也可以重写父类方法。",[782,150955,150957],{"id":150956},"_119-方法重写","11.9 方法重写",[40,150959,150961],{"className":30909,"code":150960,"language":30911,"meta":27,"style":27},"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",[46,150962,150963,150971,150980,150991,150995,150999,151011,151019,151029,151033,151037,151050,151058,151069,151073,151077,151085,151095,151099,151104],{"__ignoreMap":27},[49,150964,150965,150967,150969],{"class":51,"line":52},[49,150966,15391],{"class":77},[49,150968,150858],{"class":55},[49,150970,4436],{"class":73},[49,150972,150973,150975,150978],{"class":51,"line":63},[49,150974,31332],{"class":77},[49,150976,150977],{"class":55}," speak",[49,150979,31338],{"class":73},[49,150981,150982,150984,150986,150989],{"class":51,"line":70},[49,150983,32982],{"class":159},[49,150985,841],{"class":73},[49,150987,150988],{"class":59},"\"动物叫\"",[49,150990,847],{"class":73},[49,150992,150993],{"class":51,"line":219},[49,150994,399],{"emptyLinePlaceholder":398},[49,150996,150997],{"class":51,"line":233},[49,150998,399],{"emptyLinePlaceholder":398},[49,151000,151001,151003,151005,151007,151009],{"class":51,"line":241},[49,151002,15391],{"class":77},[49,151004,150895],{"class":55},[49,151006,841],{"class":73},[49,151008,150900],{"class":55},[49,151010,31317],{"class":73},[49,151012,151013,151015,151017],{"class":51,"line":1920},[49,151014,31332],{"class":77},[49,151016,150977],{"class":55},[49,151018,31338],{"class":73},[49,151020,151021,151023,151025,151027],{"class":51,"line":2011},[49,151022,32982],{"class":159},[49,151024,841],{"class":73},[49,151026,150920],{"class":59},[49,151028,847],{"class":73},[49,151030,151031],{"class":51,"line":2017},[49,151032,399],{"emptyLinePlaceholder":398},[49,151034,151035],{"class":51,"line":2029},[49,151036,399],{"emptyLinePlaceholder":398},[49,151038,151039,151041,151044,151046,151048],{"class":51,"line":2311},[49,151040,15391],{"class":77},[49,151042,151043],{"class":55}," Cat",[49,151045,841],{"class":73},[49,151047,150900],{"class":55},[49,151049,31317],{"class":73},[49,151051,151052,151054,151056],{"class":51,"line":2316},[49,151053,31332],{"class":77},[49,151055,150977],{"class":55},[49,151057,31338],{"class":73},[49,151059,151060,151062,151064,151067],{"class":51,"line":2322},[49,151061,32982],{"class":159},[49,151063,841],{"class":73},[49,151065,151066],{"class":59},"\"喵喵\"",[49,151068,847],{"class":73},[49,151070,151071],{"class":51,"line":2327},[49,151072,399],{"emptyLinePlaceholder":398},[49,151074,151075],{"class":51,"line":2341},[49,151076,399],{"emptyLinePlaceholder":398},[49,151078,151079,151081,151083],{"class":51,"line":2346},[49,151080,150935],{"class":73},[49,151082,78],{"class":77},[49,151084,150940],{"class":73},[49,151086,151087,151090,151092],{"class":51,"line":2352},[49,151088,151089],{"class":73},"cat ",[49,151091,78],{"class":77},[49,151093,151094],{"class":73}," Cat()\n",[49,151096,151097],{"class":51,"line":2373},[49,151098,399],{"emptyLinePlaceholder":398},[49,151100,151101],{"class":51,"line":2378},[49,151102,151103],{"class":73},"dog.speak()\n",[49,151105,151106],{"class":51,"line":2392},[49,151107,151108],{"class":73},"cat.speak()\n",[782,151110,151112],{"id":151111},"_1110-super","11.10 super",[14,151114,151115,151116,151119],{},"子类可以通过 ",[46,151117,151118],{},"super()"," 调用父类方法。",[40,151121,151123],{"className":30909,"code":151122,"language":30911,"meta":27,"style":27},"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",[46,151124,151125,151133,151142,151152,151156,151160,151172,151181,151192,151202,151206,151210,151226],{"__ignoreMap":27},[49,151126,151127,151129,151131],{"class":51,"line":52},[49,151128,15391],{"class":77},[49,151130,16266],{"class":55},[49,151132,4436],{"class":73},[49,151134,151135,151137,151139],{"class":51,"line":63},[49,151136,31332],{"class":77},[49,151138,31335],{"class":159},[49,151140,151141],{"class":73},"(self, name):\n",[49,151143,151144,151146,151148,151150],{"class":51,"line":70},[49,151145,31376],{"class":159},[49,151147,150321],{"class":73},[49,151149,78],{"class":77},[49,151151,150326],{"class":73},[49,151153,151154],{"class":51,"line":219},[49,151155,399],{"emptyLinePlaceholder":398},[49,151157,151158],{"class":51,"line":233},[49,151159,399],{"emptyLinePlaceholder":398},[49,151161,151162,151164,151166,151168,151170],{"class":51,"line":241},[49,151163,15391],{"class":77},[49,151165,8595],{"class":55},[49,151167,841],{"class":73},[49,151169,19743],{"class":55},[49,151171,31317],{"class":73},[49,151173,151174,151176,151178],{"class":51,"line":1920},[49,151175,31332],{"class":77},[49,151177,31335],{"class":159},[49,151179,151180],{"class":73},"(self, name, score):\n",[49,151182,151183,151185,151187,151189],{"class":51,"line":2011},[49,151184,31348],{"class":159},[49,151186,17958],{"class":73},[49,151188,31360],{"class":159},[49,151190,151191],{"class":73},"(name)\n",[49,151193,151194,151196,151198,151200],{"class":51,"line":2017},[49,151195,31376],{"class":159},[49,151197,150345],{"class":73},[49,151199,78],{"class":77},[49,151201,2278],{"class":73},[49,151203,151204],{"class":51,"line":2029},[49,151205,399],{"emptyLinePlaceholder":398},[49,151207,151208],{"class":51,"line":2311},[49,151209,399],{"emptyLinePlaceholder":398},[49,151211,151212,151214,151216,151218,151220,151222,151224],{"class":51,"line":2316},[49,151213,150012],{"class":73},[49,151215,78],{"class":77},[49,151217,150416],{"class":73},[49,151219,150419],{"class":59},[49,151221,13132],{"class":73},[49,151223,1818],{"class":159},[49,151225,847],{"class":73},[49,151227,151228,151230],{"class":51,"line":2322},[49,151229,30946],{"class":159},[49,151231,151232],{"class":73},"(student.name, student.score)\n",[782,151234,151236],{"id":151235},"_1111-多态","11.11 多态",[14,151238,151239],{},"多态指不同对象响应同一个方法，表现出不同结果。",[40,151241,151243],{"className":30909,"code":151242,"language":30911,"meta":27,"style":27},"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",[46,151244,151245,151253,151261,151271,151275,151279,151287,151295,151305,151309,151313,151323,151328,151332,151336,151341],{"__ignoreMap":27},[49,151246,151247,151249,151251],{"class":51,"line":52},[49,151248,15391],{"class":77},[49,151250,150895],{"class":55},[49,151252,4436],{"class":73},[49,151254,151255,151257,151259],{"class":51,"line":63},[49,151256,31332],{"class":77},[49,151258,150977],{"class":55},[49,151260,31338],{"class":73},[49,151262,151263,151265,151267,151269],{"class":51,"line":70},[49,151264,32982],{"class":159},[49,151266,841],{"class":73},[49,151268,150920],{"class":59},[49,151270,847],{"class":73},[49,151272,151273],{"class":51,"line":219},[49,151274,399],{"emptyLinePlaceholder":398},[49,151276,151277],{"class":51,"line":233},[49,151278,399],{"emptyLinePlaceholder":398},[49,151280,151281,151283,151285],{"class":51,"line":241},[49,151282,15391],{"class":77},[49,151284,151043],{"class":55},[49,151286,4436],{"class":73},[49,151288,151289,151291,151293],{"class":51,"line":1920},[49,151290,31332],{"class":77},[49,151292,150977],{"class":55},[49,151294,31338],{"class":73},[49,151296,151297,151299,151301,151303],{"class":51,"line":2011},[49,151298,32982],{"class":159},[49,151300,841],{"class":73},[49,151302,151066],{"class":59},[49,151304,847],{"class":73},[49,151306,151307],{"class":51,"line":2017},[49,151308,399],{"emptyLinePlaceholder":398},[49,151310,151311],{"class":51,"line":2029},[49,151312,399],{"emptyLinePlaceholder":398},[49,151314,151315,151317,151320],{"class":51,"line":2311},[49,151316,32478],{"class":77},[49,151318,151319],{"class":55}," make_sound",[49,151321,151322],{"class":73},"(animal):\n",[49,151324,151325],{"class":51,"line":2316},[49,151326,151327],{"class":73},"    animal.speak()\n",[49,151329,151330],{"class":51,"line":2322},[49,151331,399],{"emptyLinePlaceholder":398},[49,151333,151334],{"class":51,"line":2327},[49,151335,399],{"emptyLinePlaceholder":398},[49,151337,151338],{"class":51,"line":2341},[49,151339,151340],{"class":73},"make_sound(Dog())\n",[49,151342,151343],{"class":51,"line":2346},[49,151344,151345],{"class":73},"make_sound(Cat())\n",[14,151347,151348],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[782,151350,151352],{"id":151351},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,151354,151355],{},"实例属性属于对象：",[40,151357,151359],{"className":30909,"code":151358,"language":30911,"meta":27,"style":27},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[46,151360,151361,151369,151377],{"__ignoreMap":27},[49,151362,151363,151365,151367],{"class":51,"line":52},[49,151364,15391],{"class":77},[49,151366,8595],{"class":55},[49,151368,4436],{"class":73},[49,151370,151371,151373,151375],{"class":51,"line":63},[49,151372,31332],{"class":77},[49,151374,31335],{"class":159},[49,151376,151141],{"class":73},[49,151378,151379,151381,151383,151385],{"class":51,"line":70},[49,151380,31376],{"class":159},[49,151382,150321],{"class":73},[49,151384,78],{"class":77},[49,151386,150326],{"class":73},[14,151388,151389],{},"类属性属于类，所有对象共享：",[40,151391,151393],{"className":30909,"code":151392,"language":30911,"meta":27,"style":27},"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",[46,151394,151395,151403,151413,151417,151425,151435,151439,151443,151456,151470,151474,151481,151488],{"__ignoreMap":27},[49,151396,151397,151399,151401],{"class":51,"line":52},[49,151398,15391],{"class":77},[49,151400,8595],{"class":55},[49,151402,4436],{"class":73},[49,151404,151405,151408,151410],{"class":51,"line":63},[49,151406,151407],{"class":73},"    school ",[49,151409,78],{"class":77},[49,151411,151412],{"class":59}," \"黑马学校\"\n",[49,151414,151415],{"class":51,"line":70},[49,151416,399],{"emptyLinePlaceholder":398},[49,151418,151419,151421,151423],{"class":51,"line":219},[49,151420,31332],{"class":77},[49,151422,31335],{"class":159},[49,151424,151141],{"class":73},[49,151426,151427,151429,151431,151433],{"class":51,"line":233},[49,151428,31376],{"class":159},[49,151430,150321],{"class":73},[49,151432,78],{"class":77},[49,151434,150326],{"class":73},[49,151436,151437],{"class":51,"line":241},[49,151438,399],{"emptyLinePlaceholder":398},[49,151440,151441],{"class":51,"line":1920},[49,151442,399],{"emptyLinePlaceholder":398},[49,151444,151445,151448,151450,151452,151454],{"class":51,"line":2011},[49,151446,151447],{"class":73},"s1 ",[49,151449,78],{"class":77},[49,151451,150416],{"class":73},[49,151453,150419],{"class":59},[49,151455,847],{"class":73},[49,151457,151458,151461,151463,151465,151468],{"class":51,"line":2017},[49,151459,151460],{"class":73},"s2 ",[49,151462,78],{"class":77},[49,151464,150416],{"class":73},[49,151466,151467],{"class":59},"\"小红\"",[49,151469,847],{"class":73},[49,151471,151472],{"class":51,"line":2029},[49,151473,399],{"emptyLinePlaceholder":398},[49,151475,151476,151478],{"class":51,"line":2311},[49,151477,30946],{"class":159},[49,151479,151480],{"class":73},"(s1.school)\n",[49,151482,151483,151485],{"class":51,"line":2316},[49,151484,30946],{"class":159},[49,151486,151487],{"class":73},"(s2.school)\n",[49,151489,151490,151492],{"class":51,"line":2322},[49,151491,30946],{"class":159},[49,151493,151494],{"class":73},"(Student.school)\n",[14,151496,151497],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[782,151499,151501],{"id":151500},"_1113-类方法和静态方法","11.13 类方法和静态方法",[18,151503,151505],{"id":151504},"_11131-类方法","11.13.1 类方法",[14,151507,151508,151509,151512,151513,28916],{},"类方法使用 ",[46,151510,151511],{},"@classmethod","，第一个参数通常是 ",[46,151514,151515],{},"cls",[40,151517,151519],{"className":30909,"code":151518,"language":30911,"meta":27,"style":27},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[46,151520,151521,151529,151537,151541,151549,151559,151569,151573,151577],{"__ignoreMap":27},[49,151522,151523,151525,151527],{"class":51,"line":52},[49,151524,15391],{"class":77},[49,151526,8595],{"class":55},[49,151528,4436],{"class":73},[49,151530,151531,151533,151535],{"class":51,"line":63},[49,151532,151407],{"class":73},[49,151534,78],{"class":77},[49,151536,151412],{"class":59},[49,151538,151539],{"class":51,"line":70},[49,151540,399],{"emptyLinePlaceholder":398},[49,151542,151543,151546],{"class":51,"line":219},[49,151544,151545],{"class":55},"    @",[49,151547,151548],{"class":159},"classmethod\n",[49,151550,151551,151553,151556],{"class":51,"line":233},[49,151552,31332],{"class":77},[49,151554,151555],{"class":55}," get_school",[49,151557,151558],{"class":73},"(cls):\n",[49,151560,151561,151563,151566],{"class":51,"line":241},[49,151562,15449],{"class":77},[49,151564,151565],{"class":159}," cls",[49,151567,151568],{"class":73},".school\n",[49,151570,151571],{"class":51,"line":1920},[49,151572,399],{"emptyLinePlaceholder":398},[49,151574,151575],{"class":51,"line":2011},[49,151576,399],{"emptyLinePlaceholder":398},[49,151578,151579,151581],{"class":51,"line":2017},[49,151580,30946],{"class":159},[49,151582,151583],{"class":73},"(Student.get_school())\n",[18,151585,151587],{"id":151586},"_11132-静态方法","11.13.2 静态方法",[14,151589,151590,151591,151594],{},"静态方法使用 ",[46,151592,151593],{},"@staticmethod","，不需要访问实例和类。",[40,151596,151598],{"className":30909,"code":151597,"language":30911,"meta":27,"style":27},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[46,151599,151600,151609,151616,151625,151636,151640,151644],{"__ignoreMap":27},[49,151601,151602,151604,151607],{"class":51,"line":52},[49,151603,15391],{"class":77},[49,151605,151606],{"class":55}," MathUtils",[49,151608,4436],{"class":73},[49,151610,151611,151613],{"class":51,"line":63},[49,151612,151545],{"class":55},[49,151614,151615],{"class":159},"staticmethod\n",[49,151617,151618,151620,151622],{"class":51,"line":70},[49,151619,31332],{"class":77},[49,151621,5906],{"class":55},[49,151623,151624],{"class":73},"(a, b):\n",[49,151626,151627,151629,151631,151633],{"class":51,"line":219},[49,151628,15449],{"class":77},[49,151630,11566],{"class":73},[49,151632,1310],{"class":77},[49,151634,151635],{"class":73}," b\n",[49,151637,151638],{"class":51,"line":233},[49,151639,399],{"emptyLinePlaceholder":398},[49,151641,151642],{"class":51,"line":241},[49,151643,399],{"emptyLinePlaceholder":398},[49,151645,151646,151648,151651,151653,151655,151657],{"class":51,"line":1920},[49,151647,30946],{"class":159},[49,151649,151650],{"class":73},"(MathUtils.add(",[49,151652,1047],{"class":159},[49,151654,13132],{"class":73},[49,151656,915],{"class":159},[49,151658,31028],{"class":73},[14,151660,151661],{},"静态方法本质上是放在类命名空间里的普通函数。",[782,151663,151665],{"id":151664},"_1114-dataclass","11.14 dataclass",[14,151667,151668,151671],{},[46,151669,151670],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[40,151673,151675],{"className":30909,"code":151674,"language":30911,"meta":27,"style":27},"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",[46,151676,151677,151689,151693,151697,151702,151710,151718,151726,151734,151738,151742,151762],{"__ignoreMap":27},[49,151678,151679,151681,151684,151686],{"class":51,"line":52},[49,151680,31268],{"class":77},[49,151682,151683],{"class":73}," dataclasses ",[49,151685,30923],{"class":77},[49,151687,151688],{"class":73}," dataclass\n",[49,151690,151691],{"class":51,"line":63},[49,151692,399],{"emptyLinePlaceholder":398},[49,151694,151695],{"class":51,"line":70},[49,151696,399],{"emptyLinePlaceholder":398},[49,151698,151699],{"class":51,"line":219},[49,151700,151701],{"class":55},"@dataclass\n",[49,151703,151704,151706,151708],{"class":51,"line":233},[49,151705,15391],{"class":77},[49,151707,8595],{"class":55},[49,151709,4436],{"class":73},[49,151711,151712,151715],{"class":51,"line":241},[49,151713,151714],{"class":73},"    name: ",[49,151716,151717],{"class":159},"str\n",[49,151719,151720,151723],{"class":51,"line":1920},[49,151721,151722],{"class":73},"    age: ",[49,151724,151725],{"class":159},"int\n",[49,151727,151728,151731],{"class":51,"line":2011},[49,151729,151730],{"class":73},"    score: ",[49,151732,151733],{"class":159},"float\n",[49,151735,151736],{"class":51,"line":2017},[49,151737,399],{"emptyLinePlaceholder":398},[49,151739,151740],{"class":51,"line":2029},[49,151741,399],{"emptyLinePlaceholder":398},[49,151743,151744,151746,151748,151750,151752,151754,151756,151758,151760],{"class":51,"line":2311},[49,151745,150012],{"class":73},[49,151747,78],{"class":77},[49,151749,150416],{"class":73},[49,151751,150419],{"class":59},[49,151753,13132],{"class":73},[49,151755,1479],{"class":159},[49,151757,13132],{"class":73},[49,151759,1818],{"class":159},[49,151761,847],{"class":73},[49,151763,151764,151766],{"class":51,"line":2316},[49,151765,30946],{"class":159},[49,151767,150573],{"class":73},[14,151769,151770,151771,1042,151773,151776],{},"它会自动生成 ",[46,151772,31360],{},[46,151774,151775],{},"__repr__"," 等方法。适合数据模型类。",[782,151778,151780],{"id":151779},"_1115-小案例学生类","11.15 小案例：学生类",[40,151782,151784],{"className":30909,"code":151783,"language":30911,"meta":27,"style":27},"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",[46,151785,151786,151794,151803,151815,151825,151835,151845,151849,151858,151871,151875,151884,151890,151902,151914,151926,151938,151942,151946,151952,151962,151971,151981,151989,151997,152006,152010,152014,152022,152058,152062,152066,152091,152098],{"__ignoreMap":27},[49,151787,151788,151790,151792],{"class":51,"line":52},[49,151789,15391],{"class":77},[49,151791,8595],{"class":55},[49,151793,4436],{"class":73},[49,151795,151796,151798,151800],{"class":51,"line":63},[49,151797,31332],{"class":77},[49,151799,31335],{"class":159},[49,151801,151802],{"class":73},"(self, student_id, name, age, score):\n",[49,151804,151805,151807,151810,151812],{"class":51,"line":70},[49,151806,31376],{"class":159},[49,151808,151809],{"class":73},".student_id ",[49,151811,78],{"class":77},[49,151813,151814],{"class":73}," student_id\n",[49,151816,151817,151819,151821,151823],{"class":51,"line":219},[49,151818,31376],{"class":159},[49,151820,150321],{"class":73},[49,151822,78],{"class":77},[49,151824,150326],{"class":73},[49,151826,151827,151829,151831,151833],{"class":51,"line":233},[49,151828,31376],{"class":159},[49,151830,150333],{"class":73},[49,151832,78],{"class":77},[49,151834,150338],{"class":73},[49,151836,151837,151839,151841,151843],{"class":51,"line":241},[49,151838,31376],{"class":159},[49,151840,150345],{"class":73},[49,151842,78],{"class":77},[49,151844,2278],{"class":73},[49,151846,151847],{"class":51,"line":1920},[49,151848,399],{"emptyLinePlaceholder":398},[49,151850,151851,151853,151856],{"class":51,"line":2011},[49,151852,31332],{"class":77},[49,151854,151855],{"class":55}," is_passed",[49,151857,31338],{"class":73},[49,151859,151860,151862,151864,151866,151868],{"class":51,"line":2017},[49,151861,15449],{"class":77},[49,151863,39404],{"class":159},[49,151865,150345],{"class":73},[49,151867,2409],{"class":77},[49,151869,151870],{"class":159}," 60\n",[49,151872,151873],{"class":51,"line":2029},[49,151874,399],{"emptyLinePlaceholder":398},[49,151876,151877,151879,151882],{"class":51,"line":2311},[49,151878,31332],{"class":77},[49,151880,151881],{"class":55}," to_dict",[49,151883,31338],{"class":73},[49,151885,151886,151888],{"class":51,"line":2316},[49,151887,15449],{"class":77},[49,151889,16269],{"class":73},[49,151891,151892,151895,151897,151899],{"class":51,"line":2322},[49,151893,151894],{"class":59},"            \"student_id\"",[49,151896,51968],{"class":73},[49,151898,31354],{"class":159},[49,151900,151901],{"class":73},".student_id,\n",[49,151903,151904,151907,151909,151911],{"class":51,"line":2327},[49,151905,151906],{"class":59},"            \"name\"",[49,151908,51968],{"class":73},[49,151910,31354],{"class":159},[49,151912,151913],{"class":73},".name,\n",[49,151915,151916,151919,151921,151923],{"class":51,"line":2341},[49,151917,151918],{"class":59},"            \"age\"",[49,151920,51968],{"class":73},[49,151922,31354],{"class":159},[49,151924,151925],{"class":73},".age,\n",[49,151927,151928,151931,151933,151935],{"class":51,"line":2346},[49,151929,151930],{"class":59},"            \"score\"",[49,151932,51968],{"class":73},[49,151934,31354],{"class":159},[49,151936,151937],{"class":73},".score,\n",[49,151939,151940],{"class":51,"line":2352},[49,151941,3226],{"class":73},[49,151943,151944],{"class":51,"line":2373},[49,151945,399],{"emptyLinePlaceholder":398},[49,151947,151948,151950],{"class":51,"line":2378},[49,151949,151545],{"class":55},[49,151951,151548],{"class":159},[49,151953,151954,151956,151959],{"class":51,"line":2392},[49,151955,31332],{"class":77},[49,151957,151958],{"class":55}," from_dict",[49,151960,151961],{"class":73},"(cls, data):\n",[49,151963,151964,151966,151968],{"class":51,"line":2397},[49,151965,15449],{"class":77},[49,151967,151565],{"class":159},[49,151969,151970],{"class":73},"(\n",[49,151972,151973,151976,151979],{"class":51,"line":2426},[49,151974,151975],{"class":73},"            data[",[49,151977,151978],{"class":59},"\"student_id\"",[49,151980,88367],{"class":73},[49,151982,151983,151985,151987],{"class":51,"line":2431},[49,151984,151975],{"class":73},[49,151986,63210],{"class":59},[49,151988,88367],{"class":73},[49,151990,151991,151993,151995],{"class":51,"line":2448},[49,151992,151975],{"class":73},[49,151994,69655],{"class":59},[49,151996,88367],{"class":73},[49,151998,151999,152001,152004],{"class":51,"line":2453},[49,152000,151975],{"class":73},[49,152002,152003],{"class":59},"\"score\"",[49,152005,88367],{"class":73},[49,152007,152008],{"class":51,"line":2458},[49,152009,38657],{"class":73},[49,152011,152012],{"class":51,"line":2463},[49,152013,399],{"emptyLinePlaceholder":398},[49,152015,152016,152018,152020],{"class":51,"line":2477},[49,152017,31332],{"class":77},[49,152019,150512],{"class":159},[49,152021,31338],{"class":73},[49,152023,152024,152026,152028,152030,152032,152035,152037,152040,152042,152044,152046,152048,152050,152052,152054,152056],{"class":51,"line":2482},[49,152025,15449],{"class":77},[49,152027,150521],{"class":77},[49,152029,1080],{"class":59},[49,152031,149983],{"class":159},[49,152033,152034],{"class":73},".student_id",[49,152036,1775],{"class":159},[49,152038,152039],{"class":159}," {self",[49,152041,80832],{"class":73},[49,152043,1775],{"class":159},[49,152045,152039],{"class":159},[49,152047,80844],{"class":73},[49,152049,1775],{"class":159},[49,152051,152039],{"class":159},[49,152053,150393],{"class":73},[49,152055,1775],{"class":159},[49,152057,25822],{"class":59},[49,152059,152060],{"class":51,"line":3274},[49,152061,399],{"emptyLinePlaceholder":398},[49,152063,152064],{"class":51,"line":3288},[49,152065,399],{"emptyLinePlaceholder":398},[49,152067,152068,152070,152072,152074,152077,152079,152081,152083,152085,152087,152089],{"class":51,"line":3296},[49,152069,150012],{"class":73},[49,152071,78],{"class":77},[49,152073,150416],{"class":73},[49,152075,152076],{"class":59},"\"001\"",[49,152078,13132],{"class":73},[49,152080,150419],{"class":59},[49,152082,13132],{"class":73},[49,152084,1479],{"class":159},[49,152086,13132],{"class":73},[49,152088,1818],{"class":159},[49,152090,847],{"class":73},[49,152092,152093,152095],{"class":51,"line":3301},[49,152094,30946],{"class":159},[49,152096,152097],{"class":73},"(student.is_passed())\n",[49,152099,152100,152102],{"class":51,"line":3307},[49,152101,30946],{"class":159},[49,152103,152104],{"class":73},"(student.to_dict())\n",[14,152106,152107,101549,152110,152113],{},[46,152108,152109],{},"to_dict()",[46,152111,152112],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[782,152115,152117],{"id":152116},"_1116-易错点","11.16 易错点",[30,152119,152120,152126,152132,152137,152140,152143],{},[33,152121,152122,152123,28916],{},"类名推荐使用大驼峰，如 ",[46,152124,152125],{},"StudentManager",[33,152127,152128,152129,152131],{},"方法第一个参数必须写 ",[46,152130,31354],{},"，调用时不用传。",[33,152133,152134,152136],{},[46,152135,31360],{}," 不是普通方法，它在创建对象时自动执行。",[33,152138,152139],{},"私有属性不是绝对安全，只是约定和名称改写。",[33,152141,152142],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[33,152144,152145],{},"类中方法太多时，说明职责可能过重。",[782,152147,152149],{"id":152148},"_1117-本章练习","11.17 本章练习",[30,152151,152152,152158,152164,152169,152182],{},[33,152153,152154,152155,152157],{},"定义 ",[46,152156,150099],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[33,152159,152154,152160,152163],{},[46,152161,152162],{},"Account"," 类，实现存款、取款、查询余额。",[33,152165,152154,152166,152168],{},[46,152167,17923],{}," 类，计算圆的周长和面积。",[33,152170,152154,152171,1042,152174,152177,152178,152181],{},[46,152172,152173],{},"Dog",[46,152175,152176],{},"Cat"," 类，并用同一个函数调用它们的 ",[46,152179,152180],{},"speak()"," 方法。",[33,152183,104897,152184,152186,152187,28916],{},[46,152185,151670],{}," 定义一个商品类 ",[46,152188,152189],{},"Product",[757,152191,152192],{},"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":27,"searchDepth":63,"depth":63,"links":152194},[152195,152196,152197,152198,152199,152200,152202,152203,152204,152205,152206,152207,152208,152212,152213,152214,152215],{"id":149863,"depth":63,"text":149864},{"id":150046,"depth":63,"text":150047},{"id":150110,"depth":63,"text":150111},{"id":150187,"depth":63,"text":150188},{"id":150286,"depth":63,"text":150287},{"id":150450,"depth":63,"text":152201},"11.6 str",{"id":150576,"depth":63,"text":150577},{"id":150842,"depth":63,"text":150843},{"id":150956,"depth":63,"text":150957},{"id":151111,"depth":63,"text":151112},{"id":151235,"depth":63,"text":151236},{"id":151351,"depth":63,"text":151352},{"id":151500,"depth":63,"text":151501,"children":152209},[152210,152211],{"id":151504,"depth":70,"text":151505},{"id":151586,"depth":70,"text":151587},{"id":151664,"depth":63,"text":151665},{"id":151779,"depth":63,"text":151780},{"id":152116,"depth":63,"text":152117},{"id":152148,"depth":63,"text":152149},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149855,"description":24072},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152222,"title":152223,"body":152224,"description":24072,"extension":766,"meta":155537,"navigation":398,"path":155538,"seo":155539,"stem":155540,"__hash__":155541},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152225,"toc":155513},[152226,152229,152233,152236,152239,152268,152271,152279,152283,152287,152290,152313,152316,152322,152326,153772,153775,153796,153800,153803,153815,153818,154002,154005,154131,154134,154138,154142,154278,154282,154368,154372,154454,154458,154495,154499,154688,154692,154695,154925,154929,154932,155113,155116,155120,155123,155129,155132,155158,155162,155165,155179,155182,155207,155210,155224,155227,155244,155247,155264,155267,155284,155288,155314,155318,155341,155345,155348,155350,155356,155358,155379,155382,155388,155394,155398,155401,155477,155480,155484,155510],[10,152227,152223],{"id":152228},"_12-综合案例与复习路线",[782,152230,152232],{"id":152231},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,152234,152235],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,152237,152238],{},"一个合格的入门综合项目最好覆盖：",[30,152240,152241,152244,152247,152250,152253,152256,152259,152262,152265],{},[33,152242,152243],{},"输入输出。",[33,152245,152246],{},"判断和循环。",[33,152248,152249],{},"函数拆分。",[33,152251,152252],{},"列表、字典等容器。",[33,152254,152255],{},"文件持久化。",[33,152257,152258],{},"异常处理。",[33,152260,152261],{},"模块拆分。",[33,152263,152264],{},"可选：面向对象。",[33,152266,152267],{},"可选：数据可视化。",[14,152269,152270],{},"本章整理两个方向：",[30,152272,152273,152276],{},[33,152274,152275],{},"学生管理系统。",[33,152277,152278],{},"销售数据统计和可视化。",[782,152280,152282],{"id":152281},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[18,152284,152286],{"id":152285},"_1221-需求","12.2.1 需求",[14,152288,152289],{},"实现一个命令行学生管理系统：",[30,152291,152292,152295,152298,152301,152304,152307,152310],{},[33,152293,152294],{},"添加学生。",[33,152296,152297],{},"删除学生。",[33,152299,152300],{},"修改学生。",[33,152302,152303],{},"查询学生。",[33,152305,152306],{},"显示所有学生。",[33,152308,152309],{},"保存到 JSON 文件。",[33,152311,152312],{},"程序启动时自动读取 JSON 文件。",[14,152314,152315],{},"学生字段：",[40,152317,152320],{"className":152318,"code":152319,"language":5884,"meta":27},[5882],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[46,152321,152319],{"__ignoreMap":27},[782,152323,152325],{"id":152324},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[40,152327,152329],{"className":30909,"code":152328,"language":30911,"meta":27,"style":27},"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",[46,152330,152331,152337,152347,152351,152365,152369,152373,152382,152394,152400,152404,152410,152441,152451,152458,152469,152475,152479,152483,152493,152524,152550,152554,152558,152567,152578,152589,152600,152611,152622,152633,152644,152648,152652,152662,152674,152690,152697,152704,152708,152712,152722,152730,152737,152750,152760,152771,152775,152779,152788,152796,152802,152814,152822,152833,152837,152841,152850,152866,152870,152877,152888,152893,152897,152913,152928,152943,152947,152952,152960,152968,152976,152984,152988,152993,153004,153008,153012,153021,153036,153046,153050,153062,153073,153077,153081,153086,153090,153101,153105,153109,153118,153133,153141,153145,153157,153167,153171,153175,153190,153203,153216,153220,153233,153245,153257,153261,153265,153276,153280,153284,153293,153308,153316,153320,153332,153342,153346,153350,153355,153359,153363,153373,153379,153401,153420,153439,153458,153463,153467,153471,153480,153488,153499,153503,153507,153533,153543,153548,153552,153556,153564,153574,153578,153586,153591,153607,153611,153625,153630,153644,153649,153662,153667,153680,153685,153698,153703,153716,153727,153731,153737,153748,153752,153756,153768],{"__ignoreMap":27},[49,152332,152333,152335],{"class":51,"line":52},[49,152334,30923],{"class":77},[49,152336,147622],{"class":73},[49,152338,152339,152341,152343,152345],{"class":51,"line":63},[49,152340,31268],{"class":77},[49,152342,108842],{"class":73},[49,152344,30923],{"class":77},[49,152346,108847],{"class":73},[49,152348,152349],{"class":51,"line":70},[49,152350,399],{"emptyLinePlaceholder":398},[49,152352,152353,152356,152358,152360,152363],{"class":51,"line":219},[49,152354,152355],{"class":159},"DATA_FILE",[49,152357,14261],{"class":77},[49,152359,109076],{"class":73},[49,152361,152362],{"class":59},"\"students.json\"",[49,152364,847],{"class":73},[49,152366,152367],{"class":51,"line":233},[49,152368,399],{"emptyLinePlaceholder":398},[49,152370,152371],{"class":51,"line":241},[49,152372,399],{"emptyLinePlaceholder":398},[49,152374,152375,152377,152380],{"class":51,"line":1920},[49,152376,32478],{"class":77},[49,152378,152379],{"class":55}," load_students",[49,152381,32484],{"class":73},[49,152383,152384,152386,152388,152391],{"class":51,"line":2011},[49,152385,3798],{"class":77},[49,152387,39461],{"class":77},[49,152389,152390],{"class":159}," DATA_FILE",[49,152392,152393],{"class":73},".exists():\n",[49,152395,152396,152398],{"class":51,"line":2017},[49,152397,15449],{"class":77},[49,152399,52369],{"class":73},[49,152401,152402],{"class":51,"line":2029},[49,152403,399],{"emptyLinePlaceholder":398},[49,152405,152406,152408],{"class":51,"line":2311},[49,152407,126315],{"class":77},[49,152409,4436],{"class":73},[49,152411,152412,152415,152417,152419,152421,152423,152425,152427,152429,152431,152433,152435,152437,152439],{"class":51,"line":2316},[49,152413,152414],{"class":77},"        with",[49,152416,147322],{"class":159},[49,152418,841],{"class":73},[49,152420,152355],{"class":159},[49,152422,13132],{"class":73},[49,152424,147332],{"class":59},[49,152426,13132],{"class":73},[49,152428,147337],{"class":5913},[49,152430,78],{"class":77},[49,152432,147342],{"class":59},[49,152434,14411],{"class":73},[49,152436,31914],{"class":77},[49,152438,148684],{"class":5913},[49,152440,4436],{"class":73},[49,152442,152443,152445,152447,152449],{"class":51,"line":2322},[49,152444,16429],{"class":77},[49,152446,148695],{"class":73},[49,152448,45885],{"class":5913},[49,152450,847],{"class":73},[49,152452,152453,152455],{"class":51,"line":2327},[49,152454,126343],{"class":77},[49,152456,152457],{"class":73}," json.JSONDecodeError:\n",[49,152459,152460,152462,152464,152467],{"class":51,"line":2341},[49,152461,32982],{"class":159},[49,152463,841],{"class":73},[49,152465,152466],{"class":59},"\"数据文件格式错误，已使用空数据启动\"",[49,152468,847],{"class":73},[49,152470,152471,152473],{"class":51,"line":2346},[49,152472,15449],{"class":77},[49,152474,52369],{"class":73},[49,152476,152477],{"class":51,"line":2352},[49,152478,399],{"emptyLinePlaceholder":398},[49,152480,152481],{"class":51,"line":2373},[49,152482,399],{"emptyLinePlaceholder":398},[49,152484,152485,152487,152490],{"class":51,"line":2378},[49,152486,32478],{"class":77},[49,152488,152489],{"class":55}," save_students",[49,152491,152492],{"class":73},"(students):\n",[49,152494,152495,152497,152499,152501,152503,152505,152508,152510,152512,152514,152516,152518,152520,152522],{"class":51,"line":2392},[49,152496,34709],{"class":77},[49,152498,147322],{"class":159},[49,152500,841],{"class":73},[49,152502,152355],{"class":159},[49,152504,13132],{"class":73},[49,152506,152507],{"class":59},"\"w\"",[49,152509,13132],{"class":73},[49,152511,147337],{"class":5913},[49,152513,78],{"class":77},[49,152515,147342],{"class":59},[49,152517,14411],{"class":73},[49,152519,31914],{"class":77},[49,152521,148684],{"class":5913},[49,152523,4436],{"class":73},[49,152525,152526,152529,152531,152533,152535,152537,152539,152541,152544,152546,152548],{"class":51,"line":2397},[49,152527,152528],{"class":73},"        json.dump(students, ",[49,152530,45885],{"class":5913},[49,152532,13132],{"class":73},[49,152534,147668],{"class":5913},[49,152536,78],{"class":77},[49,152538,34518],{"class":159},[49,152540,13132],{"class":73},[49,152542,152543],{"class":5913},"indent",[49,152545,78],{"class":77},[49,152547,915],{"class":159},[49,152549,847],{"class":73},[49,152551,152552],{"class":51,"line":2426},[49,152553,399],{"emptyLinePlaceholder":398},[49,152555,152556],{"class":51,"line":2431},[49,152557,399],{"emptyLinePlaceholder":398},[49,152559,152560,152562,152565],{"class":51,"line":2448},[49,152561,32478],{"class":77},[49,152563,152564],{"class":55}," show_menu",[49,152566,32484],{"class":73},[49,152568,152569,152571,152573,152576],{"class":51,"line":2453},[49,152570,31830],{"class":159},[49,152572,841],{"class":73},[49,152574,152575],{"class":59},"\"====== 学生管理系统 ======\"",[49,152577,847],{"class":73},[49,152579,152580,152582,152584,152587],{"class":51,"line":2458},[49,152581,31830],{"class":159},[49,152583,841],{"class":73},[49,152585,152586],{"class":59},"\"1. 添加学生\"",[49,152588,847],{"class":73},[49,152590,152591,152593,152595,152598],{"class":51,"line":2463},[49,152592,31830],{"class":159},[49,152594,841],{"class":73},[49,152596,152597],{"class":59},"\"2. 删除学生\"",[49,152599,847],{"class":73},[49,152601,152602,152604,152606,152609],{"class":51,"line":2477},[49,152603,31830],{"class":159},[49,152605,841],{"class":73},[49,152607,152608],{"class":59},"\"3. 修改学生\"",[49,152610,847],{"class":73},[49,152612,152613,152615,152617,152620],{"class":51,"line":2482},[49,152614,31830],{"class":159},[49,152616,841],{"class":73},[49,152618,152619],{"class":59},"\"4. 查询学生\"",[49,152621,847],{"class":73},[49,152623,152624,152626,152628,152631],{"class":51,"line":3274},[49,152625,31830],{"class":159},[49,152627,841],{"class":73},[49,152629,152630],{"class":59},"\"5. 显示所有学生\"",[49,152632,847],{"class":73},[49,152634,152635,152637,152639,152642],{"class":51,"line":3288},[49,152636,31830],{"class":159},[49,152638,841],{"class":73},[49,152640,152641],{"class":59},"\"0. 退出系统\"",[49,152643,847],{"class":73},[49,152645,152646],{"class":51,"line":3296},[49,152647,399],{"emptyLinePlaceholder":398},[49,152649,152650],{"class":51,"line":3301},[49,152651,399],{"emptyLinePlaceholder":398},[49,152653,152654,152656,152659],{"class":51,"line":3307},[49,152655,32478],{"class":77},[49,152657,152658],{"class":55}," find_student",[49,152660,152661],{"class":73},"(students, student_id):\n",[49,152663,152664,152666,152669,152671],{"class":51,"line":3313},[49,152665,3898],{"class":77},[49,152667,152668],{"class":73}," student ",[49,152670,26732],{"class":77},[49,152672,152673],{"class":73}," students:\n",[49,152675,152676,152678,152681,152683,152685,152687],{"class":51,"line":3318},[49,152677,3194],{"class":77},[49,152679,152680],{"class":73}," student[",[49,152682,151978],{"class":59},[49,152684,5140],{"class":73},[49,152686,3646],{"class":77},[49,152688,152689],{"class":73}," student_id:\n",[49,152691,152692,152694],{"class":51,"line":8645},[49,152693,16429],{"class":77},[49,152695,152696],{"class":73}," student\n",[49,152698,152699,152701],{"class":51,"line":8669},[49,152700,4787],{"class":77},[49,152702,152703],{"class":159}," None\n",[49,152705,152706],{"class":51,"line":8674},[49,152707,399],{"emptyLinePlaceholder":398},[49,152709,152710],{"class":51,"line":8680},[49,152711,399],{"emptyLinePlaceholder":398},[49,152713,152714,152716,152719],{"class":51,"line":8707},[49,152715,32478],{"class":77},[49,152717,152718],{"class":55}," input_int",[49,152720,152721],{"class":73},"(prompt):\n",[49,152723,152724,152726,152728],{"class":51,"line":8712},[49,152725,2949],{"class":77},[49,152727,95823],{"class":159},[49,152729,4436],{"class":73},[49,152731,152732,152735],{"class":51,"line":8718},[49,152733,152734],{"class":77},"        try",[49,152736,4436],{"class":73},[49,152738,152739,152741,152743,152745,152747],{"class":51,"line":8730},[49,152740,16429],{"class":77},[49,152742,3080],{"class":159},[49,152744,841],{"class":73},[49,152746,54352],{"class":159},[49,152748,152749],{"class":73},"(prompt))\n",[49,152751,152752,152755,152758],{"class":51,"line":8742},[49,152753,152754],{"class":77},"        except",[49,152756,152757],{"class":159}," ValueError",[49,152759,4436],{"class":73},[49,152761,152762,152764,152766,152769],{"class":51,"line":8754},[49,152763,35181],{"class":159},[49,152765,841],{"class":73},[49,152767,152768],{"class":59},"\"请输入整数\"",[49,152770,847],{"class":73},[49,152772,152773],{"class":51,"line":10413},[49,152774,399],{"emptyLinePlaceholder":398},[49,152776,152777],{"class":51,"line":10438},[49,152778,399],{"emptyLinePlaceholder":398},[49,152780,152781,152783,152786],{"class":51,"line":10461},[49,152782,32478],{"class":77},[49,152784,152785],{"class":55}," input_float",[49,152787,152721],{"class":73},[49,152789,152790,152792,152794],{"class":51,"line":10485},[49,152791,2949],{"class":77},[49,152793,95823],{"class":159},[49,152795,4436],{"class":73},[49,152797,152798,152800],{"class":51,"line":10490},[49,152799,152734],{"class":77},[49,152801,4436],{"class":73},[49,152803,152804,152806,152808,152810,152812],{"class":51,"line":10495},[49,152805,16429],{"class":77},[49,152807,110328],{"class":159},[49,152809,841],{"class":73},[49,152811,54352],{"class":159},[49,152813,152749],{"class":73},[49,152815,152816,152818,152820],{"class":51,"line":10500},[49,152817,152754],{"class":77},[49,152819,152757],{"class":159},[49,152821,4436],{"class":73},[49,152823,152824,152826,152828,152831],{"class":51,"line":10509},[49,152825,35181],{"class":159},[49,152827,841],{"class":73},[49,152829,152830],{"class":59},"\"请输入数字\"",[49,152832,847],{"class":73},[49,152834,152835],{"class":51,"line":10514},[49,152836,399],{"emptyLinePlaceholder":398},[49,152838,152839],{"class":51,"line":10520},[49,152840,399],{"emptyLinePlaceholder":398},[49,152842,152843,152845,152848],{"class":51,"line":10541},[49,152844,32478],{"class":77},[49,152846,152847],{"class":55}," add_student",[49,152849,152492],{"class":73},[49,152851,152852,152855,152857,152859,152861,152864],{"class":51,"line":10547},[49,152853,152854],{"class":73},"    student_id ",[49,152856,78],{"class":77},[49,152858,61136],{"class":159},[49,152860,841],{"class":73},[49,152862,152863],{"class":59},"\"请输入学号:\"",[49,152865,847],{"class":73},[49,152867,152868],{"class":51,"line":10561},[49,152869,399],{"emptyLinePlaceholder":398},[49,152871,152872,152874],{"class":51,"line":10567},[49,152873,3798],{"class":77},[49,152875,152876],{"class":73}," find_student(students, student_id):\n",[49,152878,152879,152881,152883,152886],{"class":51,"line":10594},[49,152880,32982],{"class":159},[49,152882,841],{"class":73},[49,152884,152885],{"class":59},"\"学号已存在\"",[49,152887,847],{"class":73},[49,152889,152890],{"class":51,"line":10603},[49,152891,152892],{"class":77},"        return\n",[49,152894,152895],{"class":51,"line":10609},[49,152896,399],{"emptyLinePlaceholder":398},[49,152898,152899,152902,152904,152906,152908,152911],{"class":51,"line":10617},[49,152900,152901],{"class":73},"    name ",[49,152903,78],{"class":77},[49,152905,61136],{"class":159},[49,152907,841],{"class":73},[49,152909,152910],{"class":59},"\"请输入姓名:\"",[49,152912,847],{"class":73},[49,152914,152915,152918,152920,152923,152926],{"class":51,"line":10622},[49,152916,152917],{"class":73},"    age ",[49,152919,78],{"class":77},[49,152921,152922],{"class":73}," input_int(",[49,152924,152925],{"class":59},"\"请输入年龄:\"",[49,152927,847],{"class":73},[49,152929,152930,152933,152935,152938,152941],{"class":51,"line":17301},[49,152931,152932],{"class":73},"    score ",[49,152934,78],{"class":77},[49,152936,152937],{"class":73}," input_float(",[49,152939,152940],{"class":59},"\"请输入成绩:\"",[49,152942,847],{"class":73},[49,152944,152945],{"class":51,"line":17307},[49,152946,399],{"emptyLinePlaceholder":398},[49,152948,152949],{"class":51,"line":17330},[49,152950,152951],{"class":73},"    students.append({\n",[49,152953,152954,152957],{"class":51,"line":17336},[49,152955,152956],{"class":59},"        \"student_id\"",[49,152958,152959],{"class":73},": student_id,\n",[49,152961,152962,152965],{"class":51,"line":17359},[49,152963,152964],{"class":59},"        \"name\"",[49,152966,152967],{"class":73},": name,\n",[49,152969,152970,152973],{"class":51,"line":17373},[49,152971,152972],{"class":59},"        \"age\"",[49,152974,152975],{"class":73},": age,\n",[49,152977,152978,152981],{"class":51,"line":17393},[49,152979,152980],{"class":59},"        \"score\"",[49,152982,152983],{"class":73},": score,\n",[49,152985,152986],{"class":51,"line":17399},[49,152987,33992],{"class":73},[49,152989,152990],{"class":51,"line":17410},[49,152991,152992],{"class":73},"    save_students(students)\n",[49,152994,152995,152997,152999,153002],{"class":51,"line":17433},[49,152996,31830],{"class":159},[49,152998,841],{"class":73},[49,153000,153001],{"class":59},"\"添加成功\"",[49,153003,847],{"class":73},[49,153005,153006],{"class":51,"line":17455},[49,153007,399],{"emptyLinePlaceholder":398},[49,153009,153010],{"class":51,"line":17460},[49,153011,399],{"emptyLinePlaceholder":398},[49,153013,153014,153016,153019],{"class":51,"line":17466},[49,153015,32478],{"class":77},[49,153017,153018],{"class":55}," delete_student",[49,153020,152492],{"class":73},[49,153022,153023,153025,153027,153029,153031,153034],{"class":51,"line":17480},[49,153024,152854],{"class":73},[49,153026,78],{"class":77},[49,153028,61136],{"class":159},[49,153030,841],{"class":73},[49,153032,153033],{"class":59},"\"请输入要删除的学号:\"",[49,153035,847],{"class":73},[49,153037,153038,153041,153043],{"class":51,"line":17493},[49,153039,153040],{"class":73},"    student ",[49,153042,78],{"class":77},[49,153044,153045],{"class":73}," find_student(students, student_id)\n",[49,153047,153048],{"class":51,"line":17498},[49,153049,399],{"emptyLinePlaceholder":398},[49,153051,153052,153054,153056,153058,153060],{"class":51,"line":17512},[49,153053,3798],{"class":77},[49,153055,152668],{"class":73},[49,153057,39458],{"class":77},[49,153059,39464],{"class":159},[49,153061,4436],{"class":73},[49,153063,153064,153066,153068,153071],{"class":51,"line":17517},[49,153065,32982],{"class":159},[49,153067,841],{"class":73},[49,153069,153070],{"class":59},"\"学生不存在\"",[49,153072,847],{"class":73},[49,153074,153075],{"class":51,"line":17523},[49,153076,152892],{"class":77},[49,153078,153079],{"class":51,"line":17528},[49,153080,399],{"emptyLinePlaceholder":398},[49,153082,153083],{"class":51,"line":17542},[49,153084,153085],{"class":73},"    students.remove(student)\n",[49,153087,153088],{"class":51,"line":17547},[49,153089,152992],{"class":73},[49,153091,153092,153094,153096,153099],{"class":51,"line":17552},[49,153093,31830],{"class":159},[49,153095,841],{"class":73},[49,153097,153098],{"class":59},"\"删除成功\"",[49,153100,847],{"class":73},[49,153102,153103],{"class":51,"line":17566},[49,153104,399],{"emptyLinePlaceholder":398},[49,153106,153107],{"class":51,"line":17578},[49,153108,399],{"emptyLinePlaceholder":398},[49,153110,153111,153113,153116],{"class":51,"line":17583},[49,153112,32478],{"class":77},[49,153114,153115],{"class":55}," update_student",[49,153117,152492],{"class":73},[49,153119,153120,153122,153124,153126,153128,153131],{"class":51,"line":17596},[49,153121,152854],{"class":73},[49,153123,78],{"class":77},[49,153125,61136],{"class":159},[49,153127,841],{"class":73},[49,153129,153130],{"class":59},"\"请输入要修改的学号:\"",[49,153132,847],{"class":73},[49,153134,153135,153137,153139],{"class":51,"line":17601},[49,153136,153040],{"class":73},[49,153138,78],{"class":77},[49,153140,153045],{"class":73},[49,153142,153143],{"class":51,"line":17606},[49,153144,399],{"emptyLinePlaceholder":398},[49,153146,153147,153149,153151,153153,153155],{"class":51,"line":17611},[49,153148,3798],{"class":77},[49,153150,152668],{"class":73},[49,153152,39458],{"class":77},[49,153154,39464],{"class":159},[49,153156,4436],{"class":73},[49,153158,153159,153161,153163,153165],{"class":51,"line":17624},[49,153160,32982],{"class":159},[49,153162,841],{"class":73},[49,153164,153070],{"class":59},[49,153166,847],{"class":73},[49,153168,153169],{"class":51,"line":17629},[49,153170,152892],{"class":77},[49,153172,153173],{"class":51,"line":33164},[49,153174,399],{"emptyLinePlaceholder":398},[49,153176,153177,153179,153181,153183,153185,153188],{"class":51,"line":33170},[49,153178,152901],{"class":73},[49,153180,78],{"class":77},[49,153182,61136],{"class":159},[49,153184,841],{"class":73},[49,153186,153187],{"class":59},"\"请输入新姓名:\"",[49,153189,847],{"class":73},[49,153191,153192,153194,153196,153198,153201],{"class":51,"line":33176},[49,153193,152917],{"class":73},[49,153195,78],{"class":77},[49,153197,152922],{"class":73},[49,153199,153200],{"class":59},"\"请输入新年龄:\"",[49,153202,847],{"class":73},[49,153204,153205,153207,153209,153211,153214],{"class":51,"line":33182},[49,153206,152932],{"class":73},[49,153208,78],{"class":77},[49,153210,152937],{"class":73},[49,153212,153213],{"class":59},"\"请输入新成绩:\"",[49,153215,847],{"class":73},[49,153217,153218],{"class":51,"line":33188},[49,153219,399],{"emptyLinePlaceholder":398},[49,153221,153222,153225,153227,153229,153231],{"class":51,"line":33199},[49,153223,153224],{"class":73},"    student[",[49,153226,63210],{"class":59},[49,153228,5140],{"class":73},[49,153230,78],{"class":77},[49,153232,150326],{"class":73},[49,153234,153235,153237,153239,153241,153243],{"class":51,"line":33205},[49,153236,153224],{"class":73},[49,153238,69655],{"class":59},[49,153240,5140],{"class":73},[49,153242,78],{"class":77},[49,153244,150338],{"class":73},[49,153246,153247,153249,153251,153253,153255],{"class":51,"line":33225},[49,153248,153224],{"class":73},[49,153250,152003],{"class":59},[49,153252,5140],{"class":73},[49,153254,78],{"class":77},[49,153256,2278],{"class":73},[49,153258,153259],{"class":51,"line":33231},[49,153260,399],{"emptyLinePlaceholder":398},[49,153262,153263],{"class":51,"line":33242},[49,153264,152992],{"class":73},[49,153266,153267,153269,153271,153274],{"class":51,"line":33248},[49,153268,31830],{"class":159},[49,153270,841],{"class":73},[49,153272,153273],{"class":59},"\"修改成功\"",[49,153275,847],{"class":73},[49,153277,153278],{"class":51,"line":33254},[49,153279,399],{"emptyLinePlaceholder":398},[49,153281,153282],{"class":51,"line":33260},[49,153283,399],{"emptyLinePlaceholder":398},[49,153285,153286,153288,153291],{"class":51,"line":33266},[49,153287,32478],{"class":77},[49,153289,153290],{"class":55}," query_student",[49,153292,152492],{"class":73},[49,153294,153295,153297,153299,153301,153303,153306],{"class":51,"line":33272},[49,153296,152854],{"class":73},[49,153298,78],{"class":77},[49,153300,61136],{"class":159},[49,153302,841],{"class":73},[49,153304,153305],{"class":59},"\"请输入要查询的学号:\"",[49,153307,847],{"class":73},[49,153309,153310,153312,153314],{"class":51,"line":33278},[49,153311,153040],{"class":73},[49,153313,78],{"class":77},[49,153315,153045],{"class":73},[49,153317,153318],{"class":51,"line":33284},[49,153319,399],{"emptyLinePlaceholder":398},[49,153321,153322,153324,153326,153328,153330],{"class":51,"line":33304},[49,153323,3798],{"class":77},[49,153325,152668],{"class":73},[49,153327,39458],{"class":77},[49,153329,39464],{"class":159},[49,153331,4436],{"class":73},[49,153333,153334,153336,153338,153340],{"class":51,"line":33310},[49,153335,32982],{"class":159},[49,153337,841],{"class":73},[49,153339,153070],{"class":59},[49,153341,847],{"class":73},[49,153343,153344],{"class":51,"line":33326},[49,153345,152892],{"class":77},[49,153347,153348],{"class":51,"line":33332},[49,153349,399],{"emptyLinePlaceholder":398},[49,153351,153352],{"class":51,"line":33346},[49,153353,153354],{"class":73},"    print_student(student)\n",[49,153356,153357],{"class":51,"line":33352},[49,153358,399],{"emptyLinePlaceholder":398},[49,153360,153361],{"class":51,"line":33367},[49,153362,399],{"emptyLinePlaceholder":398},[49,153364,153365,153367,153370],{"class":51,"line":33373},[49,153366,32478],{"class":77},[49,153368,153369],{"class":55}," print_student",[49,153371,153372],{"class":73},"(student):\n",[49,153374,153375,153377],{"class":51,"line":33382},[49,153376,31830],{"class":159},[49,153378,151970],{"class":73},[49,153380,153381,153384,153386,153388,153391,153394,153396,153399],{"class":51,"line":33388},[49,153382,153383],{"class":77},"        f",[49,153385,1080],{"class":59},[49,153387,1725],{"class":159},[49,153389,153390],{"class":73},"student[",[49,153392,153393],{"class":59},"'student_id'",[49,153395,1769],{"class":73},[49,153397,153398],{"class":159},"}\\t",[49,153400,25822],{"class":59},[49,153402,153403,153405,153407,153409,153411,153414,153416,153418],{"class":51,"line":33397},[49,153404,153383],{"class":77},[49,153406,1080],{"class":59},[49,153408,1725],{"class":159},[49,153410,153390],{"class":73},[49,153412,153413],{"class":59},"'name'",[49,153415,1769],{"class":73},[49,153417,153398],{"class":159},[49,153419,25822],{"class":59},[49,153421,153422,153424,153426,153428,153430,153433,153435,153437],{"class":51,"line":33403},[49,153423,153383],{"class":77},[49,153425,1080],{"class":59},[49,153427,1725],{"class":159},[49,153429,153390],{"class":73},[49,153431,153432],{"class":59},"'age'",[49,153434,1769],{"class":73},[49,153436,153398],{"class":159},[49,153438,25822],{"class":59},[49,153440,153441,153443,153445,153447,153449,153452,153454,153456],{"class":51,"line":33409},[49,153442,153383],{"class":77},[49,153444,1080],{"class":59},[49,153446,1725],{"class":159},[49,153448,153390],{"class":73},[49,153450,153451],{"class":59},"'score'",[49,153453,1769],{"class":73},[49,153455,1775],{"class":159},[49,153457,25822],{"class":59},[49,153459,153460],{"class":51,"line":33418},[49,153461,153462],{"class":73},"    )\n",[49,153464,153465],{"class":51,"line":33424},[49,153466,399],{"emptyLinePlaceholder":398},[49,153468,153469],{"class":51,"line":33435},[49,153470,399],{"emptyLinePlaceholder":398},[49,153472,153473,153475,153478],{"class":51,"line":33441},[49,153474,32478],{"class":77},[49,153476,153477],{"class":55}," show_all_students",[49,153479,152492],{"class":73},[49,153481,153482,153484,153486],{"class":51,"line":33460},[49,153483,3798],{"class":77},[49,153485,39461],{"class":77},[49,153487,152673],{"class":73},[49,153489,153490,153492,153494,153497],{"class":51,"line":33466},[49,153491,32982],{"class":159},[49,153493,841],{"class":73},[49,153495,153496],{"class":59},"\"暂无学生\"",[49,153498,847],{"class":73},[49,153500,153501],{"class":51,"line":33477},[49,153502,152892],{"class":77},[49,153504,153505],{"class":51,"line":33483},[49,153506,399],{"emptyLinePlaceholder":398},[49,153508,153509,153511,153513,153516,153518,153521,153523,153526,153528,153531],{"class":51,"line":33503},[49,153510,31830],{"class":159},[49,153512,841],{"class":73},[49,153514,153515],{"class":59},"\"学号",[49,153517,1930],{"class":159},[49,153519,153520],{"class":59},"姓名",[49,153522,1930],{"class":159},[49,153524,153525],{"class":59},"年龄",[49,153527,1930],{"class":159},[49,153529,153530],{"class":59},"成绩\"",[49,153532,847],{"class":73},[49,153534,153535,153537,153539,153541],{"class":51,"line":33519},[49,153536,3898],{"class":77},[49,153538,152668],{"class":73},[49,153540,26732],{"class":77},[49,153542,152673],{"class":73},[49,153544,153545],{"class":51,"line":33525},[49,153546,153547],{"class":73},"        print_student(student)\n",[49,153549,153550],{"class":51,"line":33539},[49,153551,399],{"emptyLinePlaceholder":398},[49,153553,153554],{"class":51,"line":33545},[49,153555,399],{"emptyLinePlaceholder":398},[49,153557,153558,153560,153562],{"class":51,"line":33551},[49,153559,32478],{"class":77},[49,153561,2671],{"class":55},[49,153563,32484],{"class":73},[49,153565,153566,153569,153571],{"class":51,"line":33562},[49,153567,153568],{"class":73},"    students ",[49,153570,78],{"class":77},[49,153572,153573],{"class":73}," load_students()\n",[49,153575,153576],{"class":51,"line":33568},[49,153577,399],{"emptyLinePlaceholder":398},[49,153579,153580,153582,153584],{"class":51,"line":33574},[49,153581,2949],{"class":77},[49,153583,95823],{"class":159},[49,153585,4436],{"class":73},[49,153587,153588],{"class":51,"line":33584},[49,153589,153590],{"class":73},"        show_menu()\n",[49,153592,153593,153596,153598,153600,153602,153605],{"class":51,"line":33590},[49,153594,153595],{"class":73},"        choice ",[49,153597,78],{"class":77},[49,153599,61136],{"class":159},[49,153601,841],{"class":73},[49,153603,153604],{"class":59},"\"请输入操作:\"",[49,153606,847],{"class":73},[49,153608,153609],{"class":51,"line":33601},[49,153610,399],{"emptyLinePlaceholder":398},[49,153612,153613,153615,153618,153620,153623],{"class":51,"line":33607},[49,153614,3194],{"class":77},[49,153616,153617],{"class":73}," choice ",[49,153619,3646],{"class":77},[49,153621,153622],{"class":59}," \"1\"",[49,153624,4436],{"class":73},[49,153626,153627],{"class":51,"line":33617},[49,153628,153629],{"class":73},"            add_student(students)\n",[49,153631,153632,153635,153637,153639,153642],{"class":51,"line":33622},[49,153633,153634],{"class":77},"        elif",[49,153636,153617],{"class":73},[49,153638,3646],{"class":77},[49,153640,153641],{"class":59}," \"2\"",[49,153643,4436],{"class":73},[49,153645,153646],{"class":51,"line":33628},[49,153647,153648],{"class":73},"            delete_student(students)\n",[49,153650,153651,153653,153655,153657,153660],{"class":51,"line":33677},[49,153652,153634],{"class":77},[49,153654,153617],{"class":73},[49,153656,3646],{"class":77},[49,153658,153659],{"class":59}," \"3\"",[49,153661,4436],{"class":73},[49,153663,153664],{"class":51,"line":33724},[49,153665,153666],{"class":73},"            update_student(students)\n",[49,153668,153669,153671,153673,153675,153678],{"class":51,"line":33729},[49,153670,153634],{"class":77},[49,153672,153617],{"class":73},[49,153674,3646],{"class":77},[49,153676,153677],{"class":59}," \"4\"",[49,153679,4436],{"class":73},[49,153681,153682],{"class":51,"line":33735},[49,153683,153684],{"class":73},"            query_student(students)\n",[49,153686,153687,153689,153691,153693,153696],{"class":51,"line":33754},[49,153688,153634],{"class":77},[49,153690,153617],{"class":73},[49,153692,3646],{"class":77},[49,153694,153695],{"class":59}," \"5\"",[49,153697,4436],{"class":73},[49,153699,153700],{"class":51,"line":33760},[49,153701,153702],{"class":73},"            show_all_students(students)\n",[49,153704,153705,153707,153709,153711,153714],{"class":51,"line":33780},[49,153706,153634],{"class":77},[49,153708,153617],{"class":73},[49,153710,3646],{"class":77},[49,153712,153713],{"class":59}," \"0\"",[49,153715,4436],{"class":73},[49,153717,153718,153720,153722,153725],{"class":51,"line":33786},[49,153719,35181],{"class":159},[49,153721,841],{"class":73},[49,153723,153724],{"class":59},"\"退出系统\"",[49,153726,847],{"class":73},[49,153728,153729],{"class":51,"line":33792},[49,153730,115629],{"class":77},[49,153732,153733,153735],{"class":51,"line":33802},[49,153734,3231],{"class":77},[49,153736,4436],{"class":73},[49,153738,153739,153741,153743,153746],{"class":51,"line":33807},[49,153740,35181],{"class":159},[49,153742,841],{"class":73},[49,153744,153745],{"class":59},"\"输入错误\"",[49,153747,847],{"class":73},[49,153749,153750],{"class":51,"line":33813},[49,153751,399],{"emptyLinePlaceholder":398},[49,153753,153754],{"class":51,"line":33829},[49,153755,399],{"emptyLinePlaceholder":398},[49,153757,153758,153760,153762,153764,153766],{"class":51,"line":33874},[49,153759,2230],{"class":77},[49,153761,31751],{"class":159},[49,153763,102090],{"class":77},[49,153765,102093],{"class":59},[49,153767,4436],{"class":73},[49,153769,153770],{"class":51,"line":33880},[49,153771,102100],{"class":73},[14,153773,153774],{},"这个项目串联了：",[30,153776,153777,153780,153783,153786,153789,153791],{},[33,153778,153779],{},"菜单循环。",[33,153781,153782],{},"函数封装。",[33,153784,153785],{},"列表字典。",[33,153787,153788],{},"JSON 读写。",[33,153790,152258],{},[33,153792,153793,28916],{},[46,153794,153795],{},"if __name__ == \"__main__\"",[782,153797,153799],{"id":153798},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153801,153802],{},"可以进一步拆成两个类：",[30,153804,153805,153810],{},[33,153806,153807,153809],{},[46,153808,150099],{},"：表示单个学生。",[33,153811,153812,153814],{},[46,153813,152125],{},"：负责学生增删改查和文件保存。",[14,153816,153817],{},"示意代码：",[40,153819,153821],{"className":30909,"code":153820,"language":30911,"meta":27,"style":27},"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",[46,153822,153823,153833,153837,153841,153845,153853,153860,153866,153872,153878,153882,153890,153896,153906,153916,153926,153936,153940,153944,153950,153958,153966,153974,153982,153990,153998],{"__ignoreMap":27},[49,153824,153825,153827,153829,153831],{"class":51,"line":52},[49,153826,31268],{"class":77},[49,153828,151683],{"class":73},[49,153830,30923],{"class":77},[49,153832,151688],{"class":73},[49,153834,153835],{"class":51,"line":63},[49,153836,399],{"emptyLinePlaceholder":398},[49,153838,153839],{"class":51,"line":70},[49,153840,399],{"emptyLinePlaceholder":398},[49,153842,153843],{"class":51,"line":219},[49,153844,151701],{"class":55},[49,153846,153847,153849,153851],{"class":51,"line":233},[49,153848,15391],{"class":77},[49,153850,8595],{"class":55},[49,153852,4436],{"class":73},[49,153854,153855,153858],{"class":51,"line":241},[49,153856,153857],{"class":73},"    student_id: ",[49,153859,151717],{"class":159},[49,153861,153862,153864],{"class":51,"line":1920},[49,153863,151714],{"class":73},[49,153865,151717],{"class":159},[49,153867,153868,153870],{"class":51,"line":2011},[49,153869,151722],{"class":73},[49,153871,151725],{"class":159},[49,153873,153874,153876],{"class":51,"line":2017},[49,153875,151730],{"class":73},[49,153877,151733],{"class":159},[49,153879,153880],{"class":51,"line":2029},[49,153881,399],{"emptyLinePlaceholder":398},[49,153883,153884,153886,153888],{"class":51,"line":2311},[49,153885,31332],{"class":77},[49,153887,151881],{"class":55},[49,153889,31338],{"class":73},[49,153891,153892,153894],{"class":51,"line":2316},[49,153893,15449],{"class":77},[49,153895,16269],{"class":73},[49,153897,153898,153900,153902,153904],{"class":51,"line":2322},[49,153899,151894],{"class":59},[49,153901,51968],{"class":73},[49,153903,31354],{"class":159},[49,153905,151901],{"class":73},[49,153907,153908,153910,153912,153914],{"class":51,"line":2327},[49,153909,151906],{"class":59},[49,153911,51968],{"class":73},[49,153913,31354],{"class":159},[49,153915,151913],{"class":73},[49,153917,153918,153920,153922,153924],{"class":51,"line":2341},[49,153919,151918],{"class":59},[49,153921,51968],{"class":73},[49,153923,31354],{"class":159},[49,153925,151925],{"class":73},[49,153927,153928,153930,153932,153934],{"class":51,"line":2346},[49,153929,151930],{"class":59},[49,153931,51968],{"class":73},[49,153933,31354],{"class":159},[49,153935,151937],{"class":73},[49,153937,153938],{"class":51,"line":2352},[49,153939,3226],{"class":73},[49,153941,153942],{"class":51,"line":2373},[49,153943,399],{"emptyLinePlaceholder":398},[49,153945,153946,153948],{"class":51,"line":2378},[49,153947,151545],{"class":55},[49,153949,151548],{"class":159},[49,153951,153952,153954,153956],{"class":51,"line":2392},[49,153953,31332],{"class":77},[49,153955,151958],{"class":55},[49,153957,151961],{"class":73},[49,153959,153960,153962,153964],{"class":51,"line":2397},[49,153961,15449],{"class":77},[49,153963,151565],{"class":159},[49,153965,151970],{"class":73},[49,153967,153968,153970,153972],{"class":51,"line":2426},[49,153969,151975],{"class":73},[49,153971,151978],{"class":59},[49,153973,88367],{"class":73},[49,153975,153976,153978,153980],{"class":51,"line":2431},[49,153977,151975],{"class":73},[49,153979,63210],{"class":59},[49,153981,88367],{"class":73},[49,153983,153984,153986,153988],{"class":51,"line":2448},[49,153985,151975],{"class":73},[49,153987,69655],{"class":59},[49,153989,88367],{"class":73},[49,153991,153992,153994,153996],{"class":51,"line":2453},[49,153993,151975],{"class":73},[49,153995,152003],{"class":59},[49,153997,88367],{"class":73},[49,153999,154000],{"class":51,"line":2458},[49,154001,38657],{"class":73},[14,154003,154004],{},"管理器示意：",[40,154006,154008],{"className":30909,"code":154007,"language":30911,"meta":27,"style":27},"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",[46,154009,154010,154019,154027,154038,154042,154052,154065,154076,154083,154089,154093,154102,154111,154117,154124],{"__ignoreMap":27},[49,154011,154012,154014,154017],{"class":51,"line":52},[49,154013,15391],{"class":77},[49,154015,154016],{"class":55}," StudentManager",[49,154018,4436],{"class":73},[49,154020,154021,154023,154025],{"class":51,"line":63},[49,154022,31332],{"class":77},[49,154024,31335],{"class":159},[49,154026,31338],{"class":73},[49,154028,154029,154031,154034,154036],{"class":51,"line":70},[49,154030,31376],{"class":159},[49,154032,154033],{"class":73},".students ",[49,154035,78],{"class":77},[49,154037,52369],{"class":73},[49,154039,154040],{"class":51,"line":219},[49,154041,399],{"emptyLinePlaceholder":398},[49,154043,154044,154046,154049],{"class":51,"line":233},[49,154045,31332],{"class":77},[49,154047,154048],{"class":55}," find_by_id",[49,154050,154051],{"class":73},"(self, student_id):\n",[49,154053,154054,154056,154058,154060,154062],{"class":51,"line":241},[49,154055,4100],{"class":77},[49,154057,152668],{"class":73},[49,154059,26732],{"class":77},[49,154061,39404],{"class":159},[49,154063,154064],{"class":73},".students:\n",[49,154066,154067,154069,154072,154074],{"class":51,"line":1920},[49,154068,5339],{"class":77},[49,154070,154071],{"class":73}," student.student_id ",[49,154073,3646],{"class":77},[49,154075,152689],{"class":73},[49,154077,154078,154081],{"class":51,"line":2011},[49,154079,154080],{"class":77},"                return",[49,154082,152696],{"class":73},[49,154084,154085,154087],{"class":51,"line":2017},[49,154086,15449],{"class":77},[49,154088,152703],{"class":159},[49,154090,154091],{"class":51,"line":2029},[49,154092,399],{"emptyLinePlaceholder":398},[49,154094,154095,154097,154099],{"class":51,"line":2311},[49,154096,31332],{"class":77},[49,154098,5906],{"class":55},[49,154100,154101],{"class":73},"(self, student):\n",[49,154103,154104,154106,154108],{"class":51,"line":2316},[49,154105,3194],{"class":77},[49,154107,39404],{"class":159},[49,154109,154110],{"class":73},".find_by_id(student.student_id):\n",[49,154112,154113,154115],{"class":51,"line":2322},[49,154114,16429],{"class":77},[49,154116,126338],{"class":159},[49,154118,154119,154121],{"class":51,"line":2327},[49,154120,31376],{"class":159},[49,154122,154123],{"class":73},".students.append(student)\n",[49,154125,154126,154128],{"class":51,"line":2341},[49,154127,15449],{"class":77},[49,154129,154130],{"class":159}," True\n",[14,154132,154133],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[782,154135,154137],{"id":154136},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[18,154139,154141],{"id":154140},"_1251-数据结构","12.5.1 数据结构",[40,154143,154145],{"className":30909,"code":154144,"language":30911,"meta":27,"style":27},"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",[46,154146,154147,154155,154186,154216,154245,154274],{"__ignoreMap":27},[49,154148,154149,154151,154153],{"class":51,"line":52},[49,154150,148996],{"class":73},[49,154152,78],{"class":77},[49,154154,55978],{"class":73},[49,154156,154157,154159,154161,154163,154165,154167,154170,154172,154175,154177,154179,154181,154184],{"class":51,"line":63},[49,154158,148916],{"class":73},[49,154160,148528],{"class":59},[49,154162,51968],{"class":73},[49,154164,149139],{"class":59},[49,154166,13132],{"class":73},[49,154168,154169],{"class":59},"\"category\"",[49,154171,51968],{"class":73},[49,154173,154174],{"class":59},"\"手机\"",[49,154176,13132],{"class":73},[49,154178,84615],{"class":59},[49,154180,51968],{"class":73},[49,154182,154183],{"class":159},"12000",[49,154185,5627],{"class":73},[49,154187,154188,154190,154192,154194,154196,154198,154200,154202,154205,154207,154209,154211,154214],{"class":51,"line":70},[49,154189,148916],{"class":73},[49,154191,148528],{"class":59},[49,154193,51968],{"class":73},[49,154195,149139],{"class":59},[49,154197,13132],{"class":73},[49,154199,154169],{"class":59},[49,154201,51968],{"class":73},[49,154203,154204],{"class":59},"\"电脑\"",[49,154206,13132],{"class":73},[49,154208,84615],{"class":59},[49,154210,51968],{"class":73},[49,154212,154213],{"class":159},"18000",[49,154215,5627],{"class":73},[49,154217,154218,154220,154222,154224,154226,154228,154230,154232,154234,154236,154238,154240,154243],{"class":51,"line":219},[49,154219,148916],{"class":73},[49,154221,148528],{"class":59},[49,154223,51968],{"class":73},[49,154225,149160],{"class":59},[49,154227,13132],{"class":73},[49,154229,154169],{"class":59},[49,154231,51968],{"class":73},[49,154233,154174],{"class":59},[49,154235,13132],{"class":73},[49,154237,84615],{"class":59},[49,154239,51968],{"class":73},[49,154241,154242],{"class":159},"15000",[49,154244,5627],{"class":73},[49,154246,154247,154249,154251,154253,154255,154257,154259,154261,154263,154265,154267,154269,154272],{"class":51,"line":233},[49,154248,148916],{"class":73},[49,154250,148528],{"class":59},[49,154252,51968],{"class":73},[49,154254,149160],{"class":59},[49,154256,13132],{"class":73},[49,154258,154169],{"class":59},[49,154260,51968],{"class":73},[49,154262,154204],{"class":59},[49,154264,13132],{"class":73},[49,154266,84615],{"class":59},[49,154268,51968],{"class":73},[49,154270,154271],{"class":159},"16000",[49,154273,5627],{"class":73},[49,154275,154276],{"class":51,"line":241},[49,154277,33777],{"class":73},[18,154279,154281],{"id":154280},"_1252-按日期统计","12.5.2 按日期统计",[40,154283,154285],{"className":30909,"code":154284,"language":30911,"meta":27,"style":27},"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",[46,154286,154287,154296,154300,154311,154325,154338,154357,154361],{"__ignoreMap":27},[49,154288,154289,154292,154294],{"class":51,"line":52},[49,154290,154291],{"class":73},"daily_total ",[49,154293,78],{"class":77},[49,154295,88399],{"class":73},[49,154297,154298],{"class":51,"line":63},[49,154299,399],{"emptyLinePlaceholder":398},[49,154301,154302,154304,154306,154308],{"class":51,"line":70},[49,154303,3722],{"class":77},[49,154305,148740],{"class":73},[49,154307,26732],{"class":77},[49,154309,154310],{"class":73}," sales:\n",[49,154312,154313,154316,154318,154321,154323],{"class":51,"line":219},[49,154314,154315],{"class":73},"    date ",[49,154317,78],{"class":77},[49,154319,154320],{"class":73}," item[",[49,154322,148528],{"class":59},[49,154324,33777],{"class":73},[49,154326,154327,154330,154332,154334,154336],{"class":51,"line":233},[49,154328,154329],{"class":73},"    amount ",[49,154331,78],{"class":77},[49,154333,154320],{"class":73},[49,154335,84615],{"class":59},[49,154337,33777],{"class":73},[49,154339,154340,154343,154345,154348,154350,154352,154354],{"class":51,"line":241},[49,154341,154342],{"class":73},"    daily_total[date] ",[49,154344,78],{"class":77},[49,154346,154347],{"class":73}," daily_total.get(date, ",[49,154349,1021],{"class":159},[49,154351,14411],{"class":73},[49,154353,1310],{"class":77},[49,154355,154356],{"class":73}," amount\n",[49,154358,154359],{"class":51,"line":1920},[49,154360,399],{"emptyLinePlaceholder":398},[49,154362,154363,154365],{"class":51,"line":2011},[49,154364,30946],{"class":159},[49,154366,154367],{"class":73},"(daily_total)\n",[18,154369,154371],{"id":154370},"_1253-按类别统计","12.5.3 按类别统计",[40,154373,154375],{"className":30909,"code":154374,"language":30911,"meta":27,"style":27},"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",[46,154376,154377,154386,154390,154400,154413,154425,154443,154447],{"__ignoreMap":27},[49,154378,154379,154382,154384],{"class":51,"line":52},[49,154380,154381],{"class":73},"category_total ",[49,154383,78],{"class":77},[49,154385,88399],{"class":73},[49,154387,154388],{"class":51,"line":63},[49,154389,399],{"emptyLinePlaceholder":398},[49,154391,154392,154394,154396,154398],{"class":51,"line":70},[49,154393,3722],{"class":77},[49,154395,148740],{"class":73},[49,154397,26732],{"class":77},[49,154399,154310],{"class":73},[49,154401,154402,154405,154407,154409,154411],{"class":51,"line":219},[49,154403,154404],{"class":73},"    category ",[49,154406,78],{"class":77},[49,154408,154320],{"class":73},[49,154410,154169],{"class":59},[49,154412,33777],{"class":73},[49,154414,154415,154417,154419,154421,154423],{"class":51,"line":233},[49,154416,154329],{"class":73},[49,154418,78],{"class":77},[49,154420,154320],{"class":73},[49,154422,84615],{"class":59},[49,154424,33777],{"class":73},[49,154426,154427,154430,154432,154435,154437,154439,154441],{"class":51,"line":241},[49,154428,154429],{"class":73},"    category_total[category] ",[49,154431,78],{"class":77},[49,154433,154434],{"class":73}," category_total.get(category, ",[49,154436,1021],{"class":159},[49,154438,14411],{"class":73},[49,154440,1310],{"class":77},[49,154442,154356],{"class":73},[49,154444,154445],{"class":51,"line":1920},[49,154446,399],{"emptyLinePlaceholder":398},[49,154448,154449,154451],{"class":51,"line":2011},[49,154450,30946],{"class":159},[49,154452,154453],{"class":73},"(category_total)\n",[18,154455,154457],{"id":154456},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[40,154459,154461],{"className":30909,"code":154460,"language":30911,"meta":27,"style":27},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[46,154462,154463,154488],{"__ignoreMap":27},[49,154464,154465,154468,154470,154472,154475,154478,154481,154484,154486],{"class":51,"line":52},[49,154466,154467],{"class":73},"top_date, top_amount ",[49,154469,78],{"class":77},[49,154471,6648],{"class":159},[49,154473,154474],{"class":73},"(daily_total.items(), ",[49,154476,154477],{"class":5913},"key",[49,154479,154480],{"class":77},"=lambda",[49,154482,154483],{"class":73}," item: item[",[49,154485,1047],{"class":159},[49,154487,5354],{"class":73},[49,154489,154490,154492],{"class":51,"line":63},[49,154491,30946],{"class":159},[49,154493,154494],{"class":73},"(top_date, top_amount)\n",[782,154496,154498],{"id":154497},"_126-绘制柱状图","12.6 绘制柱状图",[40,154500,154502],{"className":30909,"code":154501,"language":30911,"meta":27,"style":27},"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",[46,154503,154504,154518,154529,154533,154541,154553,154565,154576,154580,154584,154594,154605,154619,154624,154641,154658,154674,154678],{"__ignoreMap":27},[49,154505,154506,154508,154510,154512,154514,154516],{"class":51,"line":52},[49,154507,31268],{"class":77},[49,154509,147910],{"class":73},[49,154511,30923],{"class":77},[49,154513,147915],{"class":73},[49,154515,31914],{"class":77},[49,154517,147920],{"class":73},[49,154519,154520,154522,154524,154526],{"class":51,"line":63},[49,154521,31268],{"class":77},[49,154523,147769],{"class":73},[49,154525,30923],{"class":77},[49,154527,154528],{"class":73}," Bar\n",[49,154530,154531],{"class":51,"line":70},[49,154532,399],{"emptyLinePlaceholder":398},[49,154534,154535,154537,154539],{"class":51,"line":219},[49,154536,154381],{"class":73},[49,154538,78],{"class":77},[49,154540,16269],{"class":73},[49,154542,154543,154546,154548,154551],{"class":51,"line":233},[49,154544,154545],{"class":59},"    \"手机\"",[49,154547,51968],{"class":73},[49,154549,154550],{"class":159},"27000",[49,154552,31997],{"class":73},[49,154554,154555,154558,154560,154563],{"class":51,"line":241},[49,154556,154557],{"class":59},"    \"电脑\"",[49,154559,51968],{"class":73},[49,154561,154562],{"class":159},"34000",[49,154564,31997],{"class":73},[49,154566,154567,154570,154572,154574],{"class":51,"line":1920},[49,154568,154569],{"class":59},"    \"耳机\"",[49,154571,51968],{"class":73},[49,154573,124930],{"class":159},[49,154575,31997],{"class":73},[49,154577,154578],{"class":51,"line":2011},[49,154579,2264],{"class":73},[49,154581,154582],{"class":51,"line":2017},[49,154583,399],{"emptyLinePlaceholder":398},[49,154585,154586,154589,154591],{"class":51,"line":2029},[49,154587,154588],{"class":73},"bar ",[49,154590,78],{"class":77},[49,154592,154593],{"class":73}," Bar()\n",[49,154595,154596,154599,154602],{"class":51,"line":2311},[49,154597,154598],{"class":73},"bar.add_xaxis(",[49,154600,154601],{"class":159},"list",[49,154603,154604],{"class":73},"(category_total.keys()))\n",[49,154606,154607,154610,154612,154614,154616],{"class":51,"line":2316},[49,154608,154609],{"class":73},"bar.add_yaxis(",[49,154611,147826],{"class":59},[49,154613,13132],{"class":73},[49,154615,154601],{"class":159},[49,154617,154618],{"class":73},"(category_total.values()))\n",[49,154620,154621],{"class":51,"line":2322},[49,154622,154623],{"class":73},"bar.set_global_opts(\n",[49,154625,154626,154628,154630,154632,154634,154636,154639],{"class":51,"line":2327},[49,154627,148004],{"class":5913},[49,154629,78],{"class":77},[49,154631,148009],{"class":73},[49,154633,51938],{"class":5913},[49,154635,78],{"class":77},[49,154637,154638],{"class":59},"\"品类销售额\"",[49,154640,38578],{"class":73},[49,154642,154643,154645,154647,154649,154651,154653,154656],{"class":51,"line":2341},[49,154644,148023],{"class":5913},[49,154646,78],{"class":77},[49,154648,148028],{"class":73},[49,154650,80341],{"class":5913},[49,154652,78],{"class":77},[49,154654,154655],{"class":59},"\"品类\"",[49,154657,38578],{"class":73},[49,154659,154660,154662,154664,154666,154668,154670,154672],{"class":51,"line":2346},[49,154661,148042],{"class":5913},[49,154663,78],{"class":77},[49,154665,148028],{"class":73},[49,154667,80341],{"class":5913},[49,154669,78],{"class":77},[49,154671,147826],{"class":59},[49,154673,38578],{"class":73},[49,154675,154676],{"class":51,"line":2352},[49,154677,847],{"class":73},[49,154679,154680,154683,154686],{"class":51,"line":2373},[49,154681,154682],{"class":73},"bar.render(",[49,154684,154685],{"class":59},"\"category_sales.html\"",[49,154687,847],{"class":73},[782,154689,154691],{"id":154690},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154693,154694],{},"时间线适合展示不同日期、月份、年份的数据变化。",[40,154696,154698],{"className":30909,"code":154697,"language":30911,"meta":27,"style":27},"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",[46,154699,154700,154714,154725,154729,154737,154761,154784,154809,154813,154817,154827,154831,154842,154851,154861,154875,154906,154911,154915],{"__ignoreMap":27},[49,154701,154702,154704,154706,154708,154710,154712],{"class":51,"line":52},[49,154703,31268],{"class":77},[49,154705,147910],{"class":73},[49,154707,30923],{"class":77},[49,154709,147915],{"class":73},[49,154711,31914],{"class":77},[49,154713,147920],{"class":73},[49,154715,154716,154718,154720,154722],{"class":51,"line":63},[49,154717,31268],{"class":77},[49,154719,147769],{"class":73},[49,154721,30923],{"class":77},[49,154723,154724],{"class":73}," Bar, Timeline\n",[49,154726,154727],{"class":51,"line":70},[49,154728,399],{"emptyLinePlaceholder":398},[49,154730,154731,154733,154735],{"class":51,"line":219},[49,154732,102189],{"class":73},[49,154734,78],{"class":77},[49,154736,16269],{"class":73},[49,154738,154739,154742,154745,154747,154749,154751,154753,154755,154757,154759],{"class":51,"line":233},[49,154740,154741],{"class":59},"    \"2024-10-01\"",[49,154743,154744],{"class":73},": {",[49,154746,154174],{"class":59},[49,154748,51968],{"class":73},[49,154750,154183],{"class":159},[49,154752,13132],{"class":73},[49,154754,154204],{"class":59},[49,154756,51968],{"class":73},[49,154758,154213],{"class":159},[49,154760,5627],{"class":73},[49,154762,154763,154766,154768,154770,154772,154774,154776,154778,154780,154782],{"class":51,"line":241},[49,154764,154765],{"class":59},"    \"2024-10-02\"",[49,154767,154744],{"class":73},[49,154769,154174],{"class":59},[49,154771,51968],{"class":73},[49,154773,154242],{"class":159},[49,154775,13132],{"class":73},[49,154777,154204],{"class":59},[49,154779,51968],{"class":73},[49,154781,154271],{"class":159},[49,154783,5627],{"class":73},[49,154785,154786,154789,154791,154793,154795,154798,154800,154802,154804,154807],{"class":51,"line":1920},[49,154787,154788],{"class":59},"    \"2024-10-03\"",[49,154790,154744],{"class":73},[49,154792,154174],{"class":59},[49,154794,51968],{"class":73},[49,154796,154797],{"class":159},"17000",[49,154799,13132],{"class":73},[49,154801,154204],{"class":59},[49,154803,51968],{"class":73},[49,154805,154806],{"class":159},"19000",[49,154808,5627],{"class":73},[49,154810,154811],{"class":51,"line":2011},[49,154812,2264],{"class":73},[49,154814,154815],{"class":51,"line":2017},[49,154816,399],{"emptyLinePlaceholder":398},[49,154818,154819,154822,154824],{"class":51,"line":2029},[49,154820,154821],{"class":73},"timeline ",[49,154823,78],{"class":77},[49,154825,154826],{"class":73}," Timeline()\n",[49,154828,154829],{"class":51,"line":2311},[49,154830,399],{"emptyLinePlaceholder":398},[49,154832,154833,154835,154838,154840],{"class":51,"line":2316},[49,154834,3722],{"class":77},[49,154836,154837],{"class":73}," date, category_data ",[49,154839,26732],{"class":77},[49,154841,149679],{"class":73},[49,154843,154844,154847,154849],{"class":51,"line":2322},[49,154845,154846],{"class":73},"    bar ",[49,154848,78],{"class":77},[49,154850,154593],{"class":73},[49,154852,154853,154856,154858],{"class":51,"line":2327},[49,154854,154855],{"class":73},"    bar.add_xaxis(",[49,154857,154601],{"class":159},[49,154859,154860],{"class":73},"(category_data.keys()))\n",[49,154862,154863,154866,154868,154870,154872],{"class":51,"line":2341},[49,154864,154865],{"class":73},"    bar.add_yaxis(",[49,154867,147826],{"class":59},[49,154869,13132],{"class":73},[49,154871,154601],{"class":159},[49,154873,154874],{"class":73},"(category_data.values()))\n",[49,154876,154877,154880,154883,154885,154887,154889,154891,154893,154895,154897,154899,154901,154904],{"class":51,"line":2346},[49,154878,154879],{"class":73},"    bar.set_global_opts(",[49,154881,154882],{"class":5913},"title_opts",[49,154884,78],{"class":77},[49,154886,148009],{"class":73},[49,154888,51938],{"class":5913},[49,154890,78],{"class":77},[49,154892,891],{"class":77},[49,154894,1080],{"class":59},[49,154896,1725],{"class":159},[49,154898,74457],{"class":73},[49,154900,1775],{"class":159},[49,154902,154903],{"class":59},"销售额\"",[49,154905,31028],{"class":73},[49,154907,154908],{"class":51,"line":2352},[49,154909,154910],{"class":73},"    timeline.add(bar, date)\n",[49,154912,154913],{"class":51,"line":2373},[49,154914,399],{"emptyLinePlaceholder":398},[49,154916,154917,154920,154923],{"class":51,"line":2378},[49,154918,154919],{"class":73},"timeline.render(",[49,154921,154922],{"class":59},"\"timeline_sales.html\"",[49,154924,847],{"class":73},[782,154926,154928],{"id":154927},"_128-绘制地图","12.8 绘制地图",[14,154930,154931],{},"地图适合展示地区数据。",[40,154933,154935],{"className":30909,"code":154934,"language":30911,"meta":27,"style":27},"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",[46,154936,154937,154951,154962,154966,154974,154987,154999,155012,155025,155029,155033,155043,155058,155063,155080,155099,155103],{"__ignoreMap":27},[49,154938,154939,154941,154943,154945,154947,154949],{"class":51,"line":52},[49,154940,31268],{"class":77},[49,154942,147910],{"class":73},[49,154944,30923],{"class":77},[49,154946,147915],{"class":73},[49,154948,31914],{"class":77},[49,154950,147920],{"class":73},[49,154952,154953,154955,154957,154959],{"class":51,"line":63},[49,154954,31268],{"class":77},[49,154956,147769],{"class":73},[49,154958,30923],{"class":77},[49,154960,154961],{"class":73}," Map\n",[49,154963,154964],{"class":51,"line":70},[49,154965,399],{"emptyLinePlaceholder":398},[49,154967,154968,154970,154972],{"class":51,"line":219},[49,154969,102189],{"class":73},[49,154971,78],{"class":77},[49,154973,55978],{"class":73},[49,154975,154976,154979,154981,154983,154985],{"class":51,"line":233},[49,154977,154978],{"class":73},"    (",[49,154980,69800],{"class":59},[49,154982,13132],{"class":73},[49,154984,1646],{"class":159},[49,154986,38578],{"class":73},[49,154988,154989,154991,154993,154995,154997],{"class":51,"line":241},[49,154990,154978],{"class":73},[49,154992,69820],{"class":59},[49,154994,13132],{"class":73},[49,154996,147843],{"class":159},[49,154998,38578],{"class":73},[49,155000,155001,155003,155006,155008,155010],{"class":51,"line":1920},[49,155002,154978],{"class":73},[49,155004,155005],{"class":59},"\"广东\"",[49,155007,13132],{"class":73},[49,155009,2421],{"class":159},[49,155011,38578],{"class":73},[49,155013,155014,155016,155019,155021,155023],{"class":51,"line":2011},[49,155015,154978],{"class":73},[49,155017,155018],{"class":59},"\"浙江\"",[49,155020,13132],{"class":73},[49,155022,147848],{"class":159},[49,155024,38578],{"class":73},[49,155026,155027],{"class":51,"line":2017},[49,155028,33777],{"class":73},[49,155030,155031],{"class":51,"line":2029},[49,155032,399],{"emptyLinePlaceholder":398},[49,155034,155035,155038,155040],{"class":51,"line":2311},[49,155036,155037],{"class":73},"map_chart ",[49,155039,78],{"class":77},[49,155041,155042],{"class":73}," Map()\n",[49,155044,155045,155048,155050,155053,155056],{"class":51,"line":2316},[49,155046,155047],{"class":73},"map_chart.add(",[49,155049,147826],{"class":59},[49,155051,155052],{"class":73},", data, ",[49,155054,155055],{"class":59},"\"china\"",[49,155057,847],{"class":73},[49,155059,155060],{"class":51,"line":2322},[49,155061,155062],{"class":73},"map_chart.set_global_opts(\n",[49,155064,155065,155067,155069,155071,155073,155075,155078],{"class":51,"line":2327},[49,155066,148004],{"class":5913},[49,155068,78],{"class":77},[49,155070,148009],{"class":73},[49,155072,51938],{"class":5913},[49,155074,78],{"class":77},[49,155076,155077],{"class":59},"\"地区销售额\"",[49,155079,38578],{"class":73},[49,155081,155082,155085,155087,155090,155093,155095,155097],{"class":51,"line":2341},[49,155083,155084],{"class":5913},"    visualmap_opts",[49,155086,78],{"class":77},[49,155088,155089],{"class":73},"opts.VisualMapOpts(",[49,155091,155092],{"class":5913},"max_",[49,155094,78],{"class":77},[49,155096,2421],{"class":159},[49,155098,38578],{"class":73},[49,155100,155101],{"class":51,"line":2346},[49,155102,847],{"class":73},[49,155104,155105,155108,155111],{"class":51,"line":2352},[49,155106,155107],{"class":73},"map_chart.render(",[49,155109,155110],{"class":59},"\"map_sales.html\"",[49,155112,847],{"class":73},[14,155114,155115],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[782,155117,155119],{"id":155118},"_129-项目拆分建议","12.9 项目拆分建议",[14,155121,155122],{},"当代码超过一个文件时，可以这样组织：",[40,155124,155127],{"className":155125,"code":155126,"language":5884,"meta":27},[5882],"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",[46,155128,155126],{"__ignoreMap":27},[14,155130,155131],{},"职责：",[30,155133,155134,155140,155146,155152],{},[33,155135,155136,155139],{},[46,155137,155138],{},"main.py","：程序入口。",[33,155141,155142,155145],{},[46,155143,155144],{},"file_utils.py","：读写 JSON。",[33,155147,155148,155151],{},[46,155149,155150],{},"sales_service.py","：统计销售数据。",[33,155153,155154,155157],{},[46,155155,155156],{},"chart_builder.py","：生成图表。",[782,155159,155161],{"id":155160},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,155163,155164],{},"语法基础：",[30,155166,155167,155170,155173,155176],{},[33,155168,155169],{},"会写变量、注释、输入输出。",[33,155171,155172],{},"会使用 int、float、str、bool。",[33,155174,155175],{},"会做类型转换。",[33,155177,155178],{},"会使用 f-string 格式化输出。",[14,155180,155181],{},"流程控制：",[30,155183,155184,155190,155196,155204],{},[33,155185,155186,155187,28916],{},"会写 ",[46,155188,155189],{},"if elif else",[33,155191,155186,155192,101549,155194,28916],{},[46,155193,109194],{},[46,155195,3722],{},[33,155197,155198,155199,101549,155201,28916],{},"理解 ",[46,155200,2751],{},[46,155202,155203],{},"continue",[33,155205,155206],{},"能写嵌套循环。",[14,155208,155209],{},"函数：",[30,155211,155212,155215,155218,155221],{},[33,155213,155214],{},"会定义和调用函数。",[33,155216,155217],{},"理解参数和返回值。",[33,155219,155220],{},"知道局部变量和全局变量。",[33,155222,155223],{},"会使用默认参数、关键字参数、不定长参数。",[14,155225,155226],{},"容器：",[30,155228,155229,155232,155235,155238,155241],{},[33,155230,155231],{},"会使用列表增删改查。",[33,155233,155234],{},"会遍历列表、字典。",[33,155236,155237],{},"会使用切片。",[33,155239,155240],{},"会用集合去重。",[33,155242,155243],{},"会处理列表嵌套字典。",[14,155245,155246],{},"文件和模块：",[30,155248,155249,155252,155255,155258,155261],{},[33,155250,155251],{},"会读写文本文件。",[33,155253,155254],{},"会读写 JSON。",[33,155256,155257],{},"会捕获常见异常。",[33,155259,155260],{},"会导入模块和第三方包。",[33,155262,155263],{},"会创建简单包结构。",[14,155265,155266],{},"项目能力：",[30,155268,155269,155272,155275,155278,155281],{},[33,155270,155271],{},"能把代码拆成函数。",[33,155273,155274],{},"能把数据保存到文件。",[33,155276,155277],{},"能处理用户输入错误。",[33,155279,155280],{},"能写一个完整菜单程序。",[33,155282,155283],{},"能用 pyecharts 生成图表。",[782,155285,155287],{"id":155286},"_1211-推荐练习顺序","12.11 推荐练习顺序",[30,155289,155290,155293,155296,155299,155302,155305,155308,155311],{},[33,155291,155292],{},"猜数字游戏。",[33,155294,155295],{},"ATM 菜单程序。",[33,155297,155298],{},"学生成绩统计。",[33,155300,155301],{},"学生管理系统函数版。",[33,155303,155304],{},"学生管理系统文件持久化版。",[33,155306,155307],{},"学生管理系统面向对象版。",[33,155309,155310],{},"销售数据统计。",[33,155312,155313],{},"销售数据可视化。",[782,155315,155317],{"id":155316},"_1212-常见学习误区","12.12 常见学习误区",[30,155319,155320,155323,155326,155329,155332,155335,155338],{},[33,155321,155322],{},"只看视频不敲代码。",[33,155324,155325],{},"一报错就复制错误去搜，不先读报错位置。",[33,155327,155328],{},"变量名随便写，后续自己看不懂。",[33,155330,155331],{},"所有代码都写在一个文件一个函数里。",[33,155333,155334],{},"不保存练习代码，复习时没有材料。",[33,155336,155337],{},"还没掌握列表字典就急着学框架。",[33,155339,155340],{},"不会读官方文档，只依赖教程。",[782,155342,155344],{"id":155343},"_1213-如何读报错","12.13 如何读报错",[14,155346,155347],{},"报错通常从下往上看最后几行。",[14,155349,15832],{},[40,155351,155354],{"className":155352,"code":155353,"language":5884,"meta":27},[5882],"ValueError: invalid literal for int() with base 10: 'abc'\n",[46,155355,155353],{"__ignoreMap":27},[14,155357,25290],{},[30,155359,155360,155366,155376],{},[33,155361,155362,155363,28916],{},"异常类型是 ",[46,155364,155365],{},"ValueError",[33,155367,107876,155368,155371,155372,155375],{},[46,155369,155370],{},"int()"," 无法把 ",[46,155373,155374],{},"'abc'"," 转成整数。",[33,155377,155378],{},"应该检查输入内容或增加异常处理。",[14,155380,155381],{},"再看文件名和行号：",[40,155383,155386],{"className":155384,"code":155385,"language":5884,"meta":27},[5882],"File \"main.py\", line 10, in \u003Cmodule>\n",[46,155387,155385],{"__ignoreMap":27},[14,155389,155390,155391,155393],{},"表示错误发生在 ",[46,155392,155138],{}," 第 10 行。",[782,155395,155397],{"id":155396},"_1214-后续学习方向","12.14 后续学习方向",[14,155399,155400],{},"Python 基础完成后，可以按兴趣选择方向：",[30,155402,155403,155415,155424,155436,155447,155456,155466],{},[33,155404,155405,155406,1042,155409,1042,155412,28916],{},"自动化办公：",[46,155407,155408],{},"openpyxl",[46,155410,155411],{},"python-docx",[46,155413,155414],{},"pdfplumber",[33,155416,155417,155418,1042,155420,1042,155422,28916],{},"数据分析：",[46,155419,101157],{},[46,155421,146716],{},[46,155423,146724],{},[33,155425,155426,155427,1042,155430,1042,155433,28916],{},"Web 后端：",[46,155428,155429],{},"Flask",[46,155431,155432],{},"FastAPI",[46,155434,155435],{},"Django",[33,155437,155438,155439,1042,155441,1042,155444,28916],{},"爬虫：",[46,155440,146701],{},[46,155442,155443],{},"BeautifulSoup",[46,155445,155446],{},"Scrapy",[33,155448,155449,155450,1042,155452,155455],{},"测试开发：",[46,155451,146748],{},[46,155453,155454],{},"selenium","、接口测试。",[33,155457,155458,155459,1042,155461,1042,155463,28916],{},"人工智能：",[46,155460,101157],{},[46,155462,146716],{},[46,155464,155465],{},"pytorch",[33,155467,155468,155469,1042,155471,1042,155474,28916],{},"运维脚本：",[46,155470,146317],{},[46,155472,155473],{},"subprocess",[46,155475,155476],{},"paramiko",[14,155478,155479],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[782,155481,155483],{"id":155482},"_1215-结课练习","12.15 结课练习",[30,155485,155486,155489,155492,155495,155498,155501,155504,155507],{},[33,155487,155488],{},"完成函数版学生管理系统。",[33,155490,155491],{},"给学生管理系统增加 JSON 持久化。",[33,155493,155494],{},"给学生管理系统增加异常处理。",[33,155496,155497],{},"把学生管理系统改成面向对象版。",[33,155499,155500],{},"使用 pyecharts 绘制学生成绩柱状图。",[33,155502,155503],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[33,155505,155506],{},"按品类统计销售额并绘制柱状图。",[33,155508,155509],{},"写一份自己的 Python 学习路线图。",[757,155511,155512],{},"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":27,"searchDepth":63,"depth":63,"links":155514},[155515,155516,155519,155520,155521,155527,155528,155529,155530,155531,155532,155533,155534,155535,155536],{"id":152231,"depth":63,"text":152232},{"id":152281,"depth":63,"text":152282,"children":155517},[155518],{"id":152285,"depth":70,"text":152286},{"id":152324,"depth":63,"text":152325},{"id":153798,"depth":63,"text":153799},{"id":154136,"depth":63,"text":154137,"children":155522},[155523,155524,155525,155526],{"id":154140,"depth":70,"text":154141},{"id":154280,"depth":70,"text":154281},{"id":154370,"depth":70,"text":154371},{"id":154456,"depth":70,"text":154457},{"id":154497,"depth":63,"text":154498},{"id":154690,"depth":63,"text":154691},{"id":154927,"depth":63,"text":154928},{"id":155118,"depth":63,"text":155119},{"id":155160,"depth":63,"text":155161},{"id":155286,"depth":63,"text":155287},{"id":155316,"depth":63,"text":155317},{"id":155343,"depth":63,"text":155344},{"id":155396,"depth":63,"text":155397},{"id":155482,"depth":63,"text":155483},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152223,"description":24072},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155543,"title":155544,"body":155545,"description":24072,"extension":766,"meta":158014,"navigation":398,"path":158015,"seo":158016,"stem":158017,"__hash__":158018},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155546,"toc":157989},[155547,155550,155554,155557,155560,155580,155583,155606,155609,155612,155634,155637,155659,155663,155666,155706,155709,155830,155834,155837,155877,155880,155904,155907,155911,155914,155928,155961,155964,155999,156002,156025,156028,156061,156064,156066,156072,156147,156150,156156,156173,156213,156217,156220,156266,156268,156306,156309,156344,156347,156382,156385,156417,156420,156439,156443,156447,156560,156562,156637,156641,156687,156690,156716,156725,156729,156732,156795,156803,156831,156835,156875,156940,156944,156947,156986,156989,157034,157037,157098,157102,157129,157132,157160,157163,157167,157171,157236,157239,157277,157280,157312,157316,157415,157419,157422,157495,157498,157546,157550,157556,157596,157599,157646,157649,157698,157702,157704,157718,157720,157901,157905,157932,157952,157959,157963,157980,157986],[10,155548,155544],{"id":155549},"_2-基础语法变量与字符串",[782,155551,155553],{"id":155552},"_21-注释","2.1 注释",[14,155555,155556],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155558,155559],{},"单行注释：",[40,155561,155563],{"className":30909,"code":155562,"language":30911,"meta":27,"style":27},"# 这是单行注释\nprint(\"hello\")\n",[46,155564,155565,155570],{"__ignoreMap":27},[49,155566,155567],{"class":51,"line":52},[49,155568,155569],{"class":66},"# 这是单行注释\n",[49,155571,155572,155574,155576,155578],{"class":51,"line":63},[49,155573,30946],{"class":159},[49,155575,841],{"class":73},[49,155577,6541],{"class":59},[49,155579,847],{"class":73},[14,155581,155582],{},"多行说明常用三引号：",[40,155584,155586],{"className":30909,"code":155585,"language":30911,"meta":27,"style":27},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[46,155587,155588,155592,155597,155602],{"__ignoreMap":27},[49,155589,155590],{"class":51,"line":52},[49,155591,96229],{"class":59},[49,155593,155594],{"class":51,"line":63},[49,155595,155596],{"class":59},"这是多行说明。\n",[49,155598,155599],{"class":51,"line":70},[49,155600,155601],{"class":59},"常用于文件顶部说明、函数说明等。\n",[49,155603,155604],{"class":51,"line":219},[49,155605,96229],{"class":59},[14,155607,155608],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155610,155611],{},"不好：",[40,155613,155615],{"className":30909,"code":155614,"language":30911,"meta":27,"style":27},"# age 加 1\nage = age + 1\n",[46,155616,155617,155622],{"__ignoreMap":27},[49,155618,155619],{"class":51,"line":52},[49,155620,155621],{"class":66},"# age 加 1\n",[49,155623,155624,155626,155628,155630,155632],{"class":51,"line":63},[49,155625,147077],{"class":73},[49,155627,78],{"class":77},[49,155629,16404],{"class":73},[49,155631,1310],{"class":77},[49,155633,56230],{"class":159},[14,155635,155636],{},"较好：",[40,155638,155640],{"className":30909,"code":155639,"language":30911,"meta":27,"style":27},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[46,155641,155642,155647],{"__ignoreMap":27},[49,155643,155644],{"class":51,"line":52},[49,155645,155646],{"class":66},"# 用户过完生日后，年龄增加一岁\n",[49,155648,155649,155651,155653,155655,155657],{"class":51,"line":63},[49,155650,147077],{"class":73},[49,155652,78],{"class":77},[49,155654,16404],{"class":73},[49,155656,1310],{"class":77},[49,155658,56230],{"class":159},[782,155660,155662],{"id":155661},"_22-字面量","2.2 字面量",[14,155664,155665],{},"字面量就是代码中直接写出来的数据。",[40,155667,155669],{"className":30909,"code":155668,"language":30911,"meta":27,"style":27},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[46,155670,155671,155678,155685,155692,155699],{"__ignoreMap":27},[49,155672,155673,155675],{"class":51,"line":52},[49,155674,1140],{"class":159},[49,155676,155677],{"class":66},"          # 整数\n",[49,155679,155680,155682],{"class":51,"line":63},[49,155681,888],{"class":159},[49,155683,155684],{"class":66},"         # 小数\n",[49,155686,155687,155689],{"class":51,"line":70},[49,155688,6541],{"class":59},[49,155690,155691],{"class":66},"      # 字符串\n",[49,155693,155694,155696],{"class":51,"line":219},[49,155695,32007],{"class":159},[49,155697,155698],{"class":66},"         # 布尔值\n",[49,155700,155701,155703],{"class":51,"line":233},[49,155702,96217],{"class":159},[49,155704,155705],{"class":66},"         # 空值\n",[14,155707,155708],{},"常见字面量类型：",[610,155710,155711,155721],{},[613,155712,155713],{},[616,155714,155715,155717,155719],{},[619,155716,24432],{},[619,155718,28023],{},[619,155720,26558],{},[633,155722,155723,155734,155745,155756,155768,155780,155792,155805,155817],{},[616,155724,155725,155727,155731],{},[638,155726,844],{},[638,155728,155729],{},[46,155730,1140],{},[638,155732,155733],{},"整数",[616,155735,155736,155738,155742],{},[638,155737,880],{},[638,155739,155740],{},[46,155741,888],{},[638,155743,155744],{},"浮点数",[616,155746,155747,155749,155753],{},[638,155748,1999],{},[638,155750,155751],{},[46,155752,6541],{},[638,155754,155755],{},"字符串",[616,155757,155758,155760,155766],{},[638,155759,2054],{},[638,155761,155762,1042,155764],{},[46,155763,32007],{},[46,155765,34518],{},[638,155767,66546],{},[616,155769,155770,155773,155777],{},[638,155771,155772],{},"NoneType",[638,155774,155775],{},[46,155776,96217],{},[638,155778,155779],{},"空值",[616,155781,155782,155784,155789],{},[638,155783,154601],{},[638,155785,155786],{},[46,155787,155788],{},"[1, 2, 3]",[638,155790,155791],{},"列表",[616,155793,155794,155797,155802],{},[638,155795,155796],{},"tuple",[638,155798,155799],{},[46,155800,155801],{},"(1, 2, 3)",[638,155803,155804],{},"元组",[616,155806,155807,155809,155814],{},[638,155808,115077],{},[638,155810,155811],{},[46,155812,155813],{},"{\"name\": \"张三\"}",[638,155815,155816],{},"字典",[616,155818,155819,155822,155827],{},[638,155820,155821],{},"set",[638,155823,155824],{},[46,155825,155826],{},"{1, 2, 3}",[638,155828,155829],{},"集合",[782,155831,155833],{"id":155832},"_23-变量","2.3 变量",[14,155835,155836],{},"变量是保存数据的名字。",[40,155838,155840],{"className":30909,"code":155839,"language":30911,"meta":27,"style":27},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[46,155841,155842,155850,155858,155868],{"__ignoreMap":27},[49,155843,155844,155846,155848],{"class":51,"line":52},[49,155845,147067],{"class":73},[49,155847,78],{"class":77},[49,155849,149884],{"class":59},[49,155851,155852,155854,155856],{"class":51,"line":63},[49,155853,147077],{"class":73},[49,155855,78],{"class":77},[49,155857,147082],{"class":159},[49,155859,155860,155863,155865],{"class":51,"line":70},[49,155861,155862],{"class":73},"height ",[49,155864,78],{"class":77},[49,155866,155867],{"class":159}," 1.75\n",[49,155869,155870,155873,155875],{"class":51,"line":219},[49,155871,155872],{"class":73},"is_student ",[49,155874,78],{"class":77},[49,155876,154130],{"class":159},[14,155878,155879],{},"Python 的变量不需要提前声明类型：",[40,155881,155883],{"className":30909,"code":155882,"language":30911,"meta":27,"style":27},"score = 100\nscore = \"满分\"\n",[46,155884,155885,155895],{"__ignoreMap":27},[49,155886,155887,155890,155892],{"class":51,"line":52},[49,155888,155889],{"class":73},"score ",[49,155891,78],{"class":77},[49,155893,155894],{"class":159}," 100\n",[49,155896,155897,155899,155901],{"class":51,"line":63},[49,155898,155889],{"class":73},[49,155900,78],{"class":77},[49,155902,155903],{"class":59}," \"满分\"\n",[14,155905,155906],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[782,155908,155910],{"id":155909},"_24-变量命名规则","2.4 变量命名规则",[14,155912,155913],{},"硬性规则：",[30,155915,155916,155919,155922,155925],{},[33,155917,155918],{},"只能由字母、数字、下划线组成。",[33,155920,155921],{},"不能以数字开头。",[33,155923,155924],{},"不能使用 Python 关键字。",[33,155926,155927],{},"区分大小写。",[40,155929,155931],{"className":30909,"code":155930,"language":30911,"meta":27,"style":27},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[46,155932,155933,155942,155951],{"__ignoreMap":27},[49,155934,155935,155938,155940],{"class":51,"line":52},[49,155936,155937],{"class":73},"user_name ",[49,155939,78],{"class":77},[49,155941,147072],{"class":59},[49,155943,155944,155947,155949],{"class":51,"line":63},[49,155945,155946],{"class":73},"age2 ",[49,155948,78],{"class":77},[49,155950,147082],{"class":159},[49,155952,155953,155956,155958],{"class":51,"line":70},[49,155954,155955],{"class":73},"_token ",[49,155957,78],{"class":77},[49,155959,155960],{"class":59}," \"abc\"\n",[14,155962,155963],{},"错误写法：",[40,155965,155967],{"className":30909,"code":155966,"language":30911,"meta":27,"style":27},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[46,155968,155969,155978,155990],{"__ignoreMap":27},[49,155970,155971,155974,155976],{"class":51,"line":52},[49,155972,155973],{"class":77934},"2age",[49,155975,14261],{"class":77},[49,155977,147082],{"class":159},[49,155979,155980,155982,155984,155986,155988],{"class":51,"line":63},[49,155981,132115],{"class":73},[49,155983,1361],{"class":77},[49,155985,147067],{"class":73},[49,155987,78],{"class":77},[49,155989,147072],{"class":59},[49,155991,155992,155994,155996],{"class":51,"line":70},[49,155993,15391],{"class":77},[49,155995,14261],{"class":77},[49,155997,155998],{"class":59}," \"一班\"\n",[14,156000,156001],{},"查看关键字：",[40,156003,156005],{"className":30909,"code":156004,"language":30911,"meta":27,"style":27},"import keyword\n\nprint(keyword.kwlist)\n",[46,156006,156007,156014,156018],{"__ignoreMap":27},[49,156008,156009,156011],{"class":51,"line":52},[49,156010,30923],{"class":77},[49,156012,156013],{"class":73}," keyword\n",[49,156015,156016],{"class":51,"line":63},[49,156017,399],{"emptyLinePlaceholder":398},[49,156019,156020,156022],{"class":51,"line":70},[49,156021,30946],{"class":159},[49,156023,156024],{"class":73},"(keyword.kwlist)\n",[14,156026,156027],{},"推荐命名风格：",[40,156029,156031],{"className":30909,"code":156030,"language":30911,"meta":27,"style":27},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[46,156032,156033,156042,156052],{"__ignoreMap":27},[49,156034,156035,156038,156040],{"class":51,"line":52},[49,156036,156037],{"class":73},"student_name ",[49,156039,78],{"class":77},[49,156041,149884],{"class":59},[49,156043,156044,156047,156049],{"class":51,"line":63},[49,156045,156046],{"class":73},"total_price ",[49,156048,78],{"class":77},[49,156050,156051],{"class":159}," 99.8\n",[49,156053,156054,156057,156059],{"class":51,"line":70},[49,156055,156056],{"class":73},"is_finished ",[49,156058,78],{"class":77},[49,156060,126338],{"class":159},[14,156062,156063],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[782,156065,51263],{"id":51262},[14,156067,104897,156068,156071],{},[46,156069,156070],{},"type()"," 查看数据类型：",[40,156073,156075],{"className":30909,"code":156074,"language":30911,"meta":27,"style":27},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[46,156076,156077,156091,156105,156119,156133],{"__ignoreMap":27},[49,156078,156079,156081,156083,156085,156087,156089],{"class":51,"line":52},[49,156080,30946],{"class":159},[49,156082,841],{"class":73},[49,156084,103638],{"class":159},[49,156086,841],{"class":73},[49,156088,1140],{"class":159},[49,156090,31028],{"class":73},[49,156092,156093,156095,156097,156099,156101,156103],{"class":51,"line":63},[49,156094,30946],{"class":159},[49,156096,841],{"class":73},[49,156098,103638],{"class":159},[49,156100,841],{"class":73},[49,156102,888],{"class":159},[49,156104,31028],{"class":73},[49,156106,156107,156109,156111,156113,156115,156117],{"class":51,"line":70},[49,156108,30946],{"class":159},[49,156110,841],{"class":73},[49,156112,103638],{"class":159},[49,156114,841],{"class":73},[49,156116,6541],{"class":59},[49,156118,31028],{"class":73},[49,156120,156121,156123,156125,156127,156129,156131],{"class":51,"line":219},[49,156122,30946],{"class":159},[49,156124,841],{"class":73},[49,156126,103638],{"class":159},[49,156128,841],{"class":73},[49,156130,32007],{"class":159},[49,156132,31028],{"class":73},[49,156134,156135,156137,156139,156141,156143,156145],{"class":51,"line":233},[49,156136,30946],{"class":159},[49,156138,841],{"class":73},[49,156140,103638],{"class":159},[49,156142,841],{"class":73},[49,156144,96217],{"class":159},[49,156146,31028],{"class":73},[14,156148,156149],{},"输出类似：",[40,156151,156154],{"className":156152,"code":156153,"language":5884,"meta":27},[5882],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[46,156155,156153],{"__ignoreMap":27},[14,156157,9722,156158,107814,156160,156162,156163,156165,156166,22197,156168,156165,156170,156172],{},[46,156159,2054],{},[46,156161,844],{}," 的子类，",[46,156164,32007],{}," 可以当作 ",[46,156167,1047],{},[46,156169,34518],{},[46,156171,1021],{},"，但业务代码中不要滥用。",[40,156174,156176],{"className":30909,"code":156175,"language":30911,"meta":27,"style":27},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[46,156177,156178,156196],{"__ignoreMap":27},[49,156179,156180,156182,156184,156186,156188,156190,156193],{"class":51,"line":52},[49,156181,30946],{"class":159},[49,156183,841],{"class":73},[49,156185,32007],{"class":159},[49,156187,46097],{"class":77},[49,156189,25807],{"class":159},[49,156191,156192],{"class":73},")   ",[49,156194,156195],{"class":66},"# 2\n",[49,156197,156198,156200,156202,156204,156206,156208,156210],{"class":51,"line":63},[49,156199,30946],{"class":159},[49,156201,841],{"class":73},[49,156203,34518],{"class":159},[49,156205,46097],{"class":77},[49,156207,25807],{"class":159},[49,156209,46339],{"class":73},[49,156211,156212],{"class":66},"# 1\n",[782,156214,156216],{"id":156215},"_26-类型转换","2.6 类型转换",[14,156218,156219],{},"常用转换函数：",[40,156221,156223],{"className":30909,"code":156222,"language":30911,"meta":27,"style":27},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[46,156224,156225,156235,156246,156256],{"__ignoreMap":27},[49,156226,156227,156229,156231,156233],{"class":51,"line":52},[49,156228,844],{"class":159},[49,156230,841],{"class":73},[49,156232,54847],{"class":59},[49,156234,847],{"class":73},[49,156236,156237,156239,156241,156244],{"class":51,"line":63},[49,156238,880],{"class":159},[49,156240,841],{"class":73},[49,156242,156243],{"class":59},"\"3.14\"",[49,156245,847],{"class":73},[49,156247,156248,156250,156252,156254],{"class":51,"line":70},[49,156249,1999],{"class":159},[49,156251,841],{"class":73},[49,156253,1140],{"class":159},[49,156255,847],{"class":73},[49,156257,156258,156260,156262,156264],{"class":51,"line":219},[49,156259,2054],{"class":159},[49,156261,841],{"class":73},[49,156263,1047],{"class":159},[49,156265,847],{"class":73},[14,156267,15832],{},[40,156269,156271],{"className":30909,"code":156270,"language":30911,"meta":27,"style":27},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[46,156272,156273,156282,156293],{"__ignoreMap":27},[49,156274,156275,156277,156279],{"class":51,"line":52},[49,156276,147077],{"class":73},[49,156278,78],{"class":77},[49,156280,156281],{"class":59}," \"18\"\n",[49,156283,156284,156286,156288,156290],{"class":51,"line":63},[49,156285,147077],{"class":73},[49,156287,78],{"class":77},[49,156289,3080],{"class":159},[49,156291,156292],{"class":73},"(age)\n",[49,156294,156295,156297,156300,156302,156304],{"class":51,"line":70},[49,156296,30946],{"class":159},[49,156298,156299],{"class":73},"(age ",[49,156301,1310],{"class":77},[49,156303,25807],{"class":159},[49,156305,847],{"class":73},[14,156307,156308],{},"输入得到的内容永远是字符串：",[40,156310,156312],{"className":30909,"code":156311,"language":30911,"meta":27,"style":27},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[46,156313,156314,156330],{"__ignoreMap":27},[49,156315,156316,156319,156321,156323,156325,156328],{"class":51,"line":52},[49,156317,156318],{"class":73},"num ",[49,156320,78],{"class":77},[49,156322,61136],{"class":159},[49,156324,841],{"class":73},[49,156326,156327],{"class":59},"\"请输入数字:\"",[49,156329,847],{"class":73},[49,156331,156332,156334,156336,156338,156341],{"class":51,"line":63},[49,156333,30946],{"class":159},[49,156335,841],{"class":73},[49,156337,103638],{"class":159},[49,156339,156340],{"class":73},"(num))  ",[49,156342,156343],{"class":66},"# str\n",[14,156345,156346],{},"如果要做数学运算，必须转换：",[40,156348,156350],{"className":30909,"code":156349,"language":30911,"meta":27,"style":27},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[46,156351,156352,156370],{"__ignoreMap":27},[49,156353,156354,156356,156358,156360,156362,156364,156366,156368],{"class":51,"line":52},[49,156355,156318],{"class":73},[49,156357,78],{"class":77},[49,156359,3080],{"class":159},[49,156361,841],{"class":73},[49,156363,54352],{"class":159},[49,156365,841],{"class":73},[49,156367,156327],{"class":59},[49,156369,31028],{"class":73},[49,156371,156372,156374,156376,156378,156380],{"class":51,"line":63},[49,156373,30946],{"class":159},[49,156375,46150],{"class":73},[49,156377,1310],{"class":77},[49,156379,2736],{"class":159},[49,156381,847],{"class":73},[14,156383,156384],{},"常见错误：",[40,156386,156388],{"className":30909,"code":156387,"language":30911,"meta":27,"style":27},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[46,156389,156390,156403],{"__ignoreMap":27},[49,156391,156392,156394,156396,156398,156400],{"class":51,"line":52},[49,156393,844],{"class":159},[49,156395,841],{"class":73},[49,156397,156243],{"class":59},[49,156399,156192],{"class":73},[49,156401,156402],{"class":66},"# 错误\n",[49,156404,156405,156407,156409,156412,156415],{"class":51,"line":63},[49,156406,844],{"class":159},[49,156408,841],{"class":73},[49,156410,156411],{"class":59},"\"abc\"",[49,156413,156414],{"class":73},")    ",[49,156416,156402],{"class":66},[14,156418,156419],{},"正确写法：",[40,156421,156423],{"className":30909,"code":156422,"language":30911,"meta":27,"style":27},"num = float(\"3.14\")\n",[46,156424,156425],{"__ignoreMap":27},[49,156426,156427,156429,156431,156433,156435,156437],{"class":51,"line":52},[49,156428,156318],{"class":73},[49,156430,78],{"class":77},[49,156432,110328],{"class":159},[49,156434,841],{"class":73},[49,156436,156243],{"class":59},[49,156438,847],{"class":73},[782,156440,156442],{"id":156441},"_27-运算符","2.7 运算符",[18,156444,156446],{"id":156445},"_271-算术运算符","2.7.1 算术运算符",[610,156448,156449,156460],{},[613,156450,156451],{},[616,156452,156453,156456,156458],{},[619,156454,156455],{},"运算符",[619,156457,26558],{},[619,156459,28023],{},[633,156461,156462,156476,156490,156504,156518,156532,156546],{},[616,156463,156464,156468,156471],{},[638,156465,156466],{},[46,156467,1310],{},[638,156469,156470],{},"加法",[638,156472,156473],{},[46,156474,156475],{},"1 + 2",[616,156477,156478,156482,156485],{},[638,156479,156480],{},[46,156481,1361],{},[638,156483,156484],{},"减法",[638,156486,156487],{},[46,156488,156489],{},"5 - 3",[616,156491,156492,156496,156499],{},[638,156493,156494],{},[46,156495,1284],{},[638,156497,156498],{},"乘法",[638,156500,156501],{},[46,156502,156503],{},"2 * 3",[616,156505,156506,156510,156513],{},[638,156507,156508],{},[46,156509,1413],{},[638,156511,156512],{},"除法，结果是浮点数",[638,156514,156515],{},[46,156516,156517],{},"5 \u002F 2",[616,156519,156520,156524,156527],{},[638,156521,156522],{},[46,156523,33860],{},[638,156525,156526],{},"整除",[638,156528,156529],{},[46,156530,156531],{},"5 \u002F\u002F 2",[616,156533,156534,156538,156541],{},[638,156535,156536],{},[46,156537,1157],{},[638,156539,156540],{},"取余",[638,156542,156543],{},[46,156544,156545],{},"5 % 2",[616,156547,156548,156552,156555],{},[638,156549,156550],{},[46,156551,11358],{},[638,156553,156554],{},"幂运算",[638,156556,156557],{},[46,156558,156559],{},"2 ** 3",[14,156561,15832],{},[40,156563,156565],{"className":30909,"code":156564,"language":30911,"meta":27,"style":27},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[46,156566,156567,156585,156602,156619],{"__ignoreMap":27},[49,156568,156569,156571,156573,156575,156578,156580,156582],{"class":51,"line":52},[49,156570,30946],{"class":159},[49,156572,841],{"class":73},[49,156574,1148],{"class":159},[49,156576,156577],{"class":77}," \u002F",[49,156579,15452],{"class":159},[49,156581,156192],{"class":73},[49,156583,156584],{"class":66},"# 2.5\n",[49,156586,156587,156589,156591,156593,156596,156598,156600],{"class":51,"line":63},[49,156588,30946],{"class":159},[49,156590,841],{"class":73},[49,156592,1148],{"class":159},[49,156594,156595],{"class":77}," \u002F\u002F",[49,156597,15452],{"class":159},[49,156599,46339],{"class":73},[49,156601,156195],{"class":66},[49,156603,156604,156606,156608,156610,156613,156615,156617],{"class":51,"line":70},[49,156605,30946],{"class":159},[49,156607,841],{"class":73},[49,156609,1148],{"class":159},[49,156611,156612],{"class":77}," %",[49,156614,15452],{"class":159},[49,156616,156192],{"class":73},[49,156618,156212],{"class":66},[49,156620,156621,156623,156625,156627,156630,156632,156634],{"class":51,"line":219},[49,156622,30946],{"class":159},[49,156624,841],{"class":73},[49,156626,915],{"class":159},[49,156628,156629],{"class":77}," **",[49,156631,78601],{"class":159},[49,156633,46339],{"class":73},[49,156635,156636],{"class":66},"# 8\n",[18,156638,156640],{"id":156639},"_272-赋值运算符","2.7.2 赋值运算符",[40,156642,156644],{"className":30909,"code":156643,"language":30911,"meta":27,"style":27},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[46,156645,156646,156654,156662,156670,156678],{"__ignoreMap":27},[49,156647,156648,156650,156652],{"class":51,"line":52},[49,156649,156318],{"class":73},[49,156651,78],{"class":77},[49,156653,58959],{"class":159},[49,156655,156656,156658,156660],{"class":51,"line":63},[49,156657,156318],{"class":73},[49,156659,10174],{"class":77},[49,156661,54958],{"class":159},[49,156663,156664,156666,156668],{"class":51,"line":70},[49,156665,156318],{"class":73},[49,156667,150783],{"class":77},[49,156669,48254],{"class":159},[49,156671,156672,156674,156676],{"class":51,"line":219},[49,156673,156318],{"class":73},[49,156675,137679],{"class":77},[49,156677,120567],{"class":159},[49,156679,156680,156682,156685],{"class":51,"line":233},[49,156681,156318],{"class":73},[49,156683,156684],{"class":77},"\u002F=",[49,156686,48254],{"class":159},[14,156688,156689],{},"等价关系：",[40,156691,156693],{"className":30909,"code":156692,"language":30911,"meta":27,"style":27},"num += 1\nnum = num + 1\n",[46,156694,156695,156703],{"__ignoreMap":27},[49,156696,156697,156699,156701],{"class":51,"line":52},[49,156698,156318],{"class":73},[49,156700,10174],{"class":77},[49,156702,56230],{"class":159},[49,156704,156705,156707,156709,156712,156714],{"class":51,"line":63},[49,156706,156318],{"class":73},[49,156708,78],{"class":77},[49,156710,156711],{"class":73}," num ",[49,156713,1310],{"class":77},[49,156715,56230],{"class":159},[14,156717,156718,156719,101549,156722,28916],{},"Python 没有 ",[46,156720,156721],{},"num++",[46,156723,156724],{},"num--",[18,156726,156728],{"id":156727},"_273-比较运算符","2.7.3 比较运算符",[14,156730,156731],{},"比较运算结果是布尔值。",[40,156733,156735],{"className":30909,"code":156734,"language":30911,"meta":27,"style":27},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[46,156736,156737,156751,156766,156780],{"__ignoreMap":27},[49,156738,156739,156741,156743,156745,156747,156749],{"class":51,"line":52},[49,156740,30946],{"class":159},[49,156742,841],{"class":73},[49,156744,1275],{"class":159},[49,156746,26907],{"class":77},[49,156748,2846],{"class":159},[49,156750,847],{"class":73},[49,156752,156753,156755,156757,156759,156762,156764],{"class":51,"line":63},[49,156754,30946],{"class":159},[49,156756,841],{"class":73},[49,156758,1275],{"class":159},[49,156760,156761],{"class":77}," >=",[49,156763,2736],{"class":159},[49,156765,847],{"class":73},[49,156767,156768,156770,156772,156774,156776,156778],{"class":51,"line":70},[49,156769,30946],{"class":159},[49,156771,841],{"class":73},[49,156773,1275],{"class":159},[49,156775,102090],{"class":77},[49,156777,2781],{"class":159},[49,156779,847],{"class":73},[49,156781,156782,156784,156786,156788,156791,156793],{"class":51,"line":219},[49,156783,30946],{"class":159},[49,156785,841],{"class":73},[49,156787,1275],{"class":159},[49,156789,156790],{"class":77}," !=",[49,156792,2781],{"class":159},[49,156794,847],{"class":73},[14,156796,156797,156798,156800,156801,28916],{},"注意：判断相等用 ",[46,156799,3646],{},"，赋值用 ",[46,156802,78],{},[40,156804,156806],{"className":30909,"code":156805,"language":30911,"meta":27,"style":27},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[46,156807,156808,156820],{"__ignoreMap":27},[49,156809,156810,156812,156814,156817],{"class":51,"line":52},[49,156811,147077],{"class":73},[49,156813,78],{"class":77},[49,156815,156816],{"class":159}," 18",[49,156818,156819],{"class":66},"       # 赋值\n",[49,156821,156822,156824,156826,156828],{"class":51,"line":63},[49,156823,147077],{"class":73},[49,156825,3646],{"class":77},[49,156827,156816],{"class":159},[49,156829,156830],{"class":66},"      # 判断是否相等\n",[18,156832,156834],{"id":156833},"_274-逻辑运算符","2.7.4 逻辑运算符",[610,156836,156837,156845],{},[613,156838,156839],{},[616,156840,156841,156843],{},[619,156842,156455],{},[619,156844,26558],{},[633,156846,156847,156856,156865],{},[616,156848,156849,156853],{},[638,156850,156851],{},[46,156852,30993],{},[638,156854,156855],{},"并且",[616,156857,156858,156862],{},[638,156859,156860],{},[46,156861,115621],{},[638,156863,156864],{},"或者",[616,156866,156867,156872],{},[638,156868,156869],{},[46,156870,156871],{},"not",[638,156873,156874],{},"取反",[40,156876,156878],{"className":30909,"code":156877,"language":30911,"meta":27,"style":27},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[46,156879,156880,156888,156897,156901,156916,156930],{"__ignoreMap":27},[49,156881,156882,156884,156886],{"class":51,"line":52},[49,156883,147077],{"class":73},[49,156885,78],{"class":77},[49,156887,88596],{"class":159},[49,156889,156890,156893,156895],{"class":51,"line":63},[49,156891,156892],{"class":73},"has_ticket ",[49,156894,78],{"class":77},[49,156896,154130],{"class":159},[49,156898,156899],{"class":51,"line":70},[49,156900,399],{"emptyLinePlaceholder":398},[49,156902,156903,156905,156907,156909,156911,156913],{"class":51,"line":219},[49,156904,30946],{"class":159},[49,156906,156299],{"class":73},[49,156908,2409],{"class":77},[49,156910,156816],{"class":159},[49,156912,120960],{"class":77},[49,156914,156915],{"class":73}," has_ticket)\n",[49,156917,156918,156920,156922,156924,156926,156928],{"class":51,"line":233},[49,156919,30946],{"class":159},[49,156921,156299],{"class":73},[49,156923,1739],{"class":77},[49,156925,156816],{"class":159},[49,156927,114732],{"class":77},[49,156929,156915],{"class":73},[49,156931,156932,156934,156936,156938],{"class":51,"line":241},[49,156933,30946],{"class":159},[49,156935,841],{"class":73},[49,156937,156871],{"class":77},[49,156939,156915],{"class":73},[782,156941,156943],{"id":156942},"_28-字符串定义","2.8 字符串定义",[14,156945,156946],{},"三种常见写法：",[40,156948,156950],{"className":30909,"code":156949,"language":30911,"meta":27,"style":27},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[46,156951,156952,156962,156971,156981],{"__ignoreMap":27},[49,156953,156954,156957,156959],{"class":51,"line":52},[49,156955,156956],{"class":73},"name1 ",[49,156958,78],{"class":77},[49,156960,156961],{"class":59}," '小明'\n",[49,156963,156964,156967,156969],{"class":51,"line":63},[49,156965,156966],{"class":73},"name2 ",[49,156968,78],{"class":77},[49,156970,149884],{"class":59},[49,156972,156973,156976,156978],{"class":51,"line":70},[49,156974,156975],{"class":73},"text ",[49,156977,78],{"class":77},[49,156979,156980],{"class":59}," \"\"\"这是多行字符串\n",[49,156982,156983],{"class":51,"line":219},[49,156984,156985],{"class":59},"可以换行\"\"\"\n",[14,156987,156988],{},"字符串中包含引号：",[40,156990,156992],{"className":30909,"code":156991,"language":30911,"meta":27,"style":27},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[46,156993,156994,157004,157014],{"__ignoreMap":27},[49,156995,156996,156999,157001],{"class":51,"line":52},[49,156997,156998],{"class":73},"msg ",[49,157000,78],{"class":77},[49,157002,157003],{"class":59}," \"他说:'你好'\"\n",[49,157005,157006,157009,157011],{"class":51,"line":63},[49,157007,157008],{"class":73},"msg2 ",[49,157010,78],{"class":77},[49,157012,157013],{"class":59}," '他说:\"你好\"'\n",[49,157015,157016,157019,157021,157024,157027,157030,157032],{"class":51,"line":70},[49,157017,157018],{"class":73},"msg3 ",[49,157020,78],{"class":77},[49,157022,157023],{"class":59}," \"他说:",[49,157025,157026],{"class":159},"\\\"",[49,157028,157029],{"class":59},"你好",[49,157031,157026],{"class":159},[49,157033,25822],{"class":59},[14,157035,157036],{},"常见转义字符：",[610,157038,157039,157048],{},[613,157040,157041],{},[616,157042,157043,157046],{},[619,157044,157045],{},"写法",[619,157047,101231],{},[633,157049,157050,157060,157069,157079,157088],{},[616,157051,157052,157057],{},[638,157053,157054],{},[46,157055,157056],{},"\\n",[638,157058,157059],{},"换行",[616,157061,157062,157066],{},[638,157063,157064],{},[46,157065,1930],{},[638,157067,157068],{},"制表符",[616,157070,157071,157076],{},[638,157072,157073],{},[46,157074,157075],{},"\\\\",[638,157077,157078],{},"反斜杠",[616,157080,157081,157085],{},[638,157082,157083],{},[46,157084,157026],{},[638,157086,157087],{},"双引号",[616,157089,157090,157095],{},[638,157091,157092],{},[46,157093,157094],{},"\\'",[638,157096,157097],{},"单引号",[782,157099,157101],{"id":157100},"_29-字符串拼接","2.9 字符串拼接",[40,157103,157105],{"className":30909,"code":157104,"language":30911,"meta":27,"style":27},"name = \"小明\"\nprint(\"你好，\" + name)\n",[46,157106,157107,157115],{"__ignoreMap":27},[49,157108,157109,157111,157113],{"class":51,"line":52},[49,157110,147067],{"class":73},[49,157112,78],{"class":77},[49,157114,149884],{"class":59},[49,157116,157117,157119,157121,157124,157126],{"class":51,"line":63},[49,157118,30946],{"class":159},[49,157120,841],{"class":73},[49,157122,157123],{"class":59},"\"你好，\"",[49,157125,46097],{"class":77},[49,157127,157128],{"class":73}," name)\n",[14,157130,157131],{},"字符串只能和字符串拼接：",[40,157133,157135],{"className":30909,"code":157134,"language":30911,"meta":27,"style":27},"age = 18\nprint(\"年龄:\" + str(age))\n",[46,157136,157137,157145],{"__ignoreMap":27},[49,157138,157139,157141,157143],{"class":51,"line":52},[49,157140,147077],{"class":73},[49,157142,78],{"class":77},[49,157144,147082],{"class":159},[49,157146,157147,157149,157151,157153,157155,157157],{"class":51,"line":63},[49,157148,30946],{"class":159},[49,157150,841],{"class":73},[49,157152,147048],{"class":59},[49,157154,46097],{"class":77},[49,157156,74450],{"class":159},[49,157158,157159],{"class":73},"(age))\n",[14,157161,157162],{},"更推荐使用格式化字符串。",[782,157164,157166],{"id":157165},"_210-字符串格式化","2.10 字符串格式化",[18,157168,157170],{"id":157169},"_2101-百分号格式化","2.10.1 百分号格式化",[40,157172,157174],{"className":30909,"code":157173,"language":30911,"meta":27,"style":27},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[46,157175,157176,157184,157192,157201,157205],{"__ignoreMap":27},[49,157177,157178,157180,157182],{"class":51,"line":52},[49,157179,147067],{"class":73},[49,157181,78],{"class":77},[49,157183,149884],{"class":59},[49,157185,157186,157188,157190],{"class":51,"line":63},[49,157187,147077],{"class":73},[49,157189,78],{"class":77},[49,157191,147082],{"class":159},[49,157193,157194,157196,157198],{"class":51,"line":70},[49,157195,155889],{"class":73},[49,157197,78],{"class":77},[49,157199,157200],{"class":159}," 95.5\n",[49,157202,157203],{"class":51,"line":219},[49,157204,399],{"emptyLinePlaceholder":398},[49,157206,157207,157209,157211,157214,157217,157220,157223,157226,157229,157231,157233],{"class":51,"line":233},[49,157208,30946],{"class":159},[49,157210,841],{"class":73},[49,157212,157213],{"class":59},"\"姓名:",[49,157215,157216],{"class":159},"%s",[49,157218,157219],{"class":59}," 年龄:",[49,157221,157222],{"class":159},"%d",[49,157224,157225],{"class":59}," 分数:",[49,157227,157228],{"class":159},"%.1f",[49,157230,1080],{"class":59},[49,157232,156612],{"class":77},[49,157234,157235],{"class":73}," (name, age, score))\n",[14,157237,157238],{},"常用占位符：",[610,157240,157241,157250],{},[613,157242,157243],{},[616,157244,157245,157248],{},[619,157246,157247],{},"占位符",[619,157249,26558],{},[633,157251,157252,157260,157268],{},[616,157253,157254,157258],{},[638,157255,157256],{},[46,157257,157216],{},[638,157259,155755],{},[616,157261,157262,157266],{},[638,157263,157264],{},[46,157265,157222],{},[638,157267,155733],{},[616,157269,157270,157275],{},[638,157271,157272],{},[46,157273,157274],{},"%f",[638,157276,155744],{},[14,157278,157279],{},"精度控制：",[40,157281,157283],{"className":30909,"code":157282,"language":30911,"meta":27,"style":27},"price = 12.3456\nprint(\"%.2f\" % price)\n",[46,157284,157285,157294],{"__ignoreMap":27},[49,157286,157287,157289,157291],{"class":51,"line":52},[49,157288,147212],{"class":73},[49,157290,78],{"class":77},[49,157292,157293],{"class":159}," 12.3456\n",[49,157295,157296,157298,157300,157302,157305,157307,157309],{"class":51,"line":63},[49,157297,30946],{"class":159},[49,157299,841],{"class":73},[49,157301,1080],{"class":59},[49,157303,157304],{"class":159},"%.2f",[49,157306,1080],{"class":59},[49,157308,156612],{"class":77},[49,157310,157311],{"class":73}," price)\n",[18,157313,157315],{"id":157314},"_2102-format方法","2.10.2 format方法",[40,157317,157319],{"className":30909,"code":157318,"language":30911,"meta":27,"style":27},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[46,157320,157321,157329,157337,157341,157360,157380],{"__ignoreMap":27},[49,157322,157323,157325,157327],{"class":51,"line":52},[49,157324,147067],{"class":73},[49,157326,78],{"class":77},[49,157328,149884],{"class":59},[49,157330,157331,157333,157335],{"class":51,"line":63},[49,157332,147077],{"class":73},[49,157334,78],{"class":77},[49,157336,147082],{"class":159},[49,157338,157339],{"class":51,"line":70},[49,157340,399],{"emptyLinePlaceholder":398},[49,157342,157343,157345,157347,157349,157351,157353,157355,157357],{"class":51,"line":219},[49,157344,30946],{"class":159},[49,157346,841],{"class":73},[49,157348,157213],{"class":59},[49,157350,32990],{"class":159},[49,157352,157219],{"class":59},[49,157354,32990],{"class":159},[49,157356,1080],{"class":59},[49,157358,157359],{"class":73},".format(name, age))\n",[49,157361,157362,157364,157366,157368,157371,157373,157376,157378],{"class":51,"line":233},[49,157363,30946],{"class":159},[49,157365,841],{"class":73},[49,157367,157213],{"class":59},[49,157369,157370],{"class":159},"{0}",[49,157372,157219],{"class":59},[49,157374,157375],{"class":159},"{1}",[49,157377,1080],{"class":59},[49,157379,157359],{"class":73},[49,157381,157382,157384,157386,157388,157391,157393,157396,157398,157401,157403,157405,157408,157410,157412],{"class":51,"line":241},[49,157383,30946],{"class":159},[49,157385,841],{"class":73},[49,157387,157213],{"class":59},[49,157389,157390],{"class":159},"{name}",[49,157392,157219],{"class":59},[49,157394,157395],{"class":159},"{age}",[49,157397,1080],{"class":59},[49,157399,157400],{"class":73},".format(",[49,157402,80341],{"class":5913},[49,157404,78],{"class":77},[49,157406,157407],{"class":73},"name, ",[49,157409,70752],{"class":5913},[49,157411,78],{"class":77},[49,157413,157414],{"class":73},"age))\n",[18,157416,157418],{"id":157417},"_2103-f-string","2.10.3 f-string",[14,157420,157421],{},"推荐写法：",[40,157423,157425],{"className":30909,"code":157424,"language":30911,"meta":27,"style":27},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[46,157426,157427,157435,157443,157451,157455],{"__ignoreMap":27},[49,157428,157429,157431,157433],{"class":51,"line":52},[49,157430,147067],{"class":73},[49,157432,78],{"class":77},[49,157434,149884],{"class":59},[49,157436,157437,157439,157441],{"class":51,"line":63},[49,157438,147077],{"class":73},[49,157440,78],{"class":77},[49,157442,147082],{"class":159},[49,157444,157445,157447,157449],{"class":51,"line":70},[49,157446,155889],{"class":73},[49,157448,78],{"class":77},[49,157450,157200],{"class":159},[49,157452,157453],{"class":51,"line":219},[49,157454,399],{"emptyLinePlaceholder":398},[49,157456,157457,157459,157461,157463,157465,157467,157469,157471,157473,157475,157477,157479,157481,157483,157486,157489,157491,157493],{"class":51,"line":233},[49,157458,30946],{"class":159},[49,157460,841],{"class":73},[49,157462,891],{"class":77},[49,157464,157213],{"class":59},[49,157466,1725],{"class":159},[49,157468,80341],{"class":73},[49,157470,1775],{"class":159},[49,157472,157219],{"class":59},[49,157474,1725],{"class":159},[49,157476,70752],{"class":73},[49,157478,1775],{"class":159},[49,157480,157225],{"class":59},[49,157482,1725],{"class":159},[49,157484,157485],{"class":73},"score",[49,157487,157488],{"class":77},":.1f",[49,157490,1775],{"class":159},[49,157492,1080],{"class":59},[49,157494,847],{"class":73},[14,157496,157497],{},"表达式也可以放进去：",[40,157499,157501],{"className":30909,"code":157500,"language":30911,"meta":27,"style":27},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[46,157502,157503,157511,157519],{"__ignoreMap":27},[49,157504,157505,157507,157509],{"class":51,"line":52},[49,157506,147212],{"class":73},[49,157508,78],{"class":77},[49,157510,147217],{"class":159},[49,157512,157513,157515,157517],{"class":51,"line":63},[49,157514,147222],{"class":73},[49,157516,78],{"class":77},[49,157518,54958],{"class":159},[49,157520,157521,157523,157525,157527,157530,157532,157534,157536,157539,157541,157544],{"class":51,"line":70},[49,157522,30946],{"class":159},[49,157524,841],{"class":73},[49,157526,891],{"class":77},[49,157528,157529],{"class":59},"\"总价:",[49,157531,1725],{"class":159},[49,157533,147212],{"class":73},[49,157535,1284],{"class":77},[49,157537,157538],{"class":73}," count",[49,157540,1775],{"class":159},[49,157542,157543],{"class":59},"元\"",[49,157545,847],{"class":73},[782,157547,157549],{"id":157548},"_211-input输入","2.11 input输入",[14,157551,157552,157555],{},[46,157553,157554],{},"input()"," 会暂停程序，等待用户输入。",[40,157557,157559],{"className":30909,"code":157558,"language":30911,"meta":27,"style":27},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[46,157560,157561,157575],{"__ignoreMap":27},[49,157562,157563,157565,157567,157569,157571,157573],{"class":51,"line":52},[49,157564,147067],{"class":73},[49,157566,78],{"class":77},[49,157568,61136],{"class":159},[49,157570,841],{"class":73},[49,157572,152910],{"class":59},[49,157574,847],{"class":73},[49,157576,157577,157579,157581,157583,157586,157588,157590,157592,157594],{"class":51,"line":63},[49,157578,30946],{"class":159},[49,157580,841],{"class":73},[49,157582,891],{"class":77},[49,157584,157585],{"class":59},"\"你好，",[49,157587,1725],{"class":159},[49,157589,80341],{"class":73},[49,157591,1775],{"class":159},[49,157593,1080],{"class":59},[49,157595,847],{"class":73},[14,157597,157598],{},"输入整数：",[40,157600,157602],{"className":30909,"code":157601,"language":30911,"meta":27,"style":27},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[46,157603,157604,157622],{"__ignoreMap":27},[49,157605,157606,157608,157610,157612,157614,157616,157618,157620],{"class":51,"line":52},[49,157607,147077],{"class":73},[49,157609,78],{"class":77},[49,157611,3080],{"class":159},[49,157613,841],{"class":73},[49,157615,54352],{"class":159},[49,157617,841],{"class":73},[49,157619,152925],{"class":59},[49,157621,31028],{"class":73},[49,157623,157624,157626,157628,157630,157633,157635,157637,157639,157642,157644],{"class":51,"line":63},[49,157625,30946],{"class":159},[49,157627,841],{"class":73},[49,157629,891],{"class":77},[49,157631,157632],{"class":59},"\"明年你",[49,157634,1725],{"class":159},[49,157636,147077],{"class":73},[49,157638,1310],{"class":77},[49,157640,157641],{"class":159}," 1}",[49,157643,149935],{"class":59},[49,157645,847],{"class":73},[14,157647,157648],{},"输入小数：",[40,157650,157652],{"className":30909,"code":157651,"language":30911,"meta":27,"style":27},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[46,157653,157654,157673],{"__ignoreMap":27},[49,157655,157656,157658,157660,157662,157664,157666,157668,157671],{"class":51,"line":52},[49,157657,155862],{"class":73},[49,157659,78],{"class":77},[49,157661,110328],{"class":159},[49,157663,841],{"class":73},[49,157665,54352],{"class":159},[49,157667,841],{"class":73},[49,157669,157670],{"class":59},"\"请输入身高:\"",[49,157672,31028],{"class":73},[49,157674,157675,157677,157679,157681,157684,157686,157688,157691,157693,157696],{"class":51,"line":63},[49,157676,30946],{"class":159},[49,157678,841],{"class":73},[49,157680,891],{"class":77},[49,157682,157683],{"class":59},"\"身高:",[49,157685,1725],{"class":159},[49,157687,25671],{"class":73},[49,157689,157690],{"class":77},":.2f",[49,157692,1775],{"class":159},[49,157694,157695],{"class":59},"米\"",[49,157697,847],{"class":73},[782,157699,157701],{"id":157700},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157703,123823],{},[30,157705,157706,157709,157712,157715],{},[33,157707,157708],{},"输入商品单价。",[33,157710,157711],{},"输入购买数量。",[33,157713,157714],{},"输入折扣，例如 0.8 表示八折。",[33,157716,157717],{},"输出最终金额，保留两位小数。",[14,157719,10732],{},[40,157721,157723],{"className":30909,"code":157722,"language":30911,"meta":27,"style":27},"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",[46,157724,157725,157744,157763,157783,157787,157807,157811,157834,157855,157877],{"__ignoreMap":27},[49,157726,157727,157729,157731,157733,157735,157737,157739,157742],{"class":51,"line":52},[49,157728,147212],{"class":73},[49,157730,78],{"class":77},[49,157732,110328],{"class":159},[49,157734,841],{"class":73},[49,157736,54352],{"class":159},[49,157738,841],{"class":73},[49,157740,157741],{"class":59},"\"请输入商品单价:\"",[49,157743,31028],{"class":73},[49,157745,157746,157748,157750,157752,157754,157756,157758,157761],{"class":51,"line":63},[49,157747,147222],{"class":73},[49,157749,78],{"class":77},[49,157751,3080],{"class":159},[49,157753,841],{"class":73},[49,157755,54352],{"class":159},[49,157757,841],{"class":73},[49,157759,157760],{"class":59},"\"请输入购买数量:\"",[49,157762,31028],{"class":73},[49,157764,157765,157768,157770,157772,157774,157776,157778,157781],{"class":51,"line":70},[49,157766,157767],{"class":73},"discount ",[49,157769,78],{"class":77},[49,157771,110328],{"class":159},[49,157773,841],{"class":73},[49,157775,54352],{"class":159},[49,157777,841],{"class":73},[49,157779,157780],{"class":59},"\"请输入折扣:\"",[49,157782,31028],{"class":73},[49,157784,157785],{"class":51,"line":219},[49,157786,399],{"emptyLinePlaceholder":398},[49,157788,157789,157792,157794,157797,157799,157802,157804],{"class":51,"line":233},[49,157790,157791],{"class":73},"total ",[49,157793,78],{"class":77},[49,157795,157796],{"class":73}," price ",[49,157798,1284],{"class":77},[49,157800,157801],{"class":73}," count ",[49,157803,1284],{"class":77},[49,157805,157806],{"class":73}," discount\n",[49,157808,157809],{"class":51,"line":241},[49,157810,399],{"emptyLinePlaceholder":398},[49,157812,157813,157815,157817,157819,157822,157824,157826,157828,157830,157832],{"class":51,"line":1920},[49,157814,30946],{"class":159},[49,157816,841],{"class":73},[49,157818,891],{"class":77},[49,157820,157821],{"class":59},"\"商品单价:",[49,157823,1725],{"class":159},[49,157825,80346],{"class":73},[49,157827,157690],{"class":77},[49,157829,1775],{"class":159},[49,157831,1080],{"class":59},[49,157833,847],{"class":73},[49,157835,157836,157838,157840,157842,157845,157847,157849,157851,157853],{"class":51,"line":2011},[49,157837,30946],{"class":159},[49,157839,841],{"class":73},[49,157841,891],{"class":77},[49,157843,157844],{"class":59},"\"购买数量:",[49,157846,1725],{"class":159},[49,157848,84965],{"class":73},[49,157850,1775],{"class":159},[49,157852,1080],{"class":59},[49,157854,847],{"class":73},[49,157856,157857,157859,157861,157863,157866,157868,157871,157873,157875],{"class":51,"line":2017},[49,157858,30946],{"class":159},[49,157860,841],{"class":73},[49,157862,891],{"class":77},[49,157864,157865],{"class":59},"\"折扣:",[49,157867,1725],{"class":159},[49,157869,157870],{"class":73},"discount",[49,157872,1775],{"class":159},[49,157874,1080],{"class":59},[49,157876,847],{"class":73},[49,157878,157879,157881,157883,157885,157888,157890,157893,157895,157897,157899],{"class":51,"line":2029},[49,157880,30946],{"class":159},[49,157882,841],{"class":73},[49,157884,891],{"class":77},[49,157886,157887],{"class":59},"\"应付金额:",[49,157889,1725],{"class":159},[49,157891,157892],{"class":73},"total",[49,157894,157690],{"class":77},[49,157896,1775],{"class":159},[49,157898,157543],{"class":59},[49,157900,847],{"class":73},[782,157902,157904],{"id":157903},"_213-易错点","2.13 易错点",[30,157906,157907,157912,157918,157926,157929],{},[33,157908,157909,157911],{},[46,157910,157554],{}," 的结果是字符串，做运算前要转换。",[33,157913,157914,157915,28916],{},"字符串拼接时，数字要先 ",[46,157916,157917],{},"str()",[33,157919,157920,157922,157923,157925],{},[46,157921,78],{}," 是赋值，",[46,157924,3646],{}," 是比较。",[33,157927,157928],{},"Python 没有自增自减运算符。",[33,157930,157931],{},"浮点数计算可能有精度误差：",[40,157933,157935],{"className":30909,"code":157934,"language":30911,"meta":27,"style":27},"print(0.1 + 0.2)\n",[46,157936,157937],{"__ignoreMap":27},[49,157938,157939,157941,157943,157945,157947,157950],{"class":51,"line":52},[49,157940,30946],{"class":159},[49,157942,841],{"class":73},[49,157944,86741],{"class":159},[49,157946,46097],{"class":77},[49,157948,157949],{"class":159}," 0.2",[49,157951,847],{"class":73},[14,157953,157954,157955,157958],{},"金额计算如果要求严格，可以后续学习 ",[46,157956,157957],{},"decimal"," 模块。",[782,157960,157962],{"id":157961},"_214-本章练习","2.14 本章练习",[30,157964,157965,157968,157971,157974,157977],{},[33,157966,157967],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[33,157969,157970],{},"输入圆的半径，计算面积，保留两位小数。",[33,157972,157973],{},"输入工资和奖金，计算总收入。",[33,157975,157976],{},"输入摄氏温度，转换为华氏温度。",[33,157978,157979],{},"写一个 BMI 计算程序：",[40,157981,157984],{"className":157982,"code":157983,"language":5884,"meta":27},[5882],"BMI = 体重kg \u002F 身高m ** 2\n",[46,157985,157983],{"__ignoreMap":27},[757,157987,157988],{},"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":27,"searchDepth":63,"depth":63,"links":157990},[157991,157992,157993,157994,157995,157996,157997,158003,158004,158005,158010,158011,158012,158013],{"id":155552,"depth":63,"text":155553},{"id":155661,"depth":63,"text":155662},{"id":155832,"depth":63,"text":155833},{"id":155909,"depth":63,"text":155910},{"id":51262,"depth":63,"text":51263},{"id":156215,"depth":63,"text":156216},{"id":156441,"depth":63,"text":156442,"children":157998},[157999,158000,158001,158002],{"id":156445,"depth":70,"text":156446},{"id":156639,"depth":70,"text":156640},{"id":156727,"depth":70,"text":156728},{"id":156833,"depth":70,"text":156834},{"id":156942,"depth":63,"text":156943},{"id":157100,"depth":63,"text":157101},{"id":157165,"depth":63,"text":157166,"children":158006},[158007,158008,158009],{"id":157169,"depth":70,"text":157170},{"id":157314,"depth":70,"text":157315},{"id":157417,"depth":70,"text":157418},{"id":157548,"depth":63,"text":157549},{"id":157700,"depth":63,"text":157701},{"id":157903,"depth":63,"text":157904},{"id":157961,"depth":63,"text":157962},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155544,"description":24072},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158020,"title":158021,"body":158022,"description":24072,"extension":766,"meta":159658,"navigation":398,"path":159659,"seo":159660,"stem":159661,"__hash__":159662},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158023,"toc":159639},[158024,158027,158031,158034,158049,158052,158080,158084,158134,158136,158152,158155,158181,158184,158188,158255,158258,158274,158278,158281,158399,158402,158409,158458,158464,158468,158471,158584,158587,158591,158595,158598,158648,158652,158655,158705,158709,158712,158750,158754,158757,158803,158806,158841,158845,158850,158853,158899,158901,158968,158972,158978,159089,159098,159102,159104,159115,159117,159283,159287,159289,159303,159305,159519,159523,159542,159559,159562,159608,159612,159636],[10,158025,158021],{"id":158026},"_3-判断语句",[782,158028,158030],{"id":158029},"_31-布尔值","3.1 布尔值",[14,158032,158033],{},"判断语句依赖布尔值：",[40,158035,158037],{"className":30909,"code":158036,"language":30911,"meta":27,"style":27},"True\nFalse\n",[46,158038,158039,158044],{"__ignoreMap":27},[49,158040,158041],{"class":51,"line":52},[49,158042,158043],{"class":159},"True\n",[49,158045,158046],{"class":51,"line":63},[49,158047,158048],{"class":159},"False\n",[14,158050,158051],{},"比较表达式会产生布尔值：",[40,158053,158055],{"className":30909,"code":158054,"language":30911,"meta":27,"style":27},"age = 18\nprint(age >= 18)  # True\n",[46,158056,158057,158065],{"__ignoreMap":27},[49,158058,158059,158061,158063],{"class":51,"line":52},[49,158060,147077],{"class":73},[49,158062,78],{"class":77},[49,158064,147082],{"class":159},[49,158066,158067,158069,158071,158073,158075,158077],{"class":51,"line":63},[49,158068,30946],{"class":159},[49,158070,156299],{"class":73},[49,158072,2409],{"class":77},[49,158074,156816],{"class":159},[49,158076,46339],{"class":73},[49,158078,158079],{"class":66},"# True\n",[782,158081,158083],{"id":158082},"_32-if基础语法","3.2 if基础语法",[40,158085,158087],{"className":30909,"code":158086,"language":30911,"meta":27,"style":27},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[46,158088,158089,158107,158111,158123],{"__ignoreMap":27},[49,158090,158091,158093,158095,158097,158099,158101,158103,158105],{"class":51,"line":52},[49,158092,147077],{"class":73},[49,158094,78],{"class":77},[49,158096,3080],{"class":159},[49,158098,841],{"class":73},[49,158100,54352],{"class":159},[49,158102,841],{"class":73},[49,158104,152925],{"class":59},[49,158106,31028],{"class":73},[49,158108,158109],{"class":51,"line":63},[49,158110,399],{"emptyLinePlaceholder":398},[49,158112,158113,158115,158117,158119,158121],{"class":51,"line":70},[49,158114,2230],{"class":77},[49,158116,16404],{"class":73},[49,158118,2409],{"class":77},[49,158120,156816],{"class":159},[49,158122,4436],{"class":73},[49,158124,158125,158127,158129,158132],{"class":51,"line":219},[49,158126,31830],{"class":159},[49,158128,841],{"class":73},[49,158130,158131],{"class":59},"\"可以进入网吧\"",[49,158133,847],{"class":73},[14,158135,9722],{},[30,158137,158138,158143,158146,158149],{},[33,158139,158140,158142],{},[46,158141,2230],{}," 后面是条件表达式。",[33,158144,158145],{},"条件后面必须写冒号。",[33,158147,158148],{},"条件成立时执行缩进代码块。",[33,158150,158151],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,158153,158154],{},"错误示例：",[40,158156,158158],{"className":30909,"code":158157,"language":30911,"meta":27,"style":27},"if age >= 18\n    print(\"可以进入\")\n",[46,158159,158160,158170],{"__ignoreMap":27},[49,158161,158162,158164,158166,158168],{"class":51,"line":52},[49,158163,2230],{"class":77},[49,158165,16404],{"class":73},[49,158167,2409],{"class":77},[49,158169,147082],{"class":159},[49,158171,158172,158174,158176,158179],{"class":51,"line":63},[49,158173,31830],{"class":159},[49,158175,841],{"class":73},[49,158177,158178],{"class":59},"\"可以进入\"",[49,158180,847],{"class":73},[14,158182,158183],{},"缺少冒号。",[782,158185,158187],{"id":158186},"_33-if-else","3.3 if else",[40,158189,158191],{"className":30909,"code":158190,"language":30911,"meta":27,"style":27},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[46,158192,158193,158211,158215,158227,158238,158244],{"__ignoreMap":27},[49,158194,158195,158197,158199,158201,158203,158205,158207,158209],{"class":51,"line":52},[49,158196,147077],{"class":73},[49,158198,78],{"class":77},[49,158200,3080],{"class":159},[49,158202,841],{"class":73},[49,158204,54352],{"class":159},[49,158206,841],{"class":73},[49,158208,152925],{"class":59},[49,158210,31028],{"class":73},[49,158212,158213],{"class":51,"line":63},[49,158214,399],{"emptyLinePlaceholder":398},[49,158216,158217,158219,158221,158223,158225],{"class":51,"line":70},[49,158218,2230],{"class":77},[49,158220,16404],{"class":73},[49,158222,2409],{"class":77},[49,158224,156816],{"class":159},[49,158226,4436],{"class":73},[49,158228,158229,158231,158233,158236],{"class":51,"line":219},[49,158230,31830],{"class":159},[49,158232,841],{"class":73},[49,158234,158235],{"class":59},"\"成年人\"",[49,158237,847],{"class":73},[49,158239,158240,158242],{"class":51,"line":233},[49,158241,2400],{"class":77},[49,158243,4436],{"class":73},[49,158245,158246,158248,158250,158253],{"class":51,"line":241},[49,158247,31830],{"class":159},[49,158249,841],{"class":73},[49,158251,158252],{"class":59},"\"未成年人\"",[49,158254,847],{"class":73},[14,158256,158257],{},"执行逻辑：",[30,158259,158260,158266,158271],{},[33,158261,158262,158263,158265],{},"条件成立，执行 ",[46,158264,2230],{}," 代码块。",[33,158267,158268,158269,158265],{},"条件不成立，执行 ",[46,158270,2400],{},[33,158272,158273],{},"两个代码块只会执行其中一个。",[782,158275,158277],{"id":158276},"_34-if-elif-else","3.4 if elif else",[14,158279,158280],{},"多条件判断：",[40,158282,158284],{"className":30909,"code":158283,"language":30911,"meta":27,"style":27},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[46,158285,158286,158304,158308,158322,158333,158347,158358,158371,158382,158388],{"__ignoreMap":27},[49,158287,158288,158290,158292,158294,158296,158298,158300,158302],{"class":51,"line":52},[49,158289,155889],{"class":73},[49,158291,78],{"class":77},[49,158293,3080],{"class":159},[49,158295,841],{"class":73},[49,158297,54352],{"class":159},[49,158299,841],{"class":73},[49,158301,152940],{"class":59},[49,158303,31028],{"class":73},[49,158305,158306],{"class":51,"line":63},[49,158307,399],{"emptyLinePlaceholder":398},[49,158309,158310,158312,158315,158317,158320],{"class":51,"line":70},[49,158311,2230],{"class":77},[49,158313,158314],{"class":73}," score ",[49,158316,2409],{"class":77},[49,158318,158319],{"class":159}," 90",[49,158321,4436],{"class":73},[49,158323,158324,158326,158328,158331],{"class":51,"line":219},[49,158325,31830],{"class":159},[49,158327,841],{"class":73},[49,158329,158330],{"class":59},"\"优秀\"",[49,158332,847],{"class":73},[49,158334,158335,158338,158340,158342,158345],{"class":51,"line":233},[49,158336,158337],{"class":77},"elif",[49,158339,158314],{"class":73},[49,158341,2409],{"class":77},[49,158343,158344],{"class":159}," 80",[49,158346,4436],{"class":73},[49,158348,158349,158351,158353,158356],{"class":51,"line":241},[49,158350,31830],{"class":159},[49,158352,841],{"class":73},[49,158354,158355],{"class":59},"\"良好\"",[49,158357,847],{"class":73},[49,158359,158360,158362,158364,158366,158369],{"class":51,"line":1920},[49,158361,158337],{"class":77},[49,158363,158314],{"class":73},[49,158365,2409],{"class":77},[49,158367,158368],{"class":159}," 60",[49,158370,4436],{"class":73},[49,158372,158373,158375,158377,158380],{"class":51,"line":2011},[49,158374,31830],{"class":159},[49,158376,841],{"class":73},[49,158378,158379],{"class":59},"\"及格\"",[49,158381,847],{"class":73},[49,158383,158384,158386],{"class":51,"line":2017},[49,158385,2400],{"class":77},[49,158387,4436],{"class":73},[49,158389,158390,158392,158394,158397],{"class":51,"line":2029},[49,158391,31830],{"class":159},[49,158393,841],{"class":73},[49,158395,158396],{"class":59},"\"不及格\"",[49,158398,847],{"class":73},[14,158400,158401],{},"注意判断顺序很重要。",[14,158403,158404,158405,158408],{},"如果把 ",[46,158406,158407],{},"score >= 60"," 放在最前面：",[40,158410,158412],{"className":30909,"code":158411,"language":30911,"meta":27,"style":27},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[46,158413,158414,158426,158436,158448],{"__ignoreMap":27},[49,158415,158416,158418,158420,158422,158424],{"class":51,"line":52},[49,158417,2230],{"class":77},[49,158419,158314],{"class":73},[49,158421,2409],{"class":77},[49,158423,158368],{"class":159},[49,158425,4436],{"class":73},[49,158427,158428,158430,158432,158434],{"class":51,"line":63},[49,158429,31830],{"class":159},[49,158431,841],{"class":73},[49,158433,158379],{"class":59},[49,158435,847],{"class":73},[49,158437,158438,158440,158442,158444,158446],{"class":51,"line":70},[49,158439,158337],{"class":77},[49,158441,158314],{"class":73},[49,158443,2409],{"class":77},[49,158445,158319],{"class":159},[49,158447,4436],{"class":73},[49,158449,158450,158452,158454,158456],{"class":51,"line":219},[49,158451,31830],{"class":159},[49,158453,841],{"class":73},[49,158455,158330],{"class":59},[49,158457,847],{"class":73},[14,158459,158460,158461,158463],{},"成绩 95 会先满足 ",[46,158462,158407],{},"，后面的优秀分支就不会执行。",[782,158465,158467],{"id":158466},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,158469,158470],{},"嵌套判断就是在一个判断内部再写判断。",[40,158472,158474],{"className":30909,"code":158473,"language":30911,"meta":27,"style":27},"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",[46,158475,158476,158494,158509,158513,158525,158539,158549,158556,158567,158573],{"__ignoreMap":27},[49,158477,158478,158480,158482,158484,158486,158488,158490,158492],{"class":51,"line":52},[49,158479,147077],{"class":73},[49,158481,78],{"class":77},[49,158483,3080],{"class":159},[49,158485,841],{"class":73},[49,158487,54352],{"class":159},[49,158489,841],{"class":73},[49,158491,152925],{"class":59},[49,158493,31028],{"class":73},[49,158495,158496,158498,158500,158502,158504,158507],{"class":51,"line":63},[49,158497,156892],{"class":73},[49,158499,78],{"class":77},[49,158501,61136],{"class":159},[49,158503,841],{"class":73},[49,158505,158506],{"class":59},"\"是否有票(y\u002Fn):\"",[49,158508,847],{"class":73},[49,158510,158511],{"class":51,"line":70},[49,158512,399],{"emptyLinePlaceholder":398},[49,158514,158515,158517,158519,158521,158523],{"class":51,"line":219},[49,158516,2230],{"class":77},[49,158518,16404],{"class":73},[49,158520,2409],{"class":77},[49,158522,156816],{"class":159},[49,158524,4436],{"class":73},[49,158526,158527,158529,158532,158534,158537],{"class":51,"line":233},[49,158528,3798],{"class":77},[49,158530,158531],{"class":73}," has_ticket ",[49,158533,3646],{"class":77},[49,158535,158536],{"class":59}," \"y\"",[49,158538,4436],{"class":73},[49,158540,158541,158543,158545,158547],{"class":51,"line":241},[49,158542,32982],{"class":159},[49,158544,841],{"class":73},[49,158546,158178],{"class":59},[49,158548,847],{"class":73},[49,158550,158551,158554],{"class":51,"line":1920},[49,158552,158553],{"class":77},"    else",[49,158555,4436],{"class":73},[49,158557,158558,158560,158562,158565],{"class":51,"line":2011},[49,158559,32982],{"class":159},[49,158561,841],{"class":73},[49,158563,158564],{"class":59},"\"请先买票\"",[49,158566,847],{"class":73},[49,158568,158569,158571],{"class":51,"line":2017},[49,158570,2400],{"class":77},[49,158572,4436],{"class":73},[49,158574,158575,158577,158579,158582],{"class":51,"line":2029},[49,158576,31830],{"class":159},[49,158578,841],{"class":73},[49,158580,158581],{"class":59},"\"未成年人禁止进入\"",[49,158583,847],{"class":73},[14,158585,158586],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[782,158588,158590],{"id":158589},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[18,158592,158594],{"id":158593},"_361-and","3.6.1 and",[14,158596,158597],{},"两个条件都成立才成立。",[40,158599,158601],{"className":30909,"code":158600,"language":30911,"meta":27,"style":27},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[46,158602,158603,158611,158619,158623,158638],{"__ignoreMap":27},[49,158604,158605,158607,158609],{"class":51,"line":52},[49,158606,147077],{"class":73},[49,158608,78],{"class":77},[49,158610,88596],{"class":159},[49,158612,158613,158615,158617],{"class":51,"line":63},[49,158614,156892],{"class":73},[49,158616,78],{"class":77},[49,158618,154130],{"class":159},[49,158620,158621],{"class":51,"line":70},[49,158622,399],{"emptyLinePlaceholder":398},[49,158624,158625,158627,158629,158631,158633,158635],{"class":51,"line":219},[49,158626,2230],{"class":77},[49,158628,16404],{"class":73},[49,158630,2409],{"class":77},[49,158632,156816],{"class":159},[49,158634,120960],{"class":77},[49,158636,158637],{"class":73}," has_ticket:\n",[49,158639,158640,158642,158644,158646],{"class":51,"line":233},[49,158641,31830],{"class":159},[49,158643,841],{"class":73},[49,158645,158178],{"class":59},[49,158647,847],{"class":73},[18,158649,158651],{"id":158650},"_362-or","3.6.2 or",[14,158653,158654],{},"只要一个条件成立就成立。",[40,158656,158658],{"className":30909,"code":158657,"language":30911,"meta":27,"style":27},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[46,158659,158660,158669,158678,158682,158694],{"__ignoreMap":27},[49,158661,158662,158665,158667],{"class":51,"line":52},[49,158663,158664],{"class":73},"is_vip ",[49,158666,78],{"class":77},[49,158668,126338],{"class":159},[49,158670,158671,158674,158676],{"class":51,"line":63},[49,158672,158673],{"class":73},"coupon ",[49,158675,78],{"class":77},[49,158677,154130],{"class":159},[49,158679,158680],{"class":51,"line":70},[49,158681,399],{"emptyLinePlaceholder":398},[49,158683,158684,158686,158689,158691],{"class":51,"line":219},[49,158685,2230],{"class":77},[49,158687,158688],{"class":73}," is_vip ",[49,158690,115621],{"class":77},[49,158692,158693],{"class":73}," coupon:\n",[49,158695,158696,158698,158700,158703],{"class":51,"line":233},[49,158697,31830],{"class":159},[49,158699,841],{"class":73},[49,158701,158702],{"class":59},"\"可以享受优惠\"",[49,158704,847],{"class":73},[18,158706,158708],{"id":158707},"_363-not","3.6.3 not",[14,158710,158711],{},"取反。",[40,158713,158715],{"className":30909,"code":158714,"language":30911,"meta":27,"style":27},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[46,158716,158717,158726,158730,158739],{"__ignoreMap":27},[49,158718,158719,158722,158724],{"class":51,"line":52},[49,158720,158721],{"class":73},"is_closed ",[49,158723,78],{"class":77},[49,158725,126338],{"class":159},[49,158727,158728],{"class":51,"line":63},[49,158729,399],{"emptyLinePlaceholder":398},[49,158731,158732,158734,158736],{"class":51,"line":70},[49,158733,2230],{"class":77},[49,158735,39461],{"class":77},[49,158737,158738],{"class":73}," is_closed:\n",[49,158740,158741,158743,158745,158748],{"class":51,"line":219},[49,158742,31830],{"class":159},[49,158744,841],{"class":73},[49,158746,158747],{"class":59},"\"店铺营业中\"",[49,158749,847],{"class":73},[782,158751,158753],{"id":158752},"_37-链式比较","3.7 链式比较",[14,158755,158756],{},"Python 支持链式比较：",[40,158758,158760],{"className":30909,"code":158759,"language":30911,"meta":27,"style":27},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[46,158761,158762,158771,158775,158792],{"__ignoreMap":27},[49,158763,158764,158766,158768],{"class":51,"line":52},[49,158765,155889],{"class":73},[49,158767,78],{"class":77},[49,158769,158770],{"class":159}," 85\n",[49,158772,158773],{"class":51,"line":63},[49,158774,399],{"emptyLinePlaceholder":398},[49,158776,158777,158779,158781,158784,158786,158788,158790],{"class":51,"line":70},[49,158778,2230],{"class":77},[49,158780,4790],{"class":159},[49,158782,158783],{"class":77}," \u003C=",[49,158785,158314],{"class":73},[49,158787,2287],{"class":77},[49,158789,6451],{"class":159},[49,158791,4436],{"class":73},[49,158793,158794,158796,158798,158801],{"class":51,"line":219},[49,158795,31830],{"class":159},[49,158797,841],{"class":73},[49,158799,158800],{"class":59},"\"成绩合法\"",[49,158802,847],{"class":73},[14,158804,158805],{},"等价于：",[40,158807,158809],{"className":30909,"code":158808,"language":30911,"meta":27,"style":27},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[46,158810,158811,158831],{"__ignoreMap":27},[49,158812,158813,158815,158817,158819,158821,158823,158825,158827,158829],{"class":51,"line":52},[49,158814,2230],{"class":77},[49,158816,158314],{"class":73},[49,158818,2409],{"class":77},[49,158820,4790],{"class":159},[49,158822,120960],{"class":77},[49,158824,158314],{"class":73},[49,158826,2287],{"class":77},[49,158828,6451],{"class":159},[49,158830,4436],{"class":73},[49,158832,158833,158835,158837,158839],{"class":51,"line":63},[49,158834,31830],{"class":159},[49,158836,841],{"class":73},[49,158838,158800],{"class":59},[49,158840,847],{"class":73},[782,158842,158844],{"id":158843},"_38-真值和假值","3.8 真值和假值",[14,158846,116998,158847,158849],{},[46,158848,2230],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158851,158852],{},"假值：",[40,158854,158856],{"className":30909,"code":158855,"language":30911,"meta":27,"style":27},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[46,158857,158858,158862,158867,158871,158875,158880,158884,158888,158893],{"__ignoreMap":27},[49,158859,158860],{"class":51,"line":52},[49,158861,158048],{"class":159},[49,158863,158864],{"class":51,"line":63},[49,158865,158866],{"class":159},"None\n",[49,158868,158869],{"class":51,"line":70},[49,158870,3782],{"class":159},[49,158872,158873],{"class":51,"line":219},[49,158874,32873],{"class":159},[49,158876,158877],{"class":51,"line":233},[49,158878,158879],{"class":59},"\"\"\n",[49,158881,158882],{"class":51,"line":241},[49,158883,32888],{"class":73},[49,158885,158886],{"class":51,"line":1920},[49,158887,2674],{"class":73},[49,158889,158890],{"class":51,"line":2011},[49,158891,158892],{"class":73},"{}\n",[49,158894,158895,158897],{"class":51,"line":2017},[49,158896,155821],{"class":159},[49,158898,2674],{"class":73},[14,158900,15832],{},[40,158902,158904],{"className":30909,"code":158903,"language":30911,"meta":27,"style":27},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[46,158905,158906,158920,158924,158931,158951,158957],{"__ignoreMap":27},[49,158907,158908,158910,158912,158914,158916,158918],{"class":51,"line":52},[49,158909,147067],{"class":73},[49,158911,78],{"class":77},[49,158913,61136],{"class":159},[49,158915,841],{"class":73},[49,158917,152910],{"class":59},[49,158919,847],{"class":73},[49,158921,158922],{"class":51,"line":63},[49,158923,399],{"emptyLinePlaceholder":398},[49,158925,158926,158928],{"class":51,"line":70},[49,158927,2230],{"class":77},[49,158929,158930],{"class":73}," name:\n",[49,158932,158933,158935,158937,158939,158941,158943,158945,158947,158949],{"class":51,"line":219},[49,158934,31830],{"class":159},[49,158936,841],{"class":73},[49,158938,891],{"class":77},[49,158940,157585],{"class":59},[49,158942,1725],{"class":159},[49,158944,80341],{"class":73},[49,158946,1775],{"class":159},[49,158948,1080],{"class":59},[49,158950,847],{"class":73},[49,158952,158953,158955],{"class":51,"line":233},[49,158954,2400],{"class":77},[49,158956,4436],{"class":73},[49,158958,158959,158961,158963,158966],{"class":51,"line":241},[49,158960,31830],{"class":159},[49,158962,841],{"class":73},[49,158964,158965],{"class":59},"\"姓名不能为空\"",[49,158967,847],{"class":73},[782,158969,158971],{"id":158970},"_39-match语句","3.9 match语句",[14,158973,158974,158975,158977],{},"Python 3.10 开始支持 ",[46,158976,71796],{},"。它适合处理固定选项。",[40,158979,158981],{"className":30909,"code":158980,"language":30911,"meta":27,"style":27},"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",[46,158982,158983,158999,159003,159010,159020,159031,159040,159051,159060,159071,159078],{"__ignoreMap":27},[49,158984,158985,158988,158990,158992,158994,158997],{"class":51,"line":52},[49,158986,158987],{"class":73},"command ",[49,158989,78],{"class":77},[49,158991,61136],{"class":159},[49,158993,841],{"class":73},[49,158995,158996],{"class":59},"\"请输入命令:\"",[49,158998,847],{"class":73},[49,159000,159001],{"class":51,"line":63},[49,159002,399],{"emptyLinePlaceholder":398},[49,159004,159005,159007],{"class":51,"line":70},[49,159006,71796],{"class":77},[49,159008,159009],{"class":73}," command:\n",[49,159011,159012,159015,159018],{"class":51,"line":219},[49,159013,159014],{"class":77},"    case",[49,159016,159017],{"class":59}," \"start\"",[49,159019,4436],{"class":73},[49,159021,159022,159024,159026,159029],{"class":51,"line":233},[49,159023,32982],{"class":159},[49,159025,841],{"class":73},[49,159027,159028],{"class":59},"\"启动\"",[49,159030,847],{"class":73},[49,159032,159033,159035,159038],{"class":51,"line":241},[49,159034,159014],{"class":77},[49,159036,159037],{"class":59}," \"stop\"",[49,159039,4436],{"class":73},[49,159041,159042,159044,159046,159049],{"class":51,"line":1920},[49,159043,32982],{"class":159},[49,159045,841],{"class":73},[49,159047,159048],{"class":59},"\"停止\"",[49,159050,847],{"class":73},[49,159052,159053,159055,159058],{"class":51,"line":2011},[49,159054,159014],{"class":77},[49,159056,159057],{"class":59}," \"restart\"",[49,159059,4436],{"class":73},[49,159061,159062,159064,159066,159069],{"class":51,"line":2017},[49,159063,32982],{"class":159},[49,159065,841],{"class":73},[49,159067,159068],{"class":59},"\"重启\"",[49,159070,847],{"class":73},[49,159072,159073,159075],{"class":51,"line":2029},[49,159074,159014],{"class":77},[49,159076,159077],{"class":73}," _:\n",[49,159079,159080,159082,159084,159087],{"class":51,"line":2311},[49,159081,32982],{"class":159},[49,159083,841],{"class":73},[49,159085,159086],{"class":59},"\"未知命令\"",[49,159088,847],{"class":73},[14,159090,159091,159092,159094,159095,159097],{},"入门阶段掌握 ",[46,159093,155189],{}," 更重要，",[46,159096,71796],{}," 可以作为补充。",[782,159099,159101],{"id":159100},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,159103,123823],{},[30,159105,159106,159109,159112],{},[33,159107,159108],{},"输入成绩。",[33,159110,159111],{},"判断成绩是否合法。",[33,159113,159114],{},"输出等级。",[14,159116,10732],{},[40,159118,159120],{"className":30909,"code":159119,"language":30911,"meta":27,"style":27},"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",[46,159121,159122,159140,159144,159162,159173,159185,159196,159208,159219,159232,159243,159255,159266,159272],{"__ignoreMap":27},[49,159123,159124,159126,159128,159130,159132,159134,159136,159138],{"class":51,"line":52},[49,159125,155889],{"class":73},[49,159127,78],{"class":77},[49,159129,110328],{"class":159},[49,159131,841],{"class":73},[49,159133,54352],{"class":159},[49,159135,841],{"class":73},[49,159137,152940],{"class":59},[49,159139,31028],{"class":73},[49,159141,159142],{"class":51,"line":63},[49,159143,399],{"emptyLinePlaceholder":398},[49,159145,159146,159148,159150,159152,159154,159156,159158,159160],{"class":51,"line":70},[49,159147,2230],{"class":77},[49,159149,39461],{"class":77},[49,159151,4790],{"class":159},[49,159153,158783],{"class":77},[49,159155,158314],{"class":73},[49,159157,2287],{"class":77},[49,159159,6451],{"class":159},[49,159161,4436],{"class":73},[49,159163,159164,159166,159168,159171],{"class":51,"line":219},[49,159165,31830],{"class":159},[49,159167,841],{"class":73},[49,159169,159170],{"class":59},"\"成绩不合法\"",[49,159172,847],{"class":73},[49,159174,159175,159177,159179,159181,159183],{"class":51,"line":233},[49,159176,158337],{"class":77},[49,159178,158314],{"class":73},[49,159180,2409],{"class":77},[49,159182,158319],{"class":159},[49,159184,4436],{"class":73},[49,159186,159187,159189,159191,159194],{"class":51,"line":241},[49,159188,31830],{"class":159},[49,159190,841],{"class":73},[49,159192,159193],{"class":59},"\"等级:A\"",[49,159195,847],{"class":73},[49,159197,159198,159200,159202,159204,159206],{"class":51,"line":1920},[49,159199,158337],{"class":77},[49,159201,158314],{"class":73},[49,159203,2409],{"class":77},[49,159205,158344],{"class":159},[49,159207,4436],{"class":73},[49,159209,159210,159212,159214,159217],{"class":51,"line":2011},[49,159211,31830],{"class":159},[49,159213,841],{"class":73},[49,159215,159216],{"class":59},"\"等级:B\"",[49,159218,847],{"class":73},[49,159220,159221,159223,159225,159227,159230],{"class":51,"line":2017},[49,159222,158337],{"class":77},[49,159224,158314],{"class":73},[49,159226,2409],{"class":77},[49,159228,159229],{"class":159}," 70",[49,159231,4436],{"class":73},[49,159233,159234,159236,159238,159241],{"class":51,"line":2029},[49,159235,31830],{"class":159},[49,159237,841],{"class":73},[49,159239,159240],{"class":59},"\"等级:C\"",[49,159242,847],{"class":73},[49,159244,159245,159247,159249,159251,159253],{"class":51,"line":2311},[49,159246,158337],{"class":77},[49,159248,158314],{"class":73},[49,159250,2409],{"class":77},[49,159252,158368],{"class":159},[49,159254,4436],{"class":73},[49,159256,159257,159259,159261,159264],{"class":51,"line":2316},[49,159258,31830],{"class":159},[49,159260,841],{"class":73},[49,159262,159263],{"class":59},"\"等级:D\"",[49,159265,847],{"class":73},[49,159267,159268,159270],{"class":51,"line":2322},[49,159269,2400],{"class":77},[49,159271,4436],{"class":73},[49,159273,159274,159276,159278,159281],{"class":51,"line":2327},[49,159275,31830],{"class":159},[49,159277,841],{"class":73},[49,159279,159280],{"class":59},"\"等级:E\"",[49,159282,847],{"class":73},[782,159284,159286],{"id":159285},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,159288,123823],{},[30,159290,159291,159294,159297,159300],{},[33,159292,159293],{},"输入消费金额。",[33,159295,159296],{},"输入会员等级，普通、银卡、金卡。",[33,159298,159299],{},"普通不打折，银卡 9 折，金卡 8 折。",[33,159301,159302],{},"满 500 再减 50。",[14,159304,10732],{},[40,159306,159308],{"className":30909,"code":159307,"language":30911,"meta":27,"style":27},"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",[46,159309,159310,159330,159346,159350,159358,159362,159376,159386,159399,159408,159421,159429,159435,159446,159450,159464,159468,159482,159492,159496],{"__ignoreMap":27},[49,159311,159312,159315,159317,159319,159321,159323,159325,159328],{"class":51,"line":52},[49,159313,159314],{"class":73},"amount ",[49,159316,78],{"class":77},[49,159318,110328],{"class":159},[49,159320,841],{"class":73},[49,159322,54352],{"class":159},[49,159324,841],{"class":73},[49,159326,159327],{"class":59},"\"请输入消费金额:\"",[49,159329,31028],{"class":73},[49,159331,159332,159335,159337,159339,159341,159344],{"class":51,"line":63},[49,159333,159334],{"class":73},"level ",[49,159336,78],{"class":77},[49,159338,61136],{"class":159},[49,159340,841],{"class":73},[49,159342,159343],{"class":59},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[49,159345,847],{"class":73},[49,159347,159348],{"class":51,"line":70},[49,159349,399],{"emptyLinePlaceholder":398},[49,159351,159352,159354,159356],{"class":51,"line":219},[49,159353,157767],{"class":73},[49,159355,78],{"class":77},[49,159357,56230],{"class":159},[49,159359,159360],{"class":51,"line":233},[49,159361,399],{"emptyLinePlaceholder":398},[49,159363,159364,159366,159369,159371,159374],{"class":51,"line":241},[49,159365,2230],{"class":77},[49,159367,159368],{"class":73}," level ",[49,159370,3646],{"class":77},[49,159372,159373],{"class":59}," \"银卡\"",[49,159375,4436],{"class":73},[49,159377,159378,159381,159383],{"class":51,"line":1920},[49,159379,159380],{"class":73},"    discount ",[49,159382,78],{"class":77},[49,159384,159385],{"class":159}," 0.9\n",[49,159387,159388,159390,159392,159394,159397],{"class":51,"line":2011},[49,159389,158337],{"class":77},[49,159391,159368],{"class":73},[49,159393,3646],{"class":77},[49,159395,159396],{"class":59}," \"金卡\"",[49,159398,4436],{"class":73},[49,159400,159401,159403,159405],{"class":51,"line":2017},[49,159402,159380],{"class":73},[49,159404,78],{"class":77},[49,159406,159407],{"class":159}," 0.8\n",[49,159409,159410,159412,159414,159416,159419],{"class":51,"line":2029},[49,159411,158337],{"class":77},[49,159413,159368],{"class":73},[49,159415,3646],{"class":77},[49,159417,159418],{"class":59}," \"普通\"",[49,159420,4436],{"class":73},[49,159422,159423,159425,159427],{"class":51,"line":2311},[49,159424,159380],{"class":73},[49,159426,78],{"class":77},[49,159428,56230],{"class":159},[49,159430,159431,159433],{"class":51,"line":2316},[49,159432,2400],{"class":77},[49,159434,4436],{"class":73},[49,159436,159437,159439,159441,159444],{"class":51,"line":2322},[49,159438,31830],{"class":159},[49,159440,841],{"class":73},[49,159442,159443],{"class":59},"\"会员等级输入错误，按普通会员计算\"",[49,159445,847],{"class":73},[49,159447,159448],{"class":51,"line":2327},[49,159449,399],{"emptyLinePlaceholder":398},[49,159451,159452,159455,159457,159460,159462],{"class":51,"line":2341},[49,159453,159454],{"class":73},"pay ",[49,159456,78],{"class":77},[49,159458,159459],{"class":73}," amount ",[49,159461,1284],{"class":77},[49,159463,157806],{"class":73},[49,159465,159466],{"class":51,"line":2346},[49,159467,399],{"emptyLinePlaceholder":398},[49,159469,159470,159472,159475,159477,159480],{"class":51,"line":2352},[49,159471,2230],{"class":77},[49,159473,159474],{"class":73}," pay ",[49,159476,2409],{"class":77},[49,159478,159479],{"class":159}," 500",[49,159481,4436],{"class":73},[49,159483,159484,159487,159489],{"class":51,"line":2373},[49,159485,159486],{"class":73},"    pay ",[49,159488,150783],{"class":77},[49,159490,159491],{"class":159}," 50\n",[49,159493,159494],{"class":51,"line":2378},[49,159495,399],{"emptyLinePlaceholder":398},[49,159497,159498,159500,159502,159504,159506,159508,159511,159513,159515,159517],{"class":51,"line":2392},[49,159499,30946],{"class":159},[49,159501,841],{"class":73},[49,159503,891],{"class":77},[49,159505,157887],{"class":59},[49,159507,1725],{"class":159},[49,159509,159510],{"class":73},"pay",[49,159512,157690],{"class":77},[49,159514,1775],{"class":159},[49,159516,157543],{"class":59},[49,159518,847],{"class":73},[782,159520,159522],{"id":159521},"_312-易错点","3.12 易错点",[30,159524,159525,159528,159531,159534,159539],{},[33,159526,159527],{},"冒号不能漏。",[33,159529,159530],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[33,159532,159533],{},"多分支判断要注意顺序。",[33,159535,159536,159537,28916],{},"判断相等用 ",[46,159538,3646],{},[33,159540,159541],{},"字符串比较区分大小写：",[40,159543,159545],{"className":30909,"code":159544,"language":30911,"meta":27,"style":27},"\"Y\" == \"y\"  # False\n",[46,159546,159547],{"__ignoreMap":27},[49,159548,159549,159552,159554,159556],{"class":51,"line":52},[49,159550,159551],{"class":59},"\"Y\"",[49,159553,102090],{"class":77},[49,159555,158536],{"class":59},[49,159557,159558],{"class":66},"  # False\n",[14,159560,159561],{},"可转换后再判断：",[40,159563,159565],{"className":30909,"code":159564,"language":30911,"meta":27,"style":27},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[46,159566,159567,159584,159597],{"__ignoreMap":27},[49,159568,159569,159572,159574,159576,159578,159581],{"class":51,"line":52},[49,159570,159571],{"class":73},"answer ",[49,159573,78],{"class":77},[49,159575,61136],{"class":159},[49,159577,841],{"class":73},[49,159579,159580],{"class":59},"\"是否继续(y\u002Fn):\"",[49,159582,159583],{"class":73},").lower()\n",[49,159585,159586,159588,159591,159593,159595],{"class":51,"line":63},[49,159587,2230],{"class":77},[49,159589,159590],{"class":73}," answer ",[49,159592,3646],{"class":77},[49,159594,158536],{"class":59},[49,159596,4436],{"class":73},[49,159598,159599,159601,159603,159606],{"class":51,"line":70},[49,159600,31830],{"class":159},[49,159602,841],{"class":73},[49,159604,159605],{"class":59},"\"继续\"",[49,159607,847],{"class":73},[782,159609,159611],{"id":159610},"_313-本章练习","3.13 本章练习",[30,159613,159614,159617,159620,159623,159633],{},[33,159615,159616],{},"输入年龄，判断是否成年。",[33,159618,159619],{},"输入年份，判断是否为闰年。",[33,159621,159622],{},"输入三个数字，输出最大值。",[33,159624,159625,159626,159629,159630,159632],{},"写登录判断：用户名是 ",[46,159627,159628],{},"admin"," 且密码是 ",[46,159631,15781],{}," 才登录成功。",[33,159634,159635],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[757,159637,159638],{},"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":27,"searchDepth":63,"depth":63,"links":159640},[159641,159642,159643,159644,159645,159646,159651,159652,159653,159654,159655,159656,159657],{"id":158029,"depth":63,"text":158030},{"id":158082,"depth":63,"text":158083},{"id":158186,"depth":63,"text":158187},{"id":158276,"depth":63,"text":158277},{"id":158466,"depth":63,"text":158467},{"id":158589,"depth":63,"text":158590,"children":159647},[159648,159649,159650],{"id":158593,"depth":70,"text":158594},{"id":158650,"depth":70,"text":158651},{"id":158707,"depth":70,"text":158708},{"id":158752,"depth":63,"text":158753},{"id":158843,"depth":63,"text":158844},{"id":158970,"depth":63,"text":158971},{"id":159100,"depth":63,"text":159101},{"id":159285,"depth":63,"text":159286},{"id":159521,"depth":63,"text":159522},{"id":159610,"depth":63,"text":159611},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158021,"description":24072},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159664,"title":159665,"body":159666,"description":24072,"extension":766,"meta":161435,"navigation":398,"path":161436,"seo":161437,"stem":161438,"__hash__":161439},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159667,"toc":161415},[159668,159671,159675,159681,159684,159701,159705,159707,159724,159726,159771,159773,159790,159794,159797,159863,159866,159884,159888,160049,160058,160062,160066,160071,160118,160120,160126,160130,160135,160182,160184,160190,160194,160199,160235,160238,160285,160289,160295,160353,160358,160389,160394,160398,160453,160456,160528,160531,160590,160594,160597,160672,160675,160679,160785,160788,160814,160818,160830,160899,160902,160994,160998,161000,161011,161013,161143,161147,161349,161357,161361,161391,161395,161412],[10,159669,159665],{"id":159670},"_4-循环语句",[782,159672,159674],{"id":159673},"_41-为什么需要循环","4.1 为什么需要循环",[14,159676,159677,159678,159680],{},"如果要输出 1 到 100，不应该写 100 行 ",[46,159679,147003],{},"，而应该用循环。",[14,159682,159683],{},"循环适合处理重复任务：",[30,159685,159686,159689,159692,159695,159698],{},[33,159687,159688],{},"重复输出。",[33,159690,159691],{},"重复输入。",[33,159693,159694],{},"遍历数据。",[33,159696,159697],{},"持续执行菜单。",[33,159699,159700],{},"批量处理文件或数据。",[782,159702,159704],{"id":159703},"_42-while循环","4.2 while循环",[14,159706,5878],{},[40,159708,159710],{"className":30909,"code":159709,"language":30911,"meta":27,"style":27},"while 条件:\n    循环体\n",[46,159711,159712,159719],{"__ignoreMap":27},[49,159713,159714,159716],{"class":51,"line":52},[49,159715,109194],{"class":77},[49,159717,159718],{"class":73}," 条件:\n",[49,159720,159721],{"class":51,"line":63},[49,159722,159723],{"class":73},"    循环体\n",[14,159725,15832],{},[40,159727,159729],{"className":30909,"code":159728,"language":30911,"meta":27,"style":27},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[46,159730,159731,159739,159743,159755,159762],{"__ignoreMap":27},[49,159732,159733,159735,159737],{"class":51,"line":52},[49,159734,100679],{"class":73},[49,159736,78],{"class":77},[49,159738,56230],{"class":159},[49,159740,159741],{"class":51,"line":63},[49,159742,399],{"emptyLinePlaceholder":398},[49,159744,159745,159747,159749,159751,159753],{"class":51,"line":70},[49,159746,109194],{"class":77},[49,159748,10135],{"class":73},[49,159750,2287],{"class":77},[49,159752,2846],{"class":159},[49,159754,4436],{"class":73},[49,159756,159757,159759],{"class":51,"line":219},[49,159758,31830],{"class":159},[49,159760,159761],{"class":73},"(i)\n",[49,159763,159764,159767,159769],{"class":51,"line":233},[49,159765,159766],{"class":73},"    i ",[49,159768,10174],{"class":77},[49,159770,56230],{"class":159},[14,159772,81460],{},[30,159774,159775,159781,159784,159787],{},[33,159776,159777,159778,28916],{},"判断条件 ",[46,159779,159780],{},"i \u003C= 5",[33,159782,159783],{},"条件成立，执行循环体。",[33,159785,159786],{},"执行完后回到条件判断。",[33,159788,159789],{},"条件不成立，退出循环。",[782,159791,159793],{"id":159792},"_43-while累加","4.3 while累加",[14,159795,159796],{},"计算 1 到 100 的和：",[40,159798,159800],{"className":30909,"code":159799,"language":30911,"meta":27,"style":27},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[46,159801,159802,159810,159818,159822,159834,159844,159852,159856],{"__ignoreMap":27},[49,159803,159804,159806,159808],{"class":51,"line":52},[49,159805,100679],{"class":73},[49,159807,78],{"class":77},[49,159809,56230],{"class":159},[49,159811,159812,159814,159816],{"class":51,"line":63},[49,159813,157791],{"class":73},[49,159815,78],{"class":77},[49,159817,47864],{"class":159},[49,159819,159820],{"class":51,"line":70},[49,159821,399],{"emptyLinePlaceholder":398},[49,159823,159824,159826,159828,159830,159832],{"class":51,"line":219},[49,159825,109194],{"class":77},[49,159827,10135],{"class":73},[49,159829,2287],{"class":77},[49,159831,6451],{"class":159},[49,159833,4436],{"class":73},[49,159835,159836,159839,159841],{"class":51,"line":233},[49,159837,159838],{"class":73},"    total ",[49,159840,10174],{"class":77},[49,159842,159843],{"class":73}," i\n",[49,159845,159846,159848,159850],{"class":51,"line":241},[49,159847,159766],{"class":73},[49,159849,10174],{"class":77},[49,159851,56230],{"class":159},[49,159853,159854],{"class":51,"line":1920},[49,159855,399],{"emptyLinePlaceholder":398},[49,159857,159858,159860],{"class":51,"line":2011},[49,159859,30946],{"class":159},[49,159861,159862],{"class":73},"(total)\n",[14,159864,159865],{},"核心思想：",[30,159867,159868,159873,159878],{},[33,159869,159870,159872],{},[46,159871,1270],{}," 控制循环次数。",[33,159874,159875,159877],{},[46,159876,157892],{}," 保存累加结果。",[33,159879,159880,159881,159883],{},"每轮循环都要更新 ",[46,159882,1270],{},"，否则可能死循环。",[782,159885,159887],{"id":159886},"_44-while猜数字","4.4 while猜数字",[40,159889,159891],{"className":30909,"code":159890,"language":30911,"meta":27,"style":27},"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",[46,159892,159893,159899,159903,159920,159928,159932,159940,159960,159969,159973,159985,159996,160006,160017,160023,160045],{"__ignoreMap":27},[49,159894,159895,159897],{"class":51,"line":52},[49,159896,30923],{"class":77},[49,159898,45859],{"class":73},[49,159900,159901],{"class":51,"line":63},[49,159902,399],{"emptyLinePlaceholder":398},[49,159904,159905,159907,159909,159912,159914,159916,159918],{"class":51,"line":70},[49,159906,159571],{"class":73},[49,159908,78],{"class":77},[49,159910,159911],{"class":73}," random.randint(",[49,159913,1047],{"class":159},[49,159915,13132],{"class":73},[49,159917,1140],{"class":159},[49,159919,847],{"class":73},[49,159921,159922,159924,159926],{"class":51,"line":219},[49,159923,147222],{"class":73},[49,159925,78],{"class":77},[49,159927,47864],{"class":159},[49,159929,159930],{"class":51,"line":233},[49,159931,399],{"emptyLinePlaceholder":398},[49,159933,159934,159936,159938],{"class":51,"line":241},[49,159935,109194],{"class":77},[49,159937,95823],{"class":159},[49,159939,4436],{"class":73},[49,159941,159942,159945,159947,159949,159951,159953,159955,159958],{"class":51,"line":1920},[49,159943,159944],{"class":73},"    guess ",[49,159946,78],{"class":77},[49,159948,3080],{"class":159},[49,159950,841],{"class":73},[49,159952,54352],{"class":159},[49,159954,841],{"class":73},[49,159956,159957],{"class":59},"\"请输入1到100之间的数字:\"",[49,159959,31028],{"class":73},[49,159961,159962,159965,159967],{"class":51,"line":2011},[49,159963,159964],{"class":73},"    count ",[49,159966,10174],{"class":77},[49,159968,56230],{"class":159},[49,159970,159971],{"class":51,"line":2017},[49,159972,399],{"emptyLinePlaceholder":398},[49,159974,159975,159977,159980,159982],{"class":51,"line":2029},[49,159976,3798],{"class":77},[49,159978,159979],{"class":73}," guess ",[49,159981,1789],{"class":77},[49,159983,159984],{"class":73}," answer:\n",[49,159986,159987,159989,159991,159994],{"class":51,"line":2311},[49,159988,32982],{"class":159},[49,159990,841],{"class":73},[49,159992,159993],{"class":59},"\"猜大了\"",[49,159995,847],{"class":73},[49,159997,159998,160000,160002,160004],{"class":51,"line":2316},[49,159999,39824],{"class":77},[49,160001,159979],{"class":73},[49,160003,1739],{"class":77},[49,160005,159984],{"class":73},[49,160007,160008,160010,160012,160015],{"class":51,"line":2322},[49,160009,32982],{"class":159},[49,160011,841],{"class":73},[49,160013,160014],{"class":59},"\"猜小了\"",[49,160016,847],{"class":73},[49,160018,160019,160021],{"class":51,"line":2327},[49,160020,158553],{"class":77},[49,160022,4436],{"class":73},[49,160024,160025,160027,160029,160031,160034,160036,160038,160040,160043],{"class":51,"line":2341},[49,160026,32982],{"class":159},[49,160028,841],{"class":73},[49,160030,891],{"class":77},[49,160032,160033],{"class":59},"\"猜对了，一共猜了",[49,160035,1725],{"class":159},[49,160037,84965],{"class":73},[49,160039,1775],{"class":159},[49,160041,160042],{"class":59},"次\"",[49,160044,847],{"class":73},[49,160046,160047],{"class":51,"line":2346},[49,160048,32158],{"class":77},[14,160050,160051,160054,160055,160057],{},[46,160052,160053],{},"while True"," 表示无限循环，通常配合 ",[46,160056,2751],{}," 使用。",[782,160059,160061],{"id":160060},"_45-break和continue","4.5 break和continue",[18,160063,160065],{"id":160064},"_451-break","4.5.1 break",[14,160067,160068,160070],{},[46,160069,2751],{}," 直接结束整个循环。",[40,160072,160074],{"className":30909,"code":160073,"language":30911,"meta":27,"style":27},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[46,160075,160076,160096,160108,160112],{"__ignoreMap":27},[49,160077,160078,160080,160082,160084,160086,160088,160090,160092,160094],{"class":51,"line":52},[49,160079,3722],{"class":77},[49,160081,10135],{"class":73},[49,160083,26732],{"class":77},[49,160085,32974],{"class":159},[49,160087,841],{"class":73},[49,160089,1047],{"class":159},[49,160091,13132],{"class":73},[49,160093,1173],{"class":159},[49,160095,31317],{"class":73},[49,160097,160098,160100,160102,160104,160106],{"class":51,"line":63},[49,160099,3798],{"class":77},[49,160101,10135],{"class":73},[49,160103,3646],{"class":77},[49,160105,78601],{"class":159},[49,160107,4436],{"class":73},[49,160109,160110],{"class":51,"line":70},[49,160111,32158],{"class":77},[49,160113,160114,160116],{"class":51,"line":219},[49,160115,31830],{"class":159},[49,160117,159761],{"class":73},[14,160119,146988],{},[40,160121,160124],{"className":160122,"code":160123,"language":5884,"meta":27},[5882],"1\n2\n",[46,160125,160123],{"__ignoreMap":27},[18,160127,160129],{"id":160128},"_452-continue","4.5.2 continue",[14,160131,160132,160134],{},[46,160133,155203],{}," 跳过本轮剩余代码，进入下一轮循环。",[40,160136,160138],{"className":30909,"code":160137,"language":30911,"meta":27,"style":27},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[46,160139,160140,160160,160172,160176],{"__ignoreMap":27},[49,160141,160142,160144,160146,160148,160150,160152,160154,160156,160158],{"class":51,"line":52},[49,160143,3722],{"class":77},[49,160145,10135],{"class":73},[49,160147,26732],{"class":77},[49,160149,32974],{"class":159},[49,160151,841],{"class":73},[49,160153,1047],{"class":159},[49,160155,13132],{"class":73},[49,160157,1173],{"class":159},[49,160159,31317],{"class":73},[49,160161,160162,160164,160166,160168,160170],{"class":51,"line":63},[49,160163,3798],{"class":77},[49,160165,10135],{"class":73},[49,160167,3646],{"class":77},[49,160169,78601],{"class":159},[49,160171,4436],{"class":73},[49,160173,160174],{"class":51,"line":70},[49,160175,149043],{"class":77},[49,160177,160178,160180],{"class":51,"line":219},[49,160179,31830],{"class":159},[49,160181,159761],{"class":73},[14,160183,146988],{},[40,160185,160188],{"className":160186,"code":160187,"language":5884,"meta":27},[5882],"1\n2\n4\n5\n",[46,160189,160187],{"__ignoreMap":27},[782,160191,160193],{"id":160192},"_46-for循环","4.6 for循环",[14,160195,160196,160198],{},[46,160197,3722],{}," 常用于遍历序列。",[40,160200,160202],{"className":30909,"code":160201,"language":30911,"meta":27,"style":27},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[46,160203,160204,160213,160217,160228],{"__ignoreMap":27},[49,160205,160206,160208,160210],{"class":51,"line":52},[49,160207,147067],{"class":73},[49,160209,78],{"class":77},[49,160211,160212],{"class":59}," \"python\"\n",[49,160214,160215],{"class":51,"line":63},[49,160216,399],{"emptyLinePlaceholder":398},[49,160218,160219,160221,160224,160226],{"class":51,"line":70},[49,160220,3722],{"class":77},[49,160222,160223],{"class":73}," ch ",[49,160225,26732],{"class":77},[49,160227,158930],{"class":73},[49,160229,160230,160232],{"class":51,"line":219},[49,160231,31830],{"class":159},[49,160233,160234],{"class":73},"(ch)\n",[14,160236,160237],{},"遍历列表：",[40,160239,160241],{"className":30909,"code":160240,"language":30911,"meta":27,"style":27},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[46,160242,160243,160265,160269,160279],{"__ignoreMap":27},[49,160244,160245,160248,160250,160252,160254,160256,160258,160260,160263],{"class":51,"line":52},[49,160246,160247],{"class":73},"students ",[49,160249,78],{"class":77},[49,160251,52757],{"class":73},[49,160253,150419],{"class":59},[49,160255,13132],{"class":73},[49,160257,151467],{"class":59},[49,160259,13132],{"class":73},[49,160261,160262],{"class":59},"\"小刚\"",[49,160264,33777],{"class":73},[49,160266,160267],{"class":51,"line":63},[49,160268,399],{"emptyLinePlaceholder":398},[49,160270,160271,160273,160275,160277],{"class":51,"line":70},[49,160272,3722],{"class":77},[49,160274,152668],{"class":73},[49,160276,26732],{"class":77},[49,160278,152673],{"class":73},[49,160280,160281,160283],{"class":51,"line":219},[49,160282,31830],{"class":159},[49,160284,150573],{"class":73},[782,160286,160288],{"id":160287},"_47-range函数","4.7 range函数",[14,160290,160291,160294],{},[46,160292,160293],{},"range()"," 用于生成整数序列。",[40,160296,160298],{"className":30909,"code":160297,"language":30911,"meta":27,"style":27},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[46,160299,160300,160314,160332],{"__ignoreMap":27},[49,160301,160302,160304,160306,160308,160311],{"class":51,"line":52},[49,160303,33947],{"class":159},[49,160305,841],{"class":73},[49,160307,1148],{"class":159},[49,160309,160310],{"class":73},")          ",[49,160312,160313],{"class":66},"# 0,1,2,3,4\n",[49,160315,160316,160318,160320,160322,160324,160326,160329],{"class":51,"line":63},[49,160317,33947],{"class":159},[49,160319,841],{"class":73},[49,160321,1047],{"class":159},[49,160323,13132],{"class":73},[49,160325,1148],{"class":159},[49,160327,160328],{"class":73},")       ",[49,160330,160331],{"class":66},"# 1,2,3,4\n",[49,160333,160334,160336,160338,160340,160342,160344,160346,160348,160350],{"class":51,"line":70},[49,160335,33947],{"class":159},[49,160337,841],{"class":73},[49,160339,1047],{"class":159},[49,160341,13132],{"class":73},[49,160343,1275],{"class":159},[49,160345,13132],{"class":73},[49,160347,915],{"class":159},[49,160349,156192],{"class":73},[49,160351,160352],{"class":66},"# 1,3,5,7,9\n",[14,160354,160355,160356,25309],{},"配合 ",[46,160357,3722],{},[40,160359,160361],{"className":30909,"code":160360,"language":30911,"meta":27,"style":27},"for i in range(1, 6):\n    print(i)\n",[46,160362,160363,160383],{"__ignoreMap":27},[49,160364,160365,160367,160369,160371,160373,160375,160377,160379,160381],{"class":51,"line":52},[49,160366,3722],{"class":77},[49,160368,10135],{"class":73},[49,160370,26732],{"class":77},[49,160372,32974],{"class":159},[49,160374,841],{"class":73},[49,160376,1047],{"class":159},[49,160378,13132],{"class":73},[49,160380,1173],{"class":159},[49,160382,31317],{"class":73},[49,160384,160385,160387],{"class":51,"line":63},[49,160386,31830],{"class":159},[49,160388,159761],{"class":73},[14,160390,9722,160391,160393],{},[46,160392,33947],{}," 的结束值不包含在内。",[782,160395,160397],{"id":160396},"_48-for循环求和","4.8 for循环求和",[40,160399,160401],{"className":30909,"code":160400,"language":30911,"meta":27,"style":27},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[46,160402,160403,160411,160415,160435,160443,160447],{"__ignoreMap":27},[49,160404,160405,160407,160409],{"class":51,"line":52},[49,160406,157791],{"class":73},[49,160408,78],{"class":77},[49,160410,47864],{"class":159},[49,160412,160413],{"class":51,"line":63},[49,160414,399],{"emptyLinePlaceholder":398},[49,160416,160417,160419,160421,160423,160425,160427,160429,160431,160433],{"class":51,"line":70},[49,160418,3722],{"class":77},[49,160420,10135],{"class":73},[49,160422,26732],{"class":77},[49,160424,32974],{"class":159},[49,160426,841],{"class":73},[49,160428,1047],{"class":159},[49,160430,13132],{"class":73},[49,160432,1166],{"class":159},[49,160434,31317],{"class":73},[49,160436,160437,160439,160441],{"class":51,"line":219},[49,160438,159838],{"class":73},[49,160440,10174],{"class":77},[49,160442,159843],{"class":73},[49,160444,160445],{"class":51,"line":233},[49,160446,399],{"emptyLinePlaceholder":398},[49,160448,160449,160451],{"class":51,"line":241},[49,160450,30946],{"class":159},[49,160452,159862],{"class":73},[14,160454,160455],{},"求偶数和：",[40,160457,160459],{"className":30909,"code":160458,"language":30911,"meta":27,"style":27},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[46,160460,160461,160469,160473,160493,160509,160518,160522],{"__ignoreMap":27},[49,160462,160463,160465,160467],{"class":51,"line":52},[49,160464,157791],{"class":73},[49,160466,78],{"class":77},[49,160468,47864],{"class":159},[49,160470,160471],{"class":51,"line":63},[49,160472,399],{"emptyLinePlaceholder":398},[49,160474,160475,160477,160479,160481,160483,160485,160487,160489,160491],{"class":51,"line":70},[49,160476,3722],{"class":77},[49,160478,10135],{"class":73},[49,160480,26732],{"class":77},[49,160482,32974],{"class":159},[49,160484,841],{"class":73},[49,160486,1047],{"class":159},[49,160488,13132],{"class":73},[49,160490,1166],{"class":159},[49,160492,31317],{"class":73},[49,160494,160495,160497,160499,160501,160503,160505,160507],{"class":51,"line":219},[49,160496,3798],{"class":77},[49,160498,10135],{"class":73},[49,160500,1157],{"class":77},[49,160502,15452],{"class":159},[49,160504,102090],{"class":77},[49,160506,4790],{"class":159},[49,160508,4436],{"class":73},[49,160510,160511,160514,160516],{"class":51,"line":233},[49,160512,160513],{"class":73},"        total ",[49,160515,10174],{"class":77},[49,160517,159843],{"class":73},[49,160519,160520],{"class":51,"line":241},[49,160521,399],{"emptyLinePlaceholder":398},[49,160523,160524,160526],{"class":51,"line":1920},[49,160525,30946],{"class":159},[49,160527,159862],{"class":73},[14,160529,160530],{},"也可以：",[40,160532,160534],{"className":30909,"code":160533,"language":30911,"meta":27,"style":27},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[46,160535,160536,160544,160548,160572,160580,160584],{"__ignoreMap":27},[49,160537,160538,160540,160542],{"class":51,"line":52},[49,160539,157791],{"class":73},[49,160541,78],{"class":77},[49,160543,47864],{"class":159},[49,160545,160546],{"class":51,"line":63},[49,160547,399],{"emptyLinePlaceholder":398},[49,160549,160550,160552,160554,160556,160558,160560,160562,160564,160566,160568,160570],{"class":51,"line":70},[49,160551,3722],{"class":77},[49,160553,10135],{"class":73},[49,160555,26732],{"class":77},[49,160557,32974],{"class":159},[49,160559,841],{"class":73},[49,160561,915],{"class":159},[49,160563,13132],{"class":73},[49,160565,1166],{"class":159},[49,160567,13132],{"class":73},[49,160569,915],{"class":159},[49,160571,31317],{"class":73},[49,160573,160574,160576,160578],{"class":51,"line":219},[49,160575,159838],{"class":73},[49,160577,10174],{"class":77},[49,160579,159843],{"class":73},[49,160581,160582],{"class":51,"line":233},[49,160583,399],{"emptyLinePlaceholder":398},[49,160585,160586,160588],{"class":51,"line":241},[49,160587,30946],{"class":159},[49,160589,159862],{"class":73},[782,160591,160593],{"id":160592},"_49-循环嵌套","4.9 循环嵌套",[14,160595,160596],{},"嵌套循环就是循环里面再写循环。",[40,160598,160600],{"className":30909,"code":160599,"language":30911,"meta":27,"style":27},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[46,160601,160602,160622,160642],{"__ignoreMap":27},[49,160603,160604,160606,160608,160610,160612,160614,160616,160618,160620],{"class":51,"line":52},[49,160605,3722],{"class":77},[49,160607,10135],{"class":73},[49,160609,26732],{"class":77},[49,160611,32974],{"class":159},[49,160613,841],{"class":73},[49,160615,1047],{"class":159},[49,160617,13132],{"class":73},[49,160619,1122],{"class":159},[49,160621,31317],{"class":73},[49,160623,160624,160626,160628,160630,160632,160634,160636,160638,160640],{"class":51,"line":63},[49,160625,3898],{"class":77},[49,160627,10197],{"class":73},[49,160629,26732],{"class":77},[49,160631,32974],{"class":159},[49,160633,841],{"class":73},[49,160635,1047],{"class":159},[49,160637,13132],{"class":73},[49,160639,1122],{"class":159},[49,160641,31317],{"class":73},[49,160643,160644,160646,160648,160650,160653,160655,160657,160659,160662,160664,160666,160668,160670],{"class":51,"line":70},[49,160645,32982],{"class":159},[49,160647,841],{"class":73},[49,160649,891],{"class":77},[49,160651,160652],{"class":59},"\"i=",[49,160654,1725],{"class":159},[49,160656,1270],{"class":73},[49,160658,1775],{"class":159},[49,160660,160661],{"class":59},", j=",[49,160663,1725],{"class":159},[49,160665,1296],{"class":73},[49,160667,1775],{"class":159},[49,160669,1080],{"class":59},[49,160671,847],{"class":73},[14,160673,160674],{},"外层循环执行一次，内层循环执行完整一轮。",[782,160676,160678],{"id":160677},"_410-九九乘法表","4.10 九九乘法表",[40,160680,160682],{"className":30909,"code":160681,"language":30911,"meta":27,"style":27},"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",[46,160683,160684,160704,160727,160779],{"__ignoreMap":27},[49,160685,160686,160688,160690,160692,160694,160696,160698,160700,160702],{"class":51,"line":52},[49,160687,3722],{"class":77},[49,160689,10135],{"class":73},[49,160691,26732],{"class":77},[49,160693,32974],{"class":159},[49,160695,841],{"class":73},[49,160697,1047],{"class":159},[49,160699,13132],{"class":73},[49,160701,1275],{"class":159},[49,160703,31317],{"class":73},[49,160705,160706,160708,160710,160712,160714,160716,160718,160721,160723,160725],{"class":51,"line":63},[49,160707,3898],{"class":77},[49,160709,10197],{"class":73},[49,160711,26732],{"class":77},[49,160713,32974],{"class":159},[49,160715,841],{"class":73},[49,160717,1047],{"class":159},[49,160719,160720],{"class":73},", i ",[49,160722,1310],{"class":77},[49,160724,25807],{"class":159},[49,160726,31317],{"class":73},[49,160728,160729,160731,160733,160735,160737,160739,160741,160743,160745,160747,160749,160751,160753,160755,160757,160759,160761,160763,160765,160767,160769,160771,160773,160775,160777],{"class":51,"line":70},[49,160730,32982],{"class":159},[49,160732,841],{"class":73},[49,160734,891],{"class":77},[49,160736,1080],{"class":59},[49,160738,1725],{"class":159},[49,160740,1296],{"class":73},[49,160742,1775],{"class":159},[49,160744,1284],{"class":59},[49,160746,1725],{"class":159},[49,160748,1270],{"class":73},[49,160750,1775],{"class":159},[49,160752,78],{"class":59},[49,160754,1725],{"class":159},[49,160756,100679],{"class":73},[49,160758,1284],{"class":77},[49,160760,4107],{"class":73},[49,160762,1775],{"class":159},[49,160764,1080],{"class":59},[49,160766,13132],{"class":73},[49,160768,46332],{"class":5913},[49,160770,78],{"class":77},[49,160772,1080],{"class":59},[49,160774,1930],{"class":159},[49,160776,1080],{"class":59},[49,160778,847],{"class":73},[49,160780,160781,160783],{"class":51,"line":219},[49,160782,31830],{"class":159},[49,160784,2674],{"class":73},[14,160786,160787],{},"关键点：",[30,160789,160790,160796,160802,160808],{},[33,160791,160792,160793,160795],{},"外层 ",[46,160794,1270],{}," 控制行。",[33,160797,160798,160799,160801],{},"内层 ",[46,160800,1296],{}," 控制列。",[33,160803,160804,160805,160807],{},"每行结束后用 ",[46,160806,147003],{}," 换行。",[33,160809,160810,160813],{},[46,160811,160812],{},"end=\"\\t\""," 让同一行的内容横向排列。",[782,160815,160817],{"id":160816},"_411-循环else","4.11 循环else",[14,160819,160820,160821,160823,160824,160826,160827,160829],{},"Python 的循环可以带 ",[46,160822,2400],{},"。当循环正常结束时执行 ",[46,160825,2400],{},"，如果被 ",[46,160828,2751],{}," 打断，则不执行。",[40,160831,160833],{"className":30909,"code":160832,"language":30911,"meta":27,"style":27},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[46,160834,160835,160855,160867,160878,160882,160888],{"__ignoreMap":27},[49,160836,160837,160839,160841,160843,160845,160847,160849,160851,160853],{"class":51,"line":52},[49,160838,3722],{"class":77},[49,160840,10135],{"class":73},[49,160842,26732],{"class":77},[49,160844,32974],{"class":159},[49,160846,841],{"class":73},[49,160848,1047],{"class":159},[49,160850,13132],{"class":73},[49,160852,1173],{"class":159},[49,160854,31317],{"class":73},[49,160856,160857,160859,160861,160863,160865],{"class":51,"line":63},[49,160858,3798],{"class":77},[49,160860,10135],{"class":73},[49,160862,3646],{"class":77},[49,160864,2736],{"class":159},[49,160866,4436],{"class":73},[49,160868,160869,160871,160873,160876],{"class":51,"line":70},[49,160870,32982],{"class":159},[49,160872,841],{"class":73},[49,160874,160875],{"class":59},"\"找到了\"",[49,160877,847],{"class":73},[49,160879,160880],{"class":51,"line":219},[49,160881,32158],{"class":77},[49,160883,160884,160886],{"class":51,"line":233},[49,160885,2400],{"class":77},[49,160887,4436],{"class":73},[49,160889,160890,160892,160894,160897],{"class":51,"line":241},[49,160891,31830],{"class":159},[49,160893,841],{"class":73},[49,160895,160896],{"class":59},"\"没找到\"",[49,160898,847],{"class":73},[14,160900,160901],{},"常用于搜索。",[40,160903,160905],{"className":30909,"code":160904,"language":30911,"meta":27,"style":27},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[46,160906,160907,160928,160937,160941,160953,160964,160974,160978,160984],{"__ignoreMap":27},[49,160908,160909,160912,160914,160916,160918,160920,160922,160924,160926],{"class":51,"line":52},[49,160910,160911],{"class":73},"names ",[49,160913,78],{"class":77},[49,160915,52757],{"class":73},[49,160917,150419],{"class":59},[49,160919,13132],{"class":73},[49,160921,151467],{"class":59},[49,160923,13132],{"class":73},[49,160925,160262],{"class":59},[49,160927,33777],{"class":73},[49,160929,160930,160932,160934],{"class":51,"line":63},[49,160931,112109],{"class":73},[49,160933,78],{"class":77},[49,160935,160936],{"class":59}," \"小李\"\n",[49,160938,160939],{"class":51,"line":70},[49,160940,399],{"emptyLinePlaceholder":398},[49,160942,160943,160945,160948,160950],{"class":51,"line":219},[49,160944,3722],{"class":77},[49,160946,160947],{"class":73}," name ",[49,160949,26732],{"class":77},[49,160951,160952],{"class":73}," names:\n",[49,160954,160955,160957,160959,160961],{"class":51,"line":233},[49,160956,3798],{"class":77},[49,160958,160947],{"class":73},[49,160960,3646],{"class":77},[49,160962,160963],{"class":73}," target:\n",[49,160965,160966,160968,160970,160972],{"class":51,"line":241},[49,160967,32982],{"class":159},[49,160969,841],{"class":73},[49,160971,160875],{"class":59},[49,160973,847],{"class":73},[49,160975,160976],{"class":51,"line":1920},[49,160977,32158],{"class":77},[49,160979,160980,160982],{"class":51,"line":2011},[49,160981,2400],{"class":77},[49,160983,4436],{"class":73},[49,160985,160986,160988,160990,160992],{"class":51,"line":2017},[49,160987,31830],{"class":159},[49,160989,841],{"class":73},[49,160991,160896],{"class":59},[49,160993,847],{"class":73},[782,160995,160997],{"id":160996},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160999,123823],{},[30,161001,161002,161005,161008],{},[33,161003,161004],{},"用户最多输入 3 次密码。",[33,161006,161007],{},"密码正确则登录成功。",[33,161009,161010],{},"3 次都错误则锁定账号。",[14,161012,10732],{},[40,161014,161016],{"className":30909,"code":161015,"language":30911,"meta":27,"style":27},"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",[46,161017,161018,161028,161032,161048,161064,161068,161080,161091,161095,161101,161126,161132],{"__ignoreMap":27},[49,161019,161020,161023,161025],{"class":51,"line":52},[49,161021,161022],{"class":73},"password ",[49,161024,78],{"class":77},[49,161026,161027],{"class":59}," \"123456\"\n",[49,161029,161030],{"class":51,"line":63},[49,161031,399],{"emptyLinePlaceholder":398},[49,161033,161034,161036,161038,161040,161042,161044,161046],{"class":51,"line":70},[49,161035,3722],{"class":77},[49,161037,10135],{"class":73},[49,161039,26732],{"class":77},[49,161041,32974],{"class":159},[49,161043,841],{"class":73},[49,161045,909],{"class":159},[49,161047,31317],{"class":73},[49,161049,161050,161053,161055,161057,161059,161062],{"class":51,"line":219},[49,161051,161052],{"class":73},"    user_password ",[49,161054,78],{"class":77},[49,161056,61136],{"class":159},[49,161058,841],{"class":73},[49,161060,161061],{"class":59},"\"请输入密码:\"",[49,161063,847],{"class":73},[49,161065,161066],{"class":51,"line":233},[49,161067,399],{"emptyLinePlaceholder":398},[49,161069,161070,161072,161075,161077],{"class":51,"line":241},[49,161071,3798],{"class":77},[49,161073,161074],{"class":73}," user_password ",[49,161076,3646],{"class":77},[49,161078,161079],{"class":73}," password:\n",[49,161081,161082,161084,161086,161089],{"class":51,"line":1920},[49,161083,32982],{"class":159},[49,161085,841],{"class":73},[49,161087,161088],{"class":59},"\"登录成功\"",[49,161090,847],{"class":73},[49,161092,161093],{"class":51,"line":2011},[49,161094,32158],{"class":77},[49,161096,161097,161099],{"class":51,"line":2017},[49,161098,158553],{"class":77},[49,161100,4436],{"class":73},[49,161102,161103,161105,161107,161109,161112,161115,161117,161119,161121,161124],{"class":51,"line":2029},[49,161104,32982],{"class":159},[49,161106,841],{"class":73},[49,161108,891],{"class":77},[49,161110,161111],{"class":59},"\"密码错误，还剩",[49,161113,161114],{"class":159},"{2",[49,161116,52802],{"class":77},[49,161118,3729],{"class":73},[49,161120,1775],{"class":159},[49,161122,161123],{"class":59},"次机会\"",[49,161125,847],{"class":73},[49,161127,161128,161130],{"class":51,"line":2311},[49,161129,2400],{"class":77},[49,161131,4436],{"class":73},[49,161133,161134,161136,161138,161141],{"class":51,"line":2316},[49,161135,31830],{"class":159},[49,161137,841],{"class":73},[49,161139,161140],{"class":59},"\"账号已锁定\"",[49,161142,847],{"class":73},[782,161144,161146],{"id":161145},"_413-小案例菜单程序","4.13 小案例：菜单程序",[40,161148,161150],{"className":30909,"code":161149,"language":30911,"meta":27,"style":27},"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",[46,161151,161152,161160,161171,161182,161193,161204,161215,161219,161234,161238,161250,161261,161273,161284,161296,161307,161319,161329,161333,161339],{"__ignoreMap":27},[49,161153,161154,161156,161158],{"class":51,"line":52},[49,161155,109194],{"class":77},[49,161157,95823],{"class":159},[49,161159,4436],{"class":73},[49,161161,161162,161164,161166,161169],{"class":51,"line":63},[49,161163,31830],{"class":159},[49,161165,841],{"class":73},[49,161167,161168],{"class":59},"\"====== 菜单 ======\"",[49,161170,847],{"class":73},[49,161172,161173,161175,161177,161180],{"class":51,"line":70},[49,161174,31830],{"class":159},[49,161176,841],{"class":73},[49,161178,161179],{"class":59},"\"1. 查询余额\"",[49,161181,847],{"class":73},[49,161183,161184,161186,161188,161191],{"class":51,"line":219},[49,161185,31830],{"class":159},[49,161187,841],{"class":73},[49,161189,161190],{"class":59},"\"2. 存款\"",[49,161192,847],{"class":73},[49,161194,161195,161197,161199,161202],{"class":51,"line":233},[49,161196,31830],{"class":159},[49,161198,841],{"class":73},[49,161200,161201],{"class":59},"\"3. 取款\"",[49,161203,847],{"class":73},[49,161205,161206,161208,161210,161213],{"class":51,"line":241},[49,161207,31830],{"class":159},[49,161209,841],{"class":73},[49,161211,161212],{"class":59},"\"0. 退出\"",[49,161214,847],{"class":73},[49,161216,161217],{"class":51,"line":1920},[49,161218,399],{"emptyLinePlaceholder":398},[49,161220,161221,161224,161226,161228,161230,161232],{"class":51,"line":2011},[49,161222,161223],{"class":73},"    choice ",[49,161225,78],{"class":77},[49,161227,61136],{"class":159},[49,161229,841],{"class":73},[49,161231,153604],{"class":59},[49,161233,847],{"class":73},[49,161235,161236],{"class":51,"line":2017},[49,161237,399],{"emptyLinePlaceholder":398},[49,161239,161240,161242,161244,161246,161248],{"class":51,"line":2029},[49,161241,3798],{"class":77},[49,161243,153617],{"class":73},[49,161245,3646],{"class":77},[49,161247,153622],{"class":59},[49,161249,4436],{"class":73},[49,161251,161252,161254,161256,161259],{"class":51,"line":2311},[49,161253,32982],{"class":159},[49,161255,841],{"class":73},[49,161257,161258],{"class":59},"\"余额为1000元\"",[49,161260,847],{"class":73},[49,161262,161263,161265,161267,161269,161271],{"class":51,"line":2316},[49,161264,39824],{"class":77},[49,161266,153617],{"class":73},[49,161268,3646],{"class":77},[49,161270,153641],{"class":59},[49,161272,4436],{"class":73},[49,161274,161275,161277,161279,161282],{"class":51,"line":2322},[49,161276,32982],{"class":159},[49,161278,841],{"class":73},[49,161280,161281],{"class":59},"\"存款功能\"",[49,161283,847],{"class":73},[49,161285,161286,161288,161290,161292,161294],{"class":51,"line":2327},[49,161287,39824],{"class":77},[49,161289,153617],{"class":73},[49,161291,3646],{"class":77},[49,161293,153659],{"class":59},[49,161295,4436],{"class":73},[49,161297,161298,161300,161302,161305],{"class":51,"line":2341},[49,161299,32982],{"class":159},[49,161301,841],{"class":73},[49,161303,161304],{"class":59},"\"取款功能\"",[49,161306,847],{"class":73},[49,161308,161309,161311,161313,161315,161317],{"class":51,"line":2346},[49,161310,39824],{"class":77},[49,161312,153617],{"class":73},[49,161314,3646],{"class":77},[49,161316,153713],{"class":59},[49,161318,4436],{"class":73},[49,161320,161321,161323,161325,161327],{"class":51,"line":2352},[49,161322,32982],{"class":159},[49,161324,841],{"class":73},[49,161326,153724],{"class":59},[49,161328,847],{"class":73},[49,161330,161331],{"class":51,"line":2373},[49,161332,32158],{"class":77},[49,161334,161335,161337],{"class":51,"line":2378},[49,161336,158553],{"class":77},[49,161338,4436],{"class":73},[49,161340,161341,161343,161345,161347],{"class":51,"line":2392},[49,161342,32982],{"class":159},[49,161344,841],{"class":73},[49,161346,153745],{"class":59},[49,161348,847],{"class":73},[14,161350,161351,161352,161354,161355,28916],{},"菜单类程序通常使用 ",[46,161353,160053],{},"，用户选择退出时 ",[46,161356,2751],{},[782,161358,161360],{"id":161359},"_414-易错点","4.14 易错点",[30,161362,161363,161368,161374,161382,161388],{},[33,161364,161365,161367],{},[46,161366,109194],{}," 循环必须更新控制变量。",[33,161369,161370,161373],{},[46,161371,161372],{},"range(1, 10)"," 不包含 10。",[33,161375,161376,161378,161379,161381],{},[46,161377,2751],{}," 结束整个循环，",[46,161380,155203],{}," 只跳过本轮。",[33,161383,161384,161385,161387],{},"嵌套循环中，",[46,161386,2751],{}," 只跳出当前所在的一层循环。",[33,161389,161390],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[782,161392,161394],{"id":161393},"_415-本章练习","4.15 本章练习",[30,161396,161397,161400,161403,161406,161409],{},[33,161398,161399],{},"输出 1 到 100。",[33,161401,161402],{},"计算 1 到 100 的偶数和。",[33,161404,161405],{},"输出 100 以内能被 3 和 5 同时整除的数。",[33,161407,161408],{},"编写猜数字游戏，限制最多猜 7 次。",[33,161410,161411],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[757,161413,161414],{},"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":27,"searchDepth":63,"depth":63,"links":161416},[161417,161418,161419,161420,161421,161425,161426,161427,161428,161429,161430,161431,161432,161433,161434],{"id":159673,"depth":63,"text":159674},{"id":159703,"depth":63,"text":159704},{"id":159792,"depth":63,"text":159793},{"id":159886,"depth":63,"text":159887},{"id":160060,"depth":63,"text":160061,"children":161422},[161423,161424],{"id":160064,"depth":70,"text":160065},{"id":160128,"depth":70,"text":160129},{"id":160192,"depth":63,"text":160193},{"id":160287,"depth":63,"text":160288},{"id":160396,"depth":63,"text":160397},{"id":160592,"depth":63,"text":160593},{"id":160677,"depth":63,"text":160678},{"id":160816,"depth":63,"text":160817},{"id":160996,"depth":63,"text":160997},{"id":161145,"depth":63,"text":161146},{"id":161359,"depth":63,"text":161360},{"id":161393,"depth":63,"text":161394},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159665,"description":24072},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161441,"title":161442,"body":161443,"description":24072,"extension":766,"meta":163448,"navigation":398,"path":163449,"seo":163450,"stem":163451,"__hash__":163452},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161444,"toc":163428},[161445,161448,161452,161455,161458,161472,161475,161489,161493,161495,161514,161516,161563,161565,161579,161583,161657,161660,161664,161667,161726,161734,161737,161790,161793,161797,161802,161857,161865,161915,161919,161924,161932,162031,162037,162041,162046,162049,162060,162101,162114,162118,162121,162157,162160,162173,162176,162236,162240,162244,162247,162298,162302,162305,162352,162358,162424,162427,162431,162434,162550,162553,162557,162560,162666,162670,162673,162711,162714,162756,162759,162819,162822,162826,163290,163293,163297,163324,163330,163391,163395,163425],[10,161446,161442],{"id":161447},"_5-函数基础",[782,161449,161451],{"id":161450},"_51-为什么需要函数","5.1 为什么需要函数",[14,161453,161454],{},"函数用于封装一段可以重复使用的代码。",[14,161456,161457],{},"不使用函数的问题：",[30,161459,161460,161463,161466,161469],{},[33,161461,161462],{},"重复代码多。",[33,161464,161465],{},"修改逻辑时容易漏改。",[33,161467,161468],{},"主流程不清晰。",[33,161470,161471],{},"程序越写越长，难以维护。",[14,161473,161474],{},"使用函数后的好处：",[30,161476,161477,161480,161483,161486],{},[33,161478,161479],{},"提高复用性。",[33,161481,161482],{},"提高可读性。",[33,161484,161485],{},"便于调试。",[33,161487,161488],{},"便于分工。",[782,161490,161492],{"id":161491},"_52-函数定义","5.2 函数定义",[14,161494,5878],{},[40,161496,161498],{"className":30909,"code":161497,"language":30911,"meta":27,"style":27},"def 函数名():\n    函数体\n",[46,161499,161500,161509],{"__ignoreMap":27},[49,161501,161502,161504,161507],{"class":51,"line":52},[49,161503,32478],{"class":77},[49,161505,161506],{"class":55}," 函数名",[49,161508,32484],{"class":73},[49,161510,161511],{"class":51,"line":63},[49,161512,161513],{"class":73},"    函数体\n",[14,161515,15832],{},[40,161517,161519],{"className":30909,"code":161518,"language":30911,"meta":27,"style":27},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[46,161520,161521,161530,161540,161550,161554,161558],{"__ignoreMap":27},[49,161522,161523,161525,161528],{"class":51,"line":52},[49,161524,32478],{"class":77},[49,161526,161527],{"class":55}," say_hello",[49,161529,32484],{"class":73},[49,161531,161532,161534,161536,161538],{"class":51,"line":63},[49,161533,31830],{"class":159},[49,161535,841],{"class":73},[49,161537,6541],{"class":59},[49,161539,847],{"class":73},[49,161541,161542,161544,161546,161548],{"class":51,"line":70},[49,161543,31830],{"class":159},[49,161545,841],{"class":73},[49,161547,147170],{"class":59},[49,161549,847],{"class":73},[49,161551,161552],{"class":51,"line":219},[49,161553,399],{"emptyLinePlaceholder":398},[49,161555,161556],{"class":51,"line":233},[49,161557,399],{"emptyLinePlaceholder":398},[49,161559,161560],{"class":51,"line":241},[49,161561,161562],{"class":73},"say_hello()\n",[14,161564,9722],{},[30,161566,161567,161570,161573,161576],{},[33,161568,161569],{},"函数必须先定义，再调用。",[33,161571,161572],{},"函数名遵循变量命名规则。",[33,161574,161575],{},"函数体需要缩进。",[33,161577,161578],{},"函数不调用就不会执行。",[782,161580,161582],{"id":161581},"_53-函数调用","5.3 函数调用",[40,161584,161586],{"className":30909,"code":161585,"language":30911,"meta":27,"style":27},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[46,161587,161588,161597,161608,161619,161630,161640,161644,161648,161653],{"__ignoreMap":27},[49,161589,161590,161592,161595],{"class":51,"line":52},[49,161591,32478],{"class":77},[49,161593,161594],{"class":55}," print_menu",[49,161596,32484],{"class":73},[49,161598,161599,161601,161603,161606],{"class":51,"line":63},[49,161600,31830],{"class":159},[49,161602,841],{"class":73},[49,161604,161605],{"class":59},"\"1. 查询\"",[49,161607,847],{"class":73},[49,161609,161610,161612,161614,161617],{"class":51,"line":70},[49,161611,31830],{"class":159},[49,161613,841],{"class":73},[49,161615,161616],{"class":59},"\"2. 添加\"",[49,161618,847],{"class":73},[49,161620,161621,161623,161625,161628],{"class":51,"line":219},[49,161622,31830],{"class":159},[49,161624,841],{"class":73},[49,161626,161627],{"class":59},"\"3. 删除\"",[49,161629,847],{"class":73},[49,161631,161632,161634,161636,161638],{"class":51,"line":233},[49,161633,31830],{"class":159},[49,161635,841],{"class":73},[49,161637,161212],{"class":59},[49,161639,847],{"class":73},[49,161641,161642],{"class":51,"line":241},[49,161643,399],{"emptyLinePlaceholder":398},[49,161645,161646],{"class":51,"line":1920},[49,161647,399],{"emptyLinePlaceholder":398},[49,161649,161650],{"class":51,"line":2011},[49,161651,161652],{"class":73},"print_menu()\n",[49,161654,161655],{"class":51,"line":2017},[49,161656,161652],{"class":73},[14,161658,161659],{},"函数可以多次调用，每次调用都会执行函数体。",[782,161661,161663],{"id":161662},"_54-参数","5.4 参数",[14,161665,161666],{},"参数用于向函数传递数据。",[40,161668,161670],{"className":30909,"code":161669,"language":30911,"meta":27,"style":27},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[46,161671,161672,161681,161701,161705,161709,161718],{"__ignoreMap":27},[49,161673,161674,161676,161678],{"class":51,"line":52},[49,161675,32478],{"class":77},[49,161677,161527],{"class":55},[49,161679,161680],{"class":73},"(name):\n",[49,161682,161683,161685,161687,161689,161691,161693,161695,161697,161699],{"class":51,"line":63},[49,161684,31830],{"class":159},[49,161686,841],{"class":73},[49,161688,891],{"class":77},[49,161690,157585],{"class":59},[49,161692,1725],{"class":159},[49,161694,80341],{"class":73},[49,161696,1775],{"class":159},[49,161698,1080],{"class":59},[49,161700,847],{"class":73},[49,161702,161703],{"class":51,"line":70},[49,161704,399],{"emptyLinePlaceholder":398},[49,161706,161707],{"class":51,"line":219},[49,161708,399],{"emptyLinePlaceholder":398},[49,161710,161711,161714,161716],{"class":51,"line":233},[49,161712,161713],{"class":73},"say_hello(",[49,161715,150419],{"class":59},[49,161717,847],{"class":73},[49,161719,161720,161722,161724],{"class":51,"line":241},[49,161721,161713],{"class":73},[49,161723,151467],{"class":59},[49,161725,847],{"class":73},[14,161727,161728,161730,161731,161733],{},[46,161729,80341],{}," 是形参，",[46,161732,150419],{}," 是实参。",[14,161735,161736],{},"多个参数：",[40,161738,161740],{"className":30909,"code":161739,"language":30911,"meta":27,"style":27},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[46,161741,161742,161750,161763,161769,161773,161777],{"__ignoreMap":27},[49,161743,161744,161746,161748],{"class":51,"line":52},[49,161745,32478],{"class":77},[49,161747,5906],{"class":55},[49,161749,151624],{"class":73},[49,161751,161752,161755,161757,161759,161761],{"class":51,"line":63},[49,161753,161754],{"class":73},"    result ",[49,161756,78],{"class":77},[49,161758,11566],{"class":73},[49,161760,1310],{"class":77},[49,161762,151635],{"class":73},[49,161764,161765,161767],{"class":51,"line":70},[49,161766,31830],{"class":159},[49,161768,77116],{"class":73},[49,161770,161771],{"class":51,"line":219},[49,161772,399],{"emptyLinePlaceholder":398},[49,161774,161775],{"class":51,"line":233},[49,161776,399],{"emptyLinePlaceholder":398},[49,161778,161779,161782,161784,161786,161788],{"class":51,"line":241},[49,161780,161781],{"class":73},"add(",[49,161783,1275],{"class":159},[49,161785,13132],{"class":73},[49,161787,1529],{"class":159},[49,161789,847],{"class":73},[14,161791,161792],{},"调用时参数数量必须匹配。",[782,161794,161796],{"id":161795},"_55-返回值","5.5 返回值",[14,161798,161799,161801],{},[46,161800,17743],{}," 用于把函数内部的结果返回给调用者。",[40,161803,161805],{"className":30909,"code":161804,"language":30911,"meta":27,"style":27},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[46,161806,161807,161815,161825,161829,161833,161851],{"__ignoreMap":27},[49,161808,161809,161811,161813],{"class":51,"line":52},[49,161810,32478],{"class":77},[49,161812,5906],{"class":55},[49,161814,151624],{"class":73},[49,161816,161817,161819,161821,161823],{"class":51,"line":63},[49,161818,4787],{"class":77},[49,161820,11566],{"class":73},[49,161822,1310],{"class":77},[49,161824,151635],{"class":73},[49,161826,161827],{"class":51,"line":70},[49,161828,399],{"emptyLinePlaceholder":398},[49,161830,161831],{"class":51,"line":219},[49,161832,399],{"emptyLinePlaceholder":398},[49,161834,161835,161838,161840,161843,161845,161847,161849],{"class":51,"line":233},[49,161836,161837],{"class":73},"result ",[49,161839,78],{"class":77},[49,161841,161842],{"class":73}," add(",[49,161844,1275],{"class":159},[49,161846,13132],{"class":73},[49,161848,1529],{"class":159},[49,161850,847],{"class":73},[49,161852,161853,161855],{"class":51,"line":241},[49,161854,30946],{"class":159},[49,161856,77116],{"class":73},[14,161858,161859,161860,161862,161863,28916],{},"如果函数没有写 ",[46,161861,17743],{},"，默认返回 ",[46,161864,96217],{},[40,161866,161868],{"className":30909,"code":161867,"language":30911,"meta":27,"style":27},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[46,161869,161870,161878,161888,161892,161896,161905],{"__ignoreMap":27},[49,161871,161872,161874,161876],{"class":51,"line":52},[49,161873,32478],{"class":77},[49,161875,161527],{"class":55},[49,161877,32484],{"class":73},[49,161879,161880,161882,161884,161886],{"class":51,"line":63},[49,161881,31830],{"class":159},[49,161883,841],{"class":73},[49,161885,6541],{"class":59},[49,161887,847],{"class":73},[49,161889,161890],{"class":51,"line":70},[49,161891,399],{"emptyLinePlaceholder":398},[49,161893,161894],{"class":51,"line":219},[49,161895,399],{"emptyLinePlaceholder":398},[49,161897,161898,161900,161902],{"class":51,"line":233},[49,161899,161837],{"class":73},[49,161901,78],{"class":77},[49,161903,161904],{"class":73}," say_hello()\n",[49,161906,161907,161909,161912],{"class":51,"line":241},[49,161908,30946],{"class":159},[49,161910,161911],{"class":73},"(result)  ",[49,161913,161914],{"class":66},"# None\n",[782,161916,161918],{"id":161917},"_56-return的作用","5.6 return的作用",[14,161920,161921,161923],{},[46,161922,17743],{}," 有两个作用：",[30,161925,161926,161929],{},[33,161927,161928],{},"返回结果。",[33,161930,161931],{},"结束函数。",[40,161933,161935],{"className":30909,"code":161934,"language":30911,"meta":27,"style":27},"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",[46,161936,161937,161947,161959,161966,161970,161982,161989,161993,162000,162004,162008,162019],{"__ignoreMap":27},[49,161938,161939,161941,161944],{"class":51,"line":52},[49,161940,32478],{"class":77},[49,161942,161943],{"class":55}," check_age",[49,161945,161946],{"class":73},"(age):\n",[49,161948,161949,161951,161953,161955,161957],{"class":51,"line":63},[49,161950,3798],{"class":77},[49,161952,16404],{"class":73},[49,161954,1739],{"class":77},[49,161956,4790],{"class":159},[49,161958,4436],{"class":73},[49,161960,161961,161963],{"class":51,"line":70},[49,161962,15449],{"class":77},[49,161964,161965],{"class":59}," \"年龄不合法\"\n",[49,161967,161968],{"class":51,"line":219},[49,161969,399],{"emptyLinePlaceholder":398},[49,161971,161972,161974,161976,161978,161980],{"class":51,"line":233},[49,161973,3798],{"class":77},[49,161975,16404],{"class":73},[49,161977,2409],{"class":77},[49,161979,156816],{"class":159},[49,161981,4436],{"class":73},[49,161983,161984,161986],{"class":51,"line":241},[49,161985,15449],{"class":77},[49,161987,161988],{"class":59}," \"成年人\"\n",[49,161990,161991],{"class":51,"line":1920},[49,161992,399],{"emptyLinePlaceholder":398},[49,161994,161995,161997],{"class":51,"line":2011},[49,161996,4787],{"class":77},[49,161998,161999],{"class":59}," \"未成年人\"\n",[49,162001,162002],{"class":51,"line":2017},[49,162003,399],{"emptyLinePlaceholder":398},[49,162005,162006],{"class":51,"line":2029},[49,162007,399],{"emptyLinePlaceholder":398},[49,162009,162010,162012,162015,162017],{"class":51,"line":2311},[49,162011,30946],{"class":159},[49,162013,162014],{"class":73},"(check_age(",[49,162016,1529],{"class":159},[49,162018,31028],{"class":73},[49,162020,162021,162023,162025,162027,162029],{"class":51,"line":2316},[49,162022,30946],{"class":159},[49,162024,162014],{"class":73},[49,162026,1361],{"class":77},[49,162028,1047],{"class":159},[49,162030,31028],{"class":73},[14,162032,162033,162034,162036],{},"函数执行到 ",[46,162035,17743],{}," 后，后面的代码不会继续执行。",[782,162038,162040],{"id":162039},"_57-none","5.7 None",[14,162042,162043,162045],{},[46,162044,96217],{}," 表示空值或没有结果。",[14,162047,162048],{},"常见使用场景：",[30,162050,162051,162054,162057],{},[33,162052,162053],{},"函数没有返回值。",[33,162055,162056],{},"变量暂时没有具体值。",[33,162058,162059],{},"表示查询不到结果。",[40,162061,162063],{"className":30909,"code":162062,"language":30911,"meta":27,"style":27},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[46,162064,162065,162073,162077,162090],{"__ignoreMap":27},[49,162066,162067,162069,162071],{"class":51,"line":52},[49,162068,161837],{"class":73},[49,162070,78],{"class":77},[49,162072,152703],{"class":159},[49,162074,162075],{"class":51,"line":63},[49,162076,399],{"emptyLinePlaceholder":398},[49,162078,162079,162081,162084,162086,162088],{"class":51,"line":70},[49,162080,2230],{"class":77},[49,162082,162083],{"class":73}," result ",[49,162085,39458],{"class":77},[49,162087,39464],{"class":159},[49,162089,4436],{"class":73},[49,162091,162092,162094,162096,162099],{"class":51,"line":219},[49,162093,31830],{"class":159},[49,162095,841],{"class":73},[49,162097,162098],{"class":59},"\"没有数据\"",[49,162100,847],{"class":73},[14,162102,162103,162104,162106,162107,162110,162111,28916],{},"判断 ",[46,162105,96217],{}," 推荐使用 ",[46,162108,162109],{},"is None","，不要写成 ",[46,162112,162113],{},"== None",[782,162115,162117],{"id":162116},"_58-函数文档字符串","5.8 函数文档字符串",[14,162119,162120],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[40,162122,162124],{"className":30909,"code":162123,"language":30911,"meta":27,"style":27},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[46,162125,162126,162136,162141],{"__ignoreMap":27},[49,162127,162128,162130,162133],{"class":51,"line":52},[49,162129,32478],{"class":77},[49,162131,162132],{"class":55}," calculate_bmi",[49,162134,162135],{"class":73},"(weight, height):\n",[49,162137,162138],{"class":51,"line":63},[49,162139,162140],{"class":59},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[49,162142,162143,162145,162148,162150,162153,162155],{"class":51,"line":70},[49,162144,4787],{"class":77},[49,162146,162147],{"class":73}," weight ",[49,162149,1413],{"class":77},[49,162151,162152],{"class":73}," height ",[49,162154,11358],{"class":77},[49,162156,48254],{"class":159},[14,162158,162159],{},"查看说明：",[40,162161,162163],{"className":30909,"code":162162,"language":30911,"meta":27,"style":27},"help(calculate_bmi)\n",[46,162164,162165],{"__ignoreMap":27},[49,162166,162167,162170],{"class":51,"line":52},[49,162168,162169],{"class":159},"help",[49,162171,162172],{"class":73},"(calculate_bmi)\n",[14,162174,162175],{},"较完整的写法：",[40,162177,162179],{"className":30909,"code":162178,"language":30911,"meta":27,"style":27},"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",[46,162180,162181,162189,162194,162199,162203,162208,162213,162218,162222],{"__ignoreMap":27},[49,162182,162183,162185,162187],{"class":51,"line":52},[49,162184,32478],{"class":77},[49,162186,162132],{"class":55},[49,162188,162135],{"class":73},[49,162190,162191],{"class":51,"line":63},[49,162192,162193],{"class":59},"    \"\"\"\n",[49,162195,162196],{"class":51,"line":70},[49,162197,162198],{"class":59},"    计算BMI。\n",[49,162200,162201],{"class":51,"line":219},[49,162202,399],{"emptyLinePlaceholder":398},[49,162204,162205],{"class":51,"line":233},[49,162206,162207],{"class":59},"    :param weight: 体重，单位kg\n",[49,162209,162210],{"class":51,"line":241},[49,162211,162212],{"class":59},"    :param height: 身高，单位m\n",[49,162214,162215],{"class":51,"line":1920},[49,162216,162217],{"class":59},"    :return: BMI数值\n",[49,162219,162220],{"class":51,"line":2011},[49,162221,162193],{"class":59},[49,162223,162224,162226,162228,162230,162232,162234],{"class":51,"line":2017},[49,162225,4787],{"class":77},[49,162227,162147],{"class":73},[49,162229,1413],{"class":77},[49,162231,162152],{"class":73},[49,162233,11358],{"class":77},[49,162235,48254],{"class":159},[782,162237,162239],{"id":162238},"_59-变量作用域","5.9 变量作用域",[18,162241,162243],{"id":162242},"_591-局部变量","5.9.1 局部变量",[14,162245,162246],{},"在函数内部定义的变量，只能在函数内部使用。",[40,162248,162250],{"className":30909,"code":162249,"language":30911,"meta":27,"style":27},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[46,162251,162252,162261,162269,162275,162279,162283,162288],{"__ignoreMap":27},[49,162253,162254,162256,162259],{"class":51,"line":52},[49,162255,32478],{"class":77},[49,162257,162258],{"class":55}," test",[49,162260,32484],{"class":73},[49,162262,162263,162265,162267],{"class":51,"line":63},[49,162264,46124],{"class":73},[49,162266,78],{"class":77},[49,162268,58959],{"class":159},[49,162270,162271,162273],{"class":51,"line":70},[49,162272,31830],{"class":159},[49,162274,854],{"class":73},[49,162276,162277],{"class":51,"line":219},[49,162278,399],{"emptyLinePlaceholder":398},[49,162280,162281],{"class":51,"line":233},[49,162282,399],{"emptyLinePlaceholder":398},[49,162284,162285],{"class":51,"line":241},[49,162286,162287],{"class":73},"test()\n",[49,162289,162290,162292,162295],{"class":51,"line":1920},[49,162291,30946],{"class":159},[49,162293,162294],{"class":73},"(num)  ",[49,162296,162297],{"class":66},"# 报错\n",[18,162299,162301],{"id":162300},"_592-全局变量","5.9.2 全局变量",[14,162303,162304],{},"在函数外部定义的变量，可以在函数内部读取。",[40,162306,162308],{"className":30909,"code":162307,"language":30911,"meta":27,"style":27},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[46,162309,162310,162318,162322,162326,162334,162340,162344,162348],{"__ignoreMap":27},[49,162311,162312,162314,162316],{"class":51,"line":52},[49,162313,147067],{"class":73},[49,162315,78],{"class":77},[49,162317,149884],{"class":59},[49,162319,162320],{"class":51,"line":63},[49,162321,399],{"emptyLinePlaceholder":398},[49,162323,162324],{"class":51,"line":70},[49,162325,399],{"emptyLinePlaceholder":398},[49,162327,162328,162330,162332],{"class":51,"line":219},[49,162329,32478],{"class":77},[49,162331,161527],{"class":55},[49,162333,32484],{"class":73},[49,162335,162336,162338],{"class":51,"line":233},[49,162337,31830],{"class":159},[49,162339,151191],{"class":73},[49,162341,162342],{"class":51,"line":241},[49,162343,399],{"emptyLinePlaceholder":398},[49,162345,162346],{"class":51,"line":1920},[49,162347,399],{"emptyLinePlaceholder":398},[49,162349,162350],{"class":51,"line":2011},[49,162351,161562],{"class":73},[14,162353,162354,162355,28916],{},"如果要在函数内部修改全局变量，需要 ",[46,162356,162357],{},"global",[40,162359,162361],{"className":30909,"code":162360,"language":30911,"meta":27,"style":27},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[46,162362,162363,162371,162375,162379,162388,162396,162404,162408,162412,162417],{"__ignoreMap":27},[49,162364,162365,162367,162369],{"class":51,"line":52},[49,162366,147222],{"class":73},[49,162368,78],{"class":77},[49,162370,47864],{"class":159},[49,162372,162373],{"class":51,"line":63},[49,162374,399],{"emptyLinePlaceholder":398},[49,162376,162377],{"class":51,"line":70},[49,162378,399],{"emptyLinePlaceholder":398},[49,162380,162381,162383,162386],{"class":51,"line":219},[49,162382,32478],{"class":77},[49,162384,162385],{"class":55}," add_count",[49,162387,32484],{"class":73},[49,162389,162390,162393],{"class":51,"line":233},[49,162391,162392],{"class":77},"    global",[49,162394,162395],{"class":73}," count\n",[49,162397,162398,162400,162402],{"class":51,"line":241},[49,162399,159964],{"class":73},[49,162401,10174],{"class":77},[49,162403,56230],{"class":159},[49,162405,162406],{"class":51,"line":1920},[49,162407,399],{"emptyLinePlaceholder":398},[49,162409,162410],{"class":51,"line":2011},[49,162411,399],{"emptyLinePlaceholder":398},[49,162413,162414],{"class":51,"line":2017},[49,162415,162416],{"class":73},"add_count()\n",[49,162418,162419,162421],{"class":51,"line":2029},[49,162420,30946],{"class":159},[49,162422,162423],{"class":73},"(count)\n",[14,162425,162426],{},"不建议大量使用全局变量，项目变大后很难维护。",[782,162428,162430],{"id":162429},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,162432,162433],{},"一个函数中可以调用另一个函数。",[40,162435,162437],{"className":30909,"code":162436,"language":30911,"meta":27,"style":27},"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",[46,162438,162439,162448,162462,162466,162470,162479,162484,162504,162525,162529,162533,162537],{"__ignoreMap":27},[49,162440,162441,162443,162446],{"class":51,"line":52},[49,162442,32478],{"class":77},[49,162444,162445],{"class":55}," print_line",[49,162447,32484],{"class":73},[49,162449,162450,162452,162454,162456,162458,162460],{"class":51,"line":63},[49,162451,31830],{"class":159},[49,162453,841],{"class":73},[49,162455,33014],{"class":59},[49,162457,7215],{"class":77},[49,162459,79196],{"class":159},[49,162461,847],{"class":73},[49,162463,162464],{"class":51,"line":70},[49,162465,399],{"emptyLinePlaceholder":398},[49,162467,162468],{"class":51,"line":219},[49,162469,399],{"emptyLinePlaceholder":398},[49,162471,162472,162474,162477],{"class":51,"line":233},[49,162473,32478],{"class":77},[49,162475,162476],{"class":55}," print_info",[49,162478,149906],{"class":73},[49,162480,162481],{"class":51,"line":241},[49,162482,162483],{"class":73},"    print_line()\n",[49,162485,162486,162488,162490,162492,162494,162496,162498,162500,162502],{"class":51,"line":1920},[49,162487,31830],{"class":159},[49,162489,841],{"class":73},[49,162491,891],{"class":77},[49,162493,157213],{"class":59},[49,162495,1725],{"class":159},[49,162497,80341],{"class":73},[49,162499,1775],{"class":159},[49,162501,1080],{"class":59},[49,162503,847],{"class":73},[49,162505,162506,162508,162510,162512,162515,162517,162519,162521,162523],{"class":51,"line":2011},[49,162507,31830],{"class":159},[49,162509,841],{"class":73},[49,162511,891],{"class":77},[49,162513,162514],{"class":59},"\"年龄:",[49,162516,1725],{"class":159},[49,162518,70752],{"class":73},[49,162520,1775],{"class":159},[49,162522,1080],{"class":59},[49,162524,847],{"class":73},[49,162526,162527],{"class":51,"line":2017},[49,162528,162483],{"class":73},[49,162530,162531],{"class":51,"line":2029},[49,162532,399],{"emptyLinePlaceholder":398},[49,162534,162535],{"class":51,"line":2311},[49,162536,399],{"emptyLinePlaceholder":398},[49,162538,162539,162542,162544,162546,162548],{"class":51,"line":2316},[49,162540,162541],{"class":73},"print_info(",[49,162543,150419],{"class":59},[49,162545,13132],{"class":73},[49,162547,1479],{"class":159},[49,162549,847],{"class":73},[14,162551,162552],{},"这种方式可以把小功能组合成大功能。",[782,162554,162556],{"id":162555},"_511-参数检查","5.11 参数检查",[14,162558,162559],{},"函数内部可以检查参数是否合法。",[40,162561,162563],{"className":30909,"code":162562,"language":30911,"meta":27,"style":27},"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",[46,162564,162565,162574,162586,162592,162602,162606,162610,162627,162631,162643,162654,162660],{"__ignoreMap":27},[49,162566,162567,162569,162572],{"class":51,"line":52},[49,162568,32478],{"class":77},[49,162570,162571],{"class":55}," divide",[49,162573,151624],{"class":73},[49,162575,162576,162578,162580,162582,162584],{"class":51,"line":63},[49,162577,3798],{"class":77},[49,162579,11579],{"class":73},[49,162581,3646],{"class":77},[49,162583,4790],{"class":159},[49,162585,4436],{"class":73},[49,162587,162588,162590],{"class":51,"line":70},[49,162589,15449],{"class":77},[49,162591,152703],{"class":159},[49,162593,162594,162596,162598,162600],{"class":51,"line":219},[49,162595,4787],{"class":77},[49,162597,11566],{"class":73},[49,162599,1413],{"class":77},[49,162601,151635],{"class":73},[49,162603,162604],{"class":51,"line":233},[49,162605,399],{"emptyLinePlaceholder":398},[49,162607,162608],{"class":51,"line":241},[49,162609,399],{"emptyLinePlaceholder":398},[49,162611,162612,162614,162616,162619,162621,162623,162625],{"class":51,"line":1920},[49,162613,161837],{"class":73},[49,162615,78],{"class":77},[49,162617,162618],{"class":73}," divide(",[49,162620,1275],{"class":159},[49,162622,13132],{"class":73},[49,162624,1021],{"class":159},[49,162626,847],{"class":73},[49,162628,162629],{"class":51,"line":2011},[49,162630,399],{"emptyLinePlaceholder":398},[49,162632,162633,162635,162637,162639,162641],{"class":51,"line":2017},[49,162634,2230],{"class":77},[49,162636,162083],{"class":73},[49,162638,39458],{"class":77},[49,162640,39464],{"class":159},[49,162642,4436],{"class":73},[49,162644,162645,162647,162649,162652],{"class":51,"line":2029},[49,162646,31830],{"class":159},[49,162648,841],{"class":73},[49,162650,162651],{"class":59},"\"除数不能为0\"",[49,162653,847],{"class":73},[49,162655,162656,162658],{"class":51,"line":2311},[49,162657,2400],{"class":77},[49,162659,4436],{"class":73},[49,162661,162662,162664],{"class":51,"line":2316},[49,162663,31830],{"class":159},[49,162665,77116],{"class":73},[782,162667,162669],{"id":162668},"_512-类型提示","5.12 类型提示",[14,162671,162672],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[40,162674,162676],{"className":30909,"code":162675,"language":30911,"meta":27,"style":27},"def add(a: int, b: int) -> int:\n    return a + b\n",[46,162677,162678,162701],{"__ignoreMap":27},[49,162679,162680,162682,162684,162687,162689,162692,162694,162697,162699],{"class":51,"line":52},[49,162681,32478],{"class":77},[49,162683,5906],{"class":55},[49,162685,162686],{"class":73},"(a: ",[49,162688,844],{"class":159},[49,162690,162691],{"class":73},", b: ",[49,162693,844],{"class":159},[49,162695,162696],{"class":73},") -> ",[49,162698,844],{"class":159},[49,162700,4436],{"class":73},[49,162702,162703,162705,162707,162709],{"class":51,"line":63},[49,162704,4787],{"class":77},[49,162706,11566],{"class":73},[49,162708,1310],{"class":77},[49,162710,151635],{"class":73},[14,162712,162713],{},"字符串参数：",[40,162715,162717],{"className":30909,"code":162716,"language":30911,"meta":27,"style":27},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[46,162718,162719,162736],{"__ignoreMap":27},[49,162720,162721,162723,162725,162728,162730,162732,162734],{"class":51,"line":52},[49,162722,32478],{"class":77},[49,162724,161527],{"class":55},[49,162726,162727],{"class":73},"(name: ",[49,162729,1999],{"class":159},[49,162731,162696],{"class":73},[49,162733,96217],{"class":159},[49,162735,4436],{"class":73},[49,162737,162738,162740,162742,162744,162746,162748,162750,162752,162754],{"class":51,"line":63},[49,162739,31830],{"class":159},[49,162741,841],{"class":73},[49,162743,891],{"class":77},[49,162745,157585],{"class":59},[49,162747,1725],{"class":159},[49,162749,80341],{"class":73},[49,162751,1775],{"class":159},[49,162753,1080],{"class":59},[49,162755,847],{"class":73},[14,162757,162758],{},"列表参数：",[40,162760,162762],{"className":30909,"code":162761,"language":30911,"meta":27,"style":27},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[46,162763,162764,162783,162791,162803,162812],{"__ignoreMap":27},[49,162765,162766,162768,162771,162774,162776,162779,162781],{"class":51,"line":52},[49,162767,32478],{"class":77},[49,162769,162770],{"class":55}," get_total",[49,162772,162773],{"class":73},"(numbers: list[",[49,162775,844],{"class":159},[49,162777,162778],{"class":73},"]) -> ",[49,162780,844],{"class":159},[49,162782,4436],{"class":73},[49,162784,162785,162787,162789],{"class":51,"line":63},[49,162786,159838],{"class":73},[49,162788,78],{"class":77},[49,162790,47864],{"class":159},[49,162792,162793,162795,162798,162800],{"class":51,"line":70},[49,162794,3898],{"class":77},[49,162796,162797],{"class":73}," number ",[49,162799,26732],{"class":77},[49,162801,162802],{"class":73}," numbers:\n",[49,162804,162805,162807,162809],{"class":51,"line":219},[49,162806,160513],{"class":73},[49,162808,10174],{"class":77},[49,162810,162811],{"class":73}," number\n",[49,162813,162814,162816],{"class":51,"line":233},[49,162815,4787],{"class":77},[49,162817,162818],{"class":73}," total\n",[14,162820,162821],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[782,162823,162825],{"id":162824},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[40,162827,162829],{"className":30909,"code":162828,"language":30911,"meta":27,"style":27},"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",[46,162830,162831,162841,162845,162849,162857,162868,162878,162888,162898,162908,162912,162916,162925,162947,162951,162955,162964,162970,162990,163002,163013,163017,163026,163037,163042,163046,163050,163059,163065,163084,163096,163106,163110,163121,163131,163135,163143,163154,163158,163162,163166,163174,163179,163193,163197,163209,163214,163226,163231,163243,163248,163260,163270,163274,163280],{"__ignoreMap":27},[49,162832,162833,162836,162838],{"class":51,"line":52},[49,162834,162835],{"class":73},"balance ",[49,162837,78],{"class":77},[49,162839,162840],{"class":159}," 1000\n",[49,162842,162843],{"class":51,"line":63},[49,162844,399],{"emptyLinePlaceholder":398},[49,162846,162847],{"class":51,"line":70},[49,162848,399],{"emptyLinePlaceholder":398},[49,162850,162851,162853,162855],{"class":51,"line":219},[49,162852,32478],{"class":77},[49,162854,152564],{"class":55},[49,162856,32484],{"class":73},[49,162858,162859,162861,162863,162866],{"class":51,"line":233},[49,162860,31830],{"class":159},[49,162862,841],{"class":73},[49,162864,162865],{"class":59},"\"====== ATM ======\"",[49,162867,847],{"class":73},[49,162869,162870,162872,162874,162876],{"class":51,"line":241},[49,162871,31830],{"class":159},[49,162873,841],{"class":73},[49,162875,161179],{"class":59},[49,162877,847],{"class":73},[49,162879,162880,162882,162884,162886],{"class":51,"line":1920},[49,162881,31830],{"class":159},[49,162883,841],{"class":73},[49,162885,161190],{"class":59},[49,162887,847],{"class":73},[49,162889,162890,162892,162894,162896],{"class":51,"line":2011},[49,162891,31830],{"class":159},[49,162893,841],{"class":73},[49,162895,161201],{"class":59},[49,162897,847],{"class":73},[49,162899,162900,162902,162904,162906],{"class":51,"line":2017},[49,162901,31830],{"class":159},[49,162903,841],{"class":73},[49,162905,161212],{"class":59},[49,162907,847],{"class":73},[49,162909,162910],{"class":51,"line":2029},[49,162911,399],{"emptyLinePlaceholder":398},[49,162913,162914],{"class":51,"line":2311},[49,162915,399],{"emptyLinePlaceholder":398},[49,162917,162918,162920,162923],{"class":51,"line":2316},[49,162919,32478],{"class":77},[49,162921,162922],{"class":55}," show_balance",[49,162924,32484],{"class":73},[49,162926,162927,162929,162931,162933,162936,162938,162941,162943,162945],{"class":51,"line":2322},[49,162928,31830],{"class":159},[49,162930,841],{"class":73},[49,162932,891],{"class":77},[49,162934,162935],{"class":59},"\"当前余额:",[49,162937,1725],{"class":159},[49,162939,162940],{"class":73},"balance",[49,162942,1775],{"class":159},[49,162944,157543],{"class":59},[49,162946,847],{"class":73},[49,162948,162949],{"class":51,"line":2327},[49,162950,399],{"emptyLinePlaceholder":398},[49,162952,162953],{"class":51,"line":2341},[49,162954,399],{"emptyLinePlaceholder":398},[49,162956,162957,162959,162962],{"class":51,"line":2346},[49,162958,32478],{"class":77},[49,162960,162961],{"class":55}," save_money",[49,162963,32484],{"class":73},[49,162965,162966,162968],{"class":51,"line":2352},[49,162967,162392],{"class":77},[49,162969,150630],{"class":73},[49,162971,162972,162975,162977,162979,162981,162983,162985,162988],{"class":51,"line":2373},[49,162973,162974],{"class":73},"    money ",[49,162976,78],{"class":77},[49,162978,110328],{"class":159},[49,162980,841],{"class":73},[49,162982,54352],{"class":159},[49,162984,841],{"class":73},[49,162986,162987],{"class":59},"\"请输入存款金额:\"",[49,162989,31028],{"class":73},[49,162991,162992,162994,162996,162998,163000],{"class":51,"line":2378},[49,162993,3798],{"class":77},[49,162995,150673],{"class":73},[49,162997,2287],{"class":77},[49,162999,4790],{"class":159},[49,163001,4436],{"class":73},[49,163003,163004,163006,163008,163011],{"class":51,"line":2392},[49,163005,32982],{"class":159},[49,163007,841],{"class":73},[49,163009,163010],{"class":59},"\"金额必须大于0\"",[49,163012,847],{"class":73},[49,163014,163015],{"class":51,"line":2397},[49,163016,152892],{"class":77},[49,163018,163019,163022,163024],{"class":51,"line":2426},[49,163020,163021],{"class":73},"    balance ",[49,163023,10174],{"class":77},[49,163025,150706],{"class":73},[49,163027,163028,163030,163032,163035],{"class":51,"line":2431},[49,163029,31830],{"class":159},[49,163031,841],{"class":73},[49,163033,163034],{"class":59},"\"存款成功\"",[49,163036,847],{"class":73},[49,163038,163039],{"class":51,"line":2448},[49,163040,163041],{"class":73},"    show_balance()\n",[49,163043,163044],{"class":51,"line":2453},[49,163045,399],{"emptyLinePlaceholder":398},[49,163047,163048],{"class":51,"line":2458},[49,163049,399],{"emptyLinePlaceholder":398},[49,163051,163052,163054,163057],{"class":51,"line":2463},[49,163053,32478],{"class":77},[49,163055,163056],{"class":55}," withdraw_money",[49,163058,32484],{"class":73},[49,163060,163061,163063],{"class":51,"line":2477},[49,163062,162392],{"class":77},[49,163064,150630],{"class":73},[49,163066,163067,163069,163071,163073,163075,163077,163079,163082],{"class":51,"line":2482},[49,163068,162974],{"class":73},[49,163070,78],{"class":77},[49,163072,110328],{"class":159},[49,163074,841],{"class":73},[49,163076,54352],{"class":159},[49,163078,841],{"class":73},[49,163080,163081],{"class":59},"\"请输入取款金额:\"",[49,163083,31028],{"class":73},[49,163085,163086,163088,163090,163092,163094],{"class":51,"line":3274},[49,163087,3798],{"class":77},[49,163089,150673],{"class":73},[49,163091,2287],{"class":77},[49,163093,4790],{"class":159},[49,163095,4436],{"class":73},[49,163097,163098,163100,163102,163104],{"class":51,"line":3288},[49,163099,32982],{"class":159},[49,163101,841],{"class":73},[49,163103,163010],{"class":59},[49,163105,847],{"class":73},[49,163107,163108],{"class":51,"line":3296},[49,163109,152892],{"class":77},[49,163111,163112,163114,163116,163118],{"class":51,"line":3301},[49,163113,3798],{"class":77},[49,163115,150673],{"class":73},[49,163117,1789],{"class":77},[49,163119,163120],{"class":73}," balance:\n",[49,163122,163123,163125,163127,163129],{"class":51,"line":3307},[49,163124,32982],{"class":159},[49,163126,841],{"class":73},[49,163128,150768],{"class":59},[49,163130,847],{"class":73},[49,163132,163133],{"class":51,"line":3313},[49,163134,152892],{"class":77},[49,163136,163137,163139,163141],{"class":51,"line":3318},[49,163138,163021],{"class":73},[49,163140,150783],{"class":77},[49,163142,150706],{"class":73},[49,163144,163145,163147,163149,163152],{"class":51,"line":8645},[49,163146,31830],{"class":159},[49,163148,841],{"class":73},[49,163150,163151],{"class":59},"\"取款成功\"",[49,163153,847],{"class":73},[49,163155,163156],{"class":51,"line":8669},[49,163157,163041],{"class":73},[49,163159,163160],{"class":51,"line":8674},[49,163161,399],{"emptyLinePlaceholder":398},[49,163163,163164],{"class":51,"line":8680},[49,163165,399],{"emptyLinePlaceholder":398},[49,163167,163168,163170,163172],{"class":51,"line":8707},[49,163169,109194],{"class":77},[49,163171,95823],{"class":159},[49,163173,4436],{"class":73},[49,163175,163176],{"class":51,"line":8712},[49,163177,163178],{"class":73},"    show_menu()\n",[49,163180,163181,163183,163185,163187,163189,163191],{"class":51,"line":8718},[49,163182,161223],{"class":73},[49,163184,78],{"class":77},[49,163186,61136],{"class":159},[49,163188,841],{"class":73},[49,163190,153604],{"class":59},[49,163192,847],{"class":73},[49,163194,163195],{"class":51,"line":8730},[49,163196,399],{"emptyLinePlaceholder":398},[49,163198,163199,163201,163203,163205,163207],{"class":51,"line":8742},[49,163200,3798],{"class":77},[49,163202,153617],{"class":73},[49,163204,3646],{"class":77},[49,163206,153622],{"class":59},[49,163208,4436],{"class":73},[49,163210,163211],{"class":51,"line":8754},[49,163212,163213],{"class":73},"        show_balance()\n",[49,163215,163216,163218,163220,163222,163224],{"class":51,"line":10413},[49,163217,39824],{"class":77},[49,163219,153617],{"class":73},[49,163221,3646],{"class":77},[49,163223,153641],{"class":59},[49,163225,4436],{"class":73},[49,163227,163228],{"class":51,"line":10438},[49,163229,163230],{"class":73},"        save_money()\n",[49,163232,163233,163235,163237,163239,163241],{"class":51,"line":10461},[49,163234,39824],{"class":77},[49,163236,153617],{"class":73},[49,163238,3646],{"class":77},[49,163240,153659],{"class":59},[49,163242,4436],{"class":73},[49,163244,163245],{"class":51,"line":10485},[49,163246,163247],{"class":73},"        withdraw_money()\n",[49,163249,163250,163252,163254,163256,163258],{"class":51,"line":10490},[49,163251,39824],{"class":77},[49,163253,153617],{"class":73},[49,163255,3646],{"class":77},[49,163257,153713],{"class":59},[49,163259,4436],{"class":73},[49,163261,163262,163264,163266,163268],{"class":51,"line":10495},[49,163263,32982],{"class":159},[49,163265,841],{"class":73},[49,163267,153724],{"class":59},[49,163269,847],{"class":73},[49,163271,163272],{"class":51,"line":10500},[49,163273,32158],{"class":77},[49,163275,163276,163278],{"class":51,"line":10509},[49,163277,158553],{"class":77},[49,163279,4436],{"class":73},[49,163281,163282,163284,163286,163288],{"class":51,"line":10514},[49,163283,32982],{"class":159},[49,163285,841],{"class":73},[49,163287,153745],{"class":59},[49,163289,847],{"class":73},[14,163291,163292],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[782,163294,163296],{"id":163295},"_514-易错点","5.14 易错点",[30,163298,163299,163302,163305,163310,163315,163318],{},[33,163300,163301],{},"函数定义后必须调用才会执行。",[33,163303,163304],{},"函数名后面有括号才是调用。",[33,163306,163307,163309],{},[46,163308,17743],{}," 后面的代码不会执行。",[33,163311,163312,163313,28916],{},"没有返回值的函数默认返回 ",[46,163314,96217],{},[33,163316,163317],{},"局部变量不能在函数外部访问。",[33,163319,163320,163321,163323],{},"不要滥用 ",[46,163322,162357],{},"，更好的方式是让函数返回新值。",[14,163325,163326,163327,163329],{},"例如不用 ",[46,163328,162357],{}," 改写存款：",[40,163331,163333],{"className":30909,"code":163332,"language":30911,"meta":27,"style":27},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[46,163334,163335,163344,163355,163359,163363,163371,163384],{"__ignoreMap":27},[49,163336,163337,163339,163341],{"class":51,"line":52},[49,163338,32478],{"class":77},[49,163340,162961],{"class":55},[49,163342,163343],{"class":73},"(balance, money):\n",[49,163345,163346,163348,163351,163353],{"class":51,"line":63},[49,163347,4787],{"class":77},[49,163349,163350],{"class":73}," balance ",[49,163352,1310],{"class":77},[49,163354,150706],{"class":73},[49,163356,163357],{"class":51,"line":70},[49,163358,399],{"emptyLinePlaceholder":398},[49,163360,163361],{"class":51,"line":219},[49,163362,399],{"emptyLinePlaceholder":398},[49,163364,163365,163367,163369],{"class":51,"line":233},[49,163366,162835],{"class":73},[49,163368,78],{"class":77},[49,163370,162840],{"class":159},[49,163372,163373,163375,163377,163380,163382],{"class":51,"line":241},[49,163374,162835],{"class":73},[49,163376,78],{"class":77},[49,163378,163379],{"class":73}," save_money(balance, ",[49,163381,2421],{"class":159},[49,163383,847],{"class":73},[49,163385,163386,163388],{"class":51,"line":1920},[49,163387,30946],{"class":159},[49,163389,163390],{"class":73},"(balance)\n",[782,163392,163394],{"id":163393},"_515-本章练习","5.15 本章练习",[30,163396,163397,163404,163410,163416,163422],{},[33,163398,163399,163400,163403],{},"定义函数 ",[46,163401,163402],{},"print_student(name, age)","，输出学生信息。",[33,163405,163399,163406,163409],{},[46,163407,163408],{},"get_max(a, b, c)","，返回三个数中的最大值。",[33,163411,163399,163412,163415],{},[46,163413,163414],{},"is_even(num)","，判断一个数是否为偶数。",[33,163417,163399,163418,163421],{},[46,163419,163420],{},"calculate_bmi(weight, height)","，返回 BMI。",[33,163423,163424],{},"把第 4 章的菜单程序拆分成多个函数。",[757,163426,163427],{},"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":27,"searchDepth":63,"depth":63,"links":163429},[163430,163431,163432,163433,163434,163435,163436,163437,163438,163442,163443,163444,163445,163446,163447],{"id":161450,"depth":63,"text":161451},{"id":161491,"depth":63,"text":161492},{"id":161581,"depth":63,"text":161582},{"id":161662,"depth":63,"text":161663},{"id":161795,"depth":63,"text":161796},{"id":161917,"depth":63,"text":161918},{"id":162039,"depth":63,"text":162040},{"id":162116,"depth":63,"text":162117},{"id":162238,"depth":63,"text":162239,"children":163439},[163440,163441],{"id":162242,"depth":70,"text":162243},{"id":162300,"depth":70,"text":162301},{"id":162429,"depth":63,"text":162430},{"id":162555,"depth":63,"text":162556},{"id":162668,"depth":63,"text":162669},{"id":162824,"depth":63,"text":162825},{"id":163295,"depth":63,"text":163296},{"id":163393,"depth":63,"text":163394},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161442,"description":24072},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163454,"title":163455,"body":163456,"description":24072,"extension":766,"meta":166500,"navigation":398,"path":166501,"seo":166502,"stem":166503,"__hash__":166504},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163457,"toc":166481},[163458,163461,163465,163468,163471,163575,163578,163582,163585,163665,163668,163672,163675,163735,163738,163774,163777,163792,163796,163869,163872,163927,163930,164000,164003,164087,164097,164155,164159,164204,164207,164233,164236,164342,164346,164349,164391,164394,164458,164461,164465,164468,164529,164532,164562,164565,164603,164607,164610,164619,164622,164746,164749,164790,164794,164797,164808,164848,164851,164866,164871,164874,164941,164944,165034,165038,165041,165089,165092,165119,165121,165151,165154,165174,165177,165208,165211,165244,165248,165251,165275,165278,165302,165305,165329,165333,165336,165466,165469,165549,165552,165627,165631,165634,165684,165687,165729,165732,165756,165758,165782,165785,165840,165843,165909,165913,165916,165919,165957,165960,166013,166016,166062,166065,166098,166101,166105,166424,166428,166457,166461,166478],[10,163459,163455],{"id":163460},"_6-数据容器",[782,163462,163464],{"id":163463},"_61-什么是数据容器","6.1 什么是数据容器",[14,163466,163467],{},"数据容器用于一次保存多个数据。",[14,163469,163470],{},"常见容器：",[610,163472,163473,163490],{},[613,163474,163475],{},[616,163476,163477,163479,163482,163485,163488],{},[619,163478,26460],{},[619,163480,163481],{},"是否有序",[619,163483,163484],{},"是否可变",[619,163486,163487],{},"是否允许重复",[619,163489,28023],{},[633,163491,163492,163510,163526,163541,163558],{},[616,163493,163494,163497,163500,163503,163506],{},[638,163495,163496],{},"list列表",[638,163498,163499],{},"有序",[638,163501,163502],{},"可变",[638,163504,163505],{},"允许",[638,163507,163508],{},[46,163509,155788],{},[616,163511,163512,163515,163517,163520,163522],{},[638,163513,163514],{},"tuple元组",[638,163516,163499],{},[638,163518,163519],{},"不可变",[638,163521,163505],{},[638,163523,163524],{},[46,163525,155801],{},[616,163527,163528,163531,163533,163535,163537],{},[638,163529,163530],{},"str字符串",[638,163532,163499],{},[638,163534,163519],{},[638,163536,163505],{},[638,163538,163539],{},[46,163540,156411],{},[616,163542,163543,163546,163549,163551,163554],{},[638,163544,163545],{},"set集合",[638,163547,163548],{},"无序",[638,163550,163502],{},[638,163552,163553],{},"不允许",[638,163555,163556],{},[46,163557,155826],{},[616,163559,163560,163563,163565,163567,163570],{},[638,163561,163562],{},"dict字典",[638,163564,163499],{},[638,163566,163502],{},[638,163568,163569],{},"key不允许重复",[638,163571,163572],{},[46,163573,163574],{},"{\"name\": \"小明\"}",[14,163576,163577],{},"Python 3.7 之后，字典保持插入顺序。",[782,163579,163581],{"id":163580},"_62-列表list","6.2 列表list",[14,163583,163584],{},"列表用于保存一组有顺序的数据。",[40,163586,163588],{"className":30909,"code":163587,"language":30911,"meta":27,"style":27},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[46,163589,163590,163610,163635,163656],{"__ignoreMap":27},[49,163591,163592,163594,163596,163598,163600,163602,163604,163606,163608],{"class":51,"line":52},[49,163593,160911],{"class":73},[49,163595,78],{"class":77},[49,163597,52757],{"class":73},[49,163599,150419],{"class":59},[49,163601,13132],{"class":73},[49,163603,151467],{"class":59},[49,163605,13132],{"class":73},[49,163607,160262],{"class":59},[49,163609,33777],{"class":73},[49,163611,163612,163615,163617,163619,163621,163623,163625,163627,163629,163631,163633],{"class":51,"line":63},[49,163613,163614],{"class":73},"numbers ",[49,163616,78],{"class":77},[49,163618,52757],{"class":73},[49,163620,1047],{"class":159},[49,163622,13132],{"class":73},[49,163624,915],{"class":159},[49,163626,13132],{"class":73},[49,163628,909],{"class":159},[49,163630,13132],{"class":73},[49,163632,1122],{"class":159},[49,163634,33777],{"class":73},[49,163636,163637,163640,163642,163644,163646,163648,163650,163652,163654],{"class":51,"line":70},[49,163638,163639],{"class":73},"mixed ",[49,163641,78],{"class":77},[49,163643,52757],{"class":73},[49,163645,150419],{"class":59},[49,163647,13132],{"class":73},[49,163649,1479],{"class":159},[49,163651,13132],{"class":73},[49,163653,32007],{"class":159},[49,163655,33777],{"class":73},[49,163657,163658,163661,163663],{"class":51,"line":219},[49,163659,163660],{"class":73},"empty ",[49,163662,78],{"class":77},[49,163664,52369],{"class":73},[14,163666,163667],{},"推荐一个列表中保存同类数据，代码更清晰。",[782,163669,163671],{"id":163670},"_63-列表索引","6.3 列表索引",[14,163673,163674],{},"正向索引从 0 开始：",[40,163676,163678],{"className":30909,"code":163677,"language":30911,"meta":27,"style":27},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[46,163679,163680,163700,163704,163715,163725],{"__ignoreMap":27},[49,163681,163682,163684,163686,163688,163690,163692,163694,163696,163698],{"class":51,"line":52},[49,163683,160911],{"class":73},[49,163685,78],{"class":77},[49,163687,52757],{"class":73},[49,163689,150419],{"class":59},[49,163691,13132],{"class":73},[49,163693,151467],{"class":59},[49,163695,13132],{"class":73},[49,163697,160262],{"class":59},[49,163699,33777],{"class":73},[49,163701,163702],{"class":51,"line":63},[49,163703,399],{"emptyLinePlaceholder":398},[49,163705,163706,163708,163711,163713],{"class":51,"line":70},[49,163707,30946],{"class":159},[49,163709,163710],{"class":73},"(names[",[49,163712,1021],{"class":159},[49,163714,5354],{"class":73},[49,163716,163717,163719,163721,163723],{"class":51,"line":219},[49,163718,30946],{"class":159},[49,163720,163710],{"class":73},[49,163722,1047],{"class":159},[49,163724,5354],{"class":73},[49,163726,163727,163729,163731,163733],{"class":51,"line":233},[49,163728,30946],{"class":159},[49,163730,163710],{"class":73},[49,163732,915],{"class":159},[49,163734,5354],{"class":73},[14,163736,163737],{},"反向索引从 -1 开始：",[40,163739,163741],{"className":30909,"code":163740,"language":30911,"meta":27,"style":27},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[46,163742,163743,163759],{"__ignoreMap":27},[49,163744,163745,163747,163749,163751,163753,163756],{"class":51,"line":52},[49,163746,30946],{"class":159},[49,163748,163710],{"class":73},[49,163750,1361],{"class":77},[49,163752,1047],{"class":159},[49,163754,163755],{"class":73},"])  ",[49,163757,163758],{"class":66},"# 小刚\n",[49,163760,163761,163763,163765,163767,163769,163771],{"class":51,"line":63},[49,163762,30946],{"class":159},[49,163764,163710],{"class":73},[49,163766,1361],{"class":77},[49,163768,915],{"class":159},[49,163770,163755],{"class":73},[49,163772,163773],{"class":66},"# 小红\n",[14,163775,163776],{},"索引越界会报错：",[40,163778,163780],{"className":30909,"code":163779,"language":30911,"meta":27,"style":27},"print(names[3])\n",[46,163781,163782],{"__ignoreMap":27},[49,163783,163784,163786,163788,163790],{"class":51,"line":52},[49,163785,30946],{"class":159},[49,163787,163710],{"class":73},[49,163789,909],{"class":159},[49,163791,5354],{"class":73},[782,163793,163795],{"id":163794},"_64-列表常用方法","6.4 列表常用方法",[40,163797,163799],{"className":30909,"code":163798,"language":30911,"meta":27,"style":27},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[46,163800,163801,163817,163821,163830,163844,163858,163862],{"__ignoreMap":27},[49,163802,163803,163805,163807,163809,163811,163813,163815],{"class":51,"line":52},[49,163804,160911],{"class":73},[49,163806,78],{"class":77},[49,163808,52757],{"class":73},[49,163810,150419],{"class":59},[49,163812,13132],{"class":73},[49,163814,151467],{"class":59},[49,163816,33777],{"class":73},[49,163818,163819],{"class":51,"line":63},[49,163820,399],{"emptyLinePlaceholder":398},[49,163822,163823,163826,163828],{"class":51,"line":70},[49,163824,163825],{"class":73},"names.append(",[49,163827,160262],{"class":59},[49,163829,847],{"class":73},[49,163831,163832,163835,163837,163839,163842],{"class":51,"line":219},[49,163833,163834],{"class":73},"names.insert(",[49,163836,1047],{"class":159},[49,163838,13132],{"class":73},[49,163840,163841],{"class":59},"\"小李\"",[49,163843,847],{"class":73},[49,163845,163846,163849,163851,163853,163856],{"class":51,"line":233},[49,163847,163848],{"class":73},"names.extend([",[49,163850,9380],{"class":59},[49,163852,13132],{"class":73},[49,163854,163855],{"class":59},"\"小赵\"",[49,163857,5354],{"class":73},[49,163859,163860],{"class":51,"line":241},[49,163861,399],{"emptyLinePlaceholder":398},[49,163863,163864,163866],{"class":51,"line":1920},[49,163865,30946],{"class":159},[49,163867,163868],{"class":73},"(names)\n",[14,163870,163871],{},"删除元素：",[40,163873,163875],{"className":30909,"code":163874,"language":30911,"meta":27,"style":27},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[46,163876,163877,163886,163896,163910,163922],{"__ignoreMap":27},[49,163878,163879,163882,163884],{"class":51,"line":52},[49,163880,163881],{"class":73},"names.remove(",[49,163883,151467],{"class":59},[49,163885,847],{"class":73},[49,163887,163888,163891,163893],{"class":51,"line":63},[49,163889,163890],{"class":73},"last ",[49,163892,78],{"class":77},[49,163894,163895],{"class":73}," names.pop()\n",[49,163897,163898,163901,163903,163906,163908],{"class":51,"line":70},[49,163899,163900],{"class":73},"first ",[49,163902,78],{"class":77},[49,163904,163905],{"class":73}," names.pop(",[49,163907,1021],{"class":159},[49,163909,847],{"class":73},[49,163911,163912,163915,163918,163920],{"class":51,"line":219},[49,163913,163914],{"class":77},"del",[49,163916,163917],{"class":73}," names[",[49,163919,1021],{"class":159},[49,163921,33777],{"class":73},[49,163923,163924],{"class":51,"line":233},[49,163925,163926],{"class":73},"names.clear()\n",[14,163928,163929],{},"查询和统计：",[40,163931,163933],{"className":30909,"code":163932,"language":30911,"meta":27,"style":27},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[46,163934,163935,163963,163967,163978,163989],{"__ignoreMap":27},[49,163936,163937,163939,163941,163943,163945,163947,163949,163951,163953,163955,163957,163959,163961],{"class":51,"line":52},[49,163938,163614],{"class":73},[49,163940,78],{"class":77},[49,163942,52757],{"class":73},[49,163944,1047],{"class":159},[49,163946,13132],{"class":73},[49,163948,915],{"class":159},[49,163950,13132],{"class":73},[49,163952,909],{"class":159},[49,163954,13132],{"class":73},[49,163956,915],{"class":159},[49,163958,13132],{"class":73},[49,163960,1122],{"class":159},[49,163962,33777],{"class":73},[49,163964,163965],{"class":51,"line":63},[49,163966,399],{"emptyLinePlaceholder":398},[49,163968,163969,163971,163974,163976],{"class":51,"line":70},[49,163970,30946],{"class":159},[49,163972,163973],{"class":73},"(numbers.index(",[49,163975,909],{"class":159},[49,163977,31028],{"class":73},[49,163979,163980,163982,163985,163987],{"class":51,"line":219},[49,163981,30946],{"class":159},[49,163983,163984],{"class":73},"(numbers.count(",[49,163986,915],{"class":159},[49,163988,31028],{"class":73},[49,163990,163991,163993,163995,163997],{"class":51,"line":233},[49,163992,30946],{"class":159},[49,163994,841],{"class":73},[49,163996,8055],{"class":159},[49,163998,163999],{"class":73},"(numbers))\n",[14,164001,164002],{},"排序：",[40,164004,164006],{"className":30909,"code":164005,"language":30911,"meta":27,"style":27},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[46,164007,164008,164032,164036,164041,164048,164052,164066,164072,164076,164081],{"__ignoreMap":27},[49,164009,164010,164012,164014,164016,164018,164020,164022,164024,164026,164028,164030],{"class":51,"line":52},[49,164011,163614],{"class":73},[49,164013,78],{"class":77},[49,164015,52757],{"class":73},[49,164017,909],{"class":159},[49,164019,13132],{"class":73},[49,164021,1047],{"class":159},[49,164023,13132],{"class":73},[49,164025,1148],{"class":159},[49,164027,13132],{"class":73},[49,164029,915],{"class":159},[49,164031,33777],{"class":73},[49,164033,164034],{"class":51,"line":63},[49,164035,399],{"emptyLinePlaceholder":398},[49,164037,164038],{"class":51,"line":70},[49,164039,164040],{"class":73},"numbers.sort()\n",[49,164042,164043,164045],{"class":51,"line":219},[49,164044,30946],{"class":159},[49,164046,164047],{"class":73},"(numbers)\n",[49,164049,164050],{"class":51,"line":233},[49,164051,399],{"emptyLinePlaceholder":398},[49,164053,164054,164057,164060,164062,164064],{"class":51,"line":241},[49,164055,164056],{"class":73},"numbers.sort(",[49,164058,164059],{"class":5913},"reverse",[49,164061,78],{"class":77},[49,164063,32007],{"class":159},[49,164065,847],{"class":73},[49,164067,164068,164070],{"class":51,"line":1920},[49,164069,30946],{"class":159},[49,164071,164047],{"class":73},[49,164073,164074],{"class":51,"line":2011},[49,164075,399],{"emptyLinePlaceholder":398},[49,164077,164078],{"class":51,"line":2017},[49,164079,164080],{"class":73},"numbers.reverse()\n",[49,164082,164083,164085],{"class":51,"line":2029},[49,164084,30946],{"class":159},[49,164086,164047],{"class":73},[14,164088,164089,164092,164093,164096],{},[46,164090,164091],{},"sort()"," 会修改原列表，",[46,164094,164095],{},"sorted()"," 返回新列表。",[40,164098,164100],{"className":30909,"code":164099,"language":30911,"meta":27,"style":27},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[46,164101,164102,164126,164138,164142,164148],{"__ignoreMap":27},[49,164103,164104,164106,164108,164110,164112,164114,164116,164118,164120,164122,164124],{"class":51,"line":52},[49,164105,163614],{"class":73},[49,164107,78],{"class":77},[49,164109,52757],{"class":73},[49,164111,909],{"class":159},[49,164113,13132],{"class":73},[49,164115,1047],{"class":159},[49,164117,13132],{"class":73},[49,164119,1148],{"class":159},[49,164121,13132],{"class":73},[49,164123,915],{"class":159},[49,164125,33777],{"class":73},[49,164127,164128,164131,164133,164136],{"class":51,"line":63},[49,164129,164130],{"class":73},"new_numbers ",[49,164132,78],{"class":77},[49,164134,164135],{"class":159}," sorted",[49,164137,164047],{"class":73},[49,164139,164140],{"class":51,"line":70},[49,164141,399],{"emptyLinePlaceholder":398},[49,164143,164144,164146],{"class":51,"line":219},[49,164145,30946],{"class":159},[49,164147,164047],{"class":73},[49,164149,164150,164152],{"class":51,"line":233},[49,164151,30946],{"class":159},[49,164153,164154],{"class":73},"(new_numbers)\n",[782,164156,164158],{"id":164157},"_65-列表遍历","6.5 列表遍历",[40,164160,164162],{"className":30909,"code":164161,"language":30911,"meta":27,"style":27},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[46,164163,164164,164184,164188,164198],{"__ignoreMap":27},[49,164165,164166,164168,164170,164172,164174,164176,164178,164180,164182],{"class":51,"line":52},[49,164167,160911],{"class":73},[49,164169,78],{"class":77},[49,164171,52757],{"class":73},[49,164173,150419],{"class":59},[49,164175,13132],{"class":73},[49,164177,151467],{"class":59},[49,164179,13132],{"class":73},[49,164181,160262],{"class":59},[49,164183,33777],{"class":73},[49,164185,164186],{"class":51,"line":63},[49,164187,399],{"emptyLinePlaceholder":398},[49,164189,164190,164192,164194,164196],{"class":51,"line":70},[49,164191,3722],{"class":77},[49,164193,160947],{"class":73},[49,164195,26732],{"class":77},[49,164197,160952],{"class":73},[49,164199,164200,164202],{"class":51,"line":219},[49,164201,31830],{"class":159},[49,164203,151191],{"class":73},[14,164205,164206],{},"需要索引时：",[40,164208,164210],{"className":30909,"code":164209,"language":30911,"meta":27,"style":27},"for index, name in enumerate(names):\n    print(index, name)\n",[46,164211,164212,164226],{"__ignoreMap":27},[49,164213,164214,164216,164219,164221,164223],{"class":51,"line":52},[49,164215,3722],{"class":77},[49,164217,164218],{"class":73}," index, name ",[49,164220,26732],{"class":77},[49,164222,32137],{"class":159},[49,164224,164225],{"class":73},"(names):\n",[49,164227,164228,164230],{"class":51,"line":63},[49,164229,31830],{"class":159},[49,164231,164232],{"class":73},"(index, name)\n",[14,164234,164235],{},"统计总分：",[40,164237,164239],{"className":30909,"code":164238,"language":30911,"meta":27,"style":27},"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",[46,164240,164241,164266,164274,164278,164289,164297,164301,164318],{"__ignoreMap":27},[49,164242,164243,164246,164248,164250,164252,164254,164256,164258,164260,164262,164264],{"class":51,"line":52},[49,164244,164245],{"class":73},"scores ",[49,164247,78],{"class":77},[49,164249,52757],{"class":73},[49,164251,1691],{"class":159},[49,164253,13132],{"class":73},[49,164255,1565],{"class":159},[49,164257,13132],{"class":73},[49,164259,1083],{"class":159},[49,164261,13132],{"class":73},[49,164263,1390],{"class":159},[49,164265,33777],{"class":73},[49,164267,164268,164270,164272],{"class":51,"line":63},[49,164269,157791],{"class":73},[49,164271,78],{"class":77},[49,164273,47864],{"class":159},[49,164275,164276],{"class":51,"line":70},[49,164277,399],{"emptyLinePlaceholder":398},[49,164279,164280,164282,164284,164286],{"class":51,"line":219},[49,164281,3722],{"class":77},[49,164283,158314],{"class":73},[49,164285,26732],{"class":77},[49,164287,164288],{"class":73}," scores:\n",[49,164290,164291,164293,164295],{"class":51,"line":233},[49,164292,159838],{"class":73},[49,164294,10174],{"class":77},[49,164296,2278],{"class":73},[49,164298,164299],{"class":51,"line":241},[49,164300,399],{"emptyLinePlaceholder":398},[49,164302,164303,164306,164308,164311,164313,164315],{"class":51,"line":1920},[49,164304,164305],{"class":73},"avg ",[49,164307,78],{"class":77},[49,164309,164310],{"class":73}," total ",[49,164312,1413],{"class":77},[49,164314,8028],{"class":159},[49,164316,164317],{"class":73},"(scores)\n",[49,164319,164320,164322,164324,164326,164329,164331,164334,164336,164338,164340],{"class":51,"line":2011},[49,164321,30946],{"class":159},[49,164323,841],{"class":73},[49,164325,891],{"class":77},[49,164327,164328],{"class":59},"\"平均分:",[49,164330,1725],{"class":159},[49,164332,164333],{"class":73},"avg",[49,164335,157690],{"class":77},[49,164337,1775],{"class":159},[49,164339,1080],{"class":59},[49,164341,847],{"class":73},[782,164343,164345],{"id":164344},"_66-元组tuple","6.6 元组tuple",[14,164347,164348],{},"元组和列表类似，但不可修改。",[40,164350,164352],{"className":30909,"code":164351,"language":30911,"meta":27,"style":27},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[46,164353,164354,164371],{"__ignoreMap":27},[49,164355,164356,164359,164361,164363,164365,164367,164369],{"class":51,"line":52},[49,164357,164358],{"class":73},"point ",[49,164360,78],{"class":77},[49,164362,2357],{"class":73},[49,164364,1275],{"class":159},[49,164366,13132],{"class":73},[49,164368,1529],{"class":159},[49,164370,847],{"class":73},[49,164372,164373,164375,164377,164379,164381,164383,164385,164387,164389],{"class":51,"line":63},[49,164374,116845],{"class":73},[49,164376,78],{"class":77},[49,164378,2357],{"class":73},[49,164380,150419],{"class":59},[49,164382,13132],{"class":73},[49,164384,1479],{"class":159},[49,164386,13132],{"class":73},[49,164388,69800],{"class":59},[49,164390,847],{"class":73},[14,164392,164393],{},"单元素元组必须加逗号：",[40,164395,164397],{"className":30909,"code":164396,"language":30911,"meta":27,"style":27},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[46,164398,164399,164413,164426,164430,164444],{"__ignoreMap":27},[49,164400,164401,164404,164406,164408,164410],{"class":51,"line":52},[49,164402,164403],{"class":73},"t1 ",[49,164405,78],{"class":77},[49,164407,2357],{"class":73},[49,164409,1275],{"class":159},[49,164411,164412],{"class":73},",)\n",[49,164414,164415,164418,164420,164422,164424],{"class":51,"line":63},[49,164416,164417],{"class":73},"t2 ",[49,164419,78],{"class":77},[49,164421,2357],{"class":73},[49,164423,1275],{"class":159},[49,164425,847],{"class":73},[49,164427,164428],{"class":51,"line":70},[49,164429,399],{"emptyLinePlaceholder":398},[49,164431,164432,164434,164436,164438,164441],{"class":51,"line":219},[49,164433,30946],{"class":159},[49,164435,841],{"class":73},[49,164437,103638],{"class":159},[49,164439,164440],{"class":73},"(t1))  ",[49,164442,164443],{"class":66},"# tuple\n",[49,164445,164446,164448,164450,164452,164455],{"class":51,"line":233},[49,164447,30946],{"class":159},[49,164449,841],{"class":73},[49,164451,103638],{"class":159},[49,164453,164454],{"class":73},"(t2))  ",[49,164456,164457],{"class":66},"# int\n",[14,164459,164460],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[782,164462,164464],{"id":164463},"_67-字符串str","6.7 字符串str",[14,164466,164467],{},"字符串也是序列，可以索引、切片和遍历。",[40,164469,164471],{"className":30909,"code":164470,"language":30911,"meta":27,"style":27},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[46,164472,164473,164481,164485,164496,164508,164512,164523],{"__ignoreMap":27},[49,164474,164475,164477,164479],{"class":51,"line":52},[49,164476,156975],{"class":73},[49,164478,78],{"class":77},[49,164480,160212],{"class":59},[49,164482,164483],{"class":51,"line":63},[49,164484,399],{"emptyLinePlaceholder":398},[49,164486,164487,164489,164492,164494],{"class":51,"line":70},[49,164488,30946],{"class":159},[49,164490,164491],{"class":73},"(text[",[49,164493,1021],{"class":159},[49,164495,5354],{"class":73},[49,164497,164498,164500,164502,164504,164506],{"class":51,"line":219},[49,164499,30946],{"class":159},[49,164501,164491],{"class":73},[49,164503,1361],{"class":77},[49,164505,1047],{"class":159},[49,164507,5354],{"class":73},[49,164509,164510],{"class":51,"line":233},[49,164511,399],{"emptyLinePlaceholder":398},[49,164513,164514,164516,164518,164520],{"class":51,"line":241},[49,164515,3722],{"class":77},[49,164517,160223],{"class":73},[49,164519,26732],{"class":77},[49,164521,164522],{"class":73}," text:\n",[49,164524,164525,164527],{"class":51,"line":1920},[49,164526,31830],{"class":159},[49,164528,160234],{"class":73},[14,164530,164531],{},"字符串不可变：",[40,164533,164535],{"className":30909,"code":164534,"language":30911,"meta":27,"style":27},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[46,164536,164537,164545],{"__ignoreMap":27},[49,164538,164539,164541,164543],{"class":51,"line":52},[49,164540,156975],{"class":73},[49,164542,78],{"class":77},[49,164544,160212],{"class":59},[49,164546,164547,164550,164552,164554,164556,164559],{"class":51,"line":63},[49,164548,164549],{"class":73},"text[",[49,164551,1021],{"class":159},[49,164553,5140],{"class":73},[49,164555,78],{"class":77},[49,164557,164558],{"class":59}," \"P\"",[49,164560,164561],{"class":66},"  # 报错\n",[14,164563,164564],{},"如果要得到新字符串：",[40,164566,164568],{"className":30909,"code":164567,"language":30911,"meta":27,"style":27},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[46,164569,164570,164578,164596],{"__ignoreMap":27},[49,164571,164572,164574,164576],{"class":51,"line":52},[49,164573,156975],{"class":73},[49,164575,78],{"class":77},[49,164577,160212],{"class":59},[49,164579,164580,164582,164584,164586,164588,164591,164593],{"class":51,"line":63},[49,164581,156975],{"class":73},[49,164583,78],{"class":77},[49,164585,164558],{"class":59},[49,164587,46097],{"class":77},[49,164589,164590],{"class":73}," text[",[49,164592,1047],{"class":159},[49,164594,164595],{"class":73},":]\n",[49,164597,164598,164600],{"class":51,"line":70},[49,164599,30946],{"class":159},[49,164601,164602],{"class":73},"(text)\n",[782,164604,164606],{"id":164605},"_68-切片","6.8 切片",[14,164608,164609],{},"切片用于从序列中取一部分。",[40,164611,164613],{"className":30909,"code":164612,"language":30911,"meta":27,"style":27},"序列[开始:结束:步长]\n",[46,164614,164615],{"__ignoreMap":27},[49,164616,164617],{"class":51,"line":52},[49,164618,164612],{"class":73},[14,164620,164621],{},"结束位置不包含。",[40,164623,164625],{"className":30909,"code":164624,"language":30911,"meta":27,"style":27},"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",[46,164626,164627,164664,164668,164687,164702,164716,164730],{"__ignoreMap":27},[49,164628,164629,164632,164634,164636,164638,164640,164642,164644,164646,164648,164650,164652,164654,164656,164658,164660,164662],{"class":51,"line":52},[49,164630,164631],{"class":73},"nums ",[49,164633,78],{"class":77},[49,164635,52757],{"class":73},[49,164637,1021],{"class":159},[49,164639,13132],{"class":73},[49,164641,1047],{"class":159},[49,164643,13132],{"class":73},[49,164645,915],{"class":159},[49,164647,13132],{"class":73},[49,164649,909],{"class":159},[49,164651,13132],{"class":73},[49,164653,1122],{"class":159},[49,164655,13132],{"class":73},[49,164657,1148],{"class":159},[49,164659,13132],{"class":73},[49,164661,1173],{"class":159},[49,164663,33777],{"class":73},[49,164665,164666],{"class":51,"line":63},[49,164667,399],{"emptyLinePlaceholder":398},[49,164669,164670,164672,164675,164677,164679,164681,164684],{"class":51,"line":70},[49,164671,30946],{"class":159},[49,164673,164674],{"class":73},"(nums[",[49,164676,1047],{"class":159},[49,164678,1688],{"class":73},[49,164680,1122],{"class":159},[49,164682,164683],{"class":73},"])    ",[49,164685,164686],{"class":66},"# [1, 2, 3]\n",[49,164688,164689,164691,164694,164696,164699],{"class":51,"line":219},[49,164690,30946],{"class":159},[49,164692,164693],{"class":73},"(nums[:",[49,164695,909],{"class":159},[49,164697,164698],{"class":73},"])     ",[49,164700,164701],{"class":66},"# [0, 1, 2]\n",[49,164703,164704,164706,164708,164710,164713],{"class":51,"line":233},[49,164705,30946],{"class":159},[49,164707,164674],{"class":73},[49,164709,909],{"class":159},[49,164711,164712],{"class":73},":])     ",[49,164714,164715],{"class":66},"# [3, 4, 5, 6]\n",[49,164717,164718,164720,164723,164725,164727],{"class":51,"line":241},[49,164719,30946],{"class":159},[49,164721,164722],{"class":73},"(nums[::",[49,164724,915],{"class":159},[49,164726,164683],{"class":73},[49,164728,164729],{"class":66},"# [0, 2, 4, 6]\n",[49,164731,164732,164734,164736,164738,164740,164743],{"class":51,"line":1920},[49,164733,30946],{"class":159},[49,164735,164722],{"class":73},[49,164737,1361],{"class":77},[49,164739,1047],{"class":159},[49,164741,164742],{"class":73},"])   ",[49,164744,164745],{"class":66},"# 反转\n",[14,164747,164748],{},"字符串切片：",[40,164750,164752],{"className":30909,"code":164751,"language":30911,"meta":27,"style":27},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[46,164753,164754,164763,164777],{"__ignoreMap":27},[49,164755,164756,164758,164760],{"class":51,"line":52},[49,164757,156975],{"class":73},[49,164759,78],{"class":77},[49,164761,164762],{"class":59}," \"abcdef\"\n",[49,164764,164765,164767,164769,164771,164773,164775],{"class":51,"line":63},[49,164766,30946],{"class":159},[49,164768,164491],{"class":73},[49,164770,1047],{"class":159},[49,164772,1688],{"class":73},[49,164774,1122],{"class":159},[49,164776,5354],{"class":73},[49,164778,164779,164781,164784,164786,164788],{"class":51,"line":70},[49,164780,30946],{"class":159},[49,164782,164783],{"class":73},"(text[::",[49,164785,1361],{"class":77},[49,164787,1047],{"class":159},[49,164789,5354],{"class":73},[782,164791,164793],{"id":164792},"_69-集合set","6.9 集合set",[14,164795,164796],{},"集合特点：",[30,164798,164799,164802,164805],{},[33,164800,164801],{},"无序。",[33,164803,164804],{},"元素不重复。",[33,164806,164807],{},"可以做交集、并集、差集。",[40,164809,164811],{"className":30909,"code":164810,"language":30911,"meta":27,"style":27},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[46,164812,164813,164841],{"__ignoreMap":27},[49,164814,164815,164817,164819,164821,164823,164825,164827,164829,164831,164833,164835,164837,164839],{"class":51,"line":52},[49,164816,164631],{"class":73},[49,164818,78],{"class":77},[49,164820,5145],{"class":73},[49,164822,1047],{"class":159},[49,164824,13132],{"class":73},[49,164826,915],{"class":159},[49,164828,13132],{"class":73},[49,164830,909],{"class":159},[49,164832,13132],{"class":73},[49,164834,909],{"class":159},[49,164836,13132],{"class":73},[49,164838,1122],{"class":159},[49,164840,2264],{"class":73},[49,164842,164843,164845],{"class":51,"line":63},[49,164844,30946],{"class":159},[49,164846,164847],{"class":73},"(nums)\n",[14,164849,164850],{},"创建空集合：",[40,164852,164854],{"className":30909,"code":164853,"language":30911,"meta":27,"style":27},"s = set()\n",[46,164855,164856],{"__ignoreMap":27},[49,164857,164858,164860,164862,164864],{"class":51,"line":52},[49,164859,11276],{"class":73},[49,164861,78],{"class":77},[49,164863,120253],{"class":159},[49,164865,2674],{"class":73},[14,164867,9722,164868,164870],{},[46,164869,32990],{}," 是空字典，不是空集合。",[14,164872,164873],{},"集合常用操作：",[40,164875,164877],{"className":30909,"code":164876,"language":30911,"meta":27,"style":27},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[46,164878,164879,164899,164903,164912,164921,164930],{"__ignoreMap":27},[49,164880,164881,164883,164885,164887,164889,164891,164893,164895,164897],{"class":51,"line":52},[49,164882,11276],{"class":73},[49,164884,78],{"class":77},[49,164886,5145],{"class":73},[49,164888,1047],{"class":159},[49,164890,13132],{"class":73},[49,164892,915],{"class":159},[49,164894,13132],{"class":73},[49,164896,909],{"class":159},[49,164898,2264],{"class":73},[49,164900,164901],{"class":51,"line":63},[49,164902,399],{"emptyLinePlaceholder":398},[49,164904,164905,164908,164910],{"class":51,"line":70},[49,164906,164907],{"class":73},"s.add(",[49,164909,1122],{"class":159},[49,164911,847],{"class":73},[49,164913,164914,164917,164919],{"class":51,"line":219},[49,164915,164916],{"class":73},"s.remove(",[49,164918,915],{"class":159},[49,164920,847],{"class":73},[49,164922,164923,164926,164928],{"class":51,"line":233},[49,164924,164925],{"class":73},"s.discard(",[49,164927,1275],{"class":159},[49,164929,847],{"class":73},[49,164931,164932,164934,164936,164938],{"class":51,"line":241},[49,164933,30946],{"class":159},[49,164935,841],{"class":73},[49,164937,8055],{"class":159},[49,164939,164940],{"class":73},"(s))\n",[14,164942,164943],{},"交并差：",[40,164945,164947],{"className":30909,"code":164946,"language":30911,"meta":27,"style":27},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[46,164948,164949,164969,164989,164993,165008,165021],{"__ignoreMap":27},[49,164950,164951,164953,164955,164957,164959,164961,164963,164965,164967],{"class":51,"line":52},[49,164952,11616],{"class":73},[49,164954,78],{"class":77},[49,164956,5145],{"class":73},[49,164958,1047],{"class":159},[49,164960,13132],{"class":73},[49,164962,915],{"class":159},[49,164964,13132],{"class":73},[49,164966,909],{"class":159},[49,164968,2264],{"class":73},[49,164970,164971,164973,164975,164977,164979,164981,164983,164985,164987],{"class":51,"line":63},[49,164972,11642],{"class":73},[49,164974,78],{"class":77},[49,164976,5145],{"class":73},[49,164978,909],{"class":159},[49,164980,13132],{"class":73},[49,164982,1122],{"class":159},[49,164984,13132],{"class":73},[49,164986,1148],{"class":159},[49,164988,2264],{"class":73},[49,164990,164991],{"class":51,"line":70},[49,164992,399],{"emptyLinePlaceholder":398},[49,164994,164995,164997,165000,165002,165005],{"class":51,"line":219},[49,164996,30946],{"class":159},[49,164998,164999],{"class":73},"(a ",[49,165001,1182],{"class":77},[49,165003,165004],{"class":73}," b)  ",[49,165006,165007],{"class":66},"# 交集\n",[49,165009,165010,165012,165014,165016,165018],{"class":51,"line":233},[49,165011,30946],{"class":159},[49,165013,164999],{"class":73},[49,165015,1750],{"class":77},[49,165017,165004],{"class":73},[49,165019,165020],{"class":66},"# 并集\n",[49,165022,165023,165025,165027,165029,165031],{"class":51,"line":241},[49,165024,30946],{"class":159},[49,165026,164999],{"class":73},[49,165028,1361],{"class":77},[49,165030,165004],{"class":73},[49,165032,165033],{"class":66},"# 差集\n",[782,165035,165037],{"id":165036},"_610-字典dict","6.10 字典dict",[14,165039,165040],{},"字典通过 key-value 保存数据。",[40,165042,165044],{"className":30909,"code":165043,"language":30911,"meta":27,"style":27},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[46,165045,165046,165054,165064,165075,165085],{"__ignoreMap":27},[49,165047,165048,165050,165052],{"class":51,"line":52},[49,165049,150012],{"class":73},[49,165051,78],{"class":77},[49,165053,16269],{"class":73},[49,165055,165056,165058,165060,165062],{"class":51,"line":63},[49,165057,147551],{"class":59},[49,165059,51968],{"class":73},[49,165061,150419],{"class":59},[49,165063,31997],{"class":73},[49,165065,165066,165069,165071,165073],{"class":51,"line":70},[49,165067,165068],{"class":59},"    \"age\"",[49,165070,51968],{"class":73},[49,165072,1479],{"class":159},[49,165074,31997],{"class":73},[49,165076,165077,165080,165082],{"class":51,"line":219},[49,165078,165079],{"class":59},"    \"score\"",[49,165081,51968],{"class":73},[49,165083,165084],{"class":159},"95\n",[49,165086,165087],{"class":51,"line":233},[49,165088,2264],{"class":73},[14,165090,165091],{},"获取值：",[40,165093,165095],{"className":30909,"code":165094,"language":30911,"meta":27,"style":27},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[46,165096,165097,165108],{"__ignoreMap":27},[49,165098,165099,165101,165104,165106],{"class":51,"line":52},[49,165100,30946],{"class":159},[49,165102,165103],{"class":73},"(student[",[49,165105,63210],{"class":59},[49,165107,5354],{"class":73},[49,165109,165110,165112,165115,165117],{"class":51,"line":63},[49,165111,30946],{"class":159},[49,165113,165114],{"class":73},"(student.get(",[49,165116,63210],{"class":59},[49,165118,31028],{"class":73},[14,165120,16085],{},[40,165122,165124],{"className":30909,"code":165123,"language":30911,"meta":27,"style":27},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[46,165125,165126,165139],{"__ignoreMap":27},[49,165127,165128,165130,165133,165136],{"class":51,"line":52},[49,165129,153390],{"class":73},[49,165131,165132],{"class":59},"\"address\"",[49,165134,165135],{"class":73},"]     ",[49,165137,165138],{"class":66},"# key不存在会报错\n",[49,165140,165141,165144,165146,165148],{"class":51,"line":63},[49,165142,165143],{"class":73},"student.get(",[49,165145,165132],{"class":59},[49,165147,14411],{"class":73},[49,165149,165150],{"class":66},"# key不存在返回None\n",[14,165152,165153],{},"设置默认值：",[40,165155,165157],{"className":30909,"code":165156,"language":30911,"meta":27,"style":27},"print(student.get(\"address\", \"未知\"))\n",[46,165158,165159],{"__ignoreMap":27},[49,165160,165161,165163,165165,165167,165169,165172],{"class":51,"line":52},[49,165162,30946],{"class":159},[49,165164,165114],{"class":73},[49,165166,165132],{"class":59},[49,165168,13132],{"class":73},[49,165170,165171],{"class":59},"\"未知\"",[49,165173,31028],{"class":73},[14,165175,165176],{},"新增和修改：",[40,165178,165180],{"className":30909,"code":165179,"language":30911,"meta":27,"style":27},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[46,165181,165182,165195],{"__ignoreMap":27},[49,165183,165184,165186,165188,165190,165192],{"class":51,"line":52},[49,165185,153390],{"class":73},[49,165187,69655],{"class":59},[49,165189,5140],{"class":73},[49,165191,78],{"class":77},[49,165193,165194],{"class":159}," 19\n",[49,165196,165197,165199,165201,165203,165205],{"class":51,"line":63},[49,165198,153390],{"class":73},[49,165200,165132],{"class":59},[49,165202,5140],{"class":73},[49,165204,78],{"class":77},[49,165206,165207],{"class":59}," \"北京\"\n",[14,165209,165210],{},"删除：",[40,165212,165214],{"className":30909,"code":165213,"language":30911,"meta":27,"style":27},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[46,165215,165216,165229,165239],{"__ignoreMap":27},[49,165217,165218,165220,165222,165225,165227],{"class":51,"line":52},[49,165219,155889],{"class":73},[49,165221,78],{"class":77},[49,165223,165224],{"class":73}," student.pop(",[49,165226,152003],{"class":59},[49,165228,847],{"class":73},[49,165230,165231,165233,165235,165237],{"class":51,"line":63},[49,165232,163914],{"class":77},[49,165234,152680],{"class":73},[49,165236,69655],{"class":59},[49,165238,33777],{"class":73},[49,165240,165241],{"class":51,"line":70},[49,165242,165243],{"class":73},"student.clear()\n",[782,165245,165247],{"id":165246},"_611-字典遍历","6.11 字典遍历",[14,165249,165250],{},"遍历 key：",[40,165252,165254],{"className":30909,"code":165253,"language":30911,"meta":27,"style":27},"for key in student:\n    print(key, student[key])\n",[46,165255,165256,165268],{"__ignoreMap":27},[49,165257,165258,165260,165263,165265],{"class":51,"line":52},[49,165259,3722],{"class":77},[49,165261,165262],{"class":73}," key ",[49,165264,26732],{"class":77},[49,165266,165267],{"class":73}," student:\n",[49,165269,165270,165272],{"class":51,"line":63},[49,165271,31830],{"class":159},[49,165273,165274],{"class":73},"(key, student[key])\n",[14,165276,165277],{},"遍历 value：",[40,165279,165281],{"className":30909,"code":165280,"language":30911,"meta":27,"style":27},"for value in student.values():\n    print(value)\n",[46,165282,165283,165295],{"__ignoreMap":27},[49,165284,165285,165287,165290,165292],{"class":51,"line":52},[49,165286,3722],{"class":77},[49,165288,165289],{"class":73}," value ",[49,165291,26732],{"class":77},[49,165293,165294],{"class":73}," student.values():\n",[49,165296,165297,165299],{"class":51,"line":63},[49,165298,31830],{"class":159},[49,165300,165301],{"class":73},"(value)\n",[14,165303,165304],{},"遍历 key 和 value：",[40,165306,165308],{"className":30909,"code":165307,"language":30911,"meta":27,"style":27},"for key, value in student.items():\n    print(key, value)\n",[46,165309,165310,165322],{"__ignoreMap":27},[49,165311,165312,165314,165317,165319],{"class":51,"line":52},[49,165313,3722],{"class":77},[49,165315,165316],{"class":73}," key, value ",[49,165318,26732],{"class":77},[49,165320,165321],{"class":73}," student.items():\n",[49,165323,165324,165326],{"class":51,"line":63},[49,165325,31830],{"class":159},[49,165327,165328],{"class":73},"(key, value)\n",[782,165330,165332],{"id":165331},"_612-嵌套容器","6.12 嵌套容器",[14,165334,165335],{},"列表中保存字典，是项目中最常见的结构之一。",[40,165337,165339],{"className":30909,"code":165338,"language":30911,"meta":27,"style":27},"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",[46,165340,165341,165349,165377,165405,165433,165437,165441,165451],{"__ignoreMap":27},[49,165342,165343,165345,165347],{"class":51,"line":52},[49,165344,160247],{"class":73},[49,165346,78],{"class":77},[49,165348,55978],{"class":73},[49,165350,165351,165353,165355,165357,165359,165361,165363,165365,165367,165369,165371,165373,165375],{"class":51,"line":63},[49,165352,148916],{"class":73},[49,165354,63210],{"class":59},[49,165356,51968],{"class":73},[49,165358,150419],{"class":59},[49,165360,13132],{"class":73},[49,165362,69655],{"class":59},[49,165364,51968],{"class":73},[49,165366,1479],{"class":159},[49,165368,13132],{"class":73},[49,165370,152003],{"class":59},[49,165372,51968],{"class":73},[49,165374,1818],{"class":159},[49,165376,5627],{"class":73},[49,165378,165379,165381,165383,165385,165387,165389,165391,165393,165395,165397,165399,165401,165403],{"class":51,"line":70},[49,165380,148916],{"class":73},[49,165382,63210],{"class":59},[49,165384,51968],{"class":73},[49,165386,151467],{"class":59},[49,165388,13132],{"class":73},[49,165390,69655],{"class":59},[49,165392,51968],{"class":73},[49,165394,1454],{"class":159},[49,165396,13132],{"class":73},[49,165398,152003],{"class":59},[49,165400,51968],{"class":73},[49,165402,1640],{"class":159},[49,165404,5627],{"class":73},[49,165406,165407,165409,165411,165413,165415,165417,165419,165421,165423,165425,165427,165429,165431],{"class":51,"line":219},[49,165408,148916],{"class":73},[49,165410,63210],{"class":59},[49,165412,51968],{"class":73},[49,165414,160262],{"class":59},[49,165416,13132],{"class":73},[49,165418,69655],{"class":59},[49,165420,51968],{"class":73},[49,165422,1504],{"class":159},[49,165424,13132],{"class":73},[49,165426,152003],{"class":59},[49,165428,51968],{"class":73},[49,165430,1235],{"class":159},[49,165432,5627],{"class":73},[49,165434,165435],{"class":51,"line":233},[49,165436,33777],{"class":73},[49,165438,165439],{"class":51,"line":241},[49,165440,399],{"emptyLinePlaceholder":398},[49,165442,165443,165445,165447,165449],{"class":51,"line":1920},[49,165444,3722],{"class":77},[49,165446,152668],{"class":73},[49,165448,26732],{"class":77},[49,165450,152673],{"class":73},[49,165452,165453,165455,165457,165459,165462,165464],{"class":51,"line":2011},[49,165454,31830],{"class":159},[49,165456,165103],{"class":73},[49,165458,63210],{"class":59},[49,165460,165461],{"class":73},"], student[",[49,165463,152003],{"class":59},[49,165465,5354],{"class":73},[14,165467,165468],{},"统计平均分：",[40,165470,165472],{"className":30909,"code":165471,"language":30911,"meta":27,"style":27},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[46,165473,165474,165482,165486,165496,165508,165512,165527],{"__ignoreMap":27},[49,165475,165476,165478,165480],{"class":51,"line":52},[49,165477,157791],{"class":73},[49,165479,78],{"class":77},[49,165481,47864],{"class":159},[49,165483,165484],{"class":51,"line":63},[49,165485,399],{"emptyLinePlaceholder":398},[49,165487,165488,165490,165492,165494],{"class":51,"line":70},[49,165489,3722],{"class":77},[49,165491,152668],{"class":73},[49,165493,26732],{"class":77},[49,165495,152673],{"class":73},[49,165497,165498,165500,165502,165504,165506],{"class":51,"line":219},[49,165499,159838],{"class":73},[49,165501,10174],{"class":77},[49,165503,152680],{"class":73},[49,165505,152003],{"class":59},[49,165507,33777],{"class":73},[49,165509,165510],{"class":51,"line":233},[49,165511,399],{"emptyLinePlaceholder":398},[49,165513,165514,165516,165518,165520,165522,165524],{"class":51,"line":241},[49,165515,164305],{"class":73},[49,165517,78],{"class":77},[49,165519,164310],{"class":73},[49,165521,1413],{"class":77},[49,165523,8028],{"class":159},[49,165525,165526],{"class":73},"(students)\n",[49,165528,165529,165531,165533,165535,165537,165539,165541,165543,165545,165547],{"class":51,"line":1920},[49,165530,30946],{"class":159},[49,165532,841],{"class":73},[49,165534,891],{"class":77},[49,165536,164328],{"class":59},[49,165538,1725],{"class":159},[49,165540,164333],{"class":73},[49,165542,157690],{"class":77},[49,165544,1775],{"class":159},[49,165546,1080],{"class":59},[49,165548,847],{"class":73},[14,165550,165551],{},"查找学生：",[40,165553,165555],{"className":30909,"code":165554,"language":30911,"meta":27,"style":27},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[46,165556,165557,165572,165576,165586,165600,165606,165610,165616],{"__ignoreMap":27},[49,165558,165559,165561,165563,165565,165567,165570],{"class":51,"line":52},[49,165560,112109],{"class":73},[49,165562,78],{"class":77},[49,165564,61136],{"class":159},[49,165566,841],{"class":73},[49,165568,165569],{"class":59},"\"请输入学生姓名:\"",[49,165571,847],{"class":73},[49,165573,165574],{"class":51,"line":63},[49,165575,399],{"emptyLinePlaceholder":398},[49,165577,165578,165580,165582,165584],{"class":51,"line":70},[49,165579,3722],{"class":77},[49,165581,152668],{"class":73},[49,165583,26732],{"class":77},[49,165585,152673],{"class":73},[49,165587,165588,165590,165592,165594,165596,165598],{"class":51,"line":219},[49,165589,3798],{"class":77},[49,165591,152680],{"class":73},[49,165593,63210],{"class":59},[49,165595,5140],{"class":73},[49,165597,3646],{"class":77},[49,165599,160963],{"class":73},[49,165601,165602,165604],{"class":51,"line":233},[49,165603,32982],{"class":159},[49,165605,150573],{"class":73},[49,165607,165608],{"class":51,"line":241},[49,165609,32158],{"class":77},[49,165611,165612,165614],{"class":51,"line":1920},[49,165613,2400],{"class":77},[49,165615,4436],{"class":73},[49,165617,165618,165620,165622,165625],{"class":51,"line":2011},[49,165619,31830],{"class":159},[49,165621,841],{"class":73},[49,165623,165624],{"class":59},"\"没有找到\"",[49,165626,847],{"class":73},[782,165628,165630],{"id":165629},"_613-容器通用操作","6.13 容器通用操作",[14,165632,165633],{},"长度：",[40,165635,165637],{"className":30909,"code":165636,"language":30911,"meta":27,"style":27},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[46,165638,165639,165658,165668],{"__ignoreMap":27},[49,165640,165641,165643,165646,165648,165650,165652,165654,165656],{"class":51,"line":52},[49,165642,8055],{"class":159},[49,165644,165645],{"class":73},"([",[49,165647,1047],{"class":159},[49,165649,13132],{"class":73},[49,165651,915],{"class":159},[49,165653,13132],{"class":73},[49,165655,909],{"class":159},[49,165657,5354],{"class":73},[49,165659,165660,165662,165664,165666],{"class":51,"line":63},[49,165661,8055],{"class":159},[49,165663,841],{"class":73},[49,165665,156411],{"class":59},[49,165667,847],{"class":73},[49,165669,165670,165672,165675,165677,165679,165681],{"class":51,"line":70},[49,165671,8055],{"class":159},[49,165673,165674],{"class":73},"({",[49,165676,63210],{"class":59},[49,165678,51968],{"class":73},[49,165680,150419],{"class":59},[49,165682,165683],{"class":73},"})\n",[14,165685,165686],{},"最大最小：",[40,165688,165690],{"className":30909,"code":165689,"language":30911,"meta":27,"style":27},"max([1, 2, 3])\nmin([1, 2, 3])\n",[46,165691,165692,165710],{"__ignoreMap":27},[49,165693,165694,165696,165698,165700,165702,165704,165706,165708],{"class":51,"line":52},[49,165695,6712],{"class":159},[49,165697,165645],{"class":73},[49,165699,1047],{"class":159},[49,165701,13132],{"class":73},[49,165703,915],{"class":159},[49,165705,13132],{"class":73},[49,165707,909],{"class":159},[49,165709,5354],{"class":73},[49,165711,165712,165715,165717,165719,165721,165723,165725,165727],{"class":51,"line":63},[49,165713,165714],{"class":159},"min",[49,165716,165645],{"class":73},[49,165718,1047],{"class":159},[49,165720,13132],{"class":73},[49,165722,915],{"class":159},[49,165724,13132],{"class":73},[49,165726,909],{"class":159},[49,165728,5354],{"class":73},[14,165730,165731],{},"求和：",[40,165733,165735],{"className":30909,"code":165734,"language":30911,"meta":27,"style":27},"sum([1, 2, 3])\n",[46,165736,165737],{"__ignoreMap":27},[49,165738,165739,165742,165744,165746,165748,165750,165752,165754],{"class":51,"line":52},[49,165740,165741],{"class":159},"sum",[49,165743,165645],{"class":73},[49,165745,1047],{"class":159},[49,165747,13132],{"class":73},[49,165749,915],{"class":159},[49,165751,13132],{"class":73},[49,165753,909],{"class":159},[49,165755,5354],{"class":73},[14,165757,164002],{},[40,165759,165761],{"className":30909,"code":165760,"language":30911,"meta":27,"style":27},"sorted([3, 1, 2])\n",[46,165762,165763],{"__ignoreMap":27},[49,165764,165765,165768,165770,165772,165774,165776,165778,165780],{"class":51,"line":52},[49,165766,165767],{"class":159},"sorted",[49,165769,165645],{"class":73},[49,165771,909],{"class":159},[49,165773,13132],{"class":73},[49,165775,1047],{"class":159},[49,165777,13132],{"class":73},[49,165779,915],{"class":159},[49,165781,5354],{"class":73},[14,165783,165784],{},"类型转换：",[40,165786,165788],{"className":30909,"code":165787,"language":30911,"meta":27,"style":27},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[46,165789,165790,165800,165818],{"__ignoreMap":27},[49,165791,165792,165794,165796,165798],{"class":51,"line":52},[49,165793,154601],{"class":159},[49,165795,841],{"class":73},[49,165797,156411],{"class":59},[49,165799,847],{"class":73},[49,165801,165802,165804,165806,165808,165810,165812,165814,165816],{"class":51,"line":63},[49,165803,155796],{"class":159},[49,165805,165645],{"class":73},[49,165807,1047],{"class":159},[49,165809,13132],{"class":73},[49,165811,915],{"class":159},[49,165813,13132],{"class":73},[49,165815,909],{"class":159},[49,165817,5354],{"class":73},[49,165819,165820,165822,165824,165826,165828,165830,165832,165834,165836,165838],{"class":51,"line":70},[49,165821,155821],{"class":159},[49,165823,165645],{"class":73},[49,165825,1047],{"class":159},[49,165827,13132],{"class":73},[49,165829,1047],{"class":159},[49,165831,13132],{"class":73},[49,165833,915],{"class":159},[49,165835,13132],{"class":73},[49,165837,909],{"class":159},[49,165839,5354],{"class":73},[14,165841,165842],{},"成员判断：",[40,165844,165846],{"className":30909,"code":165845,"language":30911,"meta":27,"style":27},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[46,165847,165848,165865,165889],{"__ignoreMap":27},[49,165849,165850,165852,165854,165857,165860,165863],{"class":51,"line":52},[49,165851,30946],{"class":159},[49,165853,841],{"class":73},[49,165855,165856],{"class":59},"\"a\"",[49,165858,165859],{"class":77}," in",[49,165861,165862],{"class":59}," \"abc\"",[49,165864,847],{"class":73},[49,165866,165867,165869,165871,165873,165875,165877,165879,165881,165883,165885,165887],{"class":51,"line":63},[49,165868,30946],{"class":159},[49,165870,841],{"class":73},[49,165872,1047],{"class":159},[49,165874,165859],{"class":77},[49,165876,52757],{"class":73},[49,165878,1047],{"class":159},[49,165880,13132],{"class":73},[49,165882,915],{"class":159},[49,165884,13132],{"class":73},[49,165886,909],{"class":159},[49,165888,5354],{"class":73},[49,165890,165891,165893,165895,165897,165899,165901,165903,165905,165907],{"class":51,"line":70},[49,165892,30946],{"class":159},[49,165894,841],{"class":73},[49,165896,63210],{"class":59},[49,165898,165859],{"class":77},[49,165900,5145],{"class":73},[49,165902,63210],{"class":59},[49,165904,51968],{"class":73},[49,165906,150419],{"class":59},[49,165908,165683],{"class":73},[782,165910,165912],{"id":165911},"_614-推导式","6.14 推导式",[14,165914,165915],{},"推导式用于快速生成容器。",[14,165917,165918],{},"列表推导式：",[40,165920,165922],{"className":30909,"code":165921,"language":30911,"meta":27,"style":27},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[46,165923,165924,165951],{"__ignoreMap":27},[49,165925,165926,165928,165930,165933,165935,165937,165939,165941,165943,165945,165947,165949],{"class":51,"line":52},[49,165927,164631],{"class":73},[49,165929,78],{"class":77},[49,165931,165932],{"class":73}," [i ",[49,165934,3722],{"class":77},[49,165936,10135],{"class":73},[49,165938,26732],{"class":77},[49,165940,32974],{"class":159},[49,165942,841],{"class":73},[49,165944,1047],{"class":159},[49,165946,13132],{"class":73},[49,165948,1173],{"class":159},[49,165950,97831],{"class":73},[49,165952,165953,165955],{"class":51,"line":63},[49,165954,30946],{"class":159},[49,165956,164847],{"class":73},[14,165958,165959],{},"带条件：",[40,165961,165963],{"className":30909,"code":165962,"language":30911,"meta":27,"style":27},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[46,165964,165965,166006],{"__ignoreMap":27},[49,165966,165967,165970,165972,165974,165976,165978,165980,165982,165984,165986,165988,165990,165992,165994,165996,165998,166000,166002,166004],{"class":51,"line":52},[49,165968,165969],{"class":73},"even_nums ",[49,165971,78],{"class":77},[49,165973,165932],{"class":73},[49,165975,3722],{"class":77},[49,165977,10135],{"class":73},[49,165979,26732],{"class":77},[49,165981,32974],{"class":159},[49,165983,841],{"class":73},[49,165985,1047],{"class":159},[49,165987,13132],{"class":73},[49,165989,1166],{"class":159},[49,165991,14411],{"class":73},[49,165993,2230],{"class":77},[49,165995,10135],{"class":73},[49,165997,1157],{"class":77},[49,165999,15452],{"class":159},[49,166001,102090],{"class":77},[49,166003,4790],{"class":159},[49,166005,33777],{"class":73},[49,166007,166008,166010],{"class":51,"line":63},[49,166009,30946],{"class":159},[49,166011,166012],{"class":73},"(even_nums)\n",[14,166014,166015],{},"字典推导式：",[40,166017,166019],{"className":30909,"code":166018,"language":30911,"meta":27,"style":27},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[46,166020,166021,166055],{"__ignoreMap":27},[49,166022,166023,166026,166028,166031,166033,166035,166038,166040,166042,166044,166046,166048,166050,166052],{"class":51,"line":52},[49,166024,166025],{"class":73},"squares ",[49,166027,78],{"class":77},[49,166029,166030],{"class":73}," {i: i ",[49,166032,11358],{"class":77},[49,166034,15452],{"class":159},[49,166036,166037],{"class":77}," for",[49,166039,10135],{"class":73},[49,166041,26732],{"class":77},[49,166043,32974],{"class":159},[49,166045,841],{"class":73},[49,166047,1047],{"class":159},[49,166049,13132],{"class":73},[49,166051,1173],{"class":159},[49,166053,166054],{"class":73},")}\n",[49,166056,166057,166059],{"class":51,"line":63},[49,166058,30946],{"class":159},[49,166060,166061],{"class":73},"(squares)\n",[14,166063,166064],{},"集合推导式：",[40,166066,166068],{"className":30909,"code":166067,"language":30911,"meta":27,"style":27},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[46,166069,166070,166091],{"__ignoreMap":27},[49,166071,166072,166075,166077,166080,166082,166084,166086,166089],{"class":51,"line":52},[49,166073,166074],{"class":73},"chars ",[49,166076,78],{"class":77},[49,166078,166079],{"class":73}," {ch ",[49,166081,3722],{"class":77},[49,166083,160223],{"class":73},[49,166085,26732],{"class":77},[49,166087,166088],{"class":59}," \"hello\"",[49,166090,2264],{"class":73},[49,166092,166093,166095],{"class":51,"line":63},[49,166094,30946],{"class":159},[49,166096,166097],{"class":73},"(chars)\n",[14,166099,166100],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[782,166102,166104],{"id":166103},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[40,166106,166108],{"className":30909,"code":166107,"language":30911,"meta":27,"style":27},"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",[46,166109,166110,166118,166138,166158,166178,166198,166202,166206,166214,166228,166237,166241,166251,166263,166267,166287,166296,166300,166316,166321,166325,166339,166343,166365,166401],{"__ignoreMap":27},[49,166111,166112,166114,166116],{"class":51,"line":52},[49,166113,160247],{"class":73},[49,166115,78],{"class":77},[49,166117,55978],{"class":73},[49,166119,166120,166122,166124,166126,166128,166130,166132,166134,166136],{"class":51,"line":63},[49,166121,148916],{"class":73},[49,166123,63210],{"class":59},[49,166125,51968],{"class":73},[49,166127,150419],{"class":59},[49,166129,13132],{"class":73},[49,166131,152003],{"class":59},[49,166133,51968],{"class":73},[49,166135,1818],{"class":159},[49,166137,5627],{"class":73},[49,166139,166140,166142,166144,166146,166148,166150,166152,166154,166156],{"class":51,"line":70},[49,166141,148916],{"class":73},[49,166143,63210],{"class":59},[49,166145,51968],{"class":73},[49,166147,151467],{"class":59},[49,166149,13132],{"class":73},[49,166151,152003],{"class":59},[49,166153,51968],{"class":73},[49,166155,1640],{"class":159},[49,166157,5627],{"class":73},[49,166159,166160,166162,166164,166166,166168,166170,166172,166174,166176],{"class":51,"line":219},[49,166161,148916],{"class":73},[49,166163,63210],{"class":59},[49,166165,51968],{"class":73},[49,166167,160262],{"class":59},[49,166169,13132],{"class":73},[49,166171,152003],{"class":59},[49,166173,51968],{"class":73},[49,166175,1235],{"class":159},[49,166177,5627],{"class":73},[49,166179,166180,166182,166184,166186,166188,166190,166192,166194,166196],{"class":51,"line":233},[49,166181,148916],{"class":73},[49,166183,63210],{"class":59},[49,166185,51968],{"class":73},[49,166187,163841],{"class":59},[49,166189,13132],{"class":73},[49,166191,152003],{"class":59},[49,166193,51968],{"class":73},[49,166195,1711],{"class":159},[49,166197,5627],{"class":73},[49,166199,166200],{"class":51,"line":241},[49,166201,33777],{"class":73},[49,166203,166204],{"class":51,"line":1920},[49,166205,399],{"emptyLinePlaceholder":398},[49,166207,166208,166210,166212],{"class":51,"line":2011},[49,166209,157791],{"class":73},[49,166211,78],{"class":77},[49,166213,47864],{"class":159},[49,166215,166216,166219,166221,166224,166226],{"class":51,"line":2017},[49,166217,166218],{"class":73},"max_student ",[49,166220,78],{"class":77},[49,166222,166223],{"class":73}," students[",[49,166225,1021],{"class":159},[49,166227,33777],{"class":73},[49,166229,166230,166233,166235],{"class":51,"line":2029},[49,166231,166232],{"class":73},"passed ",[49,166234,78],{"class":77},[49,166236,52369],{"class":73},[49,166238,166239],{"class":51,"line":2311},[49,166240,399],{"emptyLinePlaceholder":398},[49,166242,166243,166245,166247,166249],{"class":51,"line":2316},[49,166244,3722],{"class":77},[49,166246,152668],{"class":73},[49,166248,26732],{"class":77},[49,166250,152673],{"class":73},[49,166252,166253,166255,166257,166259,166261],{"class":51,"line":2322},[49,166254,159838],{"class":73},[49,166256,10174],{"class":77},[49,166258,152680],{"class":73},[49,166260,152003],{"class":59},[49,166262,33777],{"class":73},[49,166264,166265],{"class":51,"line":2327},[49,166266,399],{"emptyLinePlaceholder":398},[49,166268,166269,166271,166273,166275,166277,166279,166282,166284],{"class":51,"line":2341},[49,166270,3798],{"class":77},[49,166272,152680],{"class":73},[49,166274,152003],{"class":59},[49,166276,5140],{"class":73},[49,166278,1789],{"class":77},[49,166280,166281],{"class":73}," max_student[",[49,166283,152003],{"class":59},[49,166285,166286],{"class":73},"]:\n",[49,166288,166289,166292,166294],{"class":51,"line":2346},[49,166290,166291],{"class":73},"        max_student ",[49,166293,78],{"class":77},[49,166295,152696],{"class":73},[49,166297,166298],{"class":51,"line":2352},[49,166299,399],{"emptyLinePlaceholder":398},[49,166301,166302,166304,166306,166308,166310,166312,166314],{"class":51,"line":2373},[49,166303,3798],{"class":77},[49,166305,152680],{"class":73},[49,166307,152003],{"class":59},[49,166309,5140],{"class":73},[49,166311,2409],{"class":77},[49,166313,158368],{"class":159},[49,166315,4436],{"class":73},[49,166317,166318],{"class":51,"line":2378},[49,166319,166320],{"class":73},"        passed.append(student)\n",[49,166322,166323],{"class":51,"line":2392},[49,166324,399],{"emptyLinePlaceholder":398},[49,166326,166327,166329,166331,166333,166335,166337],{"class":51,"line":2397},[49,166328,164305],{"class":73},[49,166330,78],{"class":77},[49,166332,164310],{"class":73},[49,166334,1413],{"class":77},[49,166336,8028],{"class":159},[49,166338,165526],{"class":73},[49,166340,166341],{"class":51,"line":2426},[49,166342,399],{"emptyLinePlaceholder":398},[49,166344,166345,166347,166349,166351,166353,166355,166357,166359,166361,166363],{"class":51,"line":2431},[49,166346,30946],{"class":159},[49,166348,841],{"class":73},[49,166350,891],{"class":77},[49,166352,164328],{"class":59},[49,166354,1725],{"class":159},[49,166356,164333],{"class":73},[49,166358,157690],{"class":77},[49,166360,1775],{"class":159},[49,166362,1080],{"class":59},[49,166364,847],{"class":73},[49,166366,166367,166369,166371,166373,166376,166378,166381,166383,166385,166387,166389,166391,166393,166395,166397,166399],{"class":51,"line":2448},[49,166368,30946],{"class":159},[49,166370,841],{"class":73},[49,166372,891],{"class":77},[49,166374,166375],{"class":59},"\"最高分学生:",[49,166377,1725],{"class":159},[49,166379,166380],{"class":73},"max_student[",[49,166382,153413],{"class":59},[49,166384,1769],{"class":73},[49,166386,1775],{"class":159},[49,166388,5145],{"class":159},[49,166390,166380],{"class":73},[49,166392,153451],{"class":59},[49,166394,1769],{"class":73},[49,166396,1775],{"class":159},[49,166398,1080],{"class":59},[49,166400,847],{"class":73},[49,166402,166403,166405,166407,166409,166412,166415,166418,166420,166422],{"class":51,"line":2453},[49,166404,30946],{"class":159},[49,166406,841],{"class":73},[49,166408,891],{"class":77},[49,166410,166411],{"class":59},"\"及格人数:",[49,166413,166414],{"class":159},"{len",[49,166416,166417],{"class":73},"(passed)",[49,166419,1775],{"class":159},[49,166421,1080],{"class":59},[49,166423,847],{"class":73},[782,166425,166427],{"id":166426},"_616-易错点","6.16 易错点",[30,166429,166430,166433,166436,166439,166445,166454],{},[33,166431,166432],{},"列表可变，元组和字符串不可变。",[33,166434,166435],{},"切片结束位置不包含。",[33,166437,166438],{},"字典通过 key 取值，不是通过索引。",[33,166440,166441,166442,28916],{},"空集合要用 ",[46,166443,166444],{},"set()",[33,166446,104897,166447,166450,166451,28916],{},[46,166448,166449],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[46,166452,166453],{},"get()",[33,166455,166456],{},"嵌套容器要先看清楚每一层是什么类型。",[782,166458,166460],{"id":166459},"_617-本章练习","6.17 本章练习",[30,166462,166463,166466,166469,166472,166475],{},[33,166464,166465],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[33,166467,166468],{},"输入一句话，统计每个字符出现次数。",[33,166470,166471],{},"使用集合去除列表中的重复元素。",[33,166473,166474],{},"使用字典保存一个学生的信息，并实现修改成绩。",[33,166476,166477],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[757,166479,166480],{},"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":27,"searchDepth":63,"depth":63,"links":166482},[166483,166484,166485,166486,166487,166488,166489,166490,166491,166492,166493,166494,166495,166496,166497,166498,166499],{"id":163463,"depth":63,"text":163464},{"id":163580,"depth":63,"text":163581},{"id":163670,"depth":63,"text":163671},{"id":163794,"depth":63,"text":163795},{"id":164157,"depth":63,"text":164158},{"id":164344,"depth":63,"text":164345},{"id":164463,"depth":63,"text":164464},{"id":164605,"depth":63,"text":164606},{"id":164792,"depth":63,"text":164793},{"id":165036,"depth":63,"text":165037},{"id":165246,"depth":63,"text":165247},{"id":165331,"depth":63,"text":165332},{"id":165629,"depth":63,"text":165630},{"id":165911,"depth":63,"text":165912},{"id":166103,"depth":63,"text":166104},{"id":166426,"depth":63,"text":166427},{"id":166459,"depth":63,"text":166460},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163455,"description":24072},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166506,"title":166507,"body":166508,"description":24072,"extension":766,"meta":168680,"navigation":398,"path":168681,"seo":168682,"stem":168683,"__hash__":168684},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166509,"toc":168655},[166510,166513,166517,166520,166600,166603,166624,166627,166631,166634,166696,166699,166716,166720,166723,166768,166770,166778,166782,166785,166867,166870,166873,166898,166901,166924,166928,166931,166933,166995,166998,167000,167051,167055,167059,167065,167170,167174,167180,167251,167255,167258,167326,167329,167409,167413,167419,167455,167458,167461,167571,167577,167581,167584,167656,167659,167663,167667,167672,167734,167738,167743,167811,167815,167820,167936,167940,167943,168023,168026,168030,168033,168137,168139,168154,168157,168161,168299,168307,168311,168313,168324,168326,168584,168588,168620,168624,168652],[10,166511,166507],{"id":166512},"_7-函数进阶",[782,166514,166516],{"id":166515},"_71-多返回值","7.1 多返回值",[14,166518,166519],{},"Python 函数可以返回多个值，本质上返回的是元组。",[40,166521,166523],{"className":30909,"code":166522,"language":30911,"meta":27,"style":27},"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",[46,166524,166525,166534,166542,166550,166559,166566,166570,166574,166583,166589],{"__ignoreMap":27},[49,166526,166527,166529,166532],{"class":51,"line":52},[49,166528,32478],{"class":77},[49,166530,166531],{"class":55}," get_info",[49,166533,32484],{"class":73},[49,166535,166536,166538,166540],{"class":51,"line":63},[49,166537,152901],{"class":73},[49,166539,78],{"class":77},[49,166541,149884],{"class":59},[49,166543,166544,166546,166548],{"class":51,"line":70},[49,166545,152917],{"class":73},[49,166547,78],{"class":77},[49,166549,147082],{"class":159},[49,166551,166552,166554,166556],{"class":51,"line":219},[49,166553,152932],{"class":73},[49,166555,78],{"class":77},[49,166557,166558],{"class":159}," 95\n",[49,166560,166561,166563],{"class":51,"line":233},[49,166562,4787],{"class":77},[49,166564,166565],{"class":73}," name, age, score\n",[49,166567,166568],{"class":51,"line":241},[49,166569,399],{"emptyLinePlaceholder":398},[49,166571,166572],{"class":51,"line":1920},[49,166573,399],{"emptyLinePlaceholder":398},[49,166575,166576,166578,166580],{"class":51,"line":2011},[49,166577,161837],{"class":73},[49,166579,78],{"class":77},[49,166581,166582],{"class":73}," get_info()\n",[49,166584,166585,166587],{"class":51,"line":2017},[49,166586,30946],{"class":159},[49,166588,77116],{"class":73},[49,166590,166591,166593,166595,166597],{"class":51,"line":2029},[49,166592,30946],{"class":159},[49,166594,841],{"class":73},[49,166596,103638],{"class":159},[49,166598,166599],{"class":73},"(result))\n",[14,166601,166602],{},"可以直接解包：",[40,166604,166606],{"className":30909,"code":166605,"language":30911,"meta":27,"style":27},"name, age, score = get_info()\nprint(name, age, score)\n",[46,166607,166608,166617],{"__ignoreMap":27},[49,166609,166610,166613,166615],{"class":51,"line":52},[49,166611,166612],{"class":73},"name, age, score ",[49,166614,78],{"class":77},[49,166616,166582],{"class":73},[49,166618,166619,166621],{"class":51,"line":63},[49,166620,30946],{"class":159},[49,166622,166623],{"class":73},"(name, age, score)\n",[14,166625,166626],{},"返回多个值适合函数需要同时给出多个结果时使用。",[782,166628,166630],{"id":166629},"_72-位置参数","7.2 位置参数",[14,166632,166633],{},"位置参数按顺序传递。",[40,166635,166637],{"className":30909,"code":166636,"language":30911,"meta":27,"style":27},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[46,166638,166639,166647,166675,166679,166683],{"__ignoreMap":27},[49,166640,166641,166643,166645],{"class":51,"line":52},[49,166642,32478],{"class":77},[49,166644,149903],{"class":55},[49,166646,149906],{"class":73},[49,166648,166649,166651,166653,166655,166657,166659,166661,166663,166665,166667,166669,166671,166673],{"class":51,"line":63},[49,166650,31830],{"class":159},[49,166652,841],{"class":73},[49,166654,891],{"class":77},[49,166656,149917],{"class":59},[49,166658,1725],{"class":159},[49,166660,80341],{"class":73},[49,166662,1775],{"class":159},[49,166664,149926],{"class":59},[49,166666,1725],{"class":159},[49,166668,70752],{"class":73},[49,166670,1775],{"class":159},[49,166672,149935],{"class":59},[49,166674,847],{"class":73},[49,166676,166677],{"class":51,"line":70},[49,166678,399],{"emptyLinePlaceholder":398},[49,166680,166681],{"class":51,"line":219},[49,166682,399],{"emptyLinePlaceholder":398},[49,166684,166685,166688,166690,166692,166694],{"class":51,"line":233},[49,166686,166687],{"class":73},"introduce(",[49,166689,150419],{"class":59},[49,166691,13132],{"class":73},[49,166693,1479],{"class":159},[49,166695,847],{"class":73},[14,166697,166698],{},"顺序错了就会得到错误含义：",[40,166700,166702],{"className":30909,"code":166701,"language":30911,"meta":27,"style":27},"introduce(18, \"小明\")\n",[46,166703,166704],{"__ignoreMap":27},[49,166705,166706,166708,166710,166712,166714],{"class":51,"line":52},[49,166707,166687],{"class":73},[49,166709,1479],{"class":159},[49,166711,13132],{"class":73},[49,166713,150419],{"class":59},[49,166715,847],{"class":73},[782,166717,166719],{"id":166718},"_73-关键字参数","7.3 关键字参数",[14,166721,166722],{},"关键字参数按参数名传递。",[40,166724,166726],{"className":30909,"code":166725,"language":30911,"meta":27,"style":27},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[46,166727,166728,166748],{"__ignoreMap":27},[49,166729,166730,166732,166734,166736,166738,166740,166742,166744,166746],{"class":51,"line":52},[49,166731,166687],{"class":73},[49,166733,80341],{"class":5913},[49,166735,78],{"class":77},[49,166737,150419],{"class":59},[49,166739,13132],{"class":73},[49,166741,70752],{"class":5913},[49,166743,78],{"class":77},[49,166745,1479],{"class":159},[49,166747,847],{"class":73},[49,166749,166750,166752,166754,166756,166758,166760,166762,166764,166766],{"class":51,"line":63},[49,166751,166687],{"class":73},[49,166753,70752],{"class":5913},[49,166755,78],{"class":77},[49,166757,1479],{"class":159},[49,166759,13132],{"class":73},[49,166761,80341],{"class":5913},[49,166763,78],{"class":77},[49,166765,150419],{"class":59},[49,166767,847],{"class":73},[14,166769,118465],{},[30,166771,166772,166775],{},[33,166773,166774],{},"顺序不容易错。",[33,166776,166777],{},"调用时可读性更强。",[782,166779,166781],{"id":166780},"_74-默认参数","7.4 默认参数",[14,166783,166784],{},"默认参数给参数设置默认值。",[40,166786,166788],{"className":30909,"code":166787,"language":30911,"meta":27,"style":27},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[46,166789,166790,166806,166836,166840,166844,166854],{"__ignoreMap":27},[49,166791,166792,166794,166796,166799,166801,166804],{"class":51,"line":52},[49,166793,32478],{"class":77},[49,166795,122624],{"class":55},[49,166797,166798],{"class":73},"(host, port",[49,166800,78],{"class":77},[49,166802,166803],{"class":159},"3306",[49,166805,31317],{"class":73},[49,166807,166808,166810,166812,166814,166817,166819,166821,166823,166825,166827,166830,166832,166834],{"class":51,"line":63},[49,166809,31830],{"class":159},[49,166811,841],{"class":73},[49,166813,891],{"class":77},[49,166815,166816],{"class":59},"\"连接",[49,166818,1725],{"class":159},[49,166820,732],{"class":73},[49,166822,1775],{"class":159},[49,166824,1688],{"class":59},[49,166826,1725],{"class":159},[49,166828,166829],{"class":73},"port",[49,166831,1775],{"class":159},[49,166833,1080],{"class":59},[49,166835,847],{"class":73},[49,166837,166838],{"class":51,"line":70},[49,166839,399],{"emptyLinePlaceholder":398},[49,166841,166842],{"class":51,"line":219},[49,166843,399],{"emptyLinePlaceholder":398},[49,166845,166846,166849,166852],{"class":51,"line":233},[49,166847,166848],{"class":73},"connect(",[49,166850,166851],{"class":59},"\"localhost\"",[49,166853,847],{"class":73},[49,166855,166856,166858,166860,166862,166865],{"class":51,"line":241},[49,166857,166848],{"class":73},[49,166859,166851],{"class":59},[49,166861,13132],{"class":73},[49,166863,166864],{"class":159},"6379",[49,166866,847],{"class":73},[14,166868,166869],{},"注意：默认参数必须放在非默认参数后面。",[14,166871,166872],{},"错误：",[40,166874,166876],{"className":30909,"code":166875,"language":30911,"meta":27,"style":27},"def connect(port=3306, host):\n    pass\n",[46,166877,166878,166894],{"__ignoreMap":27},[49,166879,166880,166882,166884,166887,166889,166891],{"class":51,"line":52},[49,166881,32478],{"class":77},[49,166883,122624],{"class":55},[49,166885,166886],{"class":73},"(port",[49,166888,78],{"class":77},[49,166890,166803],{"class":159},[49,166892,166893],{"class":73},", host):\n",[49,166895,166896],{"class":51,"line":63},[49,166897,150068],{"class":77},[14,166899,166900],{},"正确：",[40,166902,166904],{"className":30909,"code":166903,"language":30911,"meta":27,"style":27},"def connect(host, port=3306):\n    pass\n",[46,166905,166906,166920],{"__ignoreMap":27},[49,166907,166908,166910,166912,166914,166916,166918],{"class":51,"line":52},[49,166909,32478],{"class":77},[49,166911,122624],{"class":55},[49,166913,166798],{"class":73},[49,166915,78],{"class":77},[49,166917,166803],{"class":159},[49,166919,31317],{"class":73},[49,166921,166922],{"class":51,"line":63},[49,166923,150068],{"class":77},[782,166925,166927],{"id":166926},"_75-默认参数的坑","7.5 默认参数的坑",[14,166929,166930],{},"不要使用可变对象作为默认参数。",[14,166932,158154],{},[40,166934,166936],{"className":30909,"code":166935,"language":30911,"meta":27,"style":27},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[46,166937,166938,166953,166958,166965,166969,166973,166984],{"__ignoreMap":27},[49,166939,166940,166942,166945,166948,166950],{"class":51,"line":52},[49,166941,32478],{"class":77},[49,166943,166944],{"class":55}," add_item",[49,166946,166947],{"class":73},"(item, items",[49,166949,78],{"class":77},[49,166951,166952],{"class":73},"[]):\n",[49,166954,166955],{"class":51,"line":63},[49,166956,166957],{"class":73},"    items.append(item)\n",[49,166959,166960,166962],{"class":51,"line":70},[49,166961,4787],{"class":77},[49,166963,166964],{"class":73}," items\n",[49,166966,166967],{"class":51,"line":219},[49,166968,399],{"emptyLinePlaceholder":398},[49,166970,166971],{"class":51,"line":233},[49,166972,399],{"emptyLinePlaceholder":398},[49,166974,166975,166977,166980,166982],{"class":51,"line":241},[49,166976,30946],{"class":159},[49,166978,166979],{"class":73},"(add_item(",[49,166981,165856],{"class":59},[49,166983,31028],{"class":73},[49,166985,166986,166988,166990,166993],{"class":51,"line":1920},[49,166987,30946],{"class":159},[49,166989,166979],{"class":73},[49,166991,166992],{"class":59},"\"b\"",[49,166994,31028],{"class":73},[14,166996,166997],{},"第二次调用会复用第一次的列表。",[14,166999,156419],{},[40,167001,167003],{"className":30909,"code":167002,"language":30911,"meta":27,"style":27},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[46,167004,167005,167019,167032,167041,167045],{"__ignoreMap":27},[49,167006,167007,167009,167011,167013,167015,167017],{"class":51,"line":52},[49,167008,32478],{"class":77},[49,167010,166944],{"class":55},[49,167012,166947],{"class":73},[49,167014,78],{"class":77},[49,167016,96217],{"class":159},[49,167018,31317],{"class":73},[49,167020,167021,167023,167026,167028,167030],{"class":51,"line":63},[49,167022,3798],{"class":77},[49,167024,167025],{"class":73}," items ",[49,167027,39458],{"class":77},[49,167029,39464],{"class":159},[49,167031,4436],{"class":73},[49,167033,167034,167037,167039],{"class":51,"line":70},[49,167035,167036],{"class":73},"        items ",[49,167038,78],{"class":77},[49,167040,52369],{"class":73},[49,167042,167043],{"class":51,"line":219},[49,167044,166957],{"class":73},[49,167046,167047,167049],{"class":51,"line":233},[49,167048,4787],{"class":77},[49,167050,166964],{"class":73},[782,167052,167054],{"id":167053},"_76-不定长参数","7.6 不定长参数",[18,167056,167058],{"id":167057},"_761-args","7.6.1 *args",[14,167060,167061,167064],{},[46,167062,167063],{},"*args"," 接收任意数量的位置参数，得到元组。",[40,167066,167068],{"className":30909,"code":167067,"language":30911,"meta":27,"style":27},"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",[46,167069,167070,167083,167091,167102,167111,167117,167121,167125,167144],{"__ignoreMap":27},[49,167071,167072,167074,167076,167078,167080],{"class":51,"line":52},[49,167073,32478],{"class":77},[49,167075,5906],{"class":55},[49,167077,841],{"class":73},[49,167079,1284],{"class":77},[49,167081,167082],{"class":73},"args):\n",[49,167084,167085,167087,167089],{"class":51,"line":63},[49,167086,159838],{"class":73},[49,167088,78],{"class":77},[49,167090,47864],{"class":159},[49,167092,167093,167095,167097,167099],{"class":51,"line":70},[49,167094,3898],{"class":77},[49,167096,156711],{"class":73},[49,167098,26732],{"class":77},[49,167100,167101],{"class":73}," args:\n",[49,167103,167104,167106,167108],{"class":51,"line":219},[49,167105,160513],{"class":73},[49,167107,10174],{"class":77},[49,167109,167110],{"class":73}," num\n",[49,167112,167113,167115],{"class":51,"line":233},[49,167114,4787],{"class":77},[49,167116,162818],{"class":73},[49,167118,167119],{"class":51,"line":241},[49,167120,399],{"emptyLinePlaceholder":398},[49,167122,167123],{"class":51,"line":1920},[49,167124,399],{"emptyLinePlaceholder":398},[49,167126,167127,167129,167132,167134,167136,167138,167140,167142],{"class":51,"line":2011},[49,167128,30946],{"class":159},[49,167130,167131],{"class":73},"(add(",[49,167133,1047],{"class":159},[49,167135,13132],{"class":73},[49,167137,915],{"class":159},[49,167139,13132],{"class":73},[49,167141,909],{"class":159},[49,167143,31028],{"class":73},[49,167145,167146,167148,167150,167152,167154,167156,167158,167160,167162,167164,167166,167168],{"class":51,"line":2017},[49,167147,30946],{"class":159},[49,167149,167131],{"class":73},[49,167151,1047],{"class":159},[49,167153,13132],{"class":73},[49,167155,915],{"class":159},[49,167157,13132],{"class":73},[49,167159,909],{"class":159},[49,167161,13132],{"class":73},[49,167163,1122],{"class":159},[49,167165,13132],{"class":73},[49,167167,1148],{"class":159},[49,167169,31028],{"class":73},[18,167171,167173],{"id":167172},"_762-kwargs","7.6.2 **kwargs",[14,167175,167176,167179],{},[46,167177,167178],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[40,167181,167183],{"className":30909,"code":167182,"language":30911,"meta":27,"style":27},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[46,167184,167185,167198,167209,167215,167219,167223],{"__ignoreMap":27},[49,167186,167187,167189,167191,167193,167195],{"class":51,"line":52},[49,167188,32478],{"class":77},[49,167190,162476],{"class":55},[49,167192,841],{"class":73},[49,167194,11358],{"class":77},[49,167196,167197],{"class":73},"kwargs):\n",[49,167199,167200,167202,167204,167206],{"class":51,"line":63},[49,167201,3898],{"class":77},[49,167203,165316],{"class":73},[49,167205,26732],{"class":77},[49,167207,167208],{"class":73}," kwargs.items():\n",[49,167210,167211,167213],{"class":51,"line":70},[49,167212,32982],{"class":159},[49,167214,165328],{"class":73},[49,167216,167217],{"class":51,"line":219},[49,167218,399],{"emptyLinePlaceholder":398},[49,167220,167221],{"class":51,"line":233},[49,167222,399],{"emptyLinePlaceholder":398},[49,167224,167225,167227,167229,167231,167233,167235,167237,167239,167241,167243,167245,167247,167249],{"class":51,"line":241},[49,167226,162541],{"class":73},[49,167228,80341],{"class":5913},[49,167230,78],{"class":77},[49,167232,150419],{"class":59},[49,167234,13132],{"class":73},[49,167236,70752],{"class":5913},[49,167238,78],{"class":77},[49,167240,1479],{"class":159},[49,167242,13132],{"class":73},[49,167244,70803],{"class":5913},[49,167246,78],{"class":77},[49,167248,69800],{"class":59},[49,167250,847],{"class":73},[782,167252,167254],{"id":167253},"_77-参数解包","7.7 参数解包",[14,167256,167257],{},"列表或元组解包为位置参数：",[40,167259,167261],{"className":30909,"code":167260,"language":30911,"meta":27,"style":27},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[46,167262,167263,167272,167287,167291,167295,167315],{"__ignoreMap":27},[49,167264,167265,167267,167269],{"class":51,"line":52},[49,167266,32478],{"class":77},[49,167268,5906],{"class":55},[49,167270,167271],{"class":73},"(a, b, c):\n",[49,167273,167274,167276,167278,167280,167282,167284],{"class":51,"line":63},[49,167275,4787],{"class":77},[49,167277,11566],{"class":73},[49,167279,1310],{"class":77},[49,167281,11579],{"class":73},[49,167283,1310],{"class":77},[49,167285,167286],{"class":73}," c\n",[49,167288,167289],{"class":51,"line":70},[49,167290,399],{"emptyLinePlaceholder":398},[49,167292,167293],{"class":51,"line":219},[49,167294,399],{"emptyLinePlaceholder":398},[49,167296,167297,167299,167301,167303,167305,167307,167309,167311,167313],{"class":51,"line":233},[49,167298,164631],{"class":73},[49,167300,78],{"class":77},[49,167302,52757],{"class":73},[49,167304,1047],{"class":159},[49,167306,13132],{"class":73},[49,167308,915],{"class":159},[49,167310,13132],{"class":73},[49,167312,909],{"class":159},[49,167314,33777],{"class":73},[49,167316,167317,167319,167321,167323],{"class":51,"line":241},[49,167318,30946],{"class":159},[49,167320,167131],{"class":73},[49,167322,1284],{"class":77},[49,167324,167325],{"class":73},"nums))\n",[14,167327,167328],{},"字典解包为关键字参数：",[40,167330,167332],{"className":30909,"code":167331,"language":30911,"meta":27,"style":27},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[46,167333,167334,167342,167368,167372,167376,167400],{"__ignoreMap":27},[49,167335,167336,167338,167340],{"class":51,"line":52},[49,167337,32478],{"class":77},[49,167339,149903],{"class":55},[49,167341,149906],{"class":73},[49,167343,167344,167346,167348,167350,167352,167354,167356,167358,167360,167362,167364,167366],{"class":51,"line":63},[49,167345,31830],{"class":159},[49,167347,841],{"class":73},[49,167349,891],{"class":77},[49,167351,1080],{"class":59},[49,167353,1725],{"class":159},[49,167355,80341],{"class":73},[49,167357,1775],{"class":159},[49,167359,5145],{"class":159},[49,167361,70752],{"class":73},[49,167363,1775],{"class":159},[49,167365,1080],{"class":59},[49,167367,847],{"class":73},[49,167369,167370],{"class":51,"line":70},[49,167371,399],{"emptyLinePlaceholder":398},[49,167373,167374],{"class":51,"line":219},[49,167375,399],{"emptyLinePlaceholder":398},[49,167377,167378,167380,167382,167384,167386,167388,167390,167392,167394,167396,167398],{"class":51,"line":233},[49,167379,116845],{"class":73},[49,167381,78],{"class":77},[49,167383,5145],{"class":73},[49,167385,63210],{"class":59},[49,167387,51968],{"class":73},[49,167389,150419],{"class":59},[49,167391,13132],{"class":73},[49,167393,69655],{"class":59},[49,167395,51968],{"class":73},[49,167397,1479],{"class":159},[49,167399,2264],{"class":73},[49,167401,167402,167404,167406],{"class":51,"line":241},[49,167403,166687],{"class":73},[49,167405,11358],{"class":77},[49,167407,167408],{"class":73},"info)\n",[782,167410,167412],{"id":167411},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,167414,167415,167418],{},[46,167416,167417],{},"lambda"," 用于定义简单匿名函数。",[40,167420,167422],{"className":30909,"code":167421,"language":30911,"meta":27,"style":27},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[46,167423,167424,167441],{"__ignoreMap":27},[49,167425,167426,167429,167431,167434,167437,167439],{"class":51,"line":52},[49,167427,167428],{"class":73},"add ",[49,167430,78],{"class":77},[49,167432,167433],{"class":77}," lambda",[49,167435,167436],{"class":73}," a, b: a ",[49,167438,1310],{"class":77},[49,167440,151635],{"class":73},[49,167442,167443,167445,167447,167449,167451,167453],{"class":51,"line":63},[49,167444,30946],{"class":159},[49,167446,167131],{"class":73},[49,167448,1047],{"class":159},[49,167450,13132],{"class":73},[49,167452,915],{"class":159},[49,167454,31028],{"class":73},[14,167456,167457],{},"常和排序、过滤等函数一起使用。",[14,167459,167460],{},"按分数排序：",[40,167462,167464],{"className":30909,"code":167463,"language":30911,"meta":27,"style":27},"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",[46,167465,167466,167474,167494,167514,167534,167538,167542,167565],{"__ignoreMap":27},[49,167467,167468,167470,167472],{"class":51,"line":52},[49,167469,160247],{"class":73},[49,167471,78],{"class":77},[49,167473,55978],{"class":73},[49,167475,167476,167478,167480,167482,167484,167486,167488,167490,167492],{"class":51,"line":63},[49,167477,148916],{"class":73},[49,167479,63210],{"class":59},[49,167481,51968],{"class":73},[49,167483,150419],{"class":59},[49,167485,13132],{"class":73},[49,167487,152003],{"class":59},[49,167489,51968],{"class":73},[49,167491,1818],{"class":159},[49,167493,5627],{"class":73},[49,167495,167496,167498,167500,167502,167504,167506,167508,167510,167512],{"class":51,"line":70},[49,167497,148916],{"class":73},[49,167499,63210],{"class":59},[49,167501,51968],{"class":73},[49,167503,151467],{"class":59},[49,167505,13132],{"class":73},[49,167507,152003],{"class":59},[49,167509,51968],{"class":73},[49,167511,1640],{"class":159},[49,167513,5627],{"class":73},[49,167515,167516,167518,167520,167522,167524,167526,167528,167530,167532],{"class":51,"line":219},[49,167517,148916],{"class":73},[49,167519,63210],{"class":59},[49,167521,51968],{"class":73},[49,167523,160262],{"class":59},[49,167525,13132],{"class":73},[49,167527,152003],{"class":59},[49,167529,51968],{"class":73},[49,167531,1235],{"class":159},[49,167533,5627],{"class":73},[49,167535,167536],{"class":51,"line":233},[49,167537,33777],{"class":73},[49,167539,167540],{"class":51,"line":241},[49,167541,399],{"emptyLinePlaceholder":398},[49,167543,167544,167547,167549,167551,167553,167555,167557,167559,167561,167563],{"class":51,"line":1920},[49,167545,167546],{"class":73},"students.sort(",[49,167548,154477],{"class":5913},[49,167550,154480],{"class":77},[49,167552,154483],{"class":73},[49,167554,152003],{"class":59},[49,167556,112733],{"class":73},[49,167558,164059],{"class":5913},[49,167560,78],{"class":77},[49,167562,32007],{"class":159},[49,167564,847],{"class":73},[49,167566,167567,167569],{"class":51,"line":2011},[49,167568,30946],{"class":159},[49,167570,165526],{"class":73},[14,167572,167573,167574,167576],{},"如果逻辑复杂，不要硬写 ",[46,167575,167417],{},"，定义普通函数更清晰。",[782,167578,167580],{"id":167579},"_79-函数作为参数","7.9 函数作为参数",[14,167582,167583],{},"函数可以作为参数传给另一个函数。",[40,167585,167587],{"className":30909,"code":167586,"language":30911,"meta":27,"style":27},"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",[46,167588,167589,167597,167607,167611,167615,167625,167632,167636,167640],{"__ignoreMap":27},[49,167590,167591,167593,167595],{"class":51,"line":52},[49,167592,32478],{"class":77},[49,167594,5906],{"class":55},[49,167596,151624],{"class":73},[49,167598,167599,167601,167603,167605],{"class":51,"line":63},[49,167600,4787],{"class":77},[49,167602,11566],{"class":73},[49,167604,1310],{"class":77},[49,167606,151635],{"class":73},[49,167608,167609],{"class":51,"line":70},[49,167610,399],{"emptyLinePlaceholder":398},[49,167612,167613],{"class":51,"line":219},[49,167614,399],{"emptyLinePlaceholder":398},[49,167616,167617,167619,167622],{"class":51,"line":233},[49,167618,32478],{"class":77},[49,167620,167621],{"class":55}," calculate",[49,167623,167624],{"class":73},"(a, b, func):\n",[49,167626,167627,167629],{"class":51,"line":241},[49,167628,4787],{"class":77},[49,167630,167631],{"class":73}," func(a, b)\n",[49,167633,167634],{"class":51,"line":1920},[49,167635,399],{"emptyLinePlaceholder":398},[49,167637,167638],{"class":51,"line":2011},[49,167639,399],{"emptyLinePlaceholder":398},[49,167641,167642,167644,167647,167649,167651,167653],{"class":51,"line":2017},[49,167643,30946],{"class":159},[49,167645,167646],{"class":73},"(calculate(",[49,167648,1275],{"class":159},[49,167650,13132],{"class":73},[49,167652,1529],{"class":159},[49,167654,167655],{"class":73},", add))\n",[14,167657,167658],{},"这种思想在排序、回调、框架中经常出现。",[782,167660,167662],{"id":167661},"_710-mapfiltersorted","7.10 map、filter、sorted",[18,167664,167666],{"id":167665},"_7101-map","7.10.1 map",[14,167668,167669,167671],{},[46,167670,74575],{}," 对每个元素执行函数。",[40,167673,167675],{"className":30909,"code":167674,"language":30911,"meta":27,"style":27},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[46,167676,167677,167701,167724],{"__ignoreMap":27},[49,167678,167679,167681,167683,167685,167687,167689,167691,167693,167695,167697,167699],{"class":51,"line":52},[49,167680,164631],{"class":73},[49,167682,78],{"class":77},[49,167684,52757],{"class":73},[49,167686,1047],{"class":159},[49,167688,13132],{"class":73},[49,167690,915],{"class":159},[49,167692,13132],{"class":73},[49,167694,909],{"class":159},[49,167696,13132],{"class":73},[49,167698,1122],{"class":159},[49,167700,33777],{"class":73},[49,167702,167703,167705,167707,167710,167712,167714,167717,167719,167721],{"class":51,"line":63},[49,167704,161837],{"class":73},[49,167706,78],{"class":77},[49,167708,167709],{"class":159}," map",[49,167711,841],{"class":73},[49,167713,167417],{"class":77},[49,167715,167716],{"class":73}," x: x ",[49,167718,1284],{"class":77},[49,167720,15452],{"class":159},[49,167722,167723],{"class":73},", nums)\n",[49,167725,167726,167728,167730,167732],{"class":51,"line":70},[49,167727,30946],{"class":159},[49,167729,841],{"class":73},[49,167731,154601],{"class":159},[49,167733,166599],{"class":73},[18,167735,167737],{"id":167736},"_7102-filter","7.10.2 filter",[14,167739,167740,167742],{},[46,167741,80582],{}," 保留满足条件的元素。",[40,167744,167746],{"className":30909,"code":167745,"language":30911,"meta":27,"style":27},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[46,167747,167748,167776,167801],{"__ignoreMap":27},[49,167749,167750,167752,167754,167756,167758,167760,167762,167764,167766,167768,167770,167772,167774],{"class":51,"line":52},[49,167751,164631],{"class":73},[49,167753,78],{"class":77},[49,167755,52757],{"class":73},[49,167757,1047],{"class":159},[49,167759,13132],{"class":73},[49,167761,915],{"class":159},[49,167763,13132],{"class":73},[49,167765,909],{"class":159},[49,167767,13132],{"class":73},[49,167769,1122],{"class":159},[49,167771,13132],{"class":73},[49,167773,1148],{"class":159},[49,167775,33777],{"class":73},[49,167777,167778,167780,167782,167785,167787,167789,167791,167793,167795,167797,167799],{"class":51,"line":63},[49,167779,161837],{"class":73},[49,167781,78],{"class":77},[49,167783,167784],{"class":159}," filter",[49,167786,841],{"class":73},[49,167788,167417],{"class":77},[49,167790,167716],{"class":73},[49,167792,1157],{"class":77},[49,167794,15452],{"class":159},[49,167796,102090],{"class":77},[49,167798,4790],{"class":159},[49,167800,167723],{"class":73},[49,167802,167803,167805,167807,167809],{"class":51,"line":70},[49,167804,30946],{"class":159},[49,167806,841],{"class":73},[49,167808,154601],{"class":159},[49,167810,166599],{"class":73},[18,167812,167814],{"id":167813},"_7103-sorted","7.10.3 sorted",[14,167816,167817,167819],{},[46,167818,165767],{}," 返回排序后的新列表。",[40,167821,167823],{"className":30909,"code":167822,"language":30911,"meta":27,"style":27},"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",[46,167824,167825,167833,167853,167873,167893,167897,167901,167930],{"__ignoreMap":27},[49,167826,167827,167829,167831],{"class":51,"line":52},[49,167828,160247],{"class":73},[49,167830,78],{"class":77},[49,167832,55978],{"class":73},[49,167834,167835,167837,167839,167841,167843,167845,167847,167849,167851],{"class":51,"line":63},[49,167836,148916],{"class":73},[49,167838,63210],{"class":59},[49,167840,51968],{"class":73},[49,167842,150419],{"class":59},[49,167844,13132],{"class":73},[49,167846,152003],{"class":59},[49,167848,51968],{"class":73},[49,167850,1818],{"class":159},[49,167852,5627],{"class":73},[49,167854,167855,167857,167859,167861,167863,167865,167867,167869,167871],{"class":51,"line":70},[49,167856,148916],{"class":73},[49,167858,63210],{"class":59},[49,167860,51968],{"class":73},[49,167862,151467],{"class":59},[49,167864,13132],{"class":73},[49,167866,152003],{"class":59},[49,167868,51968],{"class":73},[49,167870,1640],{"class":159},[49,167872,5627],{"class":73},[49,167874,167875,167877,167879,167881,167883,167885,167887,167889,167891],{"class":51,"line":219},[49,167876,148916],{"class":73},[49,167878,63210],{"class":59},[49,167880,51968],{"class":73},[49,167882,160262],{"class":59},[49,167884,13132],{"class":73},[49,167886,152003],{"class":59},[49,167888,51968],{"class":73},[49,167890,1235],{"class":159},[49,167892,5627],{"class":73},[49,167894,167895],{"class":51,"line":233},[49,167896,33777],{"class":73},[49,167898,167899],{"class":51,"line":241},[49,167900,399],{"emptyLinePlaceholder":398},[49,167902,167903,167905,167907,167909,167912,167914,167916,167918,167920,167922,167924,167926,167928],{"class":51,"line":1920},[49,167904,161837],{"class":73},[49,167906,78],{"class":77},[49,167908,164135],{"class":159},[49,167910,167911],{"class":73},"(students, ",[49,167913,154477],{"class":5913},[49,167915,154480],{"class":77},[49,167917,154483],{"class":73},[49,167919,152003],{"class":59},[49,167921,112733],{"class":73},[49,167923,164059],{"class":5913},[49,167925,78],{"class":77},[49,167927,32007],{"class":159},[49,167929,847],{"class":73},[49,167931,167932,167934],{"class":51,"line":2011},[49,167933,30946],{"class":159},[49,167935,77116],{"class":73},[782,167937,167939],{"id":167938},"_711-闭包入门","7.11 闭包入门",[14,167941,167942],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[40,167944,167946],{"className":30909,"code":167945,"language":30911,"meta":27,"style":27},"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",[46,167947,167948,167958,167968,167979,167983,167990,167994,167998,168012],{"__ignoreMap":27},[49,167949,167950,167952,167955],{"class":51,"line":52},[49,167951,32478],{"class":77},[49,167953,167954],{"class":55}," outer",[49,167956,167957],{"class":73},"(base):\n",[49,167959,167960,167962,167965],{"class":51,"line":63},[49,167961,31332],{"class":77},[49,167963,167964],{"class":55}," inner",[49,167966,167967],{"class":73},"(num):\n",[49,167969,167970,167972,167975,167977],{"class":51,"line":70},[49,167971,15449],{"class":77},[49,167973,167974],{"class":73}," base ",[49,167976,1310],{"class":77},[49,167978,167110],{"class":73},[49,167980,167981],{"class":51,"line":219},[49,167982,399],{"emptyLinePlaceholder":398},[49,167984,167985,167987],{"class":51,"line":233},[49,167986,4787],{"class":77},[49,167988,167989],{"class":73}," inner\n",[49,167991,167992],{"class":51,"line":241},[49,167993,399],{"emptyLinePlaceholder":398},[49,167995,167996],{"class":51,"line":1920},[49,167997,399],{"emptyLinePlaceholder":398},[49,167999,168000,168003,168005,168008,168010],{"class":51,"line":2011},[49,168001,168002],{"class":73},"add_10 ",[49,168004,78],{"class":77},[49,168006,168007],{"class":73}," outer(",[49,168009,1275],{"class":159},[49,168011,847],{"class":73},[49,168013,168014,168016,168019,168021],{"class":51,"line":2017},[49,168015,30946],{"class":159},[49,168017,168018],{"class":73},"(add_10(",[49,168020,1148],{"class":159},[49,168022,31028],{"class":73},[14,168024,168025],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[782,168027,168029],{"id":168028},"_712-装饰器入门","7.12 装饰器入门",[14,168031,168032],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[40,168034,168036],{"className":30909,"code":168035,"language":30911,"meta":27,"style":27},"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",[46,168037,168038,168047,168056,168067,168072,168083,168087,168094,168098,168102,168107,168115,168125,168129,168133],{"__ignoreMap":27},[49,168039,168040,168042,168044],{"class":51,"line":52},[49,168041,32478],{"class":77},[49,168043,87722],{"class":55},[49,168045,168046],{"class":73},"(func):\n",[49,168048,168049,168051,168054],{"class":51,"line":63},[49,168050,31332],{"class":77},[49,168052,168053],{"class":55}," wrapper",[49,168055,32484],{"class":73},[49,168057,168058,168060,168062,168065],{"class":51,"line":70},[49,168059,32982],{"class":159},[49,168061,841],{"class":73},[49,168063,168064],{"class":59},"\"函数开始执行\"",[49,168066,847],{"class":73},[49,168068,168069],{"class":51,"line":219},[49,168070,168071],{"class":73},"        func()\n",[49,168073,168074,168076,168078,168081],{"class":51,"line":233},[49,168075,32982],{"class":159},[49,168077,841],{"class":73},[49,168079,168080],{"class":59},"\"函数执行结束\"",[49,168082,847],{"class":73},[49,168084,168085],{"class":51,"line":241},[49,168086,399],{"emptyLinePlaceholder":398},[49,168088,168089,168091],{"class":51,"line":1920},[49,168090,4787],{"class":77},[49,168092,168093],{"class":73}," wrapper\n",[49,168095,168096],{"class":51,"line":2011},[49,168097,399],{"emptyLinePlaceholder":398},[49,168099,168100],{"class":51,"line":2017},[49,168101,399],{"emptyLinePlaceholder":398},[49,168103,168104],{"class":51,"line":2029},[49,168105,168106],{"class":55},"@log\n",[49,168108,168109,168111,168113],{"class":51,"line":2311},[49,168110,32478],{"class":77},[49,168112,161527],{"class":55},[49,168114,32484],{"class":73},[49,168116,168117,168119,168121,168123],{"class":51,"line":2316},[49,168118,31830],{"class":159},[49,168120,841],{"class":73},[49,168122,6541],{"class":59},[49,168124,847],{"class":73},[49,168126,168127],{"class":51,"line":2322},[49,168128,399],{"emptyLinePlaceholder":398},[49,168130,168131],{"class":51,"line":2327},[49,168132,399],{"emptyLinePlaceholder":398},[49,168134,168135],{"class":51,"line":2341},[49,168136,161562],{"class":73},[14,168138,158805],{},[40,168140,168142],{"className":30909,"code":168141,"language":30911,"meta":27,"style":27},"say_hello = log(say_hello)\n",[46,168143,168144],{"__ignoreMap":27},[49,168145,168146,168149,168151],{"class":51,"line":52},[49,168147,168148],{"class":73},"say_hello ",[49,168150,78],{"class":77},[49,168152,168153],{"class":73}," log(say_hello)\n",[14,168155,168156],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[782,168158,168160],{"id":168159},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[40,168162,168164],{"className":30909,"code":168163,"language":30911,"meta":27,"style":27},"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",[46,168165,168166,168174,168191,168201,168220,168230,168237,168241,168247,168251,168255,168259,168267,168277,168281,168285],{"__ignoreMap":27},[49,168167,168168,168170,168172],{"class":51,"line":52},[49,168169,32478],{"class":77},[49,168171,87722],{"class":55},[49,168173,168046],{"class":73},[49,168175,168176,168178,168180,168182,168184,168187,168189],{"class":51,"line":63},[49,168177,31332],{"class":77},[49,168179,168053],{"class":55},[49,168181,841],{"class":73},[49,168183,1284],{"class":77},[49,168185,168186],{"class":73},"args, ",[49,168188,11358],{"class":77},[49,168190,167197],{"class":73},[49,168192,168193,168195,168197,168199],{"class":51,"line":70},[49,168194,32982],{"class":159},[49,168196,841],{"class":73},[49,168198,168064],{"class":59},[49,168200,847],{"class":73},[49,168202,168203,168206,168208,168211,168213,168215,168217],{"class":51,"line":219},[49,168204,168205],{"class":73},"        result ",[49,168207,78],{"class":77},[49,168209,168210],{"class":73}," func(",[49,168212,1284],{"class":77},[49,168214,168186],{"class":73},[49,168216,11358],{"class":77},[49,168218,168219],{"class":73},"kwargs)\n",[49,168221,168222,168224,168226,168228],{"class":51,"line":233},[49,168223,32982],{"class":159},[49,168225,841],{"class":73},[49,168227,168080],{"class":59},[49,168229,847],{"class":73},[49,168231,168232,168234],{"class":51,"line":241},[49,168233,15449],{"class":77},[49,168235,168236],{"class":73}," result\n",[49,168238,168239],{"class":51,"line":1920},[49,168240,399],{"emptyLinePlaceholder":398},[49,168242,168243,168245],{"class":51,"line":2011},[49,168244,4787],{"class":77},[49,168246,168093],{"class":73},[49,168248,168249],{"class":51,"line":2017},[49,168250,399],{"emptyLinePlaceholder":398},[49,168252,168253],{"class":51,"line":2029},[49,168254,399],{"emptyLinePlaceholder":398},[49,168256,168257],{"class":51,"line":2311},[49,168258,168106],{"class":55},[49,168260,168261,168263,168265],{"class":51,"line":2316},[49,168262,32478],{"class":77},[49,168264,5906],{"class":55},[49,168266,151624],{"class":73},[49,168268,168269,168271,168273,168275],{"class":51,"line":2322},[49,168270,4787],{"class":77},[49,168272,11566],{"class":73},[49,168274,1310],{"class":77},[49,168276,151635],{"class":73},[49,168278,168279],{"class":51,"line":2327},[49,168280,399],{"emptyLinePlaceholder":398},[49,168282,168283],{"class":51,"line":2341},[49,168284,399],{"emptyLinePlaceholder":398},[49,168286,168287,168289,168291,168293,168295,168297],{"class":51,"line":2346},[49,168288,30946],{"class":159},[49,168290,167131],{"class":73},[49,168292,1275],{"class":159},[49,168294,13132],{"class":73},[49,168296,1529],{"class":159},[49,168298,31028],{"class":73},[14,168300,168301,168302,101549,168304,168306],{},"这个写法使用 ",[46,168303,167063],{},[46,168305,167178],{}," 接收原函数的所有参数。",[782,168308,168310],{"id":168309},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,168312,123823],{},[30,168314,168315,168318,168321],{},[33,168316,168317],{},"给定一组学生数据。",[33,168319,168320],{},"封装函数，根据传入规则筛选学生。",[33,168322,168323],{},"筛选及格、优秀、未成年学生。",[14,168325,10732],{},[40,168327,168329],{"className":30909,"code":168328,"language":30911,"meta":27,"style":27},"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",[46,168330,168331,168339,168367,168395,168423,168427,168431,168435,168445,168453,168463,168470,168475,168481,168485,168489,168513,168536,168559,168563,168570,168577],{"__ignoreMap":27},[49,168332,168333,168335,168337],{"class":51,"line":52},[49,168334,160247],{"class":73},[49,168336,78],{"class":77},[49,168338,55978],{"class":73},[49,168340,168341,168343,168345,168347,168349,168351,168353,168355,168357,168359,168361,168363,168365],{"class":51,"line":63},[49,168342,148916],{"class":73},[49,168344,63210],{"class":59},[49,168346,51968],{"class":73},[49,168348,150419],{"class":59},[49,168350,13132],{"class":73},[49,168352,69655],{"class":59},[49,168354,51968],{"class":73},[49,168356,1479],{"class":159},[49,168358,13132],{"class":73},[49,168360,152003],{"class":59},[49,168362,51968],{"class":73},[49,168364,1818],{"class":159},[49,168366,5627],{"class":73},[49,168368,168369,168371,168373,168375,168377,168379,168381,168383,168385,168387,168389,168391,168393],{"class":51,"line":70},[49,168370,148916],{"class":73},[49,168372,63210],{"class":59},[49,168374,51968],{"class":73},[49,168376,151467],{"class":59},[49,168378,13132],{"class":73},[49,168380,69655],{"class":59},[49,168382,51968],{"class":73},[49,168384,1454],{"class":159},[49,168386,13132],{"class":73},[49,168388,152003],{"class":59},[49,168390,51968],{"class":73},[49,168392,1640],{"class":159},[49,168394,5627],{"class":73},[49,168396,168397,168399,168401,168403,168405,168407,168409,168411,168413,168415,168417,168419,168421],{"class":51,"line":219},[49,168398,148916],{"class":73},[49,168400,63210],{"class":59},[49,168402,51968],{"class":73},[49,168404,160262],{"class":59},[49,168406,13132],{"class":73},[49,168408,69655],{"class":59},[49,168410,51968],{"class":73},[49,168412,1504],{"class":159},[49,168414,13132],{"class":73},[49,168416,152003],{"class":59},[49,168418,51968],{"class":73},[49,168420,1711],{"class":159},[49,168422,5627],{"class":73},[49,168424,168425],{"class":51,"line":233},[49,168426,33777],{"class":73},[49,168428,168429],{"class":51,"line":241},[49,168430,399],{"emptyLinePlaceholder":398},[49,168432,168433],{"class":51,"line":1920},[49,168434,399],{"emptyLinePlaceholder":398},[49,168436,168437,168439,168442],{"class":51,"line":2011},[49,168438,32478],{"class":77},[49,168440,168441],{"class":55}," filter_students",[49,168443,168444],{"class":73},"(students, condition):\n",[49,168446,168447,168449,168451],{"class":51,"line":2017},[49,168448,161754],{"class":73},[49,168450,78],{"class":77},[49,168452,52369],{"class":73},[49,168454,168455,168457,168459,168461],{"class":51,"line":2029},[49,168456,3898],{"class":77},[49,168458,152668],{"class":73},[49,168460,26732],{"class":77},[49,168462,152673],{"class":73},[49,168464,168465,168467],{"class":51,"line":2311},[49,168466,3194],{"class":77},[49,168468,168469],{"class":73}," condition(student):\n",[49,168471,168472],{"class":51,"line":2316},[49,168473,168474],{"class":73},"            result.append(student)\n",[49,168476,168477,168479],{"class":51,"line":2322},[49,168478,4787],{"class":77},[49,168480,168236],{"class":73},[49,168482,168483],{"class":51,"line":2327},[49,168484,399],{"emptyLinePlaceholder":398},[49,168486,168487],{"class":51,"line":2341},[49,168488,399],{"emptyLinePlaceholder":398},[49,168490,168491,168493,168495,168498,168500,168503,168505,168507,168509,168511],{"class":51,"line":2346},[49,168492,166232],{"class":73},[49,168494,78],{"class":77},[49,168496,168497],{"class":73}," filter_students(students, ",[49,168499,167417],{"class":77},[49,168501,168502],{"class":73}," s: s[",[49,168504,152003],{"class":59},[49,168506,5140],{"class":73},[49,168508,2409],{"class":77},[49,168510,158368],{"class":159},[49,168512,847],{"class":73},[49,168514,168515,168518,168520,168522,168524,168526,168528,168530,168532,168534],{"class":51,"line":2352},[49,168516,168517],{"class":73},"excellent ",[49,168519,78],{"class":77},[49,168521,168497],{"class":73},[49,168523,167417],{"class":77},[49,168525,168502],{"class":73},[49,168527,152003],{"class":59},[49,168529,5140],{"class":73},[49,168531,2409],{"class":77},[49,168533,158319],{"class":159},[49,168535,847],{"class":73},[49,168537,168538,168541,168543,168545,168547,168549,168551,168553,168555,168557],{"class":51,"line":2373},[49,168539,168540],{"class":73},"under_age ",[49,168542,78],{"class":77},[49,168544,168497],{"class":73},[49,168546,167417],{"class":77},[49,168548,168502],{"class":73},[49,168550,69655],{"class":59},[49,168552,5140],{"class":73},[49,168554,1739],{"class":77},[49,168556,156816],{"class":159},[49,168558,847],{"class":73},[49,168560,168561],{"class":51,"line":2378},[49,168562,399],{"emptyLinePlaceholder":398},[49,168564,168565,168567],{"class":51,"line":2392},[49,168566,30946],{"class":159},[49,168568,168569],{"class":73},"(passed)\n",[49,168571,168572,168574],{"class":51,"line":2397},[49,168573,30946],{"class":159},[49,168575,168576],{"class":73},"(excellent)\n",[49,168578,168579,168581],{"class":51,"line":2426},[49,168580,30946],{"class":159},[49,168582,168583],{"class":73},"(under_age)\n",[782,168585,168587],{"id":168586},"_715-易错点","7.15 易错点",[30,168589,168590,168593,168601,168606,168617],{},[33,168591,168592],{},"默认参数不要写可变对象。",[33,168594,168595,168597,168598,168600],{},[46,168596,167063],{}," 是元组，",[46,168599,167178],{}," 是字典。",[33,168602,168603,168605],{},[46,168604,167417],{}," 只适合简单表达式。",[33,168607,168608,101549,168610,168612,168613,168616],{},[46,168609,74575],{},[46,168611,80582],{}," 的结果是迭代器，常用 ",[46,168614,168615],{},"list()"," 转换查看。",[33,168618,168619],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[782,168621,168623],{"id":168622},"_716-本章练习","7.16 本章练习",[30,168625,168626,168633,168639,168644,168649],{},[33,168627,168628,168629,168632],{},"写函数 ",[46,168630,168631],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[33,168634,168628,168635,168638],{},[46,168636,168637],{},"print_user(**kwargs)","，输出用户所有字段。",[33,168640,104897,168641,168643],{},[46,168642,167417],{}," 对学生列表按年龄排序。",[33,168645,104897,168646,168648],{},[46,168647,80582],{}," 找出成绩不及格的学生。",[33,168650,168651],{},"写一个装饰器，统计函数执行前后的提示信息。",[757,168653,168654],{},"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":27,"searchDepth":63,"depth":63,"links":168656},[168657,168658,168659,168660,168661,168662,168666,168667,168668,168669,168674,168675,168676,168677,168678,168679],{"id":166515,"depth":63,"text":166516},{"id":166629,"depth":63,"text":166630},{"id":166718,"depth":63,"text":166719},{"id":166780,"depth":63,"text":166781},{"id":166926,"depth":63,"text":166927},{"id":167053,"depth":63,"text":167054,"children":168663},[168664,168665],{"id":167057,"depth":70,"text":167058},{"id":167172,"depth":70,"text":167173},{"id":167253,"depth":63,"text":167254},{"id":167411,"depth":63,"text":167412},{"id":167579,"depth":63,"text":167580},{"id":167661,"depth":63,"text":167662,"children":168670},[168671,168672,168673],{"id":167665,"depth":70,"text":167666},{"id":167736,"depth":70,"text":167737},{"id":167813,"depth":70,"text":167814},{"id":167938,"depth":63,"text":167939},{"id":168028,"depth":63,"text":168029},{"id":168159,"depth":63,"text":168160},{"id":168309,"depth":63,"text":168310},{"id":168586,"depth":63,"text":168587},{"id":168622,"depth":63,"text":168623},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166507,"description":24072},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168686,"title":168687,"body":168688,"description":24072,"extension":766,"meta":171207,"navigation":398,"path":171208,"seo":171209,"stem":171210,"__hash__":171211},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168689,"toc":171182},[168690,168693,168697,168700,168703,168734,168738,168742,168745,168772,168776,168779,168830,168833,168848,168851,168886,168890,168892,168916,168919,168979,168983,168987,168990,169047,169050,169070,169074,169077,169140,169144,169147,169203,169210,169234,169238,169241,169304,169308,169313,169364,169367,169371,169376,169443,169446,169528,169532,169537,169588,169591,169595,169598,169601,169609,169612,169658,169661,169707,169711,169717,169761,169764,169810,169813,169853,169856,169917,169921,169924,170014,170017,170159,170162,170229,170233,170236,170239,170380,170383,170461,170464,170640,170644,170646,170657,170659,170858,170862,171106,171110,171144,171148,171179],[10,168691,168687],{"id":168692},"_8-文件操作",[782,168694,168696],{"id":168695},"_81-文件操作的意义","8.1 文件操作的意义",[14,168698,168699],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168701,168702],{},"常见文件类型：",[30,168704,168705,168711,168717,168723,168729],{},[33,168706,168707,168710],{},[46,168708,168709],{},".txt","：普通文本。",[33,168712,168713,168716],{},[46,168714,168715],{},".csv","：表格文本。",[33,168718,168719,168722],{},[46,168720,168721],{},".json","：结构化数据。",[33,168724,168725,168728],{},[46,168726,168727],{},".log","：日志文件。",[33,168730,168731,168733],{},[46,168732,146883],{},"：Python 源代码。",[782,168735,168737],{"id":168736},"_82-路径","8.2 路径",[18,168739,168741],{"id":168740},"_821-相对路径","8.2.1 相对路径",[14,168743,168744],{},"相对当前运行目录：",[40,168746,168748],{"className":30909,"code":168747,"language":30911,"meta":27,"style":27},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[46,168749,168750],{"__ignoreMap":27},[49,168751,168752,168754,168756,168758,168760,168762,168764,168766,168768,168770],{"class":51,"line":52},[49,168753,87446],{"class":159},[49,168755,841],{"class":73},[49,168757,147327],{"class":59},[49,168759,13132],{"class":73},[49,168761,147332],{"class":59},[49,168763,13132],{"class":73},[49,168765,147337],{"class":5913},[49,168767,78],{"class":77},[49,168769,147342],{"class":59},[49,168771,847],{"class":73},[18,168773,168775],{"id":168774},"_822-绝对路径","8.2.2 绝对路径",[14,168777,168778],{},"从根目录或盘符开始：",[40,168780,168782],{"className":30909,"code":168781,"language":30911,"meta":27,"style":27},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[46,168783,168784,168807],{"__ignoreMap":27},[49,168785,168786,168788,168790,168793,168795,168797,168799,168801,168803,168805],{"class":51,"line":52},[49,168787,87446],{"class":159},[49,168789,841],{"class":73},[49,168791,168792],{"class":59},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[49,168794,13132],{"class":73},[49,168796,147332],{"class":59},[49,168798,13132],{"class":73},[49,168800,147337],{"class":5913},[49,168802,78],{"class":77},[49,168804,147342],{"class":59},[49,168806,847],{"class":73},[49,168808,168809,168811,168813,168816,168818,168820,168822,168824,168826,168828],{"class":51,"line":63},[49,168810,87446],{"class":159},[49,168812,841],{"class":73},[49,168814,168815],{"class":59},"\"D:\u002Fdata\u002Fdata.txt\"",[49,168817,13132],{"class":73},[49,168819,147332],{"class":59},[49,168821,13132],{"class":73},[49,168823,147337],{"class":5913},[49,168825,78],{"class":77},[49,168827,147342],{"class":59},[49,168829,847],{"class":73},[14,168831,168832],{},"Windows 路径建议写成：",[40,168834,168836],{"className":30909,"code":168835,"language":30911,"meta":27,"style":27},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[46,168837,168838],{"__ignoreMap":27},[49,168839,168840,168843,168845],{"class":51,"line":52},[49,168841,168842],{"class":73},"path ",[49,168844,78],{"class":77},[49,168846,168847],{"class":59}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168849,168850],{},"或原始字符串：",[40,168852,168854],{"className":30909,"code":168853,"language":30911,"meta":27,"style":27},"path = r\"D:\\data\\data.txt\"\n",[46,168855,168856],{"__ignoreMap":27},[49,168857,168858,168860,168862,168864,168866,168869,168872,168875,168877,168879,168881,168884],{"class":51,"line":52},[49,168859,168842],{"class":73},[49,168861,78],{"class":77},[49,168863,17818],{"class":77},[49,168865,1080],{"class":59},[49,168867,168868],{"class":48508},"D:",[49,168870,168871],{"class":159},"\\d",[49,168873,168874],{"class":48508},"ata",[49,168876,168871],{"class":159},[49,168878,168874],{"class":48508},[49,168880,1387],{"class":159},[49,168882,168883],{"class":48508},"txt",[49,168885,25822],{"class":59},[782,168887,168889],{"id":168888},"_83-open函数","8.3 open函数",[14,168891,5878],{},[40,168893,168895],{"className":30909,"code":168894,"language":30911,"meta":27,"style":27},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[46,168896,168897],{"__ignoreMap":27},[49,168898,168899,168901,168903,168905,168908,168910,168912,168914],{"class":51,"line":52},[49,168900,45885],{"class":5913},[49,168902,14261],{"class":77},[49,168904,147322],{"class":159},[49,168906,168907],{"class":73},"(文件路径, 打开模式, ",[49,168909,147337],{"class":5913},[49,168911,78],{"class":77},[49,168913,147342],{"class":59},[49,168915,847],{"class":73},[14,168917,168918],{},"常见模式：",[610,168920,168921,168930],{},[613,168922,168923],{},[616,168924,168925,168928],{},[619,168926,168927],{},"模式",[619,168929,26558],{},[633,168931,168932,168941,168950,168959,168969],{},[616,168933,168934,168938],{},[638,168935,168936],{},[46,168937,1499],{},[638,168939,168940],{},"只读，文件不存在会报错",[616,168942,168943,168947],{},[638,168944,168945],{},[46,168946,1624],{},[638,168948,168949],{},"只写，文件不存在会创建，存在会清空",[616,168951,168952,168956],{},[638,168953,168954],{},[46,168955,124],{},[638,168957,168958],{},"追加，文件不存在会创建",[616,168960,168961,168966],{},[638,168962,168963],{},[46,168964,168965],{},"rb",[638,168967,168968],{},"二进制只读",[616,168970,168971,168976],{},[638,168972,168973],{},[46,168974,168975],{},"wb",[638,168977,168978],{},"二进制只写",[782,168980,168982],{"id":168981},"_84-读取文件","8.4 读取文件",[18,168984,168986],{"id":168985},"_841-read","8.4.1 read",[14,168988,168989],{},"一次读取全部内容：",[40,168991,168993],{"className":30909,"code":168992,"language":30911,"meta":27,"style":27},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[46,168994,168995,169021,169033,169040],{"__ignoreMap":27},[49,168996,168997,168999,169001,169003,169005,169007,169009,169011,169013,169015,169017,169019],{"class":51,"line":52},[49,168998,45885],{"class":5913},[49,169000,14261],{"class":77},[49,169002,147322],{"class":159},[49,169004,841],{"class":73},[49,169006,147327],{"class":59},[49,169008,13132],{"class":73},[49,169010,147332],{"class":59},[49,169012,13132],{"class":73},[49,169014,147337],{"class":5913},[49,169016,78],{"class":77},[49,169018,147342],{"class":59},[49,169020,847],{"class":73},[49,169022,169023,169026,169028,169030],{"class":51,"line":63},[49,169024,169025],{"class":73},"content ",[49,169027,78],{"class":77},[49,169029,148684],{"class":5913},[49,169031,169032],{"class":73},".read()\n",[49,169034,169035,169037],{"class":51,"line":70},[49,169036,30946],{"class":159},[49,169038,169039],{"class":73},"(content)\n",[49,169041,169042,169044],{"class":51,"line":219},[49,169043,45885],{"class":5913},[49,169045,169046],{"class":73},".close()\n",[14,169048,169049],{},"可以指定读取字符数：",[40,169051,169053],{"className":30909,"code":169052,"language":30911,"meta":27,"style":27},"content = file.read(10)\n",[46,169054,169055],{"__ignoreMap":27},[49,169056,169057,169059,169061,169063,169066,169068],{"class":51,"line":52},[49,169058,169025],{"class":73},[49,169060,78],{"class":77},[49,169062,148684],{"class":5913},[49,169064,169065],{"class":73},".read(",[49,169067,1275],{"class":159},[49,169069,847],{"class":73},[18,169071,169073],{"id":169072},"_842-readline","8.4.2 readline",[14,169075,169076],{},"一次读取一行：",[40,169078,169080],{"className":30909,"code":169079,"language":30911,"meta":27,"style":27},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[46,169081,169082,169108,169112,169123,169130,169134],{"__ignoreMap":27},[49,169083,169084,169086,169088,169090,169092,169094,169096,169098,169100,169102,169104,169106],{"class":51,"line":52},[49,169085,45885],{"class":5913},[49,169087,14261],{"class":77},[49,169089,147322],{"class":159},[49,169091,841],{"class":73},[49,169093,147327],{"class":59},[49,169095,13132],{"class":73},[49,169097,147332],{"class":59},[49,169099,13132],{"class":73},[49,169101,147337],{"class":5913},[49,169103,78],{"class":77},[49,169105,147342],{"class":59},[49,169107,847],{"class":73},[49,169109,169110],{"class":51,"line":63},[49,169111,399],{"emptyLinePlaceholder":398},[49,169113,169114,169116,169118,169120],{"class":51,"line":70},[49,169115,147783],{"class":73},[49,169117,78],{"class":77},[49,169119,148684],{"class":5913},[49,169121,169122],{"class":73},".readline()\n",[49,169124,169125,169127],{"class":51,"line":219},[49,169126,30946],{"class":159},[49,169128,169129],{"class":73},"(line)\n",[49,169131,169132],{"class":51,"line":233},[49,169133,399],{"emptyLinePlaceholder":398},[49,169135,169136,169138],{"class":51,"line":241},[49,169137,45885],{"class":5913},[49,169139,169046],{"class":73},[18,169141,169143],{"id":169142},"_843-readlines","8.4.3 readlines",[14,169145,169146],{},"读取所有行，返回列表：",[40,169148,169150],{"className":30909,"code":169149,"language":30911,"meta":27,"style":27},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[46,169151,169152,169178,169190,169197],{"__ignoreMap":27},[49,169153,169154,169156,169158,169160,169162,169164,169166,169168,169170,169172,169174,169176],{"class":51,"line":52},[49,169155,45885],{"class":5913},[49,169157,14261],{"class":77},[49,169159,147322],{"class":159},[49,169161,841],{"class":73},[49,169163,147327],{"class":59},[49,169165,13132],{"class":73},[49,169167,147332],{"class":59},[49,169169,13132],{"class":73},[49,169171,147337],{"class":5913},[49,169173,78],{"class":77},[49,169175,147342],{"class":59},[49,169177,847],{"class":73},[49,169179,169180,169183,169185,169187],{"class":51,"line":63},[49,169181,169182],{"class":73},"lines ",[49,169184,78],{"class":77},[49,169186,148684],{"class":5913},[49,169188,169189],{"class":73},".readlines()\n",[49,169191,169192,169194],{"class":51,"line":70},[49,169193,30946],{"class":159},[49,169195,169196],{"class":73},"(lines)\n",[49,169198,169199,169201],{"class":51,"line":219},[49,169200,45885],{"class":5913},[49,169202,169046],{"class":73},[14,169204,169205,169206,169209],{},"每一行通常带有换行符，可以用 ",[46,169207,169208],{},"strip()"," 去掉：",[40,169211,169213],{"className":30909,"code":169212,"language":30911,"meta":27,"style":27},"for line in lines:\n    print(line.strip())\n",[46,169214,169215,169227],{"__ignoreMap":27},[49,169216,169217,169219,169222,169224],{"class":51,"line":52},[49,169218,3722],{"class":77},[49,169220,169221],{"class":73}," line ",[49,169223,26732],{"class":77},[49,169225,169226],{"class":73}," lines:\n",[49,169228,169229,169231],{"class":51,"line":63},[49,169230,31830],{"class":159},[49,169232,169233],{"class":73},"(line.strip())\n",[18,169235,169237],{"id":169236},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,169239,169240],{},"推荐读取大文件时使用：",[40,169242,169244],{"className":30909,"code":169243,"language":30911,"meta":27,"style":27},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[46,169245,169246,169272,169276,169288,169294,169298],{"__ignoreMap":27},[49,169247,169248,169250,169252,169254,169256,169258,169260,169262,169264,169266,169268,169270],{"class":51,"line":52},[49,169249,45885],{"class":5913},[49,169251,14261],{"class":77},[49,169253,147322],{"class":159},[49,169255,841],{"class":73},[49,169257,147327],{"class":59},[49,169259,13132],{"class":73},[49,169261,147332],{"class":59},[49,169263,13132],{"class":73},[49,169265,147337],{"class":5913},[49,169267,78],{"class":77},[49,169269,147342],{"class":59},[49,169271,847],{"class":73},[49,169273,169274],{"class":51,"line":63},[49,169275,399],{"emptyLinePlaceholder":398},[49,169277,169278,169280,169282,169284,169286],{"class":51,"line":70},[49,169279,3722],{"class":77},[49,169281,169221],{"class":73},[49,169283,26732],{"class":77},[49,169285,148684],{"class":5913},[49,169287,4436],{"class":73},[49,169289,169290,169292],{"class":51,"line":219},[49,169291,31830],{"class":159},[49,169293,169233],{"class":73},[49,169295,169296],{"class":51,"line":233},[49,169297,399],{"emptyLinePlaceholder":398},[49,169299,169300,169302],{"class":51,"line":241},[49,169301,45885],{"class":5913},[49,169303,169046],{"class":73},[782,169305,169307],{"id":169306},"_85-with语句","8.5 with语句",[14,169309,169310,169312],{},[46,169311,108364],{}," 会自动关闭文件，推荐使用。",[40,169314,169316],{"className":30909,"code":169315,"language":30911,"meta":27,"style":27},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[46,169317,169318,169348,169358],{"__ignoreMap":27},[49,169319,169320,169322,169324,169326,169328,169330,169332,169334,169336,169338,169340,169342,169344,169346],{"class":51,"line":52},[49,169321,108364],{"class":77},[49,169323,147322],{"class":159},[49,169325,841],{"class":73},[49,169327,147327],{"class":59},[49,169329,13132],{"class":73},[49,169331,147332],{"class":59},[49,169333,13132],{"class":73},[49,169335,147337],{"class":5913},[49,169337,78],{"class":77},[49,169339,147342],{"class":59},[49,169341,14411],{"class":73},[49,169343,31914],{"class":77},[49,169345,148684],{"class":5913},[49,169347,4436],{"class":73},[49,169349,169350,169352,169354,169356],{"class":51,"line":63},[49,169351,147354],{"class":73},[49,169353,78],{"class":77},[49,169355,148684],{"class":5913},[49,169357,169032],{"class":73},[49,169359,169360,169362],{"class":51,"line":70},[49,169361,31830],{"class":159},[49,169363,169039],{"class":73},[14,169365,169366],{},"等价于打开文件、读取、最后关闭，但更安全。",[782,169368,169370],{"id":169369},"_86-写入文件","8.6 写入文件",[14,169372,169373,169375],{},[46,169374,1624],{}," 模式会清空原文件。",[40,169377,169379],{"className":30909,"code":169378,"language":30911,"meta":27,"style":27},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[46,169380,169381,169411,169428],{"__ignoreMap":27},[49,169382,169383,169385,169387,169389,169391,169393,169395,169397,169399,169401,169403,169405,169407,169409],{"class":51,"line":52},[49,169384,108364],{"class":77},[49,169386,147322],{"class":159},[49,169388,841],{"class":73},[49,169390,147327],{"class":59},[49,169392,13132],{"class":73},[49,169394,152507],{"class":59},[49,169396,13132],{"class":73},[49,169398,147337],{"class":5913},[49,169400,78],{"class":77},[49,169402,147342],{"class":59},[49,169404,14411],{"class":73},[49,169406,31914],{"class":77},[49,169408,148684],{"class":5913},[49,169410,4436],{"class":73},[49,169412,169413,169416,169419,169422,169424,169426],{"class":51,"line":63},[49,169414,169415],{"class":5913},"    file",[49,169417,169418],{"class":73},".write(",[49,169420,169421],{"class":59},"\"hello",[49,169423,157056],{"class":159},[49,169425,1080],{"class":59},[49,169427,847],{"class":73},[49,169429,169430,169432,169434,169437,169439,169441],{"class":51,"line":70},[49,169431,169415],{"class":5913},[49,169433,169418],{"class":73},[49,169435,169436],{"class":59},"\"python",[49,169438,157056],{"class":159},[49,169440,1080],{"class":59},[49,169442,847],{"class":73},[14,169444,169445],{},"写入多行：",[40,169447,169449],{"className":30909,"code":169448,"language":30911,"meta":27,"style":27},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[46,169450,169451,169486,169490,169521],{"__ignoreMap":27},[49,169452,169453,169455,169457,169459,169462,169464,169466,169468,169471,169473,169475,169477,169480,169482,169484],{"class":51,"line":52},[49,169454,169182],{"class":73},[49,169456,78],{"class":77},[49,169458,52757],{"class":73},[49,169460,169461],{"class":59},"\"小明,18",[49,169463,157056],{"class":159},[49,169465,1080],{"class":59},[49,169467,13132],{"class":73},[49,169469,169470],{"class":59},"\"小红,17",[49,169472,157056],{"class":159},[49,169474,1080],{"class":59},[49,169476,13132],{"class":73},[49,169478,169479],{"class":59},"\"小刚,19",[49,169481,157056],{"class":159},[49,169483,1080],{"class":59},[49,169485,33777],{"class":73},[49,169487,169488],{"class":51,"line":63},[49,169489,399],{"emptyLinePlaceholder":398},[49,169491,169492,169494,169496,169498,169501,169503,169505,169507,169509,169511,169513,169515,169517,169519],{"class":51,"line":70},[49,169493,108364],{"class":77},[49,169495,147322],{"class":159},[49,169497,841],{"class":73},[49,169499,169500],{"class":59},"\"students.txt\"",[49,169502,13132],{"class":73},[49,169504,152507],{"class":59},[49,169506,13132],{"class":73},[49,169508,147337],{"class":5913},[49,169510,78],{"class":77},[49,169512,147342],{"class":59},[49,169514,14411],{"class":73},[49,169516,31914],{"class":77},[49,169518,148684],{"class":5913},[49,169520,4436],{"class":73},[49,169522,169523,169525],{"class":51,"line":219},[49,169524,169415],{"class":5913},[49,169526,169527],{"class":73},".writelines(lines)\n",[782,169529,169531],{"id":169530},"_87-追加文件","8.7 追加文件",[14,169533,169534,169536],{},[46,169535,124],{}," 模式不会清空原内容，而是在末尾追加。",[40,169538,169540],{"className":30909,"code":169539,"language":30911,"meta":27,"style":27},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[46,169541,169542,169573],{"__ignoreMap":27},[49,169543,169544,169546,169548,169550,169553,169555,169557,169559,169561,169563,169565,169567,169569,169571],{"class":51,"line":52},[49,169545,108364],{"class":77},[49,169547,147322],{"class":159},[49,169549,841],{"class":73},[49,169551,169552],{"class":59},"\"log.txt\"",[49,169554,13132],{"class":73},[49,169556,165856],{"class":59},[49,169558,13132],{"class":73},[49,169560,147337],{"class":5913},[49,169562,78],{"class":77},[49,169564,147342],{"class":59},[49,169566,14411],{"class":73},[49,169568,31914],{"class":77},[49,169570,148684],{"class":5913},[49,169572,4436],{"class":73},[49,169574,169575,169577,169579,169582,169584,169586],{"class":51,"line":63},[49,169576,169415],{"class":5913},[49,169578,169418],{"class":73},[49,169580,169581],{"class":59},"\"程序启动",[49,169583,157056],{"class":159},[49,169585,1080],{"class":59},[49,169587,847],{"class":73},[14,169589,169590],{},"日志类文件常用追加模式。",[782,169592,169594],{"id":169593},"_88-文件编码","8.8 文件编码",[14,169596,169597],{},"编码决定文字如何保存为字节。",[14,169599,169600],{},"常见编码：",[30,169602,169603,169606],{},[33,169604,169605],{},"UTF-8：推荐。",[33,169607,169608],{},"GBK：部分 Windows 中文文件常见。",[14,169610,169611],{},"读取文件乱码时，可以尝试：",[40,169613,169615],{"className":30909,"code":169614,"language":30911,"meta":27,"style":27},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[46,169616,169617,169648],{"__ignoreMap":27},[49,169618,169619,169621,169623,169625,169627,169629,169631,169633,169635,169637,169640,169642,169644,169646],{"class":51,"line":52},[49,169620,108364],{"class":77},[49,169622,147322],{"class":159},[49,169624,841],{"class":73},[49,169626,147327],{"class":59},[49,169628,13132],{"class":73},[49,169630,147332],{"class":59},[49,169632,13132],{"class":73},[49,169634,147337],{"class":5913},[49,169636,78],{"class":77},[49,169638,169639],{"class":59},"\"gbk\"",[49,169641,14411],{"class":73},[49,169643,31914],{"class":77},[49,169645,148684],{"class":5913},[49,169647,4436],{"class":73},[49,169649,169650,169652,169654,169656],{"class":51,"line":63},[49,169651,147354],{"class":73},[49,169653,78],{"class":77},[49,169655,148684],{"class":5913},[49,169657,169032],{"class":73},[14,169659,169660],{},"写文件时建议统一 UTF-8：",[40,169662,169664],{"className":30909,"code":169663,"language":30911,"meta":27,"style":27},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[46,169665,169666,169696],{"__ignoreMap":27},[49,169667,169668,169670,169672,169674,169676,169678,169680,169682,169684,169686,169688,169690,169692,169694],{"class":51,"line":52},[49,169669,108364],{"class":77},[49,169671,147322],{"class":159},[49,169673,841],{"class":73},[49,169675,147327],{"class":59},[49,169677,13132],{"class":73},[49,169679,152507],{"class":59},[49,169681,13132],{"class":73},[49,169683,147337],{"class":5913},[49,169685,78],{"class":77},[49,169687,147342],{"class":59},[49,169689,14411],{"class":73},[49,169691,31914],{"class":77},[49,169693,148684],{"class":5913},[49,169695,4436],{"class":73},[49,169697,169698,169700,169702,169705],{"class":51,"line":63},[49,169699,169415],{"class":5913},[49,169701,169418],{"class":73},[49,169703,169704],{"class":59},"\"中文内容\"",[49,169706,847],{"class":73},[782,169708,169710],{"id":169709},"_89-pathlib","8.9 pathlib",[14,169712,169713,169716],{},[46,169714,169715],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[40,169718,169720],{"className":30909,"code":169719,"language":30911,"meta":27,"style":27},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[46,169721,169722,169732,169736,169754],{"__ignoreMap":27},[49,169723,169724,169726,169728,169730],{"class":51,"line":52},[49,169725,31268],{"class":77},[49,169727,108842],{"class":73},[49,169729,30923],{"class":77},[49,169731,108847],{"class":73},[49,169733,169734],{"class":51,"line":63},[49,169735,399],{"emptyLinePlaceholder":398},[49,169737,169738,169740,169742,169744,169747,169749,169751],{"class":51,"line":70},[49,169739,168842],{"class":73},[49,169741,78],{"class":77},[49,169743,109076],{"class":73},[49,169745,169746],{"class":59},"\"data\"",[49,169748,14411],{"class":73},[49,169750,1413],{"class":77},[49,169752,169753],{"class":59}," \"students.txt\"\n",[49,169755,169756,169758],{"class":51,"line":219},[49,169757,30946],{"class":159},[49,169759,169760],{"class":73},"(path)\n",[14,169762,169763],{},"创建目录：",[40,169765,169767],{"className":30909,"code":169766,"language":30911,"meta":27,"style":27},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[46,169768,169769,169779,169783,169796],{"__ignoreMap":27},[49,169770,169771,169773,169775,169777],{"class":51,"line":52},[49,169772,31268],{"class":77},[49,169774,108842],{"class":73},[49,169776,30923],{"class":77},[49,169778,108847],{"class":73},[49,169780,169781],{"class":51,"line":63},[49,169782,399],{"emptyLinePlaceholder":398},[49,169784,169785,169788,169790,169792,169794],{"class":51,"line":70},[49,169786,169787],{"class":73},"data_dir ",[49,169789,78],{"class":77},[49,169791,109076],{"class":73},[49,169793,169746],{"class":59},[49,169795,847],{"class":73},[49,169797,169798,169801,169804,169806,169808],{"class":51,"line":219},[49,169799,169800],{"class":73},"data_dir.mkdir(",[49,169802,169803],{"class":5913},"exist_ok",[49,169805,78],{"class":77},[49,169807,32007],{"class":159},[49,169809,847],{"class":73},[14,169811,169812],{},"判断文件是否存在：",[40,169814,169816],{"className":30909,"code":169815,"language":30911,"meta":27,"style":27},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[46,169817,169818,169831,169835,169842],{"__ignoreMap":27},[49,169819,169820,169822,169824,169826,169829],{"class":51,"line":52},[49,169821,168842],{"class":73},[49,169823,78],{"class":77},[49,169825,109076],{"class":73},[49,169827,169828],{"class":59},"\"data\u002Fstudents.txt\"",[49,169830,847],{"class":73},[49,169832,169833],{"class":51,"line":63},[49,169834,399],{"emptyLinePlaceholder":398},[49,169836,169837,169839],{"class":51,"line":70},[49,169838,2230],{"class":77},[49,169840,169841],{"class":73}," path.exists():\n",[49,169843,169844,169846,169848,169851],{"class":51,"line":219},[49,169845,31830],{"class":159},[49,169847,841],{"class":73},[49,169849,169850],{"class":59},"\"文件存在\"",[49,169852,847],{"class":73},[14,169854,169855],{},"读写文本：",[40,169857,169859],{"className":30909,"code":169858,"language":30911,"meta":27,"style":27},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[46,169860,169861,169873,169877,169894,169911],{"__ignoreMap":27},[49,169862,169863,169865,169867,169869,169871],{"class":51,"line":52},[49,169864,168842],{"class":73},[49,169866,78],{"class":77},[49,169868,109076],{"class":73},[49,169870,147327],{"class":59},[49,169872,847],{"class":73},[49,169874,169875],{"class":51,"line":63},[49,169876,399],{"emptyLinePlaceholder":398},[49,169878,169879,169882,169884,169886,169888,169890,169892],{"class":51,"line":70},[49,169880,169881],{"class":73},"path.write_text(",[49,169883,146407],{"class":59},[49,169885,13132],{"class":73},[49,169887,147337],{"class":5913},[49,169889,78],{"class":77},[49,169891,147342],{"class":59},[49,169893,847],{"class":73},[49,169895,169896,169898,169900,169903,169905,169907,169909],{"class":51,"line":219},[49,169897,169025],{"class":73},[49,169899,78],{"class":77},[49,169901,169902],{"class":73}," path.read_text(",[49,169904,147337],{"class":5913},[49,169906,78],{"class":77},[49,169908,147342],{"class":59},[49,169910,847],{"class":73},[49,169912,169913,169915],{"class":51,"line":233},[49,169914,30946],{"class":159},[49,169916,169039],{"class":73},[782,169918,169920],{"id":169919},"_810-json文件","8.10 JSON文件",[14,169922,169923],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[40,169925,169927],{"className":30909,"code":169926,"language":30911,"meta":27,"style":27},"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",[46,169928,169929,169935,169939,169947,169957,169967,169975,169979,169983,170008],{"__ignoreMap":27},[49,169930,169931,169933],{"class":51,"line":52},[49,169932,30923],{"class":77},[49,169934,147622],{"class":73},[49,169936,169937],{"class":51,"line":63},[49,169938,399],{"emptyLinePlaceholder":398},[49,169940,169941,169943,169945],{"class":51,"line":70},[49,169942,150012],{"class":73},[49,169944,78],{"class":77},[49,169946,16269],{"class":73},[49,169948,169949,169951,169953,169955],{"class":51,"line":219},[49,169950,147551],{"class":59},[49,169952,51968],{"class":73},[49,169954,150419],{"class":59},[49,169956,31997],{"class":73},[49,169958,169959,169961,169963,169965],{"class":51,"line":233},[49,169960,165068],{"class":59},[49,169962,51968],{"class":73},[49,169964,1479],{"class":159},[49,169966,31997],{"class":73},[49,169968,169969,169971,169973],{"class":51,"line":241},[49,169970,165079],{"class":59},[49,169972,51968],{"class":73},[49,169974,165084],{"class":159},[49,169976,169977],{"class":51,"line":1920},[49,169978,2264],{"class":73},[49,169980,169981],{"class":51,"line":2011},[49,169982,399],{"emptyLinePlaceholder":398},[49,169984,169985,169987,169989,169992,169994,169996,169998,170000,170002,170004,170006],{"class":51,"line":2017},[49,169986,156975],{"class":73},[49,169988,78],{"class":77},[49,169990,169991],{"class":73}," json.dumps(student, ",[49,169993,147668],{"class":5913},[49,169995,78],{"class":77},[49,169997,34518],{"class":159},[49,169999,13132],{"class":73},[49,170001,152543],{"class":5913},[49,170003,78],{"class":77},[49,170005,915],{"class":159},[49,170007,847],{"class":73},[49,170009,170010,170012],{"class":51,"line":2029},[49,170011,30946],{"class":159},[49,170013,164602],{"class":73},[14,170015,170016],{},"写入 JSON 文件：",[40,170018,170020],{"className":30909,"code":170019,"language":30911,"meta":27,"style":27},"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",[46,170021,170022,170028,170032,170040,170068,170096,170100,170104,170134],{"__ignoreMap":27},[49,170023,170024,170026],{"class":51,"line":52},[49,170025,30923],{"class":77},[49,170027,147622],{"class":73},[49,170029,170030],{"class":51,"line":63},[49,170031,399],{"emptyLinePlaceholder":398},[49,170033,170034,170036,170038],{"class":51,"line":70},[49,170035,160247],{"class":73},[49,170037,78],{"class":77},[49,170039,55978],{"class":73},[49,170041,170042,170044,170046,170048,170050,170052,170054,170056,170058,170060,170062,170064,170066],{"class":51,"line":219},[49,170043,148916],{"class":73},[49,170045,63210],{"class":59},[49,170047,51968],{"class":73},[49,170049,150419],{"class":59},[49,170051,13132],{"class":73},[49,170053,69655],{"class":59},[49,170055,51968],{"class":73},[49,170057,1479],{"class":159},[49,170059,13132],{"class":73},[49,170061,152003],{"class":59},[49,170063,51968],{"class":73},[49,170065,1818],{"class":159},[49,170067,5627],{"class":73},[49,170069,170070,170072,170074,170076,170078,170080,170082,170084,170086,170088,170090,170092,170094],{"class":51,"line":233},[49,170071,148916],{"class":73},[49,170073,63210],{"class":59},[49,170075,51968],{"class":73},[49,170077,151467],{"class":59},[49,170079,13132],{"class":73},[49,170081,69655],{"class":59},[49,170083,51968],{"class":73},[49,170085,1454],{"class":159},[49,170087,13132],{"class":73},[49,170089,152003],{"class":59},[49,170091,51968],{"class":73},[49,170093,1640],{"class":159},[49,170095,5627],{"class":73},[49,170097,170098],{"class":51,"line":241},[49,170099,33777],{"class":73},[49,170101,170102],{"class":51,"line":1920},[49,170103,399],{"emptyLinePlaceholder":398},[49,170105,170106,170108,170110,170112,170114,170116,170118,170120,170122,170124,170126,170128,170130,170132],{"class":51,"line":2011},[49,170107,108364],{"class":77},[49,170109,147322],{"class":159},[49,170111,841],{"class":73},[49,170113,152362],{"class":59},[49,170115,13132],{"class":73},[49,170117,152507],{"class":59},[49,170119,13132],{"class":73},[49,170121,147337],{"class":5913},[49,170123,78],{"class":77},[49,170125,147342],{"class":59},[49,170127,14411],{"class":73},[49,170129,31914],{"class":77},[49,170131,148684],{"class":5913},[49,170133,4436],{"class":73},[49,170135,170136,170139,170141,170143,170145,170147,170149,170151,170153,170155,170157],{"class":51,"line":2017},[49,170137,170138],{"class":73},"    json.dump(students, ",[49,170140,45885],{"class":5913},[49,170142,13132],{"class":73},[49,170144,147668],{"class":5913},[49,170146,78],{"class":77},[49,170148,34518],{"class":159},[49,170150,13132],{"class":73},[49,170152,152543],{"class":5913},[49,170154,78],{"class":77},[49,170156,915],{"class":159},[49,170158,847],{"class":73},[14,170160,170161],{},"读取 JSON 文件：",[40,170163,170165],{"className":30909,"code":170164,"language":30911,"meta":27,"style":27},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[46,170166,170167,170173,170177,170207,170219,170223],{"__ignoreMap":27},[49,170168,170169,170171],{"class":51,"line":52},[49,170170,30923],{"class":77},[49,170172,147622],{"class":73},[49,170174,170175],{"class":51,"line":63},[49,170176,399],{"emptyLinePlaceholder":398},[49,170178,170179,170181,170183,170185,170187,170189,170191,170193,170195,170197,170199,170201,170203,170205],{"class":51,"line":70},[49,170180,108364],{"class":77},[49,170182,147322],{"class":159},[49,170184,841],{"class":73},[49,170186,152362],{"class":59},[49,170188,13132],{"class":73},[49,170190,147332],{"class":59},[49,170192,13132],{"class":73},[49,170194,147337],{"class":5913},[49,170196,78],{"class":77},[49,170198,147342],{"class":59},[49,170200,14411],{"class":73},[49,170202,31914],{"class":77},[49,170204,148684],{"class":5913},[49,170206,4436],{"class":73},[49,170208,170209,170211,170213,170215,170217],{"class":51,"line":219},[49,170210,153568],{"class":73},[49,170212,78],{"class":77},[49,170214,148695],{"class":73},[49,170216,45885],{"class":5913},[49,170218,847],{"class":73},[49,170220,170221],{"class":51,"line":233},[49,170222,399],{"emptyLinePlaceholder":398},[49,170224,170225,170227],{"class":51,"line":241},[49,170226,30946],{"class":159},[49,170228,165526],{"class":73},[782,170230,170232],{"id":170231},"_811-csv文件","8.11 CSV文件",[14,170234,170235],{},"CSV 是逗号分隔值，常用于表格数据。",[14,170237,170238],{},"写入 CSV：",[40,170240,170242],{"className":30909,"code":170241,"language":30911,"meta":27,"style":27},"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",[46,170243,170244,170251,170255,170263,170281,170297,170313,170317,170321,170361,170375],{"__ignoreMap":27},[49,170245,170246,170248],{"class":51,"line":52},[49,170247,30923],{"class":77},[49,170249,170250],{"class":73}," csv\n",[49,170252,170253],{"class":51,"line":63},[49,170254,399],{"emptyLinePlaceholder":398},[49,170256,170257,170259,170261],{"class":51,"line":70},[49,170258,160247],{"class":73},[49,170260,78],{"class":77},[49,170262,55978],{"class":73},[49,170264,170265,170268,170270,170272,170274,170276,170279],{"class":51,"line":219},[49,170266,170267],{"class":73},"    [",[49,170269,73630],{"class":59},[49,170271,13132],{"class":73},[49,170273,73663],{"class":59},[49,170275,13132],{"class":73},[49,170277,170278],{"class":59},"\"成绩\"",[49,170280,88367],{"class":73},[49,170282,170283,170285,170287,170289,170291,170293,170295],{"class":51,"line":233},[49,170284,170267],{"class":73},[49,170286,150419],{"class":59},[49,170288,13132],{"class":73},[49,170290,1479],{"class":159},[49,170292,13132],{"class":73},[49,170294,1818],{"class":159},[49,170296,88367],{"class":73},[49,170298,170299,170301,170303,170305,170307,170309,170311],{"class":51,"line":241},[49,170300,170267],{"class":73},[49,170302,151467],{"class":59},[49,170304,13132],{"class":73},[49,170306,1454],{"class":159},[49,170308,13132],{"class":73},[49,170310,1640],{"class":159},[49,170312,88367],{"class":73},[49,170314,170315],{"class":51,"line":1920},[49,170316,33777],{"class":73},[49,170318,170319],{"class":51,"line":2011},[49,170320,399],{"emptyLinePlaceholder":398},[49,170322,170323,170325,170327,170329,170332,170334,170336,170338,170340,170342,170344,170346,170349,170351,170353,170355,170357,170359],{"class":51,"line":2017},[49,170324,108364],{"class":77},[49,170326,147322],{"class":159},[49,170328,841],{"class":73},[49,170330,170331],{"class":59},"\"students.csv\"",[49,170333,13132],{"class":73},[49,170335,152507],{"class":59},[49,170337,13132],{"class":73},[49,170339,147337],{"class":5913},[49,170341,78],{"class":77},[49,170343,147342],{"class":59},[49,170345,13132],{"class":73},[49,170347,170348],{"class":5913},"newline",[49,170350,78],{"class":77},[49,170352,8349],{"class":59},[49,170354,14411],{"class":73},[49,170356,31914],{"class":77},[49,170358,148684],{"class":5913},[49,170360,4436],{"class":73},[49,170362,170363,170366,170368,170371,170373],{"class":51,"line":2029},[49,170364,170365],{"class":73},"    writer ",[49,170367,78],{"class":77},[49,170369,170370],{"class":73}," csv.writer(",[49,170372,45885],{"class":5913},[49,170374,847],{"class":73},[49,170376,170377],{"class":51,"line":2311},[49,170378,170379],{"class":73},"    writer.writerows(students)\n",[14,170381,170382],{},"读取 CSV：",[40,170384,170386],{"className":30909,"code":170385,"language":30911,"meta":27,"style":27},"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",[46,170387,170388,170394,170398,170428,170442,170454],{"__ignoreMap":27},[49,170389,170390,170392],{"class":51,"line":52},[49,170391,30923],{"class":77},[49,170393,170250],{"class":73},[49,170395,170396],{"class":51,"line":63},[49,170397,399],{"emptyLinePlaceholder":398},[49,170399,170400,170402,170404,170406,170408,170410,170412,170414,170416,170418,170420,170422,170424,170426],{"class":51,"line":70},[49,170401,108364],{"class":77},[49,170403,147322],{"class":159},[49,170405,841],{"class":73},[49,170407,170331],{"class":59},[49,170409,13132],{"class":73},[49,170411,147332],{"class":59},[49,170413,13132],{"class":73},[49,170415,147337],{"class":5913},[49,170417,78],{"class":77},[49,170419,147342],{"class":59},[49,170421,14411],{"class":73},[49,170423,31914],{"class":77},[49,170425,148684],{"class":5913},[49,170427,4436],{"class":73},[49,170429,170430,170433,170435,170438,170440],{"class":51,"line":219},[49,170431,170432],{"class":73},"    reader ",[49,170434,78],{"class":77},[49,170436,170437],{"class":73}," csv.reader(",[49,170439,45885],{"class":5913},[49,170441,847],{"class":73},[49,170443,170444,170446,170449,170451],{"class":51,"line":233},[49,170445,3898],{"class":77},[49,170447,170448],{"class":73}," row ",[49,170450,26732],{"class":77},[49,170452,170453],{"class":73}," reader:\n",[49,170455,170456,170458],{"class":51,"line":241},[49,170457,32982],{"class":159},[49,170459,170460],{"class":73},"(row)\n",[14,170462,170463],{},"使用字典写入：",[40,170465,170467],{"className":30909,"code":170466,"language":30911,"meta":27,"style":27},"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",[46,170468,170469,170475,170479,170487,170515,170543,170547,170551,170589,170610,170631,170636],{"__ignoreMap":27},[49,170470,170471,170473],{"class":51,"line":52},[49,170472,30923],{"class":77},[49,170474,170250],{"class":73},[49,170476,170477],{"class":51,"line":63},[49,170478,399],{"emptyLinePlaceholder":398},[49,170480,170481,170483,170485],{"class":51,"line":70},[49,170482,160247],{"class":73},[49,170484,78],{"class":77},[49,170486,55978],{"class":73},[49,170488,170489,170491,170493,170495,170497,170499,170501,170503,170505,170507,170509,170511,170513],{"class":51,"line":219},[49,170490,148916],{"class":73},[49,170492,63210],{"class":59},[49,170494,51968],{"class":73},[49,170496,150419],{"class":59},[49,170498,13132],{"class":73},[49,170500,69655],{"class":59},[49,170502,51968],{"class":73},[49,170504,1479],{"class":159},[49,170506,13132],{"class":73},[49,170508,152003],{"class":59},[49,170510,51968],{"class":73},[49,170512,1818],{"class":159},[49,170514,5627],{"class":73},[49,170516,170517,170519,170521,170523,170525,170527,170529,170531,170533,170535,170537,170539,170541],{"class":51,"line":233},[49,170518,148916],{"class":73},[49,170520,63210],{"class":59},[49,170522,51968],{"class":73},[49,170524,151467],{"class":59},[49,170526,13132],{"class":73},[49,170528,69655],{"class":59},[49,170530,51968],{"class":73},[49,170532,1454],{"class":159},[49,170534,13132],{"class":73},[49,170536,152003],{"class":59},[49,170538,51968],{"class":73},[49,170540,1640],{"class":159},[49,170542,5627],{"class":73},[49,170544,170545],{"class":51,"line":241},[49,170546,33777],{"class":73},[49,170548,170549],{"class":51,"line":1920},[49,170550,399],{"emptyLinePlaceholder":398},[49,170552,170553,170555,170557,170559,170561,170563,170565,170567,170569,170571,170573,170575,170577,170579,170581,170583,170585,170587],{"class":51,"line":2011},[49,170554,108364],{"class":77},[49,170556,147322],{"class":159},[49,170558,841],{"class":73},[49,170560,170331],{"class":59},[49,170562,13132],{"class":73},[49,170564,152507],{"class":59},[49,170566,13132],{"class":73},[49,170568,147337],{"class":5913},[49,170570,78],{"class":77},[49,170572,147342],{"class":59},[49,170574,13132],{"class":73},[49,170576,170348],{"class":5913},[49,170578,78],{"class":77},[49,170580,8349],{"class":59},[49,170582,14411],{"class":73},[49,170584,31914],{"class":77},[49,170586,148684],{"class":5913},[49,170588,4436],{"class":73},[49,170590,170591,170594,170596,170598,170600,170602,170604,170606,170608],{"class":51,"line":2017},[49,170592,170593],{"class":73},"    fieldnames ",[49,170595,78],{"class":77},[49,170597,52757],{"class":73},[49,170599,63210],{"class":59},[49,170601,13132],{"class":73},[49,170603,69655],{"class":59},[49,170605,13132],{"class":73},[49,170607,152003],{"class":59},[49,170609,33777],{"class":73},[49,170611,170612,170614,170616,170619,170621,170623,170626,170628],{"class":51,"line":2029},[49,170613,170365],{"class":73},[49,170615,78],{"class":77},[49,170617,170618],{"class":73}," csv.DictWriter(",[49,170620,45885],{"class":5913},[49,170622,13132],{"class":73},[49,170624,170625],{"class":5913},"fieldnames",[49,170627,78],{"class":77},[49,170629,170630],{"class":73},"fieldnames)\n",[49,170632,170633],{"class":51,"line":2311},[49,170634,170635],{"class":73},"    writer.writeheader()\n",[49,170637,170638],{"class":51,"line":2316},[49,170639,170379],{"class":73},[782,170641,170643],{"id":170642},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170645,123823],{},[30,170647,170648,170651,170654],{},[33,170649,170650],{},"读取文本文件。",[33,170652,170653],{},"统计每个单词出现次数。",[33,170655,170656],{},"输出出现次数最多的前 10 个单词。",[14,170658,10732],{},[40,170660,170662],{"className":30909,"code":170661,"language":30911,"meta":27,"style":27},"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",[46,170663,170664,170674,170678,170691,170707,170711,170721,170730,170734,170746,170766,170775,170779,170797,170801,170831,170835,170851],{"__ignoreMap":27},[49,170665,170666,170668,170670,170672],{"class":51,"line":52},[49,170667,31268],{"class":77},[49,170669,108842],{"class":73},[49,170671,30923],{"class":77},[49,170673,108847],{"class":73},[49,170675,170676],{"class":51,"line":63},[49,170677,399],{"emptyLinePlaceholder":398},[49,170679,170680,170682,170684,170686,170689],{"class":51,"line":70},[49,170681,168842],{"class":73},[49,170683,78],{"class":77},[49,170685,109076],{"class":73},[49,170687,170688],{"class":59},"\"article.txt\"",[49,170690,847],{"class":73},[49,170692,170693,170695,170697,170699,170701,170703,170705],{"class":51,"line":219},[49,170694,169025],{"class":73},[49,170696,78],{"class":77},[49,170698,169902],{"class":73},[49,170700,147337],{"class":5913},[49,170702,78],{"class":77},[49,170704,147342],{"class":59},[49,170706,847],{"class":73},[49,170708,170709],{"class":51,"line":233},[49,170710,399],{"emptyLinePlaceholder":398},[49,170712,170713,170716,170718],{"class":51,"line":241},[49,170714,170715],{"class":73},"words ",[49,170717,78],{"class":77},[49,170719,170720],{"class":73}," content.lower().split()\n",[49,170722,170723,170726,170728],{"class":51,"line":1920},[49,170724,170725],{"class":73},"counter ",[49,170727,78],{"class":77},[49,170729,88399],{"class":73},[49,170731,170732],{"class":51,"line":2011},[49,170733,399],{"emptyLinePlaceholder":398},[49,170735,170736,170738,170741,170743],{"class":51,"line":2017},[49,170737,3722],{"class":77},[49,170739,170740],{"class":73}," word ",[49,170742,26732],{"class":77},[49,170744,170745],{"class":73}," words:\n",[49,170747,170748,170751,170753,170756,170759,170761,170764],{"class":51,"line":2029},[49,170749,170750],{"class":73},"    word ",[49,170752,78],{"class":77},[49,170754,170755],{"class":73}," word.strip(",[49,170757,170758],{"class":59},"\".,!?;:",[49,170760,157026],{"class":159},[49,170762,170763],{"class":59},"'()[]\"",[49,170765,847],{"class":73},[49,170767,170768,170770,170772],{"class":51,"line":2311},[49,170769,3798],{"class":77},[49,170771,39461],{"class":77},[49,170773,170774],{"class":73}," word:\n",[49,170776,170777],{"class":51,"line":2316},[49,170778,149043],{"class":77},[49,170780,170781,170784,170786,170789,170791,170793,170795],{"class":51,"line":2322},[49,170782,170783],{"class":73},"    counter[word] ",[49,170785,78],{"class":77},[49,170787,170788],{"class":73}," counter.get(word, ",[49,170790,1021],{"class":159},[49,170792,14411],{"class":73},[49,170794,1310],{"class":77},[49,170796,56230],{"class":159},[49,170798,170799],{"class":51,"line":2327},[49,170800,399],{"emptyLinePlaceholder":398},[49,170802,170803,170806,170808,170810,170813,170815,170817,170819,170821,170823,170825,170827,170829],{"class":51,"line":2341},[49,170804,170805],{"class":73},"items ",[49,170807,78],{"class":77},[49,170809,164135],{"class":159},[49,170811,170812],{"class":73},"(counter.items(), ",[49,170814,154477],{"class":5913},[49,170816,154480],{"class":77},[49,170818,154483],{"class":73},[49,170820,1047],{"class":159},[49,170822,112733],{"class":73},[49,170824,164059],{"class":5913},[49,170826,78],{"class":77},[49,170828,32007],{"class":159},[49,170830,847],{"class":73},[49,170832,170833],{"class":51,"line":2346},[49,170834,399],{"emptyLinePlaceholder":398},[49,170836,170837,170839,170842,170844,170847,170849],{"class":51,"line":2352},[49,170838,3722],{"class":77},[49,170840,170841],{"class":73}," word, count ",[49,170843,26732],{"class":77},[49,170845,170846],{"class":73}," items[:",[49,170848,1275],{"class":159},[49,170850,166286],{"class":73},[49,170852,170853,170855],{"class":51,"line":2373},[49,170854,31830],{"class":159},[49,170856,170857],{"class":73},"(word, count)\n",[782,170859,170861],{"id":170860},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[40,170863,170865],{"className":30909,"code":170864,"language":30911,"meta":27,"style":27},"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",[46,170866,170867,170873,170883,170887,170899,170903,170907,170915,170925,170931,170935,170965,170975,170979,170983,170991,171021,171045,171049,171053,171061,171090,171095],{"__ignoreMap":27},[49,170868,170869,170871],{"class":51,"line":52},[49,170870,30923],{"class":77},[49,170872,147622],{"class":73},[49,170874,170875,170877,170879,170881],{"class":51,"line":63},[49,170876,31268],{"class":77},[49,170878,108842],{"class":73},[49,170880,30923],{"class":77},[49,170882,108847],{"class":73},[49,170884,170885],{"class":51,"line":70},[49,170886,399],{"emptyLinePlaceholder":398},[49,170888,170889,170891,170893,170895,170897],{"class":51,"line":219},[49,170890,152355],{"class":159},[49,170892,14261],{"class":77},[49,170894,109076],{"class":73},[49,170896,152362],{"class":59},[49,170898,847],{"class":73},[49,170900,170901],{"class":51,"line":233},[49,170902,399],{"emptyLinePlaceholder":398},[49,170904,170905],{"class":51,"line":241},[49,170906,399],{"emptyLinePlaceholder":398},[49,170908,170909,170911,170913],{"class":51,"line":1920},[49,170910,32478],{"class":77},[49,170912,152379],{"class":55},[49,170914,32484],{"class":73},[49,170916,170917,170919,170921,170923],{"class":51,"line":2011},[49,170918,3798],{"class":77},[49,170920,39461],{"class":77},[49,170922,152390],{"class":159},[49,170924,152393],{"class":73},[49,170926,170927,170929],{"class":51,"line":2017},[49,170928,15449],{"class":77},[49,170930,52369],{"class":73},[49,170932,170933],{"class":51,"line":2029},[49,170934,399],{"emptyLinePlaceholder":398},[49,170936,170937,170939,170941,170943,170945,170947,170949,170951,170953,170955,170957,170959,170961,170963],{"class":51,"line":2311},[49,170938,34709],{"class":77},[49,170940,147322],{"class":159},[49,170942,841],{"class":73},[49,170944,152355],{"class":159},[49,170946,13132],{"class":73},[49,170948,147332],{"class":59},[49,170950,13132],{"class":73},[49,170952,147337],{"class":5913},[49,170954,78],{"class":77},[49,170956,147342],{"class":59},[49,170958,14411],{"class":73},[49,170960,31914],{"class":77},[49,170962,148684],{"class":5913},[49,170964,4436],{"class":73},[49,170966,170967,170969,170971,170973],{"class":51,"line":2316},[49,170968,15449],{"class":77},[49,170970,148695],{"class":73},[49,170972,45885],{"class":5913},[49,170974,847],{"class":73},[49,170976,170977],{"class":51,"line":2322},[49,170978,399],{"emptyLinePlaceholder":398},[49,170980,170981],{"class":51,"line":2327},[49,170982,399],{"emptyLinePlaceholder":398},[49,170984,170985,170987,170989],{"class":51,"line":2341},[49,170986,32478],{"class":77},[49,170988,152489],{"class":55},[49,170990,152492],{"class":73},[49,170992,170993,170995,170997,170999,171001,171003,171005,171007,171009,171011,171013,171015,171017,171019],{"class":51,"line":2346},[49,170994,34709],{"class":77},[49,170996,147322],{"class":159},[49,170998,841],{"class":73},[49,171000,152355],{"class":159},[49,171002,13132],{"class":73},[49,171004,152507],{"class":59},[49,171006,13132],{"class":73},[49,171008,147337],{"class":5913},[49,171010,78],{"class":77},[49,171012,147342],{"class":59},[49,171014,14411],{"class":73},[49,171016,31914],{"class":77},[49,171018,148684],{"class":5913},[49,171020,4436],{"class":73},[49,171022,171023,171025,171027,171029,171031,171033,171035,171037,171039,171041,171043],{"class":51,"line":2352},[49,171024,152528],{"class":73},[49,171026,45885],{"class":5913},[49,171028,13132],{"class":73},[49,171030,147668],{"class":5913},[49,171032,78],{"class":77},[49,171034,34518],{"class":159},[49,171036,13132],{"class":73},[49,171038,152543],{"class":5913},[49,171040,78],{"class":77},[49,171042,915],{"class":159},[49,171044,847],{"class":73},[49,171046,171047],{"class":51,"line":2373},[49,171048,399],{"emptyLinePlaceholder":398},[49,171050,171051],{"class":51,"line":2378},[49,171052,399],{"emptyLinePlaceholder":398},[49,171054,171055,171057,171059],{"class":51,"line":2392},[49,171056,160247],{"class":73},[49,171058,78],{"class":77},[49,171060,153573],{"class":73},[49,171062,171063,171066,171068,171070,171072,171074,171076,171078,171080,171082,171084,171086,171088],{"class":51,"line":2397},[49,171064,171065],{"class":73},"students.append({",[49,171067,63210],{"class":59},[49,171069,51968],{"class":73},[49,171071,150419],{"class":59},[49,171073,13132],{"class":73},[49,171075,69655],{"class":59},[49,171077,51968],{"class":73},[49,171079,1479],{"class":159},[49,171081,13132],{"class":73},[49,171083,152003],{"class":59},[49,171085,51968],{"class":73},[49,171087,1818],{"class":159},[49,171089,165683],{"class":73},[49,171091,171092],{"class":51,"line":2426},[49,171093,171094],{"class":73},"save_students(students)\n",[49,171096,171097,171099,171101,171104],{"class":51,"line":2431},[49,171098,30946],{"class":159},[49,171100,841],{"class":73},[49,171102,171103],{"class":59},"\"保存成功\"",[49,171105,847],{"class":73},[782,171107,171109],{"id":171108},"_814-易错点","8.14 易错点",[30,171111,171112,171116,171122,171127,171134,171141],{},[33,171113,171114,169375],{},[46,171115,1624],{},[33,171117,171118,171119,28916],{},"读写中文要指定 ",[46,171120,171121],{},"encoding=\"utf-8\"",[33,171123,171124,171125,28916],{},"打开文件后要关闭，推荐使用 ",[46,171126,108364],{},[33,171128,171129,171130,171133],{},"读取大文件不要直接 ",[46,171131,171132],{},"read()"," 全部内容。",[33,171135,171136,171137,171140],{},"Windows 写 CSV 时建议加 ",[46,171138,171139],{},"newline=\"\"","，避免空行。",[33,171142,171143],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[782,171145,171147],{"id":171146},"_815-本章练习","8.15 本章练习",[30,171149,171150,171157,171162,171165,171168],{},[33,171151,171152,171153,171156],{},"写入一个 ",[46,171154,171155],{},"students.txt","，每行保存一个学生姓名。",[33,171158,104886,171159,171161],{},[46,171160,171155],{}," 并输出所有学生。",[33,171163,171164],{},"把学生列表保存为 JSON 文件。",[33,171166,171167],{},"从 JSON 文件读取学生数据，计算平均分。",[33,171169,171170,171171,171174,171175,171178],{},"写一个日志函数 ",[46,171172,171173],{},"write_log(message)","，每次调用向 ",[46,171176,171177],{},"app.log"," 追加一行。",[757,171180,171181],{},"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":27,"searchDepth":63,"depth":63,"links":171183},[171184,171185,171189,171190,171196,171197,171198,171199,171200,171201,171202,171203,171204,171205,171206],{"id":168695,"depth":63,"text":168696},{"id":168736,"depth":63,"text":168737,"children":171186},[171187,171188],{"id":168740,"depth":70,"text":168741},{"id":168774,"depth":70,"text":168775},{"id":168888,"depth":63,"text":168889},{"id":168981,"depth":63,"text":168982,"children":171191},[171192,171193,171194,171195],{"id":168985,"depth":70,"text":168986},{"id":169072,"depth":70,"text":169073},{"id":169142,"depth":70,"text":169143},{"id":169236,"depth":70,"text":169237},{"id":169306,"depth":63,"text":169307},{"id":169369,"depth":63,"text":169370},{"id":169530,"depth":63,"text":169531},{"id":169593,"depth":63,"text":169594},{"id":169709,"depth":63,"text":169710},{"id":169919,"depth":63,"text":169920},{"id":170231,"depth":63,"text":170232},{"id":170642,"depth":63,"text":170643},{"id":170860,"depth":63,"text":170861},{"id":171108,"depth":63,"text":171109},{"id":171146,"depth":63,"text":171147},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168687,"description":24072},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171213,"title":171214,"body":171215,"description":24072,"extension":766,"meta":173401,"navigation":398,"path":173402,"seo":173403,"stem":173404,"__hash__":173405},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171216,"toc":173368},[171217,171220,171224,171227,171230,171322,171324,171343,171348,171352,171355,171358,171387,171394,171397,171401,171404,171433,171435,171487,171493,171546,171550,171648,171651,171718,171722,171779,171781,171787,171791,171796,171802,171893,171898,171902,171905,171983,171986,172024,172028,172146,172149,172153,172156,172201,172204,172208,172213,172219,172269,172272,172303,172307,172311,172341,172345,172380,172384,172419,172459,172463,172479,172482,172486,172490,172569,172573,172614,172618,172673,172677,172711,172715,172745,172754,172761,172767,172824,172827,172835,172838,172842,172849,172852,172858,172861,172878,172883,172887,172893,172906,172909,172946,172949,172960,172963,172977,172980,172994,172998,173005,173038,173041,173043,173049,173052,173056,173058,173064,173069,173242,173246,173309,173313,173337,173341,173365],[10,171218,171214],{"id":171219},"_9-异常模块与包",[782,171221,171223],{"id":171222},"_91-什么是异常","9.1 什么是异常",[14,171225,171226],{},"异常是程序运行过程中出现的错误。",[14,171228,171229],{},"常见异常：",[610,171231,171232,171241],{},[613,171233,171234],{},[616,171235,171236,171239],{},[619,171237,171238],{},"异常",[619,171240,26558],{},[633,171242,171243,171253,171263,171272,171282,171292,171302,171312],{},[616,171244,171245,171250],{},[638,171246,171247],{},[46,171248,171249],{},"NameError",[638,171251,171252],{},"使用了未定义变量",[616,171254,171255,171260],{},[638,171256,171257],{},[46,171258,171259],{},"TypeError",[638,171261,171262],{},"类型不匹配",[616,171264,171265,171269],{},[638,171266,171267],{},[46,171268,155365],{},[638,171270,171271],{},"值不合法",[616,171273,171274,171279],{},[638,171275,171276],{},[46,171277,171278],{},"IndexError",[638,171280,171281],{},"列表索引越界",[616,171283,171284,171289],{},[638,171285,171286],{},[46,171287,171288],{},"KeyError",[638,171290,171291],{},"字典 key 不存在",[616,171293,171294,171299],{},[638,171295,171296],{},[46,171297,171298],{},"FileNotFoundError",[638,171300,171301],{},"文件不存在",[616,171303,171304,171309],{},[638,171305,171306],{},[46,171307,171308],{},"ZeroDivisionError",[638,171310,171311],{},"除数为 0",[616,171313,171314,171319],{},[638,171315,171316],{},[46,171317,171318],{},"ImportError",[638,171320,171321],{},"导入失败",[14,171323,15832],{},[40,171325,171327],{"className":30909,"code":171326,"language":30911,"meta":27,"style":27},"num = int(\"abc\")\n",[46,171328,171329],{"__ignoreMap":27},[49,171330,171331,171333,171335,171337,171339,171341],{"class":51,"line":52},[49,171332,156318],{"class":73},[49,171334,78],{"class":77},[49,171336,3080],{"class":159},[49,171338,841],{"class":73},[49,171340,156411],{"class":59},[49,171342,847],{"class":73},[14,171344,171345,171346,28916],{},"会触发 ",[46,171347,155365],{},[782,171349,171351],{"id":171350},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,171353,171354],{},"如果不处理异常，程序会直接终止。",[14,171356,171357],{},"例如用户输入年龄：",[40,171359,171361],{"className":30909,"code":171360,"language":30911,"meta":27,"style":27},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[46,171362,171363,171381],{"__ignoreMap":27},[49,171364,171365,171367,171369,171371,171373,171375,171377,171379],{"class":51,"line":52},[49,171366,147077],{"class":73},[49,171368,78],{"class":77},[49,171370,3080],{"class":159},[49,171372,841],{"class":73},[49,171374,54352],{"class":159},[49,171376,841],{"class":73},[49,171378,152925],{"class":59},[49,171380,31028],{"class":73},[49,171382,171383,171385],{"class":51,"line":63},[49,171384,30946],{"class":159},[49,171386,156292],{"class":73},[14,171388,171389,171390,171393],{},"用户输入 ",[46,171391,171392],{},"abc","，程序就会报错退出。",[14,171395,171396],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[782,171398,171400],{"id":171399},"_93-try-except","9.3 try except",[14,171402,171403],{},"基础语法：",[40,171405,171407],{"className":30909,"code":171406,"language":30911,"meta":27,"style":27},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[46,171408,171409,171416,171421,171428],{"__ignoreMap":27},[49,171410,171411,171414],{"class":51,"line":52},[49,171412,171413],{"class":77},"try",[49,171415,4436],{"class":73},[49,171417,171418],{"class":51,"line":63},[49,171419,171420],{"class":73},"    可能出错的代码\n",[49,171422,171423,171426],{"class":51,"line":70},[49,171424,171425],{"class":77},"except",[49,171427,4436],{"class":73},[49,171429,171430],{"class":51,"line":219},[49,171431,171432],{"class":73},"    出错后的处理代码\n",[14,171434,15832],{},[40,171436,171438],{"className":30909,"code":171437,"language":30911,"meta":27,"style":27},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[46,171439,171440,171446,171464,171470,171476],{"__ignoreMap":27},[49,171441,171442,171444],{"class":51,"line":52},[49,171443,171413],{"class":77},[49,171445,4436],{"class":73},[49,171447,171448,171450,171452,171454,171456,171458,171460,171462],{"class":51,"line":63},[49,171449,152917],{"class":73},[49,171451,78],{"class":77},[49,171453,3080],{"class":159},[49,171455,841],{"class":73},[49,171457,54352],{"class":159},[49,171459,841],{"class":73},[49,171461,152925],{"class":59},[49,171463,31028],{"class":73},[49,171465,171466,171468],{"class":51,"line":70},[49,171467,31830],{"class":159},[49,171469,156292],{"class":73},[49,171471,171472,171474],{"class":51,"line":219},[49,171473,171425],{"class":77},[49,171475,4436],{"class":73},[49,171477,171478,171480,171482,171485],{"class":51,"line":233},[49,171479,31830],{"class":159},[49,171481,841],{"class":73},[49,171483,171484],{"class":59},"\"年龄必须是数字\"",[49,171486,847],{"class":73},[14,171488,171489,171490,171492],{},"不建议裸写 ",[46,171491,171425],{},"，最好指定异常类型。",[40,171494,171496],{"className":30909,"code":171495,"language":30911,"meta":27,"style":27},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[46,171497,171498,171504,171522,171528,171536],{"__ignoreMap":27},[49,171499,171500,171502],{"class":51,"line":52},[49,171501,171413],{"class":77},[49,171503,4436],{"class":73},[49,171505,171506,171508,171510,171512,171514,171516,171518,171520],{"class":51,"line":63},[49,171507,152917],{"class":73},[49,171509,78],{"class":77},[49,171511,3080],{"class":159},[49,171513,841],{"class":73},[49,171515,54352],{"class":159},[49,171517,841],{"class":73},[49,171519,152925],{"class":59},[49,171521,31028],{"class":73},[49,171523,171524,171526],{"class":51,"line":70},[49,171525,31830],{"class":159},[49,171527,156292],{"class":73},[49,171529,171530,171532,171534],{"class":51,"line":219},[49,171531,171425],{"class":77},[49,171533,152757],{"class":159},[49,171535,4436],{"class":73},[49,171537,171538,171540,171542,171544],{"class":51,"line":233},[49,171539,31830],{"class":159},[49,171541,841],{"class":73},[49,171543,171484],{"class":59},[49,171545,847],{"class":73},[782,171547,171549],{"id":171548},"_94-捕获多个异常","9.4 捕获多个异常",[40,171551,171553],{"className":30909,"code":171552,"language":30911,"meta":27,"style":27},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[46,171554,171555,171561,171582,171602,171609,171617,171628,171637],{"__ignoreMap":27},[49,171556,171557,171559],{"class":51,"line":52},[49,171558,171413],{"class":77},[49,171560,4436],{"class":73},[49,171562,171563,171566,171568,171570,171572,171574,171576,171578,171580],{"class":51,"line":63},[49,171564,171565],{"class":73},"    nums ",[49,171567,78],{"class":77},[49,171569,52757],{"class":73},[49,171571,1047],{"class":159},[49,171573,13132],{"class":73},[49,171575,915],{"class":159},[49,171577,13132],{"class":73},[49,171579,909],{"class":159},[49,171581,33777],{"class":73},[49,171583,171584,171587,171589,171591,171593,171595,171597,171600],{"class":51,"line":70},[49,171585,171586],{"class":73},"    index ",[49,171588,78],{"class":77},[49,171590,3080],{"class":159},[49,171592,841],{"class":73},[49,171594,54352],{"class":159},[49,171596,841],{"class":73},[49,171598,171599],{"class":59},"\"请输入索引:\"",[49,171601,31028],{"class":73},[49,171603,171604,171606],{"class":51,"line":219},[49,171605,31830],{"class":159},[49,171607,171608],{"class":73},"(nums[index])\n",[49,171610,171611,171613,171615],{"class":51,"line":233},[49,171612,171425],{"class":77},[49,171614,152757],{"class":159},[49,171616,4436],{"class":73},[49,171618,171619,171621,171623,171626],{"class":51,"line":241},[49,171620,31830],{"class":159},[49,171622,841],{"class":73},[49,171624,171625],{"class":59},"\"索引必须是整数\"",[49,171627,847],{"class":73},[49,171629,171630,171632,171635],{"class":51,"line":1920},[49,171631,171425],{"class":77},[49,171633,171634],{"class":159}," IndexError",[49,171636,4436],{"class":73},[49,171638,171639,171641,171643,171646],{"class":51,"line":2011},[49,171640,31830],{"class":159},[49,171642,841],{"class":73},[49,171644,171645],{"class":59},"\"索引越界\"",[49,171647,847],{"class":73},[14,171649,171650],{},"多个异常使用相同处理逻辑：",[40,171652,171654],{"className":30909,"code":171653,"language":30911,"meta":27,"style":27},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[46,171655,171656,171662,171680,171693,171707],{"__ignoreMap":27},[49,171657,171658,171660],{"class":51,"line":52},[49,171659,171413],{"class":77},[49,171661,4436],{"class":73},[49,171663,171664,171666,171668,171670,171672,171674,171676,171678],{"class":51,"line":63},[49,171665,46124],{"class":73},[49,171667,78],{"class":77},[49,171669,3080],{"class":159},[49,171671,841],{"class":73},[49,171673,54352],{"class":159},[49,171675,841],{"class":73},[49,171677,156327],{"class":59},[49,171679,31028],{"class":73},[49,171681,171682,171684,171686,171688,171690],{"class":51,"line":70},[49,171683,31830],{"class":159},[49,171685,841],{"class":73},[49,171687,1275],{"class":159},[49,171689,156577],{"class":77},[49,171691,171692],{"class":73}," num)\n",[49,171694,171695,171697,171699,171701,171703,171705],{"class":51,"line":219},[49,171696,171425],{"class":77},[49,171698,2357],{"class":73},[49,171700,155365],{"class":159},[49,171702,13132],{"class":73},[49,171704,171308],{"class":159},[49,171706,31317],{"class":73},[49,171708,171709,171711,171713,171716],{"class":51,"line":233},[49,171710,31830],{"class":159},[49,171712,841],{"class":73},[49,171714,171715],{"class":59},"\"输入不合法\"",[49,171717,847],{"class":73},[782,171719,171721],{"id":171720},"_95-获取异常信息","9.5 获取异常信息",[40,171723,171725],{"className":30909,"code":171724,"language":30911,"meta":27,"style":27},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[46,171726,171727,171733,171747,171758],{"__ignoreMap":27},[49,171728,171729,171731],{"class":51,"line":52},[49,171730,171413],{"class":77},[49,171732,4436],{"class":73},[49,171734,171735,171737,171739,171741,171743,171745],{"class":51,"line":63},[49,171736,46124],{"class":73},[49,171738,78],{"class":77},[49,171740,3080],{"class":159},[49,171742,841],{"class":73},[49,171744,156411],{"class":59},[49,171746,847],{"class":73},[49,171748,171749,171751,171753,171755],{"class":51,"line":70},[49,171750,171425],{"class":77},[49,171752,152757],{"class":159},[49,171754,65135],{"class":77},[49,171756,171757],{"class":73}," e:\n",[49,171759,171760,171762,171764,171766,171769,171771,171773,171775,171777],{"class":51,"line":219},[49,171761,31830],{"class":159},[49,171763,841],{"class":73},[49,171765,891],{"class":77},[49,171767,171768],{"class":59},"\"出错了:",[49,171770,1725],{"class":159},[49,171772,912],{"class":73},[49,171774,1775],{"class":159},[49,171776,1080],{"class":59},[49,171778,847],{"class":73},[14,171780,146988],{},[40,171782,171785],{"className":171783,"code":171784,"language":5884,"meta":27},[5882],"出错了:invalid literal for int() with base 10: 'abc'\n",[46,171786,171784],{"__ignoreMap":27},[782,171788,171790],{"id":171789},"_96-else和finally","9.6 else和finally",[14,171792,171793,171795],{},[46,171794,2400],{},"：没有异常时执行。",[14,171797,171798,171801],{},[46,171799,171800],{},"finally","：无论是否异常都会执行。",[40,171803,171805],{"className":30909,"code":171804,"language":30911,"meta":27,"style":27},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[46,171806,171807,171813,171831,171839,171849,171855,171876,171882],{"__ignoreMap":27},[49,171808,171809,171811],{"class":51,"line":52},[49,171810,171413],{"class":77},[49,171812,4436],{"class":73},[49,171814,171815,171817,171819,171821,171823,171825,171827,171829],{"class":51,"line":63},[49,171816,46124],{"class":73},[49,171818,78],{"class":77},[49,171820,3080],{"class":159},[49,171822,841],{"class":73},[49,171824,54352],{"class":159},[49,171826,841],{"class":73},[49,171828,156327],{"class":59},[49,171830,31028],{"class":73},[49,171832,171833,171835,171837],{"class":51,"line":70},[49,171834,171425],{"class":77},[49,171836,152757],{"class":159},[49,171838,4436],{"class":73},[49,171840,171841,171843,171845,171847],{"class":51,"line":219},[49,171842,31830],{"class":159},[49,171844,841],{"class":73},[49,171846,153745],{"class":59},[49,171848,847],{"class":73},[49,171850,171851,171853],{"class":51,"line":233},[49,171852,2400],{"class":77},[49,171854,4436],{"class":73},[49,171856,171857,171859,171861,171863,171866,171868,171870,171872,171874],{"class":51,"line":241},[49,171858,31830],{"class":159},[49,171860,841],{"class":73},[49,171862,891],{"class":77},[49,171864,171865],{"class":59},"\"输入正确:",[49,171867,1725],{"class":159},[49,171869,2364],{"class":73},[49,171871,1775],{"class":159},[49,171873,1080],{"class":59},[49,171875,847],{"class":73},[49,171877,171878,171880],{"class":51,"line":1920},[49,171879,171800],{"class":77},[49,171881,4436],{"class":73},[49,171883,171884,171886,171888,171891],{"class":51,"line":2011},[49,171885,31830],{"class":159},[49,171887,841],{"class":73},[49,171889,171890],{"class":59},"\"程序结束\"",[49,171892,847],{"class":73},[14,171894,171895,171897],{},[46,171896,171800],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[782,171899,171901],{"id":171900},"_97-抛出异常","9.7 抛出异常",[14,171903,171904],{},"程序可以主动抛出异常。",[40,171906,171908],{"className":30909,"code":171907,"language":30911,"meta":27,"style":27},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[46,171909,171910,171919,171931,171944,171964,171968,171972],{"__ignoreMap":27},[49,171911,171912,171914,171917],{"class":51,"line":52},[49,171913,32478],{"class":77},[49,171915,171916],{"class":55}," set_age",[49,171918,161946],{"class":73},[49,171920,171921,171923,171925,171927,171929],{"class":51,"line":63},[49,171922,3798],{"class":77},[49,171924,16404],{"class":73},[49,171926,1739],{"class":77},[49,171928,4790],{"class":159},[49,171930,4436],{"class":73},[49,171932,171933,171935,171937,171939,171942],{"class":51,"line":70},[49,171934,103963],{"class":77},[49,171936,152757],{"class":159},[49,171938,841],{"class":73},[49,171940,171941],{"class":59},"\"年龄不能为负数\"",[49,171943,847],{"class":73},[49,171945,171946,171948,171950,171952,171954,171956,171958,171960,171962],{"class":51,"line":219},[49,171947,31830],{"class":159},[49,171949,841],{"class":73},[49,171951,891],{"class":77},[49,171953,162514],{"class":59},[49,171955,1725],{"class":159},[49,171957,70752],{"class":73},[49,171959,1775],{"class":159},[49,171961,1080],{"class":59},[49,171963,847],{"class":73},[49,171965,171966],{"class":51,"line":233},[49,171967,399],{"emptyLinePlaceholder":398},[49,171969,171970],{"class":51,"line":241},[49,171971,399],{"emptyLinePlaceholder":398},[49,171973,171974,171977,171979,171981],{"class":51,"line":1920},[49,171975,171976],{"class":73},"set_age(",[49,171978,1361],{"class":77},[49,171980,1047],{"class":159},[49,171982,847],{"class":73},[14,171984,171985],{},"调用者可以捕获：",[40,171987,171989],{"className":30909,"code":171988,"language":30911,"meta":27,"style":27},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[46,171990,171991,171997,172008,172018],{"__ignoreMap":27},[49,171992,171993,171995],{"class":51,"line":52},[49,171994,171413],{"class":77},[49,171996,4436],{"class":73},[49,171998,171999,172002,172004,172006],{"class":51,"line":63},[49,172000,172001],{"class":73},"    set_age(",[49,172003,1361],{"class":77},[49,172005,1047],{"class":159},[49,172007,847],{"class":73},[49,172009,172010,172012,172014,172016],{"class":51,"line":70},[49,172011,171425],{"class":77},[49,172013,152757],{"class":159},[49,172015,65135],{"class":77},[49,172017,171757],{"class":73},[49,172019,172020,172022],{"class":51,"line":219},[49,172021,31830],{"class":159},[49,172023,67530],{"class":73},[782,172025,172027],{"id":172026},"_98-自定义异常","9.8 自定义异常",[40,172029,172031],{"className":30909,"code":172030,"language":30911,"meta":27,"style":27},"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",[46,172032,172033,172047,172051,172055,172059,172067,172077,172088,172098,172102,172106,172112,172129,172140],{"__ignoreMap":27},[49,172034,172035,172037,172040,172042,172045],{"class":51,"line":52},[49,172036,15391],{"class":77},[49,172038,172039],{"class":55}," BalanceNotEnoughError",[49,172041,841],{"class":73},[49,172043,172044],{"class":159},"Exception",[49,172046,31317],{"class":73},[49,172048,172049],{"class":51,"line":63},[49,172050,150068],{"class":77},[49,172052,172053],{"class":51,"line":70},[49,172054,399],{"emptyLinePlaceholder":398},[49,172056,172057],{"class":51,"line":219},[49,172058,399],{"emptyLinePlaceholder":398},[49,172060,172061,172063,172065],{"class":51,"line":233},[49,172062,32478],{"class":77},[49,172064,150717],{"class":55},[49,172066,163343],{"class":73},[49,172068,172069,172071,172073,172075],{"class":51,"line":241},[49,172070,3798],{"class":77},[49,172072,150673],{"class":73},[49,172074,1789],{"class":77},[49,172076,163120],{"class":73},[49,172078,172079,172081,172084,172086],{"class":51,"line":1920},[49,172080,103963],{"class":77},[49,172082,172083],{"class":73}," BalanceNotEnoughError(",[49,172085,150768],{"class":59},[49,172087,847],{"class":73},[49,172089,172090,172092,172094,172096],{"class":51,"line":2011},[49,172091,4787],{"class":77},[49,172093,163350],{"class":73},[49,172095,1361],{"class":77},[49,172097,150706],{"class":73},[49,172099,172100],{"class":51,"line":2017},[49,172101,399],{"emptyLinePlaceholder":398},[49,172103,172104],{"class":51,"line":2029},[49,172105,399],{"emptyLinePlaceholder":398},[49,172107,172108,172110],{"class":51,"line":2311},[49,172109,171413],{"class":77},[49,172111,4436],{"class":73},[49,172113,172114,172116,172118,172121,172123,172125,172127],{"class":51,"line":2316},[49,172115,163021],{"class":73},[49,172117,78],{"class":77},[49,172119,172120],{"class":73}," withdraw(",[49,172122,1140],{"class":159},[49,172124,13132],{"class":73},[49,172126,2421],{"class":159},[49,172128,847],{"class":73},[49,172130,172131,172133,172136,172138],{"class":51,"line":2322},[49,172132,171425],{"class":77},[49,172134,172135],{"class":73}," BalanceNotEnoughError ",[49,172137,31914],{"class":77},[49,172139,171757],{"class":73},[49,172141,172142,172144],{"class":51,"line":2327},[49,172143,31830],{"class":159},[49,172145,67530],{"class":73},[14,172147,172148],{},"入门阶段大多数情况使用内置异常即可。",[782,172150,172152],{"id":172151},"_99-traceback","9.9 traceback",[14,172154,172155],{},"调试时可以输出完整异常堆栈。",[40,172157,172159],{"className":30909,"code":172158,"language":30911,"meta":27,"style":27},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[46,172160,172161,172168,172172,172178,172188,172196],{"__ignoreMap":27},[49,172162,172163,172165],{"class":51,"line":52},[49,172164,30923],{"class":77},[49,172166,172167],{"class":73}," traceback\n",[49,172169,172170],{"class":51,"line":63},[49,172171,399],{"emptyLinePlaceholder":398},[49,172173,172174,172176],{"class":51,"line":70},[49,172175,171413],{"class":77},[49,172177,4436],{"class":73},[49,172179,172180,172182,172184,172186],{"class":51,"line":219},[49,172181,2683],{"class":159},[49,172183,841],{"class":73},[49,172185,156411],{"class":59},[49,172187,847],{"class":73},[49,172189,172190,172192,172194],{"class":51,"line":233},[49,172191,171425],{"class":77},[49,172193,152757],{"class":159},[49,172195,4436],{"class":73},[49,172197,172198],{"class":51,"line":241},[49,172199,172200],{"class":73},"    traceback.print_exc()\n",[14,172202,172203],{},"日志系统中常把异常堆栈记录到文件。",[782,172205,172207],{"id":172206},"_910-什么是模块","9.10 什么是模块",[14,172209,172210,172211,126514],{},"模块就是一个 ",[46,172212,146883],{},[14,172214,172215,172216,25309],{},"例如创建 ",[46,172217,172218],{},"my_math.py",[40,172220,172222],{"className":30909,"code":172221,"language":30911,"meta":27,"style":27},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[46,172223,172224,172232,172242,172246,172250,172259],{"__ignoreMap":27},[49,172225,172226,172228,172230],{"class":51,"line":52},[49,172227,32478],{"class":77},[49,172229,5906],{"class":55},[49,172231,151624],{"class":73},[49,172233,172234,172236,172238,172240],{"class":51,"line":63},[49,172235,4787],{"class":77},[49,172237,11566],{"class":73},[49,172239,1310],{"class":77},[49,172241,151635],{"class":73},[49,172243,172244],{"class":51,"line":70},[49,172245,399],{"emptyLinePlaceholder":398},[49,172247,172248],{"class":51,"line":219},[49,172249,399],{"emptyLinePlaceholder":398},[49,172251,172252,172254,172257],{"class":51,"line":233},[49,172253,32478],{"class":77},[49,172255,172256],{"class":55}," sub",[49,172258,151624],{"class":73},[49,172260,172261,172263,172265,172267],{"class":51,"line":241},[49,172262,4787],{"class":77},[49,172264,11566],{"class":73},[49,172266,1361],{"class":77},[49,172268,151635],{"class":73},[14,172270,172271],{},"在另一个文件中导入：",[40,172273,172275],{"className":30909,"code":172274,"language":30911,"meta":27,"style":27},"import my_math\n\nprint(my_math.add(1, 2))\n",[46,172276,172277,172284,172288],{"__ignoreMap":27},[49,172278,172279,172281],{"class":51,"line":52},[49,172280,30923],{"class":77},[49,172282,172283],{"class":73}," my_math\n",[49,172285,172286],{"class":51,"line":63},[49,172287,399],{"emptyLinePlaceholder":398},[49,172289,172290,172292,172295,172297,172299,172301],{"class":51,"line":70},[49,172291,30946],{"class":159},[49,172293,172294],{"class":73},"(my_math.add(",[49,172296,1047],{"class":159},[49,172298,13132],{"class":73},[49,172300,915],{"class":159},[49,172302,31028],{"class":73},[782,172304,172306],{"id":172305},"_911-import导入","9.11 import导入",[18,172308,172310],{"id":172309},"_9111-导入模块","9.11.1 导入模块",[40,172312,172314],{"className":30909,"code":172313,"language":30911,"meta":27,"style":27},"import random\n\nprint(random.randint(1, 10))\n",[46,172315,172316,172322,172326],{"__ignoreMap":27},[49,172317,172318,172320],{"class":51,"line":52},[49,172319,30923],{"class":77},[49,172321,45859],{"class":73},[49,172323,172324],{"class":51,"line":63},[49,172325,399],{"emptyLinePlaceholder":398},[49,172327,172328,172330,172333,172335,172337,172339],{"class":51,"line":70},[49,172329,30946],{"class":159},[49,172331,172332],{"class":73},"(random.randint(",[49,172334,1047],{"class":159},[49,172336,13132],{"class":73},[49,172338,1275],{"class":159},[49,172340,31028],{"class":73},[18,172342,172344],{"id":172343},"_9112-导入指定内容","9.11.2 导入指定内容",[40,172346,172348],{"className":30909,"code":172347,"language":30911,"meta":27,"style":27},"from random import randint\n\nprint(randint(1, 10))\n",[46,172349,172350,172361,172365],{"__ignoreMap":27},[49,172351,172352,172354,172356,172358],{"class":51,"line":52},[49,172353,31268],{"class":77},[49,172355,58327],{"class":73},[49,172357,30923],{"class":77},[49,172359,172360],{"class":73}," randint\n",[49,172362,172363],{"class":51,"line":63},[49,172364,399],{"emptyLinePlaceholder":398},[49,172366,172367,172369,172372,172374,172376,172378],{"class":51,"line":70},[49,172368,30946],{"class":159},[49,172370,172371],{"class":73},"(randint(",[49,172373,1047],{"class":159},[49,172375,13132],{"class":73},[49,172377,1275],{"class":159},[49,172379,31028],{"class":73},[18,172381,172383],{"id":172382},"_9113-起别名","9.11.3 起别名",[40,172385,172387],{"className":30909,"code":172386,"language":30911,"meta":27,"style":27},"import random as rd\n\nprint(rd.randint(1, 10))\n",[46,172388,172389,172400,172404],{"__ignoreMap":27},[49,172390,172391,172393,172395,172397],{"class":51,"line":52},[49,172392,30923],{"class":77},[49,172394,58327],{"class":73},[49,172396,31914],{"class":77},[49,172398,172399],{"class":73}," rd\n",[49,172401,172402],{"class":51,"line":63},[49,172403,399],{"emptyLinePlaceholder":398},[49,172405,172406,172408,172411,172413,172415,172417],{"class":51,"line":70},[49,172407,30946],{"class":159},[49,172409,172410],{"class":73},"(rd.randint(",[49,172412,1047],{"class":159},[49,172414,13132],{"class":73},[49,172416,1275],{"class":159},[49,172418,31028],{"class":73},[40,172420,172422],{"className":30909,"code":172421,"language":30911,"meta":27,"style":27},"from random import randint as rint\n\nprint(rint(1, 10))\n",[46,172423,172424,172440,172444],{"__ignoreMap":27},[49,172425,172426,172428,172430,172432,172435,172437],{"class":51,"line":52},[49,172427,31268],{"class":77},[49,172429,58327],{"class":73},[49,172431,30923],{"class":77},[49,172433,172434],{"class":73}," randint ",[49,172436,31914],{"class":77},[49,172438,172439],{"class":73}," rint\n",[49,172441,172442],{"class":51,"line":63},[49,172443,399],{"emptyLinePlaceholder":398},[49,172445,172446,172448,172451,172453,172455,172457],{"class":51,"line":70},[49,172447,30946],{"class":159},[49,172449,172450],{"class":73},"(rint(",[49,172452,1047],{"class":159},[49,172454,13132],{"class":73},[49,172456,1275],{"class":159},[49,172458,31028],{"class":73},[18,172460,172462],{"id":172461},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[40,172464,172466],{"className":30909,"code":172465,"language":30911,"meta":27,"style":27},"from random import *\n",[46,172467,172468],{"__ignoreMap":27},[49,172469,172470,172472,172474,172476],{"class":51,"line":52},[49,172471,31268],{"class":77},[49,172473,58327],{"class":73},[49,172475,30923],{"class":77},[49,172477,172478],{"class":77}," *\n",[14,172480,172481],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[782,172483,172485],{"id":172484},"_912-常用内置模块","9.12 常用内置模块",[18,172487,172489],{"id":172488},"_9121-random","9.12.1 random",[40,172491,172493],{"className":30909,"code":172492,"language":30911,"meta":27,"style":27},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[46,172494,172495,172501,172505,172519,172538],{"__ignoreMap":27},[49,172496,172497,172499],{"class":51,"line":52},[49,172498,30923],{"class":77},[49,172500,45859],{"class":73},[49,172502,172503],{"class":51,"line":63},[49,172504,399],{"emptyLinePlaceholder":398},[49,172506,172507,172509,172511,172513,172515,172517],{"class":51,"line":70},[49,172508,30946],{"class":159},[49,172510,172332],{"class":73},[49,172512,1047],{"class":159},[49,172514,13132],{"class":73},[49,172516,1275],{"class":159},[49,172518,31028],{"class":73},[49,172520,172521,172523,172526,172528,172530,172532,172534,172536],{"class":51,"line":219},[49,172522,30946],{"class":159},[49,172524,172525],{"class":73},"(random.choice([",[49,172527,150419],{"class":59},[49,172529,13132],{"class":73},[49,172531,151467],{"class":59},[49,172533,13132],{"class":73},[49,172535,160262],{"class":59},[49,172537,33674],{"class":73},[49,172539,172540,172542,172545,172547,172549,172551,172553,172555,172557,172559,172561,172563,172565,172567],{"class":51,"line":233},[49,172541,30946],{"class":159},[49,172543,172544],{"class":73},"(random.sample([",[49,172546,1047],{"class":159},[49,172548,13132],{"class":73},[49,172550,915],{"class":159},[49,172552,13132],{"class":73},[49,172554,909],{"class":159},[49,172556,13132],{"class":73},[49,172558,1122],{"class":159},[49,172560,13132],{"class":73},[49,172562,1148],{"class":159},[49,172564,112733],{"class":73},[49,172566,915],{"class":159},[49,172568,31028],{"class":73},[18,172570,172572],{"id":172571},"_9122-time","9.12.2 time",[40,172574,172576],{"className":30909,"code":172575,"language":30911,"meta":27,"style":27},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[46,172577,172578,172584,172588,172595,172603],{"__ignoreMap":27},[49,172579,172580,172582],{"class":51,"line":52},[49,172581,30923],{"class":77},[49,172583,32360],{"class":73},[49,172585,172586],{"class":51,"line":63},[49,172587,399],{"emptyLinePlaceholder":398},[49,172589,172590,172592],{"class":51,"line":70},[49,172591,30946],{"class":159},[49,172593,172594],{"class":73},"(time.time())\n",[49,172596,172597,172599,172601],{"class":51,"line":219},[49,172598,95602],{"class":73},[49,172600,1047],{"class":159},[49,172602,847],{"class":73},[49,172604,172605,172607,172609,172612],{"class":51,"line":233},[49,172606,30946],{"class":159},[49,172608,841],{"class":73},[49,172610,172611],{"class":59},"\"1秒后执行\"",[49,172613,847],{"class":73},[18,172615,172617],{"id":172616},"_9123-datetime","9.12.3 datetime",[40,172619,172621],{"className":30909,"code":172620,"language":30911,"meta":27,"style":27},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[46,172622,172623,172635,172639,172649,172656],{"__ignoreMap":27},[49,172624,172625,172627,172630,172632],{"class":51,"line":52},[49,172626,31268],{"class":77},[49,172628,172629],{"class":73}," datetime ",[49,172631,30923],{"class":77},[49,172633,172634],{"class":73}," datetime\n",[49,172636,172637],{"class":51,"line":63},[49,172638,399],{"emptyLinePlaceholder":398},[49,172640,172641,172644,172646],{"class":51,"line":70},[49,172642,172643],{"class":73},"now ",[49,172645,78],{"class":77},[49,172647,172648],{"class":73}," datetime.now()\n",[49,172650,172651,172653],{"class":51,"line":219},[49,172652,30946],{"class":159},[49,172654,172655],{"class":73},"(now)\n",[49,172657,172658,172660,172663,172666,172668,172671],{"class":51,"line":233},[49,172659,30946],{"class":159},[49,172661,172662],{"class":73},"(now.strftime(",[49,172664,172665],{"class":59},"\"%Y-%m-",[49,172667,157222],{"class":159},[49,172669,172670],{"class":59}," %H:%M:%S\"",[49,172672,31028],{"class":73},[18,172674,172676],{"id":172675},"_9124-os","9.12.4 os",[40,172678,172680],{"className":30909,"code":172679,"language":30911,"meta":27,"style":27},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[46,172681,172682,172688,172692,172699],{"__ignoreMap":27},[49,172683,172684,172686],{"class":51,"line":52},[49,172685,30923],{"class":77},[49,172687,45836],{"class":73},[49,172689,172690],{"class":51,"line":63},[49,172691,399],{"emptyLinePlaceholder":398},[49,172693,172694,172696],{"class":51,"line":70},[49,172695,30946],{"class":159},[49,172697,172698],{"class":73},"(os.getcwd())\n",[49,172700,172701,172703,172706,172709],{"class":51,"line":219},[49,172702,30946],{"class":159},[49,172704,172705],{"class":73},"(os.listdir(",[49,172707,172708],{"class":59},"\".\"",[49,172710,31028],{"class":73},[18,172712,172714],{"id":172713},"_9125-sys","9.12.5 sys",[40,172716,172718],{"className":30909,"code":172717,"language":30911,"meta":27,"style":27},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[46,172719,172720,172727,172731,172738],{"__ignoreMap":27},[49,172721,172722,172724],{"class":51,"line":52},[49,172723,30923],{"class":77},[49,172725,172726],{"class":73}," sys\n",[49,172728,172729],{"class":51,"line":63},[49,172730,399],{"emptyLinePlaceholder":398},[49,172732,172733,172735],{"class":51,"line":70},[49,172734,30946],{"class":159},[49,172736,172737],{"class":73},"(sys.version)\n",[49,172739,172740,172742],{"class":51,"line":219},[49,172741,30946],{"class":159},[49,172743,172744],{"class":73},"(sys.path)\n",[782,172746,172748,172749,172751,172752,1080],{"id":172747},"_913-if-name-main","9.13 if ",[112,172750,80341],{}," == \"",[112,172753,102589],{},[14,172755,172756,172757,172760],{},"模块被直接运行和被导入时，",[46,172758,172759],{},"__name__"," 的值不同。",[14,172762,172763,172764,25309],{},"创建 ",[46,172765,172766],{},"my_module.py",[40,172768,172770],{"className":30909,"code":172769,"language":30911,"meta":27,"style":27},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[46,172771,172772,172780,172790,172794,172798,172810],{"__ignoreMap":27},[49,172773,172774,172776,172778],{"class":51,"line":52},[49,172775,32478],{"class":77},[49,172777,5906],{"class":55},[49,172779,151624],{"class":73},[49,172781,172782,172784,172786,172788],{"class":51,"line":63},[49,172783,4787],{"class":77},[49,172785,11566],{"class":73},[49,172787,1310],{"class":77},[49,172789,151635],{"class":73},[49,172791,172792],{"class":51,"line":70},[49,172793,399],{"emptyLinePlaceholder":398},[49,172795,172796],{"class":51,"line":219},[49,172797,399],{"emptyLinePlaceholder":398},[49,172799,172800,172802,172804,172806,172808],{"class":51,"line":233},[49,172801,2230],{"class":77},[49,172803,31751],{"class":159},[49,172805,102090],{"class":77},[49,172807,102093],{"class":59},[49,172809,4436],{"class":73},[49,172811,172812,172814,172816,172818,172820,172822],{"class":51,"line":241},[49,172813,31830],{"class":159},[49,172815,167131],{"class":73},[49,172817,1047],{"class":159},[49,172819,13132],{"class":73},[49,172821,915],{"class":159},[49,172823,31028],{"class":73},[14,172825,172826],{},"作用：",[30,172828,172829,172832],{},[33,172830,172831],{},"直接运行该文件时，执行测试代码。",[33,172833,172834],{},"被其他文件导入时，不执行测试代码。",[14,172836,172837],{},"这是写模块时很常用的习惯。",[782,172839,172841],{"id":172840},"_914-包","9.14 包",[14,172843,172844,172845,172848],{},"包是包含 ",[46,172846,172847],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172850,172851],{},"目录结构：",[40,172853,172856],{"className":172854,"code":172855,"language":5884,"meta":27},[5882],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[46,172857,172855],{"__ignoreMap":27},[14,172859,172860],{},"导入：",[40,172862,172864],{"className":30909,"code":172863,"language":30911,"meta":27,"style":27},"from utils.file_utils import read_file\n",[46,172865,172866],{"__ignoreMap":27},[49,172867,172868,172870,172873,172875],{"class":51,"line":52},[49,172869,31268],{"class":77},[49,172871,172872],{"class":73}," utils.file_utils ",[49,172874,30923],{"class":77},[49,172876,172877],{"class":73}," read_file\n",[14,172879,172880,172882],{},[46,172881,172847],{}," 可以为空，也可以写包初始化逻辑。",[782,172884,172886],{"id":172885},"_915-第三方包","9.15 第三方包",[14,172888,172889,172890,172892],{},"第三方包通过 ",[46,172891,24524],{}," 安装。",[40,172894,172896],{"className":42,"code":172895,"language":44,"meta":27,"style":27},"pip install requests\n",[46,172897,172898],{"__ignoreMap":27},[49,172899,172900,172902,172904],{"class":51,"line":52},[49,172901,24524],{"class":55},[49,172903,269],{"class":59},[49,172905,146629],{"class":59},[14,172907,172908],{},"使用：",[40,172910,172912],{"className":30909,"code":172911,"language":30911,"meta":27,"style":27},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[46,172913,172914,172920,172924,172939],{"__ignoreMap":27},[49,172915,172916,172918],{"class":51,"line":52},[49,172917,30923],{"class":77},[49,172919,146629],{"class":73},[49,172921,172922],{"class":51,"line":63},[49,172923,399],{"emptyLinePlaceholder":398},[49,172925,172926,172929,172931,172934,172937],{"class":51,"line":70},[49,172927,172928],{"class":73},"response ",[49,172930,78],{"class":77},[49,172932,172933],{"class":73}," requests.get(",[49,172935,172936],{"class":59},"\"https:\u002F\u002Fwww.example.com\"",[49,172938,847],{"class":73},[49,172940,172941,172943],{"class":51,"line":219},[49,172942,30946],{"class":159},[49,172944,172945],{"class":73},"(response.status_code)\n",[14,172947,172948],{},"查看已安装包：",[40,172950,172952],{"className":42,"code":172951,"language":44,"meta":27,"style":27},"pip list\n",[46,172953,172954],{"__ignoreMap":27},[49,172955,172956,172958],{"class":51,"line":52},[49,172957,24524],{"class":55},[49,172959,119486],{"class":59},[14,172961,172962],{},"导出项目依赖：",[40,172964,172965],{"className":42,"code":146824,"language":44,"meta":27,"style":27},[46,172966,172967],{"__ignoreMap":27},[49,172968,172969,172971,172973,172975],{"class":51,"line":52},[49,172970,24524],{"class":55},[49,172972,146833],{"class":59},[49,172974,26907],{"class":77},[49,172976,146838],{"class":59},[14,172978,172979],{},"安装项目依赖：",[40,172981,172982],{"className":42,"code":146844,"language":44,"meta":27,"style":27},[46,172983,172984],{"__ignoreMap":27},[49,172985,172986,172988,172990,172992],{"class":51,"line":52},[49,172987,24524],{"class":55},[49,172989,269],{"class":59},[49,172991,120170],{"class":159},[49,172993,146838],{"class":59},[782,172995,172997],{"id":172996},"_916-模块搜索路径","9.16 模块搜索路径",[14,172999,173000,173001,173004],{},"Python 导入模块时会在 ",[46,173002,173003],{},"sys.path"," 中查找。",[40,173006,173008],{"className":30909,"code":173007,"language":30911,"meta":27,"style":27},"import sys\n\nfor path in sys.path:\n    print(path)\n",[46,173009,173010,173016,173020,173032],{"__ignoreMap":27},[49,173011,173012,173014],{"class":51,"line":52},[49,173013,30923],{"class":77},[49,173015,172726],{"class":73},[49,173017,173018],{"class":51,"line":63},[49,173019,399],{"emptyLinePlaceholder":398},[49,173021,173022,173024,173027,173029],{"class":51,"line":70},[49,173023,3722],{"class":77},[49,173025,173026],{"class":73}," path ",[49,173028,26732],{"class":77},[49,173030,173031],{"class":73}," sys.path:\n",[49,173033,173034,173036],{"class":51,"line":219},[49,173035,31830],{"class":159},[49,173037,169760],{"class":73},[14,173039,173040],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,173042,158154],{},[40,173044,173047],{"className":173045,"code":173046,"language":5884,"meta":27},[5882],"random.py\njson.py\ntime.py\n",[46,173048,173046],{"__ignoreMap":27},[14,173050,173051],{},"这些文件名可能导致导入异常。",[782,173053,173055],{"id":173054},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,173057,172851],{},[40,173059,173062],{"className":173060,"code":173061,"language":5884,"meta":27},[5882],"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",[46,173063,173061],{"__ignoreMap":27},[14,173065,173066,25309],{},[46,173067,173068],{},"utils\u002Ffile_utils.py",[40,173070,173072],{"className":30909,"code":173071,"language":30911,"meta":27,"style":27},"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",[46,173073,173074,173080,173090,173094,173098,173108,173118,173126,173132,173136,173163,173173,173177,173181,173191,173217],{"__ignoreMap":27},[49,173075,173076,173078],{"class":51,"line":52},[49,173077,30923],{"class":77},[49,173079,147622],{"class":73},[49,173081,173082,173084,173086,173088],{"class":51,"line":63},[49,173083,31268],{"class":77},[49,173085,108842],{"class":73},[49,173087,30923],{"class":77},[49,173089,108847],{"class":73},[49,173091,173092],{"class":51,"line":70},[49,173093,399],{"emptyLinePlaceholder":398},[49,173095,173096],{"class":51,"line":219},[49,173097,399],{"emptyLinePlaceholder":398},[49,173099,173100,173102,173105],{"class":51,"line":233},[49,173101,32478],{"class":77},[49,173103,173104],{"class":55}," read_json",[49,173106,173107],{"class":73},"(path):\n",[49,173109,173110,173113,173115],{"class":51,"line":241},[49,173111,173112],{"class":73},"    path ",[49,173114,78],{"class":77},[49,173116,173117],{"class":73}," Path(path)\n",[49,173119,173120,173122,173124],{"class":51,"line":1920},[49,173121,3798],{"class":77},[49,173123,39461],{"class":77},[49,173125,169841],{"class":73},[49,173127,173128,173130],{"class":51,"line":2011},[49,173129,15449],{"class":77},[49,173131,52369],{"class":73},[49,173133,173134],{"class":51,"line":2017},[49,173135,399],{"emptyLinePlaceholder":398},[49,173137,173138,173140,173142,173145,173147,173149,173151,173153,173155,173157,173159,173161],{"class":51,"line":2029},[49,173139,34709],{"class":77},[49,173141,147322],{"class":159},[49,173143,173144],{"class":73},"(path, ",[49,173146,147332],{"class":59},[49,173148,13132],{"class":73},[49,173150,147337],{"class":5913},[49,173152,78],{"class":77},[49,173154,147342],{"class":59},[49,173156,14411],{"class":73},[49,173158,31914],{"class":77},[49,173160,148684],{"class":5913},[49,173162,4436],{"class":73},[49,173164,173165,173167,173169,173171],{"class":51,"line":2311},[49,173166,15449],{"class":77},[49,173168,148695],{"class":73},[49,173170,45885],{"class":5913},[49,173172,847],{"class":73},[49,173174,173175],{"class":51,"line":2316},[49,173176,399],{"emptyLinePlaceholder":398},[49,173178,173179],{"class":51,"line":2322},[49,173180,399],{"emptyLinePlaceholder":398},[49,173182,173183,173185,173188],{"class":51,"line":2327},[49,173184,32478],{"class":77},[49,173186,173187],{"class":55}," write_json",[49,173189,173190],{"class":73},"(path, data):\n",[49,173192,173193,173195,173197,173199,173201,173203,173205,173207,173209,173211,173213,173215],{"class":51,"line":2341},[49,173194,34709],{"class":77},[49,173196,147322],{"class":159},[49,173198,173144],{"class":73},[49,173200,152507],{"class":59},[49,173202,13132],{"class":73},[49,173204,147337],{"class":5913},[49,173206,78],{"class":77},[49,173208,147342],{"class":59},[49,173210,14411],{"class":73},[49,173212,31914],{"class":77},[49,173214,148684],{"class":5913},[49,173216,4436],{"class":73},[49,173218,173219,173222,173224,173226,173228,173230,173232,173234,173236,173238,173240],{"class":51,"line":2346},[49,173220,173221],{"class":73},"        json.dump(data, ",[49,173223,45885],{"class":5913},[49,173225,13132],{"class":73},[49,173227,147668],{"class":5913},[49,173229,78],{"class":77},[49,173231,34518],{"class":159},[49,173233,13132],{"class":73},[49,173235,152543],{"class":5913},[49,173237,78],{"class":77},[49,173239,915],{"class":159},[49,173241,847],{"class":73},[14,173243,173244,25309],{},[46,173245,155138],{},[40,173247,173249],{"className":30909,"code":173248,"language":30911,"meta":27,"style":27},"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",[46,173250,173251,173262,173266,173279,173299],{"__ignoreMap":27},[49,173252,173253,173255,173257,173259],{"class":51,"line":52},[49,173254,31268],{"class":77},[49,173256,172872],{"class":73},[49,173258,30923],{"class":77},[49,173260,173261],{"class":73}," read_json, write_json\n",[49,173263,173264],{"class":51,"line":63},[49,173265,399],{"emptyLinePlaceholder":398},[49,173267,173268,173270,173272,173275,173277],{"class":51,"line":70},[49,173269,160247],{"class":73},[49,173271,78],{"class":77},[49,173273,173274],{"class":73}," read_json(",[49,173276,152362],{"class":59},[49,173278,847],{"class":73},[49,173280,173281,173283,173285,173287,173289,173291,173293,173295,173297],{"class":51,"line":219},[49,173282,171065],{"class":73},[49,173284,63210],{"class":59},[49,173286,51968],{"class":73},[49,173288,150419],{"class":59},[49,173290,13132],{"class":73},[49,173292,152003],{"class":59},[49,173294,51968],{"class":73},[49,173296,1818],{"class":159},[49,173298,165683],{"class":73},[49,173300,173301,173304,173306],{"class":51,"line":233},[49,173302,173303],{"class":73},"write_json(",[49,173305,152362],{"class":59},[49,173307,173308],{"class":73},", students)\n",[782,173310,173312],{"id":173311},"_918-易错点","9.18 易错点",[30,173314,173315,173318,173323,173328,173331,173334],{},[33,173316,173317],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[33,173319,173320,173321,28916],{},"能指定异常类型就不要裸写 ",[46,173322,171425],{},[33,173324,173325,173327],{},[46,173326,171800],{}," 无论是否出错都会执行。",[33,173329,173330],{},"模块文件名不要和标准库重名。",[33,173332,173333],{},"导入自己写的模块时，要注意运行目录。",[33,173335,173336],{},"第三方包要安装到当前解释器或虚拟环境中。",[782,173338,173340],{"id":173339},"_919-本章练习","9.19 本章练习",[30,173342,173343,173346,173349,173355,173362],{},[33,173344,173345],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[33,173347,173348],{},"写函数读取文件，如果文件不存在则返回空字符串。",[33,173350,172763,173351,173354],{},[46,173352,173353],{},"math_utils.py","，实现加减乘除函数并导入使用。",[33,173356,173357,173358,173361],{},"创建一个 ",[46,173359,173360],{},"utils"," 包，把 JSON 读写函数放进去。",[33,173363,173364],{},"写一个程序，捕获除零异常和输入格式异常。",[757,173366,173367],{},"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":27,"searchDepth":63,"depth":63,"links":173369},[173370,173371,173372,173373,173374,173375,173376,173377,173378,173379,173380,173386,173393,173395,173396,173397,173398,173399,173400],{"id":171222,"depth":63,"text":171223},{"id":171350,"depth":63,"text":171351},{"id":171399,"depth":63,"text":171400},{"id":171548,"depth":63,"text":171549},{"id":171720,"depth":63,"text":171721},{"id":171789,"depth":63,"text":171790},{"id":171900,"depth":63,"text":171901},{"id":172026,"depth":63,"text":172027},{"id":172151,"depth":63,"text":172152},{"id":172206,"depth":63,"text":172207},{"id":172305,"depth":63,"text":172306,"children":173381},[173382,173383,173384,173385],{"id":172309,"depth":70,"text":172310},{"id":172343,"depth":70,"text":172344},{"id":172382,"depth":70,"text":172383},{"id":172461,"depth":70,"text":172462},{"id":172484,"depth":63,"text":172485,"children":173387},[173388,173389,173390,173391,173392],{"id":172488,"depth":70,"text":172489},{"id":172571,"depth":70,"text":172572},{"id":172616,"depth":70,"text":172617},{"id":172675,"depth":70,"text":172676},{"id":172713,"depth":70,"text":172714},{"id":172747,"depth":63,"text":173394},"9.13 if name == \"main\"",{"id":172840,"depth":63,"text":172841},{"id":172885,"depth":63,"text":172886},{"id":172996,"depth":63,"text":172997},{"id":173054,"depth":63,"text":173055},{"id":173311,"depth":63,"text":173312},{"id":173339,"depth":63,"text":173340},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171214,"description":24072},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173407,"title":173408,"body":173409,"description":173572,"extension":766,"meta":173573,"navigation":398,"path":173574,"seo":173575,"stem":173576,"__hash__":173577},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173410,"toc":173567},[173411,173414,173417,173420,173431,173433,173507,173510,173513,173516,173519,173522,173525,173528,173531,173534,173537],[10,173412,173408],{"id":173413},"python教程",[14,173415,173416],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,173418,173419],{},"建议学习环境：",[30,173421,173422,173425,173428],{},[33,173423,173424],{},"Python 版本：Python 3.10 及以上。",[33,173426,173427],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[33,173429,173430],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[782,173432,117609],{"id":117609},[30,173434,173435,173441,173447,173453,173459,173465,173471,173477,173483,173489,173495,173501],{},[33,173436,173437],{},[124,173438,173440],{"href":173439},".\u002Fch1-Python","Python环境与第一个程序",[33,173442,173443],{},[124,173444,173446],{"href":173445},".\u002Fch2","基础语法、变量与字符串",[33,173448,173449],{},[124,173450,173452],{"href":173451},".\u002Fch3","判断语句",[33,173454,173455],{},[124,173456,173458],{"href":173457},".\u002Fch4","循环语句",[33,173460,173461],{},[124,173462,173464],{"href":173463},".\u002Fch5","函数基础",[33,173466,173467],{},[124,173468,173470],{"href":173469},".\u002Fch6","数据容器",[33,173472,173473],{},[124,173474,173476],{"href":173475},".\u002Fch7","函数进阶",[33,173478,173479],{},[124,173480,173482],{"href":173481},".\u002Fch8","文件操作",[33,173484,173485],{},[124,173486,173488],{"href":173487},".\u002Fch9","异常、模块与包",[33,173490,173491],{},[124,173492,173494],{"href":173493},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[33,173496,173497],{},[124,173498,173500],{"href":173499},".\u002Fch11","面向对象基础",[33,173502,173503],{},[124,173504,173506],{"href":173505},".\u002Fch12","综合案例与复习路线",[782,173508,173509],{"id":173509},"学习路线",[14,173511,173512],{},"第一阶段：能运行程序。",[14,173514,173515],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173517,173518],{},"第二阶段：能组织数据。",[14,173520,173521],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173523,173524],{},"第三阶段：能封装逻辑。",[14,173526,173527],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173529,173530],{},"第四阶段：能做小项目。",[14,173532,173533],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[782,173535,173536],{"id":173536},"参考资料",[30,173538,173539,173546,173553,173560],{},[33,173540,173541,173542],{},"黑马程序员 Python 入门教程推荐：",[124,173543,173544],{"href":173544,"rel":173545},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[128],[33,173547,173548,173549],{},"Python 官方中文教程：",[124,173550,173551],{"href":173551,"rel":173552},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[128],[33,173554,173555,173556],{},"Python 标准库文档：",[124,173557,173558],{"href":173558,"rel":173559},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[128],[33,173561,173562,173563],{},"pyecharts 文档：",[124,173564,173565],{"href":173565,"rel":173566},"https:\u002F\u002Fpyecharts.org\u002F",[128],{"title":27,"searchDepth":63,"depth":63,"links":173568},[173569,173570,173571],{"id":117609,"depth":63,"text":117609},{"id":173509,"depth":63,"text":173509},{"id":173536,"depth":63,"text":173536},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24074},"\u002Fwiki\u002F2024-10-10-python",{"title":173408,"description":173572},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379005]