[{"data":1,"prerenderedAt":174384},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-11-10-docker\u002Fch6-shou-dong-chuang-jian-docker-jing-xiang":3,"wiki-doc-nav":1750},{"id":4,"title":5,"body":6,"description":275,"extension":1744,"meta":1745,"navigation":306,"path":1746,"seo":1747,"stem":1748,"__hash__":1749},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":8,"toc":1739},"minimark",[9,13,18,22,257,261,266,269,398,404,407,412,415,422,425,430,433,445,448,453,460,491,498,574,579,582,605,608,683,688,691,697,706,711,716,720,731,737,740,743,767,770,773,803,806,809,1330,1333,1338,1343,1347,1370,1375,1379,1383,1386,1389,1392,1420,1423,1426,1444,1447,1450,1472,1480,1485,1490,1494,1497,1500,1503,1506,1553,1556,1574,1577,1582,1585,1606,1609,1667,1670,1675,1679,1682,1689,1692,1695,1700,1703,1719,1722,1735],[10,11,5],"h1",{"id":12},"_6手动创建docker镜像",[14,15,17],"h3",{"id":16},"_61dockerfile","6.1.DockerFile",[19,20,21],"p",{},"常用命令：",[23,24,25,42],"table",{},[26,27,28],"thead",{},[29,30,31,36,39],"tr",{},[32,33,35],"th",{"align":34},"left","指令",[32,37,38],{"align":34},"说明",[32,40,41],{"align":34},"示例",[43,44,45,57,74,85,96,107,118,129,140,155,169,180,194,205,216,230,246],"tbody",{},[29,46,47,51,54],{},[48,49,50],"td",{"align":34},"FROM",[48,52,53],{"align":34},"指定基础镜像，是 Dockerfile 的起点",[48,55,56],{"align":34},"FROM ubuntu:22.04",[29,58,59,62,65],{},[48,60,61],{"align":34},"LABEL",[48,63,64],{"align":34},"添加元数据（如作者、版本等）",[48,66,67,68,73],{"align":34},"LABEL maintainer=”",[69,70,72],"a",{"href":71},"mailto:you@example.com","you@example.com","”",[29,75,76,79,82],{},[48,77,78],{"align":34},"ENV",[48,80,81],{"align":34},"设置环境变量",[48,83,84],{"align":34},"ENV PORT=8080",[29,86,87,90,93],{},[48,88,89],{"align":34},"ARG",[48,91,92],{"align":34},"构建参数，只在构建期间可用",[48,94,95],{"align":34},"ARG VERSION=1.0",[29,97,98,101,104],{},[48,99,100],{"align":34},"RUN",[48,102,103],{"align":34},"构建镜像时运行命令",[48,105,106],{"align":34},"RUN apt-get update && apt-get install -y curl",[29,108,109,112,115],{},[48,110,111],{"align":34},"COPY",[48,113,114],{"align":34},"复制文件到镜像中",[48,116,117],{"align":34},"COPY . \u002Fapp",[29,119,120,123,126],{},[48,121,122],{"align":34},"ADD",[48,124,125],{"align":34},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[48,127,128],{"align":34},"ADD archive.tar.gz \u002Fdata\u002F",[29,130,131,134,137],{},[48,132,133],{"align":34},"WORKDIR",[48,135,136],{"align":34},"设置工作目录",[48,138,139],{"align":34},"WORKDIR \u002Fopt",[29,141,142,145,148],{},[48,143,144],{"align":34},"CMD",[48,146,147],{"align":34},"设置容器启动时默认命令（可被 docker run 覆盖）",[48,149,150,151],{"align":34},"CMD ",[152,153,154],"span",{},"“node”, “index.js”",[29,156,157,160,163],{},[48,158,159],{"align":34},"ENTRYPOINT",[48,161,162],{"align":34},"设置容器启动时固定命令（通常用于 CLI 工具等）",[48,164,165,166],{"align":34},"ENTRYPOINT ",[152,167,168],{},"“python3”",[29,170,171,174,177],{},[48,172,173],{"align":34},"EXPOSE",[48,175,176],{"align":34},"声明镜像内服务监听的端口（不会自动映射）",[48,178,179],{"align":34},"EXPOSE 80",[29,181,182,185,188],{},[48,183,184],{"align":34},"VOLUME",[48,186,187],{"align":34},"声明数据卷挂载点",[48,189,190,191],{"align":34},"VOLUME ",[152,192,193],{},"“\u002Fdata”",[29,195,196,199,202],{},[48,197,198],{"align":34},"USER",[48,200,201],{"align":34},"设置后续命令执行的用户",[48,203,204],{"align":34},"USER appuser",[29,206,207,210,213],{},[48,208,209],{"align":34},"ONBUILD",[48,211,212],{"align":34},"当镜像作为其他镜像基础镜像时触发的构建指令",[48,214,215],{"align":34},"ONBUILD COPY . \u002Fsrc",[29,217,218,221,224],{},[48,219,220],{"align":34},"SHELL",[48,222,223],{"align":34},"更改默认 shell，比如将 sh -c 改为 bash -c",[48,225,226,227],{"align":34},"SHELL ",[152,228,229],{},"“\u002Fbin\u002Fbash”, “-c”",[29,231,232,235,238],{},[48,233,234],{"align":34},"HEALTHCHECK",[48,236,237],{"align":34},"定义容器运行时的健康检查命令",[48,239,240,241],{"align":34},"`HEALTHCHECK CMD curl –fail ",[69,242,243],{"href":243,"rel":244},"http:\u002F\u002Flocalhost:8080",[245],"nofollow",[29,247,248,251,254],{},[48,249,250],{"align":34},"STOPSIGNAL",[48,252,253],{"align":34},"容器停止时发送的信号",[48,255,256],{"align":34},"STOPSIGNAL SIGKILL",[14,258,260],{"id":259},"_62自己创建容器","6.2.自己创建容器",[262,263,265],"h4",{"id":264},"_621手动创建","6.2.1.手动创建",[19,267,268],{},"在x86电脑上编译x86的：",[270,271,276],"pre",{"className":272,"code":273,"language":274,"meta":275,"style":275},"language-bash shiki shiki-themes github-light github-dark","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","bash","",[277,278,279,301,308,322,327,341,346,360,365,379,384],"code",{"__ignoreMap":275},[152,280,283,287,291,295,298],{"class":281,"line":282},"line",1,[152,284,286],{"class":285},"sScJk","docker",[152,288,290],{"class":289},"sZZnC"," build",[152,292,294],{"class":293},"sj4cs"," -t",[152,296,297],{"class":289}," ros-melodic-cuda118-cudnn8-bionic:latest",[152,299,300],{"class":289}," .\n",[152,302,304],{"class":281,"line":303},2,[152,305,307],{"emptyLinePlaceholder":306},true,"\n",[152,309,311,313,315,317,320],{"class":281,"line":310},3,[152,312,286],{"class":285},[152,314,290],{"class":289},[152,316,294],{"class":293},[152,318,319],{"class":289}," ros-noetic-focal:latest",[152,321,300],{"class":289},[152,323,325],{"class":281,"line":324},4,[152,326,307],{"emptyLinePlaceholder":306},[152,328,330,332,334,336,339],{"class":281,"line":329},5,[152,331,286],{"class":285},[152,333,290],{"class":289},[152,335,294],{"class":293},[152,337,338],{"class":289}," ros-humble-jammy:latest",[152,340,300],{"class":289},[152,342,344],{"class":281,"line":343},6,[152,345,307],{"emptyLinePlaceholder":306},[152,347,349,351,353,355,358],{"class":281,"line":348},7,[152,350,286],{"class":285},[152,352,290],{"class":289},[152,354,294],{"class":293},[152,356,357],{"class":289}," ros-jazzy-noble:latest",[152,359,300],{"class":289},[152,361,363],{"class":281,"line":362},8,[152,364,307],{"emptyLinePlaceholder":306},[152,366,368,370,372,374,377],{"class":281,"line":367},9,[152,369,286],{"class":285},[152,371,290],{"class":289},[152,373,294],{"class":293},[152,375,376],{"class":289}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[152,378,300],{"class":289},[152,380,382],{"class":281,"line":381},10,[152,383,307],{"emptyLinePlaceholder":306},[152,385,387,389,391,393,396],{"class":281,"line":386},11,[152,388,286],{"class":285},[152,390,290],{"class":289},[152,392,294],{"class":293},[152,394,395],{"class":289}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[152,397,300],{"class":289},[19,399,400],{},[401,402],"img",{"alt":275,"src":403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,405,406],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,408,409],{},[401,410],{"alt":275,"src":411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,413,414],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[416,417,418],"ol",{},[419,420,421],"li",{},"创建 Docker Hub 账户",[19,423,424],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[416,426,427],{"start":303},[419,428,429],{},"登录 Docker Hub",[19,431,432],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[270,434,436],{"className":272,"code":435,"language":274,"meta":275,"style":275},"docker login\n",[277,437,438],{"__ignoreMap":275},[152,439,440,442],{"class":281,"line":282},[152,441,286],{"class":285},[152,443,444],{"class":289}," login\n",[19,446,447],{},"输入你的 Docker Hub 用户名和密码进行验证。",[416,449,450],{},[419,451,452],{},"为你的镜像打标签",[19,454,455,456,459],{},"Docker Hub 使用 ",[277,457,458],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[270,461,463],{"className":272,"code":462,"language":274,"meta":275,"style":275},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[277,464,465],{"__ignoreMap":275},[152,466,467,469,472,474,478,481,485,488],{"class":281,"line":282},[152,468,286],{"class":285},[152,470,471],{"class":289}," tag",[152,473,357],{"class":289},[152,475,477],{"class":476},"szBVR"," \u003C",[152,479,480],{"class":289},"你的用户",[152,482,484],{"class":483},"sVt8B","名",[152,486,487],{"class":476},">",[152,489,490],{"class":289},"\u002Fros-jazzy-noble:latest\n",[19,492,493,494,497],{},"例如，如果你的 Docker Hub 用户名是 ",[277,495,496],{},"tungchiahui","，你应该执行：",[270,499,501],{"className":272,"code":500,"language":274,"meta":275,"style":275},"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",[277,502,503,514,518,529,533,544,548,559,563],{"__ignoreMap":275},[152,504,505,507,509,511],{"class":281,"line":282},[152,506,286],{"class":285},[152,508,471],{"class":289},[152,510,319],{"class":289},[152,512,513],{"class":289}," tungchiahui\u002Fros-noetic-focal:latest\n",[152,515,516],{"class":281,"line":303},[152,517,307],{"emptyLinePlaceholder":306},[152,519,520,522,524,526],{"class":281,"line":310},[152,521,286],{"class":285},[152,523,471],{"class":289},[152,525,338],{"class":289},[152,527,528],{"class":289}," tungchiahui\u002Fros-humble-jammy:latest\n",[152,530,531],{"class":281,"line":324},[152,532,307],{"emptyLinePlaceholder":306},[152,534,535,537,539,541],{"class":281,"line":329},[152,536,286],{"class":285},[152,538,471],{"class":289},[152,540,357],{"class":289},[152,542,543],{"class":289}," tungchiahui\u002Fros-jazzy-noble:latest\n",[152,545,546],{"class":281,"line":343},[152,547,307],{"emptyLinePlaceholder":306},[152,549,550,552,554,556],{"class":281,"line":348},[152,551,286],{"class":285},[152,553,471],{"class":289},[152,555,376],{"class":289},[152,557,558],{"class":289}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[152,560,561],{"class":281,"line":362},[152,562,307],{"emptyLinePlaceholder":306},[152,564,565,567,569,571],{"class":281,"line":367},[152,566,286],{"class":285},[152,568,471],{"class":289},[152,570,395],{"class":289},[152,572,573],{"class":289}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[416,575,576],{"start":303},[419,577,578],{},"推送镜像到 Docker Hub",[19,580,581],{},"使用以下命令将镜像推送到 Docker Hub：",[270,583,585],{"className":272,"code":584,"language":274,"meta":275,"style":275},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[277,586,587],{"__ignoreMap":275},[152,588,589,591,594,596,598,600,602],{"class":281,"line":282},[152,590,286],{"class":285},[152,592,593],{"class":289}," push",[152,595,477],{"class":476},[152,597,480],{"class":289},[152,599,484],{"class":483},[152,601,487],{"class":476},[152,603,604],{"class":289},"\u002Fros-noetic-jazzy-noble:latest\n",[19,606,607],{},"例如：",[270,609,611],{"className":272,"code":610,"language":274,"meta":275,"style":275},"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",[277,612,613,621,625,633,637,645,649,658,662,670,674],{"__ignoreMap":275},[152,614,615,617,619],{"class":281,"line":282},[152,616,286],{"class":285},[152,618,593],{"class":289},[152,620,513],{"class":289},[152,622,623],{"class":281,"line":303},[152,624,307],{"emptyLinePlaceholder":306},[152,626,627,629,631],{"class":281,"line":310},[152,628,286],{"class":285},[152,630,593],{"class":289},[152,632,528],{"class":289},[152,634,635],{"class":281,"line":324},[152,636,307],{"emptyLinePlaceholder":306},[152,638,639,641,643],{"class":281,"line":329},[152,640,286],{"class":285},[152,642,593],{"class":289},[152,644,543],{"class":289},[152,646,647],{"class":281,"line":343},[152,648,307],{"emptyLinePlaceholder":306},[152,650,651,653,655],{"class":281,"line":348},[152,652,286],{"class":285},[152,654,593],{"class":289},[152,656,657],{"class":289}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[152,659,660],{"class":281,"line":362},[152,661,307],{"emptyLinePlaceholder":306},[152,663,664,666,668],{"class":281,"line":367},[152,665,286],{"class":285},[152,667,593],{"class":289},[152,669,573],{"class":289},[152,671,672],{"class":281,"line":381},[152,673,307],{"emptyLinePlaceholder":306},[152,675,676,678,680],{"class":281,"line":386},[152,677,286],{"class":285},[152,679,593],{"class":289},[152,681,682],{"class":289}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[416,684,685],{"start":310},[419,686,687],{},"验证推送成功",[19,689,690],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,692,693],{},[694,695,696],"strong",{},"注意事项",[698,699,700,703],"ul",{},[419,701,702],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[419,704,705],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,707,708],{},[401,709],{"alt":275,"src":710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,712,713],{},[401,714],{"alt":275,"src":715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[262,717,719],{"id":718},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,721,722,723,726,727,730],{},"如果您想在 ",[694,724,725],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[694,728,729],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,732,733,734],{},"1. ",[694,735,736],{},"启用 Docker 跨平台构建",[19,738,739],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,741,742],{},"第一步：启用 buildx（只需执行一次）",[270,744,746],{"className":272,"code":745,"language":274,"meta":275,"style":275},"docker buildx create --name multiarch_builder --use\n",[277,747,748],{"__ignoreMap":275},[152,749,750,752,755,758,761,764],{"class":281,"line":282},[152,751,286],{"class":285},[152,753,754],{"class":289}," buildx",[152,756,757],{"class":289}," create",[152,759,760],{"class":293}," --name",[152,762,763],{"class":289}," multiarch_builder",[152,765,766],{"class":293}," --use\n",[19,768,769],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,771,772],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[270,774,776],{"className":272,"code":775,"language":274,"meta":275,"style":275},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[277,777,778],{"__ignoreMap":275},[152,779,780,782,785,788,791,794,797,800],{"class":281,"line":282},[152,781,286],{"class":285},[152,783,784],{"class":289}," run",[152,786,787],{"class":293}," --rm",[152,789,790],{"class":293}," --privileged",[152,792,793],{"class":289}," multiarch\u002Fqemu-user-static",[152,795,796],{"class":293}," --reset",[152,798,799],{"class":293}," -p",[152,801,802],{"class":289}," yes\n",[19,804,805],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,807,808],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[270,810,812],{"className":272,"code":811,"language":274,"meta":275,"style":275},"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",[277,813,814,858,862,868,879,889,898,904,908,912,922,930,940,947,952,957,968,977,987,994,999,1004,1016,1025,1035,1042,1047,1052,1063,1072,1082,1089,1094,1099,1110,1119,1129,1136,1141,1146,1157,1166,1176,1183,1188,1193,1204,1213,1223,1230,1235,1240,1251,1260,1270,1277,1282,1287,1299,1308,1318,1325],{"__ignoreMap":275},[152,815,816,818,820,822,825,828,830,832,835,837,839,842,845,848,851,853,856],{"class":281,"line":282},[152,817,286],{"class":285},[152,819,754],{"class":289},[152,821,290],{"class":289},[152,823,824],{"class":293}," --platform",[152,826,827],{"class":289}," linux\u002Famd64,linux\u002Farm64",[152,829,294],{"class":293},[152,831,477],{"class":476},[152,833,834],{"class":289},"你的镜像",[152,836,484],{"class":483},[152,838,487],{"class":476},[152,840,841],{"class":289},":",[152,843,844],{"class":476},"\u003C",[152,846,847],{"class":289},"标",[152,849,850],{"class":483},"签",[152,852,487],{"class":476},[152,854,855],{"class":293}," --push",[152,857,300],{"class":289},[152,859,860],{"class":281,"line":303},[152,861,307],{"emptyLinePlaceholder":306},[152,863,864],{"class":281,"line":310},[152,865,867],{"class":866},"sJ8bj","# 例子：\n",[152,869,870,872,874,876],{"class":281,"line":324},[152,871,286],{"class":285},[152,873,754],{"class":289},[152,875,290],{"class":289},[152,877,878],{"class":293}," \\\n",[152,880,881,884,887],{"class":281,"line":329},[152,882,883],{"class":483},"--platform ",[152,885,886],{"class":289},"linux\u002Famd64,linux\u002Farm64",[152,888,878],{"class":293},[152,890,891,893,896],{"class":281,"line":343},[152,892,294],{"class":293},[152,894,895],{"class":289}," tungchiahui\u002Fros:noetic-focal",[152,897,878],{"class":293},[152,899,900,902],{"class":281,"line":348},[152,901,855],{"class":293},[152,903,878],{"class":293},[152,905,906],{"class":281,"line":362},[152,907,300],{"class":289},[152,909,910],{"class":281,"line":367},[152,911,307],{"emptyLinePlaceholder":306},[152,913,914,916,918,920],{"class":281,"line":381},[152,915,286],{"class":285},[152,917,754],{"class":289},[152,919,290],{"class":289},[152,921,878],{"class":293},[152,923,924,926,928],{"class":281,"line":386},[152,925,883],{"class":483},[152,927,886],{"class":289},[152,929,878],{"class":293},[152,931,933,935,938],{"class":281,"line":932},12,[152,934,294],{"class":293},[152,936,937],{"class":289}," tungchiahui\u002Fros:humble-jammy",[152,939,878],{"class":293},[152,941,943,945],{"class":281,"line":942},13,[152,944,855],{"class":293},[152,946,878],{"class":293},[152,948,950],{"class":281,"line":949},14,[152,951,300],{"class":289},[152,953,955],{"class":281,"line":954},15,[152,956,307],{"emptyLinePlaceholder":306},[152,958,960,962,964,966],{"class":281,"line":959},16,[152,961,286],{"class":285},[152,963,754],{"class":289},[152,965,290],{"class":289},[152,967,878],{"class":293},[152,969,971,973,975],{"class":281,"line":970},17,[152,972,883],{"class":483},[152,974,886],{"class":289},[152,976,878],{"class":293},[152,978,980,982,985],{"class":281,"line":979},18,[152,981,294],{"class":293},[152,983,984],{"class":289}," tungchiahui\u002Fros:jazzy-noble",[152,986,878],{"class":293},[152,988,990,992],{"class":281,"line":989},19,[152,991,855],{"class":293},[152,993,878],{"class":293},[152,995,997],{"class":281,"line":996},20,[152,998,300],{"class":289},[152,1000,1002],{"class":281,"line":1001},21,[152,1003,307],{"emptyLinePlaceholder":306},[152,1005,1007,1010,1012,1014],{"class":281,"line":1006},22,[152,1008,1009],{"class":285}," docker",[152,1011,754],{"class":289},[152,1013,290],{"class":289},[152,1015,878],{"class":293},[152,1017,1019,1021,1023],{"class":281,"line":1018},23,[152,1020,883],{"class":483},[152,1022,886],{"class":289},[152,1024,878],{"class":293},[152,1026,1028,1030,1033],{"class":281,"line":1027},24,[152,1029,294],{"class":293},[152,1031,1032],{"class":289}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[152,1034,878],{"class":293},[152,1036,1038,1040],{"class":281,"line":1037},25,[152,1039,855],{"class":293},[152,1041,878],{"class":293},[152,1043,1045],{"class":281,"line":1044},26,[152,1046,300],{"class":289},[152,1048,1050],{"class":281,"line":1049},27,[152,1051,307],{"emptyLinePlaceholder":306},[152,1053,1055,1057,1059,1061],{"class":281,"line":1054},28,[152,1056,286],{"class":285},[152,1058,754],{"class":289},[152,1060,290],{"class":289},[152,1062,878],{"class":293},[152,1064,1066,1068,1070],{"class":281,"line":1065},29,[152,1067,883],{"class":483},[152,1069,886],{"class":289},[152,1071,878],{"class":293},[152,1073,1075,1077,1080],{"class":281,"line":1074},30,[152,1076,294],{"class":293},[152,1078,1079],{"class":289}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[152,1081,878],{"class":293},[152,1083,1085,1087],{"class":281,"line":1084},31,[152,1086,855],{"class":293},[152,1088,878],{"class":293},[152,1090,1092],{"class":281,"line":1091},32,[152,1093,300],{"class":289},[152,1095,1097],{"class":281,"line":1096},33,[152,1098,307],{"emptyLinePlaceholder":306},[152,1100,1102,1104,1106,1108],{"class":281,"line":1101},34,[152,1103,1009],{"class":285},[152,1105,754],{"class":289},[152,1107,290],{"class":289},[152,1109,878],{"class":293},[152,1111,1113,1115,1117],{"class":281,"line":1112},35,[152,1114,883],{"class":483},[152,1116,886],{"class":289},[152,1118,878],{"class":293},[152,1120,1122,1124,1127],{"class":281,"line":1121},36,[152,1123,294],{"class":293},[152,1125,1126],{"class":289}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[152,1128,878],{"class":293},[152,1130,1132,1134],{"class":281,"line":1131},37,[152,1133,855],{"class":293},[152,1135,878],{"class":293},[152,1137,1139],{"class":281,"line":1138},38,[152,1140,300],{"class":289},[152,1142,1144],{"class":281,"line":1143},39,[152,1145,307],{"emptyLinePlaceholder":306},[152,1147,1149,1151,1153,1155],{"class":281,"line":1148},40,[152,1150,286],{"class":285},[152,1152,754],{"class":289},[152,1154,290],{"class":289},[152,1156,878],{"class":293},[152,1158,1160,1162,1164],{"class":281,"line":1159},41,[152,1161,883],{"class":483},[152,1163,886],{"class":289},[152,1165,878],{"class":293},[152,1167,1169,1171,1174],{"class":281,"line":1168},42,[152,1170,294],{"class":293},[152,1172,1173],{"class":289}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[152,1175,878],{"class":293},[152,1177,1179,1181],{"class":281,"line":1178},43,[152,1180,855],{"class":293},[152,1182,878],{"class":293},[152,1184,1186],{"class":281,"line":1185},44,[152,1187,300],{"class":289},[152,1189,1191],{"class":281,"line":1190},45,[152,1192,307],{"emptyLinePlaceholder":306},[152,1194,1196,1198,1200,1202],{"class":281,"line":1195},46,[152,1197,286],{"class":285},[152,1199,754],{"class":289},[152,1201,290],{"class":289},[152,1203,878],{"class":293},[152,1205,1207,1209,1211],{"class":281,"line":1206},47,[152,1208,883],{"class":483},[152,1210,886],{"class":289},[152,1212,878],{"class":293},[152,1214,1216,1218,1221],{"class":281,"line":1215},48,[152,1217,294],{"class":293},[152,1219,1220],{"class":289}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[152,1222,878],{"class":293},[152,1224,1226,1228],{"class":281,"line":1225},49,[152,1227,855],{"class":293},[152,1229,878],{"class":293},[152,1231,1233],{"class":281,"line":1232},50,[152,1234,300],{"class":289},[152,1236,1238],{"class":281,"line":1237},51,[152,1239,307],{"emptyLinePlaceholder":306},[152,1241,1243,1245,1247,1249],{"class":281,"line":1242},52,[152,1244,1009],{"class":285},[152,1246,754],{"class":289},[152,1248,290],{"class":289},[152,1250,878],{"class":293},[152,1252,1254,1256,1258],{"class":281,"line":1253},53,[152,1255,883],{"class":483},[152,1257,886],{"class":289},[152,1259,878],{"class":293},[152,1261,1263,1265,1268],{"class":281,"line":1262},54,[152,1264,294],{"class":293},[152,1266,1267],{"class":289}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[152,1269,878],{"class":293},[152,1271,1273,1275],{"class":281,"line":1272},55,[152,1274,855],{"class":293},[152,1276,878],{"class":293},[152,1278,1280],{"class":281,"line":1279},56,[152,1281,300],{"class":289},[152,1283,1285],{"class":281,"line":1284},57,[152,1286,307],{"emptyLinePlaceholder":306},[152,1288,1290,1293,1295,1297],{"class":281,"line":1289},58,[152,1291,1292],{"class":285},"  docker",[152,1294,754],{"class":289},[152,1296,290],{"class":289},[152,1298,878],{"class":293},[152,1300,1302,1304,1306],{"class":281,"line":1301},59,[152,1303,883],{"class":483},[152,1305,886],{"class":289},[152,1307,878],{"class":293},[152,1309,1311,1313,1316],{"class":281,"line":1310},60,[152,1312,294],{"class":293},[152,1314,1315],{"class":289}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[152,1317,878],{"class":293},[152,1319,1321,1323],{"class":281,"line":1320},61,[152,1322,855],{"class":293},[152,1324,878],{"class":293},[152,1326,1328],{"class":281,"line":1327},62,[152,1329,300],{"class":289},[19,1331,1332],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,1334,1335],{},[401,1336],{"alt":275,"src":1337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,1339,1340],{},[401,1341],{"alt":275,"src":1342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[262,1344,1346],{"id":1345},"_623清除构建缓存","6.2.3.清除构建缓存",[270,1348,1350],{"className":272,"code":1349,"language":274,"meta":275,"style":275},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[277,1351,1352,1357],{"__ignoreMap":275},[152,1353,1354],{"class":281,"line":282},[152,1355,1356],{"class":866},"# 清理BuildKit构建缓存\n",[152,1358,1359,1361,1364,1367],{"class":281,"line":303},[152,1360,286],{"class":285},[152,1362,1363],{"class":289}," builder",[152,1365,1366],{"class":289}," prune",[152,1368,1369],{"class":293}," -f\n",[19,1371,1372],{},[401,1373],{"alt":275,"src":1374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[14,1376,1378],{"id":1377},"_63补充","6.3.补充",[262,1380,1382],{"id":1381},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,1384,1385],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,1387,1388],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,1390,1391],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[270,1393,1395],{"className":272,"code":1394,"language":274,"meta":275,"style":275},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[277,1396,1397,1404],{"__ignoreMap":275},[152,1398,1399,1401],{"class":281,"line":282},[152,1400,50],{"class":285},[152,1402,1403],{"class":289}," nginx\n",[152,1405,1406,1408,1411,1414,1417],{"class":281,"line":303},[152,1407,100],{"class":285},[152,1409,1410],{"class":289}," echo",[152,1412,1413],{"class":289}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[152,1415,1416],{"class":476}," >",[152,1418,1419],{"class":289}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,1421,1422],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,1424,1425],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[270,1427,1429],{"className":272,"code":1428,"language":274,"meta":275,"style":275},"docker build -t nginx:tuling .\n",[277,1430,1431],{"__ignoreMap":275},[152,1432,1433,1435,1437,1439,1442],{"class":281,"line":282},[152,1434,286],{"class":285},[152,1436,290],{"class":289},[152,1438,294],{"class":293},[152,1440,1441],{"class":289}," nginx:tuling",[152,1443,300],{"class":289},[19,1445,1446],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,1448,1449],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[270,1451,1453],{"className":272,"code":1452,"language":274,"meta":275,"style":275},"docker run -d -p 92:80 nginx:tuling\n",[277,1454,1455],{"__ignoreMap":275},[152,1456,1457,1459,1461,1464,1466,1469],{"class":281,"line":282},[152,1458,286],{"class":285},[152,1460,784],{"class":289},[152,1462,1463],{"class":293}," -d",[152,1465,799],{"class":293},[152,1467,1468],{"class":289}," 92:80",[152,1470,1471],{"class":289}," nginx:tuling\n",[19,1473,1474,1475],{},"4、访问 ",[69,1476,1479],{"href":1477,"rel":1478},"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",[245],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,1481,1482],{},[401,1483],{"alt":275,"src":1484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,1486,1487],{},[401,1488],{"alt":275,"src":1489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[262,1491,1493],{"id":1492},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,1495,1496],{},"只需要知道大体流程即可",[19,1498,1499],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,1501,1502],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,1504,1505],{},"2、在Dockerfile中添加以下内容",[270,1507,1511],{"className":1508,"code":1509,"language":1510,"meta":275,"style":275},"language-markdown shiki shiki-themes github-light github-dark","# 基于哪个镜像\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","markdown",[277,1512,1513,1518,1523,1528,1533,1538,1543,1548],{"__ignoreMap":275},[152,1514,1515],{"class":281,"line":282},[152,1516,1517],{},"# 基于哪个镜像\n",[152,1519,1520],{"class":281,"line":303},[152,1521,1522],{},"From java:8\n",[152,1524,1525],{"class":281,"line":310},[152,1526,1527],{},"# 复制文件到容器\n",[152,1529,1530],{"class":281,"line":324},[152,1531,1532],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[152,1534,1535],{"class":281,"line":329},[152,1536,1537],{},"# 声明需要暴露的端口\n",[152,1539,1540],{"class":281,"line":343},[152,1541,1542],{},"EXPOSE 8877\n",[152,1544,1545],{"class":281,"line":348},[152,1546,1547],{},"# 配置容器启动后执行的命令\n",[152,1549,1550],{"class":281,"line":362},[152,1551,1552],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,1554,1555],{},"3、使用docker build命令构建镜像",[270,1557,1559],{"className":272,"code":1558,"language":274,"meta":275,"style":275},"docker build -t tulingmall-member:0.0.5 .\n",[277,1560,1561],{"__ignoreMap":275},[152,1562,1563,1565,1567,1569,1572],{"class":281,"line":282},[152,1564,286],{"class":285},[152,1566,290],{"class":289},[152,1568,294],{"class":293},[152,1570,1571],{"class":289}," tulingmall-member:0.0.5",[152,1573,300],{"class":289},[19,1575,1576],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,1578,1579],{},[401,1580],{"alt":275,"src":1581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,1583,1584],{},"4、启动镜像，加-d可在后台启动",[270,1586,1588],{"className":272,"code":1587,"language":274,"meta":275,"style":275},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[277,1589,1590],{"__ignoreMap":275},[152,1591,1592,1594,1596,1598,1600,1603],{"class":281,"line":282},[152,1593,286],{"class":285},[152,1595,784],{"class":289},[152,1597,1463],{"class":293},[152,1599,799],{"class":293},[152,1601,1602],{"class":289}," 8877:8877",[152,1604,1605],{"class":289}," tulingmall-member:0.0.5\n",[19,1607,1608],{},"加上JVM参数：",[270,1610,1612],{"className":272,"code":1611,"language":274,"meta":275,"style":275},"# --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",[277,1613,1614,1619,1634,1645,1654,1662],{"__ignoreMap":275},[152,1615,1616],{"class":281,"line":282},[152,1617,1618],{"class":866},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[152,1620,1621,1623,1625,1628,1630,1632],{"class":281,"line":303},[152,1622,286],{"class":285},[152,1624,784],{"class":289},[152,1626,1627],{"class":293},"  -d",[152,1629,799],{"class":293},[152,1631,1602],{"class":289},[152,1633,878],{"class":293},[152,1635,1636,1639,1642],{"class":281,"line":310},[152,1637,1638],{"class":483},"-e ",[152,1640,1641],{"class":289},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[152,1643,1644],{"class":293},"  \\\n",[152,1646,1647,1649,1652],{"class":281,"line":324},[152,1648,1638],{"class":483},[152,1650,1651],{"class":289},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[152,1653,1644],{"class":293},[152,1655,1656,1659],{"class":281,"line":329},[152,1657,1658],{"class":483},"--cap-add=SYS_PTRACE  ",[152,1660,1661],{"class":293},"\\\n",[152,1663,1664],{"class":281,"line":343},[152,1665,1666],{"class":483},"tulingmall-member:0.0.5\n",[19,1668,1669],{},"5、访问会员服务接口",[19,1671,1672],{},[401,1673],{"alt":275,"src":1674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[262,1676,1678],{"id":1677},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,1680,1681],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,1683,1684,1685],{},"阿里云docker镜像仓库：",[69,1686,1687],{"href":1687,"rel":1688},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[245],[19,1690,1691],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,1693,1694],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,1696,1697],{},[401,1698],{"alt":275,"src":1699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,1701,1702],{},"要把镜像推送到镜像仓库",[270,1704,1706],{"className":272,"code":1705,"language":274,"meta":275,"style":275},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[277,1707,1708],{"__ignoreMap":275},[152,1709,1710,1712,1714,1716],{"class":281,"line":282},[152,1711,286],{"class":285},[152,1713,471],{"class":289},[152,1715,1571],{"class":289},[152,1717,1718],{"class":289}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,1720,1721],{},"最后将镜像推送到远程仓库",[270,1723,1725],{"className":272,"code":1724,"language":274,"meta":275,"style":275},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[277,1726,1727],{"__ignoreMap":275},[152,1728,1729,1731,1733],{"class":281,"line":282},[152,1730,286],{"class":285},[152,1732,593],{"class":289},[152,1734,1718],{"class":289},[1736,1737,1738],"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 .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":275,"searchDepth":303,"depth":303,"links":1740},[1741,1742,1743],{"id":16,"depth":310,"text":17},{"id":259,"depth":310,"text":260},{"id":1377,"depth":310,"text":1378},"md",{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":5,"description":275},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",[1751,6804,7912,9332,12295,13646,15135,16224,24985,24998,25593,25619,25743,25984,26049,26067,26080,26127,26251,26419,26618,26798,27003,27139,27234,27271,27284,27593,28328,29033,29054,30072,31441,31592,31605,31617,31918,51730,51745,51762,51795,54667,78015,94160,94181,94294,94415,95185,95848,96209,96247,96353,96453,96496,96522,96583,98237,98338,98363,98854,99354,100434,100717,101459,101961,101973,103989,105653,107156,108854,110771,112690,114712,118182,118614,119077,119826,122770,123118,123140,123496,126803,126815,127218,127241,127388,127555,127760,128061,128618,129275,131206,132804,133453,134947,136378,137613,139307,141059,143469,143585,144520,144731,145616,146851,147079,147092,148247,150659,153027,156348,158825,160469,162246,164259,167311,169491,172018,174212],{"id":1752,"title":1753,"body":1754,"description":275,"extension":1744,"meta":6799,"navigation":306,"path":6800,"seo":6801,"stem":6802,"__hash__":6803},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1755,"toc":6771},[1756,1759,1764,1767,1771,1782,1786,1790,1793,1796,1799,1802,1805,1833,1837,1840,1843,1846,1849,1900,1904,1922,1924,1938,1941,1949,1952,2804,2811,2827,2831,2917,2921,2927,3013,3017,3055,3059,3123,3127,3131,3137,3148,3152,3157,3161,3166,3170,3175,3179,3183,3188,3439,3444,3582,3587,3843,3846,3854,3858,3863,3966,3969,4267,4276,4377,4380,4383,4386,4389,4649,4654,4794,4797,4976,4979,5107,5110,5262,5266,5271,5274,5285,5293,5296,5403,5407,5411,5416,5465,5470,5475,5499,5504,5557,5560,5565,5742,5747,6032,6037,6434,6438,6443,6500,6505,6513,6516,6656,6659,6768],[10,1757,1753],{"id":1758},"_1基础入门",[1760,1761,1763],"h2",{"id":1762},"_11注释","1.1注释",[19,1765,1766],{},"\u002F\u002F或者\u002F* *\u002F",[1760,1768,1770],{"id":1769},"_12命名","1.2命名",[416,1772,1773,1776,1779],{},[419,1774,1775],{},"字母数字下划线",[419,1777,1778],{},"开头必须是字母或_",[419,1780,1781],{},"不能使用关键词",[1760,1783,1785],{"id":1784},"_13数据类型","1.3数据类型",[14,1787,1789],{"id":1788},"_131整形","1.3.1整形",[19,1791,1792],{},"short 短整形 2",[19,1794,1795],{},"int 整形 4",[19,1797,1798],{},"long 长整形 win4 linux32位4 linux64位8",[19,1800,1801],{},"long long 长长整形 8",[19,1803,1804],{},"利用sizeof可以求数据类型占用的内存空间大小",[270,1806,1810],{"className":1807,"code":1808,"language":1809,"meta":275,"style":275},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[277,1811,1812,1826],{"__ignoreMap":275},[152,1813,1814,1817,1820,1823],{"class":281,"line":282},[152,1815,1816],{"class":476},"sizeof",[152,1818,1819],{"class":483},"(",[152,1821,1822],{"class":476},"int",[152,1824,1825],{"class":483},")\n",[152,1827,1828,1830],{"class":281,"line":303},[152,1829,1816],{"class":476},[152,1831,1832],{"class":483},"(num)\n",[14,1834,1836],{"id":1835},"_132浮点型","1.3.2浮点型",[19,1838,1839],{},"float 单精度 4节 7位有效数字",[19,1841,1842],{},"double 双精度 8节 15-16有效数字",[19,1844,1845],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,1847,1848],{},"注意点：",[270,1850,1852],{"className":1807,"code":1851,"language":1809,"meta":275,"style":275},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[277,1853,1854,1877],{"__ignoreMap":275},[152,1855,1856,1859,1862,1865,1868,1871,1874],{"class":281,"line":282},[152,1857,1858],{"class":476},"float",[152,1860,1861],{"class":483}," f1",[152,1863,1864],{"class":476},"=",[152,1866,1867],{"class":293},"3.14",[152,1869,1870],{"class":476},"f",[152,1872,1873],{"class":483},";",[152,1875,1876],{"class":866}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[152,1878,1879,1881,1884,1886,1889,1892,1895,1897],{"class":281,"line":303},[152,1880,1858],{"class":476},[152,1882,1883],{"class":483}," f2",[152,1885,1864],{"class":476},[152,1887,1888],{"class":293},"3",[152,1890,1891],{"class":476},"e",[152,1893,1894],{"class":293},"2",[152,1896,1873],{"class":483},[152,1898,1899],{"class":866}," \u002F\u002F科学记数法\n",[14,1901,1903],{"id":1902},"_133字符型","1.3.3字符型",[270,1905,1907],{"className":1807,"code":1906,"language":1809,"meta":275,"style":275},"char ch='a'\n",[277,1908,1909],{"__ignoreMap":275},[152,1910,1911,1914,1917,1919],{"class":281,"line":282},[152,1912,1913],{"class":476},"char",[152,1915,1916],{"class":483}," ch",[152,1918,1864],{"class":476},[152,1920,1921],{"class":289},"'a'\n",[19,1923,1848],{},[416,1925,1926,1929,1932,1935],{},[419,1927,1928],{},"在显示字符型变量时，只能单引号，双引号x",[419,1930,1931],{},"单引号内只能一个字符，不能字符串",[419,1933,1934],{},"c和c++字符型变量只占用一个字符",[419,1936,1937],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,1939,1940],{},"ASCII码大致由以下两部分组成：",[416,1942,1943,1946],{},[419,1944,1945],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[419,1947,1948],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,1950,1951],{},"ASCII码表格：",[23,1953,1954,1994],{},[26,1955,1956],{},[29,1957,1958,1964,1969,1973,1978,1982,1986,1990],{},[32,1959,1960,1963],{},[694,1961,1962],{},"ASCII","值",[32,1965,1966],{},[694,1967,1968],{},"控制字符",[32,1970,1971,1963],{},[694,1972,1962],{},[32,1974,1975],{},[694,1976,1977],{},"字符",[32,1979,1980,1963],{},[694,1981,1962],{},[32,1983,1984],{},[694,1985,1977],{},[32,1987,1988,1963],{},[694,1989,1962],{},[32,1991,1992],{},[694,1993,1977],{},[43,1995,1996,2022,2047,2072,2097,2123,2148,2173,2199,2224,2250,2276,2302,2327,2353,2379,2405,2429,2454,2479,2504,2529,2554,2579,2604,2629,2654,2679,2704,2728,2753,2778],{},[29,1997,1998,2001,2004,2007,2010,2013,2016,2019],{},[48,1999,2000],{},"0",[48,2002,2003],{},"NUT",[48,2005,2006],{},"32",[48,2008,2009],{},"(space)",[48,2011,2012],{},"64",[48,2014,2015],{},"@",[48,2017,2018],{},"96",[48,2020,2021],{},"、",[29,2023,2024,2027,2030,2033,2036,2039,2042,2045],{},[48,2025,2026],{},"1",[48,2028,2029],{},"SOH",[48,2031,2032],{},"33",[48,2034,2035],{},"!",[48,2037,2038],{},"65",[48,2040,2041],{},"A",[48,2043,2044],{},"97",[48,2046,69],{},[29,2048,2049,2051,2054,2057,2060,2063,2066,2069],{},[48,2050,1894],{},[48,2052,2053],{},"STX",[48,2055,2056],{},"34",[48,2058,2059],{},"\"",[48,2061,2062],{},"66",[48,2064,2065],{},"B",[48,2067,2068],{},"98",[48,2070,2071],{},"b",[29,2073,2074,2076,2079,2082,2085,2088,2091,2094],{},[48,2075,1888],{},[48,2077,2078],{},"ETX",[48,2080,2081],{},"35",[48,2083,2084],{},"#",[48,2086,2087],{},"67",[48,2089,2090],{},"C",[48,2092,2093],{},"99",[48,2095,2096],{},"c",[29,2098,2099,2102,2105,2108,2111,2114,2117,2120],{},[48,2100,2101],{},"4",[48,2103,2104],{},"EOT",[48,2106,2107],{},"36",[48,2109,2110],{},"$",[48,2112,2113],{},"68",[48,2115,2116],{},"D",[48,2118,2119],{},"100",[48,2121,2122],{},"d",[29,2124,2125,2128,2131,2134,2137,2140,2143,2146],{},[48,2126,2127],{},"5",[48,2129,2130],{},"ENQ",[48,2132,2133],{},"37",[48,2135,2136],{},"%",[48,2138,2139],{},"69",[48,2141,2142],{},"E",[48,2144,2145],{},"101",[48,2147,1891],{},[29,2149,2150,2153,2156,2159,2162,2165,2168,2171],{},[48,2151,2152],{},"6",[48,2154,2155],{},"ACK",[48,2157,2158],{},"38",[48,2160,2161],{},"&",[48,2163,2164],{},"70",[48,2166,2167],{},"F",[48,2169,2170],{},"102",[48,2172,1870],{},[29,2174,2175,2178,2181,2184,2187,2190,2193,2196],{},[48,2176,2177],{},"7",[48,2179,2180],{},"BEL",[48,2182,2183],{},"39",[48,2185,2186],{},",",[48,2188,2189],{},"71",[48,2191,2192],{},"G",[48,2194,2195],{},"103",[48,2197,2198],{},"g",[29,2200,2201,2204,2207,2210,2212,2215,2218,2221],{},[48,2202,2203],{},"8",[48,2205,2206],{},"BS",[48,2208,2209],{},"40",[48,2211,1819],{},[48,2213,2214],{},"72",[48,2216,2217],{},"H",[48,2219,2220],{},"104",[48,2222,2223],{},"h",[29,2225,2226,2229,2232,2235,2238,2241,2244,2247],{},[48,2227,2228],{},"9",[48,2230,2231],{},"HT",[48,2233,2234],{},"41",[48,2236,2237],{},")",[48,2239,2240],{},"73",[48,2242,2243],{},"I",[48,2245,2246],{},"105",[48,2248,2249],{},"i",[29,2251,2252,2255,2258,2261,2264,2267,2270,2273],{},[48,2253,2254],{},"10",[48,2256,2257],{},"LF",[48,2259,2260],{},"42",[48,2262,2263],{},"*",[48,2265,2266],{},"74",[48,2268,2269],{},"J",[48,2271,2272],{},"106",[48,2274,2275],{},"j",[29,2277,2278,2281,2284,2287,2290,2293,2296,2299],{},[48,2279,2280],{},"11",[48,2282,2283],{},"VT",[48,2285,2286],{},"43",[48,2288,2289],{},"+",[48,2291,2292],{},"75",[48,2294,2295],{},"K",[48,2297,2298],{},"107",[48,2300,2301],{},"k",[29,2303,2304,2307,2310,2313,2315,2318,2321,2324],{},[48,2305,2306],{},"12",[48,2308,2309],{},"FF",[48,2311,2312],{},"44",[48,2314,2186],{},[48,2316,2317],{},"76",[48,2319,2320],{},"L",[48,2322,2323],{},"108",[48,2325,2326],{},"l",[29,2328,2329,2332,2335,2338,2341,2344,2347,2350],{},[48,2330,2331],{},"13",[48,2333,2334],{},"CR",[48,2336,2337],{},"45",[48,2339,2340],{},"-",[48,2342,2343],{},"77",[48,2345,2346],{},"M",[48,2348,2349],{},"109",[48,2351,2352],{},"m",[29,2354,2355,2358,2361,2364,2367,2370,2373,2376],{},[48,2356,2357],{},"14",[48,2359,2360],{},"SO",[48,2362,2363],{},"46",[48,2365,2366],{},".",[48,2368,2369],{},"78",[48,2371,2372],{},"N",[48,2374,2375],{},"110",[48,2377,2378],{},"n",[29,2380,2381,2384,2387,2390,2393,2396,2399,2402],{},[48,2382,2383],{},"15",[48,2385,2386],{},"SI",[48,2388,2389],{},"47",[48,2391,2392],{},"\u002F",[48,2394,2395],{},"79",[48,2397,2398],{},"O",[48,2400,2401],{},"111",[48,2403,2404],{},"o",[29,2406,2407,2410,2413,2416,2418,2421,2424,2427],{},[48,2408,2409],{},"16",[48,2411,2412],{},"DLE",[48,2414,2415],{},"48",[48,2417,2000],{},[48,2419,2420],{},"80",[48,2422,2423],{},"P",[48,2425,2426],{},"112",[48,2428,19],{},[29,2430,2431,2434,2437,2440,2442,2445,2448,2451],{},[48,2432,2433],{},"17",[48,2435,2436],{},"DCI",[48,2438,2439],{},"49",[48,2441,2026],{},[48,2443,2444],{},"81",[48,2446,2447],{},"Q",[48,2449,2450],{},"113",[48,2452,2453],{},"q",[29,2455,2456,2459,2462,2465,2467,2470,2473,2476],{},[48,2457,2458],{},"18",[48,2460,2461],{},"DC2",[48,2463,2464],{},"50",[48,2466,1894],{},[48,2468,2469],{},"82",[48,2471,2472],{},"R",[48,2474,2475],{},"114",[48,2477,2478],{},"r",[29,2480,2481,2484,2487,2490,2492,2495,2498,2501],{},[48,2482,2483],{},"19",[48,2485,2486],{},"DC3",[48,2488,2489],{},"51",[48,2491,1888],{},[48,2493,2494],{},"83",[48,2496,2497],{},"S",[48,2499,2500],{},"115",[48,2502,2503],{},"s",[29,2505,2506,2509,2512,2515,2517,2520,2523,2526],{},[48,2507,2508],{},"20",[48,2510,2511],{},"DC4",[48,2513,2514],{},"52",[48,2516,2101],{},[48,2518,2519],{},"84",[48,2521,2522],{},"T",[48,2524,2525],{},"116",[48,2527,2528],{},"t",[29,2530,2531,2534,2537,2540,2542,2545,2548,2551],{},[48,2532,2533],{},"21",[48,2535,2536],{},"NAK",[48,2538,2539],{},"53",[48,2541,2127],{},[48,2543,2544],{},"85",[48,2546,2547],{},"U",[48,2549,2550],{},"117",[48,2552,2553],{},"u",[29,2555,2556,2559,2562,2565,2567,2570,2573,2576],{},[48,2557,2558],{},"22",[48,2560,2561],{},"SYN",[48,2563,2564],{},"54",[48,2566,2152],{},[48,2568,2569],{},"86",[48,2571,2572],{},"V",[48,2574,2575],{},"118",[48,2577,2578],{},"v",[29,2580,2581,2584,2587,2590,2592,2595,2598,2601],{},[48,2582,2583],{},"23",[48,2585,2586],{},"TB",[48,2588,2589],{},"55",[48,2591,2177],{},[48,2593,2594],{},"87",[48,2596,2597],{},"W",[48,2599,2600],{},"119",[48,2602,2603],{},"w",[29,2605,2606,2609,2612,2615,2617,2620,2623,2626],{},[48,2607,2608],{},"24",[48,2610,2611],{},"CAN",[48,2613,2614],{},"56",[48,2616,2203],{},[48,2618,2619],{},"88",[48,2621,2622],{},"X",[48,2624,2625],{},"120",[48,2627,2628],{},"x",[29,2630,2631,2634,2637,2640,2642,2645,2648,2651],{},[48,2632,2633],{},"25",[48,2635,2636],{},"EM",[48,2638,2639],{},"57",[48,2641,2228],{},[48,2643,2644],{},"89",[48,2646,2647],{},"Y",[48,2649,2650],{},"121",[48,2652,2653],{},"y",[29,2655,2656,2659,2662,2665,2667,2670,2673,2676],{},[48,2657,2658],{},"26",[48,2660,2661],{},"SUB",[48,2663,2664],{},"58",[48,2666,841],{},[48,2668,2669],{},"90",[48,2671,2672],{},"Z",[48,2674,2675],{},"122",[48,2677,2678],{},"z",[29,2680,2681,2684,2687,2690,2692,2695,2698,2701],{},[48,2682,2683],{},"27",[48,2685,2686],{},"ESC",[48,2688,2689],{},"59",[48,2691,1873],{},[48,2693,2694],{},"91",[48,2696,2697],{},"[",[48,2699,2700],{},"123",[48,2702,2703],{},"{",[29,2705,2706,2709,2712,2715,2717,2720,2722,2725],{},[48,2707,2708],{},"28",[48,2710,2711],{},"FS",[48,2713,2714],{},"60",[48,2716,844],{},[48,2718,2719],{},"92",[48,2721,2392],{},[48,2723,2724],{},"124",[48,2726,2727],{},"|",[29,2729,2730,2733,2736,2739,2741,2744,2747,2750],{},[48,2731,2732],{},"29",[48,2734,2735],{},"GS",[48,2737,2738],{},"61",[48,2740,1864],{},[48,2742,2743],{},"93",[48,2745,2746],{},"]",[48,2748,2749],{},"125",[48,2751,2752],{},"}",[29,2754,2755,2758,2761,2764,2766,2769,2772,2775],{},[48,2756,2757],{},"30",[48,2759,2760],{},"RS",[48,2762,2763],{},"62",[48,2765,487],{},[48,2767,2768],{},"94",[48,2770,2771],{},"^",[48,2773,2774],{},"126",[48,2776,2777],{},"`",[29,2779,2780,2783,2786,2789,2792,2795,2798,2801],{},[48,2781,2782],{},"31",[48,2784,2785],{},"US",[48,2787,2788],{},"63",[48,2790,2791],{},"?",[48,2793,2794],{},"95",[48,2796,2797],{},"_",[48,2799,2800],{},"127",[48,2802,2803],{},"DEL",[19,2805,2806,2807,2810],{},"ASCII 码大致由以下",[694,2808,2809],{},"两部分组","成：",[698,2812,2813,2820],{},[419,2814,2815,2816,2819],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[694,2817,2818],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[419,2821,2822,2823,2826],{},"ASCII 打印字符：数字 ",[694,2824,2825],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[14,2828,2830],{"id":2829},"_134转义字符","1.3.4转义字符",[270,2832,2834],{"className":1807,"code":2833,"language":1809,"meta":275,"style":275},"\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",[277,2835,2836,2841,2857,2871,2876,2889,2894],{"__ignoreMap":275},[152,2837,2838],{"class":281,"line":282},[152,2839,2840],{"class":866},"\u002F\u002F换行符\n",[152,2842,2843,2846,2849,2852,2854],{"class":281,"line":303},[152,2844,2845],{"class":483},"cout ",[152,2847,2848],{"class":476},"\u003C\u003C",[152,2850,2851],{"class":289},"\"hello world\u002Fn\"",[152,2853,1873],{"class":483},[152,2855,2856],{"class":866}," \u002F\u002F就等同于如下：\n",[152,2858,2859,2861,2863,2866,2868],{"class":281,"line":310},[152,2860,2845],{"class":483},[152,2862,2848],{"class":476},[152,2864,2865],{"class":289},"\"hello world\"",[152,2867,2848],{"class":476},[152,2869,2870],{"class":483},"endl;\n",[152,2872,2873],{"class":281,"line":324},[152,2874,2875],{"class":866},"\u002F\u002F反斜杠\n",[152,2877,2878,2880,2882,2885,2887],{"class":281,"line":329},[152,2879,2845],{"class":483},[152,2881,2848],{"class":476},[152,2883,2884],{"class":289},"\"\u002F\u002F\"",[152,2886,2848],{"class":476},[152,2888,2870],{"class":483},[152,2890,2891],{"class":281,"line":343},[152,2892,2893],{"class":866},"\u002F\u002F水平制表符\n",[152,2895,2896,2898,2900,2903,2906,2909,2911,2914],{"class":281,"line":348},[152,2897,2845],{"class":483},[152,2899,2848],{"class":476},[152,2901,2902],{"class":289},"\"aaaa",[152,2904,2905],{"class":293},"\\t",[152,2907,2908],{"class":289},"helloworld\"",[152,2910,2848],{"class":476},[152,2912,2913],{"class":483},"endl;",[152,2915,2916],{"class":866}," \u002F\u002F输出窗口时有对齐效果\n",[14,2918,2920],{"id":2919},"_135字符串型","1.3.5字符串型",[19,2922,2923,2924,2926],{},"char 变量名",[152,2925],{},"=\"字符串值\"",[270,2928,2930],{"className":1807,"code":2929,"language":1809,"meta":275,"style":275},"\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",[277,2931,2932,2937,2942,2947,2952,2966,2979,2984,2989,3000],{"__ignoreMap":275},[152,2933,2934],{"class":281,"line":282},[152,2935,2936],{"class":866},"\u002F\u002Fc风格字符串\n",[152,2938,2939],{"class":281,"line":303},[152,2940,2941],{"class":866},"\u002F\u002F注意事项：\n",[152,2943,2944],{"class":281,"line":310},[152,2945,2946],{"class":866},"\u002F\u002F1.char字符串名[]\n",[152,2948,2949],{"class":281,"line":324},[152,2950,2951],{"class":866},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[152,2953,2954,2956,2959,2961,2963],{"class":281,"line":329},[152,2955,1913],{"class":476},[152,2957,2958],{"class":483}," str[]",[152,2960,1864],{"class":476},[152,2962,2865],{"class":289},[152,2964,2965],{"class":483},";\n",[152,2967,2968,2970,2972,2975,2977],{"class":281,"line":343},[152,2969,2845],{"class":483},[152,2971,2848],{"class":476},[152,2973,2974],{"class":483},"str",[152,2976,2848],{"class":476},[152,2978,2870],{"class":483},[152,2980,2981],{"class":281,"line":348},[152,2982,2983],{"class":866},"\u002F\u002Fc++风格字符串\n",[152,2985,2986],{"class":281,"line":362},[152,2987,2988],{"class":866},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[152,2990,2991,2994,2996,2998],{"class":281,"line":367},[152,2992,2993],{"class":483},"string str2",[152,2995,1864],{"class":476},[152,2997,2865],{"class":289},[152,2999,2965],{"class":483},[152,3001,3002,3004,3006,3009,3011],{"class":281,"line":381},[152,3003,2845],{"class":483},[152,3005,2848],{"class":476},[152,3007,3008],{"class":483},"str2",[152,3010,2848],{"class":476},[152,3012,2870],{"class":483},[14,3014,3016],{"id":3015},"_136布尔类型bool","1.3.6布尔类型bool",[270,3018,3020],{"className":1807,"code":3019,"language":1809,"meta":275,"style":275},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[277,3021,3022,3037],{"__ignoreMap":275},[152,3023,3024,3027,3030,3032,3035],{"class":281,"line":282},[152,3025,3026],{"class":476},"bool",[152,3028,3029],{"class":483}," flag",[152,3031,1864],{"class":476},[152,3033,3034],{"class":293},"true",[152,3036,2965],{"class":483},[152,3038,3039,3042,3045,3048,3050,3052],{"class":281,"line":303},[152,3040,3041],{"class":483},"cout",[152,3043,3044],{"class":476},"\u003C\u003Csizeof",[152,3046,3047],{"class":483},"(flag)",[152,3049,2848],{"class":476},[152,3051,2913],{"class":483},[152,3053,3054],{"class":866}," \u002F\u002F查看布尔占内存空间\n",[1760,3056,3058],{"id":3057},"_14键盘输入cin","1.4键盘输入cin",[270,3060,3062],{"className":1807,"code":3061,"language":1809,"meta":275,"style":275},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[277,3063,3064,3077,3094,3105],{"__ignoreMap":275},[152,3065,3066,3068,3071,3073,3075],{"class":281,"line":282},[152,3067,1822],{"class":476},[152,3069,3070],{"class":483}," a",[152,3072,1864],{"class":476},[152,3074,2000],{"class":293},[152,3076,2965],{"class":483},[152,3078,3079,3081,3083,3086,3088,3090,3092],{"class":281,"line":303},[152,3080,3041],{"class":483},[152,3082,2848],{"class":476},[152,3084,3085],{"class":289},"\"请给整型变量a赋值\"",[152,3087,2848],{"class":476},[152,3089,69],{"class":483},[152,3091,2848],{"class":476},[152,3093,2870],{"class":483},[152,3095,3096,3099,3102],{"class":281,"line":310},[152,3097,3098],{"class":483},"cin ",[152,3100,3101],{"class":476},">>",[152,3103,3104],{"class":483}," a;\n",[152,3106,3107,3109,3111,3114,3117,3119,3121],{"class":281,"line":324},[152,3108,2845],{"class":483},[152,3110,2848],{"class":476},[152,3112,3113],{"class":289}," \"整型变量a=\"",[152,3115,3116],{"class":476}," \u003C\u003C",[152,3118,69],{"class":483},[152,3120,2848],{"class":476},[152,3122,2870],{"class":483},[1760,3124,3126],{"id":3125},"_15运算符","1.5运算符",[14,3128,3130],{"id":3129},"_151算术运算符","1.5.1算术运算符",[19,3132,3133,3136],{},[401,3134],{"alt":275,"src":3135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[416,3138,3139,3142,3145],{},[419,3140,3141],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[419,3143,3144],{},"两个小数不可以做取模运算",[419,3146,3147],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[14,3149,3151],{"id":3150},"_152赋值运算符","1.5.2赋值运算符",[19,3153,3154],{},[401,3155],{"alt":275,"src":3156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[14,3158,3160],{"id":3159},"_153比较运算符","1.5.3比较运算符",[19,3162,3163],{},[401,3164],{"alt":275,"src":3165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[14,3167,3169],{"id":3168},"_154逻辑运算符","1.5.4逻辑运算符",[19,3171,3172],{},[401,3173],{"alt":275,"src":3174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[1760,3176,3178],{"id":3177},"_16程序流程结构","1.6程序流程结构",[14,3180,3182],{"id":3181},"_161选择结构","1.6.1选择结构",[416,3184,3185],{},[419,3186,3187],{},"if语句\n单行、多行、多条件if语句",[270,3189,3191],{"className":1807,"code":3190,"language":1809,"meta":275,"style":275},"\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",[277,3192,3193,3198,3213,3218,3232,3237,3242,3251,3264,3268,3281,3285,3290,3294,3307,3311,3316,3336,3340,3353,3357,3385,3389,3405,3409,3413,3417,3430,3434],{"__ignoreMap":275},[152,3194,3195],{"class":281,"line":282},[152,3196,3197],{"class":866},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[152,3199,3200,3203,3206,3208,3211],{"class":281,"line":303},[152,3201,3202],{"class":476},"if",[152,3204,3205],{"class":483},"(score",[152,3207,487],{"class":476},[152,3209,3210],{"class":293},"600",[152,3212,1825],{"class":483},[152,3214,3215],{"class":281,"line":310},[152,3216,3217],{"class":483},"{\n",[152,3219,3220,3223,3225,3228,3230],{"class":281,"line":324},[152,3221,3222],{"class":483},"    cout",[152,3224,2848],{"class":476},[152,3226,3227],{"class":289},"'这是单行if语句'",[152,3229,2848],{"class":476},[152,3231,2870],{"class":483},[152,3233,3234],{"class":281,"line":329},[152,3235,3236],{"class":483},"}\n",[152,3238,3239],{"class":281,"line":343},[152,3240,3241],{"class":866},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[152,3243,3244,3246,3248],{"class":281,"line":348},[152,3245,3098],{"class":483},[152,3247,3101],{"class":476},[152,3249,3250],{"class":483}," score\n",[152,3252,3253,3255,3257,3260,3262],{"class":281,"line":362},[152,3254,3202],{"class":476},[152,3256,3205],{"class":483},[152,3258,3259],{"class":476},"\u003C=",[152,3261,3210],{"class":293},[152,3263,1825],{"class":483},[152,3265,3266],{"class":281,"line":367},[152,3267,3217],{"class":483},[152,3269,3270,3272,3274,3277,3279],{"class":281,"line":381},[152,3271,3222],{"class":483},[152,3273,3101],{"class":476},[152,3275,3276],{"class":289},"\"小于等于600\"",[152,3278,2848],{"class":476},[152,3280,2870],{"class":483},[152,3282,3283],{"class":281,"line":386},[152,3284,3236],{"class":483},[152,3286,3287],{"class":281,"line":932},[152,3288,3289],{"class":476},"else\n",[152,3291,3292],{"class":281,"line":942},[152,3293,3217],{"class":483},[152,3295,3296,3298,3300,3303,3305],{"class":281,"line":949},[152,3297,3222],{"class":483},[152,3299,3101],{"class":476},[152,3301,3302],{"class":289},"\"大于600\"",[152,3304,3101],{"class":476},[152,3306,2870],{"class":483},[152,3308,3309],{"class":281,"line":954},[152,3310,3236],{"class":483},[152,3312,3313],{"class":281,"line":959},[152,3314,3315],{"class":866},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[152,3317,3318,3320,3323,3325,3327,3330,3332,3334],{"class":281,"line":970},[152,3319,3202],{"class":476},[152,3321,3322],{"class":483}," (",[152,3324,2000],{"class":293},[152,3326,844],{"class":476},[152,3328,3329],{"class":483},"num",[152,3331,844],{"class":476},[152,3333,2119],{"class":293},[152,3335,1825],{"class":483},[152,3337,3338],{"class":281,"line":979},[152,3339,3217],{"class":483},[152,3341,3342,3344,3346,3349,3351],{"class":281,"line":989},[152,3343,3222],{"class":483},[152,3345,2848],{"class":476},[152,3347,3348],{"class":289},"\"小于100\"",[152,3350,2848],{"class":476},[152,3352,2870],{"class":483},[152,3354,3355],{"class":281,"line":996},[152,3356,3236],{"class":483},[152,3358,3359,3362,3365,3368,3371,3373,3376,3378,3380,3383],{"class":281,"line":1001},[152,3360,3361],{"class":476},"else",[152,3363,3364],{"class":476}," if",[152,3366,3367],{"class":483}," (nmu",[152,3369,3370],{"class":476},">=",[152,3372,2119],{"class":293},[152,3374,3375],{"class":476},"&&",[152,3377,3329],{"class":483},[152,3379,844],{"class":476},[152,3381,3382],{"class":293},"200",[152,3384,1825],{"class":483},[152,3386,3387],{"class":281,"line":1006},[152,3388,3217],{"class":483},[152,3390,3391,3393,3395,3398,3400,3402],{"class":281,"line":1018},[152,3392,3222],{"class":483},[152,3394,2848],{"class":476},[152,3396,3397],{"class":289},"\"不小于100且小于200\"",[152,3399,2848],{"class":476},[152,3401,2913],{"class":483},[152,3403,3404],{"class":866}," \u002F\u002F可以无限else if,python中是elif：\n",[152,3406,3407],{"class":281,"line":1027},[152,3408,3236],{"class":483},[152,3410,3411],{"class":281,"line":1037},[152,3412,3289],{"class":476},[152,3414,3415],{"class":281,"line":1044},[152,3416,3217],{"class":483},[152,3418,3419,3421,3423,3426,3428],{"class":281,"line":1049},[152,3420,3222],{"class":483},[152,3422,2848],{"class":476},[152,3424,3425],{"class":289},"\"不小于200\"",[152,3427,2848],{"class":476},[152,3429,2870],{"class":483},[152,3431,3432],{"class":281,"line":1054},[152,3433,3236],{"class":483},[152,3435,3436],{"class":281,"line":1065},[152,3437,3438],{"class":866},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[416,3440,3441],{"start":303},[419,3442,3443],{},"三目运算符",[270,3445,3447],{"className":1807,"code":3446,"language":1809,"meta":275,"style":275},"\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",[277,3448,3449,3454,3459,3485,3507,3524,3529,3552,3567],{"__ignoreMap":275},[152,3450,3451],{"class":281,"line":282},[152,3452,3453],{"class":866},"\u002F\u002F创建三个变量a,b,c\n",[152,3455,3456],{"class":281,"line":303},[152,3457,3458],{"class":866},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[152,3460,3461,3463,3465,3467,3469,3472,3474,3476,3479,3481,3483],{"class":281,"line":310},[152,3462,1822],{"class":476},[152,3464,3070],{"class":483},[152,3466,1864],{"class":476},[152,3468,2508],{"class":293},[152,3470,3471],{"class":483},",b",[152,3473,1864],{"class":476},[152,3475,2254],{"class":293},[152,3477,3478],{"class":483},",c",[152,3480,1864],{"class":476},[152,3482,2000],{"class":293},[152,3484,2965],{"class":483},[152,3486,3487,3489,3491,3494,3496,3498,3500,3502,3504],{"class":281,"line":324},[152,3488,2096],{"class":483},[152,3490,1864],{"class":476},[152,3492,3493],{"class":483},"(a",[152,3495,487],{"class":476},[152,3497,2071],{"class":483},[152,3499,2791],{"class":476},[152,3501,69],{"class":483},[152,3503,841],{"class":476},[152,3505,3506],{"class":483},"b)\n",[152,3508,3509,3511,3513,3516,3518,3520,3522],{"class":281,"line":329},[152,3510,3041],{"class":483},[152,3512,2848],{"class":476},[152,3514,3515],{"class":289},"\"c=\"",[152,3517,2848],{"class":476},[152,3519,2096],{"class":483},[152,3521,2848],{"class":476},[152,3523,2870],{"class":483},[152,3525,3526],{"class":281,"line":343},[152,3527,3528],{"class":866},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[152,3530,3531,3533,3535,3537,3539,3541,3543,3546,3548,3550],{"class":281,"line":348},[152,3532,3493],{"class":483},[152,3534,487],{"class":476},[152,3536,2071],{"class":483},[152,3538,2791],{"class":476},[152,3540,69],{"class":483},[152,3542,841],{"class":476},[152,3544,3545],{"class":483},"b)",[152,3547,1864],{"class":476},[152,3549,2119],{"class":293},[152,3551,2965],{"class":483},[152,3553,3554,3556,3558,3560,3562,3564],{"class":281,"line":362},[152,3555,3041],{"class":483},[152,3557,2848],{"class":476},[152,3559,69],{"class":483},[152,3561,2848],{"class":476},[152,3563,2913],{"class":483},[152,3565,3566],{"class":866}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[152,3568,3569,3571,3573,3575,3577,3579],{"class":281,"line":367},[152,3570,3041],{"class":483},[152,3572,2848],{"class":476},[152,3574,2071],{"class":483},[152,3576,2848],{"class":476},[152,3578,2913],{"class":483},[152,3580,3581],{"class":866}," \u002F\u002F10   a>b,b还是原值\n",[416,3583,3584],{"start":310},[419,3585,3586],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[270,3588,3590],{"className":1807,"code":3589,"language":1809,"meta":275,"style":275},"\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",[277,3591,3592,3597,3605,3618,3628,3632,3646,3659,3669,3677,3682,3707,3728,3750,3771,3793,3814,3834,3839],{"__ignoreMap":275},[152,3593,3594],{"class":281,"line":282},[152,3595,3596],{"class":866},"\u002F\u002F案例-电影打分\n",[152,3598,3599,3602],{"class":281,"line":303},[152,3600,3601],{"class":476},"#include",[152,3603,3604],{"class":289},"\u003Ciostream>\n",[152,3606,3607,3610,3613,3616],{"class":281,"line":310},[152,3608,3609],{"class":476},"using",[152,3611,3612],{"class":476}," namespace",[152,3614,3615],{"class":285}," std",[152,3617,2965],{"class":483},[152,3619,3620,3622,3625],{"class":281,"line":324},[152,3621,1822],{"class":476},[152,3623,3624],{"class":285}," main",[152,3626,3627],{"class":483},"()\n",[152,3629,3630],{"class":281,"line":329},[152,3631,3217],{"class":483},[152,3633,3634,3637,3640,3642,3644],{"class":281,"line":343},[152,3635,3636],{"class":476},"    int",[152,3638,3639],{"class":483}," score",[152,3641,1864],{"class":476},[152,3643,2000],{"class":293},[152,3645,2965],{"class":483},[152,3647,3648,3650,3652,3655,3657],{"class":281,"line":348},[152,3649,3222],{"class":483},[152,3651,2848],{"class":476},[152,3653,3654],{"class":289},"\"电影打分：\"",[152,3656,2848],{"class":476},[152,3658,2870],{"class":483},[152,3660,3661,3664,3666],{"class":281,"line":362},[152,3662,3663],{"class":483},"    cin",[152,3665,3101],{"class":476},[152,3667,3668],{"class":483},"score;\n",[152,3670,3671,3674],{"class":281,"line":367},[152,3672,3673],{"class":476},"    switch",[152,3675,3676],{"class":483},"(score)\n",[152,3678,3679],{"class":281,"line":381},[152,3680,3681],{"class":483},"    {\n",[152,3683,3684,3687,3690,3693,3695,3698,3700,3702,3705],{"class":281,"line":386},[152,3685,3686],{"class":476},"        case",[152,3688,3689],{"class":293}," 10",[152,3691,3692],{"class":483},":cout",[152,3694,2848],{"class":476},[152,3696,3697],{"class":289},"\"经典\"",[152,3699,2848],{"class":476},[152,3701,2913],{"class":483},[152,3703,3704],{"class":476},"break",[152,3706,2965],{"class":483},[152,3708,3709,3711,3714,3716,3718,3720,3722,3724,3726],{"class":281,"line":932},[152,3710,3686],{"class":476},[152,3712,3713],{"class":293}," 9",[152,3715,3692],{"class":483},[152,3717,2848],{"class":476},[152,3719,3697],{"class":289},[152,3721,2848],{"class":476},[152,3723,2913],{"class":483},[152,3725,3704],{"class":476},[152,3727,2965],{"class":483},[152,3729,3730,3732,3735,3737,3739,3742,3744,3746,3748],{"class":281,"line":942},[152,3731,3686],{"class":476},[152,3733,3734],{"class":293}," 8",[152,3736,3692],{"class":483},[152,3738,2848],{"class":476},[152,3740,3741],{"class":289},"\"非常好\"",[152,3743,2848],{"class":476},[152,3745,2913],{"class":483},[152,3747,3704],{"class":476},[152,3749,2965],{"class":483},[152,3751,3752,3754,3757,3759,3761,3763,3765,3767,3769],{"class":281,"line":949},[152,3753,3686],{"class":476},[152,3755,3756],{"class":293}," 7",[152,3758,3692],{"class":483},[152,3760,2848],{"class":476},[152,3762,3741],{"class":289},[152,3764,2848],{"class":476},[152,3766,2913],{"class":483},[152,3768,3704],{"class":476},[152,3770,2965],{"class":483},[152,3772,3773,3775,3778,3780,3782,3785,3787,3789,3791],{"class":281,"line":954},[152,3774,3686],{"class":476},[152,3776,3777],{"class":293}," 6",[152,3779,3692],{"class":483},[152,3781,2848],{"class":476},[152,3783,3784],{"class":289},"\"一般\"",[152,3786,2848],{"class":476},[152,3788,2913],{"class":483},[152,3790,3704],{"class":476},[152,3792,2965],{"class":483},[152,3794,3795,3797,3800,3802,3804,3806,3808,3810,3812],{"class":281,"line":959},[152,3796,3686],{"class":476},[152,3798,3799],{"class":293}," 5",[152,3801,3692],{"class":483},[152,3803,2848],{"class":476},[152,3805,3784],{"class":289},[152,3807,2848],{"class":476},[152,3809,2913],{"class":483},[152,3811,3704],{"class":476},[152,3813,2965],{"class":483},[152,3815,3816,3819,3821,3823,3826,3828,3830,3832],{"class":281,"line":970},[152,3817,3818],{"class":476},"        default",[152,3820,3692],{"class":483},[152,3822,2848],{"class":476},[152,3824,3825],{"class":289},"\"烂片\"",[152,3827,2848],{"class":476},[152,3829,2913],{"class":483},[152,3831,3704],{"class":476},[152,3833,2965],{"class":483},[152,3835,3836],{"class":281,"line":979},[152,3837,3838],{"class":483},"    }\n",[152,3840,3841],{"class":281,"line":989},[152,3842,3236],{"class":483},[19,3844,3845],{},"if和switch区别：",[698,3847,3848,3851],{},[419,3849,3850],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[419,3852,3853],{},"switch优点：结构清晰，执行效率高",[14,3855,3857],{"id":3856},"_162循环结构","1.6.2循环结构",[416,3859,3860],{},[419,3861,3862],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[270,3864,3866],{"className":1807,"code":3865,"language":1809,"meta":275,"style":275},"\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",[277,3867,3868,3873,3881,3885,3898,3912,3916,3936,3946,3950,3962],{"__ignoreMap":275},[152,3869,3870],{"class":281,"line":282},[152,3871,3872],{"class":866},"\u002F\u002F打印0-9数字\n",[152,3874,3875,3877,3879],{"class":281,"line":303},[152,3876,1822],{"class":476},[152,3878,3624],{"class":285},[152,3880,3627],{"class":483},[152,3882,3883],{"class":281,"line":310},[152,3884,3217],{"class":483},[152,3886,3887,3889,3892,3894,3896],{"class":281,"line":324},[152,3888,3636],{"class":476},[152,3890,3891],{"class":483}," num",[152,3893,1864],{"class":476},[152,3895,2000],{"class":293},[152,3897,2965],{"class":483},[152,3899,3900,3903,3906,3908,3910],{"class":281,"line":329},[152,3901,3902],{"class":476},"    while",[152,3904,3905],{"class":483},"(num",[152,3907,844],{"class":476},[152,3909,2254],{"class":293},[152,3911,1825],{"class":483},[152,3913,3914],{"class":281,"line":343},[152,3915,3681],{"class":483},[152,3917,3918,3921,3924,3926,3928,3930,3933],{"class":281,"line":348},[152,3919,3920],{"class":285},"       std",[152,3922,3923],{"class":483},"::cout",[152,3925,2848],{"class":476},[152,3927,3329],{"class":483},[152,3929,2848],{"class":476},[152,3931,3932],{"class":285},"std",[152,3934,3935],{"class":483},"::endl;\n",[152,3937,3938,3941,3944],{"class":281,"line":362},[152,3939,3940],{"class":483},"        num",[152,3942,3943],{"class":476},"++",[152,3945,2965],{"class":483},[152,3947,3948],{"class":281,"line":367},[152,3949,3838],{"class":483},[152,3951,3952,3955,3957,3960],{"class":281,"line":381},[152,3953,3954],{"class":285},"    system",[152,3956,1819],{"class":483},[152,3958,3959],{"class":289},"\"pause\"",[152,3961,1825],{"class":483},[152,3963,3964],{"class":281,"line":386},[152,3965,3236],{"class":483},[19,3967,3968],{},"注意：写好循环条件，避免死循环情况",[270,3970,3972],{"className":1807,"code":3971,"language":1809,"meta":275,"style":275},"\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",[277,3973,3974,3979,3986,3993,4003,4011,4015,4020,4047,4051,4056,4064,4091,4096,4101,4114,4124,4128,4138,4143,4156,4161,4175,4180,4195,4199,4212,4216,4221,4225,4238,4245,4249,4254,4259,4263],{"__ignoreMap":275},[152,3975,3976],{"class":281,"line":282},[152,3977,3978],{"class":866},"\u002F\u002F循环结构-猜数字\n",[152,3980,3981,3983],{"class":281,"line":303},[152,3982,3601],{"class":476},[152,3984,3985],{"class":289}," \u003Ciostream>\n",[152,3987,3988,3990],{"class":281,"line":310},[152,3989,3601],{"class":476},[152,3991,3992],{"class":289}," \u003Cctime>\n",[152,3994,3995,3997,3999,4001],{"class":281,"line":324},[152,3996,3609],{"class":476},[152,3998,3612],{"class":476},[152,4000,3615],{"class":285},[152,4002,2965],{"class":483},[152,4004,4005,4007,4009],{"class":281,"line":329},[152,4006,1822],{"class":476},[152,4008,3624],{"class":285},[152,4010,3627],{"class":483},[152,4012,4013],{"class":281,"line":343},[152,4014,3217],{"class":483},[152,4016,4017],{"class":281,"line":348},[152,4018,4019],{"class":866},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[152,4021,4022,4025,4028,4031,4034,4036,4039,4041,4044],{"class":281,"line":362},[152,4023,4024],{"class":285},"    srand",[152,4026,4027],{"class":483},"((",[152,4029,4030],{"class":476},"unsigned",[152,4032,4033],{"class":476}," int",[152,4035,2237],{"class":483},[152,4037,4038],{"class":285},"time",[152,4040,1819],{"class":483},[152,4042,4043],{"class":293},"NULL",[152,4045,4046],{"class":483},"));\n",[152,4048,4049],{"class":281,"line":367},[152,4050,307],{"emptyLinePlaceholder":306},[152,4052,4053],{"class":281,"line":381},[152,4054,4055],{"class":866},"    \u002F\u002F1.系统生成随机数\n",[152,4057,4058,4061],{"class":281,"line":386},[152,4059,4060],{"class":866},"    \u002F\u002Frand()%100",[152,4062,4063],{"class":866}," \u002F\u002F生成0-99的随机数\n",[152,4065,4066,4068,4070,4072,4075,4078,4080,4082,4084,4086,4088],{"class":281,"line":932},[152,4067,3636],{"class":476},[152,4069,3891],{"class":483},[152,4071,1864],{"class":476},[152,4073,4074],{"class":285},"rand",[152,4076,4077],{"class":483},"()",[152,4079,2136],{"class":476},[152,4081,2119],{"class":293},[152,4083,2289],{"class":476},[152,4085,2026],{"class":293},[152,4087,1873],{"class":483},[152,4089,4090],{"class":866}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[152,4092,4093],{"class":281,"line":942},[152,4094,4095],{"class":866},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[152,4097,4098],{"class":281,"line":949},[152,4099,4100],{"class":866},"    \u002F\u002F2.玩家猜测\n",[152,4102,4103,4105,4108,4110,4112],{"class":281,"line":954},[152,4104,3636],{"class":476},[152,4106,4107],{"class":483}," val",[152,4109,1864],{"class":476},[152,4111,2000],{"class":293},[152,4113,2965],{"class":483},[152,4115,4116,4118,4120,4122],{"class":281,"line":959},[152,4117,3902],{"class":476},[152,4119,3322],{"class":483},[152,4121,2026],{"class":293},[152,4123,1825],{"class":483},[152,4125,4126],{"class":281,"line":970},[152,4127,3681],{"class":483},[152,4129,4130,4133,4135],{"class":281,"line":979},[152,4131,4132],{"class":483},"        cin",[152,4134,3101],{"class":476},[152,4136,4137],{"class":483},"val;\n",[152,4139,4140],{"class":281,"line":989},[152,4141,4142],{"class":866},"        \u002F\u002F3.判断玩家猜测\n",[152,4144,4145,4148,4151,4153],{"class":281,"line":996},[152,4146,4147],{"class":476},"        if",[152,4149,4150],{"class":483},"(val",[152,4152,844],{"class":476},[152,4154,4155],{"class":483},"num) \n",[152,4157,4158],{"class":281,"line":1001},[152,4159,4160],{"class":483},"        {\n",[152,4162,4163,4166,4168,4171,4173],{"class":281,"line":1006},[152,4164,4165],{"class":483},"            cout",[152,4167,2848],{"class":476},[152,4169,4170],{"class":289},"\"猜小了！\"",[152,4172,2848],{"class":476},[152,4174,2870],{"class":483},[152,4176,4177],{"class":281,"line":1018},[152,4178,4179],{"class":483},"        }\n",[152,4181,4182,4185,4187,4190,4192],{"class":281,"line":1027},[152,4183,4184],{"class":476},"        else",[152,4186,3364],{"class":476},[152,4188,4189],{"class":483}," (val",[152,4191,487],{"class":476},[152,4193,4194],{"class":483},"num)\n",[152,4196,4197],{"class":281,"line":1037},[152,4198,4160],{"class":483},[152,4200,4201,4203,4205,4208,4210],{"class":281,"line":1044},[152,4202,4165],{"class":483},[152,4204,2848],{"class":476},[152,4206,4207],{"class":289},"\"猜大了！\"",[152,4209,2848],{"class":476},[152,4211,2870],{"class":483},[152,4213,4214],{"class":281,"line":1049},[152,4215,4179],{"class":483},[152,4217,4218],{"class":281,"line":1054},[152,4219,4220],{"class":476},"        else\n",[152,4222,4223],{"class":281,"line":1065},[152,4224,4160],{"class":483},[152,4226,4227,4229,4231,4234,4236],{"class":281,"line":1074},[152,4228,4165],{"class":483},[152,4230,2848],{"class":476},[152,4232,4233],{"class":289},"\"猜对了！\"",[152,4235,2848],{"class":476},[152,4237,2870],{"class":483},[152,4239,4240,4243],{"class":281,"line":1084},[152,4241,4242],{"class":476},"            break",[152,4244,2965],{"class":483},[152,4246,4247],{"class":281,"line":1091},[152,4248,4179],{"class":483},[152,4250,4251],{"class":281,"line":1096},[152,4252,4253],{"class":866},"        \u002F\u002F猜对 退出游戏\n",[152,4255,4256],{"class":281,"line":1101},[152,4257,4258],{"class":866},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[152,4260,4261],{"class":281,"line":1112},[152,4262,3838],{"class":483},[152,4264,4265],{"class":281,"line":1121},[152,4266,3236],{"class":483},[416,4268,4269],{"start":303},[419,4270,4271,4272,4275],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[694,4273,4274],{},"do...while会先执行一次循环语句","，在判断循环语句",[270,4277,4279],{"className":1807,"code":4278,"language":1809,"meta":275,"style":275},"\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",[277,4280,4281,4286,4294,4298,4310,4318,4322,4339,4346,4350,4363,4373],{"__ignoreMap":275},[152,4282,4283],{"class":281,"line":282},[152,4284,4285],{"class":866},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[152,4287,4288,4290,4292],{"class":281,"line":303},[152,4289,1822],{"class":476},[152,4291,3624],{"class":285},[152,4293,3627],{"class":483},[152,4295,4296],{"class":281,"line":310},[152,4297,3217],{"class":483},[152,4299,4300,4302,4304,4306,4308],{"class":281,"line":324},[152,4301,3636],{"class":476},[152,4303,3891],{"class":483},[152,4305,1864],{"class":476},[152,4307,2000],{"class":293},[152,4309,2965],{"class":483},[152,4311,4312,4315],{"class":281,"line":329},[152,4313,4314],{"class":476},"    do",[152,4316,4317],{"class":483}," \n",[152,4319,4320],{"class":281,"line":343},[152,4321,3681],{"class":483},[152,4323,4324,4327,4329,4331,4333,4335,4337],{"class":281,"line":348},[152,4325,4326],{"class":285},"        std",[152,4328,3923],{"class":483},[152,4330,2848],{"class":476},[152,4332,3329],{"class":483},[152,4334,2848],{"class":476},[152,4336,3932],{"class":285},[152,4338,3935],{"class":483},[152,4340,4341,4343],{"class":281,"line":362},[152,4342,3940],{"class":483},[152,4344,4345],{"class":476},"++\n",[152,4347,4348],{"class":281,"line":367},[152,4349,3838],{"class":483},[152,4351,4352,4354,4356,4358,4360],{"class":281,"line":381},[152,4353,3902],{"class":476},[152,4355,3905],{"class":483},[152,4357,844],{"class":476},[152,4359,2254],{"class":293},[152,4361,4362],{"class":483},");\n",[152,4364,4365,4367,4369,4371],{"class":281,"line":386},[152,4366,3954],{"class":285},[152,4368,1819],{"class":483},[152,4370,3959],{"class":289},[152,4372,4362],{"class":483},[152,4374,4375],{"class":281,"line":932},[152,4376,3236],{"class":483},[19,4378,4379],{},"案例-水仙花数",[19,4381,4382],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4384,4385],{},"例如：1^3+5^3+3^3=153",[19,4387,4388],{},"请用do...while语句，求出所有3位数的水仙花数",[270,4390,4392],{"className":1807,"code":4391,"language":1809,"meta":275,"style":275},"#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",[277,4393,4394,4400,4410,4418,4422,4427,4439,4445,4449,4454,4470,4486,4502,4517,4536,4551,4599,4603,4615,4619,4627,4631,4645],{"__ignoreMap":275},[152,4395,4396,4398],{"class":281,"line":282},[152,4397,3601],{"class":476},[152,4399,3985],{"class":289},[152,4401,4402,4404,4406,4408],{"class":281,"line":303},[152,4403,3609],{"class":476},[152,4405,3612],{"class":476},[152,4407,3615],{"class":285},[152,4409,2965],{"class":483},[152,4411,4412,4414,4416],{"class":281,"line":310},[152,4413,1822],{"class":476},[152,4415,3624],{"class":285},[152,4417,3627],{"class":483},[152,4419,4420],{"class":281,"line":324},[152,4421,3217],{"class":483},[152,4423,4424],{"class":281,"line":329},[152,4425,4426],{"class":866},"    \u002F\u002F1.先打印所有三位数字\n",[152,4428,4429,4431,4433,4435,4437],{"class":281,"line":343},[152,4430,3636],{"class":476},[152,4432,3891],{"class":483},[152,4434,1864],{"class":476},[152,4436,2119],{"class":293},[152,4438,2965],{"class":483},[152,4440,4441,4443],{"class":281,"line":348},[152,4442,4314],{"class":476},[152,4444,4317],{"class":483},[152,4446,4447],{"class":281,"line":362},[152,4448,3681],{"class":483},[152,4450,4451],{"class":281,"line":367},[152,4452,4453],{"class":866},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[152,4455,4456,4459,4461,4463,4465,4467],{"class":281,"line":381},[152,4457,4458],{"class":476},"        int",[152,4460,3070],{"class":483},[152,4462,1864],{"class":476},[152,4464,2000],{"class":293},[152,4466,1873],{"class":483},[152,4468,4469],{"class":866}," \u002F\u002F个位\n",[152,4471,4472,4474,4477,4479,4481,4483],{"class":281,"line":386},[152,4473,4458],{"class":476},[152,4475,4476],{"class":483}," b",[152,4478,1864],{"class":476},[152,4480,2000],{"class":293},[152,4482,1873],{"class":483},[152,4484,4485],{"class":866}," \u002F\u002F十位\n",[152,4487,4488,4490,4493,4495,4497,4499],{"class":281,"line":932},[152,4489,4458],{"class":476},[152,4491,4492],{"class":483}," c",[152,4494,1864],{"class":476},[152,4496,2000],{"class":293},[152,4498,1873],{"class":483},[152,4500,4501],{"class":866}," \u002F\u002F百位\n",[152,4503,4504,4507,4509,4511,4513,4515],{"class":281,"line":942},[152,4505,4506],{"class":483},"        a",[152,4508,1864],{"class":476},[152,4510,3329],{"class":483},[152,4512,2136],{"class":476},[152,4514,2254],{"class":293},[152,4516,2965],{"class":483},[152,4518,4519,4522,4524,4526,4528,4530,4532,4534],{"class":281,"line":949},[152,4520,4521],{"class":483},"        b",[152,4523,1864],{"class":476},[152,4525,3329],{"class":483},[152,4527,2392],{"class":476},[152,4529,2254],{"class":293},[152,4531,2136],{"class":476},[152,4533,2254],{"class":293},[152,4535,2965],{"class":483},[152,4537,4538,4541,4543,4545,4547,4549],{"class":281,"line":954},[152,4539,4540],{"class":483},"        c",[152,4542,1864],{"class":476},[152,4544,3329],{"class":483},[152,4546,2392],{"class":476},[152,4548,2119],{"class":293},[152,4550,2965],{"class":483},[152,4552,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571,4573,4575,4577,4579,4581,4583,4585,4587,4590,4593,4596],{"class":281,"line":959},[152,4554,4147],{"class":476},[152,4556,3493],{"class":483},[152,4558,2263],{"class":476},[152,4560,69],{"class":483},[152,4562,2263],{"class":476},[152,4564,69],{"class":483},[152,4566,2289],{"class":476},[152,4568,2071],{"class":483},[152,4570,2263],{"class":476},[152,4572,2071],{"class":483},[152,4574,2263],{"class":476},[152,4576,2071],{"class":483},[152,4578,2289],{"class":476},[152,4580,2096],{"class":483},[152,4582,2263],{"class":476},[152,4584,2096],{"class":483},[152,4586,2263],{"class":476},[152,4588,4589],{"class":483},"c ",[152,4591,4592],{"class":476},"==",[152,4594,4595],{"class":483}," num)",[152,4597,4598],{"class":866}," \u002F\u002F如果是水仙花数，才打印\n",[152,4600,4601],{"class":281,"line":970},[152,4602,4160],{"class":483},[152,4604,4605,4607,4609,4611,4613],{"class":281,"line":979},[152,4606,4165],{"class":483},[152,4608,2848],{"class":476},[152,4610,3329],{"class":483},[152,4612,2848],{"class":476},[152,4614,2870],{"class":483},[152,4616,4617],{"class":281,"line":989},[152,4618,4179],{"class":483},[152,4620,4621,4623,4625],{"class":281,"line":996},[152,4622,3940],{"class":483},[152,4624,3943],{"class":476},[152,4626,2965],{"class":483},[152,4628,4629],{"class":281,"line":1001},[152,4630,3838],{"class":483},[152,4632,4633,4635,4638,4640,4643],{"class":281,"line":1006},[152,4634,3902],{"class":476},[152,4636,4637],{"class":483}," (num ",[152,4639,844],{"class":476},[152,4641,4642],{"class":293}," 1000",[152,4644,4362],{"class":483},[152,4646,4647],{"class":281,"line":1018},[152,4648,3236],{"class":483},[416,4650,4651],{"start":310},[419,4652,4653],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[270,4655,4657],{"className":1807,"code":4656,"language":1809,"meta":275,"style":275},"\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",[277,4658,4659,4664,4693,4697,4709,4713,4718,4729,4736,4740,4754,4758,4765,4769,4781,4790],{"__ignoreMap":275},[152,4660,4661],{"class":281,"line":282},[152,4662,4663],{"class":866},"\u002F\u002F从数字0-9打印\n",[152,4665,4666,4669,4671,4673,4676,4678,4680,4683,4685,4687,4689,4691],{"class":281,"line":303},[152,4667,4668],{"class":476},"for",[152,4670,1819],{"class":483},[152,4672,1822],{"class":476},[152,4674,4675],{"class":483}," i",[152,4677,1864],{"class":476},[152,4679,2000],{"class":293},[152,4681,4682],{"class":483},";i",[152,4684,844],{"class":476},[152,4686,2254],{"class":293},[152,4688,4682],{"class":483},[152,4690,3943],{"class":476},[152,4692,1825],{"class":483},[152,4694,4695],{"class":281,"line":310},[152,4696,3217],{"class":483},[152,4698,4699,4701,4703,4705,4707],{"class":281,"line":324},[152,4700,3222],{"class":483},[152,4702,2848],{"class":476},[152,4704,2249],{"class":483},[152,4706,2848],{"class":476},[152,4708,2870],{"class":483},[152,4710,4711],{"class":281,"line":329},[152,4712,3236],{"class":483},[152,4714,4715],{"class":281,"line":343},[152,4716,4717],{"class":866},"\u002F\u002F上式可以进行拆分\n",[152,4719,4720,4722,4724,4726],{"class":281,"line":348},[152,4721,1822],{"class":476},[152,4723,4675],{"class":483},[152,4725,1864],{"class":476},[152,4727,4728],{"class":293},"0\n",[152,4730,4731,4733],{"class":281,"line":362},[152,4732,4668],{"class":476},[152,4734,4735],{"class":483},"(;;;)\n",[152,4737,4738],{"class":281,"line":367},[152,4739,3217],{"class":483},[152,4741,4742,4745,4748,4750,4752],{"class":281,"line":381},[152,4743,4744],{"class":476},"    if",[152,4746,4747],{"class":483},"(i",[152,4749,3370],{"class":476},[152,4751,2254],{"class":293},[152,4753,1825],{"class":483},[152,4755,4756],{"class":281,"line":386},[152,4757,3681],{"class":483},[152,4759,4760,4763],{"class":281,"line":932},[152,4761,4762],{"class":476},"        break",[152,4764,2965],{"class":483},[152,4766,4767],{"class":281,"line":942},[152,4768,3838],{"class":483},[152,4770,4771,4773,4775,4777,4779],{"class":281,"line":949},[152,4772,3222],{"class":483},[152,4774,2848],{"class":476},[152,4776,2249],{"class":483},[152,4778,2848],{"class":476},[152,4780,2870],{"class":483},[152,4782,4783,4786,4788],{"class":281,"line":954},[152,4784,4785],{"class":483},"    i",[152,4787,3943],{"class":476},[152,4789,2965],{"class":483},[152,4791,4792],{"class":281,"line":959},[152,4793,3236],{"class":483},[19,4795,4796],{},"小练习",[270,4798,4800],{"className":1807,"code":4799,"language":1809,"meta":275,"style":275},"#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",[277,4801,4802,4808,4818,4826,4830,4835,4840,4868,4872,4877,4882,4923,4927,4940,4944,4948,4952,4964,4968,4972],{"__ignoreMap":275},[152,4803,4804,4806],{"class":281,"line":282},[152,4805,3601],{"class":476},[152,4807,3604],{"class":289},[152,4809,4810,4812,4814,4816],{"class":281,"line":303},[152,4811,3609],{"class":476},[152,4813,3612],{"class":476},[152,4815,3615],{"class":285},[152,4817,2965],{"class":483},[152,4819,4820,4822,4824],{"class":281,"line":310},[152,4821,1822],{"class":476},[152,4823,3624],{"class":285},[152,4825,3627],{"class":483},[152,4827,4828],{"class":281,"line":324},[152,4829,3217],{"class":483},[152,4831,4832],{"class":281,"line":329},[152,4833,4834],{"class":866},"    \u002F\u002F敲桌子案例\n",[152,4836,4837],{"class":281,"line":343},[152,4838,4839],{"class":866},"    \u002F\u002F1.先输出1-100的数字\n",[152,4841,4842,4845,4847,4849,4851,4853,4855,4858,4860,4862,4864,4866],{"class":281,"line":348},[152,4843,4844],{"class":476},"    for",[152,4846,1819],{"class":483},[152,4848,1822],{"class":476},[152,4850,4675],{"class":483},[152,4852,1864],{"class":476},[152,4854,2026],{"class":293},[152,4856,4857],{"class":483},"; i",[152,4859,3259],{"class":476},[152,4861,2119],{"class":293},[152,4863,4857],{"class":483},[152,4865,3943],{"class":476},[152,4867,1825],{"class":483},[152,4869,4870],{"class":281,"line":362},[152,4871,3681],{"class":483},[152,4873,4874],{"class":281,"line":367},[152,4875,4876],{"class":866},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[152,4878,4879],{"class":281,"line":381},[152,4880,4881],{"class":866},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[152,4883,4884,4886,4888,4890,4892,4894,4896,4899,4901,4903,4905,4907,4909,4911,4913,4915,4917,4919,4921],{"class":281,"line":386},[152,4885,4147],{"class":476},[152,4887,4747],{"class":483},[152,4889,2136],{"class":476},[152,4891,2177],{"class":293},[152,4893,4592],{"class":476},[152,4895,2000],{"class":293},[152,4897,4898],{"class":476}," ||",[152,4900,4675],{"class":483},[152,4902,2136],{"class":476},[152,4904,2254],{"class":293},[152,4906,4592],{"class":476},[152,4908,2177],{"class":293},[152,4910,4898],{"class":476},[152,4912,4675],{"class":483},[152,4914,2392],{"class":476},[152,4916,2254],{"class":293},[152,4918,4592],{"class":476},[152,4920,2177],{"class":293},[152,4922,1825],{"class":483},[152,4924,4925],{"class":281,"line":932},[152,4926,4160],{"class":483},[152,4928,4929,4931,4933,4936,4938],{"class":281,"line":942},[152,4930,4165],{"class":483},[152,4932,2848],{"class":476},[152,4934,4935],{"class":289},"\"敲桌子\"",[152,4937,2848],{"class":476},[152,4939,2870],{"class":483},[152,4941,4942],{"class":281,"line":949},[152,4943,4179],{"class":483},[152,4945,4946],{"class":281,"line":954},[152,4947,4220],{"class":476},[152,4949,4950],{"class":281,"line":959},[152,4951,4160],{"class":483},[152,4953,4954,4956,4958,4960,4962],{"class":281,"line":970},[152,4955,4165],{"class":483},[152,4957,2848],{"class":476},[152,4959,2249],{"class":483},[152,4961,2848],{"class":476},[152,4963,2870],{"class":483},[152,4965,4966],{"class":281,"line":979},[152,4967,4179],{"class":483},[152,4969,4970],{"class":281,"line":989},[152,4971,3838],{"class":483},[152,4973,4974],{"class":281,"line":996},[152,4975,3236],{"class":483},[19,4977,4978],{},"嵌套实现星图",[270,4980,4982],{"className":1807,"code":4981,"language":1809,"meta":275,"style":275},"#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",[277,4983,4984,4990,5000,5008,5012,5038,5042,5071,5075,5086,5090,5099,5103],{"__ignoreMap":275},[152,4985,4986,4988],{"class":281,"line":282},[152,4987,3601],{"class":476},[152,4989,3604],{"class":289},[152,4991,4992,4994,4996,4998],{"class":281,"line":303},[152,4993,3609],{"class":476},[152,4995,3612],{"class":476},[152,4997,3615],{"class":285},[152,4999,2965],{"class":483},[152,5001,5002,5004,5006],{"class":281,"line":310},[152,5003,1822],{"class":476},[152,5005,3624],{"class":285},[152,5007,3627],{"class":483},[152,5009,5010],{"class":281,"line":324},[152,5011,3217],{"class":483},[152,5013,5014,5016,5018,5020,5022,5024,5026,5028,5030,5032,5034,5036],{"class":281,"line":329},[152,5015,4844],{"class":476},[152,5017,3322],{"class":483},[152,5019,1822],{"class":476},[152,5021,4675],{"class":483},[152,5023,1864],{"class":476},[152,5025,2000],{"class":293},[152,5027,4682],{"class":483},[152,5029,844],{"class":476},[152,5031,2254],{"class":293},[152,5033,4682],{"class":483},[152,5035,3943],{"class":476},[152,5037,1825],{"class":483},[152,5039,5040],{"class":281,"line":343},[152,5041,3681],{"class":483},[152,5043,5044,5047,5049,5051,5054,5056,5058,5061,5063,5065,5067,5069],{"class":281,"line":348},[152,5045,5046],{"class":476},"        for",[152,5048,3322],{"class":483},[152,5050,1822],{"class":476},[152,5052,5053],{"class":483}," j",[152,5055,1864],{"class":476},[152,5057,2000],{"class":293},[152,5059,5060],{"class":483},";j",[152,5062,844],{"class":476},[152,5064,2254],{"class":293},[152,5066,5060],{"class":483},[152,5068,3943],{"class":476},[152,5070,1825],{"class":483},[152,5072,5073],{"class":281,"line":362},[152,5074,4160],{"class":483},[152,5076,5077,5079,5081,5084],{"class":281,"line":367},[152,5078,4165],{"class":483},[152,5080,2848],{"class":476},[152,5082,5083],{"class":289},"\"*\"",[152,5085,2965],{"class":483},[152,5087,5088],{"class":281,"line":381},[152,5089,4179],{"class":483},[152,5091,5092,5095,5097],{"class":281,"line":386},[152,5093,5094],{"class":483},"        cout",[152,5096,2848],{"class":476},[152,5098,2870],{"class":483},[152,5100,5101],{"class":281,"line":932},[152,5102,3838],{"class":483},[152,5104,5105],{"class":281,"line":942},[152,5106,3236],{"class":483},[19,5108,5109],{},"乘法口诀表",[270,5111,5113],{"className":1807,"code":5112,"language":1809,"meta":275,"style":275},"#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",[277,5114,5115,5121,5131,5139,5143,5169,5173,5198,5202,5242,5246,5254,5258],{"__ignoreMap":275},[152,5116,5117,5119],{"class":281,"line":282},[152,5118,3601],{"class":476},[152,5120,3985],{"class":289},[152,5122,5123,5125,5127,5129],{"class":281,"line":303},[152,5124,3609],{"class":476},[152,5126,3612],{"class":476},[152,5128,3615],{"class":285},[152,5130,2965],{"class":483},[152,5132,5133,5135,5137],{"class":281,"line":310},[152,5134,1822],{"class":476},[152,5136,3624],{"class":285},[152,5138,3627],{"class":483},[152,5140,5141],{"class":281,"line":324},[152,5142,3217],{"class":483},[152,5144,5145,5147,5149,5151,5153,5155,5157,5159,5161,5163,5165,5167],{"class":281,"line":329},[152,5146,4844],{"class":476},[152,5148,1819],{"class":483},[152,5150,1822],{"class":476},[152,5152,4675],{"class":483},[152,5154,1864],{"class":476},[152,5156,2026],{"class":293},[152,5158,4682],{"class":483},[152,5160,844],{"class":476},[152,5162,2254],{"class":293},[152,5164,4682],{"class":483},[152,5166,3943],{"class":476},[152,5168,1825],{"class":483},[152,5170,5171],{"class":281,"line":343},[152,5172,3681],{"class":483},[152,5174,5175,5177,5179,5181,5183,5185,5187,5189,5191,5194,5196],{"class":281,"line":348},[152,5176,5046],{"class":476},[152,5178,1819],{"class":483},[152,5180,1822],{"class":476},[152,5182,5053],{"class":483},[152,5184,1864],{"class":476},[152,5186,2026],{"class":293},[152,5188,5060],{"class":483},[152,5190,3259],{"class":476},[152,5192,5193],{"class":483},"i;j",[152,5195,3943],{"class":476},[152,5197,1825],{"class":483},[152,5199,5200],{"class":281,"line":362},[152,5201,4160],{"class":483},[152,5203,5204,5206,5208,5210,5212,5214,5216,5218,5220,5223,5225,5227,5229,5231,5233,5236,5238,5240],{"class":281,"line":367},[152,5205,4165],{"class":483},[152,5207,2848],{"class":476},[152,5209,2275],{"class":483},[152,5211,2848],{"class":476},[152,5213,5083],{"class":289},[152,5215,2848],{"class":476},[152,5217,2249],{"class":483},[152,5219,2848],{"class":476},[152,5221,5222],{"class":289},"\"=\"",[152,5224,2848],{"class":476},[152,5226,2249],{"class":483},[152,5228,2263],{"class":476},[152,5230,2275],{"class":483},[152,5232,2848],{"class":476},[152,5234,5235],{"class":289},"'",[152,5237,2905],{"class":293},[152,5239,5235],{"class":289},[152,5241,2965],{"class":483},[152,5243,5244],{"class":281,"line":381},[152,5245,4179],{"class":483},[152,5247,5248,5250,5252],{"class":281,"line":386},[152,5249,5094],{"class":483},[152,5251,2848],{"class":476},[152,5253,2870],{"class":483},[152,5255,5256],{"class":281,"line":932},[152,5257,3838],{"class":483},[152,5259,5260],{"class":281,"line":942},[152,5261,3236],{"class":483},[14,5263,5265],{"id":5264},"_163跳出语句","1.6.3跳出语句",[416,5267,5268],{},[419,5269,5270],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5272,5273],{},"break使用时机：",[698,5275,5276,5279,5282],{},[419,5277,5278],{},"出现在switch条件语句中，作用是终止case并跳出switch",[419,5280,5281],{},"出现在循环结构中，作用是跳出当前的循环结构",[419,5283,5284],{},"出现在嵌套循环中，跳出最近的内层循环语句",[416,5286,5287,5290],{"start":303},[419,5288,5289],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[419,5291,5292],{},"goto语句\n语法：goto 标记;",[19,5294,5295],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[270,5297,5299],{"className":1807,"code":5298,"language":1809,"meta":275,"style":275},"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",[277,5300,5301,5309,5313,5326,5336,5349,5362,5375,5383,5399],{"__ignoreMap":275},[152,5302,5303,5305,5307],{"class":281,"line":282},[152,5304,1822],{"class":476},[152,5306,3624],{"class":285},[152,5308,3627],{"class":483},[152,5310,5311],{"class":281,"line":303},[152,5312,3217],{"class":483},[152,5314,5315,5317,5319,5322,5324],{"class":281,"line":310},[152,5316,3222],{"class":483},[152,5318,2848],{"class":476},[152,5320,5321],{"class":289},"\"1\"",[152,5323,2848],{"class":476},[152,5325,2870],{"class":483},[152,5327,5328,5331,5334],{"class":281,"line":324},[152,5329,5330],{"class":476},"    goto",[152,5332,5333],{"class":285}," FLAG",[152,5335,2965],{"class":483},[152,5337,5338,5340,5342,5345,5347],{"class":281,"line":329},[152,5339,3222],{"class":483},[152,5341,2848],{"class":476},[152,5343,5344],{"class":289},"\"2\"",[152,5346,2848],{"class":476},[152,5348,2870],{"class":483},[152,5350,5351,5353,5355,5358,5360],{"class":281,"line":343},[152,5352,3222],{"class":483},[152,5354,2848],{"class":476},[152,5356,5357],{"class":289},"\"3\"",[152,5359,2848],{"class":476},[152,5361,2870],{"class":483},[152,5363,5364,5366,5368,5371,5373],{"class":281,"line":348},[152,5365,3222],{"class":483},[152,5367,2848],{"class":476},[152,5369,5370],{"class":289},"\"4\"",[152,5372,2848],{"class":476},[152,5374,2870],{"class":483},[152,5376,5377,5380],{"class":281,"line":362},[152,5378,5379],{"class":285},"    FLAG",[152,5381,5382],{"class":483},":\n",[152,5384,5385,5387,5389,5392,5394,5396],{"class":281,"line":367},[152,5386,3222],{"class":483},[152,5388,2848],{"class":476},[152,5390,5391],{"class":289},"\"5\"",[152,5393,2848],{"class":476},[152,5395,2913],{"class":483},[152,5397,5398],{"class":866},"\u002F\u002F跳过了2,3,4,直接到5\n",[152,5400,5401],{"class":281,"line":381},[152,5402,3236],{"class":483},[1760,5404,5406],{"id":5405},"_17数组","1.7数组",[14,5408,5410],{"id":5409},"_171一维数组","1.7.1一维数组",[416,5412,5413],{},[419,5414,5415],{},"一维数组定义方式",[23,5417,5418,5427],{},[26,5419,5420],{},[29,5421,5422,5425],{},[32,5423,5424],{},"方式",[32,5426,696],{},[43,5428,5429,5443,5453],{},[29,5430,5431,5437],{},[48,5432,5433,5434,1873],{},"数据类型 数组名",[152,5435,5436],{},"数组长度",[48,5438,5439,5440,5442],{},"这种方式是先定义再arr",[152,5441,2249],{},"赋值",[29,5444,5445,5450],{},[48,5446,5433,5447,5449],{},[152,5448,5436],{},"={值1,值2....};",[48,5451,5452],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[29,5454,5455,5459],{},[48,5456,5433,5457,5449],{},[152,5458],{},[48,5460,5461,5462,5464],{},"int arr",[152,5463],{},";这是不正确的，按照这样的方式定义必须有初始长度",[416,5466,5467],{"start":303},[419,5468,5469],{},"一维数组数组名\n用途：",[698,5471,5472],{},[419,5473,5474],{},"1.可以统计整个数组在内存中的长度：",[270,5476,5478],{"className":1807,"code":5477,"language":1809,"meta":275,"style":275},"sizeof(arr);\nsizeof(arr[0]);\n",[277,5479,5480,5487],{"__ignoreMap":275},[152,5481,5482,5484],{"class":281,"line":282},[152,5483,1816],{"class":476},[152,5485,5486],{"class":483},"(arr);\n",[152,5488,5489,5491,5494,5496],{"class":281,"line":303},[152,5490,1816],{"class":476},[152,5492,5493],{"class":483},"(arr[",[152,5495,2000],{"class":293},[152,5497,5498],{"class":483},"]);\n",[698,5500,5501],{},[419,5502,5503],{},"2.可以获取数组在内存中的首地址:",[270,5505,5507],{"className":1807,"code":5506,"language":1809,"meta":275,"style":275},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[277,5508,5509,5514,5527,5532],{"__ignoreMap":275},[152,5510,5511],{"class":281,"line":282},[152,5512,5513],{"class":866},"\u002F\u002F查看16进制的首地址\n",[152,5515,5516,5518,5520,5523,5525],{"class":281,"line":303},[152,5517,3041],{"class":483},[152,5519,2848],{"class":476},[152,5521,5522],{"class":483},"arr",[152,5524,2848],{"class":476},[152,5526,2870],{"class":483},[152,5528,5529],{"class":281,"line":310},[152,5530,5531],{"class":866},"\u002F\u002F看10进制数\n",[152,5533,5534,5536,5538,5540,5542,5544,5546,5549,5551,5553,5555],{"class":281,"line":324},[152,5535,3041],{"class":483},[152,5537,2848],{"class":476},[152,5539,1819],{"class":483},[152,5541,1822],{"class":476},[152,5543,2237],{"class":483},[152,5545,2161],{"class":476},[152,5547,5548],{"class":483},"arr[",[152,5550,2000],{"class":293},[152,5552,2746],{"class":483},[152,5554,2848],{"class":476},[152,5556,2870],{"class":483},[19,5558,5559],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[698,5561,5562],{},[419,5563,5564],{},"1️⃣五只小猪称体重",[270,5566,5568],{"className":1807,"code":5567,"language":1809,"meta":275,"style":275},"#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",[277,5569,5570,5576,5586,5594,5598,5638,5651,5677,5681,5693,5697,5707,5711,5715,5728,5738],{"__ignoreMap":275},[152,5571,5572,5574],{"class":281,"line":282},[152,5573,3601],{"class":476},[152,5575,3604],{"class":289},[152,5577,5578,5580,5582,5584],{"class":281,"line":303},[152,5579,3609],{"class":476},[152,5581,3612],{"class":476},[152,5583,3615],{"class":285},[152,5585,2965],{"class":483},[152,5587,5588,5590,5592],{"class":281,"line":310},[152,5589,1822],{"class":476},[152,5591,3624],{"class":285},[152,5593,3627],{"class":483},[152,5595,5596],{"class":281,"line":324},[152,5597,3217],{"class":483},[152,5599,5600,5602,5605,5607,5609,5611,5613,5616,5618,5621,5623,5625,5627,5630,5632,5635],{"class":281,"line":329},[152,5601,3636],{"class":476},[152,5603,5604],{"class":483}," arr[",[152,5606,2127],{"class":293},[152,5608,2746],{"class":483},[152,5610,1864],{"class":476},[152,5612,2703],{"class":483},[152,5614,5615],{"class":293},"300",[152,5617,2186],{"class":483},[152,5619,5620],{"class":293},"350",[152,5622,2186],{"class":483},[152,5624,3382],{"class":293},[152,5626,2186],{"class":483},[152,5628,5629],{"class":293},"400",[152,5631,2186],{"class":483},[152,5633,5634],{"class":293},"250",[152,5636,5637],{"class":483},"};\n",[152,5639,5640,5642,5645,5647,5649],{"class":281,"line":343},[152,5641,3636],{"class":476},[152,5643,5644],{"class":483}," tmp",[152,5646,1864],{"class":476},[152,5648,2000],{"class":293},[152,5650,2965],{"class":483},[152,5652,5653,5655,5657,5659,5661,5663,5665,5667,5669,5671,5673,5675],{"class":281,"line":348},[152,5654,4844],{"class":476},[152,5656,3322],{"class":483},[152,5658,1822],{"class":476},[152,5660,4675],{"class":483},[152,5662,1864],{"class":476},[152,5664,2000],{"class":293},[152,5666,4682],{"class":483},[152,5668,844],{"class":476},[152,5670,2127],{"class":293},[152,5672,4682],{"class":483},[152,5674,3943],{"class":476},[152,5676,1825],{"class":483},[152,5678,5679],{"class":281,"line":362},[152,5680,3681],{"class":483},[152,5682,5683,5685,5688,5690],{"class":281,"line":367},[152,5684,4147],{"class":476},[152,5686,5687],{"class":483},"(tmp",[152,5689,844],{"class":476},[152,5691,5692],{"class":483},"arr[i])\n",[152,5694,5695],{"class":281,"line":381},[152,5696,4160],{"class":483},[152,5698,5699,5702,5704],{"class":281,"line":386},[152,5700,5701],{"class":483},"            tmp",[152,5703,1864],{"class":476},[152,5705,5706],{"class":483},"arr[i];\n",[152,5708,5709],{"class":281,"line":932},[152,5710,4179],{"class":483},[152,5712,5713],{"class":281,"line":942},[152,5714,3838],{"class":483},[152,5716,5717,5719,5721,5724,5726],{"class":281,"line":949},[152,5718,3222],{"class":483},[152,5720,2848],{"class":476},[152,5722,5723],{"class":483},"tmp",[152,5725,2848],{"class":476},[152,5727,2870],{"class":483},[152,5729,5730,5733,5736],{"class":281,"line":954},[152,5731,5732],{"class":476},"    return",[152,5734,5735],{"class":293}," 0",[152,5737,2965],{"class":483},[152,5739,5740],{"class":281,"line":959},[152,5741,3236],{"class":483},[698,5743,5744],{},[419,5745,5746],{},"2️⃣数组元素逆置",[270,5748,5750],{"className":1807,"code":5749,"language":1809,"meta":275,"style":275},"\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",[277,5751,5752,5757,5763,5773,5781,5785,5820,5836,5868,5881,5886,5891,5903,5913,5923,5928,5937,5947,5952,5957,5984,5988,6004,6008,6019,6028],{"__ignoreMap":275},[152,5753,5754],{"class":281,"line":282},[152,5755,5756],{"class":866},"\u002F\u002F元素逆置\n",[152,5758,5759,5761],{"class":281,"line":303},[152,5760,3601],{"class":476},[152,5762,3604],{"class":289},[152,5764,5765,5767,5769,5771],{"class":281,"line":310},[152,5766,3609],{"class":476},[152,5768,3612],{"class":476},[152,5770,3615],{"class":285},[152,5772,2965],{"class":483},[152,5774,5775,5777,5779],{"class":281,"line":324},[152,5776,1822],{"class":476},[152,5778,3624],{"class":285},[152,5780,3627],{"class":483},[152,5782,5783],{"class":281,"line":329},[152,5784,3217],{"class":483},[152,5786,5787,5790,5792,5794,5796,5798,5800,5802,5804,5806,5808,5810,5812,5814,5816,5818],{"class":281,"line":343},[152,5788,5789],{"class":476},"   int",[152,5791,5604],{"class":483},[152,5793,2127],{"class":293},[152,5795,2746],{"class":483},[152,5797,1864],{"class":476},[152,5799,2703],{"class":483},[152,5801,2026],{"class":293},[152,5803,2186],{"class":483},[152,5805,1894],{"class":293},[152,5807,2186],{"class":483},[152,5809,1888],{"class":293},[152,5811,2186],{"class":483},[152,5813,2101],{"class":293},[152,5815,2186],{"class":483},[152,5817,2127],{"class":293},[152,5819,5637],{"class":483},[152,5821,5822,5824,5827,5829,5831,5833],{"class":281,"line":348},[152,5823,5789],{"class":476},[152,5825,5826],{"class":483}," start",[152,5828,1864],{"class":476},[152,5830,2000],{"class":293},[152,5832,1873],{"class":483},[152,5834,5835],{"class":866},"\u002F\u002F起始下标\n",[152,5837,5838,5840,5843,5846,5849,5852,5854,5856,5859,5861,5863,5865],{"class":281,"line":362},[152,5839,5789],{"class":476},[152,5841,5842],{"class":483}," end",[152,5844,5845],{"class":476},"=sizeof",[152,5847,5848],{"class":483},"(arr)",[152,5850,5851],{"class":476},"\u002Fsizeof",[152,5853,5493],{"class":483},[152,5855,2000],{"class":293},[152,5857,5858],{"class":483},"])",[152,5860,2340],{"class":476},[152,5862,2026],{"class":293},[152,5864,1873],{"class":483},[152,5866,5867],{"class":866},"\u002F\u002F结束下标\n",[152,5869,5870,5873,5876,5878],{"class":281,"line":367},[152,5871,5872],{"class":476},"   while",[152,5874,5875],{"class":483}," (start",[152,5877,844],{"class":476},[152,5879,5880],{"class":483},"end)\n",[152,5882,5883],{"class":281,"line":381},[152,5884,5885],{"class":483},"   {\n",[152,5887,5888],{"class":281,"line":386},[152,5889,5890],{"class":866},"    \u002F\u002F实现元素互换代码\n",[152,5892,5893,5895,5898,5900],{"class":281,"line":932},[152,5894,3636],{"class":476},[152,5896,5897],{"class":483}," temp",[152,5899,1864],{"class":476},[152,5901,5902],{"class":483},"arr[start];\n",[152,5904,5905,5908,5910],{"class":281,"line":942},[152,5906,5907],{"class":483},"    arr[start]",[152,5909,1864],{"class":476},[152,5911,5912],{"class":483},"arr[end];\n",[152,5914,5915,5918,5920],{"class":281,"line":949},[152,5916,5917],{"class":483},"    arr[end]",[152,5919,1864],{"class":476},[152,5921,5922],{"class":483},"temp;\n",[152,5924,5925],{"class":281,"line":954},[152,5926,5927],{"class":866},"    \u002F\u002F下标更新\n",[152,5929,5930,5933,5935],{"class":281,"line":959},[152,5931,5932],{"class":483},"    start",[152,5934,3943],{"class":476},[152,5936,2965],{"class":483},[152,5938,5939,5942,5945],{"class":281,"line":970},[152,5940,5941],{"class":483},"    end",[152,5943,5944],{"class":476},"--",[152,5946,2965],{"class":483},[152,5948,5949],{"class":281,"line":979},[152,5950,5951],{"class":483},"   }\n",[152,5953,5954],{"class":281,"line":989},[152,5955,5956],{"class":866},"   \u002F\u002F输出逆置后的数组\n",[152,5958,5959,5962,5964,5966,5968,5970,5972,5974,5976,5978,5980,5982],{"class":281,"line":996},[152,5960,5961],{"class":476},"   for",[152,5963,3322],{"class":483},[152,5965,1822],{"class":476},[152,5967,4675],{"class":483},[152,5969,1864],{"class":476},[152,5971,2000],{"class":293},[152,5973,4682],{"class":483},[152,5975,844],{"class":476},[152,5977,2127],{"class":293},[152,5979,4682],{"class":483},[152,5981,3943],{"class":476},[152,5983,1825],{"class":483},[152,5985,5986],{"class":281,"line":1001},[152,5987,5885],{"class":483},[152,5989,5990,5992,5994,5997,5999,6002],{"class":281,"line":1006},[152,5991,3222],{"class":483},[152,5993,2848],{"class":476},[152,5995,5996],{"class":483},"arr[i]",[152,5998,2848],{"class":476},[152,6000,6001],{"class":289},"\" \"",[152,6003,2965],{"class":483},[152,6005,6006],{"class":281,"line":1018},[152,6007,5951],{"class":483},[152,6009,6010,6013,6015,6017],{"class":281,"line":1027},[152,6011,6012],{"class":285},"   system",[152,6014,1819],{"class":483},[152,6016,3959],{"class":289},[152,6018,4362],{"class":483},[152,6020,6021,6024,6026],{"class":281,"line":1037},[152,6022,6023],{"class":476},"   return",[152,6025,5735],{"class":293},[152,6027,2965],{"class":483},[152,6029,6030],{"class":281,"line":1044},[152,6031,3236],{"class":483},[698,6033,6034],{},[419,6035,6036],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[270,6038,6040],{"className":1807,"code":6039,"language":1809,"meta":275,"style":275},"\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",[277,6041,6042,6047,6053,6063,6071,6075,6127,6140,6166,6170,6184,6188,6193,6198,6228,6232,6237,6271,6275,6280,6300,6305,6317,6333,6348,6353,6357,6361,6374,6400,6404,6418,6422,6430],{"__ignoreMap":275},[152,6043,6044],{"class":281,"line":282},[152,6045,6046],{"class":866},"\u002F\u002F冒泡排序,升序\n",[152,6048,6049,6051],{"class":281,"line":303},[152,6050,3601],{"class":476},[152,6052,3604],{"class":289},[152,6054,6055,6057,6059,6061],{"class":281,"line":310},[152,6056,3609],{"class":476},[152,6058,3612],{"class":476},[152,6060,3615],{"class":285},[152,6062,2965],{"class":483},[152,6064,6065,6067,6069],{"class":281,"line":324},[152,6066,1822],{"class":476},[152,6068,3624],{"class":285},[152,6070,3627],{"class":483},[152,6072,6073],{"class":281,"line":329},[152,6074,3217],{"class":483},[152,6076,6077,6079,6081,6083,6086,6088,6091,6093,6095,6097,6099,6101,6103,6105,6107,6109,6111,6113,6115,6117,6119,6121,6123,6125],{"class":281,"line":343},[152,6078,3636],{"class":476},[152,6080,5604],{"class":483},[152,6082,2228],{"class":293},[152,6084,6085],{"class":483},"] ",[152,6087,1864],{"class":476},[152,6089,6090],{"class":483}," {",[152,6092,2101],{"class":293},[152,6094,2186],{"class":483},[152,6096,1894],{"class":293},[152,6098,2186],{"class":483},[152,6100,2203],{"class":293},[152,6102,2186],{"class":483},[152,6104,2000],{"class":293},[152,6106,2186],{"class":483},[152,6108,2127],{"class":293},[152,6110,2186],{"class":483},[152,6112,2177],{"class":293},[152,6114,2186],{"class":483},[152,6116,2026],{"class":293},[152,6118,2186],{"class":483},[152,6120,1888],{"class":293},[152,6122,2186],{"class":483},[152,6124,2228],{"class":293},[152,6126,5637],{"class":483},[152,6128,6129,6131,6133,6136,6138],{"class":281,"line":348},[152,6130,3222],{"class":483},[152,6132,2848],{"class":476},[152,6134,6135],{"class":289},"\"排序前：\"",[152,6137,2848],{"class":476},[152,6139,2870],{"class":483},[152,6141,6142,6144,6146,6148,6150,6152,6154,6156,6158,6160,6162,6164],{"class":281,"line":362},[152,6143,4844],{"class":476},[152,6145,3322],{"class":483},[152,6147,1822],{"class":476},[152,6149,4675],{"class":483},[152,6151,1864],{"class":476},[152,6153,2000],{"class":293},[152,6155,4682],{"class":483},[152,6157,844],{"class":476},[152,6159,2228],{"class":293},[152,6161,4682],{"class":483},[152,6163,3943],{"class":476},[152,6165,1825],{"class":483},[152,6167,6168],{"class":281,"line":367},[152,6169,3681],{"class":483},[152,6171,6172,6174,6176,6178,6180,6182],{"class":281,"line":381},[152,6173,5094],{"class":483},[152,6175,2848],{"class":476},[152,6177,5996],{"class":483},[152,6179,2848],{"class":476},[152,6181,6001],{"class":289},[152,6183,2965],{"class":483},[152,6185,6186],{"class":281,"line":386},[152,6187,3838],{"class":483},[152,6189,6190],{"class":281,"line":932},[152,6191,6192],{"class":866},"    \u002F\u002F开始冒泡排序\n",[152,6194,6195],{"class":281,"line":942},[152,6196,6197],{"class":866},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[152,6199,6200,6202,6204,6206,6208,6210,6212,6214,6216,6218,6220,6222,6224,6226],{"class":281,"line":949},[152,6201,4844],{"class":476},[152,6203,3322],{"class":483},[152,6205,1822],{"class":476},[152,6207,4675],{"class":483},[152,6209,1864],{"class":476},[152,6211,2000],{"class":293},[152,6213,4682],{"class":483},[152,6215,844],{"class":476},[152,6217,2228],{"class":293},[152,6219,2340],{"class":476},[152,6221,2026],{"class":293},[152,6223,4682],{"class":483},[152,6225,3943],{"class":476},[152,6227,1825],{"class":483},[152,6229,6230],{"class":281,"line":954},[152,6231,3681],{"class":483},[152,6233,6234],{"class":281,"line":959},[152,6235,6236],{"class":866},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[152,6238,6239,6241,6243,6245,6247,6249,6251,6253,6255,6257,6259,6261,6263,6265,6267,6269],{"class":281,"line":970},[152,6240,5046],{"class":476},[152,6242,3322],{"class":483},[152,6244,1822],{"class":476},[152,6246,5053],{"class":483},[152,6248,1864],{"class":476},[152,6250,2000],{"class":293},[152,6252,5060],{"class":483},[152,6254,844],{"class":476},[152,6256,2228],{"class":293},[152,6258,2340],{"class":476},[152,6260,2249],{"class":483},[152,6262,2340],{"class":476},[152,6264,2026],{"class":293},[152,6266,5060],{"class":483},[152,6268,3943],{"class":476},[152,6270,1825],{"class":483},[152,6272,6273],{"class":281,"line":979},[152,6274,4160],{"class":483},[152,6276,6277],{"class":281,"line":989},[152,6278,6279],{"class":866},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[152,6281,6282,6285,6288,6290,6293,6295,6297],{"class":281,"line":996},[152,6283,6284],{"class":476},"            if",[152,6286,6287],{"class":483},"(arr[j]",[152,6289,487],{"class":476},[152,6291,6292],{"class":483},"arr[j",[152,6294,2289],{"class":476},[152,6296,2026],{"class":293},[152,6298,6299],{"class":483},"])\n",[152,6301,6302],{"class":281,"line":1001},[152,6303,6304],{"class":483},"            {\n",[152,6306,6307,6310,6312,6314],{"class":281,"line":1006},[152,6308,6309],{"class":476},"                int",[152,6311,5897],{"class":483},[152,6313,1864],{"class":476},[152,6315,6316],{"class":483},"arr[j];\n",[152,6318,6319,6322,6324,6326,6328,6330],{"class":281,"line":1018},[152,6320,6321],{"class":483},"                arr[j]",[152,6323,1864],{"class":476},[152,6325,6292],{"class":483},[152,6327,2289],{"class":476},[152,6329,2026],{"class":293},[152,6331,6332],{"class":483},"];\n",[152,6334,6335,6338,6340,6342,6344,6346],{"class":281,"line":1027},[152,6336,6337],{"class":483},"                arr[j",[152,6339,2289],{"class":476},[152,6341,2026],{"class":293},[152,6343,2746],{"class":483},[152,6345,1864],{"class":476},[152,6347,5922],{"class":483},[152,6349,6350],{"class":281,"line":1037},[152,6351,6352],{"class":483},"            }\n",[152,6354,6355],{"class":281,"line":1044},[152,6356,4179],{"class":483},[152,6358,6359],{"class":281,"line":1049},[152,6360,3838],{"class":483},[152,6362,6363,6365,6367,6370,6372],{"class":281,"line":1054},[152,6364,3222],{"class":483},[152,6366,2848],{"class":476},[152,6368,6369],{"class":289},"\"排序后：\"",[152,6371,2848],{"class":476},[152,6373,2870],{"class":483},[152,6375,6376,6378,6380,6382,6384,6386,6388,6390,6392,6394,6396,6398],{"class":281,"line":1065},[152,6377,4844],{"class":476},[152,6379,3322],{"class":483},[152,6381,1822],{"class":476},[152,6383,4675],{"class":483},[152,6385,1864],{"class":476},[152,6387,2000],{"class":293},[152,6389,4682],{"class":483},[152,6391,844],{"class":476},[152,6393,2228],{"class":293},[152,6395,4682],{"class":483},[152,6397,3943],{"class":476},[152,6399,1825],{"class":483},[152,6401,6402],{"class":281,"line":1074},[152,6403,3681],{"class":483},[152,6405,6406,6408,6410,6412,6414,6416],{"class":281,"line":1084},[152,6407,5094],{"class":483},[152,6409,2848],{"class":476},[152,6411,5996],{"class":483},[152,6413,2848],{"class":476},[152,6415,6001],{"class":289},[152,6417,2965],{"class":483},[152,6419,6420],{"class":281,"line":1091},[152,6421,3838],{"class":483},[152,6423,6424,6426,6428],{"class":281,"line":1096},[152,6425,5732],{"class":476},[152,6427,5735],{"class":293},[152,6429,2965],{"class":483},[152,6431,6432],{"class":281,"line":1101},[152,6433,3236],{"class":483},[14,6435,6437],{"id":6436},"_172二维数组","1.7.2二维数组",[416,6439,6440],{},[419,6441,6442],{},"二维数组的四种定义方式",[23,6444,6445,6454],{},[26,6446,6447],{},[29,6448,6449,6452],{},[32,6450,6451],{},"序号",[32,6453,5424],{},[43,6455,6456,6466,6475,6484,6493],{},[29,6457,6458,6460],{},[48,6459,2026],{},[48,6461,6462,6463,1873],{},"数据类型 数组名[行数]",[152,6464,6465],{},"列数",[29,6467,6468,6470],{},[48,6469,1894],{},[48,6471,6462,6472,6474],{},[152,6473,6465],{},"={ {数据1,数据2}，{数据3，数据4}... }",[29,6476,6477,6479],{},[48,6478,1888],{},[48,6480,6462,6481,6483],{},[152,6482,6465],{},"={数据1,数据2,数据3...}",[29,6485,6486,6488],{},[48,6487,2101],{},[48,6489,6490,6491,6483],{},"数据类型 数组名[]",[152,6492,6465],{},[29,6494,6495,6498],{},[48,6496,6497],{},"注意：不能只省略列数",[48,6499],{},[416,6501,6502],{"start":303},[419,6503,6504],{},"二维数组数组名",[698,6506,6507,6510],{},[419,6508,6509],{},"1.查看二维数组所占内存空间",[419,6511,6512],{},"2.获取二维数组首地址",[19,6514,6515],{},"已知二维数组，求二维数组的行数与列数",[270,6517,6519],{"className":1807,"code":6518,"language":1809,"meta":275,"style":275},"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",[277,6520,6521,6529,6533,6551,6555,6573,6589,6594,6619,6652],{"__ignoreMap":275},[152,6522,6523,6525,6527],{"class":281,"line":282},[152,6524,1822],{"class":476},[152,6526,3624],{"class":285},[152,6528,3627],{"class":483},[152,6530,6531],{"class":281,"line":303},[152,6532,3217],{"class":483},[152,6534,6535,6537,6539,6541,6544,6546,6548],{"class":281,"line":310},[152,6536,3636],{"class":476},[152,6538,5604],{"class":483},[152,6540,1894],{"class":293},[152,6542,6543],{"class":483},"][",[152,6545,1888],{"class":293},[152,6547,2746],{"class":483},[152,6549,6550],{"class":476},"=\n",[152,6552,6553],{"class":281,"line":324},[152,6554,3681],{"class":483},[152,6556,6557,6560,6562,6564,6566,6568,6570],{"class":281,"line":329},[152,6558,6559],{"class":483},"        {",[152,6561,2026],{"class":293},[152,6563,2186],{"class":483},[152,6565,1894],{"class":293},[152,6567,2186],{"class":483},[152,6569,1888],{"class":293},[152,6571,6572],{"class":483},"},\n",[152,6574,6575,6577,6579,6581,6583,6585,6587],{"class":281,"line":343},[152,6576,6559],{"class":483},[152,6578,2101],{"class":293},[152,6580,2186],{"class":483},[152,6582,2127],{"class":293},[152,6584,2186],{"class":483},[152,6586,2152],{"class":293},[152,6588,3236],{"class":483},[152,6590,6591],{"class":281,"line":348},[152,6592,6593],{"class":483},"    };\n",[152,6595,6596,6598,6600,6603,6605,6607,6609,6611,6613,6615,6617],{"class":281,"line":362},[152,6597,3222],{"class":483},[152,6599,2848],{"class":476},[152,6601,6602],{"class":289},"\"二维数组的行数\"",[152,6604,3044],{"class":476},[152,6606,5848],{"class":483},[152,6608,5851],{"class":476},[152,6610,5493],{"class":483},[152,6612,2000],{"class":293},[152,6614,5858],{"class":483},[152,6616,2848],{"class":476},[152,6618,2870],{"class":483},[152,6620,6621,6623,6625,6628,6630,6632,6634,6636,6638,6640,6642,6644,6646,6648,6650],{"class":281,"line":367},[152,6622,3222],{"class":483},[152,6624,2848],{"class":476},[152,6626,6627],{"class":289},"\"二维数组的列数\"",[152,6629,3044],{"class":476},[152,6631,5493],{"class":483},[152,6633,2000],{"class":293},[152,6635,5858],{"class":483},[152,6637,5851],{"class":476},[152,6639,5493],{"class":483},[152,6641,2000],{"class":293},[152,6643,6543],{"class":483},[152,6645,2000],{"class":293},[152,6647,5858],{"class":483},[152,6649,2848],{"class":476},[152,6651,2870],{"class":483},[152,6653,6654],{"class":281,"line":381},[152,6655,3236],{"class":483},[19,6657,6658],{},"查看二维数组首地址",[270,6660,6662],{"className":1807,"code":6661,"language":1809,"meta":275,"style":275},"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",[277,6663,6664,6681,6707,6732],{"__ignoreMap":275},[152,6665,6666,6668,6670,6673,6675,6677,6679],{"class":281,"line":282},[152,6667,3041],{"class":483},[152,6669,2848],{"class":476},[152,6671,6672],{"class":289},"\"二维数组首地址：\"",[152,6674,2848],{"class":476},[152,6676,5522],{"class":483},[152,6678,2848],{"class":476},[152,6680,2870],{"class":483},[152,6682,6683,6685,6687,6690,6692,6694,6696,6699,6701,6703,6705],{"class":281,"line":303},[152,6684,3041],{"class":483},[152,6686,2848],{"class":476},[152,6688,6689],{"class":289},"\"二维数组第一行的首地址：\"",[152,6691,2848],{"class":476},[152,6693,1819],{"class":483},[152,6695,1822],{"class":476},[152,6697,6698],{"class":483},")arr[",[152,6700,2000],{"class":293},[152,6702,2746],{"class":483},[152,6704,2848],{"class":476},[152,6706,2870],{"class":483},[152,6708,6709,6711,6713,6716,6718,6720,6722,6724,6726,6728,6730],{"class":281,"line":310},[152,6710,3041],{"class":483},[152,6712,2848],{"class":476},[152,6714,6715],{"class":289},"\"二维数组第二行的首地址：\"",[152,6717,2848],{"class":476},[152,6719,1819],{"class":483},[152,6721,1822],{"class":476},[152,6723,6698],{"class":483},[152,6725,2026],{"class":293},[152,6727,2746],{"class":483},[152,6729,2848],{"class":476},[152,6731,2870],{"class":483},[152,6733,6734,6736,6738,6741,6743,6745,6747,6749,6751,6753,6755,6757,6759,6761,6763,6765],{"class":281,"line":324},[152,6735,3041],{"class":483},[152,6737,2848],{"class":476},[152,6739,6740],{"class":289},"\"二维数组第一个元素的首地址:\"",[152,6742,2848],{"class":476},[152,6744,1819],{"class":483},[152,6746,1822],{"class":476},[152,6748,2237],{"class":483},[152,6750,2161],{"class":476},[152,6752,5548],{"class":483},[152,6754,2000],{"class":293},[152,6756,6543],{"class":483},[152,6758,2000],{"class":293},[152,6760,2746],{"class":483},[152,6762,2848],{"class":476},[152,6764,2913],{"class":483},[152,6766,6767],{"class":866},"\u002F\u002F对于数，要加取址符\n",[1736,6769,6770],{},"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":275,"searchDepth":303,"depth":303,"links":6772},[6773,6774,6775,6783,6784,6790,6795],{"id":1762,"depth":303,"text":1763},{"id":1769,"depth":303,"text":1770},{"id":1784,"depth":303,"text":1785,"children":6776},[6777,6778,6779,6780,6781,6782],{"id":1788,"depth":310,"text":1789},{"id":1835,"depth":310,"text":1836},{"id":1902,"depth":310,"text":1903},{"id":2829,"depth":310,"text":2830},{"id":2919,"depth":310,"text":2920},{"id":3015,"depth":310,"text":3016},{"id":3057,"depth":303,"text":3058},{"id":3125,"depth":303,"text":3126,"children":6785},[6786,6787,6788,6789],{"id":3129,"depth":310,"text":3130},{"id":3150,"depth":310,"text":3151},{"id":3159,"depth":310,"text":3160},{"id":3168,"depth":310,"text":3169},{"id":3177,"depth":303,"text":3178,"children":6791},[6792,6793,6794],{"id":3181,"depth":310,"text":3182},{"id":3856,"depth":310,"text":3857},{"id":5264,"depth":310,"text":5265},{"id":5405,"depth":303,"text":5406,"children":6796},[6797,6798],{"id":5409,"depth":310,"text":5410},{"id":6436,"depth":310,"text":6437},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1753,"description":275},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6805,"title":6806,"body":6807,"description":275,"extension":1744,"meta":7907,"navigation":306,"path":7908,"seo":7909,"stem":7910,"__hash__":7911},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6808,"toc":7899},[6809,6812,6816,6824,6832,6835,6901,6905,6908,6984,6988,6991,6994,6997,7210,7214,7219,7283,7288,7355,7360,7451,7454,7559,7563,7566,7572,7716,7720,7723,7737,7740,7785,7788,7896],[10,6810,6806],{"id":6811},"_2函数",[1760,6813,6815],{"id":6814},"_21函数概述","2.1函数概述",[416,6817,6818,6821],{},[419,6819,6820],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[419,6822,6823],{},"语法：",[270,6825,6830],{"className":6826,"code":6828,"language":6829,"meta":275},[6827],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[277,6831,6828],{"__ignoreMap":275},[19,6833,6834],{},"小案例",[270,6836,6838],{"className":1807,"code":6837,"language":1809,"meta":275,"style":275},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[277,6839,6840,6845,6869,6873,6890,6897],{"__ignoreMap":275},[152,6841,6842],{"class":281,"line":282},[152,6843,6844],{"class":866},"\u002F\u002Fnum1,num2形参\n",[152,6846,6847,6849,6852,6854,6856,6860,6862,6864,6867],{"class":281,"line":303},[152,6848,1822],{"class":476},[152,6850,6851],{"class":285}," add",[152,6853,1819],{"class":483},[152,6855,1822],{"class":476},[152,6857,6859],{"class":6858},"s4XuR"," num1",[152,6861,2186],{"class":483},[152,6863,1822],{"class":476},[152,6865,6866],{"class":6858}," num2",[152,6868,1825],{"class":483},[152,6870,6871],{"class":281,"line":310},[152,6872,3217],{"class":483},[152,6874,6875,6877,6880,6882,6885,6887],{"class":281,"line":324},[152,6876,3636],{"class":476},[152,6878,6879],{"class":483}," sum",[152,6881,1864],{"class":476},[152,6883,6884],{"class":483},"num1",[152,6886,2289],{"class":476},[152,6888,6889],{"class":483},"num2;\n",[152,6891,6892,6894],{"class":281,"line":329},[152,6893,5732],{"class":476},[152,6895,6896],{"class":483}," sum;\n",[152,6898,6899],{"class":281,"line":343},[152,6900,3236],{"class":483},[1760,6902,6904],{"id":6903},"_22函数调用","2.2函数调用",[19,6906,6907],{},"调用刚刚写的求和函数",[270,6909,6911],{"className":1807,"code":6910,"language":1809,"meta":275,"style":275},"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",[277,6912,6913,6921,6925,6930,6942,6954,6963,6968,6980],{"__ignoreMap":275},[152,6914,6915,6917,6919],{"class":281,"line":282},[152,6916,1822],{"class":476},[152,6918,3624],{"class":285},[152,6920,3627],{"class":483},[152,6922,6923],{"class":281,"line":303},[152,6924,3217],{"class":483},[152,6926,6927],{"class":281,"line":310},[152,6928,6929],{"class":866},"    \u002F\u002Fa,b实参\n",[152,6931,6932,6934,6936,6938,6940],{"class":281,"line":324},[152,6933,3636],{"class":476},[152,6935,3070],{"class":483},[152,6937,1864],{"class":476},[152,6939,2000],{"class":293},[152,6941,2965],{"class":483},[152,6943,6944,6946,6948,6950,6952],{"class":281,"line":329},[152,6945,3636],{"class":476},[152,6947,4476],{"class":483},[152,6949,1864],{"class":476},[152,6951,2000],{"class":293},[152,6953,2965],{"class":483},[152,6955,6956,6958,6960],{"class":281,"line":343},[152,6957,3663],{"class":483},[152,6959,3101],{"class":476},[152,6961,6962],{"class":483},"a,b;\n",[152,6964,6965],{"class":281,"line":348},[152,6966,6967],{"class":866},"    \u002F\u002F调用函数时，实参值传给了形参\n",[152,6969,6970,6972,6974,6977],{"class":281,"line":362},[152,6971,3222],{"class":483},[152,6973,2848],{"class":476},[152,6975,6976],{"class":285},"add",[152,6978,6979],{"class":483},"(a,b);\n",[152,6981,6982],{"class":281,"line":367},[152,6983,3236],{"class":483},[1760,6985,6987],{"id":6986},"_23值传递","2.3值传递",[19,6989,6990],{},"值传递就是函数调用时实参将数值传给形参",[19,6992,6993],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,6995,6996],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[270,6998,7000],{"className":1807,"code":6999,"language":1809,"meta":275,"style":275},"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",[277,7001,7002,7024,7028,7041,7058,7076,7087,7096,7105,7118,7134,7150,7159,7163,7171,7175,7187,7199,7206],{"__ignoreMap":275},[152,7003,7004,7007,7010,7012,7014,7016,7018,7020,7022],{"class":281,"line":282},[152,7005,7006],{"class":476},"void",[152,7008,7009],{"class":285}," swap",[152,7011,1819],{"class":483},[152,7013,1822],{"class":476},[152,7015,6859],{"class":6858},[152,7017,2186],{"class":483},[152,7019,1822],{"class":476},[152,7021,6866],{"class":6858},[152,7023,1825],{"class":483},[152,7025,7026],{"class":281,"line":303},[152,7027,3217],{"class":483},[152,7029,7030,7032,7034,7037,7039],{"class":281,"line":310},[152,7031,3222],{"class":483},[152,7033,2848],{"class":476},[152,7035,7036],{"class":289},"\"交换前：\"",[152,7038,2848],{"class":476},[152,7040,2870],{"class":483},[152,7042,7043,7045,7047,7050,7052,7054,7056],{"class":281,"line":324},[152,7044,3222],{"class":483},[152,7046,2848],{"class":476},[152,7048,7049],{"class":289},"\"num1=\"",[152,7051,2848],{"class":476},[152,7053,6884],{"class":483},[152,7055,2848],{"class":476},[152,7057,2870],{"class":483},[152,7059,7060,7062,7064,7067,7069,7072,7074],{"class":281,"line":329},[152,7061,3222],{"class":483},[152,7063,2848],{"class":476},[152,7065,7066],{"class":289},"\"num2=\"",[152,7068,2848],{"class":476},[152,7070,7071],{"class":483},"num2",[152,7073,2848],{"class":476},[152,7075,2870],{"class":483},[152,7077,7078,7080,7082,7084],{"class":281,"line":343},[152,7079,3636],{"class":476},[152,7081,5897],{"class":483},[152,7083,1864],{"class":476},[152,7085,7086],{"class":483},"num1;\n",[152,7088,7089,7092,7094],{"class":281,"line":348},[152,7090,7091],{"class":483},"    num1",[152,7093,1864],{"class":476},[152,7095,6889],{"class":483},[152,7097,7098,7101,7103],{"class":281,"line":362},[152,7099,7100],{"class":483},"    num2",[152,7102,1864],{"class":476},[152,7104,5922],{"class":483},[152,7106,7107,7109,7111,7114,7116],{"class":281,"line":367},[152,7108,3222],{"class":483},[152,7110,2848],{"class":476},[152,7112,7113],{"class":289},"\"交换后：\"",[152,7115,2848],{"class":476},[152,7117,2870],{"class":483},[152,7119,7120,7122,7124,7126,7128,7130,7132],{"class":281,"line":381},[152,7121,3222],{"class":483},[152,7123,2848],{"class":476},[152,7125,7049],{"class":289},[152,7127,2848],{"class":476},[152,7129,6884],{"class":483},[152,7131,2848],{"class":476},[152,7133,2870],{"class":483},[152,7135,7136,7138,7140,7142,7144,7146,7148],{"class":281,"line":386},[152,7137,3222],{"class":483},[152,7139,2848],{"class":476},[152,7141,7066],{"class":289},[152,7143,2848],{"class":476},[152,7145,7071],{"class":483},[152,7147,2848],{"class":476},[152,7149,2870],{"class":483},[152,7151,7152,7154,7156],{"class":281,"line":932},[152,7153,5732],{"class":476},[152,7155,1873],{"class":483},[152,7157,7158],{"class":866},"\u002F\u002F或者不写\n",[152,7160,7161],{"class":281,"line":942},[152,7162,3236],{"class":483},[152,7164,7165,7167,7169],{"class":281,"line":949},[152,7166,1822],{"class":476},[152,7168,3624],{"class":285},[152,7170,3627],{"class":483},[152,7172,7173],{"class":281,"line":954},[152,7174,3217],{"class":483},[152,7176,7177,7179,7181,7183,7185],{"class":281,"line":959},[152,7178,3636],{"class":476},[152,7180,3070],{"class":483},[152,7182,1864],{"class":476},[152,7184,2254],{"class":293},[152,7186,2965],{"class":483},[152,7188,7189,7191,7193,7195,7197],{"class":281,"line":970},[152,7190,3636],{"class":476},[152,7192,4476],{"class":483},[152,7194,1864],{"class":476},[152,7196,2508],{"class":293},[152,7198,2965],{"class":483},[152,7200,7201,7204],{"class":281,"line":979},[152,7202,7203],{"class":285},"    swap",[152,7205,6979],{"class":483},[152,7207,7208],{"class":281,"line":989},[152,7209,3236],{"class":483},[1760,7211,7213],{"id":7212},"_24函数的常见形式","2.4函数的常见形式",[416,7215,7216],{},[419,7217,7218],{},"无参无返",[270,7220,7222],{"className":1807,"code":7221,"language":1809,"meta":275,"style":275},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[277,7223,7224,7233,7237,7250,7254,7262,7266,7271,7279],{"__ignoreMap":275},[152,7225,7226,7228,7231],{"class":281,"line":282},[152,7227,7006],{"class":476},[152,7229,7230],{"class":285}," test01",[152,7232,3627],{"class":483},[152,7234,7235],{"class":281,"line":303},[152,7236,3217],{"class":483},[152,7238,7239,7241,7243,7246,7248],{"class":281,"line":310},[152,7240,3222],{"class":483},[152,7242,2848],{"class":476},[152,7244,7245],{"class":289},"\"你好\"",[152,7247,2848],{"class":476},[152,7249,2870],{"class":483},[152,7251,7252],{"class":281,"line":324},[152,7253,3236],{"class":483},[152,7255,7256,7258,7260],{"class":281,"line":329},[152,7257,1822],{"class":476},[152,7259,3624],{"class":285},[152,7261,3627],{"class":483},[152,7263,7264],{"class":281,"line":343},[152,7265,3217],{"class":483},[152,7267,7268],{"class":281,"line":348},[152,7269,7270],{"class":866},"    \u002F\u002F函数调用\n",[152,7272,7273,7276],{"class":281,"line":362},[152,7274,7275],{"class":285},"    test01",[152,7277,7278],{"class":483},"();\n",[152,7280,7281],{"class":281,"line":367},[152,7282,3236],{"class":483},[416,7284,7285],{"start":303},[419,7286,7287],{},"有参无返",[270,7289,7291],{"className":1807,"code":7290,"language":1809,"meta":275,"style":275},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[277,7292,7293,7308,7312,7324,7328,7336,7340,7351],{"__ignoreMap":275},[152,7294,7295,7297,7300,7302,7304,7306],{"class":281,"line":282},[152,7296,7006],{"class":476},[152,7298,7299],{"class":285}," test02",[152,7301,1819],{"class":483},[152,7303,1822],{"class":476},[152,7305,3070],{"class":6858},[152,7307,1825],{"class":483},[152,7309,7310],{"class":281,"line":303},[152,7311,3217],{"class":483},[152,7313,7314,7316,7318,7320,7322],{"class":281,"line":310},[152,7315,3222],{"class":483},[152,7317,2848],{"class":476},[152,7319,7245],{"class":289},[152,7321,2848],{"class":476},[152,7323,2870],{"class":483},[152,7325,7326],{"class":281,"line":324},[152,7327,3236],{"class":483},[152,7329,7330,7332,7334],{"class":281,"line":329},[152,7331,1822],{"class":476},[152,7333,3624],{"class":285},[152,7335,3627],{"class":483},[152,7337,7338],{"class":281,"line":343},[152,7339,3217],{"class":483},[152,7341,7342,7345,7347,7349],{"class":281,"line":348},[152,7343,7344],{"class":285},"    test02",[152,7346,1819],{"class":483},[152,7348,2119],{"class":293},[152,7350,4362],{"class":483},[152,7352,7353],{"class":281,"line":362},[152,7354,3236],{"class":483},[416,7356,7357],{"start":310},[419,7358,7359],{},"无参有返",[270,7361,7363],{"className":1807,"code":7362,"language":1809,"meta":275,"style":275},"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",[277,7364,7365,7374,7378,7390,7399,7403,7411,7415,7428,7447],{"__ignoreMap":275},[152,7366,7367,7369,7372],{"class":281,"line":282},[152,7368,1822],{"class":476},[152,7370,7371],{"class":285}," test03",[152,7373,3627],{"class":483},[152,7375,7376],{"class":281,"line":303},[152,7377,3217],{"class":483},[152,7379,7380,7382,7384,7386,7388],{"class":281,"line":310},[152,7381,3222],{"class":483},[152,7383,2848],{"class":476},[152,7385,7245],{"class":289},[152,7387,2848],{"class":476},[152,7389,2870],{"class":483},[152,7391,7392,7394,7397],{"class":281,"line":324},[152,7393,5732],{"class":476},[152,7395,7396],{"class":293}," 100",[152,7398,2965],{"class":483},[152,7400,7401],{"class":281,"line":329},[152,7402,3236],{"class":483},[152,7404,7405,7407,7409],{"class":281,"line":343},[152,7406,1822],{"class":476},[152,7408,3624],{"class":285},[152,7410,3627],{"class":483},[152,7412,7413],{"class":281,"line":348},[152,7414,3217],{"class":483},[152,7416,7417,7419,7421,7423,7426],{"class":281,"line":362},[152,7418,3636],{"class":476},[152,7420,6859],{"class":483},[152,7422,1864],{"class":476},[152,7424,7425],{"class":285},"test03",[152,7427,7278],{"class":483},[152,7429,7430,7432,7434,7436,7438,7440,7442,7444],{"class":281,"line":367},[152,7431,3222],{"class":483},[152,7433,2848],{"class":476},[152,7435,7049],{"class":289},[152,7437,2848],{"class":476},[152,7439,6884],{"class":483},[152,7441,2848],{"class":476},[152,7443,2913],{"class":483},[152,7445,7446],{"class":866}," \u002F\u002F100\n",[152,7448,7449],{"class":281,"line":381},[152,7450,3236],{"class":483},[19,7452,7453],{},"4.有参有返",[270,7455,7457],{"className":1807,"code":7456,"language":1809,"meta":275,"style":275},"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",[277,7458,7459,7474,7478,7491,7497,7501,7510,7514,7526,7540,7555],{"__ignoreMap":275},[152,7460,7461,7463,7466,7468,7470,7472],{"class":281,"line":282},[152,7462,1822],{"class":476},[152,7464,7465],{"class":285}," test04",[152,7467,1819],{"class":483},[152,7469,1822],{"class":476},[152,7471,3070],{"class":6858},[152,7473,1825],{"class":483},[152,7475,7476],{"class":281,"line":303},[152,7477,3217],{"class":483},[152,7479,7480,7482,7484,7487,7489],{"class":281,"line":310},[152,7481,3222],{"class":483},[152,7483,2848],{"class":476},[152,7485,7486],{"class":289},"\"hello\"",[152,7488,2848],{"class":476},[152,7490,2870],{"class":483},[152,7492,7493,7495],{"class":281,"line":324},[152,7494,5732],{"class":476},[152,7496,3104],{"class":483},[152,7498,7499],{"class":281,"line":329},[152,7500,3236],{"class":483},[152,7502,7503,7505,7508],{"class":281,"line":343},[152,7504,1822],{"class":476},[152,7506,7507],{"class":285}," mian",[152,7509,3627],{"class":483},[152,7511,7512],{"class":281,"line":348},[152,7513,3217],{"class":483},[152,7515,7516,7518,7520,7522,7524],{"class":281,"line":362},[152,7517,3636],{"class":476},[152,7519,4476],{"class":483},[152,7521,1864],{"class":476},[152,7523,2026],{"class":293},[152,7525,2965],{"class":483},[152,7527,7528,7530,7532,7534,7537],{"class":281,"line":367},[152,7529,3636],{"class":476},[152,7531,4492],{"class":483},[152,7533,1864],{"class":476},[152,7535,7536],{"class":285},"test04",[152,7538,7539],{"class":483},"(b);\n",[152,7541,7542,7544,7546,7548,7550,7552],{"class":281,"line":381},[152,7543,3222],{"class":483},[152,7545,2848],{"class":476},[152,7547,2096],{"class":483},[152,7549,2848],{"class":476},[152,7551,2913],{"class":483},[152,7553,7554],{"class":866}," \u002F\u002F1\n",[152,7556,7557],{"class":281,"line":386},[152,7558,3236],{"class":483},[1760,7560,7562],{"id":7561},"_25函数的声明","2.5函数的声明",[19,7564,7565],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7567,7568,7569],{},"函数的",[694,7570,7571],{},"声明可以多次，但是函数的定义只能有一次",[270,7573,7575],{"className":1807,"code":7574,"language":1809,"meta":275,"style":275},"\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",[277,7576,7577,7582,7587,7612,7621,7625,7637,7649,7665,7669,7689,7693,7712],{"__ignoreMap":275},[152,7578,7579],{"class":281,"line":282},[152,7580,7581],{"class":866},"\u002F\u002F函数声明\n",[152,7583,7584],{"class":281,"line":303},[152,7585,7586],{"class":866},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[152,7588,7589,7591,7594,7596,7598,7600,7602,7604,7606,7609],{"class":281,"line":310},[152,7590,1822],{"class":476},[152,7592,7593],{"class":285}," max",[152,7595,1819],{"class":483},[152,7597,1822],{"class":476},[152,7599,3070],{"class":6858},[152,7601,2186],{"class":483},[152,7603,1822],{"class":476},[152,7605,4476],{"class":6858},[152,7607,7608],{"class":483},");",[152,7610,7611],{"class":866},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[152,7613,7614,7616,7618],{"class":281,"line":324},[152,7615,1822],{"class":476},[152,7617,3624],{"class":285},[152,7619,7620],{"class":483},"() \n",[152,7622,7623],{"class":281,"line":329},[152,7624,3217],{"class":483},[152,7626,7627,7629,7631,7633,7635],{"class":281,"line":343},[152,7628,3636],{"class":476},[152,7630,3070],{"class":483},[152,7632,1864],{"class":476},[152,7634,2254],{"class":293},[152,7636,2965],{"class":483},[152,7638,7639,7641,7643,7645,7647],{"class":281,"line":348},[152,7640,3636],{"class":476},[152,7642,4476],{"class":483},[152,7644,1864],{"class":476},[152,7646,2508],{"class":293},[152,7648,2965],{"class":483},[152,7650,7651,7653,7655,7658,7661,7663],{"class":281,"line":362},[152,7652,3222],{"class":483},[152,7654,2848],{"class":476},[152,7656,7657],{"class":285},"max",[152,7659,7660],{"class":483},"(a,b)",[152,7662,2848],{"class":476},[152,7664,2870],{"class":483},[152,7666,7667],{"class":281,"line":367},[152,7668,3236],{"class":483},[152,7670,7671,7673,7675,7677,7679,7681,7683,7685,7687],{"class":281,"line":381},[152,7672,1822],{"class":476},[152,7674,7593],{"class":285},[152,7676,1819],{"class":483},[152,7678,1822],{"class":476},[152,7680,3070],{"class":6858},[152,7682,2186],{"class":483},[152,7684,1822],{"class":476},[152,7686,4476],{"class":6858},[152,7688,1825],{"class":483},[152,7690,7691],{"class":281,"line":386},[152,7692,3217],{"class":483},[152,7694,7695,7697,7699,7701,7703,7705,7707,7709],{"class":281,"line":932},[152,7696,5732],{"class":476},[152,7698,3070],{"class":483},[152,7700,487],{"class":476},[152,7702,2071],{"class":483},[152,7704,2791],{"class":476},[152,7706,69],{"class":483},[152,7708,841],{"class":476},[152,7710,7711],{"class":483},"b;\n",[152,7713,7714],{"class":281,"line":942},[152,7715,3236],{"class":483},[1760,7717,7719],{"id":7718},"_26函数的分文件编写","2.6函数的分文件编写",[19,7721,7722],{},"4个步骤：",[698,7724,7725,7728,7731,7734],{},[419,7726,7727],{},"1.创建后缀名为.h的头文件",[419,7729,7730],{},"2.创建后缀名为.cpp的源文件",[419,7732,7733],{},"3.在头文件中写函数的定义",[419,7735,7736],{},"4.在源文件中写函数的定义\n示例：",[19,7738,7739],{},"头文件：swap.h",[270,7741,7743],{"className":1807,"code":7742,"language":1809,"meta":275,"style":275},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[277,7744,7745,7751,7761,7765],{"__ignoreMap":275},[152,7746,7747,7749],{"class":281,"line":282},[152,7748,3601],{"class":476},[152,7750,3604],{"class":289},[152,7752,7753,7755,7757,7759],{"class":281,"line":303},[152,7754,3609],{"class":476},[152,7756,3612],{"class":476},[152,7758,3615],{"class":285},[152,7760,2965],{"class":483},[152,7762,7763],{"class":281,"line":310},[152,7764,7581],{"class":866},[152,7766,7767,7769,7771,7773,7775,7777,7779,7781,7783],{"class":281,"line":324},[152,7768,7006],{"class":476},[152,7770,7009],{"class":285},[152,7772,1819],{"class":483},[152,7774,1822],{"class":476},[152,7776,3070],{"class":6858},[152,7778,2186],{"class":483},[152,7780,1822],{"class":476},[152,7782,4476],{"class":6858},[152,7784,4362],{"class":483},[19,7786,7787],{},"源文件：swap.cpp",[270,7789,7791],{"className":1807,"code":7790,"language":1809,"meta":275,"style":275},"#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",[277,7792,7793,7800,7805,7825,7829,7840,7849,7858,7875,7892],{"__ignoreMap":275},[152,7794,7795,7797],{"class":281,"line":282},[152,7796,3601],{"class":476},[152,7798,7799],{"class":289}," \"swap.h\"\n",[152,7801,7802],{"class":281,"line":303},[152,7803,7804],{"class":866},"\u002F\u002F函数的定义\n",[152,7806,7807,7809,7811,7813,7815,7817,7819,7821,7823],{"class":281,"line":310},[152,7808,7006],{"class":476},[152,7810,7009],{"class":285},[152,7812,1819],{"class":483},[152,7814,1822],{"class":476},[152,7816,3070],{"class":6858},[152,7818,2186],{"class":483},[152,7820,1822],{"class":476},[152,7822,4476],{"class":6858},[152,7824,1825],{"class":483},[152,7826,7827],{"class":281,"line":324},[152,7828,3217],{"class":483},[152,7830,7831,7833,7835,7837],{"class":281,"line":329},[152,7832,3636],{"class":476},[152,7834,5897],{"class":483},[152,7836,1864],{"class":476},[152,7838,7839],{"class":483},"a;\n",[152,7841,7842,7845,7847],{"class":281,"line":343},[152,7843,7844],{"class":483},"    a",[152,7846,1864],{"class":476},[152,7848,7711],{"class":483},[152,7850,7851,7854,7856],{"class":281,"line":348},[152,7852,7853],{"class":483},"    b",[152,7855,1864],{"class":476},[152,7857,5922],{"class":483},[152,7859,7860,7862,7864,7867,7869,7871,7873],{"class":281,"line":362},[152,7861,3222],{"class":483},[152,7863,2848],{"class":476},[152,7865,7866],{"class":289},"\"a=\"",[152,7868,2848],{"class":476},[152,7870,69],{"class":483},[152,7872,2848],{"class":476},[152,7874,2870],{"class":483},[152,7876,7877,7879,7881,7884,7886,7888,7890],{"class":281,"line":367},[152,7878,3222],{"class":483},[152,7880,2848],{"class":476},[152,7882,7883],{"class":289},"\"b=\"",[152,7885,2848],{"class":476},[152,7887,2071],{"class":483},[152,7889,2848],{"class":476},[152,7891,2870],{"class":483},[152,7893,7894],{"class":281,"line":381},[152,7895,3236],{"class":483},[1736,7897,7898],{},"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":275,"searchDepth":303,"depth":303,"links":7900},[7901,7902,7903,7904,7905,7906],{"id":6814,"depth":303,"text":6815},{"id":6903,"depth":303,"text":6904},{"id":6986,"depth":303,"text":6987},{"id":7212,"depth":303,"text":7213},{"id":7561,"depth":303,"text":7562},{"id":7718,"depth":303,"text":7719},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6806,"description":275},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7913,"title":7914,"body":7915,"description":7922,"extension":1744,"meta":9327,"navigation":306,"path":9328,"seo":9329,"stem":9330,"__hash__":9331},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7916,"toc":9317},[7917,7920,7923,7927,8089,8093,8096,8099,8102,8105,8245,8249,8252,8255,8258,8323,8327,8332,8399,8402,8406,8409,8420,8425,8445,8448,8453,8472,8475,8479,8498,8501,8505,8740,8744,8747,8750,8753,8915,8918,8922,8925,8931,9314],[10,7918,7914],{"id":7919},"_3指针",[19,7921,7922],{},"通过指针保存一个地址，指针就是个地址",[1760,7924,7926],{"id":7925},"_31定义指针","3.1定义指针",[270,7928,7930],{"className":1807,"code":7929,"language":1809,"meta":275,"style":275},"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",[277,7931,7932,7940,7944,7949,7961,7966,7974,7984,8002,8022,8026,8031,8036,8041,8055,8071,8085],{"__ignoreMap":275},[152,7933,7934,7936,7938],{"class":281,"line":282},[152,7935,1822],{"class":476},[152,7937,3624],{"class":285},[152,7939,3627],{"class":483},[152,7941,7942],{"class":281,"line":303},[152,7943,3217],{"class":483},[152,7945,7946],{"class":281,"line":310},[152,7947,7948],{"class":866},"    \u002F\u002F1.定义指针\n",[152,7950,7951,7953,7955,7957,7959],{"class":281,"line":324},[152,7952,3636],{"class":476},[152,7954,3070],{"class":483},[152,7956,1864],{"class":476},[152,7958,2254],{"class":293},[152,7960,2965],{"class":483},[152,7962,7963],{"class":281,"line":329},[152,7964,7965],{"class":866},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[152,7967,7968,7971],{"class":281,"line":343},[152,7969,7970],{"class":476},"    int*",[152,7972,7973],{"class":483},"p;\n",[152,7975,7976,7979,7982],{"class":281,"line":348},[152,7977,7978],{"class":483},"    p",[152,7980,7981],{"class":476},"=&",[152,7983,7839],{"class":483},[152,7985,7986,7988,7990,7993,7996,7998,8000],{"class":281,"line":362},[152,7987,3222],{"class":483},[152,7989,2848],{"class":476},[152,7991,7992],{"class":289},"\"a的地址为：\"",[152,7994,7995],{"class":476},"\u003C\u003C&",[152,7997,69],{"class":483},[152,7999,2848],{"class":476},[152,8001,2870],{"class":483},[152,8003,8004,8006,8008,8011,8013,8015,8017,8019],{"class":281,"line":367},[152,8005,3222],{"class":483},[152,8007,2848],{"class":476},[152,8009,8010],{"class":289},"\"指针p为：\"",[152,8012,2848],{"class":476},[152,8014,19],{"class":483},[152,8016,2848],{"class":476},[152,8018,2913],{"class":483},[152,8020,8021],{"class":866},"\u002F\u002F指针p表示的就是a的地址\n",[152,8023,8024],{"class":281,"line":381},[152,8025,307],{"emptyLinePlaceholder":306},[152,8027,8028],{"class":281,"line":386},[152,8029,8030],{"class":866},"    \u002F\u002F2.使用指针\n",[152,8032,8033],{"class":281,"line":932},[152,8034,8035],{"class":866},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[152,8037,8038],{"class":281,"line":942},[152,8039,8040],{"class":866},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[152,8042,8043,8046,8048,8050,8053],{"class":281,"line":949},[152,8044,8045],{"class":476},"    *",[152,8047,19],{"class":483},[152,8049,1864],{"class":476},[152,8051,8052],{"class":293},"1000",[152,8054,2965],{"class":483},[152,8056,8057,8059,8062,8064,8066,8068],{"class":281,"line":954},[152,8058,3222],{"class":483},[152,8060,8061],{"class":476},"\u003C\u003C*",[152,8063,19],{"class":483},[152,8065,2848],{"class":476},[152,8067,2913],{"class":483},[152,8069,8070],{"class":866},"\u002F\u002F1000\n",[152,8072,8073,8075,8077,8079,8081,8083],{"class":281,"line":959},[152,8074,3222],{"class":483},[152,8076,2848],{"class":476},[152,8078,69],{"class":483},[152,8080,2848],{"class":476},[152,8082,2913],{"class":483},[152,8084,8070],{"class":866},[152,8086,8087],{"class":281,"line":970},[152,8088,3236],{"class":483},[1760,8090,8092],{"id":8091},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8094,8095],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8097,8098],{},"在32位操作系统下：占用4个字节空间",[19,8100,8101],{},"在64位操作系统下：占用8个字节空间",[19,8103,8104],{},"上方是不管啥数据类型的",[270,8106,8108],{"className":1807,"code":8107,"language":1809,"meta":275,"style":275},"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",[277,8109,8110,8118,8122,8127,8139,8144,8149,8154,8167,8189,8215,8241],{"__ignoreMap":275},[152,8111,8112,8114,8116],{"class":281,"line":282},[152,8113,1822],{"class":476},[152,8115,3624],{"class":285},[152,8117,3627],{"class":483},[152,8119,8120],{"class":281,"line":303},[152,8121,3217],{"class":483},[152,8123,8124],{"class":281,"line":310},[152,8125,8126],{"class":866},"    \u002F\u002F指针所占内存空间\n",[152,8128,8129,8131,8133,8135,8137],{"class":281,"line":324},[152,8130,3636],{"class":476},[152,8132,3070],{"class":483},[152,8134,1864],{"class":476},[152,8136,2254],{"class":293},[152,8138,2965],{"class":483},[152,8140,8141],{"class":281,"line":329},[152,8142,8143],{"class":866},"    \u002F\u002Fint *p;\n",[152,8145,8146],{"class":281,"line":343},[152,8147,8148],{"class":866},"    \u002F\u002Fp=&a;\n",[152,8150,8151],{"class":281,"line":348},[152,8152,8153],{"class":866},"    \u002F\u002F上述可以写为以下：\n",[152,8155,8156,8158,8161,8163,8165],{"class":281,"line":362},[152,8157,3636],{"class":476},[152,8159,8160],{"class":476}," *",[152,8162,19],{"class":483},[152,8164,7981],{"class":476},[152,8166,7839],{"class":483},[152,8168,8169,8172,8174,8177,8179,8182,8184,8186],{"class":281,"line":367},[152,8170,8171],{"class":483},"    cout ",[152,8173,2848],{"class":476},[152,8175,8176],{"class":289},"\"sizeof(int *)\"",[152,8178,3044],{"class":476},[152,8180,8181],{"class":483},"(p)",[152,8183,2848],{"class":476},[152,8185,2913],{"class":483},[152,8187,8188],{"class":866},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[152,8190,8191,8193,8195,8197,8199,8201,8203,8205,8207,8209,8212],{"class":281,"line":381},[152,8192,8171],{"class":483},[152,8194,2848],{"class":476},[152,8196,8176],{"class":289},[152,8198,3044],{"class":476},[152,8200,1819],{"class":483},[152,8202,1822],{"class":476},[152,8204,8160],{"class":476},[152,8206,2237],{"class":483},[152,8208,2848],{"class":476},[152,8210,8211],{"class":483},"endl",[152,8213,8214],{"class":866},"  \u002F\u002F4字节(32位的话)\n",[152,8216,8217,8219,8221,8224,8226,8228,8230,8232,8234,8236,8238],{"class":281,"line":386},[152,8218,8171],{"class":483},[152,8220,2848],{"class":476},[152,8222,8223],{"class":289},"\"sizeof(char *)\"",[152,8225,3044],{"class":476},[152,8227,1819],{"class":483},[152,8229,1913],{"class":476},[152,8231,8160],{"class":476},[152,8233,2237],{"class":483},[152,8235,2848],{"class":476},[152,8237,2913],{"class":483},[152,8239,8240],{"class":866}," \u002F\u002F4字节(32位的话)\n",[152,8242,8243],{"class":281,"line":932},[152,8244,3236],{"class":483},[1760,8246,8248],{"id":8247},"_33空指针","3.3空指针",[19,8250,8251],{},"空指针：指针变量指向内存中编号为0的空间",[19,8253,8254],{},"用途：初始化指针变量",[19,8256,8257],{},"注意：空指针指向的内存是不可以访问的",[270,8259,8261],{"className":1807,"code":8260,"language":1809,"meta":275,"style":275},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[277,8262,8263,8271,8275,8280,8294,8299,8314,8319],{"__ignoreMap":275},[152,8264,8265,8267,8269],{"class":281,"line":282},[152,8266,1822],{"class":476},[152,8268,3624],{"class":285},[152,8270,3627],{"class":483},[152,8272,8273],{"class":281,"line":303},[152,8274,3217],{"class":483},[152,8276,8277],{"class":281,"line":310},[152,8278,8279],{"class":866},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[152,8281,8282,8284,8286,8288,8290,8292],{"class":281,"line":324},[152,8283,3636],{"class":476},[152,8285,8160],{"class":476},[152,8287,19],{"class":483},[152,8289,1864],{"class":476},[152,8291,4043],{"class":293},[152,8293,2965],{"class":483},[152,8295,8296],{"class":281,"line":329},[152,8297,8298],{"class":866},"    \u002F\u002F2.空指针不能进行访问\n",[152,8300,8301,8303,8305,8307,8309,8311],{"class":281,"line":343},[152,8302,8045],{"class":476},[152,8304,19],{"class":483},[152,8306,1864],{"class":476},[152,8308,2119],{"class":293},[152,8310,1873],{"class":483},[152,8312,8313],{"class":866},"\u002F\u002F直接报错，压根不能访问\n",[152,8315,8316],{"class":281,"line":348},[152,8317,8318],{"class":866},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[152,8320,8321],{"class":281,"line":362},[152,8322,3236],{"class":483},[1760,8324,8326],{"id":8325},"_34野指针","3.4野指针",[19,8328,8329],{},[694,8330,8331],{},"指针变量指向非法的内存空间",[270,8333,8335],{"className":1807,"code":8334,"language":1809,"meta":275,"style":275},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[277,8336,8337,8345,8349,8378,8383,8395],{"__ignoreMap":275},[152,8338,8339,8341,8343],{"class":281,"line":282},[152,8340,1822],{"class":476},[152,8342,3624],{"class":285},[152,8344,3627],{"class":483},[152,8346,8347],{"class":281,"line":303},[152,8348,3217],{"class":483},[152,8350,8351,8353,8355,8357,8359,8361,8363,8365,8367,8370,8373,8375],{"class":281,"line":310},[152,8352,3636],{"class":476},[152,8354,8160],{"class":476},[152,8356,19],{"class":483},[152,8358,1864],{"class":476},[152,8360,1819],{"class":483},[152,8362,1822],{"class":476},[152,8364,8160],{"class":476},[152,8366,2237],{"class":483},[152,8368,8369],{"class":476},"0x",[152,8371,8372],{"class":293},"1100",[152,8374,1873],{"class":483},[152,8376,8377],{"class":866}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[152,8379,8380],{"class":281,"line":324},[152,8381,8382],{"class":866},"    \u002F\u002F访问野指针报错\n",[152,8384,8385,8387,8389,8391,8393],{"class":281,"line":329},[152,8386,3222],{"class":483},[152,8388,8061],{"class":476},[152,8390,19],{"class":483},[152,8392,2848],{"class":476},[152,8394,2870],{"class":483},[152,8396,8397],{"class":281,"line":343},[152,8398,3236],{"class":483},[19,8400,8401],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[1760,8403,8405],{"id":8404},"_35const修饰指针","3.5const修饰指针",[19,8407,8408],{},"三种情况：",[698,8410,8411,8414,8417],{},[419,8412,8413],{},"const修饰指针 常量指针",[419,8415,8416],{},"const修饰常量 指针常量",[419,8418,8419],{},"const即修饰指针，又修饰常量",[416,8421,8422],{},[419,8423,8424],{},"常量指针",[270,8426,8428],{"className":1807,"code":8427,"language":1809,"meta":275,"style":275},"const int *p=&a;\n",[277,8429,8430],{"__ignoreMap":275},[152,8431,8432,8435,8437,8439,8441,8443],{"class":281,"line":282},[152,8433,8434],{"class":476},"const",[152,8436,4033],{"class":476},[152,8438,8160],{"class":476},[152,8440,19],{"class":483},[152,8442,7981],{"class":476},[152,8444,7839],{"class":483},[19,8446,8447],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[416,8449,8450],{"start":303},[419,8451,8452],{},"指针常量",[270,8454,8456],{"className":1807,"code":8455,"language":1809,"meta":275,"style":275},"int *const p=&a;\n",[277,8457,8458],{"__ignoreMap":275},[152,8459,8460,8462,8465,8468,8470],{"class":281,"line":282},[152,8461,1822],{"class":476},[152,8463,8464],{"class":476}," *const",[152,8466,8467],{"class":483}," p",[152,8469,7981],{"class":476},[152,8471,7839],{"class":483},[19,8473,8474],{},"指针的指向不可以改，指针指向的值可以改",[416,8476,8477],{"start":310},[419,8478,8419],{},[270,8480,8482],{"className":1807,"code":8481,"language":1809,"meta":275,"style":275},"const int *const p=&a;\n",[277,8483,8484],{"__ignoreMap":275},[152,8485,8486,8488,8490,8492,8494,8496],{"class":281,"line":282},[152,8487,8434],{"class":476},[152,8489,4033],{"class":476},[152,8491,8464],{"class":476},[152,8493,8467],{"class":483},[152,8495,7981],{"class":476},[152,8497,7839],{"class":483},[19,8499,8500],{},"指针的指向和指针指向的值都不可以改变",[1760,8502,8504],{"id":8503},"_36指针和数组","3.6指针和数组",[270,8506,8508],{"className":1807,"code":8507,"language":1809,"meta":275,"style":275},"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",[277,8509,8510,8518,8522,8527,8581,8602,8618,8634,8645,8662,8667,8681,8707,8711,8723,8732,8736],{"__ignoreMap":275},[152,8511,8512,8514,8516],{"class":281,"line":282},[152,8513,1822],{"class":476},[152,8515,3624],{"class":285},[152,8517,3627],{"class":483},[152,8519,8520],{"class":281,"line":303},[152,8521,3217],{"class":483},[152,8523,8524],{"class":281,"line":310},[152,8525,8526],{"class":866},"    \u002F\u002F利用指针访问数组中的元素\n",[152,8528,8529,8531,8533,8535,8537,8539,8541,8543,8545,8547,8549,8551,8553,8555,8557,8559,8561,8563,8565,8567,8569,8571,8573,8575,8577,8579],{"class":281,"line":324},[152,8530,3636],{"class":476},[152,8532,5604],{"class":483},[152,8534,2254],{"class":293},[152,8536,2746],{"class":483},[152,8538,1864],{"class":476},[152,8540,2703],{"class":483},[152,8542,2026],{"class":293},[152,8544,2186],{"class":483},[152,8546,1894],{"class":293},[152,8548,2186],{"class":483},[152,8550,1888],{"class":293},[152,8552,2186],{"class":483},[152,8554,2101],{"class":293},[152,8556,2186],{"class":483},[152,8558,2127],{"class":293},[152,8560,2186],{"class":483},[152,8562,2152],{"class":293},[152,8564,2186],{"class":483},[152,8566,2177],{"class":293},[152,8568,2186],{"class":483},[152,8570,2203],{"class":293},[152,8572,2186],{"class":483},[152,8574,2228],{"class":293},[152,8576,2186],{"class":483},[152,8578,2254],{"class":293},[152,8580,5637],{"class":483},[152,8582,8583,8585,8587,8590,8592,8594,8596,8598,8600],{"class":281,"line":329},[152,8584,3222],{"class":483},[152,8586,2848],{"class":476},[152,8588,8589],{"class":289},"\"数组的第一个元素为：\"",[152,8591,2848],{"class":476},[152,8593,5548],{"class":483},[152,8595,2000],{"class":293},[152,8597,2746],{"class":483},[152,8599,2848],{"class":476},[152,8601,2870],{"class":483},[152,8603,8604,8606,8608,8610,8612,8615],{"class":281,"line":343},[152,8605,3636],{"class":476},[152,8607,8160],{"class":476},[152,8609,19],{"class":483},[152,8611,1864],{"class":476},[152,8613,8614],{"class":483},"arr;",[152,8616,8617],{"class":866},"\u002F\u002F注意数才要加取地址符号&\n",[152,8619,8620,8622,8624,8626,8628,8630,8632],{"class":281,"line":348},[152,8621,3222],{"class":483},[152,8623,2848],{"class":476},[152,8625,8589],{"class":289},[152,8627,8061],{"class":476},[152,8629,19],{"class":483},[152,8631,2848],{"class":476},[152,8633,2870],{"class":483},[152,8635,8636,8638,8640,8642],{"class":281,"line":362},[152,8637,7978],{"class":483},[152,8639,3943],{"class":476},[152,8641,1873],{"class":483},[152,8643,8644],{"class":866}," \u002F\u002F让指针向后偏移4个字节\n",[152,8646,8647,8649,8651,8654,8656,8658,8660],{"class":281,"line":367},[152,8648,3222],{"class":483},[152,8650,2848],{"class":476},[152,8652,8653],{"class":289},"\"数组的第二个元素为：\"",[152,8655,8061],{"class":476},[152,8657,19],{"class":483},[152,8659,2848],{"class":476},[152,8661,2870],{"class":483},[152,8663,8664],{"class":281,"line":381},[152,8665,8666],{"class":866},"    \u002F\u002F利用指针遍历数组\n",[152,8668,8669,8671,8673,8676,8678],{"class":281,"line":386},[152,8670,3636],{"class":476},[152,8672,8160],{"class":476},[152,8674,8675],{"class":483},"p2",[152,8677,1864],{"class":476},[152,8679,8680],{"class":483},"arr;\n",[152,8682,8683,8685,8687,8689,8691,8693,8695,8697,8699,8701,8703,8705],{"class":281,"line":932},[152,8684,4844],{"class":476},[152,8686,3322],{"class":483},[152,8688,1822],{"class":476},[152,8690,4675],{"class":483},[152,8692,1864],{"class":476},[152,8694,2000],{"class":293},[152,8696,4682],{"class":483},[152,8698,844],{"class":476},[152,8700,2254],{"class":293},[152,8702,4682],{"class":483},[152,8704,3943],{"class":476},[152,8706,1825],{"class":483},[152,8708,8709],{"class":281,"line":942},[152,8710,3681],{"class":483},[152,8712,8713,8715,8717,8719,8721],{"class":281,"line":949},[152,8714,5094],{"class":483},[152,8716,8061],{"class":476},[152,8718,8675],{"class":483},[152,8720,2848],{"class":476},[152,8722,2870],{"class":483},[152,8724,8725,8728,8730],{"class":281,"line":954},[152,8726,8727],{"class":483},"        p2",[152,8729,3943],{"class":476},[152,8731,2965],{"class":483},[152,8733,8734],{"class":281,"line":959},[152,8735,3838],{"class":483},[152,8737,8738],{"class":281,"line":970},[152,8739,3236],{"class":483},[1760,8741,8743],{"id":8742},"_37指针和函数","3.7指针和函数",[19,8745,8746],{},"利用指针做函数参数，可以修改实参的值",[19,8748,8749],{},"值传递：只改变形参，不改变实参",[19,8751,8752],{},"地址传递：",[270,8754,8756],{"className":1807,"code":8755,"language":1809,"meta":275,"style":275},"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",[277,8757,8758,8783,8787,8799,8810,8820,8824,8832,8836,8848,8860,8865,8881,8896,8911],{"__ignoreMap":275},[152,8759,8760,8762,8764,8766,8768,8770,8773,8775,8777,8779,8781],{"class":281,"line":282},[152,8761,7006],{"class":476},[152,8763,7009],{"class":285},[152,8765,1819],{"class":483},[152,8767,1822],{"class":476},[152,8769,8160],{"class":476},[152,8771,8772],{"class":6858},"p1",[152,8774,2186],{"class":483},[152,8776,1822],{"class":476},[152,8778,8160],{"class":476},[152,8780,8675],{"class":6858},[152,8782,1825],{"class":483},[152,8784,8785],{"class":281,"line":303},[152,8786,3217],{"class":483},[152,8788,8789,8791,8793,8796],{"class":281,"line":310},[152,8790,3636],{"class":476},[152,8792,5897],{"class":483},[152,8794,8795],{"class":476},"=*",[152,8797,8798],{"class":483},"p1;\n",[152,8800,8801,8803,8805,8807],{"class":281,"line":324},[152,8802,8045],{"class":476},[152,8804,8772],{"class":483},[152,8806,8795],{"class":476},[152,8808,8809],{"class":483},"p2;\n",[152,8811,8812,8814,8816,8818],{"class":281,"line":329},[152,8813,8045],{"class":476},[152,8815,8675],{"class":483},[152,8817,1864],{"class":476},[152,8819,5922],{"class":483},[152,8821,8822],{"class":281,"line":343},[152,8823,3236],{"class":483},[152,8825,8826,8828,8830],{"class":281,"line":348},[152,8827,1822],{"class":476},[152,8829,3624],{"class":285},[152,8831,3627],{"class":483},[152,8833,8834],{"class":281,"line":362},[152,8835,3217],{"class":483},[152,8837,8838,8840,8842,8844,8846],{"class":281,"line":367},[152,8839,3636],{"class":476},[152,8841,3070],{"class":483},[152,8843,1864],{"class":476},[152,8845,2254],{"class":293},[152,8847,2965],{"class":483},[152,8849,8850,8852,8854,8856,8858],{"class":281,"line":381},[152,8851,3636],{"class":476},[152,8853,4476],{"class":483},[152,8855,1864],{"class":476},[152,8857,2508],{"class":293},[152,8859,2965],{"class":483},[152,8861,8862],{"class":281,"line":386},[152,8863,8864],{"class":866},"    \u002F\u002F地址传递\n",[152,8866,8867,8869,8871,8873,8876,8878],{"class":281,"line":932},[152,8868,7203],{"class":285},[152,8870,1819],{"class":483},[152,8872,2161],{"class":476},[152,8874,8875],{"class":483},"a,",[152,8877,2161],{"class":476},[152,8879,8880],{"class":483},"b);\n",[152,8882,8883,8885,8887,8889,8891,8893],{"class":281,"line":942},[152,8884,3222],{"class":483},[152,8886,2848],{"class":476},[152,8888,69],{"class":483},[152,8890,2848],{"class":476},[152,8892,2913],{"class":483},[152,8894,8895],{"class":866},"\u002F\u002F20\n",[152,8897,8898,8900,8902,8904,8906,8908],{"class":281,"line":949},[152,8899,3222],{"class":483},[152,8901,2848],{"class":476},[152,8903,2071],{"class":483},[152,8905,2848],{"class":476},[152,8907,2913],{"class":483},[152,8909,8910],{"class":866},"\u002F\u002F10\n",[152,8912,8913],{"class":281,"line":954},[152,8914,3236],{"class":483},[19,8916,8917],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[1760,8919,8921],{"id":8920},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8923,8924],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8926,8927,8928,8930],{},"例如数组：int arr",[152,8929,2254],{},"={4,3,6,9,1,2,10,8,7,5}",[270,8932,8934],{"className":1807,"code":8933,"language":1809,"meta":275,"style":275},"#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",[277,8935,8936,8942,8952,8976,8980,9011,9015,9049,9053,9071,9075,9086,9101,9116,9120,9124,9128,9132,9136,9144,9148,9153,9207,9219,9231,9236,9244,9248,9253,9278,9282,9297,9306,9310],{"__ignoreMap":275},[152,8937,8938,8940],{"class":281,"line":282},[152,8939,3601],{"class":476},[152,8941,3604],{"class":289},[152,8943,8944,8946,8948,8950],{"class":281,"line":303},[152,8945,3609],{"class":476},[152,8947,3612],{"class":476},[152,8949,3615],{"class":285},[152,8951,2965],{"class":483},[152,8953,8954,8956,8959,8961,8963,8965,8967,8969,8971,8974],{"class":281,"line":310},[152,8955,7006],{"class":476},[152,8957,8958],{"class":285}," bubbleSort",[152,8960,1819],{"class":483},[152,8962,1822],{"class":476},[152,8964,8160],{"class":476},[152,8966,19],{"class":6858},[152,8968,2186],{"class":483},[152,8970,1822],{"class":476},[152,8972,8973],{"class":6858}," len",[152,8975,1825],{"class":483},[152,8977,8978],{"class":281,"line":324},[152,8979,3217],{"class":483},[152,8981,8982,8984,8986,8988,8990,8992,8994,8996,8998,9001,9003,9005,9007,9009],{"class":281,"line":329},[152,8983,4844],{"class":476},[152,8985,1819],{"class":483},[152,8987,1822],{"class":476},[152,8989,4675],{"class":483},[152,8991,1864],{"class":476},[152,8993,2000],{"class":293},[152,8995,4682],{"class":483},[152,8997,844],{"class":476},[152,8999,9000],{"class":483},"len",[152,9002,2340],{"class":476},[152,9004,2026],{"class":293},[152,9006,4682],{"class":483},[152,9008,3943],{"class":476},[152,9010,1825],{"class":483},[152,9012,9013],{"class":281,"line":343},[152,9014,3681],{"class":483},[152,9016,9017,9019,9021,9023,9025,9027,9029,9031,9033,9035,9037,9039,9041,9043,9045,9047],{"class":281,"line":348},[152,9018,5046],{"class":476},[152,9020,1819],{"class":483},[152,9022,1822],{"class":476},[152,9024,5053],{"class":483},[152,9026,1864],{"class":476},[152,9028,2000],{"class":293},[152,9030,5060],{"class":483},[152,9032,844],{"class":476},[152,9034,9000],{"class":483},[152,9036,2340],{"class":476},[152,9038,2249],{"class":483},[152,9040,2340],{"class":476},[152,9042,2026],{"class":293},[152,9044,5060],{"class":483},[152,9046,3943],{"class":476},[152,9048,1825],{"class":483},[152,9050,9051],{"class":281,"line":362},[152,9052,4160],{"class":483},[152,9054,9055,9057,9060,9062,9065,9067,9069],{"class":281,"line":367},[152,9056,6284],{"class":476},[152,9058,9059],{"class":483},"(p[j]",[152,9061,487],{"class":476},[152,9063,9064],{"class":483},"p[j",[152,9066,2289],{"class":476},[152,9068,2026],{"class":293},[152,9070,6299],{"class":483},[152,9072,9073],{"class":281,"line":381},[152,9074,6304],{"class":483},[152,9076,9077,9079,9081,9083],{"class":281,"line":386},[152,9078,6309],{"class":476},[152,9080,5897],{"class":483},[152,9082,1864],{"class":476},[152,9084,9085],{"class":483},"p[j];\n",[152,9087,9088,9091,9093,9095,9097,9099],{"class":281,"line":932},[152,9089,9090],{"class":483},"                p[j]",[152,9092,1864],{"class":476},[152,9094,9064],{"class":483},[152,9096,2289],{"class":476},[152,9098,2026],{"class":293},[152,9100,6332],{"class":483},[152,9102,9103,9106,9108,9110,9112,9114],{"class":281,"line":942},[152,9104,9105],{"class":483},"                p[j",[152,9107,2289],{"class":476},[152,9109,2026],{"class":293},[152,9111,2746],{"class":483},[152,9113,1864],{"class":476},[152,9115,5922],{"class":483},[152,9117,9118],{"class":281,"line":949},[152,9119,6352],{"class":483},[152,9121,9122],{"class":281,"line":954},[152,9123,4179],{"class":483},[152,9125,9126],{"class":281,"line":959},[152,9127,3838],{"class":483},[152,9129,9130],{"class":281,"line":970},[152,9131,3236],{"class":483},[152,9133,9134],{"class":281,"line":979},[152,9135,307],{"emptyLinePlaceholder":306},[152,9137,9138,9140,9142],{"class":281,"line":989},[152,9139,1822],{"class":476},[152,9141,3624],{"class":285},[152,9143,3627],{"class":483},[152,9145,9146],{"class":281,"line":996},[152,9147,3217],{"class":483},[152,9149,9150],{"class":281,"line":1001},[152,9151,9152],{"class":866},"    \u002F\u002F 1.创建数组\n",[152,9154,9155,9157,9159,9161,9163,9165,9167,9169,9171,9173,9175,9177,9179,9181,9183,9185,9187,9189,9191,9193,9195,9197,9199,9201,9203,9205],{"class":281,"line":1006},[152,9156,3636],{"class":476},[152,9158,5604],{"class":483},[152,9160,2254],{"class":293},[152,9162,2746],{"class":483},[152,9164,1864],{"class":476},[152,9166,2703],{"class":483},[152,9168,2101],{"class":293},[152,9170,2186],{"class":483},[152,9172,1888],{"class":293},[152,9174,2186],{"class":483},[152,9176,2152],{"class":293},[152,9178,2186],{"class":483},[152,9180,2228],{"class":293},[152,9182,2186],{"class":483},[152,9184,2026],{"class":293},[152,9186,2186],{"class":483},[152,9188,1894],{"class":293},[152,9190,2186],{"class":483},[152,9192,2254],{"class":293},[152,9194,2186],{"class":483},[152,9196,2203],{"class":293},[152,9198,2186],{"class":483},[152,9200,2177],{"class":293},[152,9202,2186],{"class":483},[152,9204,2127],{"class":293},[152,9206,5637],{"class":483},[152,9208,9209,9211,9213,9215,9217],{"class":281,"line":1018},[152,9210,3636],{"class":476},[152,9212,8973],{"class":483},[152,9214,1864],{"class":476},[152,9216,2254],{"class":293},[152,9218,2965],{"class":483},[152,9220,9221,9223,9225,9227,9229],{"class":281,"line":1027},[152,9222,3636],{"class":476},[152,9224,8160],{"class":476},[152,9226,19],{"class":483},[152,9228,1864],{"class":476},[152,9230,8680],{"class":483},[152,9232,9233],{"class":281,"line":1037},[152,9234,9235],{"class":866},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[152,9237,9238,9241],{"class":281,"line":1044},[152,9239,9240],{"class":285},"    bubbleSort",[152,9242,9243],{"class":483},"(p,len);\n",[152,9245,9246],{"class":281,"line":1049},[152,9247,307],{"emptyLinePlaceholder":306},[152,9249,9250],{"class":281,"line":1054},[152,9251,9252],{"class":866},"    \u002F\u002F 3.打印排序后的数组\n",[152,9254,9255,9257,9259,9261,9263,9265,9267,9269,9271,9274,9276],{"class":281,"line":1065},[152,9256,4844],{"class":476},[152,9258,3322],{"class":483},[152,9260,1822],{"class":476},[152,9262,4675],{"class":483},[152,9264,1864],{"class":476},[152,9266,2000],{"class":293},[152,9268,4857],{"class":483},[152,9270,844],{"class":476},[152,9272,9273],{"class":483},"len; i",[152,9275,3943],{"class":476},[152,9277,1825],{"class":483},[152,9279,9280],{"class":281,"line":1074},[152,9281,3681],{"class":483},[152,9283,9284,9286,9288,9290,9292,9295],{"class":281,"line":1084},[152,9285,5094],{"class":483},[152,9287,8061],{"class":476},[152,9289,19],{"class":483},[152,9291,2848],{"class":476},[152,9293,9294],{"class":289},"\"\"",[152,9296,2965],{"class":483},[152,9298,9299,9302,9304],{"class":281,"line":1091},[152,9300,9301],{"class":483},"        p",[152,9303,3943],{"class":476},[152,9305,2965],{"class":483},[152,9307,9308],{"class":281,"line":1096},[152,9309,3838],{"class":483},[152,9311,9312],{"class":281,"line":1101},[152,9313,3236],{"class":483},[1736,9315,9316],{},"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":275,"searchDepth":303,"depth":303,"links":9318},[9319,9320,9321,9322,9323,9324,9325,9326],{"id":7925,"depth":303,"text":7926},{"id":8091,"depth":303,"text":8092},{"id":8247,"depth":303,"text":8248},{"id":8325,"depth":303,"text":8326},{"id":8404,"depth":303,"text":8405},{"id":8503,"depth":303,"text":8504},{"id":8742,"depth":303,"text":8743},{"id":8920,"depth":303,"text":8921},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7914,"description":7922},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9333,"title":9334,"body":9335,"description":9342,"extension":1744,"meta":12290,"navigation":306,"path":12291,"seo":12292,"stem":12293,"__hash__":12294},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9336,"toc":12281},[9337,9340,9343,9347,9350,9353,9364,9692,9695,9699,9702,9709,9964,9968,9971,9974,10129,10133,10136,10139,10345,10349,10352,10655,10658,10666,10670,10673,10824,10826,10837,10894,10898,10903,11544,11552,11555,11649,11652,12272,12278],[10,9338,9334],{"id":9339},"_4结构体",[19,9341,9342],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[1760,9344,9346],{"id":9345},"_41结构体定义与使用","4.1结构体定义与使用",[19,9348,9349],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9351,9352],{},"通过结构体创建变量的方式：",[698,9354,9355,9358,9361],{},[419,9356,9357],{},"struct 结构体名 变量名",[419,9359,9360],{},"struct 结构体名 变量名={成员1值，成员2值...}",[419,9362,9363],{},"定义结构体时顺便创建变量",[270,9365,9367],{"className":1807,"code":9366,"language":1809,"meta":275,"style":275},"#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",[277,9368,9369,9375,9385,9392,9397,9405,9409,9414,9418,9423,9428,9433,9440,9445,9452,9456,9463,9467,9471,9475,9479,9483,9487,9493,9497,9503,9511,9519,9523,9528,9533,9544,9549,9561,9572,9583,9588,9611,9615,9620,9646,9650,9655,9666,9677,9688],{"__ignoreMap":275},[152,9370,9371,9373],{"class":281,"line":282},[152,9372,3601],{"class":476},[152,9374,3604],{"class":289},[152,9376,9377,9379,9381,9383],{"class":281,"line":303},[152,9378,3609],{"class":476},[152,9380,3612],{"class":476},[152,9382,3615],{"class":285},[152,9384,2965],{"class":483},[152,9386,9387,9389],{"class":281,"line":310},[152,9388,3601],{"class":476},[152,9390,9391],{"class":289},"\u003Cstring>\n",[152,9393,9394],{"class":281,"line":324},[152,9395,9396],{"class":866},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[152,9398,9399,9402],{"class":281,"line":329},[152,9400,9401],{"class":476},"struct",[152,9403,9404],{"class":285}," Student\n",[152,9406,9407],{"class":281,"line":343},[152,9408,3217],{"class":483},[152,9410,9411],{"class":281,"line":348},[152,9412,9413],{"class":866},"    \u002F\u002F成员列表\n",[152,9415,9416],{"class":281,"line":362},[152,9417,307],{"emptyLinePlaceholder":306},[152,9419,9420],{"class":281,"line":367},[152,9421,9422],{"class":866},"    \u002F\u002F姓名\n",[152,9424,9425],{"class":281,"line":381},[152,9426,9427],{"class":483},"    string name;\n",[152,9429,9430],{"class":281,"line":386},[152,9431,9432],{"class":866},"    \u002F\u002F年龄\n",[152,9434,9435,9437],{"class":281,"line":932},[152,9436,3636],{"class":476},[152,9438,9439],{"class":483}," age;\n",[152,9441,9442],{"class":281,"line":942},[152,9443,9444],{"class":866},"    \u002F\u002F分数\n",[152,9446,9447,9449],{"class":281,"line":949},[152,9448,3636],{"class":476},[152,9450,9451],{"class":483}," score;\n",[152,9453,9454],{"class":281,"line":954},[152,9455,5637],{"class":483},[152,9457,9458,9460],{"class":281,"line":959},[152,9459,9401],{"class":476},[152,9461,9462],{"class":285}," School\n",[152,9464,9465],{"class":281,"line":970},[152,9466,3217],{"class":483},[152,9468,9469],{"class":281,"line":979},[152,9470,9413],{"class":866},[152,9472,9473],{"class":281,"line":989},[152,9474,307],{"emptyLinePlaceholder":306},[152,9476,9477],{"class":281,"line":996},[152,9478,9422],{"class":866},[152,9480,9481],{"class":281,"line":1001},[152,9482,9427],{"class":483},[152,9484,9485],{"class":281,"line":1006},[152,9486,9432],{"class":866},[152,9488,9489,9491],{"class":281,"line":1018},[152,9490,3636],{"class":476},[152,9492,9439],{"class":483},[152,9494,9495],{"class":281,"line":1027},[152,9496,9444],{"class":866},[152,9498,9499,9501],{"class":281,"line":1037},[152,9500,3636],{"class":476},[152,9502,9451],{"class":483},[152,9504,9505,9508],{"class":281,"line":1044},[152,9506,9507],{"class":483},"} s3;",[152,9509,9510],{"class":866}," \u002F\u002F创建结构体时就创建了变量\n",[152,9512,9513,9515,9517],{"class":281,"line":1049},[152,9514,1822],{"class":476},[152,9516,3624],{"class":285},[152,9518,3627],{"class":483},[152,9520,9521],{"class":281,"line":1054},[152,9522,3217],{"class":483},[152,9524,9525],{"class":281,"line":1065},[152,9526,9527],{"class":866},"    \u002F\u002F2.通过学生类型创建具体学生\n",[152,9529,9530],{"class":281,"line":1074},[152,9531,9532],{"class":866},"    \u002F\u002F2.1 struct Student s1;\n",[152,9534,9535,9538,9541],{"class":281,"line":1084},[152,9536,9537],{"class":476},"    struct",[152,9539,9540],{"class":285}," Student",[152,9542,9543],{"class":483}," s1;\n",[152,9545,9546],{"class":281,"line":1091},[152,9547,9548],{"class":866},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[152,9550,9551,9554,9556,9559],{"class":281,"line":1096},[152,9552,9553],{"class":483},"    s1.name",[152,9555,1864],{"class":476},[152,9557,9558],{"class":289},"\"张三\"",[152,9560,2965],{"class":483},[152,9562,9563,9566,9568,9570],{"class":281,"line":1101},[152,9564,9565],{"class":483},"    s1.age",[152,9567,1864],{"class":476},[152,9569,2458],{"class":293},[152,9571,2965],{"class":483},[152,9573,9574,9577,9579,9581],{"class":281,"line":1112},[152,9575,9576],{"class":483},"    s1.score",[152,9578,1864],{"class":476},[152,9580,2062],{"class":293},[152,9582,2965],{"class":483},[152,9584,9585],{"class":281,"line":1121},[152,9586,9587],{"class":866},"    \u002F\u002F输出结果\n",[152,9589,9590,9592,9594,9597,9599,9602,9604,9607,9609],{"class":281,"line":1131},[152,9591,3222],{"class":483},[152,9593,2848],{"class":476},[152,9595,9596],{"class":483},"s1.name",[152,9598,2848],{"class":476},[152,9600,9601],{"class":483},"s1.age",[152,9603,2848],{"class":476},[152,9605,9606],{"class":483},"s1.score",[152,9608,2848],{"class":476},[152,9610,2870],{"class":483},[152,9612,9613],{"class":281,"line":1138},[152,9614,307],{"emptyLinePlaceholder":306},[152,9616,9617],{"class":281,"line":1143},[152,9618,9619],{"class":866},"    \u002F\u002F2.2 struct Student s2={...}\n",[152,9621,9622,9624,9626,9629,9631,9633,9636,9638,9640,9642,9644],{"class":281,"line":1148},[152,9623,9537],{"class":476},[152,9625,9540],{"class":285},[152,9627,9628],{"class":483}," s2",[152,9630,1864],{"class":476},[152,9632,2703],{"class":483},[152,9634,9635],{"class":289},"\"王五\"",[152,9637,2186],{"class":483},[152,9639,2458],{"class":293},[152,9641,2186],{"class":483},[152,9643,2062],{"class":293},[152,9645,5637],{"class":483},[152,9647,9648],{"class":281,"line":1159},[152,9649,307],{"emptyLinePlaceholder":306},[152,9651,9652],{"class":281,"line":1168},[152,9653,9654],{"class":866},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[152,9656,9657,9660,9662,9664],{"class":281,"line":1178},[152,9658,9659],{"class":483},"    s3.name",[152,9661,1864],{"class":476},[152,9663,5321],{"class":289},[152,9665,2965],{"class":483},[152,9667,9668,9671,9673,9675],{"class":281,"line":1185},[152,9669,9670],{"class":483},"    s3.age",[152,9672,1864],{"class":476},[152,9674,2458],{"class":293},[152,9676,2965],{"class":483},[152,9678,9679,9682,9684,9686],{"class":281,"line":1190},[152,9680,9681],{"class":483},"    s3.score",[152,9683,1864],{"class":476},[152,9685,2508],{"class":293},[152,9687,2965],{"class":483},[152,9689,9690],{"class":281,"line":1195},[152,9691,3236],{"class":483},[19,9693,9694],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[1760,9696,9698],{"id":9697},"_42结构体数组","4.2结构体数组",[19,9700,9701],{},"将自定义的结构体放入到数组中方便维护",[19,9703,9704,9705,9708],{},"语法：struct 结构体名 数组名",[152,9706,9707],{},"元素个数","={ {}，{},...{} };",[270,9710,9712],{"className":1807,"code":9711,"language":1809,"meta":275,"style":275},"#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",[277,9713,9714,9720,9730,9736,9741,9747,9751,9755,9761,9767,9771,9775,9783,9787,9792,9807,9811,9827,9843,9847,9852,9868,9883,9898,9903,9929,9933,9956,9960],{"__ignoreMap":275},[152,9715,9716,9718],{"class":281,"line":282},[152,9717,3601],{"class":476},[152,9719,3604],{"class":289},[152,9721,9722,9724,9726,9728],{"class":281,"line":303},[152,9723,3609],{"class":476},[152,9725,3612],{"class":476},[152,9727,3615],{"class":285},[152,9729,2965],{"class":483},[152,9731,9732,9734],{"class":281,"line":310},[152,9733,3601],{"class":476},[152,9735,9391],{"class":289},[152,9737,9738],{"class":281,"line":324},[152,9739,9740],{"class":866},"\u002F\u002F1.定义结构体\n",[152,9742,9743,9745],{"class":281,"line":329},[152,9744,9401],{"class":476},[152,9746,9404],{"class":285},[152,9748,9749],{"class":281,"line":343},[152,9750,3217],{"class":483},[152,9752,9753],{"class":281,"line":348},[152,9754,9427],{"class":483},[152,9756,9757,9759],{"class":281,"line":362},[152,9758,3636],{"class":476},[152,9760,9439],{"class":483},[152,9762,9763,9765],{"class":281,"line":367},[152,9764,3636],{"class":476},[152,9766,9451],{"class":483},[152,9768,9769],{"class":281,"line":381},[152,9770,307],{"emptyLinePlaceholder":306},[152,9772,9773],{"class":281,"line":386},[152,9774,5637],{"class":483},[152,9776,9777,9779,9781],{"class":281,"line":932},[152,9778,1822],{"class":476},[152,9780,3624],{"class":285},[152,9782,3627],{"class":483},[152,9784,9785],{"class":281,"line":942},[152,9786,3217],{"class":483},[152,9788,9789],{"class":281,"line":949},[152,9790,9791],{"class":866},"    \u002F\u002F2.创建结构体数组\n",[152,9793,9794,9796,9798,9801,9803,9805],{"class":281,"line":954},[152,9795,9537],{"class":476},[152,9797,9540],{"class":285},[152,9799,9800],{"class":483}," stuArray[",[152,9802,1894],{"class":293},[152,9804,2746],{"class":483},[152,9806,6550],{"class":476},[152,9808,9809],{"class":281,"line":959},[152,9810,3681],{"class":483},[152,9812,9813,9815,9817,9819,9821,9823,9825],{"class":281,"line":970},[152,9814,6559],{"class":483},[152,9816,9558],{"class":289},[152,9818,2186],{"class":483},[152,9820,2458],{"class":293},[152,9822,2186],{"class":483},[152,9824,2119],{"class":293},[152,9826,6572],{"class":483},[152,9828,9829,9831,9833,9835,9837,9839,9841],{"class":281,"line":979},[152,9830,6559],{"class":483},[152,9832,5321],{"class":289},[152,9834,2186],{"class":483},[152,9836,2383],{"class":293},[152,9838,2186],{"class":483},[152,9840,2383],{"class":293},[152,9842,3236],{"class":483},[152,9844,9845],{"class":281,"line":989},[152,9846,3838],{"class":483},[152,9848,9849],{"class":281,"line":996},[152,9850,9851],{"class":866},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[152,9853,9854,9857,9859,9862,9864,9866],{"class":281,"line":1001},[152,9855,9856],{"class":483},"    stuArray[",[152,9858,2026],{"class":293},[152,9860,9861],{"class":483},"].name",[152,9863,1864],{"class":476},[152,9865,5344],{"class":289},[152,9867,2965],{"class":483},[152,9869,9870,9872,9874,9877,9879,9881],{"class":281,"line":1006},[152,9871,9856],{"class":483},[152,9873,2026],{"class":293},[152,9875,9876],{"class":483},"].age",[152,9878,1864],{"class":476},[152,9880,1894],{"class":293},[152,9882,2965],{"class":483},[152,9884,9885,9887,9889,9892,9894,9896],{"class":281,"line":1018},[152,9886,9856],{"class":483},[152,9888,2026],{"class":293},[152,9890,9891],{"class":483},"].score",[152,9893,1864],{"class":476},[152,9895,1894],{"class":293},[152,9897,2965],{"class":483},[152,9899,9900],{"class":281,"line":1027},[152,9901,9902],{"class":866},"    \u002F\u002F4.遍历结构体数组\n",[152,9904,9905,9907,9909,9911,9913,9915,9917,9919,9921,9923,9925,9927],{"class":281,"line":1037},[152,9906,4844],{"class":476},[152,9908,3322],{"class":483},[152,9910,1822],{"class":476},[152,9912,4675],{"class":483},[152,9914,1864],{"class":476},[152,9916,2000],{"class":293},[152,9918,4682],{"class":483},[152,9920,844],{"class":476},[152,9922,1894],{"class":293},[152,9924,4682],{"class":483},[152,9926,3943],{"class":476},[152,9928,1825],{"class":483},[152,9930,9931],{"class":281,"line":1044},[152,9932,3681],{"class":483},[152,9934,9935,9937,9939,9942,9944,9947,9949,9952,9954],{"class":281,"line":1049},[152,9936,5094],{"class":483},[152,9938,2848],{"class":476},[152,9940,9941],{"class":483},"stuArray[i].name",[152,9943,2848],{"class":476},[152,9945,9946],{"class":483},"stuArray[i].age",[152,9948,2848],{"class":476},[152,9950,9951],{"class":483},"stuArray[i].score",[152,9953,2848],{"class":476},[152,9955,2870],{"class":483},[152,9957,9958],{"class":281,"line":1054},[152,9959,3838],{"class":483},[152,9961,9962],{"class":281,"line":1065},[152,9963,3236],{"class":483},[1760,9965,9967],{"id":9966},"_43结构体指针","4.3结构体指针",[19,9969,9970],{},"作用：通过指针访问结构体中的成员",[19,9972,9973],{},"利用操作符->可以通过结构体指针访问结构体属性",[270,9975,9977],{"className":1807,"code":9976,"language":1809,"meta":275,"style":275},"#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",[277,9978,9979,9985,9995,10001,10005,10011,10015,10019,10025,10031,10035,10043,10047,10052,10077,10082,10097,10102,10125],{"__ignoreMap":275},[152,9980,9981,9983],{"class":281,"line":282},[152,9982,3601],{"class":476},[152,9984,3604],{"class":289},[152,9986,9987,9989,9991,9993],{"class":281,"line":303},[152,9988,3609],{"class":476},[152,9990,3612],{"class":476},[152,9992,3615],{"class":285},[152,9994,2965],{"class":483},[152,9996,9997,9999],{"class":281,"line":310},[152,9998,3601],{"class":476},[152,10000,9391],{"class":289},[152,10002,10003],{"class":281,"line":324},[152,10004,9740],{"class":866},[152,10006,10007,10009],{"class":281,"line":329},[152,10008,9401],{"class":476},[152,10010,9404],{"class":285},[152,10012,10013],{"class":281,"line":343},[152,10014,3217],{"class":483},[152,10016,10017],{"class":281,"line":348},[152,10018,9427],{"class":483},[152,10020,10021,10023],{"class":281,"line":362},[152,10022,3636],{"class":476},[152,10024,9439],{"class":483},[152,10026,10027,10029],{"class":281,"line":367},[152,10028,3636],{"class":476},[152,10030,9451],{"class":483},[152,10032,10033],{"class":281,"line":381},[152,10034,5637],{"class":483},[152,10036,10037,10039,10041],{"class":281,"line":386},[152,10038,1822],{"class":476},[152,10040,3624],{"class":285},[152,10042,3627],{"class":483},[152,10044,10045],{"class":281,"line":932},[152,10046,3217],{"class":483},[152,10048,10049],{"class":281,"line":942},[152,10050,10051],{"class":866},"    \u002F\u002F创建学生结构体变量\n",[152,10053,10054,10056,10058,10061,10063,10065,10067,10069,10071,10073,10075],{"class":281,"line":949},[152,10055,9537],{"class":476},[152,10057,9540],{"class":285},[152,10059,10060],{"class":483}," s",[152,10062,1864],{"class":476},[152,10064,2703],{"class":483},[152,10066,9558],{"class":289},[152,10068,2186],{"class":483},[152,10070,2458],{"class":293},[152,10072,2186],{"class":483},[152,10074,3382],{"class":293},[152,10076,5637],{"class":483},[152,10078,10079],{"class":281,"line":954},[152,10080,10081],{"class":866},"    \u002F\u002F通过指针指向结构体变量\n",[152,10083,10084,10086,10088,10090,10092,10094],{"class":281,"line":959},[152,10085,9537],{"class":476},[152,10087,9540],{"class":285},[152,10089,8160],{"class":476},[152,10091,19],{"class":483},[152,10093,7981],{"class":476},[152,10095,10096],{"class":483},"s\n",[152,10098,10099],{"class":281,"line":970},[152,10100,10101],{"class":866},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[152,10103,10104,10106,10108,10111,10113,10116,10118,10121,10123],{"class":281,"line":979},[152,10105,3222],{"class":483},[152,10107,2848],{"class":476},[152,10109,10110],{"class":483},"p->name",[152,10112,2848],{"class":476},[152,10114,10115],{"class":483},"p->age",[152,10117,2848],{"class":476},[152,10119,10120],{"class":483},"p->score",[152,10122,2848],{"class":476},[152,10124,2870],{"class":483},[152,10126,10127],{"class":281,"line":989},[152,10128,3236],{"class":483},[1760,10130,10132],{"id":10131},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10134,10135],{},"作用：结构体中的成员可以是另一个结构体",[19,10137,10138],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[270,10140,10142],{"className":1807,"code":10141,"language":1809,"meta":275,"style":275},"#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",[277,10143,10144,10150,10160,10166,10171,10179,10183,10187,10193,10199,10203,10208,10215,10219,10226,10230,10236,10241,10245,10253,10257,10262,10267,10272,10283,10295,10306,10319,10330,10341],{"__ignoreMap":275},[152,10145,10146,10148],{"class":281,"line":282},[152,10147,3601],{"class":476},[152,10149,3604],{"class":289},[152,10151,10152,10154,10156,10158],{"class":281,"line":303},[152,10153,3609],{"class":476},[152,10155,3612],{"class":476},[152,10157,3615],{"class":285},[152,10159,2965],{"class":483},[152,10161,10162,10164],{"class":281,"line":310},[152,10163,3601],{"class":476},[152,10165,9391],{"class":289},[152,10167,10168],{"class":281,"line":324},[152,10169,10170],{"class":866},"\u002F\u002F定义学生结构体\n",[152,10172,10173,10175,10177],{"class":281,"line":329},[152,10174,9401],{"class":476},[152,10176,9540],{"class":285},[152,10178,4317],{"class":483},[152,10180,10181],{"class":281,"line":343},[152,10182,3217],{"class":483},[152,10184,10185],{"class":281,"line":348},[152,10186,9427],{"class":483},[152,10188,10189,10191],{"class":281,"line":362},[152,10190,3636],{"class":476},[152,10192,9439],{"class":483},[152,10194,10195,10197],{"class":281,"line":367},[152,10196,3636],{"class":476},[152,10198,9451],{"class":483},[152,10200,10201],{"class":281,"line":381},[152,10202,3236],{"class":483},[152,10204,10205],{"class":281,"line":386},[152,10206,10207],{"class":866},"\u002F\u002F定义老师结构体\n",[152,10209,10210,10212],{"class":281,"line":932},[152,10211,9401],{"class":476},[152,10213,10214],{"class":285}," Teacher\n",[152,10216,10217],{"class":281,"line":942},[152,10218,3217],{"class":483},[152,10220,10221,10223],{"class":281,"line":949},[152,10222,3636],{"class":476},[152,10224,10225],{"class":483}," id;\n",[152,10227,10228],{"class":281,"line":954},[152,10229,9427],{"class":483},[152,10231,10232,10234],{"class":281,"line":959},[152,10233,3636],{"class":476},[152,10235,9439],{"class":483},[152,10237,10238],{"class":281,"line":970},[152,10239,10240],{"class":483},"    Student stu;\n",[152,10242,10243],{"class":281,"line":979},[152,10244,3236],{"class":483},[152,10246,10247,10249,10251],{"class":281,"line":989},[152,10248,1822],{"class":476},[152,10250,3624],{"class":285},[152,10252,7620],{"class":483},[152,10254,10255],{"class":281,"line":996},[152,10256,3217],{"class":483},[152,10258,10259],{"class":281,"line":1001},[152,10260,10261],{"class":866},"    \u002F\u002F结构体嵌套结构体\n",[152,10263,10264],{"class":281,"line":1006},[152,10265,10266],{"class":866},"    \u002F\u002F创建老师\n",[152,10268,10269],{"class":281,"line":1018},[152,10270,10271],{"class":483},"    Teacher t;\n",[152,10273,10274,10277,10279,10281],{"class":281,"line":1027},[152,10275,10276],{"class":483},"    t.id",[152,10278,1864],{"class":476},[152,10280,2119],{"class":293},[152,10282,2965],{"class":483},[152,10284,10285,10288,10290,10293],{"class":281,"line":1037},[152,10286,10287],{"class":483},"    t.name",[152,10289,1864],{"class":476},[152,10291,10292],{"class":289},"\"老王\"",[152,10294,2965],{"class":483},[152,10296,10297,10300,10302,10304],{"class":281,"line":1044},[152,10298,10299],{"class":483},"    t.age",[152,10301,1864],{"class":476},[152,10303,2458],{"class":293},[152,10305,2965],{"class":483},[152,10307,10308,10311,10313,10316],{"class":281,"line":1049},[152,10309,10310],{"class":483},"    t.stu.name",[152,10312,1864],{"class":476},[152,10314,10315],{"class":289},"\"小王\"",[152,10317,10318],{"class":483},"；\n",[152,10320,10321,10324,10326,10328],{"class":281,"line":1054},[152,10322,10323],{"class":483},"    t.stu.age",[152,10325,1864],{"class":476},[152,10327,2508],{"class":293},[152,10329,2965],{"class":483},[152,10331,10332,10335,10337,10339],{"class":281,"line":1065},[152,10333,10334],{"class":483},"    t.stu.score",[152,10336,1864],{"class":476},[152,10338,2152],{"class":293},[152,10340,2965],{"class":483},[152,10342,10343],{"class":281,"line":1074},[152,10344,3236],{"class":483},[1760,10346,10348],{"id":10347},"_45结构体做函数参数","4.5结构体做函数参数",[19,10350,10351],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[270,10353,10355],{"className":1807,"code":10354,"language":1809,"meta":275,"style":275},"#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",[277,10356,10357,10363,10373,10379,10385,10389,10393,10399,10405,10409,10414,10419,10436,10440,10473,10477,10482,10501,10505,10536,10540,10548,10552,10561,10573,10585,10597,10610,10618,10631,10643,10651],{"__ignoreMap":275},[152,10358,10359,10361],{"class":281,"line":282},[152,10360,3601],{"class":476},[152,10362,3604],{"class":289},[152,10364,10365,10367,10369,10371],{"class":281,"line":303},[152,10366,3609],{"class":476},[152,10368,3612],{"class":476},[152,10370,3615],{"class":285},[152,10372,2965],{"class":483},[152,10374,10375,10377],{"class":281,"line":310},[152,10376,3601],{"class":476},[152,10378,9391],{"class":289},[152,10380,10381,10383],{"class":281,"line":324},[152,10382,9401],{"class":476},[152,10384,9404],{"class":285},[152,10386,10387],{"class":281,"line":329},[152,10388,3217],{"class":483},[152,10390,10391],{"class":281,"line":343},[152,10392,9427],{"class":483},[152,10394,10395,10397],{"class":281,"line":348},[152,10396,3636],{"class":476},[152,10398,9439],{"class":483},[152,10400,10401,10403],{"class":281,"line":362},[152,10402,3636],{"class":476},[152,10404,9451],{"class":483},[152,10406,10407],{"class":281,"line":367},[152,10408,5637],{"class":483},[152,10410,10411],{"class":281,"line":381},[152,10412,10413],{"class":866},"\u002F\u002F打印学生信息的函数\n",[152,10415,10416],{"class":281,"line":386},[152,10417,10418],{"class":866},"\u002F\u002F值传递\n",[152,10420,10421,10423,10426,10428,10430,10432,10434],{"class":281,"line":932},[152,10422,7006],{"class":476},[152,10424,10425],{"class":285}," printStudent1",[152,10427,1819],{"class":483},[152,10429,9401],{"class":476},[152,10431,9540],{"class":285},[152,10433,10060],{"class":6858},[152,10435,1825],{"class":483},[152,10437,10438],{"class":281,"line":942},[152,10439,3217],{"class":483},[152,10441,10442,10444,10446,10449,10451,10454,10456,10459,10461,10463,10465,10468,10470],{"class":281,"line":949},[152,10443,8171],{"class":483},[152,10445,2848],{"class":476},[152,10447,10448],{"class":483}," s.name ",[152,10450,2848],{"class":476},[152,10452,10453],{"class":289}," \" \"",[152,10455,3116],{"class":476},[152,10457,10458],{"class":483}," s.age ",[152,10460,2848],{"class":476},[152,10462,10453],{"class":289},[152,10464,3116],{"class":476},[152,10466,10467],{"class":483}," s.score ",[152,10469,2848],{"class":476},[152,10471,10472],{"class":483}," endl;\n",[152,10474,10475],{"class":281,"line":954},[152,10476,3236],{"class":483},[152,10478,10479],{"class":281,"line":959},[152,10480,10481],{"class":866},"\u002F\u002F地址传递\n",[152,10483,10484,10486,10489,10491,10493,10495,10497,10499],{"class":281,"line":970},[152,10485,7006],{"class":476},[152,10487,10488],{"class":285}," printStudent2",[152,10490,1819],{"class":483},[152,10492,9401],{"class":476},[152,10494,9540],{"class":285},[152,10496,8160],{"class":476},[152,10498,2503],{"class":6858},[152,10500,1825],{"class":483},[152,10502,10503],{"class":281,"line":979},[152,10504,3217],{"class":483},[152,10506,10507,10509,10511,10514,10516,10518,10520,10523,10525,10527,10529,10532,10534],{"class":281,"line":989},[152,10508,8171],{"class":483},[152,10510,2848],{"class":476},[152,10512,10513],{"class":483}," s->name ",[152,10515,2848],{"class":476},[152,10517,10453],{"class":289},[152,10519,3116],{"class":476},[152,10521,10522],{"class":483}," s->age ",[152,10524,2848],{"class":476},[152,10526,10453],{"class":289},[152,10528,3116],{"class":476},[152,10530,10531],{"class":483}," s->score ",[152,10533,2848],{"class":476},[152,10535,10472],{"class":483},[152,10537,10538],{"class":281,"line":996},[152,10539,3236],{"class":483},[152,10541,10542,10544,10546],{"class":281,"line":1001},[152,10543,1822],{"class":476},[152,10545,3624],{"class":285},[152,10547,3627],{"class":483},[152,10549,10550],{"class":281,"line":1006},[152,10551,3217],{"class":483},[152,10553,10554,10556,10558],{"class":281,"line":1018},[152,10555,9537],{"class":476},[152,10557,9540],{"class":285},[152,10559,10560],{"class":483}," s;\n",[152,10562,10563,10566,10568,10571],{"class":281,"line":1027},[152,10564,10565],{"class":483},"    s.name ",[152,10567,1864],{"class":476},[152,10569,10570],{"class":289}," \"张三\"",[152,10572,2965],{"class":483},[152,10574,10575,10578,10580,10583],{"class":281,"line":1037},[152,10576,10577],{"class":483},"    s.age ",[152,10579,1864],{"class":476},[152,10581,10582],{"class":293}," 20",[152,10584,2965],{"class":483},[152,10586,10587,10590,10592,10595],{"class":281,"line":1044},[152,10588,10589],{"class":483},"    s.score ",[152,10591,1864],{"class":476},[152,10593,10594],{"class":293}," 85",[152,10596,2965],{"class":483},[152,10598,10599,10601,10603,10606,10608],{"class":281,"line":1049},[152,10600,3222],{"class":483},[152,10602,2848],{"class":476},[152,10604,10605],{"class":289},"\"值传递:\"",[152,10607,2848],{"class":476},[152,10609,2870],{"class":483},[152,10611,10612,10615],{"class":281,"line":1054},[152,10613,10614],{"class":285},"    printStudent1",[152,10616,10617],{"class":483},"(s);\n",[152,10619,10620,10622,10624,10627,10629],{"class":281,"line":1065},[152,10621,3222],{"class":483},[152,10623,2848],{"class":476},[152,10625,10626],{"class":289},"\"地址传递:\"",[152,10628,2848],{"class":476},[152,10630,2870],{"class":483},[152,10632,10633,10636,10638,10640],{"class":281,"line":1074},[152,10634,10635],{"class":285},"    printStudent2",[152,10637,1819],{"class":483},[152,10639,2161],{"class":476},[152,10641,10642],{"class":483},"s); \n",[152,10644,10645,10647,10649],{"class":281,"line":1084},[152,10646,5732],{"class":476},[152,10648,5735],{"class":293},[152,10650,2965],{"class":483},[152,10652,10653],{"class":281,"line":1091},[152,10654,3236],{"class":483},[19,10656,10657],{},"注意：",[698,10659,10660,10663],{},[419,10661,10662],{},"1.先定义结构体，不要在函数中写结构体的定义",[419,10664,10665],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[1760,10667,10669],{"id":10668},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10671,10672],{},"用const防止误操作",[270,10674,10676],{"className":1807,"code":10675,"language":1809,"meta":275,"style":275},"#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",[277,10677,10678,10684,10694,10700,10705,10709,10713,10719,10725,10729,10745,10749,10772,10776,10784,10788,10809,10816,10820],{"__ignoreMap":275},[152,10679,10680,10682],{"class":281,"line":282},[152,10681,3601],{"class":476},[152,10683,3604],{"class":289},[152,10685,10686,10688,10690,10692],{"class":281,"line":303},[152,10687,3609],{"class":476},[152,10689,3612],{"class":476},[152,10691,3615],{"class":285},[152,10693,2965],{"class":483},[152,10695,10696,10698],{"class":281,"line":310},[152,10697,3601],{"class":476},[152,10699,9391],{"class":289},[152,10701,10702],{"class":281,"line":324},[152,10703,10704],{"class":483},"sctuct Student\n",[152,10706,10707],{"class":281,"line":329},[152,10708,3217],{"class":483},[152,10710,10711],{"class":281,"line":343},[152,10712,9427],{"class":483},[152,10714,10715,10717],{"class":281,"line":348},[152,10716,3636],{"class":476},[152,10718,9439],{"class":483},[152,10720,10721,10723],{"class":281,"line":362},[152,10722,3636],{"class":476},[152,10724,9451],{"class":483},[152,10726,10727],{"class":281,"line":367},[152,10728,5637],{"class":483},[152,10730,10731,10733,10736,10738,10741,10743],{"class":281,"line":381},[152,10732,7006],{"class":476},[152,10734,10735],{"class":285}," printStudents",[152,10737,1819],{"class":483},[152,10739,10740],{"class":285},"student",[152,10742,10060],{"class":6858},[152,10744,1825],{"class":483},[152,10746,10747],{"class":281,"line":386},[152,10748,3217],{"class":483},[152,10750,10751,10753,10755,10758,10760,10763,10765,10768,10770],{"class":281,"line":932},[152,10752,3222],{"class":483},[152,10754,2848],{"class":476},[152,10756,10757],{"class":483},"s.name",[152,10759,2848],{"class":476},[152,10761,10762],{"class":483},"s.age",[152,10764,2848],{"class":476},[152,10766,10767],{"class":483},"s.score",[152,10769,2848],{"class":476},[152,10771,2870],{"class":483},[152,10773,10774],{"class":281,"line":942},[152,10775,3236],{"class":483},[152,10777,10778,10780,10782],{"class":281,"line":949},[152,10779,1822],{"class":476},[152,10781,3624],{"class":285},[152,10783,7620],{"class":483},[152,10785,10786],{"class":281,"line":954},[152,10787,3217],{"class":483},[152,10789,10790,10793,10795,10797,10799,10801,10803,10805,10807],{"class":281,"line":959},[152,10791,10792],{"class":483},"    Student s",[152,10794,1864],{"class":476},[152,10796,2703],{"class":483},[152,10798,9558],{"class":289},[152,10800,2186],{"class":483},[152,10802,2458],{"class":293},[152,10804,2186],{"class":483},[152,10806,2458],{"class":293},[152,10808,5637],{"class":483},[152,10810,10811,10814],{"class":281,"line":970},[152,10812,10813],{"class":285},"    printStudent",[152,10815,10617],{"class":483},[152,10817,10818],{"class":281,"line":979},[152,10819,307],{"emptyLinePlaceholder":306},[152,10821,10822],{"class":281,"line":989},[152,10823,3236],{"class":483},[19,10825,10657],{},[698,10827,10828,10831,10834],{},[419,10829,10830],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[419,10832,10833],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[419,10835,10836],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[270,10838,10840],{"className":1807,"code":10839,"language":1809,"meta":275,"style":275},"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",[277,10841,10842,10861,10865,10870,10890],{"__ignoreMap":275},[152,10843,10844,10846,10848,10850,10852,10855,10857,10859],{"class":281,"line":282},[152,10845,7006],{"class":476},[152,10847,10735],{"class":285},[152,10849,1819],{"class":483},[152,10851,8434],{"class":476},[152,10853,10854],{"class":285}," student",[152,10856,8160],{"class":476},[152,10858,2503],{"class":6858},[152,10860,1825],{"class":483},[152,10862,10863],{"class":281,"line":303},[152,10864,3217],{"class":483},[152,10866,10867],{"class":281,"line":310},[152,10868,10869],{"class":866},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[152,10871,10872,10874,10876,10878,10880,10882,10884,10886,10888],{"class":281,"line":324},[152,10873,3222],{"class":483},[152,10875,2848],{"class":476},[152,10877,10757],{"class":483},[152,10879,2848],{"class":476},[152,10881,10762],{"class":483},[152,10883,2848],{"class":476},[152,10885,10767],{"class":483},[152,10887,2848],{"class":476},[152,10889,2870],{"class":483},[152,10891,10892],{"class":281,"line":329},[152,10893,3236],{"class":483},[1760,10895,10897],{"id":10896},"_47案例","4.7案例",[416,10899,10900],{},[419,10901,10902],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[270,10904,10906],{"className":1807,"code":10905,"language":1809,"meta":275,"style":275},"#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",[277,10907,10908,10914,10924,10930,10937,10941,10947,10951,10956,10962,10968,10972,10976,10982,10986,10991,10996,11009,11013,11018,11044,11048,11060,11087,11091,11103,11113,11117,11122,11151,11155,11167,11176,11203,11214,11224,11228,11232,11236,11241,11265,11269,11293,11297,11316,11342,11346,11370,11392,11415,11419,11423,11427,11435,11439,11444,11464,11469,11482,11487,11513,11521,11526,11534,11539],{"__ignoreMap":275},[152,10909,10910,10912],{"class":281,"line":282},[152,10911,3601],{"class":476},[152,10913,3604],{"class":289},[152,10915,10916,10918,10920,10922],{"class":281,"line":303},[152,10917,3609],{"class":476},[152,10919,3612],{"class":476},[152,10921,3615],{"class":285},[152,10923,2965],{"class":483},[152,10925,10926,10928],{"class":281,"line":310},[152,10927,3601],{"class":476},[152,10929,9391],{"class":289},[152,10931,10932,10934],{"class":281,"line":324},[152,10933,3601],{"class":476},[152,10935,10936],{"class":289},"\u003Cctime>\n",[152,10938,10939],{"class":281,"line":329},[152,10940,10170],{"class":866},[152,10942,10943,10945],{"class":281,"line":343},[152,10944,9401],{"class":476},[152,10946,9404],{"class":285},[152,10948,10949],{"class":281,"line":348},[152,10950,3217],{"class":483},[152,10952,10953],{"class":281,"line":362},[152,10954,10955],{"class":483},"    string sName;\n",[152,10957,10958,10960],{"class":281,"line":367},[152,10959,3636],{"class":476},[152,10961,9439],{"class":483},[152,10963,10964,10966],{"class":281,"line":381},[152,10965,3636],{"class":476},[152,10967,9451],{"class":483},[152,10969,10970],{"class":281,"line":386},[152,10971,5637],{"class":483},[152,10973,10974],{"class":281,"line":932},[152,10975,10207],{"class":866},[152,10977,10978,10980],{"class":281,"line":942},[152,10979,9401],{"class":476},[152,10981,10214],{"class":285},[152,10983,10984],{"class":281,"line":949},[152,10985,3217],{"class":483},[152,10987,10988],{"class":281,"line":954},[152,10989,10990],{"class":483},"    string tName;\n",[152,10992,10993],{"class":281,"line":959},[152,10994,10995],{"class":866},"    \u002F\u002F学生数组\n",[152,10997,10998,11000,11002,11005,11007],{"class":281,"line":970},[152,10999,9537],{"class":476},[152,11001,9540],{"class":285},[152,11003,11004],{"class":483}," sArray[",[152,11006,2127],{"class":293},[152,11008,6332],{"class":483},[152,11010,11011],{"class":281,"line":979},[152,11012,5637],{"class":483},[152,11014,11015],{"class":281,"line":989},[152,11016,11017],{"class":866},"\u002F\u002F给老师和学生赋值的函数\n",[152,11019,11020,11022,11025,11027,11029,11032,11035,11038,11040,11042],{"class":281,"line":996},[152,11021,7006],{"class":476},[152,11023,11024],{"class":285}," allocateSpace",[152,11026,1819],{"class":483},[152,11028,9401],{"class":476},[152,11030,11031],{"class":285}," Teacher",[152,11033,11034],{"class":6858}," tArray",[152,11036,11037],{"class":483},"[],",[152,11039,1822],{"class":476},[152,11041,8973],{"class":6858},[152,11043,1825],{"class":483},[152,11045,11046],{"class":281,"line":1001},[152,11047,3217],{"class":483},[152,11049,11050,11053,11055,11058],{"class":281,"line":1006},[152,11051,11052],{"class":483},"    string nameSeed",[152,11054,1864],{"class":476},[152,11056,11057],{"class":289},"\"ABCDE\"",[152,11059,2965],{"class":483},[152,11061,11062,11064,11066,11068,11071,11073,11075,11078,11080,11083,11085],{"class":281,"line":1018},[152,11063,4844],{"class":476},[152,11065,3322],{"class":483},[152,11067,1822],{"class":476},[152,11069,11070],{"class":483}," i ",[152,11072,1864],{"class":476},[152,11074,5735],{"class":293},[152,11076,11077],{"class":483},"; i ",[152,11079,844],{"class":476},[152,11081,11082],{"class":483}," len; i",[152,11084,3943],{"class":476},[152,11086,1825],{"class":483},[152,11088,11089],{"class":281,"line":1027},[152,11090,3681],{"class":483},[152,11092,11093,11096,11098,11101],{"class":281,"line":1037},[152,11094,11095],{"class":483},"        tArray[i].tName ",[152,11097,1864],{"class":476},[152,11099,11100],{"class":289}," \"Teacher_\"",[152,11102,2965],{"class":483},[152,11104,11105,11107,11110],{"class":281,"line":1044},[152,11106,11095],{"class":483},[152,11108,11109],{"class":476},"+=",[152,11111,11112],{"class":483},"nameSeed[i];\n",[152,11114,11115],{"class":281,"line":1049},[152,11116,307],{"emptyLinePlaceholder":306},[152,11118,11119],{"class":281,"line":1054},[152,11120,11121],{"class":866},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[152,11123,11124,11126,11128,11130,11133,11135,11137,11140,11142,11144,11147,11149],{"class":281,"line":1065},[152,11125,5046],{"class":476},[152,11127,3322],{"class":483},[152,11129,1822],{"class":476},[152,11131,11132],{"class":483}," j ",[152,11134,1864],{"class":476},[152,11136,5735],{"class":293},[152,11138,11139],{"class":483},"; j ",[152,11141,844],{"class":476},[152,11143,3799],{"class":293},[152,11145,11146],{"class":483},"; j",[152,11148,3943],{"class":476},[152,11150,1825],{"class":483},[152,11152,11153],{"class":281,"line":1074},[152,11154,4160],{"class":483},[152,11156,11157,11160,11162,11165],{"class":281,"line":1084},[152,11158,11159],{"class":483},"            tArray[i].sArray[j].sName ",[152,11161,1864],{"class":476},[152,11163,11164],{"class":289}," \"Student_\"",[152,11166,2965],{"class":483},[152,11168,11169,11171,11173],{"class":281,"line":1091},[152,11170,11159],{"class":483},[152,11172,11109],{"class":476},[152,11174,11175],{"class":483}," nameSeed[j];\n",[152,11177,11178,11181,11184,11186,11188,11190,11192,11194,11196,11198,11200],{"class":281,"line":1096},[152,11179,11180],{"class":476},"            int",[152,11182,11183],{"class":483}," random",[152,11185,1864],{"class":476},[152,11187,4074],{"class":285},[152,11189,4077],{"class":483},[152,11191,2136],{"class":476},[152,11193,2714],{"class":293},[152,11195,2289],{"class":476},[152,11197,2209],{"class":293},[152,11199,1873],{"class":483},[152,11201,11202],{"class":866},"\u002F\u002F40~99\n",[152,11204,11205,11208,11210,11212],{"class":281,"line":1101},[152,11206,11207],{"class":483},"            tArray[i].sArray[j].age ",[152,11209,1864],{"class":476},[152,11211,10582],{"class":293},[152,11213,2965],{"class":483},[152,11215,11216,11219,11221],{"class":281,"line":1112},[152,11217,11218],{"class":483},"            tArray[i].sArray[j].score ",[152,11220,1864],{"class":476},[152,11222,11223],{"class":483}," random;\n",[152,11225,11226],{"class":281,"line":1121},[152,11227,4179],{"class":483},[152,11229,11230],{"class":281,"line":1131},[152,11231,3838],{"class":483},[152,11233,11234],{"class":281,"line":1138},[152,11235,3236],{"class":483},[152,11237,11238],{"class":281,"line":1143},[152,11239,11240],{"class":866},"\u002F\u002F打印所有信息的函数\n",[152,11242,11243,11245,11248,11250,11252,11254,11256,11259,11261,11263],{"class":281,"line":1148},[152,11244,7006],{"class":476},[152,11246,11247],{"class":285}," printInfo",[152,11249,1819],{"class":483},[152,11251,9401],{"class":476},[152,11253,11031],{"class":285},[152,11255,11034],{"class":6858},[152,11257,11258],{"class":483},"[], ",[152,11260,1822],{"class":476},[152,11262,8973],{"class":6858},[152,11264,1825],{"class":483},[152,11266,11267],{"class":281,"line":1159},[152,11268,3217],{"class":483},[152,11270,11271,11273,11275,11277,11279,11281,11283,11285,11287,11289,11291],{"class":281,"line":1168},[152,11272,4844],{"class":476},[152,11274,3322],{"class":483},[152,11276,1822],{"class":476},[152,11278,11070],{"class":483},[152,11280,1864],{"class":476},[152,11282,5735],{"class":293},[152,11284,11077],{"class":483},[152,11286,844],{"class":476},[152,11288,11082],{"class":483},[152,11290,3943],{"class":476},[152,11292,1825],{"class":483},[152,11294,11295],{"class":281,"line":1178},[152,11296,3681],{"class":483},[152,11298,11299,11302,11304,11307,11309,11312,11314],{"class":281,"line":1185},[152,11300,11301],{"class":483},"        cout ",[152,11303,2848],{"class":476},[152,11305,11306],{"class":289}," \"Teacher: \"",[152,11308,3116],{"class":476},[152,11310,11311],{"class":483}," tArray[i].tName ",[152,11313,2848],{"class":476},[152,11315,10472],{"class":483},[152,11317,11318,11320,11322,11324,11326,11328,11330,11332,11334,11336,11338,11340],{"class":281,"line":1190},[152,11319,5046],{"class":476},[152,11321,3322],{"class":483},[152,11323,1822],{"class":476},[152,11325,11132],{"class":483},[152,11327,1864],{"class":476},[152,11329,5735],{"class":293},[152,11331,11139],{"class":483},[152,11333,844],{"class":476},[152,11335,3799],{"class":293},[152,11337,11146],{"class":483},[152,11339,3943],{"class":476},[152,11341,1825],{"class":483},[152,11343,11344],{"class":281,"line":1195},[152,11345,4160],{"class":483},[152,11347,11348,11351,11353,11356,11358,11361,11363,11366,11368],{"class":281,"line":1206},[152,11349,11350],{"class":483},"            cout ",[152,11352,2848],{"class":476},[152,11354,11355],{"class":289}," \"",[152,11357,2905],{"class":293},[152,11359,11360],{"class":289},"Student: \"",[152,11362,3116],{"class":476},[152,11364,11365],{"class":483}," tArray[i].sArray[j].sName",[152,11367,2848],{"class":476},[152,11369,2870],{"class":483},[152,11371,11372,11374,11376,11378,11380,11383,11385,11388,11390],{"class":281,"line":1215},[152,11373,11350],{"class":483},[152,11375,2848],{"class":476},[152,11377,11355],{"class":289},[152,11379,2905],{"class":293},[152,11381,11382],{"class":289},"Age: \"",[152,11384,3116],{"class":476},[152,11386,11387],{"class":483}," tArray[i].sArray[j].age ",[152,11389,2848],{"class":476},[152,11391,10472],{"class":483},[152,11393,11394,11396,11398,11400,11402,11405,11407,11410,11412],{"class":281,"line":1225},[152,11395,11350],{"class":483},[152,11397,2848],{"class":476},[152,11399,11355],{"class":289},[152,11401,2905],{"class":293},[152,11403,11404],{"class":289},"Score: \"",[152,11406,3116],{"class":476},[152,11408,11409],{"class":483}," tArray[i].sArray[j].score ",[152,11411,2848],{"class":476},[152,11413,11414],{"class":483}," endl;   \n",[152,11416,11417],{"class":281,"line":1232},[152,11418,4179],{"class":483},[152,11420,11421],{"class":281,"line":1237},[152,11422,3838],{"class":483},[152,11424,11425],{"class":281,"line":1242},[152,11426,3236],{"class":483},[152,11428,11429,11431,11433],{"class":281,"line":1253},[152,11430,1822],{"class":476},[152,11432,3624],{"class":285},[152,11434,3627],{"class":483},[152,11436,11437],{"class":281,"line":1262},[152,11438,3217],{"class":483},[152,11440,11441],{"class":281,"line":1272},[152,11442,11443],{"class":866},"    \u002F\u002F随机数种子\n",[152,11445,11446,11448,11450,11452,11454,11456,11458,11460,11462],{"class":281,"line":1279},[152,11447,4024],{"class":285},[152,11449,4027],{"class":483},[152,11451,4030],{"class":476},[152,11453,4033],{"class":476},[152,11455,2237],{"class":483},[152,11457,4038],{"class":285},[152,11459,1819],{"class":483},[152,11461,4043],{"class":293},[152,11463,4046],{"class":483},[152,11465,11466],{"class":281,"line":1284},[152,11467,11468],{"class":866},"    \u002F\u002F1.创建3名老师的数组\n",[152,11470,11471,11473,11475,11478,11480],{"class":281,"line":1289},[152,11472,9537],{"class":476},[152,11474,11031],{"class":285},[152,11476,11477],{"class":483}," tArray[",[152,11479,1888],{"class":293},[152,11481,6332],{"class":483},[152,11483,11484],{"class":281,"line":1301},[152,11485,11486],{"class":866},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[152,11488,11489,11491,11494,11496,11499,11502,11504,11506,11509,11511],{"class":281,"line":1310},[152,11490,3636],{"class":476},[152,11492,11493],{"class":483}," len ",[152,11495,1864],{"class":476},[152,11497,11498],{"class":476}," sizeof",[152,11500,11501],{"class":483},"(tArray) ",[152,11503,2392],{"class":476},[152,11505,11498],{"class":476},[152,11507,11508],{"class":483},"(tArray[",[152,11510,2000],{"class":293},[152,11512,5498],{"class":483},[152,11514,11515,11518],{"class":281,"line":1320},[152,11516,11517],{"class":285},"    allocateSpace",[152,11519,11520],{"class":483},"(tArray, len);\n",[152,11522,11523],{"class":281,"line":1327},[152,11524,11525],{"class":866},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[152,11527,11529,11532],{"class":281,"line":11528},63,[152,11530,11531],{"class":285},"    printInfo",[152,11533,11520],{"class":483},[152,11535,11537],{"class":281,"line":11536},64,[152,11538,307],{"emptyLinePlaceholder":306},[152,11540,11542],{"class":281,"line":11541},65,[152,11543,3236],{"class":483},[416,11545,11546],{"start":303},[419,11547,11548,11551],{},[694,11549,11550],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11553,11554],{},"五名英雄信息如下：",[270,11556,11560],{"className":11557,"code":11558,"language":11559,"meta":275,"style":275},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[277,11561,11562,11580,11597,11614,11631],{"__ignoreMap":275},[152,11563,11564,11566,11569,11571,11573,11575,11578],{"class":281,"line":282},[152,11565,6559],{"class":483},[152,11567,11568],{"class":289},"\"刘备\"",[152,11570,2186],{"class":483},[152,11572,2583],{"class":293},[152,11574,2186],{"class":483},[152,11576,11577],{"class":289},"\"男\"",[152,11579,6572],{"class":483},[152,11581,11582,11584,11587,11589,11591,11593,11595],{"class":281,"line":303},[152,11583,6559],{"class":483},[152,11585,11586],{"class":289},"\"关羽\"",[152,11588,2186],{"class":483},[152,11590,2558],{"class":293},[152,11592,2186],{"class":483},[152,11594,11577],{"class":289},[152,11596,6572],{"class":483},[152,11598,11599,11601,11604,11606,11608,11610,11612],{"class":281,"line":310},[152,11600,6559],{"class":483},[152,11602,11603],{"class":289},"\"张飞\"",[152,11605,2186],{"class":483},[152,11607,2508],{"class":293},[152,11609,2186],{"class":483},[152,11611,11577],{"class":289},[152,11613,6572],{"class":483},[152,11615,11616,11618,11621,11623,11625,11627,11629],{"class":281,"line":324},[152,11617,6559],{"class":483},[152,11619,11620],{"class":289},"\"赵云\"",[152,11622,2186],{"class":483},[152,11624,2533],{"class":293},[152,11626,2186],{"class":483},[152,11628,11577],{"class":289},[152,11630,6572],{"class":483},[152,11632,11633,11635,11638,11640,11642,11644,11647],{"class":281,"line":329},[152,11634,6559],{"class":483},[152,11636,11637],{"class":289},"\"貂蝉\"",[152,11639,2186],{"class":483},[152,11641,2483],{"class":293},[152,11643,2186],{"class":483},[152,11645,11646],{"class":289},"\"女\"",[152,11648,6572],{"class":483},[19,11650,11651],{},"代码：",[270,11653,11655],{"className":1807,"code":11654,"language":1809,"meta":275,"style":275},"#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",[277,11656,11657,11663,11673,11679,11686,11690,11694,11700,11705,11709,11714,11737,11741,11766,11770,11803,11808,11837,11842,11857,11883,11903,11908,11913,11917,11921,11926,11948,11952,11976,11980,12042,12046,12050,12058,12062,12067,12078,12082,12098,12114,12130,12146,12162,12166,12186,12208,12213,12226,12233,12238,12244,12249,12262,12268],{"__ignoreMap":275},[152,11658,11659,11661],{"class":281,"line":282},[152,11660,3601],{"class":476},[152,11662,3604],{"class":289},[152,11664,11665,11667,11669,11671],{"class":281,"line":303},[152,11666,3609],{"class":476},[152,11668,3612],{"class":476},[152,11670,3615],{"class":285},[152,11672,2965],{"class":483},[152,11674,11675,11677],{"class":281,"line":310},[152,11676,3601],{"class":476},[152,11678,9391],{"class":289},[152,11680,11681,11683],{"class":281,"line":324},[152,11682,9401],{"class":476},[152,11684,11685],{"class":285}," Sanguo\n",[152,11687,11688],{"class":281,"line":329},[152,11689,3217],{"class":483},[152,11691,11692],{"class":281,"line":343},[152,11693,9427],{"class":483},[152,11695,11696,11698],{"class":281,"line":348},[152,11697,3636],{"class":476},[152,11699,9439],{"class":483},[152,11701,11702],{"class":281,"line":362},[152,11703,11704],{"class":483},"    string gender;\n",[152,11706,11707],{"class":281,"line":367},[152,11708,5637],{"class":483},[152,11710,11711],{"class":281,"line":381},[152,11712,11713],{"class":866},"\u002F\u002F定义排序函数\n",[152,11715,11716,11718,11720,11722,11725,11727,11729,11731,11733,11735],{"class":281,"line":386},[152,11717,7006],{"class":476},[152,11719,8958],{"class":285},[152,11721,1819],{"class":483},[152,11723,11724],{"class":285},"Sanguo",[152,11726,8160],{"class":476},[152,11728,2503],{"class":6858},[152,11730,2186],{"class":483},[152,11732,1822],{"class":476},[152,11734,8973],{"class":6858},[152,11736,1825],{"class":483},[152,11738,11739],{"class":281,"line":932},[152,11740,3217],{"class":483},[152,11742,11743,11745,11747,11749,11751,11753,11755,11757,11759,11762,11764],{"class":281,"line":942},[152,11744,4844],{"class":476},[152,11746,1819],{"class":483},[152,11748,1822],{"class":476},[152,11750,4675],{"class":483},[152,11752,1864],{"class":476},[152,11754,2000],{"class":293},[152,11756,4682],{"class":483},[152,11758,844],{"class":476},[152,11760,11761],{"class":483},"len;i",[152,11763,3943],{"class":476},[152,11765,1825],{"class":483},[152,11767,11768],{"class":281,"line":949},[152,11769,3681],{"class":483},[152,11771,11772,11775,11777,11779,11781,11783,11785,11787,11789,11791,11793,11795,11797,11799,11801],{"class":281,"line":954},[152,11773,11774],{"class":476},"     for",[152,11776,3322],{"class":483},[152,11778,1822],{"class":476},[152,11780,5053],{"class":483},[152,11782,1864],{"class":476},[152,11784,2000],{"class":293},[152,11786,5060],{"class":483},[152,11788,844],{"class":476},[152,11790,9000],{"class":483},[152,11792,2340],{"class":476},[152,11794,2026],{"class":293},[152,11796,2340],{"class":476},[152,11798,5193],{"class":483},[152,11800,3943],{"class":476},[152,11802,1825],{"class":483},[152,11804,11805],{"class":281,"line":959},[152,11806,11807],{"class":483},"     {\n",[152,11809,11810,11813,11816,11818,11821,11823,11826,11828,11830,11832,11834],{"class":281,"line":970},[152,11811,11812],{"class":476},"         if",[152,11814,11815],{"class":483}," ((s",[152,11817,2289],{"class":476},[152,11819,11820],{"class":483},"j)->age ",[152,11822,487],{"class":476},[152,11824,11825],{"class":483}," (s",[152,11827,2289],{"class":476},[152,11829,2275],{"class":483},[152,11831,2289],{"class":476},[152,11833,2026],{"class":293},[152,11835,11836],{"class":483},")->age)\n",[152,11838,11839],{"class":281,"line":979},[152,11840,11841],{"class":483},"         {\n",[152,11843,11844,11847,11849,11852,11854],{"class":281,"line":989},[152,11845,11846],{"class":483},"             Sanguo temp",[152,11848,8795],{"class":476},[152,11850,11851],{"class":483},"(s",[152,11853,2289],{"class":476},[152,11855,11856],{"class":483},"j);\n",[152,11858,11859,11862,11864,11866,11869,11871,11873,11875,11877,11879,11881],{"class":281,"line":996},[152,11860,11861],{"class":476},"             *",[152,11863,11851],{"class":483},[152,11865,2289],{"class":476},[152,11867,11868],{"class":483},"j)",[152,11870,8795],{"class":476},[152,11872,11851],{"class":483},[152,11874,2289],{"class":476},[152,11876,2275],{"class":483},[152,11878,2289],{"class":476},[152,11880,2026],{"class":293},[152,11882,4362],{"class":483},[152,11884,11885,11887,11889,11891,11893,11895,11897,11899,11901],{"class":281,"line":1001},[152,11886,11861],{"class":476},[152,11888,11851],{"class":483},[152,11890,2289],{"class":476},[152,11892,2275],{"class":483},[152,11894,2289],{"class":476},[152,11896,2026],{"class":293},[152,11898,2237],{"class":483},[152,11900,1864],{"class":476},[152,11902,5922],{"class":483},[152,11904,11905],{"class":281,"line":1006},[152,11906,11907],{"class":483},"         }\n",[152,11909,11910],{"class":281,"line":1018},[152,11911,11912],{"class":483},"     }\n",[152,11914,11915],{"class":281,"line":1027},[152,11916,3838],{"class":483},[152,11918,11919],{"class":281,"line":1037},[152,11920,3236],{"class":483},[152,11922,11923],{"class":281,"line":1044},[152,11924,11925],{"class":866},"\u002F\u002F定义打印函数\n",[152,11927,11928,11930,11932,11934,11936,11938,11940,11942,11944,11946],{"class":281,"line":1049},[152,11929,7006],{"class":476},[152,11931,11247],{"class":285},[152,11933,1819],{"class":483},[152,11935,11724],{"class":285},[152,11937,8160],{"class":476},[152,11939,2503],{"class":6858},[152,11941,2186],{"class":483},[152,11943,1822],{"class":476},[152,11945,8973],{"class":6858},[152,11947,1825],{"class":483},[152,11949,11950],{"class":281,"line":1054},[152,11951,3217],{"class":483},[152,11953,11954,11956,11958,11960,11962,11964,11966,11968,11970,11972,11974],{"class":281,"line":1065},[152,11955,4844],{"class":476},[152,11957,3322],{"class":483},[152,11959,1822],{"class":476},[152,11961,4675],{"class":483},[152,11963,1864],{"class":476},[152,11965,2000],{"class":293},[152,11967,4682],{"class":483},[152,11969,844],{"class":476},[152,11971,11761],{"class":483},[152,11973,3943],{"class":476},[152,11975,1825],{"class":483},[152,11977,11978],{"class":281,"line":1074},[152,11979,3681],{"class":483},[152,11981,11982,11984,11986,11988,11990,11993,11995,11997,11999,12002,12004,12006,12008,12011,12013,12015,12017,12020,12022,12024,12026,12029,12031,12033,12035,12038,12040],{"class":281,"line":1084},[152,11983,5094],{"class":483},[152,11985,2848],{"class":476},[152,11987,2059],{"class":289},[152,11989,2905],{"class":293},[152,11991,11992],{"class":289},"姓名：\"",[152,11994,2848],{"class":476},[152,11996,11851],{"class":483},[152,11998,2289],{"class":476},[152,12000,12001],{"class":483},"i)->name",[152,12003,2848],{"class":476},[152,12005,2059],{"class":289},[152,12007,2905],{"class":293},[152,12009,12010],{"class":289},"年龄：\"",[152,12012,2848],{"class":476},[152,12014,11851],{"class":483},[152,12016,2289],{"class":476},[152,12018,12019],{"class":483},"i)->age",[152,12021,2848],{"class":476},[152,12023,2059],{"class":289},[152,12025,2905],{"class":293},[152,12027,12028],{"class":289},"性别：\"",[152,12030,2848],{"class":476},[152,12032,11851],{"class":483},[152,12034,2289],{"class":476},[152,12036,12037],{"class":483},"i)->gender",[152,12039,2848],{"class":476},[152,12041,2870],{"class":483},[152,12043,12044],{"class":281,"line":1091},[152,12045,3838],{"class":483},[152,12047,12048],{"class":281,"line":1096},[152,12049,3236],{"class":483},[152,12051,12052,12054,12056],{"class":281,"line":1101},[152,12053,1822],{"class":476},[152,12055,3624],{"class":285},[152,12057,3627],{"class":483},[152,12059,12060],{"class":281,"line":1112},[152,12061,3217],{"class":483},[152,12063,12064],{"class":281,"line":1121},[152,12065,12066],{"class":866},"    \u002F\u002F定义结构体变量\n",[152,12068,12069,12072,12074,12076],{"class":281,"line":1131},[152,12070,12071],{"class":483},"    Sanguo s1[",[152,12073,2127],{"class":293},[152,12075,2746],{"class":483},[152,12077,6550],{"class":476},[152,12079,12080],{"class":281,"line":1138},[152,12081,3681],{"class":483},[152,12083,12084,12086,12088,12090,12092,12094,12096],{"class":281,"line":1143},[152,12085,6559],{"class":483},[152,12087,11568],{"class":289},[152,12089,2186],{"class":483},[152,12091,2583],{"class":293},[152,12093,2186],{"class":483},[152,12095,11577],{"class":289},[152,12097,6572],{"class":483},[152,12099,12100,12102,12104,12106,12108,12110,12112],{"class":281,"line":1148},[152,12101,6559],{"class":483},[152,12103,11586],{"class":289},[152,12105,2186],{"class":483},[152,12107,2558],{"class":293},[152,12109,2186],{"class":483},[152,12111,11577],{"class":289},[152,12113,6572],{"class":483},[152,12115,12116,12118,12120,12122,12124,12126,12128],{"class":281,"line":1159},[152,12117,6559],{"class":483},[152,12119,11603],{"class":289},[152,12121,2186],{"class":483},[152,12123,2508],{"class":293},[152,12125,2186],{"class":483},[152,12127,11577],{"class":289},[152,12129,6572],{"class":483},[152,12131,12132,12134,12136,12138,12140,12142,12144],{"class":281,"line":1168},[152,12133,6559],{"class":483},[152,12135,11620],{"class":289},[152,12137,2186],{"class":483},[152,12139,2533],{"class":293},[152,12141,2186],{"class":483},[152,12143,11577],{"class":289},[152,12145,6572],{"class":483},[152,12147,12148,12150,12152,12154,12156,12158,12160],{"class":281,"line":1178},[152,12149,6559],{"class":483},[152,12151,11637],{"class":289},[152,12153,2186],{"class":483},[152,12155,2483],{"class":293},[152,12157,2186],{"class":483},[152,12159,11646],{"class":289},[152,12161,6572],{"class":483},[152,12163,12164],{"class":281,"line":1185},[152,12165,6593],{"class":483},[152,12167,12168,12170,12172,12174,12177,12179,12182,12184],{"class":281,"line":1190},[152,12169,3636],{"class":476},[152,12171,8973],{"class":483},[152,12173,5845],{"class":476},[152,12175,12176],{"class":483},"(s1)",[152,12178,5851],{"class":476},[152,12180,12181],{"class":483},"(s1[",[152,12183,2000],{"class":293},[152,12185,5498],{"class":483},[152,12187,12188,12191,12193,12196,12198,12201,12204,12206],{"class":281,"line":1195},[152,12189,12190],{"class":483},"    Sanguo ",[152,12192,2263],{"class":476},[152,12194,12195],{"class":483},"s ",[152,12197,1864],{"class":476},[152,12199,12200],{"class":476}," &",[152,12202,12203],{"class":483},"s1[",[152,12205,2000],{"class":293},[152,12207,6332],{"class":483},[152,12209,12210],{"class":281,"line":1206},[152,12211,12212],{"class":866},"    \u002F\u002F排序前：\n",[152,12214,12215,12217,12219,12222,12224],{"class":281,"line":1215},[152,12216,8171],{"class":483},[152,12218,2848],{"class":476},[152,12220,12221],{"class":289}," \"排序前：\"",[152,12223,3116],{"class":476},[152,12225,10472],{"class":483},[152,12227,12228,12230],{"class":281,"line":1225},[152,12229,11531],{"class":285},[152,12231,12232],{"class":483},"(s,len);\n",[152,12234,12235],{"class":281,"line":1232},[152,12236,12237],{"class":866},"    \u002F\u002F调用排序函数\n",[152,12239,12240,12242],{"class":281,"line":1237},[152,12241,9240],{"class":285},[152,12243,12232],{"class":483},[152,12245,12246],{"class":281,"line":1242},[152,12247,12248],{"class":866},"    \u002F\u002F排序后\n",[152,12250,12251,12253,12255,12258,12260],{"class":281,"line":1253},[152,12252,8171],{"class":483},[152,12254,2848],{"class":476},[152,12256,12257],{"class":289}," \"排序后：\"",[152,12259,3116],{"class":476},[152,12261,10472],{"class":483},[152,12263,12264,12266],{"class":281,"line":1262},[152,12265,11531],{"class":285},[152,12267,12232],{"class":483},[152,12269,12270],{"class":281,"line":1272},[152,12271,3236],{"class":483},[19,12273,12274,12275,12277],{},"注意：使用指针时直接用传首地址**&s",[152,12276,2000],{},"**",[1736,12279,12280],{},"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":275,"searchDepth":303,"depth":303,"links":12282},[12283,12284,12285,12286,12287,12288,12289],{"id":9345,"depth":303,"text":9346},{"id":9697,"depth":303,"text":9698},{"id":9966,"depth":303,"text":9967},{"id":10131,"depth":303,"text":10132},{"id":10347,"depth":303,"text":10348},{"id":10668,"depth":303,"text":10669},{"id":10896,"depth":303,"text":10897},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9334,"description":9342},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12296,"title":12297,"body":12298,"description":275,"extension":1744,"meta":13641,"navigation":306,"path":13642,"seo":13643,"stem":13644,"__hash__":13645},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12299,"toc":13635},[12300,12303,12307,12313,12327,12332,12335,12339,12346,12352,12355,12362,12368,12373,12376,12379,12382,12946,12949,12963,12967,12972,12988,13128,13131,13137,13140,13145,13153,13261,13264,13269,13272,13277,13280,13286,13289,13632],[10,12301,12297],{"id":12302},"_5程序内存模型",[1760,12304,12306],{"id":12305},"_51内存分区模型","5.1内存分区模型",[19,12308,12309,12310],{},"C++程序在执行时，将内存大方向划分为",[694,12311,12312],{},"4个区域",[698,12314,12315,12318,12321,12324],{},[419,12316,12317],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[419,12319,12320],{},"全局区：存放全局变量和静态变量以及常量",[419,12322,12323],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[419,12325,12326],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12328,12329],{},[694,12330,12331],{},"内存四区意义：",[19,12333,12334],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[14,12336,12338],{"id":12337},"_511程序运行前","5.1.1程序运行前",[19,12340,12341,12342,12345],{},"​\t在程序编译后，生成了exe可执行程序，",[694,12343,12344],{},"未执行该程序前","分为两个区域",[19,12347,12348,12349],{},"​\t",[694,12350,12351],{},"代码区：",[19,12353,12354],{},"​\t\t存放 CPU 执行的机器指令",[19,12356,12357,12358,12361],{},"​\t\t代码区是",[694,12359,12360],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12363,12357,12364,12367],{},[694,12365,12366],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12369,12348,12370],{},[694,12371,12372],{},"全局区：",[19,12374,12375],{},"​\t\t全局变量和静态变量存放在此.",[19,12377,12378],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12380,12381],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[270,12383,12385],{"className":1807,"code":12384,"language":1809,"meta":275,"style":275},"\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",[277,12386,12387,12392,12405,12418,12422,12427,12442,12457,12461,12470,12474,12479,12492,12505,12509,12514,12540,12566,12570,12597,12623,12627,12632,12648,12663,12667,12693,12719,12723,12748,12773,12777,12803,12829,12833,12849,12864,12890,12916,12920,12930,12934,12942],{"__ignoreMap":275},[152,12388,12389],{"class":281,"line":282},[152,12390,12391],{"class":866},"\u002F\u002F全局变量\n",[152,12393,12394,12396,12399,12401,12403],{"class":281,"line":303},[152,12395,1822],{"class":476},[152,12397,12398],{"class":483}," g_a ",[152,12400,1864],{"class":476},[152,12402,3689],{"class":293},[152,12404,2965],{"class":483},[152,12406,12407,12409,12412,12414,12416],{"class":281,"line":310},[152,12408,1822],{"class":476},[152,12410,12411],{"class":483}," g_b ",[152,12413,1864],{"class":476},[152,12415,3689],{"class":293},[152,12417,2965],{"class":483},[152,12419,12420],{"class":281,"line":324},[152,12421,307],{"emptyLinePlaceholder":306},[152,12423,12424],{"class":281,"line":329},[152,12425,12426],{"class":866},"\u002F\u002F全局常量\n",[152,12428,12429,12431,12433,12436,12438,12440],{"class":281,"line":343},[152,12430,8434],{"class":476},[152,12432,4033],{"class":476},[152,12434,12435],{"class":483}," c_g_a ",[152,12437,1864],{"class":476},[152,12439,3689],{"class":293},[152,12441,2965],{"class":483},[152,12443,12444,12446,12448,12451,12453,12455],{"class":281,"line":348},[152,12445,8434],{"class":476},[152,12447,4033],{"class":476},[152,12449,12450],{"class":483}," c_g_b ",[152,12452,1864],{"class":476},[152,12454,3689],{"class":293},[152,12456,2965],{"class":483},[152,12458,12459],{"class":281,"line":362},[152,12460,307],{"emptyLinePlaceholder":306},[152,12462,12463,12465,12467],{"class":281,"line":367},[152,12464,1822],{"class":476},[152,12466,3624],{"class":285},[152,12468,12469],{"class":483},"() {\n",[152,12471,12472],{"class":281,"line":381},[152,12473,307],{"emptyLinePlaceholder":306},[152,12475,12476],{"class":281,"line":386},[152,12477,12478],{"class":866},"    \u002F\u002F局部变量\n",[152,12480,12481,12483,12486,12488,12490],{"class":281,"line":932},[152,12482,3636],{"class":476},[152,12484,12485],{"class":483}," a ",[152,12487,1864],{"class":476},[152,12489,3689],{"class":293},[152,12491,2965],{"class":483},[152,12493,12494,12496,12499,12501,12503],{"class":281,"line":942},[152,12495,3636],{"class":476},[152,12497,12498],{"class":483}," b ",[152,12500,1864],{"class":476},[152,12502,3689],{"class":293},[152,12504,2965],{"class":483},[152,12506,12507],{"class":281,"line":949},[152,12508,307],{"emptyLinePlaceholder":306},[152,12510,12511],{"class":281,"line":954},[152,12512,12513],{"class":866},"    \u002F\u002F打印地址\n",[152,12515,12516,12518,12520,12523,12525,12527,12529,12531,12533,12536,12538],{"class":281,"line":959},[152,12517,8171],{"class":483},[152,12519,2848],{"class":476},[152,12521,12522],{"class":289}," \"局部变量a地址为： \"",[152,12524,3116],{"class":476},[152,12526,3322],{"class":483},[152,12528,1822],{"class":476},[152,12530,2237],{"class":483},[152,12532,2161],{"class":476},[152,12534,12535],{"class":483},"a ",[152,12537,2848],{"class":476},[152,12539,10472],{"class":483},[152,12541,12542,12544,12546,12549,12551,12553,12555,12557,12559,12562,12564],{"class":281,"line":970},[152,12543,8171],{"class":483},[152,12545,2848],{"class":476},[152,12547,12548],{"class":289}," \"局部变量b地址为： \"",[152,12550,3116],{"class":476},[152,12552,3322],{"class":483},[152,12554,1822],{"class":476},[152,12556,2237],{"class":483},[152,12558,2161],{"class":476},[152,12560,12561],{"class":483},"b ",[152,12563,2848],{"class":476},[152,12565,10472],{"class":483},[152,12567,12568],{"class":281,"line":979},[152,12569,307],{"emptyLinePlaceholder":306},[152,12571,12572,12574,12576,12579,12581,12584,12586,12588,12590,12593,12595],{"class":281,"line":989},[152,12573,8171],{"class":483},[152,12575,2848],{"class":476},[152,12577,12578],{"class":289}," \"全局变量g_a地址为： \"",[152,12580,3116],{"class":476},[152,12582,12583],{"class":483},"  (",[152,12585,1822],{"class":476},[152,12587,2237],{"class":483},[152,12589,2161],{"class":476},[152,12591,12592],{"class":483},"g_a ",[152,12594,2848],{"class":476},[152,12596,10472],{"class":483},[152,12598,12599,12601,12603,12606,12608,12610,12612,12614,12616,12619,12621],{"class":281,"line":996},[152,12600,8171],{"class":483},[152,12602,2848],{"class":476},[152,12604,12605],{"class":289}," \"全局变量g_b地址为： \"",[152,12607,3116],{"class":476},[152,12609,12583],{"class":483},[152,12611,1822],{"class":476},[152,12613,2237],{"class":483},[152,12615,2161],{"class":476},[152,12617,12618],{"class":483},"g_b ",[152,12620,2848],{"class":476},[152,12622,10472],{"class":483},[152,12624,12625],{"class":281,"line":1001},[152,12626,307],{"emptyLinePlaceholder":306},[152,12628,12629],{"class":281,"line":1006},[152,12630,12631],{"class":866},"    \u002F\u002F静态变量\n",[152,12633,12634,12637,12639,12642,12644,12646],{"class":281,"line":1018},[152,12635,12636],{"class":476},"    static",[152,12638,4033],{"class":476},[152,12640,12641],{"class":483}," s_a ",[152,12643,1864],{"class":476},[152,12645,3689],{"class":293},[152,12647,2965],{"class":483},[152,12649,12650,12652,12654,12657,12659,12661],{"class":281,"line":1027},[152,12651,12636],{"class":476},[152,12653,4033],{"class":476},[152,12655,12656],{"class":483}," s_b ",[152,12658,1864],{"class":476},[152,12660,3689],{"class":293},[152,12662,2965],{"class":483},[152,12664,12665],{"class":281,"line":1037},[152,12666,307],{"emptyLinePlaceholder":306},[152,12668,12669,12671,12673,12676,12678,12680,12682,12684,12686,12689,12691],{"class":281,"line":1044},[152,12670,8171],{"class":483},[152,12672,2848],{"class":476},[152,12674,12675],{"class":289}," \"静态变量s_a地址为： \"",[152,12677,3116],{"class":476},[152,12679,3322],{"class":483},[152,12681,1822],{"class":476},[152,12683,2237],{"class":483},[152,12685,2161],{"class":476},[152,12687,12688],{"class":483},"s_a ",[152,12690,2848],{"class":476},[152,12692,10472],{"class":483},[152,12694,12695,12697,12699,12702,12704,12706,12708,12710,12712,12715,12717],{"class":281,"line":1049},[152,12696,8171],{"class":483},[152,12698,2848],{"class":476},[152,12700,12701],{"class":289}," \"静态变量s_b地址为： \"",[152,12703,3116],{"class":476},[152,12705,3322],{"class":483},[152,12707,1822],{"class":476},[152,12709,2237],{"class":483},[152,12711,2161],{"class":476},[152,12713,12714],{"class":483},"s_b ",[152,12716,2848],{"class":476},[152,12718,10472],{"class":483},[152,12720,12721],{"class":281,"line":1054},[152,12722,307],{"emptyLinePlaceholder":306},[152,12724,12725,12727,12729,12732,12734,12736,12738,12740,12742,12744,12746],{"class":281,"line":1065},[152,12726,8171],{"class":483},[152,12728,2848],{"class":476},[152,12730,12731],{"class":289}," \"字符串常量地址为： \"",[152,12733,3116],{"class":476},[152,12735,3322],{"class":483},[152,12737,1822],{"class":476},[152,12739,2237],{"class":483},[152,12741,2161],{"class":476},[152,12743,2865],{"class":289},[152,12745,3116],{"class":476},[152,12747,10472],{"class":483},[152,12749,12750,12752,12754,12756,12758,12760,12762,12764,12766,12769,12771],{"class":281,"line":1074},[152,12751,8171],{"class":483},[152,12753,2848],{"class":476},[152,12755,12731],{"class":289},[152,12757,3116],{"class":476},[152,12759,3322],{"class":483},[152,12761,1822],{"class":476},[152,12763,2237],{"class":483},[152,12765,2161],{"class":476},[152,12767,12768],{"class":289},"\"hello world1\"",[152,12770,3116],{"class":476},[152,12772,10472],{"class":483},[152,12774,12775],{"class":281,"line":1084},[152,12776,307],{"emptyLinePlaceholder":306},[152,12778,12779,12781,12783,12786,12788,12790,12792,12794,12796,12799,12801],{"class":281,"line":1091},[152,12780,8171],{"class":483},[152,12782,2848],{"class":476},[152,12784,12785],{"class":289}," \"全局常量c_g_a地址为： \"",[152,12787,3116],{"class":476},[152,12789,3322],{"class":483},[152,12791,1822],{"class":476},[152,12793,2237],{"class":483},[152,12795,2161],{"class":476},[152,12797,12798],{"class":483},"c_g_a ",[152,12800,2848],{"class":476},[152,12802,10472],{"class":483},[152,12804,12805,12807,12809,12812,12814,12816,12818,12820,12822,12825,12827],{"class":281,"line":1096},[152,12806,8171],{"class":483},[152,12808,2848],{"class":476},[152,12810,12811],{"class":289}," \"全局常量c_g_b地址为： \"",[152,12813,3116],{"class":476},[152,12815,3322],{"class":483},[152,12817,1822],{"class":476},[152,12819,2237],{"class":483},[152,12821,2161],{"class":476},[152,12823,12824],{"class":483},"c_g_b ",[152,12826,2848],{"class":476},[152,12828,10472],{"class":483},[152,12830,12831],{"class":281,"line":1101},[152,12832,307],{"emptyLinePlaceholder":306},[152,12834,12835,12838,12840,12843,12845,12847],{"class":281,"line":1112},[152,12836,12837],{"class":476},"    const",[152,12839,4033],{"class":476},[152,12841,12842],{"class":483}," c_l_a ",[152,12844,1864],{"class":476},[152,12846,3689],{"class":293},[152,12848,2965],{"class":483},[152,12850,12851,12853,12855,12858,12860,12862],{"class":281,"line":1121},[152,12852,12837],{"class":476},[152,12854,4033],{"class":476},[152,12856,12857],{"class":483}," c_l_b ",[152,12859,1864],{"class":476},[152,12861,3689],{"class":293},[152,12863,2965],{"class":483},[152,12865,12866,12868,12870,12873,12875,12877,12879,12881,12883,12886,12888],{"class":281,"line":1131},[152,12867,8171],{"class":483},[152,12869,2848],{"class":476},[152,12871,12872],{"class":289}," \"局部常量c_l_a地址为： \"",[152,12874,3116],{"class":476},[152,12876,3322],{"class":483},[152,12878,1822],{"class":476},[152,12880,2237],{"class":483},[152,12882,2161],{"class":476},[152,12884,12885],{"class":483},"c_l_a ",[152,12887,2848],{"class":476},[152,12889,10472],{"class":483},[152,12891,12892,12894,12896,12899,12901,12903,12905,12907,12909,12912,12914],{"class":281,"line":1138},[152,12893,8171],{"class":483},[152,12895,2848],{"class":476},[152,12897,12898],{"class":289}," \"局部常量c_l_b地址为： \"",[152,12900,3116],{"class":476},[152,12902,3322],{"class":483},[152,12904,1822],{"class":476},[152,12906,2237],{"class":483},[152,12908,2161],{"class":476},[152,12910,12911],{"class":483},"c_l_b ",[152,12913,2848],{"class":476},[152,12915,10472],{"class":483},[152,12917,12918],{"class":281,"line":1143},[152,12919,307],{"emptyLinePlaceholder":306},[152,12921,12922,12924,12926,12928],{"class":281,"line":1148},[152,12923,3954],{"class":285},[152,12925,1819],{"class":483},[152,12927,3959],{"class":289},[152,12929,4362],{"class":483},[152,12931,12932],{"class":281,"line":1159},[152,12933,307],{"emptyLinePlaceholder":306},[152,12935,12936,12938,12940],{"class":281,"line":1168},[152,12937,5732],{"class":476},[152,12939,5735],{"class":293},[152,12941,2965],{"class":483},[152,12943,12944],{"class":281,"line":1178},[152,12945,3236],{"class":483},[19,12947,12948],{},"总结：",[698,12950,12951,12954,12957,12960],{},[419,12952,12953],{},"c++中程序运行前分为全局区和代码区",[419,12955,12956],{},"代码区特点是共享和只读",[419,12958,12959],{},"全局区中存放全局变量、静态变量、常量",[419,12961,12962],{},"常量区中存放const修饰的全局常量和字符串常量",[14,12964,12966],{"id":12965},"_512程序运行后","5.1.2程序运行后",[416,12968,12969],{},[419,12970,12971],{},"栈区：",[698,12973,12974,12981],{},[419,12975,12976,12977,12980],{},"由编译器自动分配释放, 存放",[694,12978,12979],{},"函数的参数值,局部变量","等",[419,12982,12983,12984,12987],{},"注意事项：",[694,12985,12986],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[270,12989,12991],{"className":1807,"code":12990,"language":1809,"meta":275,"style":275},"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",[277,12992,12993,13004,13008,13023,13035,13039,13043,13051,13056,13071,13089,13106,13116,13124],{"__ignoreMap":275},[152,12994,12995,12997,12999,13002],{"class":281,"line":282},[152,12996,1822],{"class":476},[152,12998,8160],{"class":476},[152,13000,13001],{"class":285}," func",[152,13003,3627],{"class":483},[152,13005,13006],{"class":281,"line":303},[152,13007,3217],{"class":483},[152,13009,13010,13012,13014,13016,13018,13020],{"class":281,"line":310},[152,13011,3636],{"class":476},[152,13013,12485],{"class":483},[152,13015,1864],{"class":476},[152,13017,3689],{"class":293},[152,13019,1873],{"class":483},[152,13021,13022],{"class":866}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[152,13024,13025,13027,13029,13032],{"class":281,"line":324},[152,13026,5732],{"class":476},[152,13028,12200],{"class":476},[152,13030,13031],{"class":483},"a;",[152,13033,13034],{"class":866}," \u002F\u002F放回局部变量的地址\n",[152,13036,13037],{"class":281,"line":329},[152,13038,3236],{"class":483},[152,13040,13041],{"class":281,"line":343},[152,13042,307],{"emptyLinePlaceholder":306},[152,13044,13045,13047,13049],{"class":281,"line":348},[152,13046,1822],{"class":476},[152,13048,3624],{"class":285},[152,13050,12469],{"class":483},[152,13052,13053],{"class":281,"line":362},[152,13054,13055],{"class":866},"    \u002F\u002F接受func的返回值\n",[152,13057,13058,13060,13062,13065,13067,13069],{"class":281,"line":367},[152,13059,3636],{"class":476},[152,13061,8160],{"class":476},[152,13063,13064],{"class":483},"p ",[152,13066,1864],{"class":476},[152,13068,13001],{"class":285},[152,13070,7278],{"class":483},[152,13072,13073,13075,13077,13079,13081,13083,13086],{"class":281,"line":381},[152,13074,8171],{"class":483},[152,13076,2848],{"class":476},[152,13078,8160],{"class":476},[152,13080,13064],{"class":483},[152,13082,2848],{"class":476},[152,13084,13085],{"class":483}," endl;",[152,13087,13088],{"class":866}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[152,13090,13091,13093,13095,13097,13099,13101,13103],{"class":281,"line":386},[152,13092,8171],{"class":483},[152,13094,2848],{"class":476},[152,13096,8160],{"class":476},[152,13098,13064],{"class":483},[152,13100,2848],{"class":476},[152,13102,13085],{"class":483},[152,13104,13105],{"class":866}," \u002F\u002F第二次这个数据不再保留\n",[152,13107,13108,13110,13112,13114],{"class":281,"line":932},[152,13109,3954],{"class":285},[152,13111,1819],{"class":483},[152,13113,3959],{"class":289},[152,13115,4362],{"class":483},[152,13117,13118,13120,13122],{"class":281,"line":942},[152,13119,5732],{"class":476},[152,13121,5735],{"class":293},[152,13123,2965],{"class":483},[152,13125,13126],{"class":281,"line":949},[152,13127,3236],{"class":483},[19,13129,13130],{},"输出结果：",[19,13132,13133],{},[401,13134],{"alt":13135,"src":13136},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13138,13139],{},"总结：不要返回局部变量的地址",[416,13141,13142],{"start":303},[419,13143,13144],{},"堆区",[698,13146,13147,13150],{},[419,13148,13149],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[419,13151,13152],{},"在c++中主要利用new在堆区开辟内存",[270,13154,13156],{"className":1807,"code":13155,"language":1809,"meta":275,"style":275},"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",[277,13157,13158,13173,13177,13182,13203,13210,13214,13222,13226,13231,13245,13257],{"__ignoreMap":275},[152,13159,13160,13162,13165,13168,13170],{"class":281,"line":282},[152,13161,1822],{"class":476},[152,13163,13164],{"class":476},"  *",[152,13166,13167],{"class":285},"func",[152,13169,4077],{"class":483},[152,13171,13172],{"class":866},"  \u002F\u002F函数返回指针\n",[152,13174,13175],{"class":281,"line":303},[152,13176,3217],{"class":483},[152,13178,13179],{"class":281,"line":310},[152,13180,13181],{"class":866},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[152,13183,13184,13186,13188,13190,13192,13195,13197,13199,13201],{"class":281,"line":324},[152,13185,5789],{"class":476},[152,13187,8160],{"class":476},[152,13189,19],{"class":483},[152,13191,1864],{"class":476},[152,13193,13194],{"class":476}," new",[152,13196,4033],{"class":476},[152,13198,1819],{"class":483},[152,13200,2254],{"class":293},[152,13202,4362],{"class":483},[152,13204,13205,13207],{"class":281,"line":329},[152,13206,6023],{"class":476},[152,13208,13209],{"class":483}," p;\n",[152,13211,13212],{"class":281,"line":343},[152,13213,3236],{"class":483},[152,13215,13216,13218,13220],{"class":281,"line":348},[152,13217,1822],{"class":476},[152,13219,3624],{"class":285},[152,13221,3627],{"class":483},[152,13223,13224],{"class":281,"line":362},[152,13225,3217],{"class":483},[152,13227,13228],{"class":281,"line":367},[152,13229,13230],{"class":866},"    \u002F\u002F在堆区开辟数据\n",[152,13232,13233,13235,13237,13239,13241,13243],{"class":281,"line":381},[152,13234,3636],{"class":476},[152,13236,8160],{"class":476},[152,13238,19],{"class":483},[152,13240,1864],{"class":476},[152,13242,13167],{"class":285},[152,13244,7278],{"class":483},[152,13246,13247,13249,13251,13253,13255],{"class":281,"line":386},[152,13248,3222],{"class":483},[152,13250,8061],{"class":476},[152,13252,19],{"class":483},[152,13254,2848],{"class":476},[152,13256,2870],{"class":483},[152,13258,13259],{"class":281,"line":932},[152,13260,3236],{"class":483},[19,13262,13263],{},"图片展示：",[19,13265,13266],{},[401,13267],{"alt":13135,"src":13268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13270,13271],{},"堆区内存由程序员管生死！！！",[416,13273,13274],{"start":310},[419,13275,13276],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13278,13279],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13281,13282,13283],{},"​语法：",[277,13284,13285],{}," new 数据类型",[19,13287,13288],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[270,13290,13292],{"className":1807,"code":13291,"language":1809,"meta":275,"style":275},"\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",[277,13293,13294,13299,13309,13313,13318,13323,13345,13349,13357,13361,13375,13387,13399,13411,13416,13421,13432,13436,13441,13449,13453,13458,13480,13506,13510,13528,13532,13558,13562,13574,13578,13583,13588,13596,13600,13604,13612,13616,13622,13628],{"__ignoreMap":275},[152,13295,13296],{"class":281,"line":282},[152,13297,13298],{"class":866},"\u002F\u002F1.new的基本语法\n",[152,13300,13301,13303,13305,13307],{"class":281,"line":303},[152,13302,1822],{"class":476},[152,13304,8160],{"class":476},[152,13306,13167],{"class":285},[152,13308,3627],{"class":483},[152,13310,13311],{"class":281,"line":310},[152,13312,3217],{"class":483},[152,13314,13315],{"class":281,"line":324},[152,13316,13317],{"class":866},"    \u002F\u002F在堆区创建整型数据\n",[152,13319,13320],{"class":281,"line":329},[152,13321,13322],{"class":866},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[152,13324,13325,13327,13329,13331,13334,13336,13338,13340,13342],{"class":281,"line":343},[152,13326,3636],{"class":476},[152,13328,8160],{"class":476},[152,13330,19],{"class":483},[152,13332,13333],{"class":476},"=new",[152,13335,4033],{"class":476},[152,13337,1819],{"class":483},[152,13339,2254],{"class":293},[152,13341,7608],{"class":483},[152,13343,13344],{"class":866},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[152,13346,13347],{"class":281,"line":348},[152,13348,3236],{"class":483},[152,13350,13351,13353,13355],{"class":281,"line":362},[152,13352,7006],{"class":476},[152,13354,7230],{"class":285},[152,13356,3627],{"class":483},[152,13358,13359],{"class":281,"line":367},[152,13360,3217],{"class":483},[152,13362,13363,13365,13367,13369,13371,13373],{"class":281,"line":381},[152,13364,3636],{"class":476},[152,13366,8160],{"class":476},[152,13368,19],{"class":483},[152,13370,1864],{"class":476},[152,13372,13167],{"class":285},[152,13374,7278],{"class":483},[152,13376,13377,13379,13381,13383,13385],{"class":281,"line":386},[152,13378,3222],{"class":483},[152,13380,8061],{"class":476},[152,13382,19],{"class":483},[152,13384,2848],{"class":476},[152,13386,2870],{"class":483},[152,13388,13389,13391,13393,13395,13397],{"class":281,"line":932},[152,13390,3222],{"class":483},[152,13392,8061],{"class":476},[152,13394,19],{"class":483},[152,13396,2848],{"class":476},[152,13398,2870],{"class":483},[152,13400,13401,13403,13405,13407,13409],{"class":281,"line":942},[152,13402,3222],{"class":483},[152,13404,8061],{"class":476},[152,13406,19],{"class":483},[152,13408,2848],{"class":476},[152,13410,2870],{"class":483},[152,13412,13413],{"class":281,"line":949},[152,13414,13415],{"class":866},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[152,13417,13418],{"class":281,"line":954},[152,13419,13420],{"class":866},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[152,13422,13423,13426,13429],{"class":281,"line":959},[152,13424,13425],{"class":476},"    delete",[152,13427,13428],{"class":483}," p;",[152,13430,13431],{"class":866},"\u002F\u002F删除这块地址\n",[152,13433,13434],{"class":281,"line":970},[152,13435,3236],{"class":483},[152,13437,13438],{"class":281,"line":979},[152,13439,13440],{"class":866},"\u002F\u002F2.在堆区利用new开辟数组\n",[152,13442,13443,13445,13447],{"class":281,"line":989},[152,13444,7006],{"class":476},[152,13446,7299],{"class":285},[152,13448,3627],{"class":483},[152,13450,13451],{"class":281,"line":996},[152,13452,3217],{"class":483},[152,13454,13455],{"class":281,"line":1001},[152,13456,13457],{"class":866},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[152,13459,13460,13462,13464,13466,13468,13470,13472,13474,13477],{"class":281,"line":1006},[152,13461,3636],{"class":476},[152,13463,8160],{"class":476},[152,13465,5522],{"class":483},[152,13467,13333],{"class":476},[152,13469,4033],{"class":476},[152,13471,2697],{"class":483},[152,13473,2254],{"class":293},[152,13475,13476],{"class":483},"];",[152,13478,13479],{"class":866},"\u002F\u002F10代表数组有10个元素\n",[152,13481,13482,13484,13486,13488,13490,13492,13494,13496,13498,13500,13502,13504],{"class":281,"line":1018},[152,13483,4844],{"class":476},[152,13485,3322],{"class":483},[152,13487,1822],{"class":476},[152,13489,4675],{"class":483},[152,13491,1864],{"class":476},[152,13493,2000],{"class":293},[152,13495,4682],{"class":483},[152,13497,844],{"class":476},[152,13499,2254],{"class":293},[152,13501,4682],{"class":483},[152,13503,3943],{"class":476},[152,13505,1825],{"class":483},[152,13507,13508],{"class":281,"line":1027},[152,13509,3681],{"class":483},[152,13511,13512,13515,13517,13519,13521,13523,13525],{"class":281,"line":1037},[152,13513,13514],{"class":483},"        arr[i]",[152,13516,1864],{"class":476},[152,13518,2249],{"class":483},[152,13520,2289],{"class":476},[152,13522,2119],{"class":293},[152,13524,1873],{"class":483},[152,13526,13527],{"class":866},"\u002F\u002F给10个元素赋值100～109\n",[152,13529,13530],{"class":281,"line":1044},[152,13531,3838],{"class":483},[152,13533,13534,13536,13538,13540,13542,13544,13546,13548,13550,13552,13554,13556],{"class":281,"line":1049},[152,13535,4844],{"class":476},[152,13537,3322],{"class":483},[152,13539,1822],{"class":476},[152,13541,4675],{"class":483},[152,13543,1864],{"class":476},[152,13545,2000],{"class":293},[152,13547,4682],{"class":483},[152,13549,844],{"class":476},[152,13551,2254],{"class":293},[152,13553,4682],{"class":483},[152,13555,3943],{"class":476},[152,13557,1825],{"class":483},[152,13559,13560],{"class":281,"line":1054},[152,13561,3681],{"class":483},[152,13563,13564,13566,13568,13570,13572],{"class":281,"line":1065},[152,13565,5094],{"class":483},[152,13567,2848],{"class":476},[152,13569,5996],{"class":483},[152,13571,2848],{"class":476},[152,13573,2870],{"class":483},[152,13575,13576],{"class":281,"line":1074},[152,13577,3838],{"class":483},[152,13579,13580],{"class":281,"line":1084},[152,13581,13582],{"class":866},"    \u002F\u002F释放堆区数组\n",[152,13584,13585],{"class":281,"line":1091},[152,13586,13587],{"class":866},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[152,13589,13590,13593],{"class":281,"line":1096},[152,13591,13592],{"class":476},"    delete[]",[152,13594,13595],{"class":483}," arr;\n",[152,13597,13598],{"class":281,"line":1101},[152,13599,3236],{"class":483},[152,13601,13602],{"class":281,"line":1112},[152,13603,307],{"emptyLinePlaceholder":306},[152,13605,13606,13608,13610],{"class":281,"line":1121},[152,13607,1822],{"class":476},[152,13609,3624],{"class":285},[152,13611,3627],{"class":483},[152,13613,13614],{"class":281,"line":1131},[152,13615,3217],{"class":483},[152,13617,13618,13620],{"class":281,"line":1138},[152,13619,7275],{"class":285},[152,13621,7278],{"class":483},[152,13623,13624,13626],{"class":281,"line":1143},[152,13625,7344],{"class":285},[152,13627,7278],{"class":483},[152,13629,13630],{"class":281,"line":1148},[152,13631,3236],{"class":483},[1736,13633,13634],{},"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":275,"searchDepth":303,"depth":303,"links":13636},[13637],{"id":12305,"depth":303,"text":12306,"children":13638},[13639,13640],{"id":12337,"depth":310,"text":12338},{"id":12965,"depth":310,"text":12966},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12297,"description":275},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13647,"title":13648,"body":13649,"description":275,"extension":1744,"meta":15130,"navigation":306,"path":15131,"seo":15132,"stem":15133,"__hash__":15134},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13650,"toc":15122},[13651,13654,13658,13661,13664,13833,13837,13842,13859,13864,14016,14020,14023,14026,14420,14424,14427,14432,14435,14747,14751,14757,14917,14919,14927,14931,14934,14941,15119],[10,13652,13648],{"id":13653},"_6引用",[1760,13655,13657],{"id":13656},"_61引用基本用法","6.1引用基本用法",[19,13659,13660],{},"引用的本质：给变量起别名",[19,13662,13663],{},"语法：数据类型 &别名=原名",[270,13665,13667],{"className":1807,"code":13666,"language":1809,"meta":275,"style":275},"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",[277,13668,13669,13677,13681,13693,13705,13709,13728,13747,13751,13762,13766,13785,13803,13807,13817,13821,13829],{"__ignoreMap":275},[152,13670,13671,13673,13675],{"class":281,"line":282},[152,13672,1822],{"class":476},[152,13674,3624],{"class":285},[152,13676,12469],{"class":483},[152,13678,13679],{"class":281,"line":303},[152,13680,307],{"emptyLinePlaceholder":306},[152,13682,13683,13685,13687,13689,13691],{"class":281,"line":310},[152,13684,3636],{"class":476},[152,13686,12485],{"class":483},[152,13688,1864],{"class":476},[152,13690,3689],{"class":293},[152,13692,2965],{"class":483},[152,13694,13695,13697,13699,13701,13703],{"class":281,"line":324},[152,13696,3636],{"class":476},[152,13698,12200],{"class":476},[152,13700,12561],{"class":483},[152,13702,1864],{"class":476},[152,13704,3104],{"class":483},[152,13706,13707],{"class":281,"line":329},[152,13708,307],{"emptyLinePlaceholder":306},[152,13710,13711,13713,13715,13718,13720,13722,13724,13726],{"class":281,"line":343},[152,13712,8171],{"class":483},[152,13714,2848],{"class":476},[152,13716,13717],{"class":289}," \"a = \"",[152,13719,3116],{"class":476},[152,13721,12485],{"class":483},[152,13723,2848],{"class":476},[152,13725,13085],{"class":483},[152,13727,8910],{"class":866},[152,13729,13730,13732,13734,13737,13739,13741,13743,13745],{"class":281,"line":348},[152,13731,8171],{"class":483},[152,13733,2848],{"class":476},[152,13735,13736],{"class":289}," \"b = \"",[152,13738,3116],{"class":476},[152,13740,12498],{"class":483},[152,13742,2848],{"class":476},[152,13744,13085],{"class":483},[152,13746,8910],{"class":866},[152,13748,13749],{"class":281,"line":362},[152,13750,307],{"emptyLinePlaceholder":306},[152,13752,13753,13756,13758,13760],{"class":281,"line":367},[152,13754,13755],{"class":483},"    b ",[152,13757,1864],{"class":476},[152,13759,7396],{"class":293},[152,13761,2965],{"class":483},[152,13763,13764],{"class":281,"line":381},[152,13765,307],{"emptyLinePlaceholder":306},[152,13767,13768,13770,13772,13774,13776,13778,13780,13782],{"class":281,"line":386},[152,13769,8171],{"class":483},[152,13771,2848],{"class":476},[152,13773,13717],{"class":289},[152,13775,3116],{"class":476},[152,13777,12485],{"class":483},[152,13779,2848],{"class":476},[152,13781,13085],{"class":483},[152,13783,13784],{"class":866},"\u002F\u002F100\n",[152,13786,13787,13789,13791,13793,13795,13797,13799,13801],{"class":281,"line":932},[152,13788,8171],{"class":483},[152,13790,2848],{"class":476},[152,13792,13736],{"class":289},[152,13794,3116],{"class":476},[152,13796,12498],{"class":483},[152,13798,2848],{"class":476},[152,13800,13085],{"class":483},[152,13802,13784],{"class":866},[152,13804,13805],{"class":281,"line":942},[152,13806,307],{"emptyLinePlaceholder":306},[152,13808,13809,13811,13813,13815],{"class":281,"line":949},[152,13810,3954],{"class":285},[152,13812,1819],{"class":483},[152,13814,3959],{"class":289},[152,13816,4362],{"class":483},[152,13818,13819],{"class":281,"line":954},[152,13820,307],{"emptyLinePlaceholder":306},[152,13822,13823,13825,13827],{"class":281,"line":959},[152,13824,5732],{"class":476},[152,13826,5735],{"class":293},[152,13828,2965],{"class":483},[152,13830,13831],{"class":281,"line":970},[152,13832,3236],{"class":483},[1760,13834,13836],{"id":13835},"_62引用的注意事项","6.2引用的注意事项",[416,13838,13839],{},[419,13840,13841],{},"引用必须要初始化",[270,13843,13845],{"className":1807,"code":13844,"language":1809,"meta":275,"style":275},"int &b;\u002F\u002F非常错误！\n",[277,13846,13847],{"__ignoreMap":275},[152,13848,13849,13851,13853,13856],{"class":281,"line":282},[152,13850,1822],{"class":476},[152,13852,12200],{"class":476},[152,13854,13855],{"class":483},"b;",[152,13857,13858],{"class":866},"\u002F\u002F非常错误！\n",[416,13860,13861],{"start":303},[419,13862,13863],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[270,13865,13867],{"className":1807,"code":13866,"language":1809,"meta":275,"style":275},"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",[277,13868,13869,13877,13889,13901,13909,13925,13938,13956,13974,13994,14004,14012],{"__ignoreMap":275},[152,13870,13871,13873,13875],{"class":281,"line":282},[152,13872,1822],{"class":476},[152,13874,3624],{"class":285},[152,13876,12469],{"class":483},[152,13878,13879,13881,13883,13885,13887],{"class":281,"line":303},[152,13880,3636],{"class":476},[152,13882,12485],{"class":483},[152,13884,1864],{"class":476},[152,13886,3689],{"class":293},[152,13888,2965],{"class":483},[152,13890,13891,13893,13895,13897,13899],{"class":281,"line":310},[152,13892,3636],{"class":476},[152,13894,12498],{"class":483},[152,13896,1864],{"class":476},[152,13898,10582],{"class":293},[152,13900,2965],{"class":483},[152,13902,13903,13906],{"class":281,"line":324},[152,13904,13905],{"class":866},"    \u002F\u002Fint &c;",[152,13907,13908],{"class":866}," \u002F\u002F错误，引用必须初始化\n",[152,13910,13911,13913,13915,13917,13919,13922],{"class":281,"line":329},[152,13912,3636],{"class":476},[152,13914,12200],{"class":476},[152,13916,4589],{"class":483},[152,13918,1864],{"class":476},[152,13920,13921],{"class":483}," a;",[152,13923,13924],{"class":866}," \u002F\u002F一旦初始化后，就不可以更改\n",[152,13926,13927,13930,13932,13935],{"class":281,"line":343},[152,13928,13929],{"class":483},"    c ",[152,13931,1864],{"class":476},[152,13933,13934],{"class":483}," b;",[152,13936,13937],{"class":866}," \u002F\u002F这是赋值操作，不是更改引用\n",[152,13939,13940,13942,13944,13946,13948,13950,13952,13954],{"class":281,"line":348},[152,13941,8171],{"class":483},[152,13943,2848],{"class":476},[152,13945,13717],{"class":289},[152,13947,3116],{"class":476},[152,13949,12485],{"class":483},[152,13951,2848],{"class":476},[152,13953,13085],{"class":483},[152,13955,8895],{"class":866},[152,13957,13958,13960,13962,13964,13966,13968,13970,13972],{"class":281,"line":362},[152,13959,8171],{"class":483},[152,13961,2848],{"class":476},[152,13963,13736],{"class":289},[152,13965,3116],{"class":476},[152,13967,12498],{"class":483},[152,13969,2848],{"class":476},[152,13971,13085],{"class":483},[152,13973,8895],{"class":866},[152,13975,13976,13978,13980,13983,13985,13988,13990,13992],{"class":281,"line":367},[152,13977,8171],{"class":483},[152,13979,2848],{"class":476},[152,13981,13982],{"class":289}," \"c = \"",[152,13984,3116],{"class":476},[152,13986,13987],{"class":483}," c ",[152,13989,2848],{"class":476},[152,13991,13085],{"class":483},[152,13993,8895],{"class":866},[152,13995,13996,13998,14000,14002],{"class":281,"line":381},[152,13997,3954],{"class":285},[152,13999,1819],{"class":483},[152,14001,3959],{"class":289},[152,14003,4362],{"class":483},[152,14005,14006,14008,14010],{"class":281,"line":386},[152,14007,5732],{"class":476},[152,14009,5735],{"class":293},[152,14011,2965],{"class":483},[152,14013,14014],{"class":281,"line":932},[152,14015,3236],{"class":483},[1760,14017,14019],{"id":14018},"_63引用做函数参数","6.3引用做函数参数",[19,14021,14022],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14024,14025],{},"优点：可以简化指针修改实参",[270,14027,14029],{"className":1807,"code":14028,"language":1809,"meta":275,"style":275},"\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",[277,14030,14031,14036,14059,14070,14080,14089,14093,14097,14102,14124,14136,14148,14158,14162,14166,14171,14193,14203,14211,14219,14223,14227,14235,14239,14251,14263,14267,14278,14304,14308,14328,14352,14356,14366,14390,14394,14404,14408,14416],{"__ignoreMap":275},[152,14032,14033],{"class":281,"line":282},[152,14034,14035],{"class":866},"\u002F\u002F1. 值传递\n",[152,14037,14038,14040,14043,14045,14047,14049,14052,14054,14056],{"class":281,"line":303},[152,14039,7006],{"class":476},[152,14041,14042],{"class":285}," mySwap01",[152,14044,1819],{"class":483},[152,14046,1822],{"class":476},[152,14048,3070],{"class":6858},[152,14050,14051],{"class":483},", ",[152,14053,1822],{"class":476},[152,14055,4476],{"class":6858},[152,14057,14058],{"class":483},") {\n",[152,14060,14061,14063,14066,14068],{"class":281,"line":310},[152,14062,3636],{"class":476},[152,14064,14065],{"class":483}," temp ",[152,14067,1864],{"class":476},[152,14069,3104],{"class":483},[152,14071,14072,14075,14077],{"class":281,"line":324},[152,14073,14074],{"class":483},"    a ",[152,14076,1864],{"class":476},[152,14078,14079],{"class":483}," b;\n",[152,14081,14082,14084,14086],{"class":281,"line":329},[152,14083,13755],{"class":483},[152,14085,1864],{"class":476},[152,14087,14088],{"class":483}," temp;\n",[152,14090,14091],{"class":281,"line":343},[152,14092,3236],{"class":483},[152,14094,14095],{"class":281,"line":348},[152,14096,307],{"emptyLinePlaceholder":306},[152,14098,14099],{"class":281,"line":362},[152,14100,14101],{"class":866},"\u002F\u002F2. 地址传递\n",[152,14103,14104,14106,14109,14111,14114,14116,14118,14120,14122],{"class":281,"line":367},[152,14105,7006],{"class":476},[152,14107,14108],{"class":285}," mySwap02",[152,14110,1819],{"class":483},[152,14112,14113],{"class":476},"int*",[152,14115,3070],{"class":6858},[152,14117,14051],{"class":483},[152,14119,14113],{"class":476},[152,14121,4476],{"class":6858},[152,14123,14058],{"class":483},[152,14125,14126,14128,14130,14132,14134],{"class":281,"line":381},[152,14127,3636],{"class":476},[152,14129,14065],{"class":483},[152,14131,1864],{"class":476},[152,14133,8160],{"class":476},[152,14135,7839],{"class":483},[152,14137,14138,14140,14142,14144,14146],{"class":281,"line":386},[152,14139,8045],{"class":476},[152,14141,12535],{"class":483},[152,14143,1864],{"class":476},[152,14145,8160],{"class":476},[152,14147,7711],{"class":483},[152,14149,14150,14152,14154,14156],{"class":281,"line":932},[152,14151,8045],{"class":476},[152,14153,12561],{"class":483},[152,14155,1864],{"class":476},[152,14157,14088],{"class":483},[152,14159,14160],{"class":281,"line":942},[152,14161,3236],{"class":483},[152,14163,14164],{"class":281,"line":949},[152,14165,307],{"emptyLinePlaceholder":306},[152,14167,14168],{"class":281,"line":954},[152,14169,14170],{"class":866},"\u002F\u002F3. 引用传递\n",[152,14172,14173,14175,14178,14180,14183,14185,14187,14189,14191],{"class":281,"line":959},[152,14174,7006],{"class":476},[152,14176,14177],{"class":285}," mySwap03",[152,14179,1819],{"class":483},[152,14181,14182],{"class":476},"int&",[152,14184,3070],{"class":6858},[152,14186,14051],{"class":483},[152,14188,14182],{"class":476},[152,14190,4476],{"class":6858},[152,14192,14058],{"class":483},[152,14194,14195,14197,14199,14201],{"class":281,"line":970},[152,14196,3636],{"class":476},[152,14198,14065],{"class":483},[152,14200,1864],{"class":476},[152,14202,3104],{"class":483},[152,14204,14205,14207,14209],{"class":281,"line":979},[152,14206,14074],{"class":483},[152,14208,1864],{"class":476},[152,14210,14079],{"class":483},[152,14212,14213,14215,14217],{"class":281,"line":989},[152,14214,13755],{"class":483},[152,14216,1864],{"class":476},[152,14218,14088],{"class":483},[152,14220,14221],{"class":281,"line":996},[152,14222,3236],{"class":483},[152,14224,14225],{"class":281,"line":1001},[152,14226,307],{"emptyLinePlaceholder":306},[152,14228,14229,14231,14233],{"class":281,"line":1006},[152,14230,1822],{"class":476},[152,14232,3624],{"class":285},[152,14234,12469],{"class":483},[152,14236,14237],{"class":281,"line":1018},[152,14238,307],{"emptyLinePlaceholder":306},[152,14240,14241,14243,14245,14247,14249],{"class":281,"line":1027},[152,14242,3636],{"class":476},[152,14244,12485],{"class":483},[152,14246,1864],{"class":476},[152,14248,3689],{"class":293},[152,14250,2965],{"class":483},[152,14252,14253,14255,14257,14259,14261],{"class":281,"line":1037},[152,14254,3636],{"class":476},[152,14256,12498],{"class":483},[152,14258,1864],{"class":476},[152,14260,10582],{"class":293},[152,14262,2965],{"class":483},[152,14264,14265],{"class":281,"line":1044},[152,14266,307],{"emptyLinePlaceholder":306},[152,14268,14269,14272,14275],{"class":281,"line":1049},[152,14270,14271],{"class":285},"    mySwap01",[152,14273,14274],{"class":483},"(a, b);",[152,14276,14277],{"class":866},"\u002F\u002F值传递，形参不会修饰实参\n",[152,14279,14280,14282,14284,14287,14289,14291,14293,14296,14298,14300,14302],{"class":281,"line":1054},[152,14281,8171],{"class":483},[152,14283,2848],{"class":476},[152,14285,14286],{"class":289}," \"a:\"",[152,14288,3116],{"class":476},[152,14290,12485],{"class":483},[152,14292,2848],{"class":476},[152,14294,14295],{"class":289}," \" b:\"",[152,14297,3116],{"class":476},[152,14299,12498],{"class":483},[152,14301,2848],{"class":476},[152,14303,10472],{"class":483},[152,14305,14306],{"class":281,"line":1065},[152,14307,307],{"emptyLinePlaceholder":306},[152,14309,14310,14313,14315,14317,14320,14322,14325],{"class":281,"line":1074},[152,14311,14312],{"class":285},"    mySwap02",[152,14314,1819],{"class":483},[152,14316,2161],{"class":476},[152,14318,14319],{"class":483},"a, ",[152,14321,2161],{"class":476},[152,14323,14324],{"class":483},"b);",[152,14326,14327],{"class":866},"\u002F\u002F地址传递，形参会修饰实参\n",[152,14329,14330,14332,14334,14336,14338,14340,14342,14344,14346,14348,14350],{"class":281,"line":1084},[152,14331,8171],{"class":483},[152,14333,2848],{"class":476},[152,14335,14286],{"class":289},[152,14337,3116],{"class":476},[152,14339,12485],{"class":483},[152,14341,2848],{"class":476},[152,14343,14295],{"class":289},[152,14345,3116],{"class":476},[152,14347,12498],{"class":483},[152,14349,2848],{"class":476},[152,14351,10472],{"class":483},[152,14353,14354],{"class":281,"line":1091},[152,14355,307],{"emptyLinePlaceholder":306},[152,14357,14358,14361,14363],{"class":281,"line":1096},[152,14359,14360],{"class":285},"    mySwap03",[152,14362,14274],{"class":483},[152,14364,14365],{"class":866},"\u002F\u002F引用传递，形参会修饰实参\n",[152,14367,14368,14370,14372,14374,14376,14378,14380,14382,14384,14386,14388],{"class":281,"line":1101},[152,14369,8171],{"class":483},[152,14371,2848],{"class":476},[152,14373,14286],{"class":289},[152,14375,3116],{"class":476},[152,14377,12485],{"class":483},[152,14379,2848],{"class":476},[152,14381,14295],{"class":289},[152,14383,3116],{"class":476},[152,14385,12498],{"class":483},[152,14387,2848],{"class":476},[152,14389,10472],{"class":483},[152,14391,14392],{"class":281,"line":1112},[152,14393,307],{"emptyLinePlaceholder":306},[152,14395,14396,14398,14400,14402],{"class":281,"line":1121},[152,14397,3954],{"class":285},[152,14399,1819],{"class":483},[152,14401,3959],{"class":289},[152,14403,4362],{"class":483},[152,14405,14406],{"class":281,"line":1131},[152,14407,307],{"emptyLinePlaceholder":306},[152,14409,14410,14412,14414],{"class":281,"line":1138},[152,14411,5732],{"class":476},[152,14413,5735],{"class":293},[152,14415,2965],{"class":483},[152,14417,14418],{"class":281,"line":1143},[152,14419,3236],{"class":483},[1760,14421,14423],{"id":14422},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14425,14426],{},"作用：引用是可以作为函数的返回值存在的",[19,14428,10657,14429],{},[694,14430,14431],{},"不要返回局部变量引用",[19,14433,14434],{},"用法：函数调用作为左值",[270,14436,14438],{"className":11557,"code":14437,"language":11559,"meta":275,"style":275},"\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",[277,14439,14440,14445,14453,14468,14474,14478,14482,14487,14495,14512,14518,14522,14526,14534,14538,14543,14557,14577,14596,14600,14605,14618,14638,14656,14660,14676,14680,14699,14717,14721,14731,14735,14743],{"__ignoreMap":275},[152,14441,14442],{"class":281,"line":282},[152,14443,14444],{"class":866},"\u002F\u002F返回局部变量引用\n",[152,14446,14447,14449,14451],{"class":281,"line":303},[152,14448,14182],{"class":476},[152,14450,7230],{"class":285},[152,14452,12469],{"class":483},[152,14454,14455,14457,14459,14461,14463,14465],{"class":281,"line":310},[152,14456,3636],{"class":476},[152,14458,12485],{"class":483},[152,14460,1864],{"class":476},[152,14462,3689],{"class":293},[152,14464,1873],{"class":483},[152,14466,14467],{"class":866}," \u002F\u002F局部变量\n",[152,14469,14470,14472],{"class":281,"line":324},[152,14471,5732],{"class":476},[152,14473,3104],{"class":483},[152,14475,14476],{"class":281,"line":329},[152,14477,3236],{"class":483},[152,14479,14480],{"class":281,"line":343},[152,14481,307],{"emptyLinePlaceholder":306},[152,14483,14484],{"class":281,"line":348},[152,14485,14486],{"class":866},"\u002F\u002F返回静态变量引用\n",[152,14488,14489,14491,14493],{"class":281,"line":362},[152,14490,14182],{"class":476},[152,14492,7299],{"class":285},[152,14494,12469],{"class":483},[152,14496,14497,14499,14501,14503,14505,14507,14509],{"class":281,"line":367},[152,14498,12636],{"class":476},[152,14500,4033],{"class":476},[152,14502,12485],{"class":483},[152,14504,1864],{"class":476},[152,14506,10582],{"class":293},[152,14508,1873],{"class":483},[152,14510,14511],{"class":866},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[152,14513,14514,14516],{"class":281,"line":381},[152,14515,5732],{"class":476},[152,14517,3104],{"class":483},[152,14519,14520],{"class":281,"line":386},[152,14521,3236],{"class":483},[152,14523,14524],{"class":281,"line":932},[152,14525,307],{"emptyLinePlaceholder":306},[152,14527,14528,14530,14532],{"class":281,"line":942},[152,14529,1822],{"class":476},[152,14531,3624],{"class":285},[152,14533,12469],{"class":483},[152,14535,14536],{"class":281,"line":949},[152,14537,307],{"emptyLinePlaceholder":306},[152,14539,14540],{"class":281,"line":954},[152,14541,14542],{"class":866},"    \u002F\u002F不能返回局部变量的引用\n",[152,14544,14545,14548,14551,14553,14555],{"class":281,"line":959},[152,14546,14547],{"class":476},"    int&",[152,14549,14550],{"class":483}," ref ",[152,14552,1864],{"class":476},[152,14554,7230],{"class":285},[152,14556,7278],{"class":483},[152,14558,14559,14561,14563,14566,14568,14570,14572,14574],{"class":281,"line":970},[152,14560,8171],{"class":483},[152,14562,2848],{"class":476},[152,14564,14565],{"class":289}," \"ref = \"",[152,14567,3116],{"class":476},[152,14569,14550],{"class":483},[152,14571,2848],{"class":476},[152,14573,13085],{"class":483},[152,14575,14576],{"class":866},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[152,14578,14579,14581,14583,14585,14587,14589,14591,14593],{"class":281,"line":979},[152,14580,8171],{"class":483},[152,14582,2848],{"class":476},[152,14584,14565],{"class":289},[152,14586,3116],{"class":476},[152,14588,14550],{"class":483},[152,14590,2848],{"class":476},[152,14592,13085],{"class":483},[152,14594,14595],{"class":866},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[152,14597,14598],{"class":281,"line":989},[152,14599,307],{"emptyLinePlaceholder":306},[152,14601,14602],{"class":281,"line":996},[152,14603,14604],{"class":866},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[152,14606,14607,14609,14612,14614,14616],{"class":281,"line":1001},[152,14608,14547],{"class":476},[152,14610,14611],{"class":483}," ref2 ",[152,14613,1864],{"class":476},[152,14615,7299],{"class":285},[152,14617,7278],{"class":483},[152,14619,14620,14622,14624,14627,14629,14631,14633,14635],{"class":281,"line":1006},[152,14621,8171],{"class":483},[152,14623,2848],{"class":476},[152,14625,14626],{"class":289}," \"ref2 = \"",[152,14628,3116],{"class":476},[152,14630,14611],{"class":483},[152,14632,2848],{"class":476},[152,14634,13085],{"class":483},[152,14636,14637],{"class":866}," \u002F\u002F20\n",[152,14639,14640,14642,14644,14646,14648,14650,14652,14654],{"class":281,"line":1018},[152,14641,8171],{"class":483},[152,14643,2848],{"class":476},[152,14645,14626],{"class":289},[152,14647,3116],{"class":476},[152,14649,14611],{"class":483},[152,14651,2848],{"class":476},[152,14653,13085],{"class":483},[152,14655,14637],{"class":866},[152,14657,14658],{"class":281,"line":1027},[152,14659,307],{"emptyLinePlaceholder":306},[152,14661,14662,14664,14667,14669,14671,14673],{"class":281,"line":1037},[152,14663,7344],{"class":285},[152,14665,14666],{"class":483},"() ",[152,14668,1864],{"class":476},[152,14670,4642],{"class":293},[152,14672,1873],{"class":483},[152,14674,14675],{"class":866},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[152,14677,14678],{"class":281,"line":1044},[152,14679,307],{"emptyLinePlaceholder":306},[152,14681,14682,14684,14686,14688,14690,14692,14694,14696],{"class":281,"line":1049},[152,14683,8171],{"class":483},[152,14685,2848],{"class":476},[152,14687,14626],{"class":289},[152,14689,3116],{"class":476},[152,14691,14611],{"class":483},[152,14693,2848],{"class":476},[152,14695,13085],{"class":483},[152,14697,14698],{"class":866}," \u002F\u002F1000\n",[152,14700,14701,14703,14705,14707,14709,14711,14713,14715],{"class":281,"line":1054},[152,14702,8171],{"class":483},[152,14704,2848],{"class":476},[152,14706,14626],{"class":289},[152,14708,3116],{"class":476},[152,14710,14611],{"class":483},[152,14712,2848],{"class":476},[152,14714,13085],{"class":483},[152,14716,14698],{"class":866},[152,14718,14719],{"class":281,"line":1065},[152,14720,307],{"emptyLinePlaceholder":306},[152,14722,14723,14725,14727,14729],{"class":281,"line":1074},[152,14724,3954],{"class":285},[152,14726,1819],{"class":483},[152,14728,3959],{"class":289},[152,14730,4362],{"class":483},[152,14732,14733],{"class":281,"line":1084},[152,14734,307],{"emptyLinePlaceholder":306},[152,14736,14737,14739,14741],{"class":281,"line":1091},[152,14738,5732],{"class":476},[152,14740,5735],{"class":293},[152,14742,2965],{"class":483},[152,14744,14745],{"class":281,"line":1096},[152,14746,3236],{"class":483},[1760,14748,14750],{"id":14749},"_65引用的本质","6.5引用的本质",[19,14752,14753,14754],{},"本质：",[694,14755,14756],{},"引用的本质在c++内部实现是一个指针常量.",[270,14758,14760],{"className":1807,"code":14759,"language":1809,"meta":275,"style":275},"\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",[277,14761,14762,14767,14783,14797,14801,14810,14822,14827,14832,14843,14856,14860,14876,14893,14897,14905,14913],{"__ignoreMap":275},[152,14763,14764],{"class":281,"line":282},[152,14765,14766],{"class":866},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[152,14768,14769,14771,14773,14775,14777,14780],{"class":281,"line":303},[152,14770,7006],{"class":476},[152,14772,13001],{"class":285},[152,14774,1819],{"class":483},[152,14776,14182],{"class":476},[152,14778,14779],{"class":6858}," ref",[152,14781,14782],{"class":483},"){\n",[152,14784,14785,14788,14790,14792,14794],{"class":281,"line":310},[152,14786,14787],{"class":483},"    ref ",[152,14789,1864],{"class":476},[152,14791,7396],{"class":293},[152,14793,1873],{"class":483},[152,14795,14796],{"class":866}," \u002F\u002F ref是引用，转换为*ref = 100\n",[152,14798,14799],{"class":281,"line":324},[152,14800,3236],{"class":483},[152,14802,14803,14805,14807],{"class":281,"line":329},[152,14804,1822],{"class":476},[152,14806,3624],{"class":285},[152,14808,14809],{"class":483},"(){\n",[152,14811,14812,14814,14816,14818,14820],{"class":281,"line":343},[152,14813,3636],{"class":476},[152,14815,12485],{"class":483},[152,14817,1864],{"class":476},[152,14819,3689],{"class":293},[152,14821,2965],{"class":483},[152,14823,14824],{"class":281,"line":348},[152,14825,14826],{"class":483},"    \n",[152,14828,14829],{"class":281,"line":362},[152,14830,14831],{"class":866},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[152,14833,14834,14836,14838,14840],{"class":281,"line":367},[152,14835,14547],{"class":476},[152,14837,14550],{"class":483},[152,14839,1864],{"class":476},[152,14841,14842],{"class":483}," a; \n",[152,14844,14845,14847,14849,14851,14853],{"class":281,"line":381},[152,14846,14787],{"class":483},[152,14848,1864],{"class":476},[152,14850,10582],{"class":293},[152,14852,1873],{"class":483},[152,14854,14855],{"class":866}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[152,14857,14858],{"class":281,"line":386},[152,14859,14826],{"class":483},[152,14861,14862,14864,14866,14868,14870,14872,14874],{"class":281,"line":932},[152,14863,8171],{"class":483},[152,14865,2848],{"class":476},[152,14867,14286],{"class":289},[152,14869,3116],{"class":476},[152,14871,12485],{"class":483},[152,14873,2848],{"class":476},[152,14875,10472],{"class":483},[152,14877,14878,14880,14882,14885,14887,14889,14891],{"class":281,"line":942},[152,14879,8171],{"class":483},[152,14881,2848],{"class":476},[152,14883,14884],{"class":289}," \"ref:\"",[152,14886,3116],{"class":476},[152,14888,14550],{"class":483},[152,14890,2848],{"class":476},[152,14892,10472],{"class":483},[152,14894,14895],{"class":281,"line":949},[152,14896,14826],{"class":483},[152,14898,14899,14902],{"class":281,"line":954},[152,14900,14901],{"class":285},"    func",[152,14903,14904],{"class":483},"(a);\n",[152,14906,14907,14909,14911],{"class":281,"line":959},[152,14908,5732],{"class":476},[152,14910,5735],{"class":293},[152,14912,2965],{"class":483},[152,14914,14915],{"class":281,"line":970},[152,14916,3236],{"class":483},[19,14918,12948],{},[416,14920,14921,14924],{},[419,14922,14923],{},"引用的本质，就是一个指针常量",[419,14925,14926],{},"引用一旦初始化，就不可以发生改变",[1760,14928,14930],{"id":14929},"_66常量引用","6.6常量引用",[19,14932,14933],{},"作用：常量引用主要用来修饰形参",[19,14935,14936,14937,14940],{},"在函数形参列表中，可以加",[694,14938,14939],{},"const修饰形参","，防止形参改变实参",[270,14942,14944],{"className":1807,"code":14943,"language":1809,"meta":275,"style":275},"\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",[277,14945,14946,14951,14956,14975,14980,14993,14997,15001,15009,15013,15018,15023,15037,15041,15049,15061,15065,15070,15082,15089,15093,15103,15107,15115],{"__ignoreMap":275},[152,14947,14948],{"class":281,"line":282},[152,14949,14950],{"class":866},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[152,14952,14953],{"class":281,"line":303},[152,14954,14955],{"class":866},"\u002F\u002F加上const就不能修改实参的\n",[152,14957,14958,14960,14963,14965,14967,14970,14973],{"class":281,"line":310},[152,14959,7006],{"class":476},[152,14961,14962],{"class":285}," showValue",[152,14964,1819],{"class":483},[152,14966,8434],{"class":476},[152,14968,14969],{"class":476}," int&",[152,14971,14972],{"class":6858}," v",[152,14974,14058],{"class":483},[152,14976,14977],{"class":281,"line":324},[152,14978,14979],{"class":866},"    \u002F\u002Fv += 100;\n",[152,14981,14982,14984,14986,14989,14991],{"class":281,"line":329},[152,14983,8171],{"class":483},[152,14985,2848],{"class":476},[152,14987,14988],{"class":483}," v ",[152,14990,2848],{"class":476},[152,14992,10472],{"class":483},[152,14994,14995],{"class":281,"line":343},[152,14996,3236],{"class":483},[152,14998,14999],{"class":281,"line":348},[152,15000,307],{"emptyLinePlaceholder":306},[152,15002,15003,15005,15007],{"class":281,"line":362},[152,15004,1822],{"class":476},[152,15006,3624],{"class":285},[152,15008,12469],{"class":483},[152,15010,15011],{"class":281,"line":367},[152,15012,307],{"emptyLinePlaceholder":306},[152,15014,15015],{"class":281,"line":381},[152,15016,15017],{"class":866},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[152,15019,15020],{"class":281,"line":386},[152,15021,15022],{"class":866},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[152,15024,15025,15027,15029,15031,15033,15035],{"class":281,"line":932},[152,15026,12837],{"class":476},[152,15028,14969],{"class":476},[152,15030,14550],{"class":483},[152,15032,1864],{"class":476},[152,15034,3689],{"class":293},[152,15036,2965],{"class":483},[152,15038,15039],{"class":281,"line":942},[152,15040,307],{"emptyLinePlaceholder":306},[152,15042,15043,15046],{"class":281,"line":949},[152,15044,15045],{"class":866},"    \u002F\u002Fref = 100;",[152,15047,15048],{"class":866},"  \u002F\u002F加入const后不可以修改变量\n",[152,15050,15051,15053,15055,15057,15059],{"class":281,"line":954},[152,15052,8171],{"class":483},[152,15054,2848],{"class":476},[152,15056,14550],{"class":483},[152,15058,2848],{"class":476},[152,15060,10472],{"class":483},[152,15062,15063],{"class":281,"line":959},[152,15064,307],{"emptyLinePlaceholder":306},[152,15066,15067],{"class":281,"line":970},[152,15068,15069],{"class":866},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[152,15071,15072,15074,15076,15078,15080],{"class":281,"line":979},[152,15073,3636],{"class":476},[152,15075,12485],{"class":483},[152,15077,1864],{"class":476},[152,15079,3689],{"class":293},[152,15081,2965],{"class":483},[152,15083,15084,15087],{"class":281,"line":989},[152,15085,15086],{"class":285},"    showValue",[152,15088,14904],{"class":483},[152,15090,15091],{"class":281,"line":996},[152,15092,307],{"emptyLinePlaceholder":306},[152,15094,15095,15097,15099,15101],{"class":281,"line":1001},[152,15096,3954],{"class":285},[152,15098,1819],{"class":483},[152,15100,3959],{"class":289},[152,15102,4362],{"class":483},[152,15104,15105],{"class":281,"line":1006},[152,15106,307],{"emptyLinePlaceholder":306},[152,15108,15109,15111,15113],{"class":281,"line":1018},[152,15110,5732],{"class":476},[152,15112,5735],{"class":293},[152,15114,2965],{"class":483},[152,15116,15117],{"class":281,"line":1027},[152,15118,3236],{"class":483},[1736,15120,15121],{},"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":275,"searchDepth":303,"depth":303,"links":15123},[15124,15125,15126,15127,15128,15129],{"id":13656,"depth":303,"text":13657},{"id":13835,"depth":303,"text":13836},{"id":14018,"depth":303,"text":14019},{"id":14422,"depth":303,"text":14423},{"id":14749,"depth":303,"text":14750},{"id":14929,"depth":303,"text":14930},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13648,"description":275},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15136,"title":15137,"body":15138,"description":275,"extension":1744,"meta":16219,"navigation":306,"path":16220,"seo":16221,"stem":16222,"__hash__":16223},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15139,"toc":16211},[15140,15143,15147,15150,15155,15387,15389,15400,15404,15407,15415,15519,15522,15526,15529,15533,15536,15541,15563,15569,15896,15899,15903,15911,16208],[10,15141,15137],{"id":15142},"_7函数高级部分",[1760,15144,15146],{"id":15145},"_71函数默认参数","7.1函数默认参数",[19,15148,15149],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15151,6823,15152],{},[277,15153,15154],{}," 返回值类型  函数名 （参数= 默认值）{}",[270,15156,15158],{"className":1807,"code":15157,"language":1809,"meta":275,"style":275},"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",[277,15159,15160,15195,15210,15214,15218,15223,15228,15257,15277,15287,15291,15295,15303,15307,15335,15357,15361,15371,15375,15383],{"__ignoreMap":275},[152,15161,15162,15164,15166,15168,15170,15172,15174,15176,15178,15181,15183,15185,15187,15189,15191,15193],{"class":281,"line":282},[152,15163,1822],{"class":476},[152,15165,13001],{"class":285},[152,15167,1819],{"class":483},[152,15169,1822],{"class":476},[152,15171,3070],{"class":6858},[152,15173,14051],{"class":483},[152,15175,1822],{"class":476},[152,15177,4476],{"class":6858},[152,15179,15180],{"class":476}," =",[152,15182,3689],{"class":293},[152,15184,14051],{"class":483},[152,15186,1822],{"class":476},[152,15188,4492],{"class":6858},[152,15190,15180],{"class":476},[152,15192,3689],{"class":293},[152,15194,14058],{"class":483},[152,15196,15197,15199,15201,15203,15205,15207],{"class":281,"line":303},[152,15198,5732],{"class":476},[152,15200,12485],{"class":483},[152,15202,2289],{"class":476},[152,15204,12498],{"class":483},[152,15206,2289],{"class":476},[152,15208,15209],{"class":483}," c;\n",[152,15211,15212],{"class":281,"line":310},[152,15213,3236],{"class":483},[152,15215,15216],{"class":281,"line":324},[152,15217,307],{"emptyLinePlaceholder":306},[152,15219,15220],{"class":281,"line":329},[152,15221,15222],{"class":866},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[152,15224,15225],{"class":281,"line":343},[152,15226,15227],{"class":866},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[152,15229,15230,15232,15235,15237,15239,15241,15243,15245,15247,15249,15251,15253,15255],{"class":281,"line":348},[152,15231,1822],{"class":476},[152,15233,15234],{"class":285}," func2",[152,15236,1819],{"class":483},[152,15238,1822],{"class":476},[152,15240,3070],{"class":6858},[152,15242,15180],{"class":476},[152,15244,3689],{"class":293},[152,15246,14051],{"class":483},[152,15248,1822],{"class":476},[152,15250,4476],{"class":6858},[152,15252,15180],{"class":476},[152,15254,3689],{"class":293},[152,15256,4362],{"class":483},[152,15258,15259,15261,15263,15265,15267,15269,15271,15273,15275],{"class":281,"line":362},[152,15260,1822],{"class":476},[152,15262,15234],{"class":285},[152,15264,1819],{"class":483},[152,15266,1822],{"class":476},[152,15268,3070],{"class":6858},[152,15270,14051],{"class":483},[152,15272,1822],{"class":476},[152,15274,4476],{"class":6858},[152,15276,14058],{"class":483},[152,15278,15279,15281,15283,15285],{"class":281,"line":367},[152,15280,5732],{"class":476},[152,15282,12485],{"class":483},[152,15284,2289],{"class":476},[152,15286,14079],{"class":483},[152,15288,15289],{"class":281,"line":381},[152,15290,3236],{"class":483},[152,15292,15293],{"class":281,"line":386},[152,15294,307],{"emptyLinePlaceholder":306},[152,15296,15297,15299,15301],{"class":281,"line":932},[152,15298,1822],{"class":476},[152,15300,3624],{"class":285},[152,15302,12469],{"class":483},[152,15304,15305],{"class":281,"line":942},[152,15306,307],{"emptyLinePlaceholder":306},[152,15308,15309,15311,15313,15316,15318,15320,15322,15324,15326,15328,15331,15333],{"class":281,"line":949},[152,15310,8171],{"class":483},[152,15312,2848],{"class":476},[152,15314,15315],{"class":289}," \"ret = \"",[152,15317,3116],{"class":476},[152,15319,13001],{"class":285},[152,15321,1819],{"class":483},[152,15323,2508],{"class":293},[152,15325,14051],{"class":483},[152,15327,2508],{"class":293},[152,15329,15330],{"class":483},") ",[152,15332,2848],{"class":476},[152,15334,10472],{"class":483},[152,15336,15337,15339,15341,15343,15345,15347,15349,15351,15353,15355],{"class":281,"line":954},[152,15338,8171],{"class":483},[152,15340,2848],{"class":476},[152,15342,15315],{"class":289},[152,15344,3116],{"class":476},[152,15346,13001],{"class":285},[152,15348,1819],{"class":483},[152,15350,2119],{"class":293},[152,15352,15330],{"class":483},[152,15354,2848],{"class":476},[152,15356,10472],{"class":483},[152,15358,15359],{"class":281,"line":959},[152,15360,307],{"emptyLinePlaceholder":306},[152,15362,15363,15365,15367,15369],{"class":281,"line":970},[152,15364,3954],{"class":285},[152,15366,1819],{"class":483},[152,15368,3959],{"class":289},[152,15370,4362],{"class":483},[152,15372,15373],{"class":281,"line":979},[152,15374,307],{"emptyLinePlaceholder":306},[152,15376,15377,15379,15381],{"class":281,"line":989},[152,15378,5732],{"class":476},[152,15380,5735],{"class":293},[152,15382,2965],{"class":483},[152,15384,15385],{"class":281,"line":996},[152,15386,3236],{"class":483},[19,15388,12948],{},[416,15390,15391,15394,15397],{},[419,15392,15393],{},"我传就用我；没传就用你",[419,15395,15396],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[419,15398,15399],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[1760,15401,15403],{"id":15402},"_72函数的占位参数","7.2函数的占位参数",[19,15405,15406],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15408,15409,15411,15412],{},[694,15410,6823],{}," ",[277,15413,15414],{},"返回值类型 函数名 (数据类型){}",[270,15416,15418],{"className":1807,"code":15417,"language":1809,"meta":275,"style":275},"\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",[277,15419,15420,15425,15443,15456,15460,15468,15472,15489,15493,15503,15507,15515],{"__ignoreMap":275},[152,15421,15422],{"class":281,"line":282},[152,15423,15424],{"class":866},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[152,15426,15427,15429,15431,15433,15435,15437,15439,15441],{"class":281,"line":303},[152,15428,7006],{"class":476},[152,15430,13001],{"class":285},[152,15432,1819],{"class":483},[152,15434,1822],{"class":476},[152,15436,3070],{"class":6858},[152,15438,14051],{"class":483},[152,15440,1822],{"class":476},[152,15442,14058],{"class":483},[152,15444,15445,15447,15449,15452,15454],{"class":281,"line":310},[152,15446,8171],{"class":483},[152,15448,2848],{"class":476},[152,15450,15451],{"class":289}," \"this is func\"",[152,15453,3116],{"class":476},[152,15455,10472],{"class":483},[152,15457,15458],{"class":281,"line":324},[152,15459,3236],{"class":483},[152,15461,15462,15464,15466],{"class":281,"line":329},[152,15463,1822],{"class":476},[152,15465,3624],{"class":285},[152,15467,12469],{"class":483},[152,15469,15470],{"class":281,"line":343},[152,15471,307],{"emptyLinePlaceholder":306},[152,15473,15474,15476,15478,15480,15482,15484,15486],{"class":281,"line":348},[152,15475,14901],{"class":285},[152,15477,1819],{"class":483},[152,15479,2254],{"class":293},[152,15481,2186],{"class":483},[152,15483,2254],{"class":293},[152,15485,7608],{"class":483},[152,15487,15488],{"class":866}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[152,15490,15491],{"class":281,"line":362},[152,15492,307],{"emptyLinePlaceholder":306},[152,15494,15495,15497,15499,15501],{"class":281,"line":367},[152,15496,3954],{"class":285},[152,15498,1819],{"class":483},[152,15500,3959],{"class":289},[152,15502,4362],{"class":483},[152,15504,15505],{"class":281,"line":381},[152,15506,307],{"emptyLinePlaceholder":306},[152,15508,15509,15511,15513],{"class":281,"line":386},[152,15510,5732],{"class":476},[152,15512,5735],{"class":293},[152,15514,2965],{"class":483},[152,15516,15517],{"class":281,"line":932},[152,15518,3236],{"class":483},[19,15520,15521],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[1760,15523,15525],{"id":15524},"_73函数重载","7.3函数重载",[19,15527,15528],{},"意思是函数名是可以相同的",[14,15530,15532],{"id":15531},"_731基本语法","7.3.1基本语法",[19,15534,15535],{},"作用：函数名可以相同，提高复用性",[19,15537,15538],{},[694,15539,15540],{},"函数重载满足条件：",[698,15542,15543,15546,15549],{},[419,15544,15545],{},"同一个作用域下",[419,15547,15548],{},"函数名称相同",[419,15550,15551,15552,15555,15556,15559,15560],{},"函数参数",[694,15553,15554],{},"类型不同","  或者 ",[694,15557,15558],{},"个数不同"," 或者 ",[694,15561,15562],{},"顺序不同",[19,15564,15565,15568],{},[694,15566,15567],{},"注意:","  函数的返回值不可以作为函数重载的条件",[270,15570,15572],{"className":11557,"code":15571,"language":11559,"meta":275,"style":275},"\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",[277,15573,15574,15579,15587,15591,15604,15608,15622,15626,15639,15643,15658,15662,15675,15679,15700,15704,15717,15721,15741,15745,15758,15762,15766,15771,15776,15781,15786,15791,15795,15799,15807,15811,15817,15827,15837,15851,15866,15870,15880,15884,15892],{"__ignoreMap":275},[152,15575,15576],{"class":281,"line":282},[152,15577,15578],{"class":866},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[152,15580,15581,15583,15585],{"class":281,"line":303},[152,15582,7006],{"class":476},[152,15584,13001],{"class":285},[152,15586,3627],{"class":483},[152,15588,15589],{"class":281,"line":310},[152,15590,3217],{"class":483},[152,15592,15593,15595,15597,15600,15602],{"class":281,"line":324},[152,15594,8171],{"class":483},[152,15596,2848],{"class":476},[152,15598,15599],{"class":289}," \"func 的调用！\"",[152,15601,3116],{"class":476},[152,15603,10472],{"class":483},[152,15605,15606],{"class":281,"line":329},[152,15607,3236],{"class":483},[152,15609,15610,15612,15614,15616,15618,15620],{"class":281,"line":343},[152,15611,7006],{"class":476},[152,15613,13001],{"class":285},[152,15615,1819],{"class":483},[152,15617,1822],{"class":476},[152,15619,3070],{"class":6858},[152,15621,1825],{"class":483},[152,15623,15624],{"class":281,"line":348},[152,15625,3217],{"class":483},[152,15627,15628,15630,15632,15635,15637],{"class":281,"line":362},[152,15629,8171],{"class":483},[152,15631,2848],{"class":476},[152,15633,15634],{"class":289}," \"func (int a) 的调用！\"",[152,15636,3116],{"class":476},[152,15638,10472],{"class":483},[152,15640,15641],{"class":281,"line":367},[152,15642,3236],{"class":483},[152,15644,15645,15647,15649,15651,15654,15656],{"class":281,"line":381},[152,15646,7006],{"class":476},[152,15648,13001],{"class":285},[152,15650,1819],{"class":483},[152,15652,15653],{"class":476},"double",[152,15655,3070],{"class":6858},[152,15657,1825],{"class":483},[152,15659,15660],{"class":281,"line":386},[152,15661,3217],{"class":483},[152,15663,15664,15666,15668,15671,15673],{"class":281,"line":932},[152,15665,8171],{"class":483},[152,15667,2848],{"class":476},[152,15669,15670],{"class":289}," \"func (double a)的调用！\"",[152,15672,3116],{"class":476},[152,15674,10472],{"class":483},[152,15676,15677],{"class":281,"line":942},[152,15678,3236],{"class":483},[152,15680,15681,15683,15685,15687,15689,15691,15694,15696,15698],{"class":281,"line":949},[152,15682,7006],{"class":476},[152,15684,13001],{"class":285},[152,15686,1819],{"class":483},[152,15688,1822],{"class":476},[152,15690,3070],{"class":6858},[152,15692,15693],{"class":483}," ,",[152,15695,15653],{"class":476},[152,15697,4476],{"class":6858},[152,15699,1825],{"class":483},[152,15701,15702],{"class":281,"line":954},[152,15703,3217],{"class":483},[152,15705,15706,15708,15710,15713,15715],{"class":281,"line":959},[152,15707,8171],{"class":483},[152,15709,2848],{"class":476},[152,15711,15712],{"class":289}," \"func (int a ,double b) 的调用！\"",[152,15714,3116],{"class":476},[152,15716,10472],{"class":483},[152,15718,15719],{"class":281,"line":970},[152,15720,3236],{"class":483},[152,15722,15723,15725,15727,15729,15731,15733,15735,15737,15739],{"class":281,"line":979},[152,15724,7006],{"class":476},[152,15726,13001],{"class":285},[152,15728,1819],{"class":483},[152,15730,15653],{"class":476},[152,15732,3070],{"class":6858},[152,15734,15693],{"class":483},[152,15736,1822],{"class":476},[152,15738,4476],{"class":6858},[152,15740,1825],{"class":483},[152,15742,15743],{"class":281,"line":989},[152,15744,3217],{"class":483},[152,15746,15747,15749,15751,15754,15756],{"class":281,"line":996},[152,15748,8171],{"class":483},[152,15750,2848],{"class":476},[152,15752,15753],{"class":289}," \"func (double a ,int b)的调用！\"",[152,15755,3116],{"class":476},[152,15757,10472],{"class":483},[152,15759,15760],{"class":281,"line":1001},[152,15761,3236],{"class":483},[152,15763,15764],{"class":281,"line":1006},[152,15765,307],{"emptyLinePlaceholder":306},[152,15767,15768],{"class":281,"line":1018},[152,15769,15770],{"class":866},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[152,15772,15773],{"class":281,"line":1027},[152,15774,15775],{"class":866},"\u002F\u002Fint func(double a, int b)\n",[152,15777,15778],{"class":281,"line":1037},[152,15779,15780],{"class":866},"\u002F\u002F{\n",[152,15782,15783],{"class":281,"line":1044},[152,15784,15785],{"class":866},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[152,15787,15788],{"class":281,"line":1049},[152,15789,15790],{"class":866},"\u002F\u002F}\n",[152,15792,15793],{"class":281,"line":1054},[152,15794,307],{"emptyLinePlaceholder":306},[152,15796,15797],{"class":281,"line":1065},[152,15798,307],{"emptyLinePlaceholder":306},[152,15800,15801,15803,15805],{"class":281,"line":1074},[152,15802,1822],{"class":476},[152,15804,3624],{"class":285},[152,15806,12469],{"class":483},[152,15808,15809],{"class":281,"line":1084},[152,15810,307],{"emptyLinePlaceholder":306},[152,15812,15813,15815],{"class":281,"line":1091},[152,15814,14901],{"class":285},[152,15816,7278],{"class":483},[152,15818,15819,15821,15823,15825],{"class":281,"line":1096},[152,15820,14901],{"class":285},[152,15822,1819],{"class":483},[152,15824,2254],{"class":293},[152,15826,4362],{"class":483},[152,15828,15829,15831,15833,15835],{"class":281,"line":1101},[152,15830,14901],{"class":285},[152,15832,1819],{"class":483},[152,15834,1867],{"class":293},[152,15836,4362],{"class":483},[152,15838,15839,15841,15843,15845,15847,15849],{"class":281,"line":1112},[152,15840,14901],{"class":285},[152,15842,1819],{"class":483},[152,15844,2254],{"class":293},[152,15846,2186],{"class":483},[152,15848,1867],{"class":293},[152,15850,4362],{"class":483},[152,15852,15853,15855,15857,15859,15862,15864],{"class":281,"line":1121},[152,15854,14901],{"class":285},[152,15856,1819],{"class":483},[152,15858,1867],{"class":293},[152,15860,15861],{"class":483}," , ",[152,15863,2254],{"class":293},[152,15865,4362],{"class":483},[152,15867,15868],{"class":281,"line":1131},[152,15869,14826],{"class":483},[152,15871,15872,15874,15876,15878],{"class":281,"line":1138},[152,15873,3954],{"class":285},[152,15875,1819],{"class":483},[152,15877,3959],{"class":289},[152,15879,4362],{"class":483},[152,15881,15882],{"class":281,"line":1143},[152,15883,307],{"emptyLinePlaceholder":306},[152,15885,15886,15888,15890],{"class":281,"line":1148},[152,15887,5732],{"class":476},[152,15889,5735],{"class":293},[152,15891,2965],{"class":483},[152,15893,15894],{"class":281,"line":1159},[152,15895,3236],{"class":483},[19,15897,15898],{},"重点：函数返回值不可以作为函数重载条件！",[14,15900,15902],{"id":15901},"_732注意事项","7.3.2注意事项",[698,15904,15905,15908],{},[419,15906,15907],{},"引用作为重载条件!!!",[419,15909,15910],{},"函数重载碰到函数默认参数",[270,15912,15914],{"className":1807,"code":15913,"language":1809,"meta":275,"style":275},"\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",[277,15915,15916,15921,15926,15930,15946,15950,15963,15967,15971,15989,15993,16006,16010,16014,16018,16023,16027,16051,16055,16068,16072,16076,16090,16094,16107,16111,16115,16123,16127,16139,16149,16162,16166,16170,16178,16182,16192,16196,16204],{"__ignoreMap":275},[152,15917,15918],{"class":281,"line":282},[152,15919,15920],{"class":866},"\u002F\u002F函数重载注意事项\n",[152,15922,15923],{"class":281,"line":303},[152,15924,15925],{"class":866},"\u002F\u002F1、引用作为重载条件\n",[152,15927,15928],{"class":281,"line":310},[152,15929,307],{"emptyLinePlaceholder":306},[152,15931,15932,15934,15936,15938,15940,15942,15944],{"class":281,"line":324},[152,15933,7006],{"class":476},[152,15935,13001],{"class":285},[152,15937,1819],{"class":483},[152,15939,1822],{"class":476},[152,15941,12200],{"class":476},[152,15943,69],{"class":6858},[152,15945,1825],{"class":483},[152,15947,15948],{"class":281,"line":329},[152,15949,3217],{"class":483},[152,15951,15952,15954,15956,15959,15961],{"class":281,"line":343},[152,15953,8171],{"class":483},[152,15955,2848],{"class":476},[152,15957,15958],{"class":289}," \"func (int &a) 调用 \"",[152,15960,3116],{"class":476},[152,15962,10472],{"class":483},[152,15964,15965],{"class":281,"line":348},[152,15966,3236],{"class":483},[152,15968,15969],{"class":281,"line":362},[152,15970,307],{"emptyLinePlaceholder":306},[152,15972,15973,15975,15977,15979,15981,15983,15985,15987],{"class":281,"line":367},[152,15974,7006],{"class":476},[152,15976,13001],{"class":285},[152,15978,1819],{"class":483},[152,15980,8434],{"class":476},[152,15982,4033],{"class":476},[152,15984,12200],{"class":476},[152,15986,69],{"class":6858},[152,15988,1825],{"class":483},[152,15990,15991],{"class":281,"line":381},[152,15992,3217],{"class":483},[152,15994,15995,15997,15999,16002,16004],{"class":281,"line":386},[152,15996,8171],{"class":483},[152,15998,2848],{"class":476},[152,16000,16001],{"class":289}," \"func (const int &a) 调用 \"",[152,16003,3116],{"class":476},[152,16005,10472],{"class":483},[152,16007,16008],{"class":281,"line":932},[152,16009,3236],{"class":483},[152,16011,16012],{"class":281,"line":942},[152,16013,307],{"emptyLinePlaceholder":306},[152,16015,16016],{"class":281,"line":949},[152,16017,307],{"emptyLinePlaceholder":306},[152,16019,16020],{"class":281,"line":954},[152,16021,16022],{"class":866},"\u002F\u002F2、函数重载碰到函数默认参数\n",[152,16024,16025],{"class":281,"line":959},[152,16026,307],{"emptyLinePlaceholder":306},[152,16028,16029,16031,16033,16035,16037,16039,16041,16043,16045,16047,16049],{"class":281,"line":970},[152,16030,7006],{"class":476},[152,16032,15234],{"class":285},[152,16034,1819],{"class":483},[152,16036,1822],{"class":476},[152,16038,3070],{"class":6858},[152,16040,14051],{"class":483},[152,16042,1822],{"class":476},[152,16044,4476],{"class":6858},[152,16046,15180],{"class":476},[152,16048,3689],{"class":293},[152,16050,1825],{"class":483},[152,16052,16053],{"class":281,"line":979},[152,16054,3217],{"class":483},[152,16056,16057,16059,16061,16064,16066],{"class":281,"line":989},[152,16058,8171],{"class":483},[152,16060,2848],{"class":476},[152,16062,16063],{"class":289}," \"func2(int a, int b = 10) 调用\"",[152,16065,3116],{"class":476},[152,16067,10472],{"class":483},[152,16069,16070],{"class":281,"line":996},[152,16071,3236],{"class":483},[152,16073,16074],{"class":281,"line":1001},[152,16075,307],{"emptyLinePlaceholder":306},[152,16077,16078,16080,16082,16084,16086,16088],{"class":281,"line":1006},[152,16079,7006],{"class":476},[152,16081,15234],{"class":285},[152,16083,1819],{"class":483},[152,16085,1822],{"class":476},[152,16087,3070],{"class":6858},[152,16089,1825],{"class":483},[152,16091,16092],{"class":281,"line":1018},[152,16093,3217],{"class":483},[152,16095,16096,16098,16100,16103,16105],{"class":281,"line":1027},[152,16097,8171],{"class":483},[152,16099,2848],{"class":476},[152,16101,16102],{"class":289}," \"func2(int a) 调用\"",[152,16104,3116],{"class":476},[152,16106,10472],{"class":483},[152,16108,16109],{"class":281,"line":1037},[152,16110,3236],{"class":483},[152,16112,16113],{"class":281,"line":1044},[152,16114,307],{"emptyLinePlaceholder":306},[152,16116,16117,16119,16121],{"class":281,"line":1049},[152,16118,1822],{"class":476},[152,16120,3624],{"class":285},[152,16122,12469],{"class":483},[152,16124,16125],{"class":281,"line":1054},[152,16126,14826],{"class":483},[152,16128,16129,16131,16133,16135,16137],{"class":281,"line":1065},[152,16130,3636],{"class":476},[152,16132,12485],{"class":483},[152,16134,1864],{"class":476},[152,16136,3689],{"class":293},[152,16138,2965],{"class":483},[152,16140,16141,16143,16146],{"class":281,"line":1074},[152,16142,14901],{"class":285},[152,16144,16145],{"class":483},"(a);",[152,16147,16148],{"class":866}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[152,16150,16151,16153,16155,16157,16159],{"class":281,"line":1084},[152,16152,14901],{"class":285},[152,16154,1819],{"class":483},[152,16156,2254],{"class":293},[152,16158,7608],{"class":483},[152,16160,16161],{"class":866},"\u002F\u002F调用有const   10是个常量\n",[152,16163,16164],{"class":281,"line":1091},[152,16165,307],{"emptyLinePlaceholder":306},[152,16167,16168],{"class":281,"line":1096},[152,16169,307],{"emptyLinePlaceholder":306},[152,16171,16172,16175],{"class":281,"line":1101},[152,16173,16174],{"class":866},"    \u002F\u002Ffunc2(10);",[152,16176,16177],{"class":866}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[152,16179,16180],{"class":281,"line":1112},[152,16181,307],{"emptyLinePlaceholder":306},[152,16183,16184,16186,16188,16190],{"class":281,"line":1121},[152,16185,3954],{"class":285},[152,16187,1819],{"class":483},[152,16189,3959],{"class":289},[152,16191,4362],{"class":483},[152,16193,16194],{"class":281,"line":1131},[152,16195,307],{"emptyLinePlaceholder":306},[152,16197,16198,16200,16202],{"class":281,"line":1138},[152,16199,5732],{"class":476},[152,16201,5735],{"class":293},[152,16203,2965],{"class":483},[152,16205,16206],{"class":281,"line":1143},[152,16207,3236],{"class":483},[1736,16209,16210],{},"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":275,"searchDepth":303,"depth":303,"links":16212},[16213,16214,16215],{"id":15145,"depth":303,"text":15146},{"id":15402,"depth":303,"text":15403},{"id":15524,"depth":303,"text":15525,"children":16216},[16217,16218],{"id":15531,"depth":310,"text":15532},{"id":15901,"depth":310,"text":15902},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15137,"description":275},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16225,"title":16226,"body":16227,"description":24979,"extension":1744,"meta":24980,"navigation":306,"path":24981,"seo":24982,"stem":24983,"__hash__":24984},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16228,"toc":24960},[16229,16232,16238,16245,16249,16252,16255,16258,16262,16266,16269,16272,16280,16285,16288,16295,16300,16459,16462,16715,16718,16721,16724,16729,16732,16735,16746,16751,16987,16991,17001,17004,17012,17159,17163,17166,17169,17173,17618,17622,17630,17638,18550,18557,18562,19190,19193,19196,19199,19318,19321,19408,19411,19537,19540,19634,19637,19990,19994,20002,20006,20013,20016,20019,20030,20036,20041,20053,20061,20081,20089,20106,20292,20295,20299,20302,20305,20308,20311,20314,20317,20320,20780,20786,20790,20793,20804,21391,21394,21883,21887,21890,21893,21896,21899,21902,21910,22306,22310,22313,22316,22763,22766,22769,22774,22777,22782,22785,22789,22792,22794,22800,22803,23109,23119,23160,23164,23167,23169,23202,23205,23512,23514,23529,23532,23555,23564,23570,23573,23577,23580,23583,23588,23599,23604,23612,23616,23746,23749,23752,23927,23932,24144,24148,24151,24265,24270,24509,24513,24517,24520,24523,24528,24633,24636,24639,24642,24646,24757,24760,24763,24768,24820,24823,24826,24831,24877,24880,24885,24953,24955,24958],[10,16230,16226],{"id":16231},"_8类和对象",[19,16233,16234,16235],{},"C++面向对象的三大特性为",[694,16236,16237],{},"封装、继承、多态",[19,16239,16240,16241,16244],{},"C++认为",[694,16242,16243],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16246,16247],{},[694,16248,607],{},[19,16250,16251],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16253,16254],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16256,16257],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[1760,16259,16261],{"id":16260},"_81封装","8.1封装",[14,16263,16265],{"id":16264},"_811封装的意义","8.1.1封装的意义",[19,16267,16268],{},"封装是C++面向对象三大特性之一",[19,16270,16271],{},"封装的意义：",[698,16273,16274,16277],{},[419,16275,16276],{},"将属性和行为作为一个整体，表现生活中的事物",[419,16278,16279],{},"将属性和行为加以权限控制",[19,16281,16282],{},[694,16283,16284],{},"封装意义一：",[19,16286,16287],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16289,16290,15411,16292],{},[694,16291,6823],{},[277,16293,16294],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[416,16296,16297],{},[419,16298,16299],{},"**示例1：**设计一个圆类，求圆的周长",[270,16301,16303],{"className":1807,"code":16302,"language":1809,"meta":275,"style":275},"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",[277,16304,16305,16313,16317,16322,16327,16332,16337,16344,16349,16359,16363,16381,16385,16389,16397,16401,16406,16411,16416,16421,16432,16455],{"__ignoreMap":275},[152,16306,16307,16310],{"class":281,"line":282},[152,16308,16309],{"class":476},"class",[152,16311,16312],{"class":285}," Circle\n",[152,16314,16315],{"class":281,"line":303},[152,16316,3217],{"class":483},[152,16318,16319],{"class":281,"line":310},[152,16320,16321],{"class":866},"    \u002F\u002F访问权限\n",[152,16323,16324],{"class":281,"line":324},[152,16325,16326],{"class":866},"    \u002F\u002F公共权限\n",[152,16328,16329],{"class":281,"line":329},[152,16330,16331],{"class":476},"public:\n",[152,16333,16334],{"class":281,"line":343},[152,16335,16336],{"class":866},"    \u002F\u002F属性\n",[152,16338,16339,16341],{"class":281,"line":348},[152,16340,3636],{"class":476},[152,16342,16343],{"class":483}," m_r;\n",[152,16345,16346],{"class":281,"line":362},[152,16347,16348],{"class":866},"    \u002F\u002F行为\n",[152,16350,16351,16354,16357],{"class":281,"line":367},[152,16352,16353],{"class":476},"    double",[152,16355,16356],{"class":285}," calculateZC",[152,16358,3627],{"class":483},[152,16360,16361],{"class":281,"line":381},[152,16362,3681],{"class":483},[152,16364,16365,16368,16371,16373,16376,16378],{"class":281,"line":386},[152,16366,16367],{"class":476},"        return",[152,16369,16370],{"class":293}," 2",[152,16372,2263],{"class":476},[152,16374,16375],{"class":483},"PI",[152,16377,2263],{"class":476},[152,16379,16380],{"class":483},"m_r;\n",[152,16382,16383],{"class":281,"line":932},[152,16384,3838],{"class":483},[152,16386,16387],{"class":281,"line":942},[152,16388,5637],{"class":483},[152,16390,16391,16393,16395],{"class":281,"line":949},[152,16392,1822],{"class":476},[152,16394,3624],{"class":285},[152,16396,3627],{"class":483},[152,16398,16399],{"class":281,"line":954},[152,16400,3217],{"class":483},[152,16402,16403],{"class":281,"line":959},[152,16404,16405],{"class":866},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[152,16407,16408],{"class":281,"line":970},[152,16409,16410],{"class":866},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[152,16412,16413],{"class":281,"line":979},[152,16414,16415],{"class":483},"    Circle c1;\n",[152,16417,16418],{"class":281,"line":989},[152,16419,16420],{"class":866},"    \u002F\u002F给圆对象 的属性进行赋值\n",[152,16422,16423,16426,16428,16430],{"class":281,"line":996},[152,16424,16425],{"class":483},"    c1.m_r",[152,16427,1864],{"class":476},[152,16429,2254],{"class":293},[152,16431,2965],{"class":483},[152,16433,16434,16436,16438,16441,16443,16446,16449,16451,16453],{"class":281,"line":1001},[152,16435,3222],{"class":483},[152,16437,2848],{"class":476},[152,16439,16440],{"class":289},"\"圆的周长\"",[152,16442,2848],{"class":476},[152,16444,16445],{"class":483},"c1.",[152,16447,16448],{"class":285},"calculateZC",[152,16450,4077],{"class":483},[152,16452,2848],{"class":476},[152,16454,2870],{"class":483},[152,16456,16457],{"class":281,"line":1006},[152,16458,3236],{"class":483},[19,16460,16461],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[270,16463,16465],{"className":1807,"code":16464,"language":1809,"meta":275,"style":275},"#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",[277,16466,16467,16473,16483,16489,16495,16499,16503,16508,16515,16520,16538,16542,16552,16556,16561,16577,16581,16591,16595,16600,16608,16612,16644,16648,16652,16660,16664,16669,16674,16688,16702,16711],{"__ignoreMap":275},[152,16468,16469,16471],{"class":281,"line":282},[152,16470,3601],{"class":476},[152,16472,3604],{"class":289},[152,16474,16475,16477,16479,16481],{"class":281,"line":303},[152,16476,3609],{"class":476},[152,16478,3612],{"class":476},[152,16480,3615],{"class":285},[152,16482,2965],{"class":483},[152,16484,16485,16487],{"class":281,"line":310},[152,16486,3601],{"class":476},[152,16488,9391],{"class":289},[152,16490,16491,16493],{"class":281,"line":324},[152,16492,16309],{"class":476},[152,16494,9404],{"class":285},[152,16496,16497],{"class":281,"line":329},[152,16498,3217],{"class":483},[152,16500,16501],{"class":281,"line":343},[152,16502,16331],{"class":476},[152,16504,16505],{"class":281,"line":348},[152,16506,16507],{"class":483},"    string m_name;\n",[152,16509,16510,16512],{"class":281,"line":362},[152,16511,3636],{"class":476},[152,16513,16514],{"class":483}," m_id;\n",[152,16516,16517],{"class":281,"line":367},[152,16518,16519],{"class":866},"    \u002F\u002F赋值姓名\n",[152,16521,16522,16525,16528,16530,16533,16536],{"class":281,"line":381},[152,16523,16524],{"class":476},"    void",[152,16526,16527],{"class":285}," setName",[152,16529,1819],{"class":483},[152,16531,16532],{"class":285},"string",[152,16534,16535],{"class":6858}," name",[152,16537,1825],{"class":483},[152,16539,16540],{"class":281,"line":386},[152,16541,3681],{"class":483},[152,16543,16544,16547,16549],{"class":281,"line":932},[152,16545,16546],{"class":483},"        m_name",[152,16548,1864],{"class":476},[152,16550,16551],{"class":483},"name;\n",[152,16553,16554],{"class":281,"line":942},[152,16555,3838],{"class":483},[152,16557,16558],{"class":281,"line":949},[152,16559,16560],{"class":866},"    \u002F\u002F赋值学号\n",[152,16562,16563,16565,16568,16570,16572,16575],{"class":281,"line":954},[152,16564,16524],{"class":476},[152,16566,16567],{"class":285}," setId",[152,16569,1819],{"class":483},[152,16571,1822],{"class":476},[152,16573,16574],{"class":6858}," id",[152,16576,1825],{"class":483},[152,16578,16579],{"class":281,"line":959},[152,16580,3681],{"class":483},[152,16582,16583,16586,16588],{"class":281,"line":970},[152,16584,16585],{"class":483},"        m_id",[152,16587,1864],{"class":476},[152,16589,16590],{"class":483},"id;\n",[152,16592,16593],{"class":281,"line":979},[152,16594,3838],{"class":483},[152,16596,16597],{"class":281,"line":989},[152,16598,16599],{"class":866},"    \u002F\u002F打印学生信息\n",[152,16601,16602,16604,16606],{"class":281,"line":996},[152,16603,16524],{"class":476},[152,16605,11247],{"class":285},[152,16607,3627],{"class":483},[152,16609,16610],{"class":281,"line":1001},[152,16611,3681],{"class":483},[152,16613,16614,16616,16618,16621,16623,16626,16628,16630,16632,16635,16637,16640,16642],{"class":281,"line":1006},[152,16615,5094],{"class":483},[152,16617,2848],{"class":476},[152,16619,16620],{"class":289},"\"姓名：\"",[152,16622,2848],{"class":476},[152,16624,16625],{"class":483},"m_name",[152,16627,2848],{"class":476},[152,16629,6001],{"class":289},[152,16631,2848],{"class":476},[152,16633,16634],{"class":289},"\"学号：\"",[152,16636,2848],{"class":476},[152,16638,16639],{"class":483},"m_id",[152,16641,2848],{"class":476},[152,16643,2870],{"class":483},[152,16645,16646],{"class":281,"line":1018},[152,16647,3838],{"class":483},[152,16649,16650],{"class":281,"line":1027},[152,16651,5637],{"class":483},[152,16653,16654,16656,16658],{"class":281,"line":1037},[152,16655,1822],{"class":476},[152,16657,3624],{"class":285},[152,16659,3627],{"class":483},[152,16661,16662],{"class":281,"line":1044},[152,16663,3217],{"class":483},[152,16665,16666],{"class":281,"line":1049},[152,16667,16668],{"class":866},"    \u002F\u002F实例化\n",[152,16670,16671],{"class":281,"line":1054},[152,16672,16673],{"class":483},"    Student s1;\n",[152,16675,16676,16679,16682,16684,16686],{"class":281,"line":1065},[152,16677,16678],{"class":483},"    s1.",[152,16680,16681],{"class":285},"setName",[152,16683,1819],{"class":483},[152,16685,9558],{"class":289},[152,16687,4362],{"class":483},[152,16689,16690,16692,16695,16697,16700],{"class":281,"line":1074},[152,16691,16678],{"class":483},[152,16693,16694],{"class":285},"setId",[152,16696,1819],{"class":483},[152,16698,16699],{"class":293},"123456",[152,16701,4362],{"class":483},[152,16703,16704,16706,16709],{"class":281,"line":1084},[152,16705,16678],{"class":483},[152,16707,16708],{"class":285},"printInfo",[152,16710,7278],{"class":483},[152,16712,16713],{"class":281,"line":1091},[152,16714,3236],{"class":483},[19,16716,16717],{},"类中的属性和行为统称为成员",[19,16719,16720],{},"属性：成员属性(成员变量)",[19,16722,16723],{},"方法：成员函数(成员方法)",[19,16725,16726],{},[694,16727,16728],{},"封装意义二：",[19,16730,16731],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16733,16734],{},"访问权限有三种：",[416,16736,16737,16740,16743],{},[419,16738,16739],{},"public        公共权限",[419,16741,16742],{},"protected 保护权限",[419,16744,16745],{},"private      私有权限",[19,16747,16748],{},[694,16749,16750],{},"示例：",[270,16752,16754],{"className":11557,"code":16753,"language":11559,"meta":275,"style":275},"\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",[277,16755,16756,16761,16766,16771,16776,16780,16787,16791,16796,16800,16805,16809,16814,16819,16824,16828,16833,16838,16845,16849,16853,16861,16865,16876,16888,16900,16904,16908,16912,16920,16924,16929,16941,16949,16957,16961,16971,16975,16983],{"__ignoreMap":275},[152,16757,16758],{"class":281,"line":282},[152,16759,16760],{"class":866},"\u002F\u002F三种权限\n",[152,16762,16763],{"class":281,"line":303},[152,16764,16765],{"class":866},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[152,16767,16768],{"class":281,"line":310},[152,16769,16770],{"class":866},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[152,16772,16773],{"class":281,"line":324},[152,16774,16775],{"class":866},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[152,16777,16778],{"class":281,"line":329},[152,16779,307],{"emptyLinePlaceholder":306},[152,16781,16782,16784],{"class":281,"line":343},[152,16783,16309],{"class":476},[152,16785,16786],{"class":285}," Person\n",[152,16788,16789],{"class":281,"line":348},[152,16790,3217],{"class":483},[152,16792,16793],{"class":281,"line":362},[152,16794,16795],{"class":866},"    \u002F\u002F姓名  公共权限\n",[152,16797,16798],{"class":281,"line":367},[152,16799,16331],{"class":476},[152,16801,16802],{"class":281,"line":381},[152,16803,16804],{"class":483},"    string m_Name;\n",[152,16806,16807],{"class":281,"line":386},[152,16808,307],{"emptyLinePlaceholder":306},[152,16810,16811],{"class":281,"line":932},[152,16812,16813],{"class":866},"    \u002F\u002F汽车  保护权限\n",[152,16815,16816],{"class":281,"line":942},[152,16817,16818],{"class":476},"protected:\n",[152,16820,16821],{"class":281,"line":949},[152,16822,16823],{"class":483},"    string m_Car;\n",[152,16825,16826],{"class":281,"line":954},[152,16827,307],{"emptyLinePlaceholder":306},[152,16829,16830],{"class":281,"line":959},[152,16831,16832],{"class":866},"    \u002F\u002F银行卡密码  私有权限\n",[152,16834,16835],{"class":281,"line":970},[152,16836,16837],{"class":476},"private:\n",[152,16839,16840,16842],{"class":281,"line":979},[152,16841,3636],{"class":476},[152,16843,16844],{"class":483}," m_Password;\n",[152,16846,16847],{"class":281,"line":989},[152,16848,307],{"emptyLinePlaceholder":306},[152,16850,16851],{"class":281,"line":996},[152,16852,16331],{"class":476},[152,16854,16855,16857,16859],{"class":281,"line":1001},[152,16856,16524],{"class":476},[152,16858,13001],{"class":285},[152,16860,3627],{"class":483},[152,16862,16863],{"class":281,"line":1006},[152,16864,3681],{"class":483},[152,16866,16867,16870,16872,16874],{"class":281,"line":1018},[152,16868,16869],{"class":483},"        m_Name ",[152,16871,1864],{"class":476},[152,16873,10570],{"class":289},[152,16875,2965],{"class":483},[152,16877,16878,16881,16883,16886],{"class":281,"line":1027},[152,16879,16880],{"class":483},"        m_Car ",[152,16882,1864],{"class":476},[152,16884,16885],{"class":289}," \"拖拉机\"",[152,16887,2965],{"class":483},[152,16889,16890,16893,16895,16898],{"class":281,"line":1037},[152,16891,16892],{"class":483},"        m_Password ",[152,16894,1864],{"class":476},[152,16896,16897],{"class":293}," 123456",[152,16899,2965],{"class":483},[152,16901,16902],{"class":281,"line":1044},[152,16903,3838],{"class":483},[152,16905,16906],{"class":281,"line":1049},[152,16907,5637],{"class":483},[152,16909,16910],{"class":281,"line":1054},[152,16911,307],{"emptyLinePlaceholder":306},[152,16913,16914,16916,16918],{"class":281,"line":1065},[152,16915,1822],{"class":476},[152,16917,3624],{"class":285},[152,16919,12469],{"class":483},[152,16921,16922],{"class":281,"line":1074},[152,16923,307],{"emptyLinePlaceholder":306},[152,16925,16926],{"class":281,"line":1084},[152,16927,16928],{"class":483},"    Person p;\n",[152,16930,16931,16934,16936,16939],{"class":281,"line":1091},[152,16932,16933],{"class":483},"    p.m_Name ",[152,16935,1864],{"class":476},[152,16937,16938],{"class":289}," \"李四\"",[152,16940,2965],{"class":483},[152,16942,16943,16946],{"class":281,"line":1096},[152,16944,16945],{"class":866},"    \u002F\u002Fp.m_Car = \"奔驰\";",[152,16947,16948],{"class":866},"  \u002F\u002F保护权限类外访问不到\n",[152,16950,16951,16954],{"class":281,"line":1101},[152,16952,16953],{"class":866},"    \u002F\u002Fp.m_Password = 123;",[152,16955,16956],{"class":866}," \u002F\u002F私有权限类外访问不到\n",[152,16958,16959],{"class":281,"line":1112},[152,16960,307],{"emptyLinePlaceholder":306},[152,16962,16963,16965,16967,16969],{"class":281,"line":1121},[152,16964,3954],{"class":285},[152,16966,1819],{"class":483},[152,16968,3959],{"class":289},[152,16970,4362],{"class":483},[152,16972,16973],{"class":281,"line":1131},[152,16974,307],{"emptyLinePlaceholder":306},[152,16976,16977,16979,16981],{"class":281,"line":1138},[152,16978,5732],{"class":476},[152,16980,5735],{"class":293},[152,16982,2965],{"class":483},[152,16984,16985],{"class":281,"line":1143},[152,16986,3236],{"class":483},[14,16988,16990],{"id":16989},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16992,16993,16994,16997,16998],{},"在C++中 struct和class唯一的",[694,16995,16996],{},"区别","就在于 ",[694,16999,17000],{},"默认的访问权限不同",[19,17002,17003],{},"区别：",[698,17005,17006,17009],{},[419,17007,17008],{},"struct 默认权限为公共",[419,17010,17011],{},"class   默认权限为私有",[270,17013,17015],{"className":11557,"code":17014,"language":11559,"meta":275,"style":275},"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",[277,17016,17017,17024,17028,17038,17042,17046,17053,17057,17067,17071,17075,17083,17087,17092,17106,17110,17115,17129,17133,17143,17147,17155],{"__ignoreMap":275},[152,17018,17019,17021],{"class":281,"line":282},[152,17020,16309],{"class":476},[152,17022,17023],{"class":285}," C1\n",[152,17025,17026],{"class":281,"line":303},[152,17027,3217],{"class":483},[152,17029,17030,17032,17035],{"class":281,"line":310},[152,17031,3636],{"class":476},[152,17033,17034],{"class":483},"  m_A;",[152,17036,17037],{"class":866}," \u002F\u002F默认是私有权限\n",[152,17039,17040],{"class":281,"line":324},[152,17041,5637],{"class":483},[152,17043,17044],{"class":281,"line":329},[152,17045,307],{"emptyLinePlaceholder":306},[152,17047,17048,17050],{"class":281,"line":343},[152,17049,9401],{"class":476},[152,17051,17052],{"class":285}," C2\n",[152,17054,17055],{"class":281,"line":348},[152,17056,3217],{"class":483},[152,17058,17059,17061,17064],{"class":281,"line":362},[152,17060,3636],{"class":476},[152,17062,17063],{"class":483}," m_A;",[152,17065,17066],{"class":866},"  \u002F\u002F默认是公共权限\n",[152,17068,17069],{"class":281,"line":367},[152,17070,5637],{"class":483},[152,17072,17073],{"class":281,"line":381},[152,17074,307],{"emptyLinePlaceholder":306},[152,17076,17077,17079,17081],{"class":281,"line":386},[152,17078,1822],{"class":476},[152,17080,3624],{"class":285},[152,17082,12469],{"class":483},[152,17084,17085],{"class":281,"line":932},[152,17086,307],{"emptyLinePlaceholder":306},[152,17088,17089],{"class":281,"line":942},[152,17090,17091],{"class":483},"    C1 c1;\n",[152,17093,17094,17097,17099,17101,17103],{"class":281,"line":949},[152,17095,17096],{"class":483},"    c1.m_A ",[152,17098,1864],{"class":476},[152,17100,3689],{"class":293},[152,17102,1873],{"class":483},[152,17104,17105],{"class":866}," \u002F\u002F错误，访问权限是私有\n",[152,17107,17108],{"class":281,"line":954},[152,17109,307],{"emptyLinePlaceholder":306},[152,17111,17112],{"class":281,"line":959},[152,17113,17114],{"class":483},"    C2 c2;\n",[152,17116,17117,17120,17122,17124,17126],{"class":281,"line":970},[152,17118,17119],{"class":483},"    c2.m_A ",[152,17121,1864],{"class":476},[152,17123,3689],{"class":293},[152,17125,1873],{"class":483},[152,17127,17128],{"class":866}," \u002F\u002F正确，访问权限是公共\n",[152,17130,17131],{"class":281,"line":979},[152,17132,307],{"emptyLinePlaceholder":306},[152,17134,17135,17137,17139,17141],{"class":281,"line":989},[152,17136,3954],{"class":285},[152,17138,1819],{"class":483},[152,17140,3959],{"class":289},[152,17142,4362],{"class":483},[152,17144,17145],{"class":281,"line":996},[152,17146,307],{"emptyLinePlaceholder":306},[152,17148,17149,17151,17153],{"class":281,"line":1001},[152,17150,5732],{"class":476},[152,17152,5735],{"class":293},[152,17154,2965],{"class":483},[152,17156,17157],{"class":281,"line":1006},[152,17158,3236],{"class":483},[14,17160,17162],{"id":17161},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17164,17165],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17167,17168],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17170,17171],{},[694,17172,16750],{},[270,17174,17176],{"className":11557,"code":17175,"language":11559,"meta":275,"style":275},"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",[277,17177,17178,17188,17192,17196,17201,17215,17224,17228,17238,17242,17249,17253,17257,17261,17266,17275,17282,17286,17291,17307,17330,17343,17350,17354,17363,17367,17371,17376,17392,17402,17406,17410,17414,17422,17426,17436,17440,17448,17452,17456,17464,17468,17472,17477,17490,17513,17517,17522,17535,17557,17561,17566,17580,17588,17592,17602,17606,17614],{"__ignoreMap":275},[152,17179,17180,17182,17185],{"class":281,"line":282},[152,17181,16309],{"class":476},[152,17183,17184],{"class":285}," Person",[152,17186,17187],{"class":483}," {\n",[152,17189,17190],{"class":281,"line":303},[152,17191,16331],{"class":476},[152,17193,17194],{"class":281,"line":310},[152,17195,307],{"emptyLinePlaceholder":306},[152,17197,17198],{"class":281,"line":324},[152,17199,17200],{"class":866},"    \u002F\u002F姓名设置可读可写\n",[152,17202,17203,17205,17207,17209,17211,17213],{"class":281,"line":329},[152,17204,16524],{"class":476},[152,17206,16527],{"class":285},[152,17208,1819],{"class":483},[152,17210,16532],{"class":285},[152,17212,16535],{"class":6858},[152,17214,14058],{"class":483},[152,17216,17217,17219,17221],{"class":281,"line":343},[152,17218,16869],{"class":483},[152,17220,1864],{"class":476},[152,17222,17223],{"class":483}," name;\n",[152,17225,17226],{"class":281,"line":348},[152,17227,3838],{"class":483},[152,17229,17230,17233,17236],{"class":281,"line":362},[152,17231,17232],{"class":285},"    string",[152,17234,17235],{"class":285}," getName",[152,17237,3627],{"class":483},[152,17239,17240],{"class":281,"line":367},[152,17241,3681],{"class":483},[152,17243,17244,17246],{"class":281,"line":381},[152,17245,16367],{"class":476},[152,17247,17248],{"class":483}," m_Name;\n",[152,17250,17251],{"class":281,"line":386},[152,17252,3838],{"class":483},[152,17254,17255],{"class":281,"line":932},[152,17256,307],{"emptyLinePlaceholder":306},[152,17258,17259],{"class":281,"line":942},[152,17260,307],{"emptyLinePlaceholder":306},[152,17262,17263],{"class":281,"line":949},[152,17264,17265],{"class":866},"    \u002F\u002F获取年龄 \n",[152,17267,17268,17270,17273],{"class":281,"line":954},[152,17269,3636],{"class":476},[152,17271,17272],{"class":285}," getAge",[152,17274,12469],{"class":483},[152,17276,17277,17279],{"class":281,"line":959},[152,17278,16367],{"class":476},[152,17280,17281],{"class":483}," m_Age;\n",[152,17283,17284],{"class":281,"line":970},[152,17285,3838],{"class":483},[152,17287,17288],{"class":281,"line":979},[152,17289,17290],{"class":866},"    \u002F\u002F设置年龄\n",[152,17292,17293,17295,17298,17300,17302,17305],{"class":281,"line":989},[152,17294,16524],{"class":476},[152,17296,17297],{"class":285}," setAge",[152,17299,1819],{"class":483},[152,17301,1822],{"class":476},[152,17303,17304],{"class":6858}," age",[152,17306,14058],{"class":483},[152,17308,17309,17311,17314,17316,17318,17320,17323,17325,17328],{"class":281,"line":996},[152,17310,4147],{"class":476},[152,17312,17313],{"class":483}," (age ",[152,17315,844],{"class":476},[152,17317,5735],{"class":293},[152,17319,4898],{"class":476},[152,17321,17322],{"class":483}," age ",[152,17324,487],{"class":476},[152,17326,17327],{"class":293}," 150",[152,17329,14058],{"class":483},[152,17331,17332,17334,17336,17339,17341],{"class":281,"line":1001},[152,17333,11350],{"class":483},[152,17335,2848],{"class":476},[152,17337,17338],{"class":289}," \"你个老妖精!\"",[152,17340,3116],{"class":476},[152,17342,10472],{"class":483},[152,17344,17345,17348],{"class":281,"line":1006},[152,17346,17347],{"class":476},"            return",[152,17349,2965],{"class":483},[152,17351,17352],{"class":281,"line":1018},[152,17353,4179],{"class":483},[152,17355,17356,17359,17361],{"class":281,"line":1027},[152,17357,17358],{"class":483},"        m_Age ",[152,17360,1864],{"class":476},[152,17362,9439],{"class":483},[152,17364,17365],{"class":281,"line":1037},[152,17366,3838],{"class":483},[152,17368,17369],{"class":281,"line":1044},[152,17370,307],{"emptyLinePlaceholder":306},[152,17372,17373],{"class":281,"line":1049},[152,17374,17375],{"class":866},"    \u002F\u002F情人设置为只写\n",[152,17377,17378,17380,17383,17385,17387,17390],{"class":281,"line":1054},[152,17379,16524],{"class":476},[152,17381,17382],{"class":285}," setLover",[152,17384,1819],{"class":483},[152,17386,16532],{"class":285},[152,17388,17389],{"class":6858}," lover",[152,17391,14058],{"class":483},[152,17393,17394,17397,17399],{"class":281,"line":1065},[152,17395,17396],{"class":483},"        m_Lover ",[152,17398,1864],{"class":476},[152,17400,17401],{"class":483}," lover;\n",[152,17403,17404],{"class":281,"line":1074},[152,17405,3838],{"class":483},[152,17407,17408],{"class":281,"line":1084},[152,17409,307],{"emptyLinePlaceholder":306},[152,17411,17412],{"class":281,"line":1091},[152,17413,16837],{"class":476},[152,17415,17416,17419],{"class":281,"line":1096},[152,17417,17418],{"class":483},"    string m_Name;",[152,17420,17421],{"class":866}," \u002F\u002F可读可写  姓名\n",[152,17423,17424],{"class":281,"line":1101},[152,17425,14826],{"class":483},[152,17427,17428,17430,17433],{"class":281,"line":1112},[152,17429,3636],{"class":476},[152,17431,17432],{"class":483}," m_Age;",[152,17434,17435],{"class":866}," \u002F\u002F只读  年龄\n",[152,17437,17438],{"class":281,"line":1121},[152,17439,307],{"emptyLinePlaceholder":306},[152,17441,17442,17445],{"class":281,"line":1131},[152,17443,17444],{"class":483},"    string m_Lover;",[152,17446,17447],{"class":866}," \u002F\u002F只写  情人\n",[152,17449,17450],{"class":281,"line":1138},[152,17451,5637],{"class":483},[152,17453,17454],{"class":281,"line":1143},[152,17455,307],{"emptyLinePlaceholder":306},[152,17457,17458,17460,17462],{"class":281,"line":1148},[152,17459,1822],{"class":476},[152,17461,3624],{"class":285},[152,17463,12469],{"class":483},[152,17465,17466],{"class":281,"line":1159},[152,17467,307],{"emptyLinePlaceholder":306},[152,17469,17470],{"class":281,"line":1168},[152,17471,16928],{"class":483},[152,17473,17474],{"class":281,"line":1178},[152,17475,17476],{"class":866},"    \u002F\u002F姓名设置\n",[152,17478,17479,17482,17484,17486,17488],{"class":281,"line":1185},[152,17480,17481],{"class":483},"    p.",[152,17483,16681],{"class":285},[152,17485,1819],{"class":483},[152,17487,9558],{"class":289},[152,17489,4362],{"class":483},[152,17491,17492,17494,17496,17499,17501,17504,17507,17509,17511],{"class":281,"line":1190},[152,17493,8171],{"class":483},[152,17495,2848],{"class":476},[152,17497,17498],{"class":289}," \"姓名： \"",[152,17500,3116],{"class":476},[152,17502,17503],{"class":483}," p.",[152,17505,17506],{"class":285},"getName",[152,17508,14666],{"class":483},[152,17510,2848],{"class":476},[152,17512,10472],{"class":483},[152,17514,17515],{"class":281,"line":1195},[152,17516,307],{"emptyLinePlaceholder":306},[152,17518,17519],{"class":281,"line":1206},[152,17520,17521],{"class":866},"    \u002F\u002F年龄设置\n",[152,17523,17524,17526,17529,17531,17533],{"class":281,"line":1215},[152,17525,17481],{"class":483},[152,17527,17528],{"class":285},"setAge",[152,17530,1819],{"class":483},[152,17532,2464],{"class":293},[152,17534,4362],{"class":483},[152,17536,17537,17539,17541,17544,17546,17548,17551,17553,17555],{"class":281,"line":1225},[152,17538,8171],{"class":483},[152,17540,2848],{"class":476},[152,17542,17543],{"class":289}," \"年龄： \"",[152,17545,3116],{"class":476},[152,17547,17503],{"class":483},[152,17549,17550],{"class":285},"getAge",[152,17552,14666],{"class":483},[152,17554,2848],{"class":476},[152,17556,10472],{"class":483},[152,17558,17559],{"class":281,"line":1232},[152,17560,307],{"emptyLinePlaceholder":306},[152,17562,17563],{"class":281,"line":1237},[152,17564,17565],{"class":866},"    \u002F\u002F情人设置\n",[152,17567,17568,17570,17573,17575,17578],{"class":281,"line":1242},[152,17569,17481],{"class":483},[152,17571,17572],{"class":285},"setLover",[152,17574,1819],{"class":483},[152,17576,17577],{"class":289},"\"苍井\"",[152,17579,4362],{"class":483},[152,17581,17582,17585],{"class":281,"line":1253},[152,17583,17584],{"class":866},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[152,17586,17587],{"class":866},"  \u002F\u002F只写属性，不可以读取\n",[152,17589,17590],{"class":281,"line":1262},[152,17591,307],{"emptyLinePlaceholder":306},[152,17593,17594,17596,17598,17600],{"class":281,"line":1272},[152,17595,3954],{"class":285},[152,17597,1819],{"class":483},[152,17599,3959],{"class":289},[152,17601,4362],{"class":483},[152,17603,17604],{"class":281,"line":1279},[152,17605,307],{"emptyLinePlaceholder":306},[152,17607,17608,17610,17612],{"class":281,"line":1284},[152,17609,5732],{"class":476},[152,17611,5735],{"class":293},[152,17613,2965],{"class":483},[152,17615,17616],{"class":281,"line":1289},[152,17617,3236],{"class":483},[14,17619,17621],{"id":17620},"_814封装案例","8.1.4封装案例",[416,17623,17624],{},[419,17625,17626,17629],{},[694,17627,17628],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[698,17631,17632,17635],{},[419,17633,17634],{},"求出立方体的面积和体积",[419,17636,17637],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[270,17639,17641],{"className":1807,"code":17640,"language":1809,"meta":275,"style":275},"#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",[277,17642,17643,17649,17659,17666,17670,17674,17679,17709,17713,17723,17733,17743,17747,17756,17760,17796,17800,17809,17813,17829,17833,17838,17847,17851,17858,17862,17871,17875,17882,17886,17895,17899,17906,17910,17915,17932,17936,17982,17986,17995,17999,18003,18007,18016,18020,18024,18029,18033,18039,18045,18051,18055,18059,18064,18086,18090,18144,18148,18156,18160,18165,18170,18183,18190,18206,18217,18223,18246,18252,18275,18289,18309,18315,18326,18349,18371,18376,18382,18396,18409,18414,18428,18433,18439,18444,18458,18463,18468,18482,18494,18499,18512,18517,18522,18527,18540,18545],{"__ignoreMap":275},[152,17644,17645,17647],{"class":281,"line":282},[152,17646,3601],{"class":476},[152,17648,3604],{"class":289},[152,17650,17651,17653,17655,17657],{"class":281,"line":303},[152,17652,3609],{"class":476},[152,17654,3612],{"class":476},[152,17656,3615],{"class":285},[152,17658,2965],{"class":483},[152,17660,17661,17663],{"class":281,"line":310},[152,17662,16309],{"class":476},[152,17664,17665],{"class":285}," Cube\n",[152,17667,17668],{"class":281,"line":324},[152,17669,3217],{"class":483},[152,17671,17672],{"class":281,"line":329},[152,17673,16331],{"class":476},[152,17675,17676],{"class":281,"line":343},[152,17677,17678],{"class":866},"    \u002F\u002F输入长宽高\n",[152,17680,17681,17683,17686,17688,17690,17693,17695,17697,17700,17702,17704,17707],{"class":281,"line":348},[152,17682,16524],{"class":476},[152,17684,17685],{"class":285}," setLwh",[152,17687,1819],{"class":483},[152,17689,1822],{"class":476},[152,17691,17692],{"class":6858}," l",[152,17694,2186],{"class":483},[152,17696,1822],{"class":476},[152,17698,17699],{"class":6858}," w",[152,17701,2186],{"class":483},[152,17703,1822],{"class":476},[152,17705,17706],{"class":6858}," h",[152,17708,1825],{"class":483},[152,17710,17711],{"class":281,"line":362},[152,17712,3681],{"class":483},[152,17714,17715,17718,17720],{"class":281,"line":367},[152,17716,17717],{"class":483},"        m_L",[152,17719,1864],{"class":476},[152,17721,17722],{"class":483},"l;\n",[152,17724,17725,17728,17730],{"class":281,"line":381},[152,17726,17727],{"class":483},"        m_W",[152,17729,1864],{"class":476},[152,17731,17732],{"class":483},"w;\n",[152,17734,17735,17738,17740],{"class":281,"line":386},[152,17736,17737],{"class":483},"        m_H",[152,17739,1864],{"class":476},[152,17741,17742],{"class":483},"h;\n",[152,17744,17745],{"class":281,"line":932},[152,17746,3838],{"class":483},[152,17748,17749,17751,17754],{"class":281,"line":942},[152,17750,3636],{"class":476},[152,17752,17753],{"class":285}," mianji",[152,17755,3627],{"class":483},[152,17757,17758],{"class":281,"line":949},[152,17759,3681],{"class":483},[152,17761,17762,17764,17766,17768,17771,17773,17776,17778,17781,17783,17786,17788,17791,17793],{"class":281,"line":954},[152,17763,16367],{"class":476},[152,17765,16370],{"class":293},[152,17767,2263],{"class":476},[152,17769,17770],{"class":483},"(m_L",[152,17772,2263],{"class":476},[152,17774,17775],{"class":483},"m_W ",[152,17777,2289],{"class":476},[152,17779,17780],{"class":483}," m_L",[152,17782,2263],{"class":476},[152,17784,17785],{"class":483},"m_H ",[152,17787,2289],{"class":476},[152,17789,17790],{"class":483}," m_W",[152,17792,2263],{"class":476},[152,17794,17795],{"class":483},"m_H);\n",[152,17797,17798],{"class":281,"line":959},[152,17799,3838],{"class":483},[152,17801,17802,17804,17807],{"class":281,"line":970},[152,17803,3636],{"class":476},[152,17805,17806],{"class":285}," tiji",[152,17808,3627],{"class":483},[152,17810,17811],{"class":281,"line":979},[152,17812,3681],{"class":483},[152,17814,17815,17817,17819,17821,17824,17826],{"class":281,"line":989},[152,17816,16367],{"class":476},[152,17818,17780],{"class":483},[152,17820,2263],{"class":476},[152,17822,17823],{"class":483},"m_W",[152,17825,2263],{"class":476},[152,17827,17828],{"class":483},"m_H;\n",[152,17830,17831],{"class":281,"line":996},[152,17832,3838],{"class":483},[152,17834,17835],{"class":281,"line":1001},[152,17836,17837],{"class":866},"    \u002F\u002F获取长宽高\n",[152,17839,17840,17842,17845],{"class":281,"line":1006},[152,17841,3636],{"class":476},[152,17843,17844],{"class":285}," getLength",[152,17846,3627],{"class":483},[152,17848,17849],{"class":281,"line":1018},[152,17850,3681],{"class":483},[152,17852,17853,17855],{"class":281,"line":1027},[152,17854,16367],{"class":476},[152,17856,17857],{"class":483}," m_L;\n",[152,17859,17860],{"class":281,"line":1037},[152,17861,3838],{"class":483},[152,17863,17864,17866,17869],{"class":281,"line":1044},[152,17865,3636],{"class":476},[152,17867,17868],{"class":285}," getWidth",[152,17870,3627],{"class":483},[152,17872,17873],{"class":281,"line":1049},[152,17874,3681],{"class":483},[152,17876,17877,17879],{"class":281,"line":1054},[152,17878,16367],{"class":476},[152,17880,17881],{"class":483}," m_W;\n",[152,17883,17884],{"class":281,"line":1065},[152,17885,3838],{"class":483},[152,17887,17888,17890,17893],{"class":281,"line":1074},[152,17889,3636],{"class":476},[152,17891,17892],{"class":285}," getHeight",[152,17894,3627],{"class":483},[152,17896,17897],{"class":281,"line":1084},[152,17898,3681],{"class":483},[152,17900,17901,17903],{"class":281,"line":1091},[152,17902,16367],{"class":476},[152,17904,17905],{"class":483}," m_H;\n",[152,17907,17908],{"class":281,"line":1096},[152,17909,3838],{"class":483},[152,17911,17912],{"class":281,"line":1101},[152,17913,17914],{"class":866},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[152,17916,17917,17920,17923,17925,17928,17930],{"class":281,"line":1112},[152,17918,17919],{"class":476},"    bool",[152,17921,17922],{"class":285}," isEqual",[152,17924,1819],{"class":483},[152,17926,17927],{"class":285},"Cube",[152,17929,4492],{"class":6858},[152,17931,1825],{"class":483},[152,17933,17934],{"class":281,"line":1121},[152,17935,3681],{"class":483},[152,17937,17938,17940,17943,17946,17948,17950,17953,17955,17958,17961,17963,17965,17968,17970,17972,17975,17977,17979],{"class":281,"line":1131},[152,17939,4147],{"class":476},[152,17941,17942],{"class":483}," (c.",[152,17944,17945],{"class":285},"getLength",[152,17947,14666],{"class":483},[152,17949,4592],{"class":476},[152,17951,17952],{"class":483}," m_L ",[152,17954,3375],{"class":476},[152,17956,17957],{"class":483}," c.",[152,17959,17960],{"class":285},"getWidth",[152,17962,14666],{"class":483},[152,17964,4592],{"class":476},[152,17966,17967],{"class":483}," m_W ",[152,17969,3375],{"class":476},[152,17971,17957],{"class":483},[152,17973,17974],{"class":285},"getHeight",[152,17976,14666],{"class":483},[152,17978,4592],{"class":476},[152,17980,17981],{"class":483}," m_H)\n",[152,17983,17984],{"class":281,"line":1138},[152,17985,4160],{"class":483},[152,17987,17988,17990,17993],{"class":281,"line":1143},[152,17989,17347],{"class":476},[152,17991,17992],{"class":293}," true",[152,17994,2965],{"class":483},[152,17996,17997],{"class":281,"line":1148},[152,17998,4179],{"class":483},[152,18000,18001],{"class":281,"line":1159},[152,18002,4220],{"class":476},[152,18004,18005],{"class":281,"line":1168},[152,18006,4160],{"class":483},[152,18008,18009,18011,18014],{"class":281,"line":1178},[152,18010,17347],{"class":476},[152,18012,18013],{"class":293}," false",[152,18015,2965],{"class":483},[152,18017,18018],{"class":281,"line":1185},[152,18019,4179],{"class":483},[152,18021,18022],{"class":281,"line":1190},[152,18023,3838],{"class":483},[152,18025,18026],{"class":281,"line":1195},[152,18027,18028],{"class":866},"    \u002F\u002F私有属性\n",[152,18030,18031],{"class":281,"line":1206},[152,18032,16837],{"class":476},[152,18034,18035,18037],{"class":281,"line":1215},[152,18036,3636],{"class":476},[152,18038,17857],{"class":483},[152,18040,18041,18043],{"class":281,"line":1225},[152,18042,3636],{"class":476},[152,18044,17881],{"class":483},[152,18046,18047,18049],{"class":281,"line":1232},[152,18048,3636],{"class":476},[152,18050,17905],{"class":483},[152,18052,18053],{"class":281,"line":1237},[152,18054,307],{"emptyLinePlaceholder":306},[152,18056,18057],{"class":281,"line":1242},[152,18058,5637],{"class":483},[152,18060,18061],{"class":281,"line":1253},[152,18062,18063],{"class":866},"\u002F\u002F全局函数判断两个立方体是否相等\n",[152,18065,18066,18068,18070,18072,18074,18077,18079,18081,18084],{"class":281,"line":1262},[152,18067,3026],{"class":476},[152,18069,17922],{"class":285},[152,18071,1819],{"class":483},[152,18073,17927],{"class":285},[152,18075,18076],{"class":6858}," c1",[152,18078,2186],{"class":483},[152,18080,17927],{"class":285},[152,18082,18083],{"class":6858}," c2",[152,18085,1825],{"class":483},[152,18087,18088],{"class":281,"line":1272},[152,18089,3217],{"class":483},[152,18091,18092,18094,18097,18099,18101,18103,18106,18108,18111,18113,18115,18117,18119,18121,18123,18125,18127,18129,18131,18133,18135,18137,18139,18141],{"class":281,"line":1279},[152,18093,5732],{"class":476},[152,18095,18096],{"class":483}," (c1.",[152,18098,17945],{"class":285},[152,18100,14666],{"class":483},[152,18102,4592],{"class":476},[152,18104,18105],{"class":483}," c2.",[152,18107,17945],{"class":285},[152,18109,18110],{"class":483},"()) ",[152,18112,3375],{"class":476},[152,18114,18096],{"class":483},[152,18116,17960],{"class":285},[152,18118,14666],{"class":483},[152,18120,4592],{"class":476},[152,18122,18105],{"class":483},[152,18124,17960],{"class":285},[152,18126,18110],{"class":483},[152,18128,3375],{"class":476},[152,18130,18096],{"class":483},[152,18132,17974],{"class":285},[152,18134,14666],{"class":483},[152,18136,4592],{"class":476},[152,18138,18105],{"class":483},[152,18140,17974],{"class":285},[152,18142,18143],{"class":483},"());\n",[152,18145,18146],{"class":281,"line":1284},[152,18147,3236],{"class":483},[152,18149,18150,18152,18154],{"class":281,"line":1289},[152,18151,1822],{"class":476},[152,18153,3624],{"class":285},[152,18155,3627],{"class":483},[152,18157,18158],{"class":281,"line":1301},[152,18159,3217],{"class":483},[152,18161,18162],{"class":281,"line":1310},[152,18163,18164],{"class":483},"    Cube c1;\n",[152,18166,18167],{"class":281,"line":1320},[152,18168,18169],{"class":866},"    \u002F\u002F输入立方体的长宽高\n",[152,18171,18172,18174,18176,18179,18181],{"class":281,"line":1327},[152,18173,3222],{"class":483},[152,18175,2848],{"class":476},[152,18177,18178],{"class":289},"\"请输入第一个立方体的长、宽、高：\"",[152,18180,2848],{"class":476},[152,18182,2870],{"class":483},[152,18184,18185,18187],{"class":281,"line":11528},[152,18186,3636],{"class":476},[152,18188,18189],{"class":483}," l,w,h,l1,w1,h1;\n",[152,18191,18192,18194,18196,18198,18200,18202,18204],{"class":281,"line":11536},[152,18193,3663],{"class":483},[152,18195,3101],{"class":476},[152,18197,2326],{"class":483},[152,18199,3101],{"class":476},[152,18201,2603],{"class":483},[152,18203,3101],{"class":476},[152,18205,17742],{"class":483},[152,18207,18208,18211,18214],{"class":281,"line":11541},[152,18209,18210],{"class":483},"    c1.",[152,18212,18213],{"class":285},"setLwh",[152,18215,18216],{"class":483},"(l,w,h);\n",[152,18218,18220],{"class":281,"line":18219},66,[152,18221,18222],{"class":866},"    \u002F\u002F面积\n",[152,18224,18226,18228,18230,18233,18235,18237,18240,18242,18244],{"class":281,"line":18225},67,[152,18227,3222],{"class":483},[152,18229,2848],{"class":476},[152,18231,18232],{"class":289},"\"立方体的表面积为：\"",[152,18234,2848],{"class":476},[152,18236,16445],{"class":483},[152,18238,18239],{"class":285},"mianji",[152,18241,4077],{"class":483},[152,18243,2848],{"class":476},[152,18245,2870],{"class":483},[152,18247,18249],{"class":281,"line":18248},68,[152,18250,18251],{"class":866},"    \u002F\u002F体积\n",[152,18253,18255,18257,18259,18262,18264,18266,18269,18271,18273],{"class":281,"line":18254},69,[152,18256,3222],{"class":483},[152,18258,2848],{"class":476},[152,18260,18261],{"class":289},"\"立方体的体积为：\"",[152,18263,2848],{"class":476},[152,18265,16445],{"class":483},[152,18267,18268],{"class":285},"tiji",[152,18270,4077],{"class":483},[152,18272,2848],{"class":476},[152,18274,2870],{"class":483},[152,18276,18278,18280,18282,18285,18287],{"class":281,"line":18277},70,[152,18279,3222],{"class":483},[152,18281,2848],{"class":476},[152,18283,18284],{"class":289},"\"请输入第二个立方体的长、宽、高：\"",[152,18286,2848],{"class":476},[152,18288,2870],{"class":483},[152,18290,18292,18294,18296,18299,18301,18304,18306],{"class":281,"line":18291},71,[152,18293,3663],{"class":483},[152,18295,3101],{"class":476},[152,18297,18298],{"class":483},"l1",[152,18300,3101],{"class":476},[152,18302,18303],{"class":483},"w1",[152,18305,3101],{"class":476},[152,18307,18308],{"class":483},"h1;\n",[152,18310,18312],{"class":281,"line":18311},72,[152,18313,18314],{"class":483},"    Cube c2;\n",[152,18316,18318,18321,18323],{"class":281,"line":18317},73,[152,18319,18320],{"class":483},"    c2.",[152,18322,18213],{"class":285},[152,18324,18325],{"class":483},"(l1,w1,h1);\n",[152,18327,18329,18331,18333,18336,18338,18341,18343,18345,18347],{"class":281,"line":18328},74,[152,18330,3222],{"class":483},[152,18332,2848],{"class":476},[152,18334,18335],{"class":289},"\"第二个立方体的表面积为：\"",[152,18337,2848],{"class":476},[152,18339,18340],{"class":483},"c2.",[152,18342,18239],{"class":285},[152,18344,4077],{"class":483},[152,18346,2848],{"class":476},[152,18348,2870],{"class":483},[152,18350,18352,18354,18356,18359,18361,18363,18365,18367,18369],{"class":281,"line":18351},75,[152,18353,3222],{"class":483},[152,18355,2848],{"class":476},[152,18357,18358],{"class":289},"\"第二个立方体的体积为：\"",[152,18360,2848],{"class":476},[152,18362,18340],{"class":483},[152,18364,18268],{"class":285},[152,18366,4077],{"class":483},[152,18368,2848],{"class":476},[152,18370,2870],{"class":483},[152,18372,18374],{"class":281,"line":18373},76,[152,18375,307],{"emptyLinePlaceholder":306},[152,18377,18379],{"class":281,"line":18378},77,[152,18380,18381],{"class":866},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[152,18383,18385,18387,18389,18392,18394],{"class":281,"line":18384},78,[152,18386,3222],{"class":483},[152,18388,2848],{"class":476},[152,18390,18391],{"class":289},"\"内部函数判断结果：\"",[152,18393,2848],{"class":476},[152,18395,2870],{"class":483},[152,18397,18399,18401,18403,18406],{"class":281,"line":18398},79,[152,18400,4744],{"class":476},[152,18402,18096],{"class":483},[152,18404,18405],{"class":285},"isEqual",[152,18407,18408],{"class":483},"(c2))\n",[152,18410,18412],{"class":281,"line":18411},80,[152,18413,3681],{"class":483},[152,18415,18417,18419,18421,18424,18426],{"class":281,"line":18416},81,[152,18418,5094],{"class":483},[152,18420,2848],{"class":476},[152,18422,18423],{"class":289},"\"两个立方体相等\"",[152,18425,2848],{"class":476},[152,18427,2870],{"class":483},[152,18429,18431],{"class":281,"line":18430},82,[152,18432,3838],{"class":483},[152,18434,18436],{"class":281,"line":18435},83,[152,18437,18438],{"class":476},"    else\n",[152,18440,18442],{"class":281,"line":18441},84,[152,18443,3681],{"class":483},[152,18445,18447,18449,18451,18454,18456],{"class":281,"line":18446},85,[152,18448,5094],{"class":483},[152,18450,2848],{"class":476},[152,18452,18453],{"class":289},"\"两个立方体不相等\"",[152,18455,2848],{"class":476},[152,18457,2870],{"class":483},[152,18459,18461],{"class":281,"line":18460},86,[152,18462,3838],{"class":483},[152,18464,18466],{"class":281,"line":18465},87,[152,18467,307],{"emptyLinePlaceholder":306},[152,18469,18471,18473,18475,18478,18480],{"class":281,"line":18470},88,[152,18472,3222],{"class":483},[152,18474,2848],{"class":476},[152,18476,18477],{"class":289},"\"全局函数判断结果：\"",[152,18479,2848],{"class":476},[152,18481,2870],{"class":483},[152,18483,18485,18487,18489,18491],{"class":281,"line":18484},89,[152,18486,4744],{"class":476},[152,18488,3322],{"class":483},[152,18490,18405],{"class":285},[152,18492,18493],{"class":483},"(c1, c2))\n",[152,18495,18497],{"class":281,"line":18496},90,[152,18498,3681],{"class":483},[152,18500,18502,18504,18506,18508,18510],{"class":281,"line":18501},91,[152,18503,5094],{"class":483},[152,18505,2848],{"class":476},[152,18507,18423],{"class":289},[152,18509,2848],{"class":476},[152,18511,2870],{"class":483},[152,18513,18515],{"class":281,"line":18514},92,[152,18516,3838],{"class":483},[152,18518,18520],{"class":281,"line":18519},93,[152,18521,18438],{"class":476},[152,18523,18525],{"class":281,"line":18524},94,[152,18526,3681],{"class":483},[152,18528,18530,18532,18534,18536,18538],{"class":281,"line":18529},95,[152,18531,5094],{"class":483},[152,18533,2848],{"class":476},[152,18535,18453],{"class":289},[152,18537,2848],{"class":476},[152,18539,2870],{"class":483},[152,18541,18543],{"class":281,"line":18542},96,[152,18544,3838],{"class":483},[152,18546,18548],{"class":281,"line":18547},97,[152,18549,3236],{"class":483},[416,18551,18552],{"start":303},[419,18553,18554],{},[694,18555,18556],{},"练习案例2：点和圆的关系",[698,18558,18559],{},[419,18560,18561],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[270,18563,18565],{"className":1807,"code":18564,"language":1809,"meta":275,"style":275},"#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",[277,18566,18567,18573,18583,18590,18597,18601,18605,18610,18644,18649,18665,18679,18683,18687,18694,18701,18705,18711,18715,18719,18723,18745,18768,18773,18787,18802,18806,18810,18816,18821,18826,18830,18856,18860,18890,18918,18946,18963,18967,18980,18984,18988,18992,19005,19009,19013,19021,19025,19029,19033,19038,19042,19053,19060,19069,19079,19090,19097,19110,19121,19131,19142,19149,19163,19168,19178,19186],{"__ignoreMap":275},[152,18568,18569,18571],{"class":281,"line":282},[152,18570,3601],{"class":476},[152,18572,3604],{"class":289},[152,18574,18575,18577,18579,18581],{"class":281,"line":303},[152,18576,3609],{"class":476},[152,18578,3612],{"class":476},[152,18580,3615],{"class":285},[152,18582,2965],{"class":483},[152,18584,18585,18587],{"class":281,"line":310},[152,18586,3601],{"class":476},[152,18588,18589],{"class":289},"\u003Ccmath>\n",[152,18591,18592,18594],{"class":281,"line":324},[152,18593,16309],{"class":476},[152,18595,18596],{"class":285}," Point\n",[152,18598,18599],{"class":281,"line":329},[152,18600,3217],{"class":483},[152,18602,18603],{"class":281,"line":343},[152,18604,16331],{"class":476},[152,18606,18607],{"class":281,"line":348},[152,18608,18609],{"class":866},"    \u002F\u002F赋值\n",[152,18611,18612,18614,18617,18619,18621,18624,18626,18628,18631,18634,18636,18639,18641],{"class":281,"line":362},[152,18613,16524],{"class":476},[152,18615,18616],{"class":285}," setPoint",[152,18618,1819],{"class":483},[152,18620,15653],{"class":476},[152,18622,18623],{"class":6858}," x",[152,18625,14051],{"class":483},[152,18627,15653],{"class":476},[152,18629,18630],{"class":6858}," y",[152,18632,18633],{"class":483},") { m_x ",[152,18635,1864],{"class":476},[152,18637,18638],{"class":483}," x; m_y ",[152,18640,1864],{"class":476},[152,18642,18643],{"class":483}," y; }\n",[152,18645,18646],{"class":281,"line":367},[152,18647,18648],{"class":866},"    \u002F\u002F获取坐标\n",[152,18650,18651,18653,18656,18659,18662],{"class":281,"line":381},[152,18652,16353],{"class":476},[152,18654,18655],{"class":285}," getX",[152,18657,18658],{"class":483},"() { ",[152,18660,18661],{"class":476},"return",[152,18663,18664],{"class":483}," m_x; }\n",[152,18666,18667,18669,18672,18674,18676],{"class":281,"line":386},[152,18668,16353],{"class":476},[152,18670,18671],{"class":285}," getY",[152,18673,18658],{"class":483},[152,18675,18661],{"class":476},[152,18677,18678],{"class":483}," m_y; }\n",[152,18680,18681],{"class":281,"line":932},[152,18682,307],{"emptyLinePlaceholder":306},[152,18684,18685],{"class":281,"line":942},[152,18686,16837],{"class":476},[152,18688,18689,18691],{"class":281,"line":949},[152,18690,16353],{"class":476},[152,18692,18693],{"class":483}," m_x;\n",[152,18695,18696,18698],{"class":281,"line":954},[152,18697,16353],{"class":476},[152,18699,18700],{"class":483}," m_y;\n",[152,18702,18703],{"class":281,"line":959},[152,18704,5637],{"class":483},[152,18706,18707,18709],{"class":281,"line":970},[152,18708,16309],{"class":476},[152,18710,16312],{"class":285},[152,18712,18713],{"class":281,"line":979},[152,18714,3217],{"class":483},[152,18716,18717],{"class":281,"line":989},[152,18718,16331],{"class":476},[152,18720,18721],{"class":281,"line":996},[152,18722,18609],{"class":866},[152,18724,18725,18727,18730,18732,18734,18737,18740,18742],{"class":281,"line":1001},[152,18726,16524],{"class":476},[152,18728,18729],{"class":285}," setRadius",[152,18731,1819],{"class":483},[152,18733,15653],{"class":476},[152,18735,18736],{"class":6858}," r",[152,18738,18739],{"class":483},") { m_r ",[152,18741,1864],{"class":476},[152,18743,18744],{"class":483}," r; }\n",[152,18746,18747,18749,18752,18754,18757,18760,18763,18765],{"class":281,"line":1006},[152,18748,16524],{"class":476},[152,18750,18751],{"class":285}," setCenter",[152,18753,1819],{"class":483},[152,18755,18756],{"class":285},"Point",[152,18758,18759],{"class":6858}," center",[152,18761,18762],{"class":483},") { m_center ",[152,18764,1864],{"class":476},[152,18766,18767],{"class":483}," center; }\n",[152,18769,18770],{"class":281,"line":1018},[152,18771,18772],{"class":866},"    \u002F\u002F获取属性\n",[152,18774,18775,18777,18780,18782,18784],{"class":281,"line":1027},[152,18776,16353],{"class":476},[152,18778,18779],{"class":285}," getRadius",[152,18781,18658],{"class":483},[152,18783,18661],{"class":476},[152,18785,18786],{"class":483}," m_r; }\n",[152,18788,18789,18792,18795,18797,18799],{"class":281,"line":1037},[152,18790,18791],{"class":285},"    Point",[152,18793,18794],{"class":285}," getCenter",[152,18796,18658],{"class":483},[152,18798,18661],{"class":476},[152,18800,18801],{"class":483}," m_center; }\n",[152,18803,18804],{"class":281,"line":1044},[152,18805,307],{"emptyLinePlaceholder":306},[152,18807,18808],{"class":281,"line":1049},[152,18809,16837],{"class":476},[152,18811,18812,18814],{"class":281,"line":1054},[152,18813,16353],{"class":476},[152,18815,16343],{"class":483},[152,18817,18818],{"class":281,"line":1065},[152,18819,18820],{"class":866},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[152,18822,18823],{"class":281,"line":1074},[152,18824,18825],{"class":483},"    Point m_center;\n",[152,18827,18828],{"class":281,"line":1084},[152,18829,5637],{"class":483},[152,18831,18832,18834,18837,18839,18842,18844,18846,18848,18850,18852,18854],{"class":281,"line":1091},[152,18833,7006],{"class":476},[152,18835,18836],{"class":285}," isInCircle",[152,18838,1819],{"class":483},[152,18840,18841],{"class":285},"Circle",[152,18843,12200],{"class":476},[152,18845,2096],{"class":6858},[152,18847,2186],{"class":483},[152,18849,18756],{"class":285},[152,18851,12200],{"class":476},[152,18853,19],{"class":6858},[152,18855,1825],{"class":483},[152,18857,18858],{"class":281,"line":1096},[152,18859,3217],{"class":483},[152,18861,18862,18864,18867,18869,18871,18874,18877,18880,18882,18884,18886,18888],{"class":281,"line":1101},[152,18863,16353],{"class":476},[152,18865,18866],{"class":483}," dx ",[152,18868,1864],{"class":476},[152,18870,17957],{"class":483},[152,18872,18873],{"class":285},"getCenter",[152,18875,18876],{"class":483},"().",[152,18878,18879],{"class":285},"getX",[152,18881,14666],{"class":483},[152,18883,2340],{"class":476},[152,18885,17503],{"class":483},[152,18887,18879],{"class":285},[152,18889,7278],{"class":483},[152,18891,18892,18894,18897,18899,18901,18903,18905,18908,18910,18912,18914,18916],{"class":281,"line":1112},[152,18893,16353],{"class":476},[152,18895,18896],{"class":483}," dy ",[152,18898,1864],{"class":476},[152,18900,17957],{"class":483},[152,18902,18873],{"class":285},[152,18904,18876],{"class":483},[152,18906,18907],{"class":285},"getY",[152,18909,14666],{"class":483},[152,18911,2340],{"class":476},[152,18913,17503],{"class":483},[152,18915,18907],{"class":285},[152,18917,7278],{"class":483},[152,18919,18920,18922,18925,18927,18930,18933,18935,18937,18939,18941,18943],{"class":281,"line":1121},[152,18921,16353],{"class":476},[152,18923,18924],{"class":483}," distance ",[152,18926,1864],{"class":476},[152,18928,18929],{"class":285}," sqrt",[152,18931,18932],{"class":483},"(dx ",[152,18934,2263],{"class":476},[152,18936,18866],{"class":483},[152,18938,2289],{"class":476},[152,18940,18896],{"class":483},[152,18942,2263],{"class":476},[152,18944,18945],{"class":483}," dy);\n",[152,18947,18948,18950,18953,18955,18957,18960],{"class":281,"line":1131},[152,18949,4744],{"class":476},[152,18951,18952],{"class":483}," (distance ",[152,18954,844],{"class":476},[152,18956,17957],{"class":483},[152,18958,18959],{"class":285},"getRadius",[152,18961,18962],{"class":483},"())\n",[152,18964,18965],{"class":281,"line":1138},[152,18966,3681],{"class":483},[152,18968,18969,18971,18973,18976,18978],{"class":281,"line":1143},[152,18970,11301],{"class":483},[152,18972,2848],{"class":476},[152,18974,18975],{"class":289}," \"点在圆内\"",[152,18977,3116],{"class":476},[152,18979,10472],{"class":483},[152,18981,18982],{"class":281,"line":1148},[152,18983,3838],{"class":483},[152,18985,18986],{"class":281,"line":1159},[152,18987,18438],{"class":476},[152,18989,18990],{"class":281,"line":1168},[152,18991,3681],{"class":483},[152,18993,18994,18996,18998,19001,19003],{"class":281,"line":1178},[152,18995,11301],{"class":483},[152,18997,2848],{"class":476},[152,18999,19000],{"class":289}," \"点在圆外\"",[152,19002,3116],{"class":476},[152,19004,10472],{"class":483},[152,19006,19007],{"class":281,"line":1185},[152,19008,3838],{"class":483},[152,19010,19011],{"class":281,"line":1190},[152,19012,3236],{"class":483},[152,19014,19015,19017,19019],{"class":281,"line":1195},[152,19016,1822],{"class":476},[152,19018,3624],{"class":285},[152,19020,3627],{"class":483},[152,19022,19023],{"class":281,"line":1206},[152,19024,3217],{"class":483},[152,19026,19027],{"class":281,"line":1215},[152,19028,16668],{"class":866},[152,19030,19031],{"class":281,"line":1225},[152,19032,16415],{"class":483},[152,19034,19035],{"class":281,"line":1232},[152,19036,19037],{"class":483},"    Point p1;\n",[152,19039,19040],{"class":281,"line":1237},[152,19041,18609],{"class":866},[152,19043,19044,19046,19048,19051],{"class":281,"line":1242},[152,19045,3222],{"class":483},[152,19047,2848],{"class":476},[152,19049,19050],{"class":289},"\"请输入圆的半径：\"",[152,19052,2965],{"class":483},[152,19054,19055,19057],{"class":281,"line":1253},[152,19056,16353],{"class":476},[152,19058,19059],{"class":483}," r;\n",[152,19061,19062,19064,19066],{"class":281,"line":1262},[152,19063,3663],{"class":483},[152,19065,3101],{"class":476},[152,19067,19068],{"class":483},"r;\n",[152,19070,19071,19073,19076],{"class":281,"line":1272},[152,19072,18210],{"class":483},[152,19074,19075],{"class":285},"setRadius",[152,19077,19078],{"class":483},"(r);\n",[152,19080,19081,19083,19085,19088],{"class":281,"line":1279},[152,19082,3222],{"class":483},[152,19084,2848],{"class":476},[152,19086,19087],{"class":289},"\"请输入圆心坐标：\"",[152,19089,2965],{"class":483},[152,19091,19092,19094],{"class":281,"line":1284},[152,19093,16353],{"class":476},[152,19095,19096],{"class":483}," x, y;\n",[152,19098,19099,19101,19103,19105,19107],{"class":281,"line":1289},[152,19100,3663],{"class":483},[152,19102,3101],{"class":476},[152,19104,2628],{"class":483},[152,19106,3101],{"class":476},[152,19108,19109],{"class":483},"y;\n",[152,19111,19112,19115,19118],{"class":281,"line":1301},[152,19113,19114],{"class":483},"    p1.",[152,19116,19117],{"class":285},"setPoint",[152,19119,19120],{"class":483},"(x, y);\n",[152,19122,19123,19125,19128],{"class":281,"line":1310},[152,19124,18210],{"class":483},[152,19126,19127],{"class":285},"setCenter",[152,19129,19130],{"class":483},"(p1);\n",[152,19132,19133,19135,19137,19140],{"class":281,"line":1320},[152,19134,3222],{"class":483},[152,19136,2848],{"class":476},[152,19138,19139],{"class":289},"\"请输入测试点坐标：\"",[152,19141,2965],{"class":483},[152,19143,19144,19146],{"class":281,"line":1327},[152,19145,16353],{"class":476},[152,19147,19148],{"class":483}," x1, y1;\n",[152,19150,19151,19153,19155,19158,19160],{"class":281,"line":11528},[152,19152,3663],{"class":483},[152,19154,3101],{"class":476},[152,19156,19157],{"class":483},"x1",[152,19159,3101],{"class":476},[152,19161,19162],{"class":483},"y1;\n",[152,19164,19165],{"class":281,"line":11536},[152,19166,19167],{"class":483},"    Point p2;\n",[152,19169,19170,19173,19175],{"class":281,"line":11541},[152,19171,19172],{"class":483},"    p2.",[152,19174,19117],{"class":285},[152,19176,19177],{"class":483},"(x1, y1);\n",[152,19179,19180,19183],{"class":281,"line":18219},[152,19181,19182],{"class":285},"    isInCircle",[152,19184,19185],{"class":483},"(c1, p2);\n",[152,19187,19188],{"class":281,"line":18225},[152,19189,3236],{"class":483},[19,19191,19192],{},"在类中可以让另一个类作为本来的成员",[19,19194,19195],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19197,19198],{},"创建point.h",[270,19200,19202],{"className":1807,"code":19201,"language":1809,"meta":275,"style":275},"#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",[277,19203,19204,19215,19221,19231,19237,19241,19246,19250,19254,19274,19278,19286,19294,19298,19302,19308,19314],{"__ignoreMap":275},[152,19205,19206,19209,19212],{"class":281,"line":282},[152,19207,19208],{"class":476},"#pragma",[152,19210,19211],{"class":285}," once",[152,19213,19214],{"class":866}," \u002F\u002F防止头文件重复包含\n",[152,19216,19217,19219],{"class":281,"line":303},[152,19218,3601],{"class":476},[152,19220,3604],{"class":289},[152,19222,19223,19225,19227,19229],{"class":281,"line":310},[152,19224,3609],{"class":476},[152,19226,3612],{"class":476},[152,19228,3615],{"class":285},[152,19230,2965],{"class":483},[152,19232,19233,19235],{"class":281,"line":324},[152,19234,16309],{"class":476},[152,19236,18596],{"class":285},[152,19238,19239],{"class":281,"line":329},[152,19240,3217],{"class":483},[152,19242,19243],{"class":281,"line":343},[152,19244,19245],{"class":866},"\u002F\u002F做好声明与变量定义就可以\n",[152,19247,19248],{"class":281,"line":348},[152,19249,16331],{"class":476},[152,19251,19252],{"class":281,"line":362},[152,19253,18609],{"class":866},[152,19255,19256,19258,19260,19262,19264,19266,19268,19270,19272],{"class":281,"line":367},[152,19257,16524],{"class":476},[152,19259,18616],{"class":285},[152,19261,1819],{"class":483},[152,19263,15653],{"class":476},[152,19265,18623],{"class":6858},[152,19267,14051],{"class":483},[152,19269,15653],{"class":476},[152,19271,18630],{"class":6858},[152,19273,4362],{"class":483},[152,19275,19276],{"class":281,"line":381},[152,19277,18648],{"class":866},[152,19279,19280,19282,19284],{"class":281,"line":386},[152,19281,16353],{"class":476},[152,19283,18655],{"class":285},[152,19285,7278],{"class":483},[152,19287,19288,19290,19292],{"class":281,"line":932},[152,19289,16353],{"class":476},[152,19291,18671],{"class":285},[152,19293,7278],{"class":483},[152,19295,19296],{"class":281,"line":942},[152,19297,307],{"emptyLinePlaceholder":306},[152,19299,19300],{"class":281,"line":949},[152,19301,16837],{"class":476},[152,19303,19304,19306],{"class":281,"line":954},[152,19305,16353],{"class":476},[152,19307,18693],{"class":483},[152,19309,19310,19312],{"class":281,"line":959},[152,19311,16353],{"class":476},[152,19313,18700],{"class":483},[152,19315,19316],{"class":281,"line":970},[152,19317,5637],{"class":483},[19,19319,19320],{},"创建point.cpp",[270,19322,19324],{"className":1807,"code":19323,"language":1809,"meta":275,"style":275},"#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",[277,19325,19326,19333,19338,19372,19376,19392],{"__ignoreMap":275},[152,19327,19328,19330],{"class":281,"line":282},[152,19329,3601],{"class":476},[152,19331,19332],{"class":289},"\u003Cpoint.h>\n",[152,19334,19335],{"class":281,"line":303},[152,19336,19337],{"class":866},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[152,19339,19340,19342,19345,19348,19350,19352,19354,19356,19358,19360,19362,19364,19366,19368,19370],{"class":281,"line":310},[152,19341,16524],{"class":476},[152,19343,19344],{"class":285}," Point",[152,19346,19347],{"class":483},"::",[152,19349,19117],{"class":285},[152,19351,1819],{"class":483},[152,19353,15653],{"class":476},[152,19355,18623],{"class":6858},[152,19357,14051],{"class":483},[152,19359,15653],{"class":476},[152,19361,18630],{"class":6858},[152,19363,18633],{"class":483},[152,19365,1864],{"class":476},[152,19367,18638],{"class":483},[152,19369,1864],{"class":476},[152,19371,18643],{"class":483},[152,19373,19374],{"class":281,"line":324},[152,19375,18648],{"class":866},[152,19377,19378,19380,19382,19384,19386,19388,19390],{"class":281,"line":329},[152,19379,16353],{"class":476},[152,19381,19344],{"class":285},[152,19383,19347],{"class":483},[152,19385,18879],{"class":285},[152,19387,18658],{"class":483},[152,19389,18661],{"class":476},[152,19391,18664],{"class":483},[152,19393,19394,19396,19398,19400,19402,19404,19406],{"class":281,"line":343},[152,19395,16353],{"class":476},[152,19397,19344],{"class":285},[152,19399,19347],{"class":483},[152,19401,18907],{"class":285},[152,19403,18658],{"class":483},[152,19405,18661],{"class":476},[152,19407,18678],{"class":483},[19,19409,19410],{},"创建circle.h",[270,19412,19414],{"className":1807,"code":19413,"language":1809,"meta":275,"style":275},"#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",[277,19415,19416,19423,19429,19439,19445,19451,19455,19459,19463,19477,19491,19495,19503,19511,19515,19519,19525,19529,19533],{"__ignoreMap":275},[152,19417,19418,19420],{"class":281,"line":282},[152,19419,19208],{"class":476},[152,19421,19422],{"class":285}," once\n",[152,19424,19425,19427],{"class":281,"line":303},[152,19426,3601],{"class":476},[152,19428,3604],{"class":289},[152,19430,19431,19433,19435,19437],{"class":281,"line":310},[152,19432,3609],{"class":476},[152,19434,3612],{"class":476},[152,19436,3615],{"class":285},[152,19438,2965],{"class":483},[152,19440,19441,19443],{"class":281,"line":324},[152,19442,3601],{"class":476},[152,19444,19332],{"class":289},[152,19446,19447,19449],{"class":281,"line":329},[152,19448,16309],{"class":476},[152,19450,16312],{"class":285},[152,19452,19453],{"class":281,"line":343},[152,19454,3217],{"class":483},[152,19456,19457],{"class":281,"line":348},[152,19458,16331],{"class":476},[152,19460,19461],{"class":281,"line":362},[152,19462,18609],{"class":866},[152,19464,19465,19467,19469,19471,19473,19475],{"class":281,"line":367},[152,19466,16524],{"class":476},[152,19468,18729],{"class":285},[152,19470,1819],{"class":483},[152,19472,15653],{"class":476},[152,19474,18736],{"class":6858},[152,19476,4362],{"class":483},[152,19478,19479,19481,19483,19485,19487,19489],{"class":281,"line":381},[152,19480,16524],{"class":476},[152,19482,18751],{"class":285},[152,19484,1819],{"class":483},[152,19486,18756],{"class":285},[152,19488,18759],{"class":6858},[152,19490,4362],{"class":483},[152,19492,19493],{"class":281,"line":386},[152,19494,18772],{"class":866},[152,19496,19497,19499,19501],{"class":281,"line":932},[152,19498,16353],{"class":476},[152,19500,18779],{"class":285},[152,19502,7278],{"class":483},[152,19504,19505,19507,19509],{"class":281,"line":942},[152,19506,18791],{"class":285},[152,19508,18794],{"class":285},[152,19510,7278],{"class":483},[152,19512,19513],{"class":281,"line":949},[152,19514,307],{"emptyLinePlaceholder":306},[152,19516,19517],{"class":281,"line":954},[152,19518,16837],{"class":476},[152,19520,19521,19523],{"class":281,"line":959},[152,19522,16353],{"class":476},[152,19524,16343],{"class":483},[152,19526,19527],{"class":281,"line":970},[152,19528,18820],{"class":866},[152,19530,19531],{"class":281,"line":979},[152,19532,18825],{"class":483},[152,19534,19535],{"class":281,"line":989},[152,19536,5637],{"class":483},[19,19538,19539],{},"创建circle.cpp",[270,19541,19543],{"className":1807,"code":19542,"language":1809,"meta":275,"style":275},"#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",[277,19544,19545,19552,19575,19597,19602,19618],{"__ignoreMap":275},[152,19546,19547,19549],{"class":281,"line":282},[152,19548,3601],{"class":476},[152,19550,19551],{"class":289},"\u003Ccircle.h>\n",[152,19553,19554,19556,19559,19561,19563,19565,19567,19569,19571,19573],{"class":281,"line":303},[152,19555,7006],{"class":476},[152,19557,19558],{"class":285}," Circle",[152,19560,19347],{"class":483},[152,19562,19075],{"class":285},[152,19564,1819],{"class":483},[152,19566,15653],{"class":476},[152,19568,18736],{"class":6858},[152,19570,18739],{"class":483},[152,19572,1864],{"class":476},[152,19574,18744],{"class":483},[152,19576,19577,19579,19581,19583,19585,19587,19589,19591,19593,19595],{"class":281,"line":310},[152,19578,7006],{"class":476},[152,19580,19558],{"class":285},[152,19582,19347],{"class":483},[152,19584,19127],{"class":285},[152,19586,1819],{"class":483},[152,19588,18756],{"class":285},[152,19590,18759],{"class":6858},[152,19592,18762],{"class":483},[152,19594,1864],{"class":476},[152,19596,18767],{"class":483},[152,19598,19599],{"class":281,"line":324},[152,19600,19601],{"class":866},"\u002F\u002F获取属性\n",[152,19603,19604,19606,19608,19610,19612,19614,19616],{"class":281,"line":329},[152,19605,15653],{"class":476},[152,19607,19558],{"class":285},[152,19609,19347],{"class":483},[152,19611,18959],{"class":285},[152,19613,18658],{"class":483},[152,19615,18661],{"class":476},[152,19617,18786],{"class":483},[152,19619,19620,19622,19624,19626,19628,19630,19632],{"class":281,"line":343},[152,19621,18756],{"class":285},[152,19623,19558],{"class":285},[152,19625,19347],{"class":483},[152,19627,18873],{"class":285},[152,19629,18658],{"class":483},[152,19631,18661],{"class":476},[152,19633,18801],{"class":483},[19,19635,19636],{},"使用封装的类",[270,19638,19640],{"className":1807,"code":19639,"language":1809,"meta":275,"style":275},"#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",[277,19641,19642,19648,19658,19664,19670,19694,19698,19724,19750,19774,19788,19792,19804,19808,19812,19816,19828,19832,19836,19844,19848,19852,19856,19860,19864,19874,19880,19888,19896,19906,19912,19924,19932,19940,19950,19956,19968,19972,19980,19986],{"__ignoreMap":275},[152,19643,19644,19646],{"class":281,"line":282},[152,19645,3601],{"class":476},[152,19647,3604],{"class":289},[152,19649,19650,19652,19654,19656],{"class":281,"line":303},[152,19651,3609],{"class":476},[152,19653,3612],{"class":476},[152,19655,3615],{"class":285},[152,19657,2965],{"class":483},[152,19659,19660,19662],{"class":281,"line":310},[152,19661,3601],{"class":476},[152,19663,19551],{"class":289},[152,19665,19666,19668],{"class":281,"line":324},[152,19667,3601],{"class":476},[152,19669,19332],{"class":289},[152,19671,19672,19674,19676,19678,19680,19682,19684,19686,19688,19690,19692],{"class":281,"line":329},[152,19673,7006],{"class":476},[152,19675,18836],{"class":285},[152,19677,1819],{"class":483},[152,19679,18841],{"class":285},[152,19681,12200],{"class":476},[152,19683,2096],{"class":6858},[152,19685,2186],{"class":483},[152,19687,18756],{"class":285},[152,19689,12200],{"class":476},[152,19691,19],{"class":6858},[152,19693,1825],{"class":483},[152,19695,19696],{"class":281,"line":343},[152,19697,3217],{"class":483},[152,19699,19700,19702,19704,19706,19708,19710,19712,19714,19716,19718,19720,19722],{"class":281,"line":348},[152,19701,16353],{"class":476},[152,19703,18866],{"class":483},[152,19705,1864],{"class":476},[152,19707,17957],{"class":483},[152,19709,18873],{"class":285},[152,19711,18876],{"class":483},[152,19713,18879],{"class":285},[152,19715,14666],{"class":483},[152,19717,2340],{"class":476},[152,19719,17503],{"class":483},[152,19721,18879],{"class":285},[152,19723,7278],{"class":483},[152,19725,19726,19728,19730,19732,19734,19736,19738,19740,19742,19744,19746,19748],{"class":281,"line":362},[152,19727,16353],{"class":476},[152,19729,18896],{"class":483},[152,19731,1864],{"class":476},[152,19733,17957],{"class":483},[152,19735,18873],{"class":285},[152,19737,18876],{"class":483},[152,19739,18907],{"class":285},[152,19741,14666],{"class":483},[152,19743,2340],{"class":476},[152,19745,17503],{"class":483},[152,19747,18907],{"class":285},[152,19749,7278],{"class":483},[152,19751,19752,19754,19756,19758,19760,19762,19764,19766,19768,19770,19772],{"class":281,"line":367},[152,19753,16353],{"class":476},[152,19755,18924],{"class":483},[152,19757,1864],{"class":476},[152,19759,18929],{"class":285},[152,19761,18932],{"class":483},[152,19763,2263],{"class":476},[152,19765,18866],{"class":483},[152,19767,2289],{"class":476},[152,19769,18896],{"class":483},[152,19771,2263],{"class":476},[152,19773,18945],{"class":483},[152,19775,19776,19778,19780,19782,19784,19786],{"class":281,"line":381},[152,19777,4744],{"class":476},[152,19779,18952],{"class":483},[152,19781,844],{"class":476},[152,19783,17957],{"class":483},[152,19785,18959],{"class":285},[152,19787,18962],{"class":483},[152,19789,19790],{"class":281,"line":386},[152,19791,3681],{"class":483},[152,19793,19794,19796,19798,19800,19802],{"class":281,"line":932},[152,19795,11301],{"class":483},[152,19797,2848],{"class":476},[152,19799,18975],{"class":289},[152,19801,3116],{"class":476},[152,19803,10472],{"class":483},[152,19805,19806],{"class":281,"line":942},[152,19807,3838],{"class":483},[152,19809,19810],{"class":281,"line":949},[152,19811,18438],{"class":476},[152,19813,19814],{"class":281,"line":954},[152,19815,3681],{"class":483},[152,19817,19818,19820,19822,19824,19826],{"class":281,"line":959},[152,19819,11301],{"class":483},[152,19821,2848],{"class":476},[152,19823,19000],{"class":289},[152,19825,3116],{"class":476},[152,19827,10472],{"class":483},[152,19829,19830],{"class":281,"line":970},[152,19831,3838],{"class":483},[152,19833,19834],{"class":281,"line":979},[152,19835,3236],{"class":483},[152,19837,19838,19840,19842],{"class":281,"line":989},[152,19839,1822],{"class":476},[152,19841,3624],{"class":285},[152,19843,3627],{"class":483},[152,19845,19846],{"class":281,"line":996},[152,19847,3217],{"class":483},[152,19849,19850],{"class":281,"line":1001},[152,19851,16668],{"class":866},[152,19853,19854],{"class":281,"line":1006},[152,19855,16415],{"class":483},[152,19857,19858],{"class":281,"line":1018},[152,19859,19037],{"class":483},[152,19861,19862],{"class":281,"line":1027},[152,19863,18609],{"class":866},[152,19865,19866,19868,19870,19872],{"class":281,"line":1037},[152,19867,3222],{"class":483},[152,19869,2848],{"class":476},[152,19871,19050],{"class":289},[152,19873,2965],{"class":483},[152,19875,19876,19878],{"class":281,"line":1044},[152,19877,16353],{"class":476},[152,19879,19059],{"class":483},[152,19881,19882,19884,19886],{"class":281,"line":1049},[152,19883,3663],{"class":483},[152,19885,3101],{"class":476},[152,19887,19068],{"class":483},[152,19889,19890,19892,19894],{"class":281,"line":1054},[152,19891,18210],{"class":483},[152,19893,19075],{"class":285},[152,19895,19078],{"class":483},[152,19897,19898,19900,19902,19904],{"class":281,"line":1065},[152,19899,3222],{"class":483},[152,19901,2848],{"class":476},[152,19903,19087],{"class":289},[152,19905,2965],{"class":483},[152,19907,19908,19910],{"class":281,"line":1074},[152,19909,16353],{"class":476},[152,19911,19096],{"class":483},[152,19913,19914,19916,19918,19920,19922],{"class":281,"line":1084},[152,19915,3663],{"class":483},[152,19917,3101],{"class":476},[152,19919,2628],{"class":483},[152,19921,3101],{"class":476},[152,19923,19109],{"class":483},[152,19925,19926,19928,19930],{"class":281,"line":1091},[152,19927,19114],{"class":483},[152,19929,19117],{"class":285},[152,19931,19120],{"class":483},[152,19933,19934,19936,19938],{"class":281,"line":1096},[152,19935,18210],{"class":483},[152,19937,19127],{"class":285},[152,19939,19130],{"class":483},[152,19941,19942,19944,19946,19948],{"class":281,"line":1101},[152,19943,3222],{"class":483},[152,19945,2848],{"class":476},[152,19947,19139],{"class":289},[152,19949,2965],{"class":483},[152,19951,19952,19954],{"class":281,"line":1112},[152,19953,16353],{"class":476},[152,19955,19148],{"class":483},[152,19957,19958,19960,19962,19964,19966],{"class":281,"line":1121},[152,19959,3663],{"class":483},[152,19961,3101],{"class":476},[152,19963,19157],{"class":483},[152,19965,3101],{"class":476},[152,19967,19162],{"class":483},[152,19969,19970],{"class":281,"line":1131},[152,19971,19167],{"class":483},[152,19973,19974,19976,19978],{"class":281,"line":1138},[152,19975,19172],{"class":483},[152,19977,19117],{"class":285},[152,19979,19177],{"class":483},[152,19981,19982,19984],{"class":281,"line":1143},[152,19983,19182],{"class":285},[152,19985,19185],{"class":483},[152,19987,19988],{"class":281,"line":1148},[152,19989,3236],{"class":483},[1760,19991,19993],{"id":19992},"_82对象的初始化清理","8.2对象的初始化清理",[698,19995,19996,19999],{},[419,19997,19998],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[419,20000,20001],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[14,20003,20005],{"id":20004},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20007,20008,20009,20012],{},"对象的",[694,20010,20011],{},"初始化和清理","也是两个非常重要的安全问题",[19,20014,20015],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20017,20018],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20020,20021,20022,20025,20026,20029],{},"c++利用了",[694,20023,20024],{},"构造函数","和",[694,20027,20028],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20031,20032,20033],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[694,20034,20035],{},"我们不提供构造和析构，编译器会提供",[19,20037,20038],{},[694,20039,20040],{},"编译器提供的构造函数和析构函数是空实现。",[698,20042,20043,20046],{},[419,20044,20045],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[419,20047,20048,20049,20052],{},"析构函数：主要作用在于对象",[694,20050,20051],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20054,20055,20058],{},[694,20056,20057],{},"构造函数语法：",[277,20059,20060],{},"类名(){}",[416,20062,20063,20066,20069,20072,20075],{},[419,20064,20065],{},"构造函数，没有返回值也不写void",[419,20067,20068],{},"函数名称与类名相同",[419,20070,20071],{},"构造函数可以有参数，因此可以发生重载",[419,20073,20074],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[419,20076,20077,20078,2237],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[277,20079,20080],{},"Person(){}",[19,20082,20083,15411,20086],{},[694,20084,20085],{},"析构函数语法：",[277,20087,20088],{},"~类名(){}",[416,20090,20091,20094,20097,20103],{},[419,20092,20093],{},"析构函数，没有返回值也不写void",[419,20095,20096],{},"函数名称与类名相同,在名称前加上符号  ~",[419,20098,20099,20100],{},"析构函数不可以有参数，因此",[694,20101,20102],{},"不可以发生重载",[419,20104,20105],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[270,20107,20109],{"className":1807,"code":20108,"language":1809,"meta":275,"style":275},"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",[277,20110,20111,20117,20121,20125,20130,20137,20141,20154,20158,20163,20170,20174,20187,20191,20195,20199,20203,20211,20215,20223,20227,20231,20239,20243,20248,20252,20259,20263,20276,20280,20288],{"__ignoreMap":275},[152,20112,20113,20115],{"class":281,"line":282},[152,20114,16309],{"class":476},[152,20116,16786],{"class":285},[152,20118,20119],{"class":281,"line":303},[152,20120,3217],{"class":483},[152,20122,20123],{"class":281,"line":310},[152,20124,16331],{"class":476},[152,20126,20127],{"class":281,"line":324},[152,20128,20129],{"class":866},"    \u002F\u002F构造函数\n",[152,20131,20132,20135],{"class":281,"line":329},[152,20133,20134],{"class":285},"    Person",[152,20136,3627],{"class":483},[152,20138,20139],{"class":281,"line":343},[152,20140,3681],{"class":483},[152,20142,20143,20145,20147,20150,20152],{"class":281,"line":348},[152,20144,11301],{"class":483},[152,20146,2848],{"class":476},[152,20148,20149],{"class":289}," \"Person的构造函数调用\"",[152,20151,3116],{"class":476},[152,20153,10472],{"class":483},[152,20155,20156],{"class":281,"line":362},[152,20157,3838],{"class":483},[152,20159,20160],{"class":281,"line":367},[152,20161,20162],{"class":866},"    \u002F\u002F析构函数\n",[152,20164,20165,20168],{"class":281,"line":381},[152,20166,20167],{"class":285},"    ~Person",[152,20169,3627],{"class":483},[152,20171,20172],{"class":281,"line":386},[152,20173,3681],{"class":483},[152,20175,20176,20178,20180,20183,20185],{"class":281,"line":932},[152,20177,11301],{"class":483},[152,20179,2848],{"class":476},[152,20181,20182],{"class":289}," \"Person的析构函数调用\"",[152,20184,3116],{"class":476},[152,20186,10472],{"class":483},[152,20188,20189],{"class":281,"line":942},[152,20190,3838],{"class":483},[152,20192,20193],{"class":281,"line":949},[152,20194,307],{"emptyLinePlaceholder":306},[152,20196,20197],{"class":281,"line":954},[152,20198,5637],{"class":483},[152,20200,20201],{"class":281,"line":959},[152,20202,307],{"emptyLinePlaceholder":306},[152,20204,20205,20207,20209],{"class":281,"line":970},[152,20206,7006],{"class":476},[152,20208,7230],{"class":285},[152,20210,3627],{"class":483},[152,20212,20213],{"class":281,"line":979},[152,20214,3217],{"class":483},[152,20216,20217,20220],{"class":281,"line":989},[152,20218,20219],{"class":483},"    Person p;",[152,20221,20222],{"class":866},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[152,20224,20225],{"class":281,"line":996},[152,20226,3236],{"class":483},[152,20228,20229],{"class":281,"line":1001},[152,20230,307],{"emptyLinePlaceholder":306},[152,20232,20233,20235,20237],{"class":281,"line":1006},[152,20234,1822],{"class":476},[152,20236,3624],{"class":285},[152,20238,12469],{"class":483},[152,20240,20241],{"class":281,"line":1018},[152,20242,14826],{"class":483},[152,20244,20245],{"class":281,"line":1027},[152,20246,20247],{"class":866},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[152,20249,20250],{"class":281,"line":1037},[152,20251,307],{"emptyLinePlaceholder":306},[152,20253,20254,20256],{"class":281,"line":1044},[152,20255,20219],{"class":483},[152,20257,20258],{"class":866},"\u002F\u002F只有构造函数\n",[152,20260,20261],{"class":281,"line":1049},[152,20262,307],{"emptyLinePlaceholder":306},[152,20264,20265,20267,20269,20271,20273],{"class":281,"line":1054},[152,20266,3954],{"class":285},[152,20268,1819],{"class":483},[152,20270,3959],{"class":289},[152,20272,7608],{"class":483},[152,20274,20275],{"class":866},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[152,20277,20278],{"class":281,"line":1065},[152,20279,307],{"emptyLinePlaceholder":306},[152,20281,20282,20284,20286],{"class":281,"line":1074},[152,20283,5732],{"class":476},[152,20285,5735],{"class":293},[152,20287,2965],{"class":483},[152,20289,20290],{"class":281,"line":1084},[152,20291,3236],{"class":483},[19,20293,20294],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[14,20296,20298],{"id":20297},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20300,20301],{},"两种分类方式：",[19,20303,20304],{},"​\t按参数分为： 有参构造和无参构造",[19,20306,20307],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20309,20310],{},"三种调用方式：",[19,20312,20313],{},"​\t括号法",[19,20315,20316],{},"​\t显示法",[19,20318,20319],{},"​\t隐式转换法",[270,20321,20323],{"className":1807,"code":20322,"language":1809,"meta":275,"style":275},"#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",[277,20324,20325,20331,20341,20346,20351,20356,20361,20365,20373,20377,20381,20385,20391,20395,20408,20412,20424,20428,20437,20450,20454,20458,20464,20468,20481,20485,20490,20506,20510,20515,20524,20537,20541,20547,20551,20556,20564,20568,20573,20577,20585,20589,20594,20599,20604,20609,20614,20618,20623,20628,20633,20638,20642,20647,20652,20668,20680,20685,20689,20694,20699,20704,20708,20713,20727,20740,20744,20752,20756,20762,20768,20776],{"__ignoreMap":275},[152,20326,20327,20329],{"class":281,"line":282},[152,20328,3601],{"class":476},[152,20330,3604],{"class":289},[152,20332,20333,20335,20337,20339],{"class":281,"line":303},[152,20334,3609],{"class":476},[152,20336,3612],{"class":476},[152,20338,3615],{"class":285},[152,20340,2965],{"class":483},[152,20342,20343],{"class":281,"line":310},[152,20344,20345],{"class":866},"\u002F\u002F1.构造函数的分类及调用\n",[152,20347,20348],{"class":281,"line":324},[152,20349,20350],{"class":866},"\u002F\u002F分类\n",[152,20352,20353],{"class":281,"line":329},[152,20354,20355],{"class":866},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[152,20357,20358],{"class":281,"line":343},[152,20359,20360],{"class":866},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[152,20362,20363],{"class":281,"line":348},[152,20364,307],{"emptyLinePlaceholder":306},[152,20366,20367,20369,20371],{"class":281,"line":362},[152,20368,16309],{"class":476},[152,20370,17184],{"class":285},[152,20372,4317],{"class":483},[152,20374,20375],{"class":281,"line":367},[152,20376,3217],{"class":483},[152,20378,20379],{"class":281,"line":381},[152,20380,16331],{"class":476},[152,20382,20383],{"class":281,"line":386},[152,20384,20129],{"class":866},[152,20386,20387,20389],{"class":281,"line":932},[152,20388,20134],{"class":285},[152,20390,3627],{"class":483},[152,20392,20393],{"class":281,"line":942},[152,20394,3681],{"class":483},[152,20396,20397,20399,20401,20404,20406],{"class":281,"line":949},[152,20398,5094],{"class":483},[152,20400,2848],{"class":476},[152,20402,20403],{"class":289},"\"Person构造函数无参构造\"",[152,20405,2848],{"class":476},[152,20407,2870],{"class":483},[152,20409,20410],{"class":281,"line":954},[152,20411,3838],{"class":483},[152,20413,20414,20416,20418,20420,20422],{"class":281,"line":959},[152,20415,20134],{"class":285},[152,20417,1819],{"class":483},[152,20419,1822],{"class":476},[152,20421,3070],{"class":6858},[152,20423,1825],{"class":483},[152,20425,20426],{"class":281,"line":970},[152,20427,3681],{"class":483},[152,20429,20430,20433,20435],{"class":281,"line":979},[152,20431,20432],{"class":483},"        age",[152,20434,1864],{"class":476},[152,20436,7839],{"class":483},[152,20438,20439,20441,20443,20446,20448],{"class":281,"line":989},[152,20440,5094],{"class":483},[152,20442,2848],{"class":476},[152,20444,20445],{"class":289},"\"Person构造函数有参构造\"",[152,20447,2848],{"class":476},[152,20449,2870],{"class":483},[152,20451,20452],{"class":281,"line":996},[152,20453,3838],{"class":483},[152,20455,20456],{"class":281,"line":1001},[152,20457,20162],{"class":866},[152,20459,20460,20462],{"class":281,"line":1006},[152,20461,20167],{"class":285},[152,20463,3627],{"class":483},[152,20465,20466],{"class":281,"line":1018},[152,20467,3681],{"class":483},[152,20469,20470,20472,20474,20477,20479],{"class":281,"line":1027},[152,20471,5094],{"class":483},[152,20473,2848],{"class":476},[152,20475,20476],{"class":289},"\"Person析构函数被调用\"",[152,20478,2848],{"class":476},[152,20480,2870],{"class":483},[152,20482,20483],{"class":281,"line":1037},[152,20484,3838],{"class":483},[152,20486,20487],{"class":281,"line":1044},[152,20488,20489],{"class":866},"    \u002F\u002F拷贝构造函数\n",[152,20491,20492,20494,20496,20498,20500,20502,20504],{"class":281,"line":1049},[152,20493,20134],{"class":285},[152,20495,1819],{"class":483},[152,20497,8434],{"class":476},[152,20499,17184],{"class":285},[152,20501,12200],{"class":476},[152,20503,19],{"class":6858},[152,20505,1825],{"class":483},[152,20507,20508],{"class":281,"line":1054},[152,20509,3681],{"class":483},[152,20511,20512],{"class":281,"line":1065},[152,20513,20514],{"class":866},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[152,20516,20517,20519,20521],{"class":281,"line":1074},[152,20518,20432],{"class":483},[152,20520,1864],{"class":476},[152,20522,20523],{"class":483},"p.age;\n",[152,20525,20526,20528,20530,20533,20535],{"class":281,"line":1084},[152,20527,5094],{"class":483},[152,20529,2848],{"class":476},[152,20531,20532],{"class":289},"\"Person拷贝构造函数被调用\"",[152,20534,2848],{"class":476},[152,20536,2870],{"class":483},[152,20538,20539],{"class":281,"line":1091},[152,20540,3838],{"class":483},[152,20542,20543,20545],{"class":281,"line":1096},[152,20544,3636],{"class":476},[152,20546,9439],{"class":483},[152,20548,20549],{"class":281,"line":1101},[152,20550,5637],{"class":483},[152,20552,20553],{"class":281,"line":1112},[152,20554,20555],{"class":866},"\u002F\u002F调用\n",[152,20557,20558,20560,20562],{"class":281,"line":1121},[152,20559,7006],{"class":476},[152,20561,7230],{"class":285},[152,20563,3627],{"class":483},[152,20565,20566],{"class":281,"line":1131},[152,20567,3217],{"class":483},[152,20569,20570],{"class":281,"line":1138},[152,20571,20572],{"class":866},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[152,20574,20575],{"class":281,"line":1143},[152,20576,3236],{"class":483},[152,20578,20579,20581,20583],{"class":281,"line":1148},[152,20580,7006],{"class":476},[152,20582,7299],{"class":285},[152,20584,3627],{"class":483},[152,20586,20587],{"class":281,"line":1159},[152,20588,3217],{"class":483},[152,20590,20591],{"class":281,"line":1168},[152,20592,20593],{"class":866},"    \u002F\u002F1.括号法\n",[152,20595,20596],{"class":281,"line":1178},[152,20597,20598],{"class":866},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[152,20600,20601],{"class":281,"line":1185},[152,20602,20603],{"class":866},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[152,20605,20606],{"class":281,"line":1190},[152,20607,20608],{"class":866},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[152,20610,20611],{"class":281,"line":1195},[152,20612,20613],{"class":866},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[152,20615,20616],{"class":281,"line":1206},[152,20617,307],{"emptyLinePlaceholder":306},[152,20619,20620],{"class":281,"line":1215},[152,20621,20622],{"class":866},"    \u002F\u002F注意事项\n",[152,20624,20625],{"class":281,"line":1225},[152,20626,20627],{"class":866},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[152,20629,20630],{"class":281,"line":1232},[152,20631,20632],{"class":866},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[152,20634,20635],{"class":281,"line":1237},[152,20636,20637],{"class":866},"    \u002F\u002F Person p4();\n",[152,20639,20640],{"class":281,"line":1242},[152,20641,307],{"emptyLinePlaceholder":306},[152,20643,20644],{"class":281,"line":1253},[152,20645,20646],{"class":866},"    \u002F\u002F2.显示法\n",[152,20648,20649],{"class":281,"line":1262},[152,20650,20651],{"class":483},"    Person p1;\n",[152,20653,20654,20657,20659,20662,20664,20666],{"class":281,"line":1272},[152,20655,20656],{"class":483},"    Person p2",[152,20658,1864],{"class":476},[152,20660,20661],{"class":285},"Person",[152,20663,1819],{"class":483},[152,20665,2254],{"class":293},[152,20667,4362],{"class":483},[152,20669,20670,20673,20675,20677],{"class":281,"line":1279},[152,20671,20672],{"class":483},"    Person p3",[152,20674,1864],{"class":476},[152,20676,20661],{"class":285},[152,20678,20679],{"class":483},"(p2);\n",[152,20681,20682],{"class":281,"line":1284},[152,20683,20684],{"class":866},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[152,20686,20687],{"class":281,"line":1289},[152,20688,307],{"emptyLinePlaceholder":306},[152,20690,20691],{"class":281,"line":1301},[152,20692,20693],{"class":866},"    \u002F\u002F 注意事项2\n",[152,20695,20696],{"class":281,"line":1310},[152,20697,20698],{"class":866},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[152,20700,20701],{"class":281,"line":1320},[152,20702,20703],{"class":866},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[152,20705,20706],{"class":281,"line":1327},[152,20707,307],{"emptyLinePlaceholder":306},[152,20709,20710],{"class":281,"line":11528},[152,20711,20712],{"class":866},"    \u002F\u002F3.隐士转换法\n",[152,20714,20715,20718,20720,20722,20724],{"class":281,"line":11536},[152,20716,20717],{"class":483},"    Person p4",[152,20719,1864],{"class":476},[152,20721,2254],{"class":293},[152,20723,1873],{"class":483},[152,20725,20726],{"class":866},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[152,20728,20729,20732,20734,20737],{"class":281,"line":11541},[152,20730,20731],{"class":483},"    Person p5",[152,20733,1864],{"class":476},[152,20735,20736],{"class":483},"p4;",[152,20738,20739],{"class":866}," \u002F\u002F 这里会调用拷贝构造函数\n",[152,20741,20742],{"class":281,"line":18219},[152,20743,3236],{"class":483},[152,20745,20746,20748,20750],{"class":281,"line":18225},[152,20747,1822],{"class":476},[152,20749,3624],{"class":285},[152,20751,3627],{"class":483},[152,20753,20754],{"class":281,"line":18248},[152,20755,3217],{"class":483},[152,20757,20758,20760],{"class":281,"line":18254},[152,20759,7275],{"class":285},[152,20761,7278],{"class":483},[152,20763,20764,20766],{"class":281,"line":18277},[152,20765,7344],{"class":285},[152,20767,7278],{"class":483},[152,20769,20770,20772,20774],{"class":281,"line":18291},[152,20771,5732],{"class":476},[152,20773,5735],{"class":293},[152,20775,2965],{"class":483},[152,20777,20778],{"class":281,"line":18311},[152,20779,3236],{"class":483},[19,20781,20782,20785],{},[694,20783,20784],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[14,20787,20789],{"id":20788},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20791,20792],{},"C++中拷贝构造函数调用时机通常有三种情况",[698,20794,20795,20798,20801],{},[419,20796,20797],{},"使用一个已经创建完毕的对象来初始化一个新对象",[419,20799,20800],{},"值传递的方式给函数参数传值",[419,20802,20803],{},"以值方式返回局部对象",[270,20805,20807],{"className":1807,"code":20806,"language":1809,"meta":275,"style":275},"#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",[277,20808,20809,20815,20825,20829,20834,20838,20843,20848,20853,20859,20863,20867,20873,20877,20890,20894,20899,20911,20915,20923,20936,20940,20944,20960,20964,20973,20986,20990,20996,21000,21012,21016,21022,21026,21030,21038,21042,21055,21063,21081,21085,21090,21095,21110,21114,21127,21131,21139,21143,21147,21155,21159,21164,21173,21177,21181,21206,21216,21220,21228,21232,21243,21268,21272,21276,21280,21288,21292,21297,21302,21309,21314,21319,21324,21329,21333,21338,21342,21347,21351,21356,21361,21365,21369,21374,21379,21387],{"__ignoreMap":275},[152,20810,20811,20813],{"class":281,"line":282},[152,20812,3601],{"class":476},[152,20814,3604],{"class":289},[152,20816,20817,20819,20821,20823],{"class":281,"line":303},[152,20818,3609],{"class":476},[152,20820,3612],{"class":476},[152,20822,3615],{"class":285},[152,20824,2965],{"class":483},[152,20826,20827],{"class":281,"line":310},[152,20828,307],{"emptyLinePlaceholder":306},[152,20830,20831],{"class":281,"line":324},[152,20832,20833],{"class":866},"\u002F\u002F拷贝构造函数调用时机\n",[152,20835,20836],{"class":281,"line":329},[152,20837,307],{"emptyLinePlaceholder":306},[152,20839,20840],{"class":281,"line":343},[152,20841,20842],{"class":866},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[152,20844,20845],{"class":281,"line":348},[152,20846,20847],{"class":866},"\u002F\u002F2.值传递的方式给函数参数传值\n",[152,20849,20850],{"class":281,"line":362},[152,20851,20852],{"class":866},"\u002F\u002F3.以值方式返回局部对象\n",[152,20854,20855,20857],{"class":281,"line":367},[152,20856,16309],{"class":476},[152,20858,16786],{"class":285},[152,20860,20861],{"class":281,"line":381},[152,20862,3217],{"class":483},[152,20864,20865],{"class":281,"line":386},[152,20866,16331],{"class":476},[152,20868,20869,20871],{"class":281,"line":932},[152,20870,20134],{"class":285},[152,20872,3627],{"class":483},[152,20874,20875],{"class":281,"line":942},[152,20876,3681],{"class":483},[152,20878,20879,20881,20883,20886,20888],{"class":281,"line":949},[152,20880,11301],{"class":483},[152,20882,2848],{"class":476},[152,20884,20885],{"class":289}," \"Person的默认构造函数调用\"",[152,20887,3116],{"class":476},[152,20889,10472],{"class":483},[152,20891,20892],{"class":281,"line":954},[152,20893,3838],{"class":483},[152,20895,20896],{"class":281,"line":959},[152,20897,20898],{"class":866},"    \u002F\u002F有参构造\n",[152,20900,20901,20903,20905,20907,20909],{"class":281,"line":970},[152,20902,20134],{"class":285},[152,20904,1819],{"class":483},[152,20906,1822],{"class":476},[152,20908,17304],{"class":6858},[152,20910,1825],{"class":483},[152,20912,20913],{"class":281,"line":979},[152,20914,3681],{"class":483},[152,20916,20917,20919,20921],{"class":281,"line":989},[152,20918,17358],{"class":483},[152,20920,1864],{"class":476},[152,20922,9439],{"class":483},[152,20924,20925,20927,20929,20932,20934],{"class":281,"line":996},[152,20926,11301],{"class":483},[152,20928,2848],{"class":476},[152,20930,20931],{"class":289}," \"Person的有参构造函数调用\"",[152,20933,3116],{"class":476},[152,20935,10472],{"class":483},[152,20937,20938],{"class":281,"line":1001},[152,20939,3838],{"class":483},[152,20941,20942],{"class":281,"line":1006},[152,20943,20489],{"class":866},[152,20945,20946,20948,20950,20952,20954,20956,20958],{"class":281,"line":1018},[152,20947,20134],{"class":285},[152,20949,1819],{"class":483},[152,20951,8434],{"class":476},[152,20953,17184],{"class":285},[152,20955,12200],{"class":476},[152,20957,19],{"class":6858},[152,20959,1825],{"class":483},[152,20961,20962],{"class":281,"line":1027},[152,20963,3681],{"class":483},[152,20965,20966,20968,20970],{"class":281,"line":1037},[152,20967,17358],{"class":483},[152,20969,1864],{"class":476},[152,20971,20972],{"class":483}," p.m_Age;\n",[152,20974,20975,20977,20979,20982,20984],{"class":281,"line":1044},[152,20976,11301],{"class":483},[152,20978,2848],{"class":476},[152,20980,20981],{"class":289}," \"Person的拷贝构造函数调用\"",[152,20983,3116],{"class":476},[152,20985,10472],{"class":483},[152,20987,20988],{"class":281,"line":1049},[152,20989,3838],{"class":483},[152,20991,20992,20994],{"class":281,"line":1054},[152,20993,20167],{"class":285},[152,20995,3627],{"class":483},[152,20997,20998],{"class":281,"line":1065},[152,20999,3681],{"class":483},[152,21001,21002,21004,21006,21008,21010],{"class":281,"line":1074},[152,21003,11301],{"class":483},[152,21005,2848],{"class":476},[152,21007,20182],{"class":289},[152,21009,3116],{"class":476},[152,21011,10472],{"class":483},[152,21013,21014],{"class":281,"line":1084},[152,21015,3838],{"class":483},[152,21017,21018,21020],{"class":281,"line":1091},[152,21019,3636],{"class":476},[152,21021,17281],{"class":483},[152,21023,21024],{"class":281,"line":1096},[152,21025,5637],{"class":483},[152,21027,21028],{"class":281,"line":1101},[152,21029,20842],{"class":866},[152,21031,21032,21034,21036],{"class":281,"line":1112},[152,21033,7006],{"class":476},[152,21035,7230],{"class":285},[152,21037,3627],{"class":483},[152,21039,21040],{"class":281,"line":1121},[152,21041,3217],{"class":483},[152,21043,21044,21047,21049,21051,21053],{"class":281,"line":1131},[152,21045,21046],{"class":483},"    Person ",[152,21048,8772],{"class":285},[152,21050,1819],{"class":483},[152,21052,2508],{"class":293},[152,21054,4362],{"class":483},[152,21056,21057,21059,21061],{"class":281,"line":1138},[152,21058,21046],{"class":483},[152,21060,8675],{"class":285},[152,21062,19130],{"class":483},[152,21064,21065,21067,21069,21072,21074,21077,21079],{"class":281,"line":1143},[152,21066,3222],{"class":483},[152,21068,2848],{"class":476},[152,21070,21071],{"class":289},"\"P2的年龄为：\"",[152,21073,2848],{"class":476},[152,21075,21076],{"class":483},"p2.m_Age",[152,21078,2848],{"class":476},[152,21080,2870],{"class":483},[152,21082,21083],{"class":281,"line":1148},[152,21084,3236],{"class":483},[152,21086,21087],{"class":281,"line":1159},[152,21088,21089],{"class":866},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[152,21091,21092],{"class":281,"line":1168},[152,21093,21094],{"class":866},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[152,21096,21097,21099,21102,21104,21106,21108],{"class":281,"line":1178},[152,21098,7006],{"class":476},[152,21100,21101],{"class":285}," doWork",[152,21103,1819],{"class":483},[152,21105,20661],{"class":285},[152,21107,8467],{"class":6858},[152,21109,1825],{"class":483},[152,21111,21112],{"class":281,"line":1185},[152,21113,3217],{"class":483},[152,21115,21116,21118,21120,21123,21125],{"class":281,"line":1190},[152,21117,8171],{"class":483},[152,21119,2848],{"class":476},[152,21121,21122],{"class":289}," \"doWork函数调用\"",[152,21124,3116],{"class":476},[152,21126,10472],{"class":483},[152,21128,21129],{"class":281,"line":1195},[152,21130,3236],{"class":483},[152,21132,21133,21135,21137],{"class":281,"line":1206},[152,21134,7006],{"class":476},[152,21136,7299],{"class":285},[152,21138,3627],{"class":483},[152,21140,21141],{"class":281,"line":1215},[152,21142,3217],{"class":483},[152,21144,21145],{"class":281,"line":1225},[152,21146,16928],{"class":483},[152,21148,21149,21152],{"class":281,"line":1232},[152,21150,21151],{"class":285},"    doWork",[152,21153,21154],{"class":483},"(p);\n",[152,21156,21157],{"class":281,"line":1237},[152,21158,3236],{"class":483},[152,21160,21161],{"class":281,"line":1242},[152,21162,21163],{"class":866},"\u002F\u002F 3.以值方式返回局部对象\n",[152,21165,21166,21168,21171],{"class":281,"line":1253},[152,21167,20661],{"class":285},[152,21169,21170],{"class":285}," doWork2",[152,21172,3627],{"class":483},[152,21174,21175],{"class":281,"line":1262},[152,21176,3217],{"class":483},[152,21178,21179],{"class":281,"line":1272},[152,21180,20651],{"class":483},[152,21182,21183,21185,21187,21189,21191,21193,21195,21197,21199,21201,21203],{"class":281,"line":1279},[152,21184,3222],{"class":483},[152,21186,2848],{"class":476},[152,21188,1819],{"class":483},[152,21190,1822],{"class":476},[152,21192,8160],{"class":476},[152,21194,2237],{"class":483},[152,21196,2161],{"class":476},[152,21198,8772],{"class":483},[152,21200,2848],{"class":476},[152,21202,2913],{"class":483},[152,21204,21205],{"class":866},"\u002F\u002F打印p1的地址\n",[152,21207,21208,21210,21213],{"class":281,"line":1284},[152,21209,5732],{"class":476},[152,21211,21212],{"class":483}," p1;",[152,21214,21215],{"class":866},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[152,21217,21218],{"class":281,"line":1289},[152,21219,3236],{"class":483},[152,21221,21222,21224,21226],{"class":281,"line":1301},[152,21223,7006],{"class":476},[152,21225,7371],{"class":285},[152,21227,3627],{"class":483},[152,21229,21230],{"class":281,"line":1310},[152,21231,3217],{"class":483},[152,21233,21234,21237,21239,21241],{"class":281,"line":1320},[152,21235,21236],{"class":483},"    Person p ",[152,21238,1864],{"class":476},[152,21240,21170],{"class":285},[152,21242,7278],{"class":483},[152,21244,21245,21247,21249,21251,21253,21255,21257,21259,21261,21263,21265],{"class":281,"line":1327},[152,21246,3222],{"class":483},[152,21248,2848],{"class":476},[152,21250,1819],{"class":483},[152,21252,1822],{"class":476},[152,21254,8160],{"class":476},[152,21256,2237],{"class":483},[152,21258,2161],{"class":476},[152,21260,19],{"class":483},[152,21262,2848],{"class":476},[152,21264,2913],{"class":483},[152,21266,21267],{"class":866},"\u002F\u002F打印p的地址\n",[152,21269,21270],{"class":281,"line":11528},[152,21271,3236],{"class":483},[152,21273,21274],{"class":281,"line":11536},[152,21275,307],{"emptyLinePlaceholder":306},[152,21277,21278],{"class":281,"line":11541},[152,21279,307],{"emptyLinePlaceholder":306},[152,21281,21282,21284,21286],{"class":281,"line":18219},[152,21283,1822],{"class":476},[152,21285,3624],{"class":285},[152,21287,3627],{"class":483},[152,21289,21290],{"class":281,"line":18225},[152,21291,3217],{"class":483},[152,21293,21294],{"class":281,"line":18248},[152,21295,21296],{"class":866},"    \u002F\u002F test01();\n",[152,21298,21299],{"class":281,"line":18254},[152,21300,21301],{"class":866},"    \u002F\u002F test02();\n",[152,21303,21304,21307],{"class":281,"line":18277},[152,21305,21306],{"class":285},"    test03",[152,21308,7278],{"class":483},[152,21310,21311],{"class":281,"line":18291},[152,21312,21313],{"class":866},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[152,21315,21316],{"class":281,"line":18311},[152,21317,21318],{"class":866},"\u002F\u002F 输出结果如下：\n",[152,21320,21321],{"class":281,"line":18317},[152,21322,21323],{"class":866},"\u002F\u002F Person的默认构造函数调用\n",[152,21325,21326],{"class":281,"line":18328},[152,21327,21328],{"class":866},"\u002F\u002F 0x7fffffffceec\n",[152,21330,21331],{"class":281,"line":18351},[152,21332,21328],{"class":866},[152,21334,21335],{"class":281,"line":18373},[152,21336,21337],{"class":866},"\u002F\u002F Person的析构函数调用\n",[152,21339,21340],{"class":281,"line":18378},[152,21341,307],{"emptyLinePlaceholder":306},[152,21343,21344],{"class":281,"line":18384},[152,21345,21346],{"class":866},"\u002F\u002F 之前的输出结果如下：\n",[152,21348,21349],{"class":281,"line":18398},[152,21350,21323],{"class":866},[152,21352,21353],{"class":281,"line":18411},[152,21354,21355],{"class":866},"\u002F\u002F 地址\n",[152,21357,21358],{"class":281,"line":18416},[152,21359,21360],{"class":866},"\u002F\u002F Person的拷贝构造函数调用\n",[152,21362,21363],{"class":281,"line":18430},[152,21364,21337],{"class":866},[152,21366,21367],{"class":281,"line":18435},[152,21368,21355],{"class":866},[152,21370,21371],{"class":281,"line":18441},[152,21372,21373],{"class":866},"\u002F\u002F (这两次输出的地址也是不同的) \n",[152,21375,21376],{"class":281,"line":18446},[152,21377,21378],{"class":866},"\u002F\u002F Person的析构函数调用     \n",[152,21380,21381,21383,21385],{"class":281,"line":18460},[152,21382,5732],{"class":476},[152,21384,5735],{"class":293},[152,21386,2965],{"class":483},[152,21388,21389],{"class":281,"line":18465},[152,21390,3236],{"class":483},[19,21392,21393],{},"简化版理解",[270,21395,21397],{"className":1807,"code":21396,"language":1809,"meta":275,"style":275},"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",[277,21398,21399,21407,21411,21417,21430,21441,21445,21457,21470,21478,21482,21498,21511,21520,21524,21529,21535,21548,21552,21556,21563,21567,21571,21576,21584,21588,21604,21617,21630,21634,21639,21647,21651,21655,21660,21665,21681,21689,21696,21702,21706,21710,21715,21723,21727,21731,21754,21761,21765,21769,21777,21781,21791,21813,21817,21821,21825,21833,21837,21842,21847,21853,21857,21867,21871,21879],{"__ignoreMap":275},[152,21400,21401,21403,21405],{"class":281,"line":282},[152,21402,16309],{"class":476},[152,21404,17184],{"class":285},[152,21406,17187],{"class":483},[152,21408,21409],{"class":281,"line":303},[152,21410,16331],{"class":476},[152,21412,21413,21415],{"class":281,"line":310},[152,21414,20134],{"class":285},[152,21416,12469],{"class":483},[152,21418,21419,21421,21423,21426,21428],{"class":281,"line":324},[152,21420,11301],{"class":483},[152,21422,2848],{"class":476},[152,21424,21425],{"class":289}," \"无参构造函数!\"",[152,21427,3116],{"class":476},[152,21429,10472],{"class":483},[152,21431,21432,21435,21437,21439],{"class":281,"line":329},[152,21433,21434],{"class":483},"        mAge ",[152,21436,1864],{"class":476},[152,21438,5735],{"class":293},[152,21440,2965],{"class":483},[152,21442,21443],{"class":281,"line":343},[152,21444,3838],{"class":483},[152,21446,21447,21449,21451,21453,21455],{"class":281,"line":348},[152,21448,20134],{"class":285},[152,21450,1819],{"class":483},[152,21452,1822],{"class":476},[152,21454,17304],{"class":6858},[152,21456,14058],{"class":483},[152,21458,21459,21461,21463,21466,21468],{"class":281,"line":362},[152,21460,11301],{"class":483},[152,21462,2848],{"class":476},[152,21464,21465],{"class":289}," \"有参构造函数!\"",[152,21467,3116],{"class":476},[152,21469,10472],{"class":483},[152,21471,21472,21474,21476],{"class":281,"line":367},[152,21473,21434],{"class":483},[152,21475,1864],{"class":476},[152,21477,9439],{"class":483},[152,21479,21480],{"class":281,"line":381},[152,21481,3838],{"class":483},[152,21483,21484,21486,21488,21490,21492,21494,21496],{"class":281,"line":386},[152,21485,20134],{"class":285},[152,21487,1819],{"class":483},[152,21489,8434],{"class":476},[152,21491,17184],{"class":285},[152,21493,2161],{"class":476},[152,21495,8467],{"class":6858},[152,21497,14058],{"class":483},[152,21499,21500,21502,21504,21507,21509],{"class":281,"line":932},[152,21501,11301],{"class":483},[152,21503,2848],{"class":476},[152,21505,21506],{"class":289}," \"拷贝构造函数!\"",[152,21508,3116],{"class":476},[152,21510,10472],{"class":483},[152,21512,21513,21515,21517],{"class":281,"line":942},[152,21514,21434],{"class":483},[152,21516,1864],{"class":476},[152,21518,21519],{"class":483}," p.mAge;\n",[152,21521,21522],{"class":281,"line":949},[152,21523,3838],{"class":483},[152,21525,21526],{"class":281,"line":954},[152,21527,21528],{"class":866},"    \u002F\u002F析构函数在释放内存之前调用\n",[152,21530,21531,21533],{"class":281,"line":959},[152,21532,20167],{"class":285},[152,21534,12469],{"class":483},[152,21536,21537,21539,21541,21544,21546],{"class":281,"line":970},[152,21538,11301],{"class":483},[152,21540,2848],{"class":476},[152,21542,21543],{"class":289}," \"析构函数!\"",[152,21545,3116],{"class":476},[152,21547,10472],{"class":483},[152,21549,21550],{"class":281,"line":979},[152,21551,3838],{"class":483},[152,21553,21554],{"class":281,"line":989},[152,21555,16331],{"class":476},[152,21557,21558,21560],{"class":281,"line":996},[152,21559,3636],{"class":476},[152,21561,21562],{"class":483}," mAge;\n",[152,21564,21565],{"class":281,"line":1001},[152,21566,5637],{"class":483},[152,21568,21569],{"class":281,"line":1006},[152,21570,307],{"emptyLinePlaceholder":306},[152,21572,21573],{"class":281,"line":1018},[152,21574,21575],{"class":866},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[152,21577,21578,21580,21582],{"class":281,"line":1027},[152,21579,7006],{"class":476},[152,21581,7230],{"class":285},[152,21583,12469],{"class":483},[152,21585,21586],{"class":281,"line":1037},[152,21587,307],{"emptyLinePlaceholder":306},[152,21589,21590,21592,21595,21597,21599,21601],{"class":281,"line":1044},[152,21591,21046],{"class":483},[152,21593,21594],{"class":285},"man",[152,21596,1819],{"class":483},[152,21598,2119],{"class":293},[152,21600,7608],{"class":483},[152,21602,21603],{"class":866}," \u002F\u002Fp对象已经创建完毕\n",[152,21605,21606,21608,21611,21614],{"class":281,"line":1049},[152,21607,21046],{"class":483},[152,21609,21610],{"class":285},"newman",[152,21612,21613],{"class":483},"(man);",[152,21615,21616],{"class":866}," \u002F\u002F调用拷贝构造函数\n",[152,21618,21619,21622,21624,21627],{"class":281,"line":1054},[152,21620,21621],{"class":483},"    Person newman2 ",[152,21623,1864],{"class":476},[152,21625,21626],{"class":483}," man;",[152,21628,21629],{"class":866}," \u002F\u002F拷贝构造\n",[152,21631,21632],{"class":281,"line":1065},[152,21633,307],{"emptyLinePlaceholder":306},[152,21635,21636],{"class":281,"line":1074},[152,21637,21638],{"class":866},"    \u002F\u002FPerson newman3;\n",[152,21640,21641,21644],{"class":281,"line":1084},[152,21642,21643],{"class":866},"    \u002F\u002Fnewman3 = man;",[152,21645,21646],{"class":866}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[152,21648,21649],{"class":281,"line":1091},[152,21650,3236],{"class":483},[152,21652,21653],{"class":281,"line":1096},[152,21654,307],{"emptyLinePlaceholder":306},[152,21656,21657],{"class":281,"line":1101},[152,21658,21659],{"class":866},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[152,21661,21662],{"class":281,"line":1112},[152,21663,21664],{"class":866},"\u002F\u002F相当于Person p1 = p;\n",[152,21666,21667,21669,21671,21673,21675,21678],{"class":281,"line":1121},[152,21668,7006],{"class":476},[152,21670,21101],{"class":285},[152,21672,1819],{"class":483},[152,21674,20661],{"class":285},[152,21676,21677],{"class":6858}," p1",[152,21679,21680],{"class":483},") {}\n",[152,21682,21683,21685,21687],{"class":281,"line":1131},[152,21684,7006],{"class":476},[152,21686,7299],{"class":285},[152,21688,12469],{"class":483},[152,21690,21691,21693],{"class":281,"line":1138},[152,21692,20219],{"class":483},[152,21694,21695],{"class":866}," \u002F\u002F无参构造函数\n",[152,21697,21698,21700],{"class":281,"line":1143},[152,21699,21151],{"class":285},[152,21701,21154],{"class":483},[152,21703,21704],{"class":281,"line":1148},[152,21705,3236],{"class":483},[152,21707,21708],{"class":281,"line":1159},[152,21709,307],{"emptyLinePlaceholder":306},[152,21711,21712],{"class":281,"line":1168},[152,21713,21714],{"class":866},"\u002F\u002F3. 以值方式返回局部对象\n",[152,21716,21717,21719,21721],{"class":281,"line":1178},[152,21718,20661],{"class":285},[152,21720,21170],{"class":285},[152,21722,3627],{"class":483},[152,21724,21725],{"class":281,"line":1185},[152,21726,3217],{"class":483},[152,21728,21729],{"class":281,"line":1190},[152,21730,20651],{"class":483},[152,21732,21733,21735,21737,21739,21741,21743,21745,21747,21750,21752],{"class":281,"line":1195},[152,21734,8171],{"class":483},[152,21736,2848],{"class":476},[152,21738,3322],{"class":483},[152,21740,1822],{"class":476},[152,21742,8160],{"class":476},[152,21744,2237],{"class":483},[152,21746,2161],{"class":476},[152,21748,21749],{"class":483},"p1 ",[152,21751,2848],{"class":476},[152,21753,10472],{"class":483},[152,21755,21756,21758],{"class":281,"line":1206},[152,21757,5732],{"class":476},[152,21759,21760],{"class":483}," p1;\n",[152,21762,21763],{"class":281,"line":1215},[152,21764,3236],{"class":483},[152,21766,21767],{"class":281,"line":1225},[152,21768,307],{"emptyLinePlaceholder":306},[152,21770,21771,21773,21775],{"class":281,"line":1232},[152,21772,7006],{"class":476},[152,21774,7371],{"class":285},[152,21776,3627],{"class":483},[152,21778,21779],{"class":281,"line":1237},[152,21780,3217],{"class":483},[152,21782,21783,21785,21787,21789],{"class":281,"line":1242},[152,21784,21236],{"class":483},[152,21786,1864],{"class":476},[152,21788,21170],{"class":285},[152,21790,7278],{"class":483},[152,21792,21793,21795,21797,21799,21801,21803,21805,21807,21809,21811],{"class":281,"line":1253},[152,21794,8171],{"class":483},[152,21796,2848],{"class":476},[152,21798,3322],{"class":483},[152,21800,1822],{"class":476},[152,21802,8160],{"class":476},[152,21804,2237],{"class":483},[152,21806,2161],{"class":476},[152,21808,13064],{"class":483},[152,21810,2848],{"class":476},[152,21812,10472],{"class":483},[152,21814,21815],{"class":281,"line":1262},[152,21816,3236],{"class":483},[152,21818,21819],{"class":281,"line":1272},[152,21820,307],{"emptyLinePlaceholder":306},[152,21822,21823],{"class":281,"line":1279},[152,21824,307],{"emptyLinePlaceholder":306},[152,21826,21827,21829,21831],{"class":281,"line":1284},[152,21828,1822],{"class":476},[152,21830,3624],{"class":285},[152,21832,12469],{"class":483},[152,21834,21835],{"class":281,"line":1289},[152,21836,307],{"emptyLinePlaceholder":306},[152,21838,21839],{"class":281,"line":1301},[152,21840,21841],{"class":866},"    \u002F\u002Ftest01();\n",[152,21843,21844],{"class":281,"line":1310},[152,21845,21846],{"class":866},"    \u002F\u002Ftest02();\n",[152,21848,21849,21851],{"class":281,"line":1320},[152,21850,21306],{"class":285},[152,21852,7278],{"class":483},[152,21854,21855],{"class":281,"line":1327},[152,21856,307],{"emptyLinePlaceholder":306},[152,21858,21859,21861,21863,21865],{"class":281,"line":11528},[152,21860,3954],{"class":285},[152,21862,1819],{"class":483},[152,21864,3959],{"class":289},[152,21866,4362],{"class":483},[152,21868,21869],{"class":281,"line":11536},[152,21870,307],{"emptyLinePlaceholder":306},[152,21872,21873,21875,21877],{"class":281,"line":11541},[152,21874,5732],{"class":476},[152,21876,5735],{"class":293},[152,21878,2965],{"class":483},[152,21880,21881],{"class":281,"line":18219},[152,21882,3236],{"class":483},[14,21884,21886],{"id":21885},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,21888,21889],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,21891,21892],{},"1．默认构造函数(无参，函数体为空)",[19,21894,21895],{},"2．默认析构函数(无参，函数体为空)",[19,21897,21898],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21900,21901],{},"构造函数调用规则如下：",[698,21903,21904,21907],{},[419,21905,21906],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[419,21908,21909],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[270,21911,21913],{"className":1807,"code":21912,"language":1809,"meta":275,"style":275},"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",[277,21914,21915,21923,21927,21932,21938,21950,21954,21959,21971,21980,21992,21996,22000,22016,22025,22037,22041,22045,22051,22063,22067,22071,22077,22081,22085,22093,22097,22109,22114,22122,22126,22144,22148,22152,22160,22164,22169,22177,22192,22205,22209,22214,22221,22237,22250,22254,22258,22266,22270,22276,22280,22290,22294,22302],{"__ignoreMap":275},[152,21916,21917,21919,21921],{"class":281,"line":282},[152,21918,16309],{"class":476},[152,21920,17184],{"class":285},[152,21922,17187],{"class":483},[152,21924,21925],{"class":281,"line":303},[152,21926,16331],{"class":476},[152,21928,21929],{"class":281,"line":310},[152,21930,21931],{"class":866},"    \u002F\u002F无参（默认）构造函数\n",[152,21933,21934,21936],{"class":281,"line":324},[152,21935,20134],{"class":285},[152,21937,12469],{"class":483},[152,21939,21940,21942,21944,21946,21948],{"class":281,"line":329},[152,21941,11301],{"class":483},[152,21943,2848],{"class":476},[152,21945,21425],{"class":289},[152,21947,3116],{"class":476},[152,21949,10472],{"class":483},[152,21951,21952],{"class":281,"line":343},[152,21953,3838],{"class":483},[152,21955,21956],{"class":281,"line":348},[152,21957,21958],{"class":866},"    \u002F\u002F有参构造函数\n",[152,21960,21961,21963,21965,21967,21969],{"class":281,"line":362},[152,21962,20134],{"class":285},[152,21964,1819],{"class":483},[152,21966,1822],{"class":476},[152,21968,3070],{"class":6858},[152,21970,14058],{"class":483},[152,21972,21973,21976,21978],{"class":281,"line":367},[152,21974,21975],{"class":483},"        age ",[152,21977,1864],{"class":476},[152,21979,3104],{"class":483},[152,21981,21982,21984,21986,21988,21990],{"class":281,"line":381},[152,21983,11301],{"class":483},[152,21985,2848],{"class":476},[152,21987,21465],{"class":289},[152,21989,3116],{"class":476},[152,21991,10472],{"class":483},[152,21993,21994],{"class":281,"line":386},[152,21995,3838],{"class":483},[152,21997,21998],{"class":281,"line":932},[152,21999,20489],{"class":866},[152,22001,22002,22004,22006,22008,22010,22012,22014],{"class":281,"line":942},[152,22003,20134],{"class":285},[152,22005,1819],{"class":483},[152,22007,8434],{"class":476},[152,22009,17184],{"class":285},[152,22011,2161],{"class":476},[152,22013,8467],{"class":6858},[152,22015,14058],{"class":483},[152,22017,22018,22020,22022],{"class":281,"line":949},[152,22019,21975],{"class":483},[152,22021,1864],{"class":476},[152,22023,22024],{"class":483}," p.age;\n",[152,22026,22027,22029,22031,22033,22035],{"class":281,"line":954},[152,22028,11301],{"class":483},[152,22030,2848],{"class":476},[152,22032,21506],{"class":289},[152,22034,3116],{"class":476},[152,22036,10472],{"class":483},[152,22038,22039],{"class":281,"line":959},[152,22040,3838],{"class":483},[152,22042,22043],{"class":281,"line":970},[152,22044,20162],{"class":866},[152,22046,22047,22049],{"class":281,"line":979},[152,22048,20167],{"class":285},[152,22050,12469],{"class":483},[152,22052,22053,22055,22057,22059,22061],{"class":281,"line":989},[152,22054,11301],{"class":483},[152,22056,2848],{"class":476},[152,22058,21543],{"class":289},[152,22060,3116],{"class":476},[152,22062,10472],{"class":483},[152,22064,22065],{"class":281,"line":996},[152,22066,3838],{"class":483},[152,22068,22069],{"class":281,"line":1001},[152,22070,16331],{"class":476},[152,22072,22073,22075],{"class":281,"line":1006},[152,22074,3636],{"class":476},[152,22076,9439],{"class":483},[152,22078,22079],{"class":281,"line":1018},[152,22080,5637],{"class":483},[152,22082,22083],{"class":281,"line":1027},[152,22084,307],{"emptyLinePlaceholder":306},[152,22086,22087,22089,22091],{"class":281,"line":1037},[152,22088,7006],{"class":476},[152,22090,7230],{"class":285},[152,22092,3627],{"class":483},[152,22094,22095],{"class":281,"line":1044},[152,22096,3217],{"class":483},[152,22098,22099,22101,22103,22105,22107],{"class":281,"line":1049},[152,22100,21046],{"class":483},[152,22102,8772],{"class":285},[152,22104,1819],{"class":483},[152,22106,2458],{"class":293},[152,22108,4362],{"class":483},[152,22110,22111],{"class":281,"line":1054},[152,22112,22113],{"class":866},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[152,22115,22116,22118,22120],{"class":281,"line":1065},[152,22117,21046],{"class":483},[152,22119,8675],{"class":285},[152,22121,19130],{"class":483},[152,22123,22124],{"class":281,"line":1074},[152,22125,307],{"emptyLinePlaceholder":306},[152,22127,22128,22130,22132,22135,22137,22140,22142],{"class":281,"line":1084},[152,22129,8171],{"class":483},[152,22131,2848],{"class":476},[152,22133,22134],{"class":289}," \"p2的年龄为： \"",[152,22136,3116],{"class":476},[152,22138,22139],{"class":483}," p2.age ",[152,22141,2848],{"class":476},[152,22143,10472],{"class":483},[152,22145,22146],{"class":281,"line":1091},[152,22147,3236],{"class":483},[152,22149,22150],{"class":281,"line":1096},[152,22151,307],{"emptyLinePlaceholder":306},[152,22153,22154,22156,22158],{"class":281,"line":1101},[152,22155,7006],{"class":476},[152,22157,7299],{"class":285},[152,22159,3627],{"class":483},[152,22161,22162],{"class":281,"line":1112},[152,22163,3217],{"class":483},[152,22165,22166],{"class":281,"line":1121},[152,22167,22168],{"class":866},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[152,22170,22171,22174],{"class":281,"line":1131},[152,22172,22173],{"class":483},"    Person p1;",[152,22175,22176],{"class":866}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[152,22178,22179,22181,22183,22185,22187,22189],{"class":281,"line":1138},[152,22180,21046],{"class":483},[152,22182,8675],{"class":285},[152,22184,1819],{"class":483},[152,22186,2254],{"class":293},[152,22188,7608],{"class":483},[152,22190,22191],{"class":866}," \u002F\u002F用户提供的有参\n",[152,22193,22194,22196,22199,22202],{"class":281,"line":1143},[152,22195,21046],{"class":483},[152,22197,22198],{"class":285},"p3",[152,22200,22201],{"class":483},"(p2);",[152,22203,22204],{"class":866}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[152,22206,22207],{"class":281,"line":1148},[152,22208,307],{"emptyLinePlaceholder":306},[152,22210,22211],{"class":281,"line":1159},[152,22212,22213],{"class":866},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[152,22215,22216,22219],{"class":281,"line":1168},[152,22217,22218],{"class":483},"    Person p4;",[152,22220,22176],{"class":866},[152,22222,22223,22225,22228,22230,22232,22234],{"class":281,"line":1178},[152,22224,21046],{"class":483},[152,22226,22227],{"class":285},"p5",[152,22229,1819],{"class":483},[152,22231,2254],{"class":293},[152,22233,7608],{"class":483},[152,22235,22236],{"class":866}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[152,22238,22239,22241,22244,22247],{"class":281,"line":1185},[152,22240,21046],{"class":483},[152,22242,22243],{"class":285},"p6",[152,22245,22246],{"class":483},"(p5);",[152,22248,22249],{"class":866}," \u002F\u002F用户自己提供拷贝构造\n",[152,22251,22252],{"class":281,"line":1190},[152,22253,3236],{"class":483},[152,22255,22256],{"class":281,"line":1195},[152,22257,307],{"emptyLinePlaceholder":306},[152,22259,22260,22262,22264],{"class":281,"line":1206},[152,22261,1822],{"class":476},[152,22263,3624],{"class":285},[152,22265,12469],{"class":483},[152,22267,22268],{"class":281,"line":1215},[152,22269,307],{"emptyLinePlaceholder":306},[152,22271,22272,22274],{"class":281,"line":1225},[152,22273,7275],{"class":285},[152,22275,7278],{"class":483},[152,22277,22278],{"class":281,"line":1232},[152,22279,307],{"emptyLinePlaceholder":306},[152,22281,22282,22284,22286,22288],{"class":281,"line":1237},[152,22283,3954],{"class":285},[152,22285,1819],{"class":483},[152,22287,3959],{"class":289},[152,22289,4362],{"class":483},[152,22291,22292],{"class":281,"line":1242},[152,22293,307],{"emptyLinePlaceholder":306},[152,22295,22296,22298,22300],{"class":281,"line":1253},[152,22297,5732],{"class":476},[152,22299,5735],{"class":293},[152,22301,2965],{"class":483},[152,22303,22304],{"class":281,"line":1262},[152,22305,3236],{"class":483},[14,22307,22309],{"id":22308},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22311,22312],{},"浅拷贝：简单的赋值拷贝操作",[19,22314,22315],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[270,22317,22319],{"className":1807,"code":22318,"language":1809,"meta":275,"style":275},"#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",[277,22320,22321,22327,22337,22343,22347,22351,22356,22362,22366,22379,22383,22387,22394,22398,22408,22423,22436,22440,22445,22450,22466,22470,22483,22488,22493,22498,22507,22512,22527,22531,22535,22539,22545,22549,22554,22569,22573,22584,22598,22602,22611,22615,22621,22633,22637,22645,22649,22666,22697,22705,22733,22737,22741,22749,22753,22759],{"__ignoreMap":275},[152,22322,22323,22325],{"class":281,"line":282},[152,22324,3601],{"class":476},[152,22326,3604],{"class":289},[152,22328,22329,22331,22333,22335],{"class":281,"line":303},[152,22330,3609],{"class":476},[152,22332,3612],{"class":476},[152,22334,3615],{"class":285},[152,22336,2965],{"class":483},[152,22338,22339,22341],{"class":281,"line":310},[152,22340,16309],{"class":476},[152,22342,16786],{"class":285},[152,22344,22345],{"class":281,"line":324},[152,22346,3217],{"class":483},[152,22348,22349],{"class":281,"line":329},[152,22350,16331],{"class":476},[152,22352,22353],{"class":281,"line":343},[152,22354,22355],{"class":866},"    \u002F\u002F默认构造函数\n",[152,22357,22358,22360],{"class":281,"line":348},[152,22359,20134],{"class":285},[152,22361,3627],{"class":483},[152,22363,22364],{"class":281,"line":362},[152,22365,3681],{"class":483},[152,22367,22368,22370,22372,22375,22377],{"class":281,"line":367},[152,22369,5094],{"class":483},[152,22371,2848],{"class":476},[152,22373,22374],{"class":289},"\"默认构造函数\"",[152,22376,2848],{"class":476},[152,22378,2870],{"class":483},[152,22380,22381],{"class":281,"line":381},[152,22382,3838],{"class":483},[152,22384,22385],{"class":281,"line":386},[152,22386,21958],{"class":866},[152,22388,22389,22391],{"class":281,"line":932},[152,22390,20167],{"class":285},[152,22392,22393],{"class":483},"(int age,int height)\n",[152,22395,22396],{"class":281,"line":942},[152,22397,3681],{"class":483},[152,22399,22400,22403,22405],{"class":281,"line":949},[152,22401,22402],{"class":483},"        m_Age",[152,22404,1864],{"class":476},[152,22406,22407],{"class":483},"age;\n",[152,22409,22410,22413,22415,22417,22420],{"class":281,"line":954},[152,22411,22412],{"class":483},"        m_Height",[152,22414,13333],{"class":476},[152,22416,4033],{"class":476},[152,22418,22419],{"class":483},"(height);",[152,22421,22422],{"class":866},"\u002F\u002F放到堆区\n",[152,22424,22425,22427,22429,22432,22434],{"class":281,"line":959},[152,22426,5094],{"class":483},[152,22428,2848],{"class":476},[152,22430,22431],{"class":289},"\"有参构造函数\"",[152,22433,2848],{"class":476},[152,22435,2870],{"class":483},[152,22437,22438],{"class":281,"line":970},[152,22439,3838],{"class":483},[152,22441,22442],{"class":281,"line":979},[152,22443,22444],{"class":866},"    \u002F\u002F深拷贝解决上述问题\n",[152,22446,22447],{"class":281,"line":989},[152,22448,22449],{"class":866},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[152,22451,22452,22454,22456,22458,22460,22462,22464],{"class":281,"line":996},[152,22453,20134],{"class":285},[152,22455,1819],{"class":483},[152,22457,8434],{"class":476},[152,22459,17184],{"class":285},[152,22461,12200],{"class":476},[152,22463,19],{"class":6858},[152,22465,1825],{"class":483},[152,22467,22468],{"class":281,"line":1001},[152,22469,3681],{"class":483},[152,22471,22472,22474,22476,22479,22481],{"class":281,"line":1006},[152,22473,5094],{"class":483},[152,22475,2848],{"class":476},[152,22477,22478],{"class":289},"\"拷贝构造函数\"",[152,22480,2848],{"class":476},[152,22482,2870],{"class":483},[152,22484,22485],{"class":281,"line":1018},[152,22486,22487],{"class":866},"        \u002F\u002F编译器默认的写如下注释部分\n",[152,22489,22490],{"class":281,"line":1027},[152,22491,22492],{"class":866},"        \u002F\u002Fm_Age=p.m_Age;\n",[152,22494,22495],{"class":281,"line":1037},[152,22496,22497],{"class":866},"        \u002F\u002Fm_Height=p.m_Height;\n",[152,22499,22500,22502,22504],{"class":281,"line":1044},[152,22501,22402],{"class":483},[152,22503,1864],{"class":476},[152,22505,22506],{"class":483},"p.m_Age;\n",[152,22508,22509],{"class":281,"line":1049},[152,22510,22511],{"class":866},"        \u002F\u002F深拷贝操作\n",[152,22513,22514,22516,22518,22520,22522,22524],{"class":281,"line":1054},[152,22515,22412],{"class":483},[152,22517,13333],{"class":476},[152,22519,4033],{"class":476},[152,22521,1819],{"class":483},[152,22523,2263],{"class":476},[152,22525,22526],{"class":483},"p.m_Height);\n",[152,22528,22529],{"class":281,"line":1065},[152,22530,3838],{"class":483},[152,22532,22533],{"class":281,"line":1074},[152,22534,307],{"emptyLinePlaceholder":306},[152,22536,22537],{"class":281,"line":1084},[152,22538,20162],{"class":866},[152,22540,22541,22543],{"class":281,"line":1091},[152,22542,20167],{"class":285},[152,22544,3627],{"class":483},[152,22546,22547],{"class":281,"line":1096},[152,22548,3681],{"class":483},[152,22550,22551],{"class":281,"line":1101},[152,22552,22553],{"class":866},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[152,22555,22556,22558,22561,22564,22567],{"class":281,"line":1112},[152,22557,4147],{"class":476},[152,22559,22560],{"class":483},"(m_Height ",[152,22562,22563],{"class":476},"!=",[152,22565,22566],{"class":293}," NULL",[152,22568,1825],{"class":483},[152,22570,22571],{"class":281,"line":1121},[152,22572,4160],{"class":483},[152,22574,22575,22578,22581],{"class":281,"line":1131},[152,22576,22577],{"class":476},"            delete",[152,22579,22580],{"class":483}," m_Height;",[152,22582,22583],{"class":866}," \u002F\u002F释放堆区内存\n",[152,22585,22586,22589,22591,22593,22595],{"class":281,"line":1138},[152,22587,22588],{"class":483},"            m_Height",[152,22590,1864],{"class":476},[152,22592,4043],{"class":293},[152,22594,1873],{"class":483},[152,22596,22597],{"class":866}," \u002F\u002F防止野指针\n",[152,22599,22600],{"class":281,"line":1143},[152,22601,4179],{"class":483},[152,22603,22604,22606,22608],{"class":281,"line":1148},[152,22605,5094],{"class":483},[152,22607,2848],{"class":476},[152,22609,22610],{"class":289},"\"Person的析构函数调用\"\n",[152,22612,22613],{"class":281,"line":1159},[152,22614,3838],{"class":483},[152,22616,22617,22619],{"class":281,"line":1168},[152,22618,3636],{"class":476},[152,22620,17281],{"class":483},[152,22622,22623,22625,22627,22630],{"class":281,"line":1178},[152,22624,3636],{"class":476},[152,22626,8160],{"class":476},[152,22628,22629],{"class":483},"m_Height;",[152,22631,22632],{"class":866}," \u002F\u002F定义一个指针，指向身高\n",[152,22634,22635],{"class":281,"line":1185},[152,22636,5637],{"class":483},[152,22638,22639,22641,22643],{"class":281,"line":1190},[152,22640,7006],{"class":476},[152,22642,7230],{"class":285},[152,22644,3627],{"class":483},[152,22646,22647],{"class":281,"line":1195},[152,22648,3217],{"class":483},[152,22650,22651,22653,22655,22657,22659,22661,22664],{"class":281,"line":1206},[152,22652,21046],{"class":483},[152,22654,8772],{"class":285},[152,22656,1819],{"class":483},[152,22658,2458],{"class":293},[152,22660,2186],{"class":483},[152,22662,22663],{"class":293},"160",[152,22665,4362],{"class":483},[152,22667,22668,22670,22672,22675,22677,22680,22682,22685,22687,22690,22692,22694],{"class":281,"line":1215},[152,22669,3222],{"class":483},[152,22671,2848],{"class":476},[152,22673,22674],{"class":289},"\"p1的年龄为:\"",[152,22676,2848],{"class":476},[152,22678,22679],{"class":483},"p1.m_Age",[152,22681,2848],{"class":476},[152,22683,22684],{"class":289},"\"身高为：\"",[152,22686,8061],{"class":476},[152,22688,22689],{"class":483},"p1.m_Height",[152,22691,2848],{"class":476},[152,22693,2913],{"class":483},[152,22695,22696],{"class":866},"  \u002F\u002F18\n",[152,22698,22699,22701,22703],{"class":281,"line":1225},[152,22700,21046],{"class":483},[152,22702,8675],{"class":285},[152,22704,19130],{"class":483},[152,22706,22707,22709,22711,22714,22716,22718,22720,22722,22724,22727,22729,22731],{"class":281,"line":1232},[152,22708,3222],{"class":483},[152,22710,2848],{"class":476},[152,22712,22713],{"class":289},"\"p2的年龄为：\"",[152,22715,2848],{"class":476},[152,22717,21076],{"class":483},[152,22719,2848],{"class":476},[152,22721,22684],{"class":289},[152,22723,8061],{"class":476},[152,22725,22726],{"class":483},"p2.m_Height",[152,22728,2848],{"class":476},[152,22730,2913],{"class":483},[152,22732,22696],{"class":866},[152,22734,22735],{"class":281,"line":1237},[152,22736,14826],{"class":483},[152,22738,22739],{"class":281,"line":1242},[152,22740,3236],{"class":483},[152,22742,22743,22745,22747],{"class":281,"line":1253},[152,22744,1822],{"class":476},[152,22746,3624],{"class":285},[152,22748,3627],{"class":483},[152,22750,22751],{"class":281,"line":1262},[152,22752,3217],{"class":483},[152,22754,22755,22757],{"class":281,"line":1272},[152,22756,7275],{"class":285},[152,22758,7278],{"class":483},[152,22760,22761],{"class":281,"line":1279},[152,22762,3236],{"class":483},[19,22764,22765],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22767,22768],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22770,22771],{},[401,22772],{"alt":275,"src":22773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22775,22776],{},"浅拷贝问题要使用深拷贝来解决",[19,22778,22779],{},[401,22780],{"alt":275,"src":22781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22783,22784],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[14,22786,22788],{"id":22787},"_826初始化列表","8.2.6初始化列表",[19,22790,22791],{},"作用：初始化属性",[19,22793,6823],{},[270,22795,22798],{"className":22796,"code":22797,"language":6829},[6827],"构造函数():属性1(值1),属性2(值2).....{}\n",[277,22799,22797],{"__ignoreMap":275},[19,22801,22802],{},"例子",[270,22804,22806],{"className":1807,"code":22805,"language":1809,"meta":275,"style":275},"#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",[277,22807,22808,22814,22824,22830,22834,22839,22843,22848,22853,22858,22863,22868,22873,22877,22882,22887,22930,22939,22957,22975,22993,22997,23001,23008,23015,23022,23026,23030,23038,23042,23046,23066,23075,23079,23083,23093,23097,23105],{"__ignoreMap":275},[152,22809,22810,22812],{"class":281,"line":282},[152,22811,3601],{"class":476},[152,22813,3604],{"class":289},[152,22815,22816,22818,22820,22822],{"class":281,"line":303},[152,22817,3609],{"class":476},[152,22819,3612],{"class":476},[152,22821,3615],{"class":285},[152,22823,2965],{"class":483},[152,22825,22826,22828],{"class":281,"line":310},[152,22827,16309],{"class":476},[152,22829,16786],{"class":285},[152,22831,22832],{"class":281,"line":324},[152,22833,3217],{"class":483},[152,22835,22836],{"class":281,"line":329},[152,22837,22838],{"class":476},"    public:\n",[152,22840,22841],{"class":281,"line":343},[152,22842,307],{"emptyLinePlaceholder":306},[152,22844,22845],{"class":281,"line":348},[152,22846,22847],{"class":866},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[152,22849,22850],{"class":281,"line":362},[152,22851,22852],{"class":866},"    \u002F\u002FPerson(int a, int b, int c) {\n",[152,22854,22855],{"class":281,"line":367},[152,22856,22857],{"class":866},"    \u002F\u002F  m_A = a;\n",[152,22859,22860],{"class":281,"line":381},[152,22861,22862],{"class":866},"    \u002F\u002F  m_B = b;\n",[152,22864,22865],{"class":281,"line":386},[152,22866,22867],{"class":866},"    \u002F\u002F  m_C = c;\n",[152,22869,22870],{"class":281,"line":932},[152,22871,22872],{"class":866},"    \u002F\u002F}\n",[152,22874,22875],{"class":281,"line":942},[152,22876,307],{"emptyLinePlaceholder":306},[152,22878,22879],{"class":281,"line":949},[152,22880,22881],{"class":866},"    \u002F\u002F初始化列表方式初始化\n",[152,22883,22884],{"class":281,"line":954},[152,22885,22886],{"class":866},"    \u002F\u002F使用有参构造函数\n",[152,22888,22889,22891,22893,22895,22897,22899,22901,22903,22905,22907,22909,22912,22915,22918,22921,22924,22927],{"class":281,"line":959},[152,22890,20134],{"class":285},[152,22892,1819],{"class":483},[152,22894,1822],{"class":476},[152,22896,3070],{"class":6858},[152,22898,14051],{"class":483},[152,22900,1822],{"class":476},[152,22902,4476],{"class":6858},[152,22904,14051],{"class":483},[152,22906,1822],{"class":476},[152,22908,4492],{"class":6858},[152,22910,22911],{"class":483},") :",[152,22913,22914],{"class":285},"m_A",[152,22916,22917],{"class":483},"(a), ",[152,22919,22920],{"class":285},"m_B",[152,22922,22923],{"class":483},"(b), ",[152,22925,22926],{"class":285},"m_C",[152,22928,22929],{"class":483},"(c) {}\n",[152,22931,22932,22934,22937],{"class":281,"line":970},[152,22933,16524],{"class":476},[152,22935,22936],{"class":285}," PrintPerson",[152,22938,12469],{"class":483},[152,22940,22941,22943,22945,22948,22950,22953,22955],{"class":281,"line":979},[152,22942,11301],{"class":483},[152,22944,2848],{"class":476},[152,22946,22947],{"class":289}," \"mA:\"",[152,22949,3116],{"class":476},[152,22951,22952],{"class":483}," m_A ",[152,22954,2848],{"class":476},[152,22956,10472],{"class":483},[152,22958,22959,22961,22963,22966,22968,22971,22973],{"class":281,"line":989},[152,22960,11301],{"class":483},[152,22962,2848],{"class":476},[152,22964,22965],{"class":289}," \"mB:\"",[152,22967,3116],{"class":476},[152,22969,22970],{"class":483}," m_B ",[152,22972,2848],{"class":476},[152,22974,10472],{"class":483},[152,22976,22977,22979,22981,22984,22986,22989,22991],{"class":281,"line":996},[152,22978,11301],{"class":483},[152,22980,2848],{"class":476},[152,22982,22983],{"class":289}," \"mC:\"",[152,22985,3116],{"class":476},[152,22987,22988],{"class":483}," m_C ",[152,22990,2848],{"class":476},[152,22992,10472],{"class":483},[152,22994,22995],{"class":281,"line":1001},[152,22996,3838],{"class":483},[152,22998,22999],{"class":281,"line":1006},[152,23000,16837],{"class":476},[152,23002,23003,23005],{"class":281,"line":1018},[152,23004,3636],{"class":476},[152,23006,23007],{"class":483}," m_A;\n",[152,23009,23010,23012],{"class":281,"line":1027},[152,23011,3636],{"class":476},[152,23013,23014],{"class":483}," m_B;\n",[152,23016,23017,23019],{"class":281,"line":1037},[152,23018,3636],{"class":476},[152,23020,23021],{"class":483}," m_C;\n",[152,23023,23024],{"class":281,"line":1044},[152,23025,5637],{"class":483},[152,23027,23028],{"class":281,"line":1049},[152,23029,307],{"emptyLinePlaceholder":306},[152,23031,23032,23034,23036],{"class":281,"line":1054},[152,23033,1822],{"class":476},[152,23035,3624],{"class":285},[152,23037,7620],{"class":483},[152,23039,23040],{"class":281,"line":1065},[152,23041,3217],{"class":483},[152,23043,23044],{"class":281,"line":1074},[152,23045,307],{"emptyLinePlaceholder":306},[152,23047,23048,23050,23052,23054,23056,23058,23060,23062,23064],{"class":281,"line":1084},[152,23049,21046],{"class":483},[152,23051,19],{"class":285},[152,23053,1819],{"class":483},[152,23055,2026],{"class":293},[152,23057,14051],{"class":483},[152,23059,1894],{"class":293},[152,23061,14051],{"class":483},[152,23063,1888],{"class":293},[152,23065,4362],{"class":483},[152,23067,23068,23070,23073],{"class":281,"line":1091},[152,23069,17481],{"class":483},[152,23071,23072],{"class":285},"PrintPerson",[152,23074,7278],{"class":483},[152,23076,23077],{"class":281,"line":1096},[152,23078,307],{"emptyLinePlaceholder":306},[152,23080,23081],{"class":281,"line":1101},[152,23082,307],{"emptyLinePlaceholder":306},[152,23084,23085,23087,23089,23091],{"class":281,"line":1112},[152,23086,3954],{"class":285},[152,23088,1819],{"class":483},[152,23090,3959],{"class":289},[152,23092,4362],{"class":483},[152,23094,23095],{"class":281,"line":1121},[152,23096,307],{"emptyLinePlaceholder":306},[152,23098,23099,23101,23103],{"class":281,"line":1131},[152,23100,5732],{"class":476},[152,23102,5735],{"class":293},[152,23104,2965],{"class":483},[152,23106,23107],{"class":281,"line":1138},[152,23108,3236],{"class":483},[19,23110,23111,23112,23115,23116],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[694,23113,23114],{},"参数名就是定义的对象属性","，",[694,23117,23118],{},"属性后面的值为有参构造函数的形参",[270,23120,23122],{"className":1807,"code":23121,"language":1809,"meta":275,"style":275},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[277,23123,23124],{"__ignoreMap":275},[152,23125,23126,23128,23130,23132,23135,23137,23140,23142,23145,23147,23150,23152,23155,23157],{"class":281,"line":282},[152,23127,20661],{"class":285},[152,23129,1819],{"class":483},[152,23131,1822],{"class":476},[152,23133,23134],{"class":483}," a.",[152,23136,1822],{"class":476},[152,23138,23139],{"class":483}," b,",[152,23141,1822],{"class":476},[152,23143,23144],{"class":483}," b):",[152,23146,22914],{"class":285},[152,23148,23149],{"class":483},"(a),",[152,23151,22920],{"class":285},[152,23153,23154],{"class":483},"(c),",[152,23156,22926],{"class":285},[152,23158,23159],{"class":483},"(b) {}\n",[14,23161,23163],{"id":23162},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23165,23166],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23168,607],{},[270,23170,23172],{"className":1807,"code":23171,"language":1809,"meta":275,"style":275},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[277,23173,23174,23179,23184,23188,23193,23197],{"__ignoreMap":275},[152,23175,23176],{"class":281,"line":282},[152,23177,23178],{"class":483},"A{};\n",[152,23180,23181],{"class":281,"line":303},[152,23182,23183],{"class":483},"B\n",[152,23185,23186],{"class":281,"line":310},[152,23187,3217],{"class":483},[152,23189,23190],{"class":281,"line":324},[152,23191,23192],{"class":483},"    A a;\n",[152,23194,23195],{"class":281,"line":329},[152,23196,3236],{"class":483},[152,23198,23199],{"class":281,"line":343},[152,23200,23201],{"class":866},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23203,23204],{},"案例",[270,23206,23208],{"className":1807,"code":23207,"language":1809,"meta":275,"style":275},"\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",[277,23209,23210,23215,23222,23226,23231,23236,23250,23254,23264,23275,23279,23286,23290,23303,23307,23312,23317,23321,23327,23331,23335,23339,23370,23374,23385,23389,23395,23399,23412,23416,23420,23424,23429,23434,23438,23446,23450,23467,23486,23490,23498,23502,23508],{"__ignoreMap":275},[152,23211,23212],{"class":281,"line":282},[152,23213,23214],{"class":866},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[152,23216,23217,23219],{"class":281,"line":303},[152,23218,16309],{"class":476},[152,23220,23221],{"class":285}," Phone\n",[152,23223,23224],{"class":281,"line":310},[152,23225,3217],{"class":483},[152,23227,23228],{"class":281,"line":324},[152,23229,23230],{"class":483},"public：\n",[152,23232,23233],{"class":281,"line":329},[152,23234,23235],{"class":866},"    \u002F\u002F 赋值(构造函数)\n",[152,23237,23238,23241,23243,23245,23248],{"class":281,"line":343},[152,23239,23240],{"class":285},"    Phone",[152,23242,1819],{"class":483},[152,23244,16532],{"class":285},[152,23246,23247],{"class":6858}," pName",[152,23249,1825],{"class":483},[152,23251,23252],{"class":281,"line":348},[152,23253,3681],{"class":483},[152,23255,23256,23259,23261],{"class":281,"line":362},[152,23257,23258],{"class":483},"        m_pName",[152,23260,1864],{"class":476},[152,23262,23263],{"class":483},"pName;\n",[152,23265,23266,23268,23270,23273],{"class":281,"line":367},[152,23267,5094],{"class":483},[152,23269,2848],{"class":476},[152,23271,23272],{"class":289},"\"Phone的构造函数调用\"",[152,23274,2965],{"class":483},[152,23276,23277],{"class":281,"line":381},[152,23278,3838],{"class":483},[152,23280,23281,23284],{"class":281,"line":386},[152,23282,23283],{"class":285},"    ~Phone",[152,23285,3627],{"class":483},[152,23287,23288],{"class":281,"line":932},[152,23289,3681],{"class":483},[152,23291,23292,23294,23296,23299,23301],{"class":281,"line":942},[152,23293,5094],{"class":483},[152,23295,2848],{"class":476},[152,23297,23298],{"class":289},"\"Phone析构函数调用\"",[152,23300,2848],{"class":476},[152,23302,2870],{"class":483},[152,23304,23305],{"class":281,"line":949},[152,23306,3838],{"class":483},[152,23308,23309],{"class":281,"line":954},[152,23310,23311],{"class":866},"    \u002F\u002F\n",[152,23313,23314],{"class":281,"line":959},[152,23315,23316],{"class":483},"    string m_PName;\n",[152,23318,23319],{"class":281,"line":970},[152,23320,5637],{"class":483},[152,23322,23323,23325],{"class":281,"line":979},[152,23324,16309],{"class":476},[152,23326,16786],{"class":285},[152,23328,23329],{"class":281,"line":989},[152,23330,3217],{"class":483},[152,23332,23333],{"class":281,"line":996},[152,23334,16331],{"class":476},[152,23336,23337],{"class":281,"line":1001},[152,23338,18609],{"class":866},[152,23340,23341,23343,23345,23347,23349,23351,23353,23356,23359,23361,23364,23367],{"class":281,"line":1006},[152,23342,20134],{"class":285},[152,23344,1819],{"class":483},[152,23346,16532],{"class":285},[152,23348,16535],{"class":6858},[152,23350,2186],{"class":483},[152,23352,16532],{"class":285},[152,23354,23355],{"class":6858}," pname",[152,23357,23358],{"class":483},"):",[152,23360,16625],{"class":285},[152,23362,23363],{"class":483},"(name),m_phone.",[152,23365,23366],{"class":285},"m_PName",[152,23368,23369],{"class":483},"(pname) \n",[152,23371,23372],{"class":281,"line":1018},[152,23373,3681],{"class":483},[152,23375,23376,23378,23380,23383],{"class":281,"line":1027},[152,23377,5094],{"class":483},[152,23379,2848],{"class":476},[152,23381,23382],{"class":289},"\"Person的构造函数调用\"",[152,23384,2965],{"class":483},[152,23386,23387],{"class":281,"line":1037},[152,23388,3838],{"class":483},[152,23390,23391,23393],{"class":281,"line":1044},[152,23392,20167],{"class":285},[152,23394,3627],{"class":483},[152,23396,23397],{"class":281,"line":1049},[152,23398,3681],{"class":483},[152,23400,23401,23403,23405,23408,23410],{"class":281,"line":1054},[152,23402,5094],{"class":483},[152,23404,2848],{"class":476},[152,23406,23407],{"class":289},"\"Person析构函数调用\"",[152,23409,2848],{"class":476},[152,23411,2870],{"class":483},[152,23413,23414],{"class":281,"line":1065},[152,23415,3838],{"class":483},[152,23417,23418],{"class":281,"line":1074},[152,23419,9422],{"class":866},[152,23421,23422],{"class":281,"line":1084},[152,23423,16507],{"class":483},[152,23425,23426],{"class":281,"line":1091},[152,23427,23428],{"class":866},"    \u002F\u002F手机\n",[152,23430,23431],{"class":281,"line":1096},[152,23432,23433],{"class":483},"    Phone m_Phone;\n",[152,23435,23436],{"class":281,"line":1101},[152,23437,5637],{"class":483},[152,23439,23440,23442,23444],{"class":281,"line":1112},[152,23441,7006],{"class":476},[152,23443,7230],{"class":285},[152,23445,3627],{"class":483},[152,23447,23448],{"class":281,"line":1121},[152,23449,3217],{"class":483},[152,23451,23452,23454,23456,23458,23460,23462,23465],{"class":281,"line":1131},[152,23453,21046],{"class":483},[152,23455,19],{"class":285},[152,23457,1819],{"class":483},[152,23459,9558],{"class":289},[152,23461,2186],{"class":483},[152,23463,23464],{"class":289},"\"安卓\"",[152,23466,4362],{"class":483},[152,23468,23469,23471,23473,23476,23478,23481,23483],{"class":281,"line":1138},[152,23470,3222],{"class":483},[152,23472,2848],{"class":476},[152,23474,23475],{"class":483},"p.Name",[152,23477,2848],{"class":476},[152,23479,23480],{"class":289},"\"拿着：\"",[152,23482,2848],{"class":476},[152,23484,23485],{"class":483},"p.m_phone.m_PName;\n",[152,23487,23488],{"class":281,"line":1143},[152,23489,3236],{"class":483},[152,23491,23492,23494,23496],{"class":281,"line":1148},[152,23493,1822],{"class":476},[152,23495,3624],{"class":285},[152,23497,3627],{"class":483},[152,23499,23500],{"class":281,"line":1159},[152,23501,3217],{"class":483},[152,23503,23504,23506],{"class":281,"line":1168},[152,23505,7275],{"class":285},[152,23507,7278],{"class":483},[152,23509,23510],{"class":281,"line":1178},[152,23511,3236],{"class":483},[19,23513,10657],{},[270,23515,23517],{"className":1807,"code":23516,"language":1809,"meta":275,"style":275},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[277,23518,23519,23524],{"__ignoreMap":275},[152,23520,23521],{"class":281,"line":282},[152,23522,23523],{"class":866},"    \u002F\u002F不需要写这个：\n",[152,23525,23526],{"class":281,"line":303},[152,23527,23528],{"class":866},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23530,23531],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[270,23533,23535],{"className":1807,"code":23534,"language":1809,"meta":275,"style":275},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[277,23536,23537],{"__ignoreMap":275},[152,23538,23539,23541,23544,23546,23549,23552],{"class":281,"line":282},[152,23540,20661],{"class":285},[152,23542,23543],{"class":483},"(string name.string pname):",[152,23545,16625],{"class":285},[152,23547,23548],{"class":483},"(name),",[152,23550,23551],{"class":285},"m_phone",[152,23553,23554],{"class":483},"(pname) {}\n",[19,23556,23557,23558,1864,23561],{},"采用的是隐式转换法，实际为如下：\n",[277,23559,23560],{},"m_phone(pname)",[277,23562,23563],{},"Phone m_phone=pname",[19,23565,23566,23569],{},[694,23567,23568],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23571,23572],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[14,23574,23576],{"id":23575},"_828静态对象","8.2.8静态对象",[19,23578,23579],{},"静态对象在成员对象前static，称为静态对象",[19,23581,23582],{},"静态对象分为两类：",[416,23584,23585],{},[419,23586,23587],{},"静态成员变量",[698,23589,23590,23593,23596],{},[419,23591,23592],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[419,23594,23595],{},"②在编译阶段分配内存",[419,23597,23598],{},"③类内声明，类外初始化",[416,23600,23601],{"start":303},[419,23602,23603],{},"静态成员函数",[698,23605,23606,23609],{},[419,23607,23608],{},"①所有对象共享同一个函数",[419,23610,23611],{},"②静态成员函数只能访问静态成员变量",[262,23613,23615],{"id":23614},"_8281静态成员变量","8.2.8.1静态成员变量",[270,23617,23619],{"className":1807,"code":23618,"language":1809,"meta":275,"style":275},"#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",[277,23620,23621,23627,23637,23643,23647,23651,23656,23661,23666,23674,23678,23682,23686,23694,23698,23702,23707,23720,23724,23732,23736,23742],{"__ignoreMap":275},[152,23622,23623,23625],{"class":281,"line":282},[152,23624,3601],{"class":476},[152,23626,3604],{"class":289},[152,23628,23629,23631,23633,23635],{"class":281,"line":303},[152,23630,3609],{"class":476},[152,23632,3612],{"class":476},[152,23634,3615],{"class":285},[152,23636,2965],{"class":483},[152,23638,23639,23641],{"class":281,"line":310},[152,23640,16309],{"class":476},[152,23642,16786],{"class":285},[152,23644,23645],{"class":281,"line":324},[152,23646,3217],{"class":483},[152,23648,23649],{"class":281,"line":329},[152,23650,16331],{"class":476},[152,23652,23653],{"class":281,"line":343},[152,23654,23655],{"class":866},"    \u002F\u002F非静态成员变量\n",[152,23657,23658],{"class":281,"line":348},[152,23659,23660],{"class":866},"    \u002F\u002F int m_A;\n",[152,23662,23663],{"class":281,"line":362},[152,23664,23665],{"class":866},"    \u002F\u002F定义静态成员变量\n",[152,23667,23668,23670,23672],{"class":281,"line":367},[152,23669,12636],{"class":476},[152,23671,4033],{"class":476},[152,23673,23007],{"class":483},[152,23675,23676],{"class":281,"line":381},[152,23677,307],{"emptyLinePlaceholder":306},[152,23679,23680],{"class":281,"line":386},[152,23681,307],{"emptyLinePlaceholder":306},[152,23683,23684],{"class":281,"line":932},[152,23685,5637],{"class":483},[152,23687,23688,23690,23692],{"class":281,"line":942},[152,23689,7006],{"class":476},[152,23691,7230],{"class":285},[152,23693,3627],{"class":483},[152,23695,23696],{"class":281,"line":949},[152,23697,3217],{"class":483},[152,23699,23700],{"class":281,"line":954},[152,23701,16928],{"class":483},[152,23703,23704],{"class":281,"line":959},[152,23705,23706],{"class":866},"    \u002F\u002F输出类成员变量这块内存\n",[152,23708,23709,23711,23713,23716,23718],{"class":281,"line":970},[152,23710,3222],{"class":483},[152,23712,2848],{"class":476},[152,23714,23715],{"class":483},"p.m_A",[152,23717,2848],{"class":476},[152,23719,2870],{"class":483},[152,23721,23722],{"class":281,"line":979},[152,23723,3236],{"class":483},[152,23725,23726,23728,23730],{"class":281,"line":989},[152,23727,1822],{"class":476},[152,23729,3624],{"class":285},[152,23731,3627],{"class":483},[152,23733,23734],{"class":281,"line":996},[152,23735,3217],{"class":483},[152,23737,23738,23740],{"class":281,"line":1001},[152,23739,7275],{"class":285},[152,23741,3627],{"class":483},[152,23743,23744],{"class":281,"line":1006},[152,23745,3236],{"class":483},[19,23747,23748],{},"此时输出是报错的：无法解析外部命令",[19,23750,23751],{},"解决这一问题：必须用到类内声明，类外初始化操作",[270,23753,23755],{"className":1807,"code":23754,"language":1809,"meta":275,"style":275},"#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",[277,23756,23757,23763,23773,23779,23783,23787,23792,23800,23804,23809,23824,23832,23836,23840,23845,23850,23862,23867,23878,23883,23888,23901,23905,23913,23917,23923],{"__ignoreMap":275},[152,23758,23759,23761],{"class":281,"line":282},[152,23760,3601],{"class":476},[152,23762,3604],{"class":289},[152,23764,23765,23767,23769,23771],{"class":281,"line":303},[152,23766,3609],{"class":476},[152,23768,3612],{"class":476},[152,23770,3615],{"class":285},[152,23772,2965],{"class":483},[152,23774,23775,23777],{"class":281,"line":310},[152,23776,16309],{"class":476},[152,23778,16786],{"class":285},[152,23780,23781],{"class":281,"line":324},[152,23782,3217],{"class":483},[152,23784,23785],{"class":281,"line":329},[152,23786,16331],{"class":476},[152,23788,23789],{"class":281,"line":343},[152,23790,23791],{"class":866},"    \u002F\u002F类内声明\n",[152,23793,23794,23796,23798],{"class":281,"line":348},[152,23795,12636],{"class":476},[152,23797,4033],{"class":476},[152,23799,23007],{"class":483},[152,23801,23802],{"class":281,"line":362},[152,23803,5637],{"class":483},[152,23805,23806],{"class":281,"line":367},[152,23807,23808],{"class":866},"\u002F\u002F类外初始化\n",[152,23810,23811,23813,23815,23818,23820,23822],{"class":281,"line":381},[152,23812,1822],{"class":476},[152,23814,17184],{"class":285},[152,23816,23817],{"class":483},"::m_A",[152,23819,1864],{"class":476},[152,23821,2254],{"class":293},[152,23823,2965],{"class":483},[152,23825,23826,23828,23830],{"class":281,"line":386},[152,23827,7006],{"class":476},[152,23829,7230],{"class":285},[152,23831,3627],{"class":483},[152,23833,23834],{"class":281,"line":932},[152,23835,3217],{"class":483},[152,23837,23838],{"class":281,"line":942},[152,23839,16928],{"class":483},[152,23841,23842],{"class":281,"line":949},[152,23843,23844],{"class":866},"    \u002F\u002F访问变量的原内存空间\n",[152,23846,23847],{"class":281,"line":954},[152,23848,23849],{"class":866},"    \u002F\u002F100\n",[152,23851,23852,23854,23856,23858,23860],{"class":281,"line":959},[152,23853,3222],{"class":483},[152,23855,2848],{"class":476},[152,23857,23715],{"class":483},[152,23859,2848],{"class":476},[152,23861,2870],{"class":483},[152,23863,23864],{"class":281,"line":970},[152,23865,23866],{"class":483},"    Person p2;\n",[152,23868,23869,23872,23874,23876],{"class":281,"line":979},[152,23870,23871],{"class":483},"    p2.m_A",[152,23873,1864],{"class":476},[152,23875,3382],{"class":293},[152,23877,2965],{"class":483},[152,23879,23880],{"class":281,"line":989},[152,23881,23882],{"class":866},"    \u002F\u002F继续访问这片空间\n",[152,23884,23885],{"class":281,"line":996},[152,23886,23887],{"class":866},"    \u002F\u002F200\n",[152,23889,23890,23892,23894,23897,23899],{"class":281,"line":1001},[152,23891,3222],{"class":483},[152,23893,2848],{"class":476},[152,23895,23896],{"class":483},"p2.m_A",[152,23898,2848],{"class":476},[152,23900,2870],{"class":483},[152,23902,23903],{"class":281,"line":1006},[152,23904,3236],{"class":483},[152,23906,23907,23909,23911],{"class":281,"line":1018},[152,23908,1822],{"class":476},[152,23910,3624],{"class":285},[152,23912,3627],{"class":483},[152,23914,23915],{"class":281,"line":1027},[152,23916,3217],{"class":483},[152,23918,23919,23921],{"class":281,"line":1037},[152,23920,7275],{"class":285},[152,23922,7278],{"class":483},[152,23924,23925],{"class":281,"line":1044},[152,23926,3236],{"class":483},[19,23928,23929],{},[694,23930,23931],{},"静态变量的访问",[270,23933,23935],{"className":1807,"code":23934,"language":1809,"meta":275,"style":275},"#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",[277,23936,23937,23943,23953,23959,23963,23967,23971,23979,23983,23988,23996,24000,24004,24018,24033,24041,24045,24050,24055,24060,24065,24077,24082,24087,24101,24118,24122,24130,24134,24140],{"__ignoreMap":275},[152,23938,23939,23941],{"class":281,"line":282},[152,23940,3601],{"class":476},[152,23942,3604],{"class":289},[152,23944,23945,23947,23949,23951],{"class":281,"line":303},[152,23946,3609],{"class":476},[152,23948,3612],{"class":476},[152,23950,3615],{"class":285},[152,23952,2965],{"class":483},[152,23954,23955,23957],{"class":281,"line":310},[152,23956,16309],{"class":476},[152,23958,16786],{"class":285},[152,23960,23961],{"class":281,"line":324},[152,23962,3217],{"class":483},[152,23964,23965],{"class":281,"line":329},[152,23966,16331],{"class":476},[152,23968,23969],{"class":281,"line":343},[152,23970,23791],{"class":866},[152,23972,23973,23975,23977],{"class":281,"line":348},[152,23974,12636],{"class":476},[152,23976,4033],{"class":476},[152,23978,23007],{"class":483},[152,23980,23981],{"class":281,"line":362},[152,23982,16837],{"class":476},[152,23984,23985],{"class":281,"line":367},[152,23986,23987],{"class":866},"    \u002F\u002F静态成员变量也是有访问权限的\n",[152,23989,23990,23992,23994],{"class":281,"line":381},[152,23991,12636],{"class":476},[152,23993,4033],{"class":476},[152,23995,23014],{"class":483},[152,23997,23998],{"class":281,"line":386},[152,23999,5637],{"class":483},[152,24001,24002],{"class":281,"line":932},[152,24003,23808],{"class":866},[152,24005,24006,24008,24010,24012,24014,24016],{"class":281,"line":942},[152,24007,1822],{"class":476},[152,24009,17184],{"class":285},[152,24011,23817],{"class":483},[152,24013,1864],{"class":476},[152,24015,2254],{"class":293},[152,24017,2965],{"class":483},[152,24019,24020,24022,24024,24027,24029,24031],{"class":281,"line":949},[152,24021,1822],{"class":476},[152,24023,17184],{"class":285},[152,24025,24026],{"class":483},"::m_B",[152,24028,1864],{"class":476},[152,24030,2508],{"class":293},[152,24032,2965],{"class":483},[152,24034,24035,24037,24039],{"class":281,"line":954},[152,24036,7006],{"class":476},[152,24038,7299],{"class":285},[152,24040,3627],{"class":483},[152,24042,24043],{"class":281,"line":959},[152,24044,3217],{"class":483},[152,24046,24047],{"class":281,"line":970},[152,24048,24049],{"class":866},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[152,24051,24052],{"class":281,"line":979},[152,24053,24054],{"class":866},"    \u002F\u002F静态成员变量有两种访问方式：\n",[152,24056,24057],{"class":281,"line":989},[152,24058,24059],{"class":866},"    \u002F\u002F1.通过对象进行访问\n",[152,24061,24062],{"class":281,"line":996},[152,24063,24064],{"class":483},"    Person p;  \n",[152,24066,24067,24069,24071,24073,24075],{"class":281,"line":1001},[152,24068,3222],{"class":483},[152,24070,2848],{"class":476},[152,24072,23715],{"class":483},[152,24074,2848],{"class":476},[152,24076,2870],{"class":483},[152,24078,24079],{"class":281,"line":1006},[152,24080,24081],{"class":866},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[152,24083,24084],{"class":281,"line":1018},[152,24085,24086],{"class":866},"    \u002F\u002F2.通过类名进行访问\n",[152,24088,24089,24091,24093,24095,24097,24099],{"class":281,"line":1027},[152,24090,3222],{"class":483},[152,24092,2848],{"class":476},[152,24094,20661],{"class":285},[152,24096,23817],{"class":483},[152,24098,2848],{"class":476},[152,24100,2870],{"class":483},[152,24102,24103,24105,24107,24109,24111,24113,24115],{"class":281,"line":1037},[152,24104,3222],{"class":483},[152,24106,2848],{"class":476},[152,24108,20661],{"class":285},[152,24110,24026],{"class":483},[152,24112,2848],{"class":476},[152,24114,2913],{"class":483},[152,24116,24117],{"class":866}," \u002F\u002F没有访问权限，报错\n",[152,24119,24120],{"class":281,"line":1044},[152,24121,3236],{"class":483},[152,24123,24124,24126,24128],{"class":281,"line":1049},[152,24125,1822],{"class":476},[152,24127,3624],{"class":285},[152,24129,3627],{"class":483},[152,24131,24132],{"class":281,"line":1054},[152,24133,3217],{"class":483},[152,24135,24136,24138],{"class":281,"line":1065},[152,24137,7344],{"class":285},[152,24139,7278],{"class":483},[152,24141,24142],{"class":281,"line":1074},[152,24143,3236],{"class":483},[262,24145,24147],{"id":24146},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24149,24150],{},"1.静态成员函数定义与访问",[270,24152,24154],{"className":1807,"code":24153,"language":1809,"meta":275,"style":275},"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",[277,24155,24156,24162,24166,24170,24175,24186,24190,24204,24208,24212,24220,24224,24229,24234,24238,24246,24251,24261],{"__ignoreMap":275},[152,24157,24158,24160],{"class":281,"line":282},[152,24159,16309],{"class":476},[152,24161,16786],{"class":285},[152,24163,24164],{"class":281,"line":303},[152,24165,3217],{"class":483},[152,24167,24168],{"class":281,"line":310},[152,24169,16331],{"class":476},[152,24171,24172],{"class":281,"line":324},[152,24173,24174],{"class":866},"    \u002F\u002F在公共权限下定义静态成员函数\n",[152,24176,24177,24179,24182,24184],{"class":281,"line":329},[152,24178,12636],{"class":476},[152,24180,24181],{"class":476}," void",[152,24183,13001],{"class":285},[152,24185,3627],{"class":483},[152,24187,24188],{"class":281,"line":343},[152,24189,3681],{"class":483},[152,24191,24192,24195,24197,24200,24202],{"class":281,"line":348},[152,24193,24194],{"class":483},"        coout",[152,24196,2848],{"class":476},[152,24198,24199],{"class":289},"\"静态成员函数的调用\"",[152,24201,2848],{"class":476},[152,24203,2870],{"class":483},[152,24205,24206],{"class":281,"line":362},[152,24207,3838],{"class":483},[152,24209,24210],{"class":281,"line":367},[152,24211,5637],{"class":483},[152,24213,24214,24216,24218],{"class":281,"line":381},[152,24215,7006],{"class":476},[152,24217,7230],{"class":285},[152,24219,3627],{"class":483},[152,24221,24222],{"class":281,"line":386},[152,24223,3217],{"class":483},[152,24225,24226],{"class":281,"line":932},[152,24227,24228],{"class":866},"    \u002F\u002F静态成员函数的调用方式:\n",[152,24230,24231],{"class":281,"line":942},[152,24232,24233],{"class":866},"    \u002F\u002F1.通过对象访问\n",[152,24235,24236],{"class":281,"line":949},[152,24237,16928],{"class":483},[152,24239,24240,24242,24244],{"class":281,"line":954},[152,24241,17481],{"class":483},[152,24243,13167],{"class":285},[152,24245,7278],{"class":483},[152,24247,24248],{"class":281,"line":959},[152,24249,24250],{"class":866},"    \u002F\u002F2.通过类名访问\n",[152,24252,24253,24255,24257,24259],{"class":281,"line":970},[152,24254,20134],{"class":285},[152,24256,19347],{"class":483},[152,24258,13167],{"class":285},[152,24260,7278],{"class":483},[152,24262,24263],{"class":281,"line":979},[152,24264,3236],{"class":483},[416,24266,24267],{"start":303},[419,24268,24269],{},"静态成员函数只能访问静态成员变量",[270,24271,24273],{"className":1807,"code":24272,"language":1809,"meta":275,"style":275},"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",[277,24274,24275,24281,24285,24289,24293,24303,24307,24321,24326,24338,24342,24353,24363,24367,24371,24375,24385,24389,24402,24406,24410,24414,24418,24432,24440,24444,24448,24452,24456,24464,24468,24478,24483,24487,24495,24499,24505],{"__ignoreMap":275},[152,24276,24277,24279],{"class":281,"line":282},[152,24278,16309],{"class":476},[152,24280,16786],{"class":285},[152,24282,24283],{"class":281,"line":303},[152,24284,3217],{"class":483},[152,24286,24287],{"class":281,"line":310},[152,24288,16331],{"class":476},[152,24290,24291],{"class":281,"line":324},[152,24292,24174],{"class":866},[152,24294,24295,24297,24299,24301],{"class":281,"line":329},[152,24296,12636],{"class":476},[152,24298,24181],{"class":476},[152,24300,13001],{"class":285},[152,24302,3627],{"class":483},[152,24304,24305],{"class":281,"line":343},[152,24306,3681],{"class":483},[152,24308,24309,24312,24314,24316,24318],{"class":281,"line":348},[152,24310,24311],{"class":483},"        m_A",[152,24313,1864],{"class":476},[152,24315,2119],{"class":293},[152,24317,1873],{"class":483},[152,24319,24320],{"class":866}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[152,24322,24323],{"class":281,"line":362},[152,24324,24325],{"class":866},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[152,24327,24328,24330,24332,24334,24336],{"class":281,"line":367},[152,24329,24194],{"class":483},[152,24331,2848],{"class":476},[152,24333,24199],{"class":289},[152,24335,2848],{"class":476},[152,24337,2870],{"class":483},[152,24339,24340],{"class":281,"line":381},[152,24341,3838],{"class":483},[152,24343,24344,24346,24348,24350],{"class":281,"line":386},[152,24345,12636],{"class":476},[152,24347,4033],{"class":476},[152,24349,17063],{"class":483},[152,24351,24352],{"class":866}," \u002F\u002F静态成员变量\n",[152,24354,24355,24357,24360],{"class":281,"line":932},[152,24356,3636],{"class":476},[152,24358,24359],{"class":483}," m_B;",[152,24361,24362],{"class":866}," \u002F\u002F非静态成员变量\n",[152,24364,24365],{"class":281,"line":942},[152,24366,307],{"emptyLinePlaceholder":306},[152,24368,24369],{"class":281,"line":949},[152,24370,16837],{"class":476},[152,24372,24373],{"class":281,"line":954},[152,24374,23987],{"class":866},[152,24376,24377,24379,24381,24383],{"class":281,"line":959},[152,24378,12636],{"class":476},[152,24380,24181],{"class":476},[152,24382,15234],{"class":285},[152,24384,3627],{"class":483},[152,24386,24387],{"class":281,"line":970},[152,24388,3681],{"class":483},[152,24390,24391,24393,24395,24398,24400],{"class":281,"line":979},[152,24392,5094],{"class":483},[152,24394,2848],{"class":476},[152,24396,24397],{"class":289},"\"这是私有权限下的静态函数调用\"",[152,24399,2848],{"class":476},[152,24401,2870],{"class":483},[152,24403,24404],{"class":281,"line":989},[152,24405,3838],{"class":483},[152,24407,24408],{"class":281,"line":996},[152,24409,307],{"emptyLinePlaceholder":306},[152,24411,24412],{"class":281,"line":1001},[152,24413,307],{"emptyLinePlaceholder":306},[152,24415,24416],{"class":281,"line":1006},[152,24417,5637],{"class":483},[152,24419,24420,24422,24424,24426,24428,24430],{"class":281,"line":1018},[152,24421,1822],{"class":476},[152,24423,17184],{"class":285},[152,24425,23817],{"class":483},[152,24427,1864],{"class":476},[152,24429,2000],{"class":293},[152,24431,2965],{"class":483},[152,24433,24434,24436,24438],{"class":281,"line":1027},[152,24435,7006],{"class":476},[152,24437,7230],{"class":285},[152,24439,3627],{"class":483},[152,24441,24442],{"class":281,"line":1037},[152,24443,3217],{"class":483},[152,24445,24446],{"class":281,"line":1044},[152,24447,24228],{"class":866},[152,24449,24450],{"class":281,"line":1049},[152,24451,24233],{"class":866},[152,24453,24454],{"class":281,"line":1054},[152,24455,16928],{"class":483},[152,24457,24458,24460,24462],{"class":281,"line":1065},[152,24459,17481],{"class":483},[152,24461,13167],{"class":285},[152,24463,7278],{"class":483},[152,24465,24466],{"class":281,"line":1074},[152,24467,24250],{"class":866},[152,24469,24470,24472,24474,24476],{"class":281,"line":1084},[152,24471,20134],{"class":285},[152,24473,19347],{"class":483},[152,24475,13167],{"class":285},[152,24477,7278],{"class":483},[152,24479,24480],{"class":281,"line":1091},[152,24481,24482],{"class":866},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[152,24484,24485],{"class":281,"line":1096},[152,24486,3236],{"class":483},[152,24488,24489,24491,24493],{"class":281,"line":1101},[152,24490,1822],{"class":476},[152,24492,3624],{"class":285},[152,24494,3627],{"class":483},[152,24496,24497],{"class":281,"line":1112},[152,24498,3217],{"class":483},[152,24500,24501,24503],{"class":281,"line":1121},[152,24502,7275],{"class":285},[152,24504,7278],{"class":483},[152,24506,24507],{"class":281,"line":1131},[152,24508,3236],{"class":483},[14,24510,24512],{"id":24511},"_83c对象模型和this指针","8.3C++对象模型和this指针",[262,24514,24516],{"id":24515},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24518,24519],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24521,24522],{},"只有非静态成员变量才属于类的对象上",[24524,24525,24527],"h5",{"id":24526},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[270,24529,24531],{"className":1807,"code":24530,"language":1809,"meta":275,"style":275},"#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",[277,24532,24533,24540,24550,24556,24560,24564,24568,24576,24580,24584,24607,24611,24619,24623,24629],{"__ignoreMap":275},[152,24534,24535,24537],{"class":281,"line":282},[152,24536,3601],{"class":476},[152,24538,24539],{"class":289},"\u003Ciostraem>\n",[152,24541,24542,24544,24546,24548],{"class":281,"line":303},[152,24543,3609],{"class":476},[152,24545,3612],{"class":476},[152,24547,3615],{"class":285},[152,24549,2965],{"class":483},[152,24551,24552,24554],{"class":281,"line":310},[152,24553,16309],{"class":476},[152,24555,16786],{"class":285},[152,24557,24558],{"class":281,"line":324},[152,24559,3217],{"class":483},[152,24561,24562],{"class":281,"line":329},[152,24563,307],{"emptyLinePlaceholder":306},[152,24565,24566],{"class":281,"line":343},[152,24567,5637],{"class":483},[152,24569,24570,24572,24574],{"class":281,"line":348},[152,24571,7006],{"class":476},[152,24573,7230],{"class":285},[152,24575,3627],{"class":483},[152,24577,24578],{"class":281,"line":362},[152,24579,3217],{"class":483},[152,24581,24582],{"class":281,"line":367},[152,24583,16928],{"class":483},[152,24585,24586,24588,24590,24593,24595,24598,24600,24602,24604],{"class":281,"line":381},[152,24587,3222],{"class":483},[152,24589,2848],{"class":476},[152,24591,24592],{"class":289},"\"size of p=\"",[152,24594,2848],{"class":476},[152,24596,24597],{"class":285},"sizeoif",[152,24599,8181],{"class":483},[152,24601,2848],{"class":476},[152,24603,2913],{"class":483},[152,24605,24606],{"class":866}," \u002F\u002F查看这个空类的占用的内存空间\n",[152,24608,24609],{"class":281,"line":386},[152,24610,3236],{"class":483},[152,24612,24613,24615,24617],{"class":281,"line":932},[152,24614,1822],{"class":476},[152,24616,3624],{"class":285},[152,24618,3627],{"class":483},[152,24620,24621],{"class":281,"line":942},[152,24622,3217],{"class":483},[152,24624,24625,24627],{"class":281,"line":949},[152,24626,7275],{"class":285},[152,24628,7278],{"class":483},[152,24630,24631],{"class":281,"line":954},[152,24632,3236],{"class":483},[19,24634,24635],{},"输出结果为：size of p=1",[19,24637,24638],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24640,24641],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24524,24643,24645],{"id":24644},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[270,24647,24649],{"className":1807,"code":24648,"language":1809,"meta":275,"style":275},"#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",[277,24650,24651,24657,24667,24675,24679,24688,24692,24700,24704,24708,24727,24731,24735,24743,24747,24753],{"__ignoreMap":275},[152,24652,24653,24655],{"class":281,"line":282},[152,24654,3601],{"class":476},[152,24656,3604],{"class":289},[152,24658,24659,24661,24663,24665],{"class":281,"line":303},[152,24660,3609],{"class":476},[152,24662,3612],{"class":476},[152,24664,3615],{"class":285},[152,24666,2965],{"class":483},[152,24668,24669,24671,24673],{"class":281,"line":310},[152,24670,16309],{"class":476},[152,24672,17184],{"class":285},[152,24674,4317],{"class":483},[152,24676,24677],{"class":281,"line":324},[152,24678,3217],{"class":483},[152,24680,24681,24683,24685],{"class":281,"line":329},[152,24682,3636],{"class":476},[152,24684,17063],{"class":483},[152,24686,24687],{"class":866},"\u002F\u002F非静态成员变量\n",[152,24689,24690],{"class":281,"line":343},[152,24691,5637],{"class":483},[152,24693,24694,24696,24698],{"class":281,"line":348},[152,24695,7006],{"class":476},[152,24697,7230],{"class":285},[152,24699,3627],{"class":483},[152,24701,24702],{"class":281,"line":362},[152,24703,3217],{"class":483},[152,24705,24706],{"class":281,"line":367},[152,24707,16928],{"class":483},[152,24709,24710,24712,24714,24716,24718,24720,24722,24724],{"class":281,"line":381},[152,24711,3222],{"class":483},[152,24713,2848],{"class":476},[152,24715,24592],{"class":289},[152,24717,3044],{"class":476},[152,24719,8181],{"class":483},[152,24721,2848],{"class":476},[152,24723,2913],{"class":483},[152,24725,24726],{"class":866}," \u002F\u002F查看不是空对象时占用多少内存\n",[152,24728,24729],{"class":281,"line":386},[152,24730,307],{"emptyLinePlaceholder":306},[152,24732,24733],{"class":281,"line":932},[152,24734,3236],{"class":483},[152,24736,24737,24739,24741],{"class":281,"line":942},[152,24738,1822],{"class":476},[152,24740,3624],{"class":285},[152,24742,3627],{"class":483},[152,24744,24745],{"class":281,"line":949},[152,24746,3217],{"class":483},[152,24748,24749,24751],{"class":281,"line":954},[152,24750,7275],{"class":285},[152,24752,7278],{"class":483},[152,24754,24755],{"class":281,"line":959},[152,24756,3236],{"class":483},[19,24758,24759],{},"输出结果：size of p=4",[19,24761,24762],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[416,24764,24765],{},[419,24766,24767],{},"如果加上非静态成员变量，Person类修改如下",[270,24769,24771],{"className":1807,"code":24770,"language":1809,"meta":275,"style":275},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[277,24772,24773,24779,24783,24789,24797,24801,24806],{"__ignoreMap":275},[152,24774,24775,24777],{"class":281,"line":282},[152,24776,16309],{"class":476},[152,24778,16786],{"class":285},[152,24780,24781],{"class":281,"line":303},[152,24782,3217],{"class":483},[152,24784,24785,24787],{"class":281,"line":310},[152,24786,3636],{"class":476},[152,24788,23007],{"class":483},[152,24790,24791,24793,24795],{"class":281,"line":324},[152,24792,12636],{"class":476},[152,24794,4033],{"class":476},[152,24796,23014],{"class":483},[152,24798,24799],{"class":281,"line":329},[152,24800,5637],{"class":483},[152,24802,24803],{"class":281,"line":343},[152,24804,24805],{"class":866},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[152,24807,24808,24810,24812,24814,24816,24818],{"class":281,"line":348},[152,24809,1822],{"class":476},[152,24811,17184],{"class":285},[152,24813,24026],{"class":483},[152,24815,1864],{"class":476},[152,24817,2000],{"class":293},[152,24819,2965],{"class":483},[19,24821,24822],{},"输出结果：4",[19,24824,24825],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[416,24827,24828],{"start":303},[419,24829,24830],{},"加上非静态成员函数",[270,24832,24834],{"className":1807,"code":24833,"language":1809,"meta":275,"style":275},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[277,24835,24836,24843,24847,24853,24861,24865,24869,24873],{"__ignoreMap":275},[152,24837,24838,24840],{"class":281,"line":282},[152,24839,16309],{"class":476},[152,24841,24842],{"class":285},"  Person\n",[152,24844,24845],{"class":281,"line":303},[152,24846,3217],{"class":483},[152,24848,24849,24851],{"class":281,"line":310},[152,24850,3636],{"class":476},[152,24852,23007],{"class":483},[152,24854,24855,24857,24859],{"class":281,"line":324},[152,24856,16524],{"class":476},[152,24858,13001],{"class":285},[152,24860,3627],{"class":483},[152,24862,24863],{"class":281,"line":329},[152,24864,3681],{"class":483},[152,24866,24867],{"class":281,"line":343},[152,24868,307],{"emptyLinePlaceholder":306},[152,24870,24871],{"class":281,"line":348},[152,24872,3838],{"class":483},[152,24874,24875],{"class":281,"line":362},[152,24876,5637],{"class":483},[19,24878,24879],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[416,24881,24882],{"start":310},[419,24883,24884],{},"加上静态成员函数",[270,24886,24888],{"className":1807,"code":24887,"language":1809,"meta":275,"style":275},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[277,24889,24890,24896,24900,24906,24914,24918,24922,24926,24937,24941,24945,24949],{"__ignoreMap":275},[152,24891,24892,24894],{"class":281,"line":282},[152,24893,16309],{"class":476},[152,24895,24842],{"class":285},[152,24897,24898],{"class":281,"line":303},[152,24899,3217],{"class":483},[152,24901,24902,24904],{"class":281,"line":310},[152,24903,3636],{"class":476},[152,24905,23007],{"class":483},[152,24907,24908,24910,24912],{"class":281,"line":324},[152,24909,16524],{"class":476},[152,24911,13001],{"class":285},[152,24913,3627],{"class":483},[152,24915,24916],{"class":281,"line":329},[152,24917,3681],{"class":483},[152,24919,24920],{"class":281,"line":343},[152,24921,307],{"emptyLinePlaceholder":306},[152,24923,24924],{"class":281,"line":348},[152,24925,3838],{"class":483},[152,24927,24928,24930,24932,24935],{"class":281,"line":362},[152,24929,12636],{"class":476},[152,24931,24181],{"class":476},[152,24933,24934],{"class":285}," func1",[152,24936,3627],{"class":483},[152,24938,24939],{"class":281,"line":367},[152,24940,3681],{"class":483},[152,24942,24943],{"class":281,"line":381},[152,24944,307],{"emptyLinePlaceholder":306},[152,24946,24947],{"class":281,"line":386},[152,24948,3838],{"class":483},[152,24950,24951],{"class":281,"line":932},[152,24952,5637],{"class":483},[19,24954,24822],{},[19,24956,24957],{},"解释：静态成员函数也不属于类上",[1736,24959,9316],{},{"title":275,"searchDepth":303,"depth":303,"links":24961},[24962,24968],{"id":16260,"depth":303,"text":16261,"children":24963},[24964,24965,24966,24967],{"id":16264,"depth":310,"text":16265},{"id":16989,"depth":310,"text":16990},{"id":17161,"depth":310,"text":17162},{"id":17620,"depth":310,"text":17621},{"id":19992,"depth":303,"text":19993,"children":24969},[24970,24971,24972,24973,24974,24975,24976,24977,24978],{"id":20004,"depth":310,"text":20005},{"id":20297,"depth":310,"text":20298},{"id":20788,"depth":310,"text":20789},{"id":21885,"depth":310,"text":21886},{"id":22308,"depth":310,"text":22309},{"id":22787,"depth":310,"text":22788},{"id":23162,"depth":310,"text":23163},{"id":23575,"depth":310,"text":23576},{"id":24511,"depth":310,"text":24512},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16226,"description":24979},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24986,"title":1809,"body":24987,"description":24991,"extension":1744,"meta":24992,"navigation":306,"path":24994,"seo":24995,"stem":24996,"__hash__":24997},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24988,"toc":24989},[],{"title":275,"searchDepth":303,"depth":303,"links":24990},[],null,{"category":24993},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1809,"description":24991},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24999,"title":25000,"body":25001,"description":275,"extension":1744,"meta":25588,"navigation":306,"path":25589,"seo":25590,"stem":25591,"__hash__":25592},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25002,"toc":25570},[25003,25006,25010,25013,25016,25019,25037,25042,25045,25048,25051,25054,25059,25062,25067,25070,25073,25077,25080,25083,25089,25092,25110,25114,25118,25121,25126,25129,25133,25136,25149,25152,25156,25159,25162,25165,25190,25193,25202,25213,25228,25260,25264,25271,25279,25283,25286,25289,25294,25298,25301,25304,25309,25312,25316,25319,25322,25327,25330,25334,25339,25343,25409,25413,25416,25419,25422,25425,25428,25434,25453,25456,25470,25478,25482,25485,25488,25493,25496,25501,25506,25509,25512,25517,25522,25525,25530,25535,25538,25543,25548,25551,25554,25559,25562,25567],[10,25004,25000],{"id":25005},"_1强化学习基本认识",[1760,25007,25009],{"id":25008},"_11什么是强化学习","1.1.什么是强化学习",[19,25011,25012],{},"强化学习有两部分组成：智能体和环境；",[19,25014,25015],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25017,25018],{},"强化学习与监督学习的区别:",[416,25020,25021,25024,25027,25030],{},[419,25022,25023],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[419,25025,25026],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[419,25028,25029],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[419,25031,25032,25033,25036],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[694,25034,25035],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25038,25039],{},[401,25040],{"alt":275,"src":25041},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25043,25044],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25046,25047],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25049,25050],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25052,25053],{},"获取奖励",[19,25055,25056],{},[401,25057],{"alt":275,"src":25058},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25060,25061],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25063,25064],{},[401,25065],{"alt":275,"src":25066},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25068,25069],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25071,25072],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[1760,25074,25076],{"id":25075},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25078,25079],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25081,25082],{},"具身智能中的应用",[19,25084,25085,25088],{},[694,25086,25087],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25090,25091],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25093,25094,25095,25098,25099,25102,25103,25106,25107],{},"机器人是",[694,25096,25097],{},"躯体","，深度学习是",[694,25100,25101],{},"神经元****网络","，VLA是",[694,25104,25105],{},"通用的行为逻辑","，而强化学习是",[694,25108,25109],{},"教练",[1760,25111,25113],{"id":25112},"_13序列决策","1.3.序列决策",[14,25115,25117],{"id":25116},"_131智能体与环境","1.3.1.智能体与环境",[19,25119,25120],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25122,25123],{},[401,25124],{"alt":275,"src":25125},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25127,25128],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[14,25130,25132],{"id":25131},"_132奖励","1.3.2.奖励",[19,25134,25135],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25137,25138,25139,25148],{},"取某个策略的表现如何。强化学习的目的就是",[694,25140,25141,25142,25147],{},"最大化",[694,25143,25144],{},[694,25145,25146],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25150,25151],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[14,25153,25155],{"id":25154},"_133序列决策","1.3.3.序列决策",[19,25157,25158],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25160,25161],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25163,25164],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25166,25167,25171,25172,25174,25175,25177,25178,25180,25181,15411,25184,15411,25187],{},[25168,25169,25170],"em",{},"Ht"," = ",[25168,25173,2404],{},"1*, a",[25168,25176,2026],{},", r",[25168,25179,2026],{},", . . . ,* ",[25168,25182,25183],{},"ot",[25168,25185,25186],{},", at ,",[25168,25188,25189],{},"rt",[19,25191,25192],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25194,25195,25171,25198,3322,25200,2237],{},[25168,25196,25197],{},"st",[25168,25199,1870],{},[25168,25201,25170],{},[19,25203,25204,25205,25208,25209,25212],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[694,25206,25207],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[694,25210,25211],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25214,25215,25216,25219,25220,25223,25224,25227],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[694,25217,25218],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[694,25221,25222],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25168,25225,25226],{},"S, A, T, R, Ω, O, γ",")。",[19,25229,25230,25231,25233,25234,25236,25237,1819,25239,25242,25243,25245,25246,1819,25249,25252,25253,25255,25256,25259],{},"其中 ",[25168,25232,2497],{}," 表示状态空间，为隐变量，",[25168,25235,2041],{}," 为动作空间，",[25168,25238,2522],{},[25168,25240,25241],{},"s ′ |s, a",") 为状态转移概率，",[25168,25244,2472],{}," 为奖励函数，",[25168,25247,25248],{},"Ω",[25168,25250,25251],{},"o|s, a",") 为观测概率，",[25168,25254,2398],{}," 为观测空间，",[25168,25257,25258],{},"γ"," 为折扣因子。",[1760,25261,25263],{"id":25262},"_14动作空间","1.4.动作空间",[19,25265,25266,25267,25270],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[694,25268,25269],{},"动作空间"," ，动作空间分为:",[416,25272,25273,25276],{},[419,25274,25275],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[419,25277,25278],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[1760,25280,25282],{"id":25281},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25284,25285],{},"由策略、价值函数、模型三部分组成",[19,25287,25288],{},"这三者组成马尔可夫决策过程",[19,25290,25291],{},[401,25292],{"alt":275,"src":25293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[14,25295,25297],{"id":25296},"_151策略","1.5.1.策略",[19,25299,25300],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25302,25303],{},"策略可分为两种：",[19,25305,25306],{},[401,25307],{"alt":275,"src":25308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25310,25311],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[14,25313,25315],{"id":25314},"_152价值函数","1.5.2.价值函数",[19,25317,25318],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25320,25321],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25323,25324],{},[401,25325],{"alt":275,"src":25326},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25328,25329],{},"进入某个状态采取的最优动作可以通过Q函数得到",[14,25331,25333],{"id":25332},"_153模型","1.5.3.模型",[19,25335,25336],{},[401,25337],{"alt":275,"src":25338},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[1760,25340,25342],{"id":25341},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[23,25344,25345,25355],{},[26,25346,25347],{},[29,25348,25349,25352],{},[32,25350,25351],{"align":34},"类型",[32,25353,25354],{"align":34},"特点",[43,25356,25357,25367,25377,25387,25399],{},[29,25358,25359,25364],{},[48,25360,25361],{"align":34},[694,25362,25363],{},"基于价值的智能体",[48,25365,25366],{"align":34},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[29,25368,25369,25374],{},[48,25370,25371],{"align":34},[694,25372,25373],{},"基于策略的智能体",[48,25375,25376],{"align":34},"直接学习策略，没有学习价值函数",[29,25378,25379,25384],{},[48,25380,25381],{"align":34},[694,25382,25383],{},"演员-评论员智能体",[48,25385,25386],{"align":34},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[29,25388,25389,25394],{},[48,25390,25391],{"align":34},[694,25392,25393],{},"有模型强化学习智能体",[48,25395,25396],{"align":34},[401,25397],{"alt":275,"src":25398},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[29,25400,25401,25406],{},[48,25402,25403],{"align":34},[694,25404,25405],{},"免模型强化学习智能体",[48,25407,25408],{"align":34},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[1760,25410,25412],{"id":25411},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25414,25415],{},"学习和规划是序列决策的两个基本问题",[19,25417,25418],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25420,25421],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25423,25424],{},"强化学习用到的库：Gym",[19,25426,25427],{},"Gym可以检验强化学习算法的优劣",[19,25429,25430,25433],{},[694,25431,25432],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[270,25435,25437],{"className":272,"code":25436,"language":274,"meta":275,"style":275},"pip install gym==0.25.2\n",[277,25438,25439],{"__ignoreMap":275},[152,25440,25441,25444,25447,25450],{"class":281,"line":282},[152,25442,25443],{"class":285},"pip",[152,25445,25446],{"class":289}," install",[152,25448,25449],{"class":289}," gym==",[152,25451,25452],{"class":293},"0.25.2\n",[19,25454,25455],{},"显示图形界面需要",[270,25457,25459],{"className":272,"code":25458,"language":274,"meta":275,"style":275},"pip install pygame\n",[277,25460,25461],{"__ignoreMap":275},[152,25462,25463,25465,25467],{"class":281,"line":282},[152,25464,25443],{"class":285},[152,25466,25446],{"class":289},[152,25468,25469],{"class":289}," pygame\n",[19,25471,25472,25473],{},"有关Gym库的相关文档介绍：",[69,25474,25477],{"href":25475,"rel":25476},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[245],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[1760,25479,25481],{"id":25480},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25483,25484],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25486,25487],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25489,25490],{},[401,25491],{"alt":275,"src":25492},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25494,25495],{},"折扣率需要自己来设定",[19,25497,25498],{},[401,25499],{"alt":275,"src":25500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[416,25502,25503],{},[419,25504,25505],{},"状态转移函数：",[19,25507,25508],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25510,25511],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25513,25514],{},[401,25515],{"alt":275,"src":25516},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[416,25518,25519],{"start":303},[419,25520,25521],{},"动作价值函数：",[19,25523,25524],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25526,25527],{},[401,25528],{"alt":275,"src":25529},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[416,25531,25532],{"start":310},[419,25533,25534],{},"最优动作价值函数：",[19,25536,25537],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[19,25539,25540],{},[401,25541],{"alt":275,"src":25542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[416,25544,25545],{"start":324},[419,25546,25547],{},"状态价值函数:",[19,25549,25550],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25552,25553],{},"它衡量的是“一个具体动作”的长期价值",[19,25555,25556],{},[401,25557],{"alt":275,"src":25558},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25560,25561],{},"几个价值函数之间的比较：",[19,25563,25564],{},[401,25565],{"alt":275,"src":25566},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1736,25568,25569],{},"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":275,"searchDepth":303,"depth":303,"links":25571},[25572,25573,25574,25579,25580,25585,25586,25587],{"id":25008,"depth":303,"text":25009},{"id":25075,"depth":303,"text":25076},{"id":25112,"depth":303,"text":25113,"children":25575},[25576,25577,25578],{"id":25116,"depth":310,"text":25117},{"id":25131,"depth":310,"text":25132},{"id":25154,"depth":310,"text":25155},{"id":25262,"depth":303,"text":25263},{"id":25281,"depth":303,"text":25282,"children":25581},[25582,25583,25584],{"id":25296,"depth":310,"text":25297},{"id":25314,"depth":310,"text":25315},{"id":25332,"depth":310,"text":25333},{"id":25341,"depth":303,"text":25342},{"id":25411,"depth":303,"text":25412},{"id":25480,"depth":303,"text":25481},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25000,"description":275},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25594,"title":25595,"body":25596,"description":25603,"extension":1744,"meta":25614,"navigation":306,"path":25615,"seo":25616,"stem":25617,"__hash__":25618},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25597,"toc":25612},[25598,25601,25604,25609],[10,25599,25595],{"id":25600},"_2马尔可夫决策过程",[19,25602,25603],{},"这是强化学习的基本框架",[19,25605,25606],{},[401,25607],{"alt":275,"src":25608},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25610,25611],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":275,"searchDepth":303,"depth":303,"links":25613},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25595,"description":25603},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25620,"title":25621,"body":25622,"description":275,"extension":1744,"meta":25738,"navigation":306,"path":25739,"seo":25740,"stem":25741,"__hash__":25742},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25623,"toc":25733},[25624,25627,25631,25634,25639,25644,25647,25652,25655,25660,25663,25667,25672,25675,25680,25685,25690,25693,25697,25702,25705,25710,25715,25720,25725,25728],[10,25625,25621],{"id":25626},"_3动作价值函数",[1760,25628,25630],{"id":25629},"_31dqn","3.1.DQN",[19,25632,25633],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25635,25636],{},[401,25637],{"alt":275,"src":25638},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25640,25641],{},[401,25642],{"alt":275,"src":25643},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25645,25646],{},"DQN算法的描述：",[19,25648,25649],{},[401,25650],{"alt":275,"src":25651},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25653,25654],{},"这里的Dense指的是全连接层",[19,25656,25657],{},[401,25658],{"alt":275,"src":25659},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25661,25662],{},"当前观测的状态为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算法",[1760,25664,25666],{"id":25665},"_32dqn的举例","3.2.DQN的举例",[19,25668,25669],{},[401,25670],{"alt":275,"src":25671},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25673,25674],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25676,25677],{},[401,25678],{"alt":275,"src":25679},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25681,25682],{},[401,25683],{"alt":275,"src":25684},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25686,25687],{},[401,25688],{"alt":275,"src":25689},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25691,25692],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[1760,25694,25696],{"id":25695},"_33td算法","3.3.TD算法",[19,25698,25699],{},[401,25700],{"alt":275,"src":25701},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25703,25704],{},"强化学习TD算法公式的粗略解释：",[19,25706,25707],{},[401,25708],{"alt":275,"src":25709},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25711,25712],{},[401,25713],{"alt":275,"src":25714},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25716,25717],{},[401,25718],{"alt":275,"src":25719},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25721,25722],{},[401,25723],{"alt":275,"src":25724},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25726,25727],{},"TD算法总结：",[19,25729,25730],{},[401,25731],{"alt":275,"src":25732},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":275,"searchDepth":303,"depth":303,"links":25734},[25735,25736,25737],{"id":25629,"depth":303,"text":25630},{"id":25665,"depth":303,"text":25666},{"id":25695,"depth":303,"text":25696},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25621,"description":275},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25744,"title":25745,"body":25746,"description":275,"extension":1744,"meta":25979,"navigation":306,"path":25980,"seo":25981,"stem":25982,"__hash__":25983},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25747,"toc":25975},[25748,25751,25755,25758,25761,25766,25771,25774,25779,25784,25787,25792,25795,25800,25803,25808,25811,25816,25819,25824,25829,25832,25837,25840,25843,25848,25851,25856,25861,25865,25868,25871,25876,25881,25884,25889,25894,25897,25902,25905,25908,25913,25916,25921,25924,25929,25934,25937,25942,25947,25950,25955,25958,25963,25966],[10,25749,25745],{"id":25750},"_4策略学习",[1760,25752,25754],{"id":25753},"_41概念描述","4.1.概念描述",[19,25756,25757],{},"用神经网络（策略网络）近似策略函数",[19,25759,25760],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25762,25763],{},[401,25764],{"alt":275,"src":25765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25767,25768],{},[401,25769],{"alt":275,"src":25770},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25772,25773],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25775,25776],{},[401,25777],{"alt":275,"src":25778},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25780,25781],{},[401,25782],{"alt":275,"src":25783},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25785,25786],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25788,25789],{},[401,25790],{"alt":275,"src":25791},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25793,25794],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25796,25797],{},[401,25798],{"alt":275,"src":25799},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25801,25802],{},"改进theta要用到策略梯度算法",[19,25804,25805],{},[401,25806],{"alt":275,"src":25807},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25809,25810],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25812,25813],{},[401,25814],{"alt":275,"src":25815},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25817,25818],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,25820,25821],{},[401,25822],{"alt":275,"src":25823},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,25825,25826],{},[401,25827],{"alt":275,"src":25828},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,25830,25831],{},"梯度公式总结：",[19,25833,25834],{},[401,25835],{"alt":275,"src":25836},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,25838,25839],{},"两个公式的分别应用场景：",[19,25841,25842],{},"对于离散的动作：",[19,25844,25845],{},[401,25846],{"alt":275,"src":25847},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,25849,25850],{},"对于连续的动作：",[19,25852,25853],{},[401,25854],{"alt":275,"src":25855},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,25857,25858],{},[401,25859],{"alt":275,"src":25860},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[1760,25862,25864],{"id":25863},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,25866,25867],{},"使用蒙特卡洛来近似计算策略梯度",[19,25869,25870],{},"蒙特卡洛法的解释如下：",[19,25872,25873],{},[401,25874],{"alt":275,"src":25875},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,25877,25878],{},[401,25879],{"alt":275,"src":25880},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,25882,25883],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[416,25885,25886],{},[419,25887,25888],{},"方法一：reinforce算法",[19,25890,25891],{},[401,25892],{"alt":275,"src":25893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,25895,25896],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[416,25898,25899],{"start":303},[419,25900,25901],{},"方法二：actor-critic算法",[19,25903,25904],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25906,25907],{},"两个网络的构建：",[19,25909,25910],{},[401,25911],{"alt":275,"src":25912},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25914,25915],{},"actor网路：",[19,25917,25918],{},[401,25919],{"alt":275,"src":25920},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25922,25923],{},"critic网络",[19,25925,25926],{},[401,25927],{"alt":275,"src":25928},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[416,25930,25931],{"start":310},[419,25932,25933],{},"网络的训练",[19,25935,25936],{},"网络描述",[19,25938,25939],{},[401,25940],{"alt":275,"src":25941},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25943,25944],{},[401,25945],{"alt":275,"src":25946},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25948,25949],{},"TD算法更新梯度：",[19,25951,25952],{},[401,25953],{"alt":275,"src":25954},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,25956,25957],{},"策略网络更新梯度：",[19,25959,25960],{},[401,25961],{"alt":275,"src":25962},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,25964,25965],{},"训练整个流程的具体描述：",[19,25967,25968,25971,25972],{},[401,25969],{"alt":275,"src":25970},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[401,25973],{"alt":275,"src":25974},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":275,"searchDepth":303,"depth":303,"links":25976},[25977,25978],{"id":25753,"depth":303,"text":25754},{"id":25863,"depth":303,"text":25864},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25745,"description":275},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25985,"title":25986,"body":25987,"description":25994,"extension":1744,"meta":26044,"navigation":306,"path":26045,"seo":26046,"stem":26047,"__hash__":26048},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25988,"toc":26040},[25989,25992,25995,25999,26002,26007,26011,26014,26019,26022,26027,26032,26035],[10,25990,25986],{"id":25991},"_5alphago算法",[19,25993,25994],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[1760,25996,25998],{"id":25997},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26000,26001],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26003,26004],{},[401,26005],{"alt":275,"src":26006},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[1760,26008,26010],{"id":26009},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26012,26013],{},"采用强化学习的方式训练策略网络",[19,26015,26016],{},[401,26017],{"alt":275,"src":26018},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26020,26021],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26023,26024],{},[401,26025],{"alt":275,"src":26026},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26028,26029],{},[401,26030],{"alt":275,"src":26031},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26033,26034],{},"强化学习训练策略网络的总结：",[19,26036,26037],{},[401,26038],{"alt":275,"src":26039},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":275,"searchDepth":303,"depth":303,"links":26041},[26042,26043],{"id":25997,"depth":303,"text":25998},{"id":26009,"depth":303,"text":26010},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25986,"description":25994},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26050,"title":26051,"body":26052,"description":26059,"extension":1744,"meta":26062,"navigation":306,"path":26063,"seo":26064,"stem":26065,"__hash__":26066},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26053,"toc":26060},[26054,26057],[10,26055,26051],{"id":26056},"_6价值网络",[19,26058,26059],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":275,"searchDepth":303,"depth":303,"links":26061},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26051,"description":26059},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26068,"title":26069,"body":26070,"description":26074,"extension":1744,"meta":26075,"navigation":306,"path":26076,"seo":26077,"stem":26078,"__hash__":26079},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26071,"toc":26072},[],{"title":275,"searchDepth":303,"depth":303,"links":26073},[],"记录自己的强化学习笔记。",{"category":24993},"\u002Fwiki\u002F2025-12-04",{"title":26069,"description":26074},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26081,"title":26082,"body":26083,"description":24991,"extension":1744,"meta":26122,"navigation":306,"path":26123,"seo":26124,"stem":26125,"__hash__":26126},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26084,"toc":26120},[26085,26088,26091,26097,26100,26106,26109,26114,26117],[10,26086,26082],{"id":26087},"_1-项目概览与官方资源",[19,26089,26090],{},"官方文档：",[19,26092,26093],{},[69,26094,26095],{"href":26095,"rel":26096},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[245],[19,26098,26099],{},"官方代码仓库：",[19,26101,26102],{},[69,26103,26104],{"href":26104,"rel":26105},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[245],[19,26107,26108],{},"复现大体流程：",[19,26110,26111],{},[401,26112],{"alt":275,"src":26113},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26115,26116],{},"本教程的目标是打通这条链路：",[19,26118,26119],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":275,"searchDepth":303,"depth":303,"links":26121},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26082,"description":24991},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26128,"title":26129,"body":26130,"description":24991,"extension":1744,"meta":26246,"navigation":306,"path":26247,"seo":26248,"stem":26249,"__hash__":26250},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26131,"toc":26241},[26132,26135,26139,26142,26149,26153,26156,26165,26175,26179,26209,26212,26238],[10,26133,26129],{"id":26134},"_2-环境准备与设备连接",[1760,26136,26138],{"id":26137},"_21-系统与环境","2.1 系统与环境",[19,26140,26141],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26143,26144,26145,26148],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[277,26146,26147],{},"lerobot"," 依赖。",[1760,26150,26152],{"id":26151},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26154,26155],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[270,26157,26159],{"className":272,"code":26158,"language":274,"meta":275,"style":275},"lerobot-find-out\n",[277,26160,26161],{"__ignoreMap":275},[152,26162,26163],{"class":281,"line":282},[152,26164,26158],{"class":285},[19,26166,26167,26168,2021,26171,26174],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[277,26169,26170],{},"\u002Fdev\u002FttyACM0",[277,26172,26173],{},"\u002Fdev\u002FttyACM1","）。",[1760,26176,26178],{"id":26177},"_23-串口授权","2.3 串口授权",[270,26180,26182],{"className":272,"code":26181,"language":274,"meta":275,"style":275},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[277,26183,26184,26198],{"__ignoreMap":275},[152,26185,26186,26189,26192,26195],{"class":281,"line":282},[152,26187,26188],{"class":285},"sudo",[152,26190,26191],{"class":289}," chmod",[152,26193,26194],{"class":293}," 666",[152,26196,26197],{"class":289}," \u002Fdev\u002FttyACM0\n",[152,26199,26200,26202,26204,26206],{"class":281,"line":303},[152,26201,26188],{"class":285},[152,26203,26191],{"class":289},[152,26205,26194],{"class":293},[152,26207,26208],{"class":289}," \u002Fdev\u002FttyACM1\n",[19,26210,26211],{},"说明：",[698,26213,26214,26219,26225,26235],{},[419,26215,26216,26218],{},[277,26217,26188],{},"：以 root 权限执行命令。",[419,26220,26221,26224],{},[277,26222,26223],{},"chmod","：修改设备节点权限。",[419,26226,26227,26230,26231,26234],{},[277,26228,26229],{},"666","：",[277,26232,26233],{},"rw-rw-rw-","，所有用户可读写。",[419,26236,26237],{},"串口号必须替换为你机器上的真实端口。",[1736,26239,26240],{},"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":275,"searchDepth":303,"depth":303,"links":26242},[26243,26244,26245],{"id":26137,"depth":303,"text":26138},{"id":26151,"depth":303,"text":26152},{"id":26177,"depth":303,"text":26178},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26129,"description":24991},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26252,"title":26253,"body":26254,"description":24991,"extension":1744,"meta":26414,"navigation":306,"path":26415,"seo":26416,"stem":26417,"__hash__":26418},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26255,"toc":26410},[26256,26260,26264,26270,26273,26329,26332,26336,26339,26407],[10,26257,26259],{"id":26258},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[1760,26261,26263],{"id":26262},"_31-配置电机-id","3.1 配置电机 ID",[19,26265,26266,26267,26269],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[277,26268,2026],{},"，需要改成机械臂链路里不冲突的编号。",[19,26271,26272],{},"方式一：用 LeRobot 命令逐步写入。",[270,26274,26276],{"className":272,"code":26275,"language":274,"meta":275,"style":275},"# 主臂舵机配置 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",[277,26277,26278,26283,26290,26297,26302,26306,26311,26317,26324],{"__ignoreMap":275},[152,26279,26280],{"class":281,"line":282},[152,26281,26282],{"class":866},"# 主臂舵机配置 ID\n",[152,26284,26285,26288],{"class":281,"line":303},[152,26286,26287],{"class":285},"lerobot-setup-motors",[152,26289,878],{"class":293},[152,26291,26292,26295],{"class":281,"line":310},[152,26293,26294],{"class":293},"  --teleop.type=so101_leader",[152,26296,878],{"class":293},[152,26298,26299],{"class":281,"line":324},[152,26300,26301],{"class":293},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[152,26303,26304],{"class":281,"line":329},[152,26305,307],{"emptyLinePlaceholder":306},[152,26307,26308],{"class":281,"line":343},[152,26309,26310],{"class":866},"# 从臂舵机配置 ID\n",[152,26312,26313,26315],{"class":281,"line":348},[152,26314,26287],{"class":285},[152,26316,878],{"class":293},[152,26318,26319,26322],{"class":281,"line":362},[152,26320,26321],{"class":293},"  --robot.type=so101_follower",[152,26323,878],{"class":293},[152,26325,26326],{"class":281,"line":367},[152,26327,26328],{"class":293},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26330,26331],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[1760,26333,26335],{"id":26334},"_32-机械臂校准","3.2 机械臂校准",[19,26337,26338],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[270,26340,26342],{"className":272,"code":26341,"language":274,"meta":275,"style":275},"# 主臂校准\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",[277,26343,26344,26349,26356,26362,26369,26374,26378,26383,26389,26395,26402],{"__ignoreMap":275},[152,26345,26346],{"class":281,"line":282},[152,26347,26348],{"class":866},"# 主臂校准\n",[152,26350,26351,26354],{"class":281,"line":303},[152,26352,26353],{"class":285},"lerobot-calibrate",[152,26355,878],{"class":293},[152,26357,26358,26360],{"class":281,"line":310},[152,26359,26294],{"class":293},[152,26361,878],{"class":293},[152,26363,26364,26367],{"class":281,"line":324},[152,26365,26366],{"class":293},"  --teleop.port=\u002Fdev\u002FttyACM0",[152,26368,878],{"class":293},[152,26370,26371],{"class":281,"line":329},[152,26372,26373],{"class":293},"  --teleop.id=my_awesome_leader_arm\n",[152,26375,26376],{"class":281,"line":343},[152,26377,307],{"emptyLinePlaceholder":306},[152,26379,26380],{"class":281,"line":348},[152,26381,26382],{"class":866},"# 从臂校准\n",[152,26384,26385,26387],{"class":281,"line":362},[152,26386,26353],{"class":285},[152,26388,878],{"class":293},[152,26390,26391,26393],{"class":281,"line":367},[152,26392,26321],{"class":293},[152,26394,878],{"class":293},[152,26396,26397,26400],{"class":281,"line":381},[152,26398,26399],{"class":293},"  --robot.port=\u002Fdev\u002FttyACM1",[152,26401,878],{"class":293},[152,26403,26404],{"class":281,"line":386},[152,26405,26406],{"class":293},"  --robot.id=my_awesome_follower_arm\n",[1736,26408,26409],{},"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":275,"searchDepth":303,"depth":303,"links":26411},[26412,26413],{"id":26262,"depth":303,"text":26263},{"id":26334,"depth":303,"text":26335},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26253,"description":24991},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26420,"title":26421,"body":26422,"description":24991,"extension":1744,"meta":26613,"navigation":306,"path":26614,"seo":26615,"stem":26616,"__hash__":26617},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26423,"toc":26609},[26424,26427,26431,26478,26482,26495,26558,26561,26606],[10,26425,26421],{"id":26426},"_4-遥操与相机接入",[1760,26428,26430],{"id":26429},"_41-不带相机遥操","4.1 不带相机遥操",[270,26432,26434],{"className":272,"code":26433,"language":274,"meta":275,"style":275},"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",[277,26435,26436,26443,26449,26455,26462,26468,26474],{"__ignoreMap":275},[152,26437,26438,26441],{"class":281,"line":282},[152,26439,26440],{"class":285},"lerobot-teleoperate",[152,26442,878],{"class":293},[152,26444,26445,26447],{"class":281,"line":303},[152,26446,26321],{"class":293},[152,26448,878],{"class":293},[152,26450,26451,26453],{"class":281,"line":310},[152,26452,26399],{"class":293},[152,26454,878],{"class":293},[152,26456,26457,26460],{"class":281,"line":324},[152,26458,26459],{"class":293},"  --robot.id=my_awesome_follower_arm",[152,26461,878],{"class":293},[152,26463,26464,26466],{"class":281,"line":329},[152,26465,26294],{"class":293},[152,26467,878],{"class":293},[152,26469,26470,26472],{"class":281,"line":343},[152,26471,26366],{"class":293},[152,26473,878],{"class":293},[152,26475,26476],{"class":281,"line":348},[152,26477,26373],{"class":293},[1760,26479,26481],{"id":26480},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[270,26483,26485],{"className":272,"code":26484,"language":274,"meta":275,"style":275},"lerobot-find-cameras opencv\n",[277,26486,26487],{"__ignoreMap":275},[152,26488,26489,26492],{"class":281,"line":282},[152,26490,26491],{"class":285},"lerobot-find-cameras",[152,26493,26494],{"class":289}," opencv\n",[270,26496,26498],{"className":272,"code":26497,"language":274,"meta":275,"style":275},"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",[277,26499,26500,26506,26512,26518,26524,26534,26540,26546,26553],{"__ignoreMap":275},[152,26501,26502,26504],{"class":281,"line":282},[152,26503,26440],{"class":285},[152,26505,878],{"class":293},[152,26507,26508,26510],{"class":281,"line":303},[152,26509,26321],{"class":293},[152,26511,878],{"class":293},[152,26513,26514,26516],{"class":281,"line":310},[152,26515,26399],{"class":293},[152,26517,878],{"class":293},[152,26519,26520,26522],{"class":281,"line":324},[152,26521,26459],{"class":293},[152,26523,878],{"class":293},[152,26525,26526,26529,26532],{"class":281,"line":329},[152,26527,26528],{"class":293},"  --robot.cameras=",[152,26530,26531],{"class":289},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[152,26533,878],{"class":293},[152,26535,26536,26538],{"class":281,"line":343},[152,26537,26294],{"class":293},[152,26539,878],{"class":293},[152,26541,26542,26544],{"class":281,"line":348},[152,26543,26366],{"class":293},[152,26545,878],{"class":293},[152,26547,26548,26551],{"class":281,"line":362},[152,26549,26550],{"class":293},"  --teleop.id=my_awesome_leader_arm",[152,26552,878],{"class":293},[152,26554,26555],{"class":281,"line":367},[152,26556,26557],{"class":293},"  --display_data=true\n",[19,26559,26560],{},"相机参数说明：",[698,26562,26563,26569,26575,26584,26594,26600],{},[419,26564,26565,26568],{},[277,26566,26567],{},"front","：相机名称。",[419,26570,26571,26574],{},[277,26572,26573],{},"type: opencv","：相机驱动类型。",[419,26576,26577,26580,26581,26174],{},[277,26578,26579],{},"index_or_path","：设备编号或设备路径（如 ",[277,26582,26583],{},"\u002Fdev\u002Fvideo4",[419,26585,26586,26589,26590,26593],{},[277,26587,26588],{},"width"," \u002F ",[277,26591,26592],{},"height","：图像分辨率。",[419,26595,26596,26599],{},[277,26597,26598],{},"fps","：采样帧率。",[419,26601,26602,26605],{},[277,26603,26604],{},"--display_data=true","：启用实时可视化。",[1736,26607,26608],{},"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":275,"searchDepth":303,"depth":303,"links":26610},[26611,26612],{"id":26429,"depth":303,"text":26430},{"id":26480,"depth":303,"text":26481},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26421,"description":24991},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26619,"title":26620,"body":26621,"description":24991,"extension":1744,"meta":26793,"navigation":306,"path":26794,"seo":26795,"stem":26796,"__hash__":26797},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26622,"toc":26788},[26623,26627,26631,26636,26641,26644,26686,26692,26696,26745,26750,26754,26757,26765,26770,26775,26780,26785],[10,26624,26626],{"id":26625},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[1760,26628,26630],{"id":26629},"_51-生成访问令牌","5.1 生成访问令牌",[19,26632,26633],{},[401,26634],{"alt":275,"src":26635},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26637,26638],{},[401,26639],{"alt":275,"src":26640},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26642,26643],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[270,26645,26647],{"className":272,"code":26646,"language":274,"meta":275,"style":275},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[277,26648,26649,26662],{"__ignoreMap":275},[152,26650,26651,26654,26657,26659],{"class":281,"line":282},[152,26652,26653],{"class":476},"export",[152,26655,26656],{"class":483}," HF_TOKEN",[152,26658,1864],{"class":476},[152,26660,26661],{"class":289},"\"your_huggingface_token\"\n",[152,26663,26664,26667,26670,26673,26676,26678,26681,26683],{"class":281,"line":303},[152,26665,26666],{"class":285},"hf",[152,26668,26669],{"class":289}," auth",[152,26671,26672],{"class":289}," login",[152,26674,26675],{"class":293}," --token",[152,26677,11355],{"class":289},[152,26679,26680],{"class":483},"$HF_TOKEN",[152,26682,2059],{"class":289},[152,26684,26685],{"class":293}," --add-to-git-credential\n",[19,26687,26688,26691],{},[277,26689,26690],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[1760,26693,26695],{"id":26694},"_52-验证登录","5.2 验证登录",[270,26697,26699],{"className":272,"code":26698,"language":274,"meta":275,"style":275},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[277,26700,26701,26732],{"__ignoreMap":275},[152,26702,26703,26706,26708,26711,26713,26715,26718,26721,26724,26727,26730],{"class":281,"line":282},[152,26704,26705],{"class":483},"HF_USER",[152,26707,1864],{"class":476},[152,26709,26710],{"class":483},"$(",[152,26712,26666],{"class":285},[152,26714,26669],{"class":289},[152,26716,26717],{"class":289}," whoami",[152,26719,26720],{"class":476}," |",[152,26722,26723],{"class":285}," head",[152,26725,26726],{"class":293}," -n",[152,26728,26729],{"class":293}," 1",[152,26731,1825],{"class":483},[152,26733,26734,26737,26739,26742],{"class":281,"line":303},[152,26735,26736],{"class":293},"echo",[152,26738,11355],{"class":289},[152,26740,26741],{"class":483},"$HF_USER",[152,26743,26744],{"class":289},"\"\n",[19,26746,26747],{},[401,26748],{"alt":275,"src":26749},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[1760,26751,26753],{"id":26752},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26755,26756],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[698,26758,26759,26762],{},[419,26760,26761],{},"Dataset Repo（用于上传演示数据）",[419,26763,26764],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26766,26767],{},[401,26768],{"alt":275,"src":26769},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26771,26772],{},[401,26773],{"alt":275,"src":26774},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26776,26777],{},[401,26778],{"alt":275,"src":26779},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26781,26782],{},[401,26783],{"alt":275,"src":26784},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1736,26786,26787],{},"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":275,"searchDepth":303,"depth":303,"links":26789},[26790,26791,26792],{"id":26629,"depth":303,"text":26630},{"id":26694,"depth":303,"text":26695},{"id":26752,"depth":303,"text":26753},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26620,"description":24991},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26799,"title":26800,"body":26801,"description":24991,"extension":1744,"meta":26998,"navigation":306,"path":26999,"seo":27000,"stem":27001,"__hash__":27002},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26802,"toc":26993},[26803,26807,26811,26907,26915,26920,26924,26940,26943,26947,26990],[10,26804,26806],{"id":26805},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[1760,26808,26810],{"id":26809},"_61-录制示教数据","6.1 录制示教数据",[270,26812,26814],{"className":272,"code":26813,"language":274,"meta":275,"style":275},"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",[277,26815,26816,26823,26829,26835,26841,26850,26856,26862,26868,26875,26885,26892,26902],{"__ignoreMap":275},[152,26817,26818,26821],{"class":281,"line":282},[152,26819,26820],{"class":285},"lerobot-record",[152,26822,878],{"class":293},[152,26824,26825,26827],{"class":281,"line":303},[152,26826,26321],{"class":293},[152,26828,878],{"class":293},[152,26830,26831,26833],{"class":281,"line":310},[152,26832,26399],{"class":293},[152,26834,878],{"class":293},[152,26836,26837,26839],{"class":281,"line":324},[152,26838,26459],{"class":293},[152,26840,878],{"class":293},[152,26842,26843,26845,26848],{"class":281,"line":329},[152,26844,26528],{"class":293},[152,26846,26847],{"class":289},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[152,26849,878],{"class":293},[152,26851,26852,26854],{"class":281,"line":343},[152,26853,26294],{"class":293},[152,26855,878],{"class":293},[152,26857,26858,26860],{"class":281,"line":348},[152,26859,26366],{"class":293},[152,26861,878],{"class":293},[152,26863,26864,26866],{"class":281,"line":362},[152,26865,26550],{"class":293},[152,26867,878],{"class":293},[152,26869,26870,26873],{"class":281,"line":367},[152,26871,26872],{"class":293},"  --display_data=true",[152,26874,878],{"class":293},[152,26876,26877,26880,26883],{"class":281,"line":381},[152,26878,26879],{"class":293},"  --dataset.repo_id=",[152,26881,26882],{"class":289},"\"Embodied-AI-6\u002Fso101_test\"",[152,26884,878],{"class":293},[152,26886,26887,26890],{"class":281,"line":386},[152,26888,26889],{"class":293},"  --dataset.num_episodes=10",[152,26891,878],{"class":293},[152,26893,26894,26897,26900],{"class":281,"line":932},[152,26895,26896],{"class":293},"  --dataset.single_task=",[152,26898,26899],{"class":289},"\"Grab the green cube\"",[152,26901,878],{"class":293},[152,26903,26904],{"class":281,"line":942},[152,26905,26906],{"class":293},"  --resume=true\n",[698,26908,26909],{},[419,26910,26911,26914],{},[277,26912,26913],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26916,26917],{},[401,26918],{"alt":275,"src":26919},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[1760,26921,26923],{"id":26922},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[270,26925,26927],{"className":272,"code":26926,"language":274,"meta":275,"style":275},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[277,26928,26929],{"__ignoreMap":275},[152,26930,26931,26934,26937],{"class":281,"line":282},[152,26932,26933],{"class":285},"rm",[152,26935,26936],{"class":293}," -rf",[152,26938,26939],{"class":289}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26941,26942],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[1760,26944,26946],{"id":26945},"_63-回放指定-episode","6.3 回放指定 episode",[270,26948,26950],{"className":272,"code":26949,"language":274,"meta":275,"style":275},"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",[277,26951,26952,26959,26965,26971,26977,26985],{"__ignoreMap":275},[152,26953,26954,26957],{"class":281,"line":282},[152,26955,26956],{"class":285},"lerobot-replay",[152,26958,878],{"class":293},[152,26960,26961,26963],{"class":281,"line":303},[152,26962,26321],{"class":293},[152,26964,878],{"class":293},[152,26966,26967,26969],{"class":281,"line":310},[152,26968,26399],{"class":293},[152,26970,878],{"class":293},[152,26972,26973,26975],{"class":281,"line":324},[152,26974,26459],{"class":293},[152,26976,878],{"class":293},[152,26978,26979,26981,26983],{"class":281,"line":329},[152,26980,26879],{"class":293},[152,26982,26882],{"class":289},[152,26984,878],{"class":293},[152,26986,26987],{"class":281,"line":343},[152,26988,26989],{"class":293},"  --dataset.episode=0\n",[1736,26991,26992],{},"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":275,"searchDepth":303,"depth":303,"links":26994},[26995,26996,26997],{"id":26809,"depth":303,"text":26810},{"id":26922,"depth":303,"text":26923},{"id":26945,"depth":303,"text":26946},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26800,"description":24991},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27004,"title":27005,"body":27006,"description":24991,"extension":1744,"meta":27134,"navigation":306,"path":27135,"seo":27136,"stem":27137,"__hash__":27138},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27007,"toc":27132},[27008,27012,27075,27078,27125,27130],[10,27009,27011],{"id":27010},"_7-act-模型训练","7. ACT 模型训练",[270,27013,27015],{"className":272,"code":27014,"language":274,"meta":275,"style":275},"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",[277,27016,27017,27024,27032,27039,27046,27053,27060,27067],{"__ignoreMap":275},[152,27018,27019,27022],{"class":281,"line":282},[152,27020,27021],{"class":285},"lerobot-train",[152,27023,878],{"class":293},[152,27025,27026,27028,27030],{"class":281,"line":303},[152,27027,26879],{"class":293},[152,27029,26882],{"class":289},[152,27031,878],{"class":293},[152,27033,27034,27037],{"class":281,"line":310},[152,27035,27036],{"class":293},"  --policy.type=act",[152,27038,878],{"class":293},[152,27040,27041,27044],{"class":281,"line":324},[152,27042,27043],{"class":293},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[152,27045,878],{"class":293},[152,27047,27048,27051],{"class":281,"line":329},[152,27049,27050],{"class":293},"  --job_name=act_so101_test",[152,27052,878],{"class":293},[152,27054,27055,27058],{"class":281,"line":343},[152,27056,27057],{"class":293},"  --policy.device=cuda",[152,27059,878],{"class":293},[152,27061,27062,27065],{"class":281,"line":348},[152,27063,27064],{"class":293},"  --wandb.enable=false",[152,27066,878],{"class":293},[152,27068,27069,27072],{"class":281,"line":362},[152,27070,27071],{"class":293},"  --policy.repo_id=",[152,27073,27074],{"class":289},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27076,27077],{},"参数说明：",[698,27079,27080,27086,27092,27098,27104,27113,27119],{},[419,27081,27082,27085],{},[277,27083,27084],{},"--dataset.repo_id","：训练数据集仓库。",[419,27087,27088,27091],{},[277,27089,27090],{},"--policy.type=act","：策略模型类型为 ACT。",[419,27093,27094,27097],{},[277,27095,27096],{},"--output_dir","：本地训练输出目录。",[419,27099,27100,27103],{},[277,27101,27102],{},"--job_name","：训练任务名称。",[419,27105,27106,27109,27110,26174],{},[277,27107,27108],{},"--policy.device","：训练设备（如 ",[277,27111,27112],{},"cuda",[419,27114,27115,27118],{},[277,27116,27117],{},"--wandb.enable","：是否启用 WandB 可视化。",[419,27120,27121,27124],{},[277,27122,27123],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27126,27127],{},[401,27128],{"alt":275,"src":27129},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1736,27131,26992],{},{"title":275,"searchDepth":303,"depth":303,"links":27133},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27005,"description":24991},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27140,"title":27141,"body":27142,"description":24991,"extension":1744,"meta":27229,"navigation":306,"path":27230,"seo":27231,"stem":27232,"__hash__":27233},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27143,"toc":27227},[27144,27147,27150,27217,27225],[10,27145,27141],{"id":27146},"_8-策略部署与自动采集",[19,27148,27149],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[270,27151,27153],{"className":272,"code":27152,"language":274,"meta":275,"style":275},"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",[277,27154,27155,27161,27167,27173,27181,27187,27194,27202,27210],{"__ignoreMap":275},[152,27156,27157,27159],{"class":281,"line":282},[152,27158,26820],{"class":285},[152,27160,878],{"class":293},[152,27162,27163,27165],{"class":281,"line":303},[152,27164,26321],{"class":293},[152,27166,878],{"class":293},[152,27168,27169,27171],{"class":281,"line":310},[152,27170,26399],{"class":293},[152,27172,878],{"class":293},[152,27174,27175,27177,27179],{"class":281,"line":324},[152,27176,26528],{"class":293},[152,27178,26847],{"class":289},[152,27180,878],{"class":293},[152,27182,27183,27185],{"class":281,"line":329},[152,27184,26459],{"class":293},[152,27186,878],{"class":293},[152,27188,27189,27192],{"class":281,"line":343},[152,27190,27191],{"class":293},"  --display_data=false",[152,27193,878],{"class":293},[152,27195,27196,27198,27200],{"class":281,"line":348},[152,27197,26879],{"class":293},[152,27199,26882],{"class":289},[152,27201,878],{"class":293},[152,27203,27204,27206,27208],{"class":281,"line":362},[152,27205,26896],{"class":293},[152,27207,26899],{"class":289},[152,27209,878],{"class":293},[152,27211,27212,27215],{"class":281,"line":367},[152,27213,27214],{"class":293},"  --policy.path=",[152,27216,27074],{"class":289},[698,27218,27219],{},[419,27220,27221,27224],{},[277,27222,27223],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1736,27226,26992],{},{"title":275,"searchDepth":303,"depth":303,"links":27228},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27141,"description":24991},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27235,"title":27236,"body":27237,"description":24991,"extension":1744,"meta":27266,"navigation":306,"path":27267,"seo":27268,"stem":27269,"__hash__":27270},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27238,"toc":27264},[27239,27243,27246,27252,27255,27261],[10,27240,27242],{"id":27241},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27244,27245],{},"项目地址：",[19,27247,27248],{},[69,27249,27250],{"href":27250,"rel":27251},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[245],[19,27253,27254],{},"参考教程：",[19,27256,27257],{},[69,27258,27259],{"href":27259,"rel":27260},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[245],[19,27262,27263],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":275,"searchDepth":303,"depth":303,"links":27265},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27236,"description":24991},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27272,"title":27273,"body":27274,"description":27278,"extension":1744,"meta":27279,"navigation":306,"path":27280,"seo":27281,"stem":27282,"__hash__":27283},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27275,"toc":27276},[],{"title":275,"searchDepth":303,"depth":303,"links":27277},[],"act复现",{"category":24993},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27273,"description":27278},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27285,"title":27286,"body":27287,"description":275,"extension":1744,"meta":27588,"navigation":306,"path":27589,"seo":27590,"stem":27591,"__hash__":27592},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27288,"toc":27580},[27289,27292,27296,27306,27313,27320,27323,27330,27333,27336,27340,27352,27356,27402,27405,27408,27411,27414,27417,27421,27459,27465,27469,27522,27527,27530,27533,27538,27541,27546,27549,27552,27556,27559,27562,27566],[10,27290,27286],{"id":27291},"_1简介",[14,27293,27295],{"id":27294},"_11什么是-docker","1.1什么是 Docker？",[19,27297,27298,27299,27302,27303],{},"Docker 是一个开源的 ",[694,27300,27301],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[694,27304,27305],{},"一次构建，到处运行。",[19,27307,27308,27309,27312],{},"“ ",[694,27310,27311],{},"一次构建，到处运行"," ”也就是说：",[416,27314,27315],{},[419,27316,27317],{},[694,27318,27319],{},"之前：",[19,27321,27322],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[416,27324,27325],{},[419,27326,27327],{},[694,27328,27329],{},"使用docker后：",[19,27331,27332],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27334,27335],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[14,27337,27339],{"id":27338},"_12它是怎么工作的","1.2.它是怎么工作的？",[698,27341,27342,27345],{},[419,27343,27344],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[419,27346,27347,27348,27351],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[694,27349,27350],{},"无论在哪运行都一样稳定"," 。",[14,27353,27355],{"id":27354},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[23,27357,27358,27368],{},[26,27359,27360],{},[29,27361,27362,27365],{},[32,27363,27364],{"align":34},"概念",[32,27366,27367],{"align":34},"解释",[43,27369,27370,27378,27386,27394],{},[29,27371,27372,27375],{},[48,27373,27374],{"align":34},"镜像",[48,27376,27377],{"align":34},"Image，运行容器的模板，像是一个应用快照",[29,27379,27380,27383],{},[48,27381,27382],{"align":34},"容器",[48,27384,27385],{"align":34},"Container，运行中的镜像实例，有自己的文件系统、网络等",[29,27387,27388,27391],{},[48,27389,27390],{"align":34},"Dockerfile",[48,27392,27393],{"align":34},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[29,27395,27396,27399],{},[48,27397,27398],{"align":34},"仓库",[48,27400,27401],{"align":34},"Registry，存放镜像的地方，比如 Docker Hub",[19,27403,27404],{},"抽象化理解:",[19,27406,27407],{},"Docker镜像≈C++类",[19,27409,27410],{},"Docker容器≈C++类实例(即对象)",[19,27412,27413],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27415,27416],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[14,27418,27420],{"id":27419},"_14类比理解","1.4.类比理解",[23,27422,27423,27433],{},[26,27424,27425],{},[29,27426,27427,27430],{},[32,27428,27429],{"align":34},"传统部署",[32,27431,27432],{"align":34},"Docker部署",[43,27434,27435,27443,27451],{},[29,27436,27437,27440],{},[48,27438,27439],{"align":34},"手动安装依赖、调试版本不一致问题",[48,27441,27442],{"align":34},"一次打包环境和代码",[29,27444,27445,27448],{},[48,27446,27447],{"align":34},"程序“裸奔”跑在系统上",[48,27449,27450],{"align":34},"程序“穿着容器”隔离运行",[29,27452,27453,27456],{},[48,27454,27455],{"align":34},"容易“在我电脑上能跑”",[48,27457,27458],{"align":34},"保证“无论在哪都能跑”",[19,27460,27461,27462],{},"就像快递包裹： ",[694,27463,27464],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[14,27466,27468],{"id":27467},"_15docker-的核心优势","1.5.Docker 的核心优势",[23,27470,27471,27480],{},[26,27472,27473],{},[29,27474,27475,27478],{},[32,27476,27477],{"align":34},"优势",[32,27479,38],{"align":34},[43,27481,27482,27490,27498,27506,27514],{},[29,27483,27484,27487],{},[48,27485,27486],{"align":34},"轻量级",[48,27488,27489],{"align":34},"基于系统内核共享，启动速度快，占资源少",[29,27491,27492,27495],{},[48,27493,27494],{"align":34},"跨平台",[48,27496,27497],{"align":34},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[29,27499,27500,27503],{},[48,27501,27502],{"align":34},"易于迁移部署",[48,27504,27505],{"align":34},"应用和环境一起封装，不怕依赖不一致",[29,27507,27508,27511],{},[48,27509,27510],{"align":34},"易于版本控制",[48,27512,27513],{"align":34},"镜像版本可控，支持回滚",[29,27515,27516,27519],{},[48,27517,27518],{"align":34},"生态丰富",[48,27520,27521],{"align":34},"Docker Hub 上有成千上万的现成镜像可用",[416,27523,27524],{},[419,27525,27526],{},"在Linux上可以几乎实现无性能损失。",[19,27528,27529],{},"docker里的发行版和本机共用Linux内核。",[19,27531,27532],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[416,27534,27535],{},[419,27536,27537],{},"可以快速部署在绝大多数Linux发行版",[19,27539,27540],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[416,27542,27543],{},[419,27544,27545],{},"配置环境简单",[19,27547,27548],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27550,27551],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[416,27553,27554],{},[419,27555,27518],{},[19,27557,27558],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27560,27561],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[14,27563,27565],{"id":27564},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[698,27567,27568,27571,27574,27577],{},[419,27569,27570],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[419,27572,27573],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[419,27575,27576],{},"微服务架构：每个服务一个容器，灵活组合",[419,27578,27579],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":275,"searchDepth":303,"depth":303,"links":27581},[27582,27583,27584,27585,27586,27587],{"id":27294,"depth":310,"text":27295},{"id":27338,"depth":310,"text":27339},{"id":27354,"depth":310,"text":27355},{"id":27419,"depth":310,"text":27420},{"id":27467,"depth":310,"text":27468},{"id":27564,"depth":310,"text":27565},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27286,"description":275},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27594,"title":27595,"body":27596,"description":275,"extension":1744,"meta":28323,"navigation":306,"path":28324,"seo":28325,"stem":28326,"__hash__":28327},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27597,"toc":28318},[27598,27601,27605,27608,27611,27617,27623,27627,27636,27639,27696,27699,27748,27751,27832,27835,27872,27876,27887,27900,27907,27910,27989,27992,28042,28045,28068,28072,28079,28082,28098,28104,28107,28123,28129,28132,28148,28161,28167,28187,28193,28196,28208,28214,28217,28231,28237,28240,28260,28265,28268,28271,28275,28278,28281,28284,28291,28294,28297,28300,28305,28310,28315],[10,27599,27595],{"id":27600},"_2安装docker",[14,27602,27604],{"id":27603},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27606,27607],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27609,27610],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27612,27613],{},[69,27614,27615],{"href":27615,"rel":27616},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[245],[19,27618,27619],{},[69,27620,27621],{"href":27621,"rel":27622},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[245],[262,27624,27626],{"id":27625},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27628,27629,27630,27635],{},"以下内容根据 ",[69,27631,27634],{"href":27632,"rel":27633},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[245],"官方文档"," 修改而来。",[19,27637,27638],{},"如果你过去安装过 docker，先删掉：",[270,27640,27642],{"className":272,"code":27641,"language":274,"meta":275,"style":275},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[277,27643,27644],{"__ignoreMap":275},[152,27645,27646,27648,27651,27654,27657,27660,27663,27666,27669,27672,27675,27678,27681,27684,27687,27690,27693],{"class":281,"line":282},[152,27647,4668],{"class":476},[152,27649,27650],{"class":483}," pkg ",[152,27652,27653],{"class":476},"in",[152,27655,27656],{"class":289}," docker.io",[152,27658,27659],{"class":289}," docker-doc",[152,27661,27662],{"class":289}," docker-compose",[152,27664,27665],{"class":289}," docker-compose-v2",[152,27667,27668],{"class":289}," podman-docker",[152,27670,27671],{"class":289}," containerd",[152,27673,27674],{"class":289}," runc",[152,27676,27677],{"class":483},"; ",[152,27679,27680],{"class":476},"do",[152,27682,27683],{"class":285}," sudo",[152,27685,27686],{"class":289}," apt-get",[152,27688,27689],{"class":289}," remove",[152,27691,27692],{"class":483}," $pkg; ",[152,27694,27695],{"class":476},"done\n",[19,27697,27698],{},"首先安装依赖和GPG：",[270,27700,27702],{"className":1508,"code":27701,"language":1510,"meta":275,"style":275},"# 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",[277,27703,27704,27709,27714,27719,27724,27729,27734,27738,27743],{"__ignoreMap":275},[152,27705,27706],{"class":281,"line":282},[152,27707,27708],{},"# Add Docker's official GPG key:\n",[152,27710,27711],{"class":281,"line":303},[152,27712,27713],{},"sudo apt-get update\n",[152,27715,27716],{"class":281,"line":310},[152,27717,27718],{},"sudo apt-get install ca-certificates curl\n",[152,27720,27721],{"class":281,"line":324},[152,27722,27723],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[152,27725,27726],{"class":281,"line":329},[152,27727,27728],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[152,27730,27731],{"class":281,"line":343},[152,27732,27733],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[152,27735,27736],{"class":281,"line":348},[152,27737,307],{"emptyLinePlaceholder":306},[152,27739,27740],{"class":281,"line":362},[152,27741,27742],{},"# 如果上面这行报错就弄下面这行\n",[152,27744,27745],{"class":281,"line":367},[152,27746,27747],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27749,27750],{},"信任 Docker 的 GPG 公钥并添加仓库：",[270,27752,27754],{"className":272,"code":27753,"language":274,"meta":275,"style":275},"# 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",[277,27755,27756,27761,27767,27783,27816],{"__ignoreMap":275},[152,27757,27758],{"class":281,"line":282},[152,27759,27760],{"class":866},"# Add the repository to Apt sources:\n",[152,27762,27763,27765],{"class":281,"line":303},[152,27764,26736],{"class":293},[152,27766,878],{"class":293},[152,27768,27769,27772,27775,27778,27781],{"class":281,"line":310},[152,27770,27771],{"class":289},"  \"deb [arch=$(",[152,27773,27774],{"class":285},"dpkg",[152,27776,27777],{"class":293}," --print-architecture",[152,27779,27780],{"class":289},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[152,27782,1661],{"class":293},[152,27784,27785,27788,27790,27792,27795,27798,27800,27802,27805,27807,27809,27812,27814],{"class":281,"line":324},[152,27786,27787],{"class":289},"  \"",[152,27789,26710],{"class":483},[152,27791,2366],{"class":293},[152,27793,27794],{"class":289}," \u002Fetc\u002Fos-release",[152,27796,27797],{"class":483}," && ",[152,27799,26736],{"class":293},[152,27801,11355],{"class":289},[152,27803,27804],{"class":483},"$VERSION_CODENAME",[152,27806,2059],{"class":289},[152,27808,2237],{"class":483},[152,27810,27811],{"class":289},"\" stable\"",[152,27813,26720],{"class":476},[152,27815,878],{"class":293},[152,27817,27818,27821,27824,27827,27829],{"class":281,"line":329},[152,27819,27820],{"class":285},"  sudo",[152,27822,27823],{"class":289}," tee",[152,27825,27826],{"class":289}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[152,27828,1416],{"class":476},[152,27830,27831],{"class":289}," \u002Fdev\u002Fnull\n",[19,27833,27834],{},"最后安装",[270,27836,27838],{"className":272,"code":27837,"language":274,"meta":275,"style":275},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[277,27839,27840,27849],{"__ignoreMap":275},[152,27841,27842,27844,27846],{"class":281,"line":282},[152,27843,26188],{"class":285},[152,27845,27686],{"class":289},[152,27847,27848],{"class":289}," update\n",[152,27850,27851,27853,27855,27857,27860,27863,27866,27869],{"class":281,"line":303},[152,27852,26188],{"class":285},[152,27854,27686],{"class":289},[152,27856,25446],{"class":289},[152,27858,27859],{"class":289}," docker-ce",[152,27861,27862],{"class":289}," docker-ce-cli",[152,27864,27865],{"class":289}," containerd.io",[152,27867,27868],{"class":289}," docker-buildx-plugin",[152,27870,27871],{"class":289}," docker-compose-plugin\n",[262,27873,27875],{"id":27874},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,27877,27878,27879,27882,27883,27886],{},"查看自己自己包管理工具版本（dnf是 ",[694,27880,27881],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[694,27884,27885],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[270,27888,27890],{"className":272,"code":27889,"language":274,"meta":275,"style":275},"dnf --version\n",[277,27891,27892],{"__ignoreMap":275},[152,27893,27894,27897],{"class":281,"line":282},[152,27895,27896],{"class":285},"dnf",[152,27898,27899],{"class":293}," --version\n",[19,27901,27629,27902,27906],{},[69,27903,27634],{"href":27904,"rel":27905},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[245]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,27908,27909],{},"如果你之前安装过 docker，请先删掉",[270,27911,27913],{"className":272,"code":27912,"language":274,"meta":275,"style":275},"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",[277,27914,27915,27928,27935,27942,27949,27956,27963,27970,27977,27984],{"__ignoreMap":275},[152,27916,27917,27919,27922,27924,27926],{"class":281,"line":282},[152,27918,26188],{"class":285},[152,27920,27921],{"class":289}," dnf",[152,27923,27689],{"class":289},[152,27925,1009],{"class":289},[152,27927,878],{"class":293},[152,27929,27930,27933],{"class":281,"line":303},[152,27931,27932],{"class":289},"                  docker-client",[152,27934,878],{"class":293},[152,27936,27937,27940],{"class":281,"line":310},[152,27938,27939],{"class":289},"                  docker-client-latest",[152,27941,878],{"class":293},[152,27943,27944,27947],{"class":281,"line":324},[152,27945,27946],{"class":289},"                  docker-common",[152,27948,878],{"class":293},[152,27950,27951,27954],{"class":281,"line":329},[152,27952,27953],{"class":289},"                  docker-latest",[152,27955,878],{"class":293},[152,27957,27958,27961],{"class":281,"line":343},[152,27959,27960],{"class":289},"                  docker-latest-logrotate",[152,27962,878],{"class":293},[152,27964,27965,27968],{"class":281,"line":348},[152,27966,27967],{"class":289},"                  docker-logrotate",[152,27969,878],{"class":293},[152,27971,27972,27975],{"class":281,"line":362},[152,27973,27974],{"class":289},"                  docker-selinux",[152,27976,878],{"class":293},[152,27978,27979,27982],{"class":281,"line":367},[152,27980,27981],{"class":289},"                  docker-engine-selinux",[152,27983,878],{"class":293},[152,27985,27986],{"class":281,"line":381},[152,27987,27988],{"class":289},"                  docker-engine\n",[19,27990,27991],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[270,27993,27995],{"className":272,"code":27994,"language":274,"meta":275,"style":275},"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",[277,27996,27997,28011,28026],{"__ignoreMap":275},[152,27998,27999,28001,28003,28006,28008],{"class":281,"line":282},[152,28000,26188],{"class":285},[152,28002,27921],{"class":289},[152,28004,28005],{"class":293}," -y",[152,28007,25446],{"class":289},[152,28009,28010],{"class":289}," dnf-plugins-core\n",[152,28012,28013,28015,28017,28020,28023],{"class":281,"line":303},[152,28014,26188],{"class":285},[152,28016,27921],{"class":289},[152,28018,28019],{"class":289}," config-manager",[152,28021,28022],{"class":289}," addrepo",[152,28024,28025],{"class":293}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[152,28027,28028,28030,28033,28036,28039],{"class":281,"line":310},[152,28029,26188],{"class":285},[152,28031,28032],{"class":289}," sed",[152,28034,28035],{"class":293}," -i",[152,28037,28038],{"class":289}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[152,28040,28041],{"class":289}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28043,28044],{},"最后安装：",[270,28046,28048],{"className":272,"code":28047,"language":274,"meta":275,"style":275},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[277,28049,28050],{"__ignoreMap":275},[152,28051,28052,28054,28056,28058,28060,28062,28064,28066],{"class":281,"line":282},[152,28053,26188],{"class":285},[152,28055,27921],{"class":289},[152,28057,25446],{"class":289},[152,28059,27859],{"class":289},[152,28061,27862],{"class":289},[152,28063,27865],{"class":289},[152,28065,27868],{"class":289},[152,28067,27871],{"class":289},[14,28069,28071],{"id":28070},"_22配置环境","2.2.配置环境",[262,28073,28075,28078],{"id":28074},"_221检查-docker-服务状态",[694,28076,28077],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28080,28081],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[270,28083,28085],{"className":272,"code":28084,"language":274,"meta":275,"style":275},"systemctl status docker\n",[277,28086,28087],{"__ignoreMap":275},[152,28088,28089,28092,28095],{"class":281,"line":282},[152,28090,28091],{"class":285},"systemctl",[152,28093,28094],{"class":289}," status",[152,28096,28097],{"class":289}," docker\n",[262,28099,28101,28078],{"id":28100},"_222启动-docker-服务",[694,28102,28103],{},"2.2.2.启动 Docker 服务",[19,28105,28106],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[270,28108,28110],{"className":272,"code":28109,"language":274,"meta":275,"style":275},"sudo systemctl start docker\n",[277,28111,28112],{"__ignoreMap":275},[152,28113,28114,28116,28119,28121],{"class":281,"line":282},[152,28115,26188],{"class":285},[152,28117,28118],{"class":289}," systemctl",[152,28120,5826],{"class":289},[152,28122,28097],{"class":289},[262,28124,28126,28078],{"id":28125},"_223设置-docker-开机自启",[694,28127,28128],{},"2.2.3.设置 Docker 开机自启",[19,28130,28131],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[270,28133,28135],{"className":272,"code":28134,"language":274,"meta":275,"style":275},"sudo systemctl enable docker\n",[277,28136,28137],{"__ignoreMap":275},[152,28138,28139,28141,28143,28146],{"class":281,"line":282},[152,28140,26188],{"class":285},[152,28142,28118],{"class":289},[152,28144,28145],{"class":289}," enable",[152,28147,28097],{"class":289},[262,28149,28151,15411,28154,15411,28158,28078],{"id":28150},"_224将用户添加到-docker-组",[694,28152,28153],{},"2.2.4.将用户添加到",[694,28155,28156],{},[277,28157,286],{},[694,28159,28160],{},"组",[19,28162,28163,28164,28166],{},"使用以下命令将当前用户添加到 ",[277,28165,286],{}," 组：",[270,28168,28170],{"className":272,"code":28169,"language":274,"meta":275,"style":275},"sudo usermod -aG docker $USER\n",[277,28171,28172],{"__ignoreMap":275},[152,28173,28174,28176,28179,28182,28184],{"class":281,"line":282},[152,28175,26188],{"class":285},[152,28177,28178],{"class":289}," usermod",[152,28180,28181],{"class":293}," -aG",[152,28183,1009],{"class":289},[152,28185,28186],{"class":483}," $USER\n",[262,28188,28190,28078],{"id":28189},"_225退出并重新登录",[694,28191,28192],{},"2.2.5.退出并重新登录",[19,28194,28195],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[270,28197,28199],{"className":272,"code":28198,"language":274,"meta":275,"style":275},"newgrp docker\n",[277,28200,28201],{"__ignoreMap":275},[152,28202,28203,28206],{"class":281,"line":282},[152,28204,28205],{"class":285},"newgrp",[152,28207,28097],{"class":289},[262,28209,28211,28078],{"id":28210},"_226重新启动-docker-服务如果需要",[694,28212,28213],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28215,28216],{},"确保 Docker 服务正在运行，可以使用以下命令：",[270,28218,28219],{"className":272,"code":28109,"language":274,"meta":275,"style":275},[277,28220,28221],{"__ignoreMap":275},[152,28222,28223,28225,28227,28229],{"class":281,"line":282},[152,28224,26188],{"class":285},[152,28226,28118],{"class":289},[152,28228,5826],{"class":289},[152,28230,28097],{"class":289},[262,28232,28234,28078],{"id":28233},"_227重启电脑后检查-docker-服务状态",[694,28235,28236],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28238,28239],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[270,28241,28243],{"className":272,"code":28242,"language":274,"meta":275,"style":275},"sudo reboot\nsystemctl status docker\n",[277,28244,28245,28252],{"__ignoreMap":275},[152,28246,28247,28249],{"class":281,"line":282},[152,28248,26188],{"class":285},[152,28250,28251],{"class":289}," reboot\n",[152,28253,28254,28256,28258],{"class":281,"line":303},[152,28255,28091],{"class":285},[152,28257,28094],{"class":289},[152,28259,28097],{"class":289},[19,28261,28262],{},[401,28263],{"alt":275,"src":28264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28266,28267],{},"第三行显示enabled说明开机自启动成功",[19,28269,28270],{},"按q退出",[14,28272,28274],{"id":28273},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28276,28277],{},"优先使用linux来使用docker是比较好的",[19,28279,28280],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28282,28283],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28285,28286,28287],{},"官方下载安装:",[69,28288,28289],{"href":28289,"rel":28290},"https:\u002F\u002Fwww.docker.com\u002F",[245],[19,28292,28293],{},"Windows的Docker显卡直通与USB直通:",[19,28295,28296],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28298,28299],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28301,28302],{},[401,28303],{"alt":275,"src":28304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28306,28307],{},[401,28308],{"alt":275,"src":28309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28311,28312],{},[401,28313],{"alt":275,"src":28314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1736,28316,28317],{},"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":275,"searchDepth":303,"depth":303,"links":28319},[28320,28321,28322],{"id":27603,"depth":310,"text":27604},{"id":28070,"depth":310,"text":28071},{"id":28273,"depth":310,"text":28274},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27595,"description":275},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28329,"title":28330,"body":28331,"description":28338,"extension":1744,"meta":29028,"navigation":306,"path":29029,"seo":29030,"stem":29031,"__hash__":29032},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28332,"toc":29022},[28333,28336,28339,28343,28348,28353,28356,28384,28389,28398,28401,28406,28410,28417,28422,28428,28432,28435,28439,28444,28536,28541,28559,28564,28585,28590,28606,28610,28615,28644,28649,28695,28700,28744,28752,28769,28774,28790,28795,28809,28812,28815,28818,28821,28848,28851,28856,28860,28863,28866,28872,28875,28878,28881,28943,28950,28955,28958,28975,28979,28982,28999,29002,29005,29019],[10,28334,28330],{"id":28335},"_3docker直通",[19,28337,28338],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[14,28340,28342],{"id":28341},"_31usb直通","3.1.USB直通",[19,28344,28345],{},[401,28346],{"alt":275,"src":28347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[416,28349,28350],{},[419,28351,28352],{},"方法一(不是很推荐新手)：",[19,28354,28355],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[270,28357,28359],{"className":272,"code":28358,"language":274,"meta":275,"style":275},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[277,28360,28361,28369,28374],{"__ignoreMap":275},[152,28362,28363,28366],{"class":281,"line":282},[152,28364,28365],{"class":285},"ls",[152,28367,28368],{"class":289}," \u002Fdev\n",[152,28370,28371],{"class":281,"line":303},[152,28372,28373],{"class":866},"#例如\n",[152,28375,28376,28379,28381],{"class":281,"line":310},[152,28377,28378],{"class":483},"--device",[152,28380,1864],{"class":476},[152,28382,28383],{"class":289},"\u002Fdev\u002Ftty_USB0\n",[416,28385,28386],{"start":303},[419,28387,28388],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[270,28390,28392],{"className":272,"code":28391,"language":274,"meta":275,"style":275},"--privileged\n",[277,28393,28394],{"__ignoreMap":275},[152,28395,28396],{"class":281,"line":282},[152,28397,28391],{"class":285},[19,28399,28400],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28402,28403],{},[401,28404],{"alt":275,"src":28405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[14,28407,28409],{"id":28408},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28411,28412,28413,28416],{},"NVIDIA Container Toolkit使用户 ",[694,28414,28415],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28418,28419],{},[401,28420],{"alt":275,"src":28421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28423,28424],{},[69,28425,28426],{"href":28426,"rel":28427},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[245],[262,28429,28431],{"id":28430},"_321安装","3.2.1.安装",[19,28433,28434],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24524,28436,28438],{"id":28437},"_3211ubuntu","3.2.1.1.Ubuntu",[416,28440,28441],{},[419,28442,28443],{},"配置存储库 并更新",[270,28445,28447],{"className":272,"code":28446,"language":274,"meta":275,"style":275},"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",[277,28448,28449,28478,28498,28510,28522,28528],{"__ignoreMap":275},[152,28450,28451,28454,28457,28460,28462,28464,28467,28470,28473,28476],{"class":281,"line":282},[152,28452,28453],{"class":285},"curl",[152,28455,28456],{"class":293}," -fsSL",[152,28458,28459],{"class":289}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[152,28461,26720],{"class":476},[152,28463,27683],{"class":285},[152,28465,28466],{"class":289}," gpg",[152,28468,28469],{"class":293}," --dearmor",[152,28471,28472],{"class":293}," -o",[152,28474,28475],{"class":289}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[152,28477,878],{"class":293},[152,28479,28480,28483,28485,28488,28491,28494,28496],{"class":281,"line":303},[152,28481,28482],{"class":483},"  && ",[152,28484,28453],{"class":285},[152,28486,28487],{"class":293}," -s",[152,28489,28490],{"class":293}," -L",[152,28492,28493],{"class":289}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[152,28495,26720],{"class":476},[152,28497,878],{"class":293},[152,28499,28500,28503,28506,28508],{"class":281,"line":310},[152,28501,28502],{"class":285},"    sed",[152,28504,28505],{"class":289}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[152,28507,26720],{"class":476},[152,28509,878],{"class":293},[152,28511,28512,28515,28517,28520],{"class":281,"line":324},[152,28513,28514],{"class":285},"    sudo",[152,28516,27823],{"class":289},[152,28518,28519],{"class":289}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[152,28521,878],{"class":293},[152,28523,28524,28526],{"class":281,"line":329},[152,28525,28482],{"class":483},[152,28527,1661],{"class":293},[152,28529,28530,28532,28534],{"class":281,"line":343},[152,28531,28514],{"class":285},[152,28533,27686],{"class":289},[152,28535,27848],{"class":289},[416,28537,28538],{"start":303},[419,28539,28540],{},"安装nvidia-docker2",[270,28542,28544],{"className":272,"code":28543,"language":274,"meta":275,"style":275},"sudo apt-get install -y nvidia-docker2\n",[277,28545,28546],{"__ignoreMap":275},[152,28547,28548,28550,28552,28554,28556],{"class":281,"line":282},[152,28549,26188],{"class":285},[152,28551,27686],{"class":289},[152,28553,25446],{"class":289},[152,28555,28005],{"class":293},[152,28557,28558],{"class":289}," nvidia-docker2\n",[416,28560,28561],{"start":310},[419,28562,28563],{},"使用nvidia-ctk命令配置container runtime",[270,28565,28567],{"className":272,"code":28566,"language":274,"meta":275,"style":275},"sudo nvidia-ctk runtime configure --runtime=docker\n",[277,28568,28569],{"__ignoreMap":275},[152,28570,28571,28573,28576,28579,28582],{"class":281,"line":282},[152,28572,26188],{"class":285},[152,28574,28575],{"class":289}," nvidia-ctk",[152,28577,28578],{"class":289}," runtime",[152,28580,28581],{"class":289}," configure",[152,28583,28584],{"class":293}," --runtime=docker\n",[416,28586,28587],{"start":324},[419,28588,28589],{},"重启docker服务:",[270,28591,28593],{"className":272,"code":28592,"language":274,"meta":275,"style":275},"sudo systemctl restart docker\n",[277,28594,28595],{"__ignoreMap":275},[152,28596,28597,28599,28601,28604],{"class":281,"line":282},[152,28598,26188],{"class":285},[152,28600,28118],{"class":289},[152,28602,28603],{"class":289}," restart",[152,28605,28097],{"class":289},[24524,28607,28609],{"id":28608},"_3212fedora","3.2.1.2.Fedora",[416,28611,28612],{},[419,28613,28614],{},"配置存储库",[270,28616,28618],{"className":272,"code":28617,"language":274,"meta":275,"style":275},"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",[277,28619,28620,28635],{"__ignoreMap":275},[152,28621,28622,28624,28626,28628,28631,28633],{"class":281,"line":282},[152,28623,28453],{"class":285},[152,28625,28487],{"class":293},[152,28627,28490],{"class":293},[152,28629,28630],{"class":289}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[152,28632,26720],{"class":476},[152,28634,878],{"class":293},[152,28636,28637,28639,28641],{"class":281,"line":303},[152,28638,26188],{"class":285},[152,28640,27823],{"class":289},[152,28642,28643],{"class":289}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[416,28645,28646],{"start":303},[419,28647,28648],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[270,28650,28652],{"className":272,"code":28651,"language":274,"meta":275,"style":275},"# 如果是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",[277,28653,28654,28659,28673,28677,28682],{"__ignoreMap":275},[152,28655,28656],{"class":281,"line":282},[152,28657,28658],{"class":866},"# 如果是RHEL或者Rocky（DNF4）\n",[152,28660,28661,28663,28665,28667,28670],{"class":281,"line":303},[152,28662,26188],{"class":285},[152,28664,27921],{"class":289},[152,28666,28019],{"class":289},[152,28668,28669],{"class":293}," --add-repo",[152,28671,28672],{"class":289}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[152,28674,28675],{"class":281,"line":310},[152,28676,307],{"emptyLinePlaceholder":306},[152,28678,28679],{"class":281,"line":324},[152,28680,28681],{"class":866},"# 如果是Feodra41+（DNF5）\n",[152,28683,28684,28686,28688,28690,28692],{"class":281,"line":329},[152,28685,26188],{"class":285},[152,28687,27921],{"class":289},[152,28689,28019],{"class":289},[152,28691,28022],{"class":289},[152,28693,28694],{"class":293}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[416,28696,28697],{"start":310},[419,28698,28699],{},"安装NVIDIA Container Toolki包",[270,28701,28703],{"className":272,"code":28702,"language":274,"meta":275,"style":275},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[277,28704,28705,28710,28723,28727,28732],{"__ignoreMap":275},[152,28706,28707],{"class":281,"line":282},[152,28708,28709],{"class":866},"# 如果是RHEL或者Rocky\n",[152,28711,28712,28714,28716,28718,28720],{"class":281,"line":303},[152,28713,26188],{"class":285},[152,28715,27921],{"class":289},[152,28717,25446],{"class":289},[152,28719,28005],{"class":293},[152,28721,28722],{"class":289}," nvidia-container-toolkit\n",[152,28724,28725],{"class":281,"line":310},[152,28726,307],{"emptyLinePlaceholder":306},[152,28728,28729],{"class":281,"line":324},[152,28730,28731],{"class":866},"# 如果是Fedora\n",[152,28733,28734,28736,28738,28740,28742],{"class":281,"line":329},[152,28735,26188],{"class":285},[152,28737,27921],{"class":289},[152,28739,25446],{"class":289},[152,28741,28005],{"class":293},[152,28743,28722],{"class":289},[416,28745,28746],{"start":324},[419,28747,28748,28749,28751],{},"安装nvidia-docker2 ： 在Fedora上使用",[277,28750,27896],{},"进行安装",[270,28753,28755],{"className":272,"code":28754,"language":274,"meta":275,"style":275},"sudo dnf install -y nvidia-docker2\n",[277,28756,28757],{"__ignoreMap":275},[152,28758,28759,28761,28763,28765,28767],{"class":281,"line":282},[152,28760,26188],{"class":285},[152,28762,27921],{"class":289},[152,28764,25446],{"class":289},[152,28766,28005],{"class":293},[152,28768,28558],{"class":289},[416,28770,28771],{"start":329},[419,28772,28773],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[270,28775,28776],{"className":272,"code":28566,"language":274,"meta":275,"style":275},[277,28777,28778],{"__ignoreMap":275},[152,28779,28780,28782,28784,28786,28788],{"class":281,"line":282},[152,28781,26188],{"class":285},[152,28783,28575],{"class":289},[152,28785,28578],{"class":289},[152,28787,28581],{"class":289},[152,28789,28584],{"class":293},[416,28791,28792],{"start":343},[419,28793,28794],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[270,28796,28797],{"className":272,"code":28592,"language":274,"meta":275,"style":275},[277,28798,28799],{"__ignoreMap":275},[152,28800,28801,28803,28805,28807],{"class":281,"line":282},[152,28802,26188],{"class":285},[152,28804,28118],{"class":289},[152,28806,28603],{"class":289},[152,28808,28097],{"class":289},[19,28810,28811],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28813,28814],{},"方法：",[19,28816,28817],{},"1️⃣nvidia-smi",[19,28819,28820],{},"2️⃣运行nvidia cuda 容器进行测试",[270,28822,28824],{"className":272,"code":28823,"language":274,"meta":275,"style":275},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[277,28825,28826],{"__ignoreMap":275},[152,28827,28828,28830,28832,28834,28836,28839,28842,28845],{"class":281,"line":282},[152,28829,26188],{"class":285},[152,28831,1009],{"class":289},[152,28833,784],{"class":289},[152,28835,787],{"class":293},[152,28837,28838],{"class":293}," --gpus",[152,28840,28841],{"class":289}," all",[152,28843,28844],{"class":289}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[152,28846,28847],{"class":289}," nvidia-smi\n",[19,28849,28850],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,28852,28853],{},[401,28854],{"alt":275,"src":28855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[14,28857,28859],{"id":28858},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,28861,28862],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,28864,28865],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,28867,28868],{},[69,28869,28870],{"href":28870,"rel":28871},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[245],[19,28873,28874],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,28876,28877],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,28879,28880],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[23,28882,28883,28899],{},[26,28884,28885],{},[29,28886,28887,28890,28893,28896],{},[32,28888,28889],{"align":34},"镜像类型",[32,28891,28892],{"align":34},"适用场景",[32,28894,28895],{"align":34},"示例标签",[32,28897,28898],{"align":34},"大小",[43,28900,28901,28915,28929],{},[29,28902,28903,28906,28909,28912],{},[48,28904,28905],{"align":34},"base",[48,28907,28908],{"align":34},"仅需 CUDA 运行时库",[48,28910,28911],{"align":34},"12.4.0-base-ubuntu22.04",[48,28913,28914],{"align":34},"~240MB",[29,28916,28917,28920,28923,28926],{},[48,28918,28919],{"align":34},"runtime",[48,28921,28922],{"align":34},"部署编译后的应用（含数学库）",[48,28924,28925],{"align":34},"12.4.0-runtime-ubuntu22.04",[48,28927,28928],{"align":34},"~2GB",[29,28930,28931,28934,28937,28940],{},[48,28932,28933],{"align":34},"devel",[48,28935,28936],{"align":34},"开发环境（含编译工具）",[48,28938,28939],{"align":34},"12.4.0-devel-ubuntu22.04",[48,28941,28942],{"align":34},"~3GB",[19,28944,28945,28946,28949],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[277,28947,28948],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,28951,28952],{},[401,28953],{"alt":275,"src":28954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,28956,28957],{},"在dockerfile里就可以开头这么写：",[270,28959,28961],{"className":272,"code":28960,"language":274,"meta":275,"style":275},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[277,28962,28963,28968],{"__ignoreMap":275},[152,28964,28965],{"class":281,"line":282},[152,28966,28967],{"class":866},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[152,28969,28970,28972],{"class":281,"line":303},[152,28971,50],{"class":285},[152,28973,28974],{"class":289}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[14,28976,28978],{"id":28977},"_34配置以太网","3.4.配置以太网",[19,28980,28981],{},"指定网络模式",[270,28983,28985],{"className":272,"code":28984,"language":274,"meta":275,"style":275},"--net=host \\\n",[277,28986,28987],{"__ignoreMap":275},[152,28988,28989,28992,28994,28997],{"class":281,"line":282},[152,28990,28991],{"class":483},"--net",[152,28993,1864],{"class":476},[152,28995,28996],{"class":289},"host",[152,28998,878],{"class":285},[19,29000,29001],{},"启动参数里加上这行即可。具体在下方",[19,29003,29004],{},"--net选项：指定网络模式，该选项有以下参数可选：",[698,29006,29007,29010,29013,29016],{},[419,29008,29009],{},"--net=bridge:默认选项，表示连接到默认的网桥",[419,29011,29012],{},"--net=host:容器使用宿主机的网络",[419,29014,29015],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[419,29017,29018],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1736,29020,29021],{},"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":275,"searchDepth":303,"depth":303,"links":29023},[29024,29025,29026,29027],{"id":28341,"depth":310,"text":28342},{"id":28408,"depth":310,"text":28409},{"id":28858,"depth":310,"text":28859},{"id":28977,"depth":310,"text":28978},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28330,"description":28338},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29034,"title":29035,"body":29036,"description":29043,"extension":1744,"meta":29049,"navigation":306,"path":29050,"seo":29051,"stem":29052,"__hash__":29053},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29037,"toc":29047},[29038,29041,29044],[10,29039,29035],{"id":29040},"_4dockerhub换源",[19,29042,29043],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29045,29046],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":275,"searchDepth":303,"depth":303,"links":29048},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29035,"description":29043},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29055,"title":29056,"body":29057,"description":275,"extension":1744,"meta":30067,"navigation":306,"path":30068,"seo":30069,"stem":30070,"__hash__":30071},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29058,"toc":30062},[29059,29062,29066,29072,29076,29079,29418,29421,29424,29427,29432,29437,29440,29443,29446,29449,29468,29471,29482,29488,29670,29680,29696,29958,29960,29985,30000,30009,30059],[10,29060,29056],{"id":29061},"_5docker命令学习",[14,29063,29065],{"id":29064},"_51参考文档","5.1.参考文档",[19,29067,29068],{},[69,29069,29070],{"href":29070,"rel":29071},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[245],[14,29073,29075],{"id":29074},"_52常用命令","5.2.常用命令",[19,29077,29078],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[23,29080,29081,29093],{},[26,29082,29083],{},[29,29084,29085,29088,29091],{},[32,29086,29087],{"align":34},"命令",[32,29089,29090],{"align":34},"描述",[32,29092,41],{"align":34},[43,29094,29095,29106,29117,29128,29139,29150,29161,29172,29182,29193,29204,29215,29225,29236,29247,29258,29268,29278,29288,29298,29309,29320,29331,29342,29353,29364,29374,29385,29396,29407],{},[29,29096,29097,29100,29103],{},[48,29098,29099],{"align":34},"docker run",[48,29101,29102],{"align":34},"创建并启动一个新的容器。",[48,29104,29105],{"align":34},"docker run -it ubuntu bash",[29,29107,29108,29111,29114],{},[48,29109,29110],{"align":34},"docker build",[48,29112,29113],{"align":34},"通过指定的 Dockerfile 创建一个新的镜像。",[48,29115,29116],{"align":34},"docker build -t myimage .",[29,29118,29119,29122,29125],{},[48,29120,29121],{"align":34},"docker pull",[48,29123,29124],{"align":34},"从 Docker 仓库拉取镜像。",[48,29126,29127],{"align":34},"docker pull ubuntu",[29,29129,29130,29133,29136],{},[48,29131,29132],{"align":34},"docker push",[48,29134,29135],{"align":34},"将本地镜像推送到 Docker 仓库。",[48,29137,29138],{"align":34},"docker push myimage",[29,29140,29141,29144,29147],{},[48,29142,29143],{"align":34},"docker stop",[48,29145,29146],{"align":34},"停止一个正在运行的容器。",[48,29148,29149],{"align":34},"docker stop container_id",[29,29151,29152,29155,29158],{},[48,29153,29154],{"align":34},"docker start",[48,29156,29157],{"align":34},"启动一个已经存在的容器。",[48,29159,29160],{"align":34},"docker start container_id",[29,29162,29163,29166,29169],{},[48,29164,29165],{"align":34},"docker restart",[48,29167,29168],{"align":34},"重新启动容器。",[48,29170,29171],{"align":34},"docker restart container_id",[29,29173,29174,29177,29180],{},[48,29175,29176],{"align":34},"docker ps",[48,29178,29179],{"align":34},"列出当前正在运行的容器。",[48,29181,29176],{"align":34},[29,29183,29184,29187,29190],{},[48,29185,29186],{"align":34},"docker rm",[48,29188,29189],{"align":34},"删除一个或多个停止的容器。",[48,29191,29192],{"align":34},"docker rm container_id",[29,29194,29195,29198,29201],{},[48,29196,29197],{"align":34},"docker exec",[48,29199,29200],{"align":34},"在一个正在运行的容器中执行命令。",[48,29202,29203],{"align":34},"docker exec -it container_id bash",[29,29205,29206,29209,29212],{},[48,29207,29208],{"align":34},"docker logs",[48,29210,29211],{"align":34},"查看容器的日志输出。",[48,29213,29214],{"align":34},"docker logs container_id",[29,29216,29217,29220,29223],{},[48,29218,29219],{"align":34},"docker images",[48,29221,29222],{"align":34},"列出本地所有镜像。",[48,29224,29219],{"align":34},[29,29226,29227,29230,29233],{},[48,29228,29229],{"align":34},"docker rmi",[48,29231,29232],{"align":34},"删除一个或多个镜像。",[48,29234,29235],{"align":34},"docker rmi myimage",[29,29237,29238,29241,29244],{},[48,29239,29240],{"align":34},"docker network",[48,29242,29243],{"align":34},"管理 Docker 网络。",[48,29245,29246],{"align":34},"docker network ls",[29,29248,29249,29252,29255],{},[48,29250,29251],{"align":34},"docker volume",[48,29253,29254],{"align":34},"管理 Docker 数据卷。",[48,29256,29257],{"align":34},"docker volume ls",[29,29259,29260,29263,29266],{},[48,29261,29262],{"align":34},"docker-compose up",[48,29264,29265],{"align":34},"启动 docker-compose.yml 中定义的所有服务。",[48,29267,29262],{"align":34},[29,29269,29270,29273,29276],{},[48,29271,29272],{"align":34},"docker-compose down",[48,29274,29275],{"align":34},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[48,29277,29272],{"align":34},[29,29279,29280,29283,29286],{},[48,29281,29282],{"align":34},"docker info",[48,29284,29285],{"align":34},"显示 Docker 系统的详细信息。",[48,29287,29282],{"align":34},[29,29289,29290,29293,29296],{},[48,29291,29292],{"align":34},"docker stats",[48,29294,29295],{"align":34},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[48,29297,29292],{"align":34},[29,29299,29300,29303,29306],{},[48,29301,29302],{"align":34},"docker inspect",[48,29304,29305],{"align":34},"查看容器或镜像的详细信息（JSON 格式）。",[48,29307,29308],{"align":34},"docker inspect container_id",[29,29310,29311,29314,29317],{},[48,29312,29313],{"align":34},"docker save",[48,29315,29316],{"align":34},"将一个镜像保存为 tar 文件。",[48,29318,29319],{"align":34},"docker save -o myimage.tar myimage",[29,29321,29322,29325,29328],{},[48,29323,29324],{"align":34},"docker load",[48,29326,29327],{"align":34},"从 tar 文件中加载镜像。",[48,29329,29330],{"align":34},"docker load -i myimage.tar",[29,29332,29333,29336,29339],{},[48,29334,29335],{"align":34},"docker tag",[48,29337,29338],{"align":34},"为镜像添加标签（tag）。",[48,29340,29341],{"align":34},"docker tag myimage myimage:v1",[29,29343,29344,29347,29350],{},[48,29345,29346],{"align":34},"docker buildx build",[48,29348,29349],{"align":34},"使用 Buildx 构建多架构镜像。",[48,29351,29352],{"align":34},"docker buildx build -t myimage .",[29,29354,29355,29358,29361],{},[48,29356,29357],{"align":34},"docker buildx create",[48,29359,29360],{"align":34},"创建一个新的 Buildx 构建实例。",[48,29362,29363],{"align":34},"docker buildx create –use",[29,29365,29366,29369,29372],{},[48,29367,29368],{"align":34},"docker buildx ls",[48,29370,29371],{"align":34},"列出所有可用的 Buildx 构建实例。",[48,29373,29368],{"align":34},[29,29375,29376,29379,29382],{},[48,29377,29378],{"align":34},"docker buildx use",[48,29380,29381],{"align":34},"设置当前的 Buildx 构建实例。",[48,29383,29384],{"align":34},"docker buildx use mybuilder",[29,29386,29387,29390,29393],{},[48,29388,29389],{"align":34},"docker buildx bake",[48,29391,29392],{"align":34},"使用 Bake 文件批量构建镜像。",[48,29394,29395],{"align":34},"docker buildx bake -f bake.hcl",[29,29397,29398,29401,29404],{},[48,29399,29400],{"align":34},"docker buildx build –push",[48,29402,29403],{"align":34},"构建镜像并推送到镜像仓库。",[48,29405,29406],{"align":34},"docker buildx build –push -t myimage .",[29,29408,29409,29412,29415],{},[48,29410,29411],{"align":34},"docker buildx build –platform",[48,29413,29414],{"align":34},"构建镜像并为多个平台生成支持。",[48,29416,29417],{"align":34},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29419,29420],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29422,29423],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29425,29426],{},"docker images 可以查看已经下载的镜像",[19,29428,29429],{},[401,29430],{"alt":275,"src":29431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29433,29434],{},[694,29435,29436],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29438,29439],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29441,29442],{},"docker container logs 查看容器日志",[19,29444,29445],{},"docker top 查看容器里的进程",[19,29447,29448],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[270,29450,29452],{"className":272,"code":29451,"language":274,"meta":275,"style":275},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[277,29453,29454],{"__ignoreMap":275},[152,29455,29456,29459,29462,29465],{"class":281,"line":282},[152,29457,29458],{"class":285},"如：docker",[152,29460,29461],{"class":289}," cp",[152,29463,29464],{"class":289}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[152,29466,29467],{"class":289}," \u002Fmydata\u002Fnginx\n",[19,29469,29470],{},"docker run时在启动容器的时候会有几个常用的选项：",[698,29472,29473,29476,29479],{},[419,29474,29475],{},"-d选项：表示后台运行",[419,29477,29478],{},"-P选项：随机端口映射",[419,29480,29481],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[14,29483,29485],{"id":29484},"_53run命令的参数非常重要",[694,29486,29487],{},"5.3.run命令的参数（非常重要）",[23,29489,29490,29503],{},[26,29491,29492],{},[29,29493,29494,29497,29500],{},[32,29495,29496],{"align":34},"参数\u002F配置",[32,29498,29499],{"align":34},"功能说明",[32,29501,29502],{"align":34},"重要性与参考依据",[43,29504,29505,29516,29527,29538,29549,29560,29571,29582,29593,29604,29615,29626,29637,29648,29659],{},[29,29506,29507,29510,29513],{},[48,29508,29509],{"align":34},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[48,29511,29512],{"align":34},"指定容器名称，便于后续管理",[48,29514,29515],{"align":34},"替代随机生成的容器名。",[29,29517,29518,29521,29524],{},[48,29519,29520],{"align":34},"–gpus all",[48,29522,29523],{"align":34},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[48,29525,29526],{"align":34},"用于CUDA加速等GPU依赖任务。",[29,29528,29529,29532,29535],{},[48,29530,29531],{"align":34},"-e NVIDIA_DRIVER_CAPABILITIES=all",[48,29533,29534],{"align":34},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[48,29536,29537],{"align":34},"确保容器内GPU功能完整67。",[29,29539,29540,29543,29546],{},[48,29541,29542],{"align":34},"-dit",[48,29544,29545],{"align":34},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[48,29547,29548],{"align":34},"允许容器在后台运行并支持交互操作。",[29,29550,29551,29554,29557],{},[48,29552,29553],{"align":34},"–privileged",[48,29555,29556],{"align":34},"赋予容器完全主机权限（可访问设备、内核模块等）",[48,29558,29559],{"align":34},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[29,29561,29562,29565,29568],{},[48,29563,29564],{"align":34},"–net=host",[48,29566,29567],{"align":34},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[48,29569,29570],{"align":34},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[29,29572,29573,29576,29579],{},[48,29574,29575],{"align":34},"–group-add audio–group-add video–group-add dialout",[48,29577,29578],{"align":34},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[48,29580,29581],{"align":34},"避免权限问题（如避免无法调用摄像头、麦克风）。",[29,29583,29584,29587,29590],{},[48,29585,29586],{"align":34},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[48,29588,29589],{"align":34},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[48,29591,29592],{"align":34},"支持容器内运行图形界面应用（如OpenCV可视化）。",[29,29594,29595,29598,29601],{},[48,29596,29597],{"align":34},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[48,29599,29600],{"align":34},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[48,29602,29603],{"align":34},"实现容器内图形显示。",[29,29605,29606,29609,29612],{},[48,29607,29608],{"align":34},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[48,29610,29611],{"align":34},"挂载X11认证文件（只读）",[48,29613,29614],{"align":34},"确保容器有权连接宿主机显示服务。",[29,29616,29617,29620,29623],{},[48,29618,29619],{"align":34},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[48,29621,29622],{"align":34},"挂载Wayland显示协议相关目录",[48,29624,29625],{"align":34},"支持Wayland协议的图形显示。",[29,29627,29628,29631,29634],{},[48,29629,29630],{"align":34},"–ulimit nofile=1024:524288",[48,29632,29633],{"align":34},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[48,29635,29636],{"align":34},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[29,29638,29639,29642,29645],{},[48,29640,29641],{"align":34},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[48,29643,29644],{"align":34},"挂载宿主机用户目录到容器内同名路径",[48,29646,29647],{"align":34},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[29,29649,29650,29653,29656],{},[48,29651,29652],{"align":34},"-w \u002Fhome\u002Ftungchiahui",[48,29654,29655],{"align":34},"设置容器启动后的默认工作目录",[48,29657,29658],{"align":34},"直接进入项目路径，方便执行命令2324。",[29,29660,29661,29664,29667],{},[48,29662,29663],{"align":34},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[48,29665,29666],{"align":34},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[48,29668,29669],{"align":34},"提供预配置的深度学习与机器人开发环境。",[19,29671,29672,29673,29675,29676,29679],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[277,29674,26188],{},"加不加",[277,29677,29678],{},"sudo -E","都无所谓。",[19,29681,29682,29683,29685,29686,29688,29689,29692,29693,29695],{},"用户已经被加到docker组了，不用",[277,29684,26188],{},"也行跑，其次，",[277,29687,26188],{},"运行的话，你的",[277,29690,29691],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[277,29694,29691],{},"更不可能变了。",[270,29697,29699],{"className":272,"code":29698,"language":274,"meta":275,"style":275},"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",[277,29700,29701,29714,29724,29733,29745,29752,29759,29766,29776,29785,29794,29808,29820,29832,29841,29851,29860,29875,29908,29935,29946,29953],{"__ignoreMap":275},[152,29702,29703,29705,29707,29709,29712],{"class":281,"line":282},[152,29704,26188],{"class":285},[152,29706,1009],{"class":289},[152,29708,784],{"class":289},[152,29710,29711],{"class":293}," --name=ros_opencv_cuda",[152,29713,878],{"class":293},[152,29715,29716,29719,29722],{"class":281,"line":303},[152,29717,29718],{"class":483},"--gpus ",[152,29720,29721],{"class":289},"all",[152,29723,878],{"class":293},[152,29725,29726,29728,29731],{"class":281,"line":310},[152,29727,1638],{"class":483},[152,29729,29730],{"class":289},"NVIDIA_DRIVER_CAPABILITIES=all",[152,29732,878],{"class":293},[152,29734,29735,29737,29740,29743],{"class":281,"line":324},[152,29736,1638],{"class":483},[152,29738,29739],{"class":289},"DISPLAY=",[152,29741,29742],{"class":483},"$DISPLAY ",[152,29744,1661],{"class":293},[152,29746,29747,29750],{"class":281,"line":329},[152,29748,29749],{"class":483},"-dit ",[152,29751,1661],{"class":293},[152,29753,29754,29757],{"class":281,"line":343},[152,29755,29756],{"class":483},"--privileged ",[152,29758,1661],{"class":293},[152,29760,29761,29764],{"class":281,"line":348},[152,29762,29763],{"class":483},"--net=host ",[152,29765,1661],{"class":293},[152,29767,29768,29771,29774],{"class":281,"line":362},[152,29769,29770],{"class":483},"--group-add ",[152,29772,29773],{"class":289},"audio",[152,29775,878],{"class":293},[152,29777,29778,29780,29783],{"class":281,"line":367},[152,29779,29770],{"class":483},[152,29781,29782],{"class":289},"video",[152,29784,878],{"class":293},[152,29786,29787,29789,29792],{"class":281,"line":381},[152,29788,29770],{"class":483},[152,29790,29791],{"class":289},"dialout",[152,29793,878],{"class":293},[152,29795,29796,29798,29801,29803,29806],{"class":281,"line":386},[152,29797,1638],{"class":483},[152,29799,29800],{"class":289},"XAUTHORITY=",[152,29802,29691],{"class":483},[152,29804,29805],{"class":289},"\u002F.Xauthority",[152,29807,878],{"class":293},[152,29809,29810,29812,29815,29818],{"class":281,"line":932},[152,29811,1638],{"class":483},[152,29813,29814],{"class":289},"WAYLAND_DISPLAY=",[152,29816,29817],{"class":483},"$WAYLAND_DISPLAY ",[152,29819,1661],{"class":293},[152,29821,29822,29824,29827,29830],{"class":281,"line":942},[152,29823,1638],{"class":483},[152,29825,29826],{"class":289},"XDG_RUNTIME_DIR=",[152,29828,29829],{"class":483},"$XDG_RUNTIME_DIR ",[152,29831,1661],{"class":293},[152,29833,29834,29836,29839],{"class":281,"line":949},[152,29835,1638],{"class":483},[152,29837,29838],{"class":289},"QT_QPA_PLATFORM=xcb",[152,29840,878],{"class":293},[152,29842,29843,29846,29849],{"class":281,"line":954},[152,29844,29845],{"class":483},"-v ",[152,29847,29848],{"class":289},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[152,29850,878],{"class":293},[152,29852,29853,29855,29858],{"class":281,"line":959},[152,29854,29845],{"class":483},[152,29856,29857],{"class":289},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[152,29859,878],{"class":293},[152,29861,29862,29865,29868,29870,29873],{"class":281,"line":970},[152,29863,29864],{"class":483},"-v $HOME",[152,29866,29867],{"class":289},"\u002F.Xauthority:",[152,29869,29691],{"class":483},[152,29871,29872],{"class":289},"\u002F.Xauthority:ro",[152,29874,878],{"class":293},[152,29876,29877,29879,29882,29884,29887,29890,29892,29895,29897,29899,29901,29903,29906],{"class":281,"line":979},[152,29878,29845],{"class":483},[152,29880,29881],{"class":289},"\u002Frun\u002Fuser\u002F",[152,29883,26710],{"class":483},[152,29885,29886],{"class":285},"id",[152,29888,29889],{"class":293}," -u",[152,29891,2237],{"class":483},[152,29893,29894],{"class":289},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[152,29896,26710],{"class":483},[152,29898,29886],{"class":285},[152,29900,29889],{"class":293},[152,29902,2237],{"class":483},[152,29904,29905],{"class":289},"\u002Fwayland-0",[152,29907,878],{"class":293},[152,29909,29910,29912,29914,29916,29918,29920,29922,29925,29927,29929,29931,29933],{"class":281,"line":989},[152,29911,29845],{"class":483},[152,29913,29881],{"class":289},[152,29915,26710],{"class":483},[152,29917,29886],{"class":285},[152,29919,29889],{"class":293},[152,29921,2237],{"class":483},[152,29923,29924],{"class":289},":\u002Frun\u002Fuser\u002F",[152,29926,26710],{"class":483},[152,29928,29886],{"class":285},[152,29930,29889],{"class":293},[152,29932,15330],{"class":483},[152,29934,1661],{"class":293},[152,29936,29937,29939,29941,29944],{"class":281,"line":996},[152,29938,29864],{"class":483},[152,29940,841],{"class":289},[152,29942,29943],{"class":483},"$HOME ",[152,29945,1661],{"class":293},[152,29947,29948,29951],{"class":281,"line":1001},[152,29949,29950],{"class":483},"-w $HOME ",[152,29952,1661],{"class":293},[152,29954,29955],{"class":281,"line":1006},[152,29956,29957],{"class":483},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,29959,10657],{},[416,29961,29962,29970,29973,29976],{},[419,29963,29964,15411,29966,29969],{},[277,29965,29730],{},[277,29967,29968],{},"--gpus all","没有英伟达显卡请注释。",[419,29971,29972],{},"--name后面请自己为容器起名。",[419,29974,29975],{},"最后一行仓库名称请你自己找对应的镜像填上。",[419,29977,29978,29979,29984],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25168,29980,29981],{},[694,29982,29983],{},"请不要加","。",[270,29986,29988],{"className":272,"code":29987,"language":274,"meta":275,"style":275},"--ulimit nofile=1024:524288 \\\n",[277,29989,29990],{"__ignoreMap":275},[152,29991,29992,29995,29998],{"class":281,"line":282},[152,29993,29994],{"class":285},"--ulimit",[152,29996,29997],{"class":289}," nofile=1024:524288",[152,29999,878],{"class":293},[19,30001,30002,30003,30008],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25168,30004,30005],{},[694,30006,30007],{},"不建议","**.**",[270,30010,30012],{"className":272,"code":30011,"language":274,"meta":275,"style":275},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[277,30013,30014,30041,30050],{"__ignoreMap":275},[152,30015,30016,30019,30022,30024,30026,30028,30030,30032,30034,30037,30039],{"class":281,"line":282},[152,30017,30018],{"class":285},"--user",[152,30020,30021],{"class":483}," $(",[152,30023,29886],{"class":285},[152,30025,29889],{"class":293},[152,30027,2237],{"class":483},[152,30029,841],{"class":289},[152,30031,26710],{"class":483},[152,30033,29886],{"class":285},[152,30035,30036],{"class":293}," -g",[152,30038,15330],{"class":483},[152,30040,1661],{"class":293},[152,30042,30043,30045,30048],{"class":281,"line":303},[152,30044,29845],{"class":483},[152,30046,30047],{"class":289},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[152,30049,878],{"class":293},[152,30051,30052,30054,30057],{"class":281,"line":310},[152,30053,29845],{"class":483},[152,30055,30056],{"class":289},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[152,30058,878],{"class":293},[1736,30060,30061],{},"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":275,"searchDepth":303,"depth":303,"links":30063},[30064,30065,30066],{"id":29064,"depth":310,"text":29065},{"id":29074,"depth":310,"text":29075},{"id":29484,"depth":310,"text":29487},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29056,"description":275},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":4,"title":5,"body":30073,"description":275,"extension":1744,"meta":31439,"navigation":306,"path":1746,"seo":31440,"stem":1748,"__hash__":1749},{"type":7,"value":30074,"toc":31434},[30075,30077,30079,30081,30244,30246,30248,30250,30346,30350,30352,30356,30358,30362,30364,30368,30370,30380,30382,30386,30390,30412,30416,30486,30490,30492,30512,30514,30586,30590,30592,30596,30602,30606,30610,30612,30618,30622,30624,30626,30644,30646,30648,30670,30672,30674,31118,31120,31124,31128,31130,31148,31152,31154,31156,31158,31160,31162,31184,31186,31188,31204,31206,31208,31226,31231,31235,31239,31241,31243,31245,31247,31249,31285,31287,31303,31305,31309,31311,31329,31331,31379,31381,31385,31387,31389,31394,31396,31398,31402,31404,31418,31420,31432],[10,30076,5],{"id":12},[14,30078,17],{"id":16},[19,30080,21],{},[23,30082,30083,30093],{},[26,30084,30085],{},[29,30086,30087,30089,30091],{},[32,30088,35],{"align":34},[32,30090,38],{"align":34},[32,30092,41],{"align":34},[43,30094,30095,30103,30113,30121,30129,30137,30145,30153,30161,30171,30181,30189,30199,30207,30215,30225,30236],{},[29,30096,30097,30099,30101],{},[48,30098,50],{"align":34},[48,30100,53],{"align":34},[48,30102,56],{"align":34},[29,30104,30105,30107,30109],{},[48,30106,61],{"align":34},[48,30108,64],{"align":34},[48,30110,67,30111,73],{"align":34},[69,30112,72],{"href":71},[29,30114,30115,30117,30119],{},[48,30116,78],{"align":34},[48,30118,81],{"align":34},[48,30120,84],{"align":34},[29,30122,30123,30125,30127],{},[48,30124,89],{"align":34},[48,30126,92],{"align":34},[48,30128,95],{"align":34},[29,30130,30131,30133,30135],{},[48,30132,100],{"align":34},[48,30134,103],{"align":34},[48,30136,106],{"align":34},[29,30138,30139,30141,30143],{},[48,30140,111],{"align":34},[48,30142,114],{"align":34},[48,30144,117],{"align":34},[29,30146,30147,30149,30151],{},[48,30148,122],{"align":34},[48,30150,125],{"align":34},[48,30152,128],{"align":34},[29,30154,30155,30157,30159],{},[48,30156,133],{"align":34},[48,30158,136],{"align":34},[48,30160,139],{"align":34},[29,30162,30163,30165,30167],{},[48,30164,144],{"align":34},[48,30166,147],{"align":34},[48,30168,150,30169],{"align":34},[152,30170,154],{},[29,30172,30173,30175,30177],{},[48,30174,159],{"align":34},[48,30176,162],{"align":34},[48,30178,165,30179],{"align":34},[152,30180,168],{},[29,30182,30183,30185,30187],{},[48,30184,173],{"align":34},[48,30186,176],{"align":34},[48,30188,179],{"align":34},[29,30190,30191,30193,30195],{},[48,30192,184],{"align":34},[48,30194,187],{"align":34},[48,30196,190,30197],{"align":34},[152,30198,193],{},[29,30200,30201,30203,30205],{},[48,30202,198],{"align":34},[48,30204,201],{"align":34},[48,30206,204],{"align":34},[29,30208,30209,30211,30213],{},[48,30210,209],{"align":34},[48,30212,212],{"align":34},[48,30214,215],{"align":34},[29,30216,30217,30219,30221],{},[48,30218,220],{"align":34},[48,30220,223],{"align":34},[48,30222,226,30223],{"align":34},[152,30224,229],{},[29,30226,30227,30229,30231],{},[48,30228,234],{"align":34},[48,30230,237],{"align":34},[48,30232,240,30233],{"align":34},[69,30234,243],{"href":243,"rel":30235},[245],[29,30237,30238,30240,30242],{},[48,30239,250],{"align":34},[48,30241,253],{"align":34},[48,30243,256],{"align":34},[14,30245,260],{"id":259},[262,30247,265],{"id":264},[19,30249,268],{},[270,30251,30252],{"className":272,"code":273,"language":274,"meta":275,"style":275},[277,30253,30254,30266,30270,30282,30286,30298,30302,30314,30318,30330,30334],{"__ignoreMap":275},[152,30255,30256,30258,30260,30262,30264],{"class":281,"line":282},[152,30257,286],{"class":285},[152,30259,290],{"class":289},[152,30261,294],{"class":293},[152,30263,297],{"class":289},[152,30265,300],{"class":289},[152,30267,30268],{"class":281,"line":303},[152,30269,307],{"emptyLinePlaceholder":306},[152,30271,30272,30274,30276,30278,30280],{"class":281,"line":310},[152,30273,286],{"class":285},[152,30275,290],{"class":289},[152,30277,294],{"class":293},[152,30279,319],{"class":289},[152,30281,300],{"class":289},[152,30283,30284],{"class":281,"line":324},[152,30285,307],{"emptyLinePlaceholder":306},[152,30287,30288,30290,30292,30294,30296],{"class":281,"line":329},[152,30289,286],{"class":285},[152,30291,290],{"class":289},[152,30293,294],{"class":293},[152,30295,338],{"class":289},[152,30297,300],{"class":289},[152,30299,30300],{"class":281,"line":343},[152,30301,307],{"emptyLinePlaceholder":306},[152,30303,30304,30306,30308,30310,30312],{"class":281,"line":348},[152,30305,286],{"class":285},[152,30307,290],{"class":289},[152,30309,294],{"class":293},[152,30311,357],{"class":289},[152,30313,300],{"class":289},[152,30315,30316],{"class":281,"line":362},[152,30317,307],{"emptyLinePlaceholder":306},[152,30319,30320,30322,30324,30326,30328],{"class":281,"line":367},[152,30321,286],{"class":285},[152,30323,290],{"class":289},[152,30325,294],{"class":293},[152,30327,376],{"class":289},[152,30329,300],{"class":289},[152,30331,30332],{"class":281,"line":381},[152,30333,307],{"emptyLinePlaceholder":306},[152,30335,30336,30338,30340,30342,30344],{"class":281,"line":386},[152,30337,286],{"class":285},[152,30339,290],{"class":289},[152,30341,294],{"class":293},[152,30343,395],{"class":289},[152,30345,300],{"class":289},[19,30347,30348],{},[401,30349],{"alt":275,"src":403},[19,30351,406],{},[19,30353,30354],{},[401,30355],{"alt":275,"src":411},[19,30357,414],{},[416,30359,30360],{},[419,30361,421],{},[19,30363,424],{},[416,30365,30366],{"start":303},[419,30367,429],{},[19,30369,432],{},[270,30371,30372],{"className":272,"code":435,"language":274,"meta":275,"style":275},[277,30373,30374],{"__ignoreMap":275},[152,30375,30376,30378],{"class":281,"line":282},[152,30377,286],{"class":285},[152,30379,444],{"class":289},[19,30381,447],{},[416,30383,30384],{},[419,30385,452],{},[19,30387,455,30388,459],{},[277,30389,458],{},[270,30391,30392],{"className":272,"code":462,"language":274,"meta":275,"style":275},[277,30393,30394],{"__ignoreMap":275},[152,30395,30396,30398,30400,30402,30404,30406,30408,30410],{"class":281,"line":282},[152,30397,286],{"class":285},[152,30399,471],{"class":289},[152,30401,357],{"class":289},[152,30403,477],{"class":476},[152,30405,480],{"class":289},[152,30407,484],{"class":483},[152,30409,487],{"class":476},[152,30411,490],{"class":289},[19,30413,493,30414,497],{},[277,30415,496],{},[270,30417,30418],{"className":272,"code":500,"language":274,"meta":275,"style":275},[277,30419,30420,30430,30434,30444,30448,30458,30462,30472,30476],{"__ignoreMap":275},[152,30421,30422,30424,30426,30428],{"class":281,"line":282},[152,30423,286],{"class":285},[152,30425,471],{"class":289},[152,30427,319],{"class":289},[152,30429,513],{"class":289},[152,30431,30432],{"class":281,"line":303},[152,30433,307],{"emptyLinePlaceholder":306},[152,30435,30436,30438,30440,30442],{"class":281,"line":310},[152,30437,286],{"class":285},[152,30439,471],{"class":289},[152,30441,338],{"class":289},[152,30443,528],{"class":289},[152,30445,30446],{"class":281,"line":324},[152,30447,307],{"emptyLinePlaceholder":306},[152,30449,30450,30452,30454,30456],{"class":281,"line":329},[152,30451,286],{"class":285},[152,30453,471],{"class":289},[152,30455,357],{"class":289},[152,30457,543],{"class":289},[152,30459,30460],{"class":281,"line":343},[152,30461,307],{"emptyLinePlaceholder":306},[152,30463,30464,30466,30468,30470],{"class":281,"line":348},[152,30465,286],{"class":285},[152,30467,471],{"class":289},[152,30469,376],{"class":289},[152,30471,558],{"class":289},[152,30473,30474],{"class":281,"line":362},[152,30475,307],{"emptyLinePlaceholder":306},[152,30477,30478,30480,30482,30484],{"class":281,"line":367},[152,30479,286],{"class":285},[152,30481,471],{"class":289},[152,30483,395],{"class":289},[152,30485,573],{"class":289},[416,30487,30488],{"start":303},[419,30489,578],{},[19,30491,581],{},[270,30493,30494],{"className":272,"code":584,"language":274,"meta":275,"style":275},[277,30495,30496],{"__ignoreMap":275},[152,30497,30498,30500,30502,30504,30506,30508,30510],{"class":281,"line":282},[152,30499,286],{"class":285},[152,30501,593],{"class":289},[152,30503,477],{"class":476},[152,30505,480],{"class":289},[152,30507,484],{"class":483},[152,30509,487],{"class":476},[152,30511,604],{"class":289},[19,30513,607],{},[270,30515,30516],{"className":272,"code":610,"language":274,"meta":275,"style":275},[277,30517,30518,30526,30530,30538,30542,30550,30554,30562,30566,30574,30578],{"__ignoreMap":275},[152,30519,30520,30522,30524],{"class":281,"line":282},[152,30521,286],{"class":285},[152,30523,593],{"class":289},[152,30525,513],{"class":289},[152,30527,30528],{"class":281,"line":303},[152,30529,307],{"emptyLinePlaceholder":306},[152,30531,30532,30534,30536],{"class":281,"line":310},[152,30533,286],{"class":285},[152,30535,593],{"class":289},[152,30537,528],{"class":289},[152,30539,30540],{"class":281,"line":324},[152,30541,307],{"emptyLinePlaceholder":306},[152,30543,30544,30546,30548],{"class":281,"line":329},[152,30545,286],{"class":285},[152,30547,593],{"class":289},[152,30549,543],{"class":289},[152,30551,30552],{"class":281,"line":343},[152,30553,307],{"emptyLinePlaceholder":306},[152,30555,30556,30558,30560],{"class":281,"line":348},[152,30557,286],{"class":285},[152,30559,593],{"class":289},[152,30561,657],{"class":289},[152,30563,30564],{"class":281,"line":362},[152,30565,307],{"emptyLinePlaceholder":306},[152,30567,30568,30570,30572],{"class":281,"line":367},[152,30569,286],{"class":285},[152,30571,593],{"class":289},[152,30573,573],{"class":289},[152,30575,30576],{"class":281,"line":381},[152,30577,307],{"emptyLinePlaceholder":306},[152,30579,30580,30582,30584],{"class":281,"line":386},[152,30581,286],{"class":285},[152,30583,593],{"class":289},[152,30585,682],{"class":289},[416,30587,30588],{"start":310},[419,30589,687],{},[19,30591,690],{},[19,30593,30594],{},[694,30595,696],{},[698,30597,30598,30600],{},[419,30599,702],{},[419,30601,705],{},[19,30603,30604],{},[401,30605],{"alt":275,"src":710},[19,30607,30608],{},[401,30609],{"alt":275,"src":715},[262,30611,719],{"id":718},[19,30613,722,30614,726,30616,730],{},[694,30615,725],{},[694,30617,729],{},[19,30619,733,30620],{},[694,30621,736],{},[19,30623,739],{},[19,30625,742],{},[270,30627,30628],{"className":272,"code":745,"language":274,"meta":275,"style":275},[277,30629,30630],{"__ignoreMap":275},[152,30631,30632,30634,30636,30638,30640,30642],{"class":281,"line":282},[152,30633,286],{"class":285},[152,30635,754],{"class":289},[152,30637,757],{"class":289},[152,30639,760],{"class":293},[152,30641,763],{"class":289},[152,30643,766],{"class":293},[19,30645,769],{},[19,30647,772],{},[270,30649,30650],{"className":272,"code":775,"language":274,"meta":275,"style":275},[277,30651,30652],{"__ignoreMap":275},[152,30653,30654,30656,30658,30660,30662,30664,30666,30668],{"class":281,"line":282},[152,30655,286],{"class":285},[152,30657,784],{"class":289},[152,30659,787],{"class":293},[152,30661,790],{"class":293},[152,30663,793],{"class":289},[152,30665,796],{"class":293},[152,30667,799],{"class":293},[152,30669,802],{"class":289},[19,30671,805],{},[19,30673,808],{},[270,30675,30676],{"className":272,"code":811,"language":274,"meta":275,"style":275},[277,30677,30678,30714,30718,30722,30732,30740,30748,30754,30758,30762,30772,30780,30788,30794,30798,30802,30812,30820,30828,30834,30838,30842,30852,30860,30868,30874,30878,30882,30892,30900,30908,30914,30918,30922,30932,30940,30948,30954,30958,30962,30972,30980,30988,30994,30998,31002,31012,31020,31028,31034,31038,31042,31052,31060,31068,31074,31078,31082,31092,31100,31108,31114],{"__ignoreMap":275},[152,30679,30680,30682,30684,30686,30688,30690,30692,30694,30696,30698,30700,30702,30704,30706,30708,30710,30712],{"class":281,"line":282},[152,30681,286],{"class":285},[152,30683,754],{"class":289},[152,30685,290],{"class":289},[152,30687,824],{"class":293},[152,30689,827],{"class":289},[152,30691,294],{"class":293},[152,30693,477],{"class":476},[152,30695,834],{"class":289},[152,30697,484],{"class":483},[152,30699,487],{"class":476},[152,30701,841],{"class":289},[152,30703,844],{"class":476},[152,30705,847],{"class":289},[152,30707,850],{"class":483},[152,30709,487],{"class":476},[152,30711,855],{"class":293},[152,30713,300],{"class":289},[152,30715,30716],{"class":281,"line":303},[152,30717,307],{"emptyLinePlaceholder":306},[152,30719,30720],{"class":281,"line":310},[152,30721,867],{"class":866},[152,30723,30724,30726,30728,30730],{"class":281,"line":324},[152,30725,286],{"class":285},[152,30727,754],{"class":289},[152,30729,290],{"class":289},[152,30731,878],{"class":293},[152,30733,30734,30736,30738],{"class":281,"line":329},[152,30735,883],{"class":483},[152,30737,886],{"class":289},[152,30739,878],{"class":293},[152,30741,30742,30744,30746],{"class":281,"line":343},[152,30743,294],{"class":293},[152,30745,895],{"class":289},[152,30747,878],{"class":293},[152,30749,30750,30752],{"class":281,"line":348},[152,30751,855],{"class":293},[152,30753,878],{"class":293},[152,30755,30756],{"class":281,"line":362},[152,30757,300],{"class":289},[152,30759,30760],{"class":281,"line":367},[152,30761,307],{"emptyLinePlaceholder":306},[152,30763,30764,30766,30768,30770],{"class":281,"line":381},[152,30765,286],{"class":285},[152,30767,754],{"class":289},[152,30769,290],{"class":289},[152,30771,878],{"class":293},[152,30773,30774,30776,30778],{"class":281,"line":386},[152,30775,883],{"class":483},[152,30777,886],{"class":289},[152,30779,878],{"class":293},[152,30781,30782,30784,30786],{"class":281,"line":932},[152,30783,294],{"class":293},[152,30785,937],{"class":289},[152,30787,878],{"class":293},[152,30789,30790,30792],{"class":281,"line":942},[152,30791,855],{"class":293},[152,30793,878],{"class":293},[152,30795,30796],{"class":281,"line":949},[152,30797,300],{"class":289},[152,30799,30800],{"class":281,"line":954},[152,30801,307],{"emptyLinePlaceholder":306},[152,30803,30804,30806,30808,30810],{"class":281,"line":959},[152,30805,286],{"class":285},[152,30807,754],{"class":289},[152,30809,290],{"class":289},[152,30811,878],{"class":293},[152,30813,30814,30816,30818],{"class":281,"line":970},[152,30815,883],{"class":483},[152,30817,886],{"class":289},[152,30819,878],{"class":293},[152,30821,30822,30824,30826],{"class":281,"line":979},[152,30823,294],{"class":293},[152,30825,984],{"class":289},[152,30827,878],{"class":293},[152,30829,30830,30832],{"class":281,"line":989},[152,30831,855],{"class":293},[152,30833,878],{"class":293},[152,30835,30836],{"class":281,"line":996},[152,30837,300],{"class":289},[152,30839,30840],{"class":281,"line":1001},[152,30841,307],{"emptyLinePlaceholder":306},[152,30843,30844,30846,30848,30850],{"class":281,"line":1006},[152,30845,1009],{"class":285},[152,30847,754],{"class":289},[152,30849,290],{"class":289},[152,30851,878],{"class":293},[152,30853,30854,30856,30858],{"class":281,"line":1018},[152,30855,883],{"class":483},[152,30857,886],{"class":289},[152,30859,878],{"class":293},[152,30861,30862,30864,30866],{"class":281,"line":1027},[152,30863,294],{"class":293},[152,30865,1032],{"class":289},[152,30867,878],{"class":293},[152,30869,30870,30872],{"class":281,"line":1037},[152,30871,855],{"class":293},[152,30873,878],{"class":293},[152,30875,30876],{"class":281,"line":1044},[152,30877,300],{"class":289},[152,30879,30880],{"class":281,"line":1049},[152,30881,307],{"emptyLinePlaceholder":306},[152,30883,30884,30886,30888,30890],{"class":281,"line":1054},[152,30885,286],{"class":285},[152,30887,754],{"class":289},[152,30889,290],{"class":289},[152,30891,878],{"class":293},[152,30893,30894,30896,30898],{"class":281,"line":1065},[152,30895,883],{"class":483},[152,30897,886],{"class":289},[152,30899,878],{"class":293},[152,30901,30902,30904,30906],{"class":281,"line":1074},[152,30903,294],{"class":293},[152,30905,1079],{"class":289},[152,30907,878],{"class":293},[152,30909,30910,30912],{"class":281,"line":1084},[152,30911,855],{"class":293},[152,30913,878],{"class":293},[152,30915,30916],{"class":281,"line":1091},[152,30917,300],{"class":289},[152,30919,30920],{"class":281,"line":1096},[152,30921,307],{"emptyLinePlaceholder":306},[152,30923,30924,30926,30928,30930],{"class":281,"line":1101},[152,30925,1009],{"class":285},[152,30927,754],{"class":289},[152,30929,290],{"class":289},[152,30931,878],{"class":293},[152,30933,30934,30936,30938],{"class":281,"line":1112},[152,30935,883],{"class":483},[152,30937,886],{"class":289},[152,30939,878],{"class":293},[152,30941,30942,30944,30946],{"class":281,"line":1121},[152,30943,294],{"class":293},[152,30945,1126],{"class":289},[152,30947,878],{"class":293},[152,30949,30950,30952],{"class":281,"line":1131},[152,30951,855],{"class":293},[152,30953,878],{"class":293},[152,30955,30956],{"class":281,"line":1138},[152,30957,300],{"class":289},[152,30959,30960],{"class":281,"line":1143},[152,30961,307],{"emptyLinePlaceholder":306},[152,30963,30964,30966,30968,30970],{"class":281,"line":1148},[152,30965,286],{"class":285},[152,30967,754],{"class":289},[152,30969,290],{"class":289},[152,30971,878],{"class":293},[152,30973,30974,30976,30978],{"class":281,"line":1159},[152,30975,883],{"class":483},[152,30977,886],{"class":289},[152,30979,878],{"class":293},[152,30981,30982,30984,30986],{"class":281,"line":1168},[152,30983,294],{"class":293},[152,30985,1173],{"class":289},[152,30987,878],{"class":293},[152,30989,30990,30992],{"class":281,"line":1178},[152,30991,855],{"class":293},[152,30993,878],{"class":293},[152,30995,30996],{"class":281,"line":1185},[152,30997,300],{"class":289},[152,30999,31000],{"class":281,"line":1190},[152,31001,307],{"emptyLinePlaceholder":306},[152,31003,31004,31006,31008,31010],{"class":281,"line":1195},[152,31005,286],{"class":285},[152,31007,754],{"class":289},[152,31009,290],{"class":289},[152,31011,878],{"class":293},[152,31013,31014,31016,31018],{"class":281,"line":1206},[152,31015,883],{"class":483},[152,31017,886],{"class":289},[152,31019,878],{"class":293},[152,31021,31022,31024,31026],{"class":281,"line":1215},[152,31023,294],{"class":293},[152,31025,1220],{"class":289},[152,31027,878],{"class":293},[152,31029,31030,31032],{"class":281,"line":1225},[152,31031,855],{"class":293},[152,31033,878],{"class":293},[152,31035,31036],{"class":281,"line":1232},[152,31037,300],{"class":289},[152,31039,31040],{"class":281,"line":1237},[152,31041,307],{"emptyLinePlaceholder":306},[152,31043,31044,31046,31048,31050],{"class":281,"line":1242},[152,31045,1009],{"class":285},[152,31047,754],{"class":289},[152,31049,290],{"class":289},[152,31051,878],{"class":293},[152,31053,31054,31056,31058],{"class":281,"line":1253},[152,31055,883],{"class":483},[152,31057,886],{"class":289},[152,31059,878],{"class":293},[152,31061,31062,31064,31066],{"class":281,"line":1262},[152,31063,294],{"class":293},[152,31065,1267],{"class":289},[152,31067,878],{"class":293},[152,31069,31070,31072],{"class":281,"line":1272},[152,31071,855],{"class":293},[152,31073,878],{"class":293},[152,31075,31076],{"class":281,"line":1279},[152,31077,300],{"class":289},[152,31079,31080],{"class":281,"line":1284},[152,31081,307],{"emptyLinePlaceholder":306},[152,31083,31084,31086,31088,31090],{"class":281,"line":1289},[152,31085,1292],{"class":285},[152,31087,754],{"class":289},[152,31089,290],{"class":289},[152,31091,878],{"class":293},[152,31093,31094,31096,31098],{"class":281,"line":1301},[152,31095,883],{"class":483},[152,31097,886],{"class":289},[152,31099,878],{"class":293},[152,31101,31102,31104,31106],{"class":281,"line":1310},[152,31103,294],{"class":293},[152,31105,1315],{"class":289},[152,31107,878],{"class":293},[152,31109,31110,31112],{"class":281,"line":1320},[152,31111,855],{"class":293},[152,31113,878],{"class":293},[152,31115,31116],{"class":281,"line":1327},[152,31117,300],{"class":289},[19,31119,1332],{},[19,31121,31122],{},[401,31123],{"alt":275,"src":1337},[19,31125,31126],{},[401,31127],{"alt":275,"src":1342},[262,31129,1346],{"id":1345},[270,31131,31132],{"className":272,"code":1349,"language":274,"meta":275,"style":275},[277,31133,31134,31138],{"__ignoreMap":275},[152,31135,31136],{"class":281,"line":282},[152,31137,1356],{"class":866},[152,31139,31140,31142,31144,31146],{"class":281,"line":303},[152,31141,286],{"class":285},[152,31143,1363],{"class":289},[152,31145,1366],{"class":289},[152,31147,1369],{"class":293},[19,31149,31150],{},[401,31151],{"alt":275,"src":1374},[14,31153,1378],{"id":1377},[262,31155,1382],{"id":1381},[19,31157,1385],{},[19,31159,1388],{},[19,31161,1391],{},[270,31163,31164],{"className":272,"code":1394,"language":274,"meta":275,"style":275},[277,31165,31166,31172],{"__ignoreMap":275},[152,31167,31168,31170],{"class":281,"line":282},[152,31169,50],{"class":285},[152,31171,1403],{"class":289},[152,31173,31174,31176,31178,31180,31182],{"class":281,"line":303},[152,31175,100],{"class":285},[152,31177,1410],{"class":289},[152,31179,1413],{"class":289},[152,31181,1416],{"class":476},[152,31183,1419],{"class":289},[19,31185,1422],{},[19,31187,1425],{},[270,31189,31190],{"className":272,"code":1428,"language":274,"meta":275,"style":275},[277,31191,31192],{"__ignoreMap":275},[152,31193,31194,31196,31198,31200,31202],{"class":281,"line":282},[152,31195,286],{"class":285},[152,31197,290],{"class":289},[152,31199,294],{"class":293},[152,31201,1441],{"class":289},[152,31203,300],{"class":289},[19,31205,1446],{},[19,31207,1449],{},[270,31209,31210],{"className":272,"code":1452,"language":274,"meta":275,"style":275},[277,31211,31212],{"__ignoreMap":275},[152,31213,31214,31216,31218,31220,31222,31224],{"class":281,"line":282},[152,31215,286],{"class":285},[152,31217,784],{"class":289},[152,31219,1463],{"class":293},[152,31221,799],{"class":293},[152,31223,1468],{"class":289},[152,31225,1471],{"class":289},[19,31227,1474,31228],{},[69,31229,1479],{"href":1477,"rel":31230},[245],[19,31232,31233],{},[401,31234],{"alt":275,"src":1484},[19,31236,31237],{},[401,31238],{"alt":275,"src":1489},[262,31240,1493],{"id":1492},[19,31242,1496],{},[19,31244,1499],{},[19,31246,1502],{},[19,31248,1505],{},[270,31250,31251],{"className":1508,"code":1509,"language":1510,"meta":275,"style":275},[277,31252,31253,31257,31261,31265,31269,31273,31277,31281],{"__ignoreMap":275},[152,31254,31255],{"class":281,"line":282},[152,31256,1517],{},[152,31258,31259],{"class":281,"line":303},[152,31260,1522],{},[152,31262,31263],{"class":281,"line":310},[152,31264,1527],{},[152,31266,31267],{"class":281,"line":324},[152,31268,1532],{},[152,31270,31271],{"class":281,"line":329},[152,31272,1537],{},[152,31274,31275],{"class":281,"line":343},[152,31276,1542],{},[152,31278,31279],{"class":281,"line":348},[152,31280,1547],{},[152,31282,31283],{"class":281,"line":362},[152,31284,1552],{},[19,31286,1555],{},[270,31288,31289],{"className":272,"code":1558,"language":274,"meta":275,"style":275},[277,31290,31291],{"__ignoreMap":275},[152,31292,31293,31295,31297,31299,31301],{"class":281,"line":282},[152,31294,286],{"class":285},[152,31296,290],{"class":289},[152,31298,294],{"class":293},[152,31300,1571],{"class":289},[152,31302,300],{"class":289},[19,31304,1576],{},[19,31306,31307],{},[401,31308],{"alt":275,"src":1581},[19,31310,1584],{},[270,31312,31313],{"className":272,"code":1587,"language":274,"meta":275,"style":275},[277,31314,31315],{"__ignoreMap":275},[152,31316,31317,31319,31321,31323,31325,31327],{"class":281,"line":282},[152,31318,286],{"class":285},[152,31320,784],{"class":289},[152,31322,1463],{"class":293},[152,31324,799],{"class":293},[152,31326,1602],{"class":289},[152,31328,1605],{"class":289},[19,31330,1608],{},[270,31332,31333],{"className":272,"code":1611,"language":274,"meta":275,"style":275},[277,31334,31335,31339,31353,31361,31369,31375],{"__ignoreMap":275},[152,31336,31337],{"class":281,"line":282},[152,31338,1618],{"class":866},[152,31340,31341,31343,31345,31347,31349,31351],{"class":281,"line":303},[152,31342,286],{"class":285},[152,31344,784],{"class":289},[152,31346,1627],{"class":293},[152,31348,799],{"class":293},[152,31350,1602],{"class":289},[152,31352,878],{"class":293},[152,31354,31355,31357,31359],{"class":281,"line":310},[152,31356,1638],{"class":483},[152,31358,1641],{"class":289},[152,31360,1644],{"class":293},[152,31362,31363,31365,31367],{"class":281,"line":324},[152,31364,1638],{"class":483},[152,31366,1651],{"class":289},[152,31368,1644],{"class":293},[152,31370,31371,31373],{"class":281,"line":329},[152,31372,1658],{"class":483},[152,31374,1661],{"class":293},[152,31376,31377],{"class":281,"line":343},[152,31378,1666],{"class":483},[19,31380,1669],{},[19,31382,31383],{},[401,31384],{"alt":275,"src":1674},[262,31386,1678],{"id":1677},[19,31388,1681],{},[19,31390,1684,31391],{},[69,31392,1687],{"href":1687,"rel":31393},[245],[19,31395,1691],{},[19,31397,1694],{},[19,31399,31400],{},[401,31401],{"alt":275,"src":1699},[19,31403,1702],{},[270,31405,31406],{"className":272,"code":1705,"language":274,"meta":275,"style":275},[277,31407,31408],{"__ignoreMap":275},[152,31409,31410,31412,31414,31416],{"class":281,"line":282},[152,31411,286],{"class":285},[152,31413,471],{"class":289},[152,31415,1571],{"class":289},[152,31417,1718],{"class":289},[19,31419,1721],{},[270,31421,31422],{"className":272,"code":1724,"language":274,"meta":275,"style":275},[277,31423,31424],{"__ignoreMap":275},[152,31425,31426,31428,31430],{"class":281,"line":282},[152,31427,286],{"class":285},[152,31429,593],{"class":289},[152,31431,1718],{"class":289},[1736,31433,1738],{},{"title":275,"searchDepth":303,"depth":303,"links":31435},[31436,31437,31438],{"id":16,"depth":310,"text":17},{"id":259,"depth":310,"text":260},{"id":1377,"depth":310,"text":1378},{},{"title":5,"description":275},{"id":31442,"title":31443,"body":31444,"description":275,"extension":1744,"meta":31587,"navigation":306,"path":31588,"seo":31589,"stem":31590,"__hash__":31591},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31445,"toc":31585},[31446,31449,31454,31459,31462,31467,31472,31475,31480,31485,31488,31493,31496,31499,31502,31505,31508,31511,31531,31553,31556,31559,31579,31582],[10,31447,31443],{"id":31448},"_7vscode远程开发",[416,31450,31451],{},[419,31452,31453],{},"插件1：微软Docker工具",[19,31455,31456],{},[401,31457],{"alt":275,"src":31458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31460,31461],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31463,31464],{},[401,31465],{"alt":275,"src":31466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[416,31468,31469],{"start":303},[419,31470,31471],{},"插件2：微软Docker远程开发工具",[19,31473,31474],{},"下面这是远程开发的插件。",[19,31476,31477],{},[401,31478],{"alt":275,"src":31479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31481,31482],{},[401,31483],{"alt":275,"src":31484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31486,31487],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31489,31490],{},[401,31491],{"alt":275,"src":31492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31494,31495],{},"安装完拓展之后，vscode进行链接：",[19,31497,31498],{},"1.按ctrl+shift+p",[19,31500,31501],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31503,31504],{},"3.选择目前运行的容器",[19,31506,31507],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31509,31510],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[270,31512,31514],{"className":272,"code":31513,"language":274,"meta":275,"style":275},"docker run -v 主机目录:容器目录 image-name\n",[277,31515,31516],{"__ignoreMap":275},[152,31517,31518,31520,31522,31525,31528],{"class":281,"line":282},[152,31519,286],{"class":285},[152,31521,784],{"class":289},[152,31523,31524],{"class":293}," -v",[152,31526,31527],{"class":289}," 主机目录:容器目录",[152,31529,31530],{"class":289}," image-name\n",[270,31532,31534],{"className":272,"code":31533,"language":274,"meta":275,"style":275},"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",[277,31535,31536],{"__ignoreMap":275},[152,31537,31538,31540,31542,31545,31547,31550],{"class":281,"line":282},[152,31539,286],{"class":285},[152,31541,784],{"class":289},[152,31543,31544],{"class":293}," -it",[152,31546,31524],{"class":293},[152,31548,31549],{"class":289}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[152,31551,31552],{"class":289}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,31554,31555],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,31557,31558],{},"查看挂载情况：",[270,31560,31562],{"className":272,"code":31561,"language":274,"meta":275,"style":275},"mount | grep -i project\n",[277,31563,31564],{"__ignoreMap":275},[152,31565,31566,31569,31571,31574,31576],{"class":281,"line":282},[152,31567,31568],{"class":285},"mount",[152,31570,26720],{"class":476},[152,31572,31573],{"class":285}," grep",[152,31575,28035],{"class":293},[152,31577,31578],{"class":289}," project\n",[19,31580,31581],{},"也可以通过ls来进行查看",[1736,31583,31584],{},"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":275,"searchDepth":303,"depth":303,"links":31586},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31443,"description":275},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31593,"title":31594,"body":31595,"description":24991,"extension":1744,"meta":31599,"navigation":306,"path":31601,"seo":31602,"stem":31603,"__hash__":31604},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31596,"toc":31597},[],{"title":275,"searchDepth":303,"depth":303,"links":31598},[],{"category":31600},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31594,"description":24991},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31606,"title":31607,"body":31608,"description":24991,"extension":1744,"meta":31612,"navigation":306,"path":31613,"seo":31614,"stem":31615,"__hash__":31616},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31609,"toc":31610},[],{"title":275,"searchDepth":303,"depth":303,"links":31611},[],{"category":31600},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31607,"description":24991},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31618,"title":31619,"body":31620,"description":24991,"extension":1744,"meta":31913,"navigation":306,"path":31914,"seo":31915,"stem":31916,"__hash__":31917},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31621,"toc":31911},[31622,31625,31633,31648,31653,31704,31707,31713,31900,31905,31908],[10,31623,31619],{"id":31624},"_1验证深度学习环境",[19,31626,31627,31628],{},"关于环境的安装，看",[69,31629,31632],{"href":31630,"rel":31631},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[245],"Pytorch-->深度学习",[19,31634,31635,31636,31639,31640,31643,31644,31647],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[277,31637,31638],{},"pytorch-cuda=12.4"," 是一个“ ",[694,31641,31642],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[694,31645,31646],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,31649,31650],{},[401,31651],{"alt":275,"src":31652},"\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",[270,31654,31656],{"className":272,"code":31655,"language":274,"meta":275,"style":275},"# 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",[277,31657,31658,31663],{"__ignoreMap":275},[152,31659,31660],{"class":281,"line":282},[152,31661,31662],{"class":866},"# CUDA 12.4\n",[152,31664,31665,31668,31670,31673,31676,31679,31682,31685,31687,31690,31693,31696,31699,31701],{"class":281,"line":303},[152,31666,31667],{"class":285},"conda",[152,31669,25446],{"class":289},[152,31671,31672],{"class":289}," pytorch==",[152,31674,31675],{"class":293},"2.5.1",[152,31677,31678],{"class":289}," torchvision==",[152,31680,31681],{"class":293},"0.20.1",[152,31683,31684],{"class":289}," torchaudio==",[152,31686,31675],{"class":293},[152,31688,31689],{"class":289}," pytorch-cuda=",[152,31691,31692],{"class":293},"12.4",[152,31694,31695],{"class":293}," -c",[152,31697,31698],{"class":289}," pytorch",[152,31700,31695],{"class":293},[152,31702,31703],{"class":289}," nvidia\n",[19,31705,31706],{},"）：",[19,31708,31709],{},[69,31710,31711],{"href":31711,"rel":31712},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[245],[270,31714,31718],{"className":31715,"code":31716,"language":31717,"meta":275,"style":275},"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",[277,31719,31720,31725,31733,31738,31748,31764,31769,31779,31816,31823,31835,31851,31856,31866,31878,31888],{"__ignoreMap":275},[152,31721,31722],{"class":281,"line":282},[152,31723,31724],{"class":866},"# 对深度学习环境进行测试\n",[152,31726,31727,31730],{"class":281,"line":303},[152,31728,31729],{"class":476},"import",[152,31731,31732],{"class":483}," torch\n",[152,31734,31735],{"class":281,"line":310},[152,31736,31737],{"class":866},"# 查看cuda是否被激活\n",[152,31739,31740,31743,31745],{"class":281,"line":324},[152,31741,31742],{"class":483},"flag",[152,31744,1864],{"class":476},[152,31746,31747],{"class":483},"torch.cuda.is_available()\n",[152,31749,31750,31753,31755,31758,31761],{"class":281,"line":329},[152,31751,31752],{"class":293},"print",[152,31754,1819],{"class":483},[152,31756,31757],{"class":289},"\"cuda:\"",[152,31759,31760],{"class":483},", flag)   ",[152,31762,31763],{"class":866},"#返回true的话说明被激活\n",[152,31765,31766],{"class":281,"line":343},[152,31767,31768],{"class":866},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[152,31770,31771,31774,31776],{"class":281,"line":348},[152,31772,31773],{"class":483},"ngpu",[152,31775,1864],{"class":476},[152,31777,31778],{"class":293},"1\n",[152,31780,31781,31784,31786,31789,31792,31794,31797,31800,31803,31805,31807,31809,31811,31814],{"class":281,"line":362},[152,31782,31783],{"class":483},"device",[152,31785,1864],{"class":476},[152,31787,31788],{"class":483},"torch.device(",[152,31790,31791],{"class":289},"\"cuda:0\"",[152,31793,3364],{"class":476},[152,31795,31796],{"class":483},"(torch.cuda.is_available() ",[152,31798,31799],{"class":476},"and",[152,31801,31802],{"class":483}," ngpu",[152,31804,487],{"class":476},[152,31806,2000],{"class":293},[152,31808,15330],{"class":483},[152,31810,3361],{"class":476},[152,31812,31813],{"class":289}," \"cpu\"",[152,31815,1825],{"class":483},[152,31817,31818,31820],{"class":281,"line":367},[152,31819,31752],{"class":293},[152,31821,31822],{"class":483},"(device)\n",[152,31824,31825,31827,31830,31832],{"class":281,"line":381},[152,31826,31752],{"class":293},[152,31828,31829],{"class":483},"(torch.cuda.get_device_name(",[152,31831,2000],{"class":293},[152,31833,31834],{"class":483},"))\n",[152,31836,31837,31839,31842,31844,31846,31848],{"class":281,"line":386},[152,31838,31752],{"class":293},[152,31840,31841],{"class":483},"(torch.rand(",[152,31843,1888],{"class":293},[152,31845,2186],{"class":483},[152,31847,1888],{"class":293},[152,31849,31850],{"class":483},").cuda())\n",[152,31852,31853],{"class":281,"line":932},[152,31854,31855],{"class":866},"# 查看cuda和cudnn的版本\n",[152,31857,31858,31861,31863],{"class":281,"line":942},[152,31859,31860],{"class":483},"cuda_version",[152,31862,1864],{"class":476},[152,31864,31865],{"class":483},"torch.version.cuda\n",[152,31867,31868,31870,31872,31875],{"class":281,"line":949},[152,31869,31752],{"class":293},[152,31871,1819],{"class":483},[152,31873,31874],{"class":289},"\"cuda version\"",[152,31876,31877],{"class":483},",cuda_version)\n",[152,31879,31880,31883,31885],{"class":281,"line":954},[152,31881,31882],{"class":483},"cudnn_version",[152,31884,1864],{"class":476},[152,31886,31887],{"class":483},"torch.backends.cudnn.version()\n",[152,31889,31890,31892,31894,31897],{"class":281,"line":959},[152,31891,31752],{"class":293},[152,31893,1819],{"class":483},[152,31895,31896],{"class":289},"\"cudnn version\"",[152,31898,31899],{"class":483},",cudnn_version)\n",[19,31901,31902],{},[401,31903],{"alt":275,"src":31904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,31906,31907],{},"cuda:0 指的是一块显卡",[1736,31909,31910],{},"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":275,"searchDepth":303,"depth":303,"links":31912},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31619,"description":24991},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31919,"title":31920,"body":31921,"description":24991,"extension":1744,"meta":51725,"navigation":306,"path":51726,"seo":51727,"stem":51728,"__hash__":51729},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31922,"toc":51719},[31923,31926,31930,31934,31937,31942,31947,31950,31955,31960,31965,31968,31972,31977,31981,31986,31989,31994,31997,32000,32003,32006,32011,32014,32019,32024,32029,32034,32037,32041,32044,32049,32653,32658,32661,32666,32669,32672,33136,33139,33142,33145,33148,35199,35202,35207,35212,36007,36010,36015,36793,36797,38456,38460,39174,39178,39182,39187,39192,39197,39200,39205,39210,39215,39220,39225,39229,39234,40516,40521,40524,40527,40530,40685,40688,40691,41907,41912,42607,42611,42615,42620,42625,42628,42633,42638,42643,42648,42653,42658,42663,42668,42673,42678,42683,42688,42693,42698,42703,42708,42713,42718,42723,42728,42733,42738,42743,42748,42753,42758,42763,42768,42773,42778,42782,42786,42789,44267,44271,45918,45922,46616,46620,46623,46626,47170,47173,47177,47180,48577,48581,48584,49162,50949,50953,50956,51716],[10,31924,31920],{"id":31925},"_2经典神经网络",[14,31927,31929],{"id":31928},"_21lenet与alexnet","2.1.LeNet与AlexNet",[262,31931,31933],{"id":31932},"_211原理介绍","2.1.1.原理介绍",[19,31935,31936],{},"LeNet-5",[416,31938,31939],{},[419,31940,31941],{},"原理",[19,31943,31944],{},[401,31945],{"alt":275,"src":31946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,31948,31949],{},"B是batch批次；C是channel通道",[416,31951,31952],{"start":303},[419,31953,31954],{},"网络参数详细",[19,31956,31957],{},[401,31958],{"alt":275,"src":31959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,31961,31962],{},[401,31963],{"alt":275,"src":31964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[19,31966,31967],{},"AlexNet",[416,31969,31970],{},[419,31971,31941],{},[19,31973,31974],{},[401,31975],{"alt":275,"src":31976},"\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",[416,31978,31979],{"start":303},[419,31980,31954],{},[19,31982,31983],{},[401,31984],{"alt":275,"src":31985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,31987,31988],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31990,31991],{},[401,31992],{"alt":275,"src":31993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[19,31995,31996],{},"数据处理中的图像增强操作:",[19,31998,31999],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32001,32002],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32004,32005],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32007,32008],{},[401,32009],{"alt":275,"src":32010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[19,32012,32013],{},"提升网络精确度的方法：LRN正则化",[19,32015,32016],{},[401,32017],{"alt":275,"src":32018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[19,32020,32021],{},[401,32022],{"alt":275,"src":32023},"\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",[416,32025,32026],{"start":310},[419,32027,32028],{},"AlexNet的总结",[19,32030,32031],{},[401,32032],{"alt":275,"src":32033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,32035,32036],{},"比LeNet模型要深一丢丢",[262,32038,32040],{"id":32039},"_212代码实现","2.1.2.代码实现",[19,32042,32043],{},"（1）LeNet",[416,32045,32046],{},[419,32047,32048],{},"模型搭建",[270,32050,32052],{"className":31715,"code":32051,"language":31717,"meta":275,"style":275},"# 导入库\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",[277,32053,32054,32059,32065,32070,32083,32088,32100,32104,32124,32129,32134,32145,32150,32169,32173,32178,32227,32239,32244,32273,32308,32335,32340,32352,32357,32377,32396,32415,32419,32424,32434,32451,32462,32477,32488,32499,32514,32529,32540,32547,32551,32565,32570,32593,32598,32603,32608,32612,32617,32622,32632],{"__ignoreMap":275},[152,32055,32056],{"class":281,"line":282},[152,32057,32058],{"class":866},"# 导入库\n",[152,32060,32061,32063],{"class":281,"line":303},[152,32062,31729],{"class":476},[152,32064,31732],{"class":483},[152,32066,32067],{"class":281,"line":310},[152,32068,32069],{"class":866},"# 导入神经网络层\n",[152,32071,32072,32075,32078,32080],{"class":281,"line":324},[152,32073,32074],{"class":476},"from",[152,32076,32077],{"class":483}," torch ",[152,32079,31729],{"class":476},[152,32081,32082],{"class":483}," nn\n",[152,32084,32085],{"class":281,"line":329},[152,32086,32087],{"class":866},"# 导入展示神经网络参数的包\n",[152,32089,32090,32092,32095,32097],{"class":281,"line":343},[152,32091,32074],{"class":476},[152,32093,32094],{"class":483}," torchsummary ",[152,32096,31729],{"class":476},[152,32098,32099],{"class":483}," summary\n",[152,32101,32102],{"class":281,"line":348},[152,32103,307],{"emptyLinePlaceholder":306},[152,32105,32106,32108,32111,32113,32116,32118,32121],{"class":281,"line":362},[152,32107,16309],{"class":476},[152,32109,32110],{"class":285}," LeNet",[152,32112,1819],{"class":483},[152,32114,32115],{"class":285},"nn",[152,32117,2366],{"class":483},[152,32119,32120],{"class":285},"Module",[152,32122,32123],{"class":483},"):\n",[152,32125,32126],{"class":281,"line":367},[152,32127,32128],{"class":866},"    # 模型初始化:\n",[152,32130,32131],{"class":281,"line":381},[152,32132,32133],{"class":866},"    # 定义一些网络层和激活函数\n",[152,32135,32136,32139,32142],{"class":281,"line":386},[152,32137,32138],{"class":476},"    def",[152,32140,32141],{"class":293}," __init__",[152,32143,32144],{"class":483},"(self):\n",[152,32146,32147],{"class":281,"line":932},[152,32148,32149],{"class":866},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[152,32151,32152,32155,32158,32161,32164,32167],{"class":281,"line":942},[152,32153,32154],{"class":293},"        super",[152,32156,32157],{"class":483},"(LeNet,",[152,32159,32160],{"class":293},"self",[152,32162,32163],{"class":483},").",[152,32165,32166],{"class":293},"__init__",[152,32168,3627],{"class":483},[152,32170,32171],{"class":281,"line":949},[152,32172,307],{"emptyLinePlaceholder":306},[152,32174,32175],{"class":281,"line":954},[152,32176,32177],{"class":866},"        # 定义网络层\n",[152,32179,32180,32183,32186,32188,32191,32194,32196,32198,32200,32203,32205,32207,32209,32212,32214,32216,32218,32221,32223,32225],{"class":281,"line":959},[152,32181,32182],{"class":293},"        self",[152,32184,32185],{"class":483},".c1",[152,32187,1864],{"class":476},[152,32189,32190],{"class":483},"nn.Conv2d(",[152,32192,32193],{"class":6858},"in_channels",[152,32195,1864],{"class":476},[152,32197,2026],{"class":293},[152,32199,2186],{"class":483},[152,32201,32202],{"class":6858},"out_channels",[152,32204,1864],{"class":476},[152,32206,2152],{"class":293},[152,32208,2186],{"class":483},[152,32210,32211],{"class":6858},"kernel_size",[152,32213,1864],{"class":476},[152,32215,2127],{"class":293},[152,32217,2186],{"class":483},[152,32219,32220],{"class":6858},"padding",[152,32222,1864],{"class":476},[152,32224,1894],{"class":293},[152,32226,1825],{"class":483},[152,32228,32229,32231,32234,32236],{"class":281,"line":970},[152,32230,32182],{"class":293},[152,32232,32233],{"class":483},".sig",[152,32235,1864],{"class":476},[152,32237,32238],{"class":483},"nn.Sigmoid()\n",[152,32240,32241],{"class":281,"line":979},[152,32242,32243],{"class":866},"        # 定义池化\n",[152,32245,32246,32248,32251,32253,32256,32258,32260,32262,32264,32267,32269,32271],{"class":281,"line":989},[152,32247,32182],{"class":293},[152,32249,32250],{"class":483},".s2",[152,32252,1864],{"class":476},[152,32254,32255],{"class":483},"nn.AvgPool2d(",[152,32257,32211],{"class":6858},[152,32259,1864],{"class":476},[152,32261,1894],{"class":293},[152,32263,2186],{"class":483},[152,32265,32266],{"class":6858},"stride",[152,32268,1864],{"class":476},[152,32270,1894],{"class":293},[152,32272,1825],{"class":483},[152,32274,32275,32277,32280,32282,32284,32286,32288,32290,32292,32294,32296,32298,32300,32302,32304,32306],{"class":281,"line":996},[152,32276,32182],{"class":293},[152,32278,32279],{"class":483},".c3",[152,32281,1864],{"class":476},[152,32283,32190],{"class":483},[152,32285,32193],{"class":6858},[152,32287,1864],{"class":476},[152,32289,2152],{"class":293},[152,32291,2186],{"class":483},[152,32293,32202],{"class":6858},[152,32295,1864],{"class":476},[152,32297,2409],{"class":293},[152,32299,2186],{"class":483},[152,32301,32211],{"class":6858},[152,32303,1864],{"class":476},[152,32305,2127],{"class":293},[152,32307,1825],{"class":483},[152,32309,32310,32312,32315,32317,32319,32321,32323,32325,32327,32329,32331,32333],{"class":281,"line":1001},[152,32311,32182],{"class":293},[152,32313,32314],{"class":483},".s4",[152,32316,1864],{"class":476},[152,32318,32255],{"class":483},[152,32320,32211],{"class":6858},[152,32322,1864],{"class":476},[152,32324,1894],{"class":293},[152,32326,2186],{"class":483},[152,32328,32266],{"class":6858},[152,32330,1864],{"class":476},[152,32332,1894],{"class":293},[152,32334,1825],{"class":483},[152,32336,32337],{"class":281,"line":1006},[152,32338,32339],{"class":866},"        # 定义平展层\n",[152,32341,32342,32344,32347,32349],{"class":281,"line":1018},[152,32343,32182],{"class":293},[152,32345,32346],{"class":483},".flatten",[152,32348,1864],{"class":476},[152,32350,32351],{"class":483},"nn.Flatten()\n",[152,32353,32354],{"class":281,"line":1027},[152,32355,32356],{"class":866},"        # 定义全连接层\n",[152,32358,32359,32361,32364,32366,32369,32371,32373,32375],{"class":281,"line":1037},[152,32360,32182],{"class":293},[152,32362,32363],{"class":483},".f5",[152,32365,1864],{"class":476},[152,32367,32368],{"class":483},"nn.Linear(",[152,32370,5629],{"class":293},[152,32372,2186],{"class":483},[152,32374,2625],{"class":293},[152,32376,1825],{"class":483},[152,32378,32379,32381,32384,32386,32388,32390,32392,32394],{"class":281,"line":1044},[152,32380,32182],{"class":293},[152,32382,32383],{"class":483},".f6",[152,32385,1864],{"class":476},[152,32387,32368],{"class":483},[152,32389,2625],{"class":293},[152,32391,2186],{"class":483},[152,32393,2519],{"class":293},[152,32395,1825],{"class":483},[152,32397,32398,32400,32403,32405,32407,32409,32411,32413],{"class":281,"line":1049},[152,32399,32182],{"class":293},[152,32401,32402],{"class":483},".f7",[152,32404,1864],{"class":476},[152,32406,32368],{"class":483},[152,32408,2519],{"class":293},[152,32410,2186],{"class":483},[152,32412,2254],{"class":293},[152,32414,1825],{"class":483},[152,32416,32417],{"class":281,"line":1054},[152,32418,307],{"emptyLinePlaceholder":306},[152,32420,32421],{"class":281,"line":1065},[152,32422,32423],{"class":866},"    # 写工具->写前向传播\n",[152,32425,32426,32428,32431],{"class":281,"line":1074},[152,32427,32138],{"class":476},[152,32429,32430],{"class":285}," forward",[152,32432,32433],{"class":483},"(self,x):\n",[152,32435,32436,32439,32441,32443,32446,32448],{"class":281,"line":1084},[152,32437,32438],{"class":483},"        x",[152,32440,1864],{"class":476},[152,32442,32160],{"class":293},[152,32444,32445],{"class":483},".sig(",[152,32447,32160],{"class":293},[152,32449,32450],{"class":483},".c1(x))\n",[152,32452,32453,32455,32457,32459],{"class":281,"line":1091},[152,32454,32438],{"class":483},[152,32456,1864],{"class":476},[152,32458,32160],{"class":293},[152,32460,32461],{"class":483},".s2(x)\n",[152,32463,32464,32466,32468,32470,32472,32474],{"class":281,"line":1096},[152,32465,32438],{"class":483},[152,32467,1864],{"class":476},[152,32469,32160],{"class":293},[152,32471,32445],{"class":483},[152,32473,32160],{"class":293},[152,32475,32476],{"class":483},".c3(x))\n",[152,32478,32479,32481,32483,32485],{"class":281,"line":1101},[152,32480,32438],{"class":483},[152,32482,1864],{"class":476},[152,32484,32160],{"class":293},[152,32486,32487],{"class":483},".s4(x)\n",[152,32489,32490,32492,32494,32496],{"class":281,"line":1112},[152,32491,32438],{"class":483},[152,32493,1864],{"class":476},[152,32495,32160],{"class":293},[152,32497,32498],{"class":483},".flatten(x)\n",[152,32500,32501,32503,32505,32507,32509,32511],{"class":281,"line":1121},[152,32502,32438],{"class":483},[152,32504,1864],{"class":476},[152,32506,32160],{"class":293},[152,32508,32445],{"class":483},[152,32510,32160],{"class":293},[152,32512,32513],{"class":483},".f5(x))\n",[152,32515,32516,32518,32520,32522,32524,32526],{"class":281,"line":1131},[152,32517,32438],{"class":483},[152,32519,1864],{"class":476},[152,32521,32160],{"class":293},[152,32523,32445],{"class":483},[152,32525,32160],{"class":293},[152,32527,32528],{"class":483},".f6(x))\n",[152,32530,32531,32533,32535,32537],{"class":281,"line":1138},[152,32532,32438],{"class":483},[152,32534,1864],{"class":476},[152,32536,32160],{"class":293},[152,32538,32539],{"class":483},".f7(x)\n",[152,32541,32542,32544],{"class":281,"line":1143},[152,32543,16367],{"class":476},[152,32545,32546],{"class":483}," x\n",[152,32548,32549],{"class":281,"line":1148},[152,32550,307],{"emptyLinePlaceholder":306},[152,32552,32553,32555,32558,32560,32563],{"class":281,"line":1159},[152,32554,3202],{"class":476},[152,32556,32557],{"class":293}," __name__",[152,32559,4592],{"class":476},[152,32561,32562],{"class":289},"\"__main__\"",[152,32564,5382],{"class":483},[152,32566,32567],{"class":281,"line":1168},[152,32568,32569],{"class":866},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[152,32571,32572,32575,32577,32579,32582,32584,32587,32589,32591],{"class":281,"line":1178},[152,32573,32574],{"class":483},"    device",[152,32576,1864],{"class":476},[152,32578,31788],{"class":483},[152,32580,32581],{"class":289},"\"cuda\"",[152,32583,3364],{"class":476},[152,32585,32586],{"class":483}," torch.cuda.is_available() ",[152,32588,3361],{"class":476},[152,32590,31813],{"class":289},[152,32592,1825],{"class":483},[152,32594,32595],{"class":281,"line":1185},[152,32596,32597],{"class":866},"    # 如果就是想指定用cpu用下方代码:\n",[152,32599,32600],{"class":281,"line":1190},[152,32601,32602],{"class":866},"    # device=\"cpu\"\n",[152,32604,32605],{"class":281,"line":1195},[152,32606,32607],{"class":866},"    # print(device)\n",[152,32609,32610],{"class":281,"line":1206},[152,32611,307],{"emptyLinePlaceholder":306},[152,32613,32614],{"class":281,"line":1215},[152,32615,32616],{"class":866},"    # 实例化模型\n",[152,32618,32619],{"class":281,"line":1225},[152,32620,32621],{"class":866},"    # 将模型放到设备中去运行\n",[152,32623,32624,32627,32629],{"class":281,"line":1232},[152,32625,32626],{"class":483},"    model",[152,32628,1864],{"class":476},[152,32630,32631],{"class":483},"LeNet().to(device)\n",[152,32633,32634,32637,32640,32642,32644,32646,32648,32650],{"class":281,"line":1237},[152,32635,32636],{"class":293},"    print",[152,32638,32639],{"class":483},"(summary(model,(",[152,32641,2026],{"class":293},[152,32643,2186],{"class":483},[152,32645,2708],{"class":293},[152,32647,2186],{"class":483},[152,32649,2708],{"class":293},[152,32651,32652],{"class":483},")))\n",[19,32654,32655],{},[401,32656],{"alt":275,"src":32657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[19,32659,32660],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[416,32662,32663],{"start":303},[419,32664,32665],{},"训练",[19,32667,32668],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,32670,32671],{},"在训练之前可以将数据展示看一下",[270,32673,32675],{"className":31715,"code":32674,"language":31717,"meta":275,"style":275},"# 建立画图的函数，用于展示数据\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",[277,32676,32677,32682,32687,32699,32711,32724,32729,32741,32746,32758,32763,32775,32779,32783,32804,32816,32821,32842,32853,32857,32862,32880,32891,32896,32907,32912,32923,32927,32932,32947,32960,32965,32970,32983,32996,33009,33014,33018,33023,33043,33060,33080,33093,33106,33116,33131],{"__ignoreMap":275},[152,32678,32679],{"class":281,"line":282},[152,32680,32681],{"class":866},"# 建立画图的函数，用于展示数据\n",[152,32683,32684],{"class":281,"line":303},[152,32685,32686],{"class":866},"# torchvision中包含很多内置的数据集\n",[152,32688,32689,32691,32694,32696],{"class":281,"line":310},[152,32690,32074],{"class":476},[152,32692,32693],{"class":483}," sklearn.externals.array_api_compat.torch ",[152,32695,31729],{"class":476},[152,32697,32698],{"class":483}," squeeze\n",[152,32700,32701,32703,32706,32708],{"class":281,"line":324},[152,32702,32074],{"class":476},[152,32704,32705],{"class":483}," torchvision.datasets ",[152,32707,31729],{"class":476},[152,32709,32710],{"class":483}," FashionMNIST\n",[152,32712,32713,32715,32718,32721],{"class":281,"line":329},[152,32714,31729],{"class":476},[152,32716,32717],{"class":483}," numpy ",[152,32719,32720],{"class":476},"as",[152,32722,32723],{"class":483}," np\n",[152,32725,32726],{"class":281,"line":343},[152,32727,32728],{"class":866},"# 引入处理数据集的包\n",[152,32730,32731,32733,32736,32738],{"class":281,"line":348},[152,32732,32074],{"class":476},[152,32734,32735],{"class":483}," torchvision ",[152,32737,31729],{"class":476},[152,32739,32740],{"class":483}," transforms\n",[152,32742,32743],{"class":281,"line":362},[152,32744,32745],{"class":866},"# 从torch库中引入数据处理的包\n",[152,32747,32748,32750,32753,32755],{"class":281,"line":367},[152,32749,31729],{"class":476},[152,32751,32752],{"class":483}," torch.utils.data ",[152,32754,32720],{"class":476},[152,32756,32757],{"class":483}," Data\n",[152,32759,32760],{"class":281,"line":381},[152,32761,32762],{"class":866},"# 导入画图的库\n",[152,32764,32765,32767,32770,32772],{"class":281,"line":386},[152,32766,31729],{"class":476},[152,32768,32769],{"class":483}," matplotlib.pyplot ",[152,32771,32720],{"class":476},[152,32773,32774],{"class":483}," plt\n",[152,32776,32777],{"class":281,"line":932},[152,32778,307],{"emptyLinePlaceholder":306},[152,32780,32781],{"class":281,"line":942},[152,32782,307],{"emptyLinePlaceholder":306},[152,32784,32785,32788,32790,32793,32796,32798,32801],{"class":281,"line":949},[152,32786,32787],{"class":483},"train_data",[152,32789,1864],{"class":476},[152,32791,32792],{"class":483},"FashionMNIST(",[152,32794,32795],{"class":6858},"root",[152,32797,1864],{"class":476},[152,32799,32800],{"class":289},"'.\u002Fdata'",[152,32802,32803],{"class":483},",\n",[152,32805,32806,32809,32811,32814],{"class":281,"line":954},[152,32807,32808],{"class":6858},"                        train",[152,32810,1864],{"class":476},[152,32812,32813],{"class":293},"True",[152,32815,32803],{"class":483},[152,32817,32818],{"class":281,"line":959},[152,32819,32820],{"class":866},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[152,32822,32823,32826,32828,32831,32834,32836,32839],{"class":281,"line":970},[152,32824,32825],{"class":6858},"                        transform",[152,32827,1864],{"class":476},[152,32829,32830],{"class":483},"transforms.Compose([transforms.Resize(",[152,32832,32833],{"class":6858},"size",[152,32835,1864],{"class":476},[152,32837,32838],{"class":293},"224",[152,32840,32841],{"class":483},"),transforms.ToTensor()]),\n",[152,32843,32844,32847,32849,32851],{"class":281,"line":979},[152,32845,32846],{"class":6858},"                        download",[152,32848,1864],{"class":476},[152,32850,32813],{"class":293},[152,32852,1825],{"class":483},[152,32854,32855],{"class":281,"line":989},[152,32856,307],{"emptyLinePlaceholder":306},[152,32858,32859],{"class":281,"line":996},[152,32860,32861],{"class":866},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[152,32863,32864,32867,32869,32872,32875,32877],{"class":281,"line":1001},[152,32865,32866],{"class":483},"train_loader",[152,32868,1864],{"class":476},[152,32870,32871],{"class":483},"Data.DataLoader(",[152,32873,32874],{"class":6858},"dataset",[152,32876,1864],{"class":476},[152,32878,32879],{"class":483},"train_data,\n",[152,32881,32882,32885,32887,32889],{"class":281,"line":1006},[152,32883,32884],{"class":6858},"                             batch_size",[152,32886,1864],{"class":476},[152,32888,2012],{"class":293},[152,32890,32803],{"class":483},[152,32892,32893],{"class":281,"line":1018},[152,32894,32895],{"class":866},"                             # 数据是否打乱\n",[152,32897,32898,32901,32903,32905],{"class":281,"line":1027},[152,32899,32900],{"class":6858},"                             shuffle",[152,32902,1864],{"class":476},[152,32904,32813],{"class":293},[152,32906,32803],{"class":483},[152,32908,32909],{"class":281,"line":1037},[152,32910,32911],{"class":866},"                             # 规定加载数据的进程\n",[152,32913,32914,32917,32919,32921],{"class":281,"line":1044},[152,32915,32916],{"class":6858},"                             num_workers",[152,32918,1864],{"class":476},[152,32920,2000],{"class":293},[152,32922,1825],{"class":483},[152,32924,32925],{"class":281,"line":1049},[152,32926,307],{"emptyLinePlaceholder":306},[152,32928,32929],{"class":281,"line":1054},[152,32930,32931],{"class":866},"# 获得一个batch的数据\n",[152,32933,32934,32936,32939,32941,32944],{"class":281,"line":1065},[152,32935,4668],{"class":476},[152,32937,32938],{"class":483}," step,(b_x,b_y) ",[152,32940,27653],{"class":476},[152,32942,32943],{"class":293}," enumerate",[152,32945,32946],{"class":483},"(train_loader):\n",[152,32948,32949,32951,32954,32956,32958],{"class":281,"line":1074},[152,32950,4744],{"class":476},[152,32952,32953],{"class":483}," step ",[152,32955,487],{"class":476},[152,32957,5735],{"class":293},[152,32959,5382],{"class":483},[152,32961,32962],{"class":281,"line":1084},[152,32963,32964],{"class":476},"        break\n",[152,32966,32967],{"class":281,"line":1091},[152,32968,32969],{"class":866},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[152,32971,32972,32975,32977,32980],{"class":281,"line":1096},[152,32973,32974],{"class":483},"batch_x",[152,32976,1864],{"class":476},[152,32978,32979],{"class":483},"b_x.squeeze().numpy()  ",[152,32981,32982],{"class":866},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[152,32984,32985,32988,32990,32993],{"class":281,"line":1101},[152,32986,32987],{"class":483},"batch_y",[152,32989,1864],{"class":476},[152,32991,32992],{"class":483},"b_y.numpy()   ",[152,32994,32995],{"class":866},"#将张量转换成功numpy数组\n",[152,32997,32998,33001,33003,33006],{"class":281,"line":1112},[152,32999,33000],{"class":483},"class_label",[152,33002,1864],{"class":476},[152,33004,33005],{"class":483},"train_data.classes  ",[152,33007,33008],{"class":866},"#训练集标签\n",[152,33010,33011],{"class":281,"line":1121},[152,33012,33013],{"class":866},"# print(class_label)\n",[152,33015,33016],{"class":281,"line":1131},[152,33017,307],{"emptyLinePlaceholder":306},[152,33019,33020],{"class":281,"line":1138},[152,33021,33022],{"class":866},"# 可视化一个batch的图像\n",[152,33024,33025,33028,33031,33033,33035,33037,33039,33041],{"class":281,"line":1143},[152,33026,33027],{"class":483},"plt.figure(",[152,33029,33030],{"class":6858},"figsize",[152,33032,1864],{"class":476},[152,33034,1819],{"class":483},[152,33036,2306],{"class":293},[152,33038,2186],{"class":483},[152,33040,2127],{"class":293},[152,33042,31834],{"class":483},[152,33044,33045,33047,33050,33052,33055,33057],{"class":281,"line":1148},[152,33046,4668],{"class":476},[152,33048,33049],{"class":483}," ii ",[152,33051,27653],{"class":476},[152,33053,33054],{"class":483}," np.arange(",[152,33056,9000],{"class":293},[152,33058,33059],{"class":483},"(batch_y)):\n",[152,33061,33062,33065,33067,33069,33071,33074,33076,33078],{"class":281,"line":1159},[152,33063,33064],{"class":483},"    plt.subplot(",[152,33066,2101],{"class":293},[152,33068,2186],{"class":483},[152,33070,2409],{"class":293},[152,33072,33073],{"class":483},",ii ",[152,33075,2289],{"class":476},[152,33077,26729],{"class":293},[152,33079,1825],{"class":483},[152,33081,33082,33085,33088,33090],{"class":281,"line":1168},[152,33083,33084],{"class":483},"    plt.imshow(batch_x[ii,:,:],",[152,33086,33087],{"class":6858},"cmap",[152,33089,1864],{"class":476},[152,33091,33092],{"class":483},"plt.cm.gray)\n",[152,33094,33095,33098,33100,33102,33104],{"class":281,"line":1178},[152,33096,33097],{"class":483},"    plt.title(class_label[batch_y[ii]],",[152,33099,32833],{"class":6858},[152,33101,1864],{"class":476},[152,33103,2254],{"class":293},[152,33105,1825],{"class":483},[152,33107,33108,33111,33114],{"class":281,"line":1185},[152,33109,33110],{"class":483},"    plt.axis(",[152,33112,33113],{"class":289},"\"off\"",[152,33115,1825],{"class":483},[152,33117,33118,33121,33124,33126,33129],{"class":281,"line":1190},[152,33119,33120],{"class":483},"    plt.subplots_adjust(",[152,33122,33123],{"class":6858},"wspace",[152,33125,1864],{"class":476},[152,33127,33128],{"class":293},"0.05",[152,33130,1825],{"class":483},[152,33132,33133],{"class":281,"line":1195},[152,33134,33135],{"class":483},"plt.show()\n",[19,33137,33138],{},"用matplotlib进行展示的过程可以后续再补",[19,33140,33141],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33143,33144],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33146,33147],{},"模型训练：",[270,33149,33151],{"className":31715,"code":33150,"language":31717,"meta":275,"style":275},"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",[277,33152,33153,33160,33167,33171,33183,33189,33200,33210,33220,33230,33240,33245,33257,33267,33271,33275,33280,33291,33304,33315,33332,33343,33382,33398,33410,33421,33426,33437,33453,33464,33475,33486,33493,33497,33502,33507,33511,33516,33526,33547,33551,33555,33560,33565,33570,33590,33594,33599,33609,33613,33618,33627,33632,33637,33642,33652,33656,33660,33665,33670,33680,33685,33695,33700,33709,33714,33723,33728,33737,33741,33746,33756,33760,33764,33769,33784,33812,33827,33831,33836,33841,33850,33855,33864,33869,33878,33883,33892,33897,33906,33911,33920,33925,33938,33943,33953,33958,33968,33974,33980,33986,33992,34003,34009,34029,34035,34046,34052,34058,34064,34070,34076,34082,34088,34108,34114,34130,34136,34150,34156,34171,34177,34186,34192,34201,34207,34213,34222,34228,34239,34245,34264,34270,34281,34287,34307,34323,34329,34343,34349,34355,34366,34372,34378,34388,34394,34405,34411,34421,34426,34432,34481,34528,34533,34539,34558,34564,34584,34590,34596,34606,34611,34617,34633,34678,34684,34690,34696,34707,34713,34719,34725,34743,34757,34766,34775,34784,34793,34799,34805,34813,34818,34824,34835,34841,34861,34867,34873,34879,34896,34902,34908,34914,34920,34926,34953,34977,34983,34989,34995,35006,35017,35023,35040,35063,35086,35092,35097,35106,35116,35122,35127,35133,35146,35152,35163,35174,35193],{"__ignoreMap":275},[152,33154,33155,33157],{"class":281,"line":282},[152,33156,31729],{"class":476},[152,33158,33159],{"class":483}," copy\n",[152,33161,33162,33164],{"class":281,"line":303},[152,33163,31729],{"class":476},[152,33165,33166],{"class":483}," time\n",[152,33168,33169],{"class":281,"line":310},[152,33170,307],{"emptyLinePlaceholder":306},[152,33172,33173,33175,33178,33180],{"class":281,"line":324},[152,33174,31729],{"class":476},[152,33176,33177],{"class":483}," pandas ",[152,33179,32720],{"class":476},[152,33181,33182],{"class":483}," pd\n",[152,33184,33185,33187],{"class":281,"line":329},[152,33186,31729],{"class":476},[152,33188,31732],{"class":483},[152,33190,33191,33193,33195,33197],{"class":281,"line":343},[152,33192,32074],{"class":476},[152,33194,32752],{"class":483},[152,33196,31729],{"class":476},[152,33198,33199],{"class":483}," Dataset\n",[152,33201,33202,33204,33206,33208],{"class":281,"line":348},[152,33203,32074],{"class":476},[152,33205,32705],{"class":483},[152,33207,31729],{"class":476},[152,33209,32710],{"class":483},[152,33211,33212,33214,33216,33218],{"class":281,"line":362},[152,33213,32074],{"class":476},[152,33215,32735],{"class":483},[152,33217,31729],{"class":476},[152,33219,32740],{"class":483},[152,33221,33222,33224,33226,33228],{"class":281,"line":367},[152,33223,31729],{"class":476},[152,33225,32752],{"class":483},[152,33227,32720],{"class":476},[152,33229,32757],{"class":483},[152,33231,33232,33234,33236,33238],{"class":281,"line":381},[152,33233,31729],{"class":476},[152,33235,32769],{"class":483},[152,33237,32720],{"class":476},[152,33239,32774],{"class":483},[152,33241,33242],{"class":281,"line":386},[152,33243,33244],{"class":866},"# 导入模型\n",[152,33246,33247,33249,33252,33254],{"class":281,"line":932},[152,33248,32074],{"class":476},[152,33250,33251],{"class":483}," model ",[152,33253,31729],{"class":476},[152,33255,33256],{"class":483}," LeNet\n",[152,33258,33259,33261,33263,33265],{"class":281,"line":942},[152,33260,32074],{"class":476},[152,33262,32077],{"class":483},[152,33264,31729],{"class":476},[152,33266,32082],{"class":483},[152,33268,33269],{"class":281,"line":949},[152,33270,307],{"emptyLinePlaceholder":306},[152,33272,33273],{"class":281,"line":954},[152,33274,307],{"emptyLinePlaceholder":306},[152,33276,33277],{"class":281,"line":959},[152,33278,33279],{"class":866},"# 处理训练集与验证集函数--->划分数据集\n",[152,33281,33282,33285,33288],{"class":281,"line":970},[152,33283,33284],{"class":476},"def",[152,33286,33287],{"class":285}," train_val_data_process",[152,33289,33290],{"class":483},"():\n",[152,33292,33293,33296,33298,33300,33302],{"class":281,"line":979},[152,33294,33295],{"class":483},"    train_data",[152,33297,1864],{"class":476},[152,33299,32792],{"class":483},[152,33301,32800],{"class":289},[152,33303,32803],{"class":483},[152,33305,33306,33309,33311,33313],{"class":281,"line":989},[152,33307,33308],{"class":6858},"                            train",[152,33310,1864],{"class":476},[152,33312,32813],{"class":293},[152,33314,32803],{"class":483},[152,33316,33317,33320,33322,33324,33326,33328,33330],{"class":281,"line":996},[152,33318,33319],{"class":6858},"                            transform",[152,33321,1864],{"class":476},[152,33323,32830],{"class":483},[152,33325,32833],{"class":6858},[152,33327,1864],{"class":476},[152,33329,2708],{"class":293},[152,33331,32841],{"class":483},[152,33333,33334,33337,33339,33341],{"class":281,"line":1001},[152,33335,33336],{"class":6858},"                            download",[152,33338,1864],{"class":476},[152,33340,32813],{"class":293},[152,33342,1825],{"class":483},[152,33344,33345,33348,33350,33353,33356,33358,33361,33363,33365,33368,33370,33372,33375,33377,33379],{"class":281,"line":1006},[152,33346,33347],{"class":483},"    train_data,val_data",[152,33349,1864],{"class":476},[152,33351,33352],{"class":483},"Data.random_split(train_data,[",[152,33354,33355],{"class":293},"round",[152,33357,1819],{"class":483},[152,33359,33360],{"class":293},"0.8",[152,33362,2263],{"class":476},[152,33364,9000],{"class":293},[152,33366,33367],{"class":483},"(train_data)),",[152,33369,33355],{"class":293},[152,33371,1819],{"class":483},[152,33373,33374],{"class":293},"0.2",[152,33376,2263],{"class":476},[152,33378,9000],{"class":293},[152,33380,33381],{"class":483},"(train_data))])\n",[152,33383,33384,33387,33389,33392,33394,33396],{"class":281,"line":1018},[152,33385,33386],{"class":483},"    train_dataloader ",[152,33388,1864],{"class":476},[152,33390,33391],{"class":483}," Data.DataLoader(",[152,33393,32874],{"class":6858},[152,33395,1864],{"class":476},[152,33397,32879],{"class":483},[152,33399,33400,33403,33405,33408],{"class":281,"line":1027},[152,33401,33402],{"class":6858},"                                       batch_size",[152,33404,1864],{"class":476},[152,33406,33407],{"class":293},"128",[152,33409,32803],{"class":483},[152,33411,33412,33415,33417,33419],{"class":281,"line":1037},[152,33413,33414],{"class":6858},"                                       shuffle",[152,33416,1864],{"class":476},[152,33418,32813],{"class":293},[152,33420,32803],{"class":483},[152,33422,33423],{"class":281,"line":1044},[152,33424,33425],{"class":866},"                                       # 规定8个进程\n",[152,33427,33428,33431,33433,33435],{"class":281,"line":1049},[152,33429,33430],{"class":6858},"                                       num_workers",[152,33432,1864],{"class":476},[152,33434,2203],{"class":293},[152,33436,1825],{"class":483},[152,33438,33439,33442,33444,33446,33448,33450],{"class":281,"line":1054},[152,33440,33441],{"class":483},"    val_dataloader",[152,33443,1864],{"class":476},[152,33445,32871],{"class":483},[152,33447,32874],{"class":6858},[152,33449,1864],{"class":476},[152,33451,33452],{"class":483},"val_data,\n",[152,33454,33455,33458,33460,33462],{"class":281,"line":1065},[152,33456,33457],{"class":6858},"                                   batch_size",[152,33459,1864],{"class":476},[152,33461,33407],{"class":293},[152,33463,32803],{"class":483},[152,33465,33466,33469,33471,33473],{"class":281,"line":1074},[152,33467,33468],{"class":6858},"                                   shuffle",[152,33470,1864],{"class":476},[152,33472,32813],{"class":293},[152,33474,32803],{"class":483},[152,33476,33477,33480,33482,33484],{"class":281,"line":1084},[152,33478,33479],{"class":6858},"                                   num_workers",[152,33481,1864],{"class":476},[152,33483,2203],{"class":293},[152,33485,1825],{"class":483},[152,33487,33488,33490],{"class":281,"line":1091},[152,33489,5732],{"class":476},[152,33491,33492],{"class":483}," train_dataloader,val_dataloader\n",[152,33494,33495],{"class":281,"line":1096},[152,33496,307],{"emptyLinePlaceholder":306},[152,33498,33499],{"class":281,"line":1101},[152,33500,33501],{"class":866},"# 验证是否出错\n",[152,33503,33504],{"class":281,"line":1112},[152,33505,33506],{"class":866},"# train_val_data_process()\n",[152,33508,33509],{"class":281,"line":1121},[152,33510,307],{"emptyLinePlaceholder":306},[152,33512,33513],{"class":281,"line":1131},[152,33514,33515],{"class":866},"# 定义模型训练函数\n",[152,33517,33518,33520,33523],{"class":281,"line":1138},[152,33519,33284],{"class":476},[152,33521,33522],{"class":285}," train_model_process",[152,33524,33525],{"class":483},"(model,train_dataloader,val_dataloader,num_epochs):\n",[152,33527,33528,33530,33532,33534,33536,33538,33540,33542,33545],{"class":281,"line":1143},[152,33529,32574],{"class":483},[152,33531,1864],{"class":476},[152,33533,31788],{"class":483},[152,33535,32581],{"class":289},[152,33537,3364],{"class":476},[152,33539,32586],{"class":483},[152,33541,3361],{"class":476},[152,33543,33544],{"class":289}," 'cpu'",[152,33546,1825],{"class":483},[152,33548,33549],{"class":281,"line":1148},[152,33550,307],{"emptyLinePlaceholder":306},[152,33552,33553],{"class":281,"line":1159},[152,33554,307],{"emptyLinePlaceholder":306},[152,33556,33557],{"class":281,"line":1168},[152,33558,33559],{"class":866},"    # 定义优化器\n",[152,33561,33562],{"class":281,"line":1178},[152,33563,33564],{"class":866},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[152,33566,33567],{"class":281,"line":1185},[152,33568,33569],{"class":866},"    # lr为学习率\n",[152,33571,33572,33575,33577,33580,33583,33585,33588],{"class":281,"line":1190},[152,33573,33574],{"class":483},"    optimizer",[152,33576,1864],{"class":476},[152,33578,33579],{"class":483},"torch.optim.Adam(model.parameters(),",[152,33581,33582],{"class":6858},"lr",[152,33584,1864],{"class":476},[152,33586,33587],{"class":293},"0.001",[152,33589,1825],{"class":483},[152,33591,33592],{"class":281,"line":1195},[152,33593,307],{"emptyLinePlaceholder":306},[152,33595,33596],{"class":281,"line":1206},[152,33597,33598],{"class":866},"    # 定义损失函数使用交叉熵损失函数\n",[152,33600,33601,33604,33606],{"class":281,"line":1215},[152,33602,33603],{"class":483},"    criterion",[152,33605,1864],{"class":476},[152,33607,33608],{"class":483},"nn.CrossEntropyLoss()\n",[152,33610,33611],{"class":281,"line":1225},[152,33612,307],{"emptyLinePlaceholder":306},[152,33614,33615],{"class":281,"line":1232},[152,33616,33617],{"class":866},"    # 将模型放到GPU中进行训练\n",[152,33619,33620,33622,33624],{"class":281,"line":1237},[152,33621,32626],{"class":483},[152,33623,1864],{"class":476},[152,33625,33626],{"class":483},"model.to(device)\n",[152,33628,33629],{"class":281,"line":1242},[152,33630,33631],{"class":866},"    # 复制当前模型的参数\n",[152,33633,33634],{"class":281,"line":1253},[152,33635,33636],{"class":866},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[152,33638,33639],{"class":281,"line":1262},[152,33640,33641],{"class":866},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[152,33643,33644,33647,33649],{"class":281,"line":1272},[152,33645,33646],{"class":483},"    best_model_wts",[152,33648,1864],{"class":476},[152,33650,33651],{"class":483},"copy.deepcopy(model.state_dict())\n",[152,33653,33654],{"class":281,"line":1279},[152,33655,307],{"emptyLinePlaceholder":306},[152,33657,33658],{"class":281,"line":1284},[152,33659,307],{"emptyLinePlaceholder":306},[152,33661,33662],{"class":281,"line":1289},[152,33663,33664],{"class":866},"    # 初始化参数\n",[152,33666,33667],{"class":281,"line":1301},[152,33668,33669],{"class":866},"    # 最高准确度\n",[152,33671,33672,33675,33677],{"class":281,"line":1310},[152,33673,33674],{"class":483},"    best_acc",[152,33676,1864],{"class":476},[152,33678,33679],{"class":293},"0.0\n",[152,33681,33682],{"class":281,"line":1320},[152,33683,33684],{"class":866},"    # 训练集损失列表\n",[152,33686,33687,33690,33692],{"class":281,"line":1327},[152,33688,33689],{"class":483},"    train_loss_all",[152,33691,1864],{"class":476},[152,33693,33694],{"class":483},"[]\n",[152,33696,33697],{"class":281,"line":11528},[152,33698,33699],{"class":866},"    # 验证集函数列表\n",[152,33701,33702,33705,33707],{"class":281,"line":11536},[152,33703,33704],{"class":483},"    val_loss_all",[152,33706,1864],{"class":476},[152,33708,33694],{"class":483},[152,33710,33711],{"class":281,"line":11541},[152,33712,33713],{"class":866},"    # 训练集准确度列表\n",[152,33715,33716,33719,33721],{"class":281,"line":18219},[152,33717,33718],{"class":483},"    train_acc_all",[152,33720,1864],{"class":476},[152,33722,33694],{"class":483},[152,33724,33725],{"class":281,"line":18225},[152,33726,33727],{"class":866},"    # 验证集准确度列表\n",[152,33729,33730,33733,33735],{"class":281,"line":18248},[152,33731,33732],{"class":483},"    val_acc_all",[152,33734,1864],{"class":476},[152,33736,33694],{"class":483},[152,33738,33739],{"class":281,"line":18254},[152,33740,307],{"emptyLinePlaceholder":306},[152,33742,33743],{"class":281,"line":18277},[152,33744,33745],{"class":866},"    # 保存当前时间--->方便看每轮训练的时间\n",[152,33747,33748,33751,33753],{"class":281,"line":18291},[152,33749,33750],{"class":483},"    since",[152,33752,1864],{"class":476},[152,33754,33755],{"class":483},"time.time()\n",[152,33757,33758],{"class":281,"line":18311},[152,33759,307],{"emptyLinePlaceholder":306},[152,33761,33762],{"class":281,"line":18317},[152,33763,307],{"emptyLinePlaceholder":306},[152,33765,33766],{"class":281,"line":18328},[152,33767,33768],{"class":866},"    # 准备工作完成--->开始训练模型\n",[152,33770,33771,33773,33776,33778,33781],{"class":281,"line":18351},[152,33772,4844],{"class":476},[152,33774,33775],{"class":483}," epoch ",[152,33777,27653],{"class":476},[152,33779,33780],{"class":293}," range",[152,33782,33783],{"class":483},"(num_epochs):\n",[152,33785,33786,33789,33791,33794,33797,33799,33801,33803,33806,33808,33810],{"class":281,"line":18373},[152,33787,33788],{"class":293},"        print",[152,33790,1819],{"class":483},[152,33792,33793],{"class":289},"\"Epoch ",[152,33795,33796],{"class":293},"{}",[152,33798,2392],{"class":289},[152,33800,33796],{"class":293},[152,33802,2059],{"class":289},[152,33804,33805],{"class":483},".format(epoch,num_epochs",[152,33807,2340],{"class":476},[152,33809,2026],{"class":293},[152,33811,31834],{"class":483},[152,33813,33814,33816,33818,33821,33823,33825],{"class":281,"line":18378},[152,33815,33788],{"class":293},[152,33817,1819],{"class":483},[152,33819,33820],{"class":289},"\"-\"",[152,33822,2263],{"class":476},[152,33824,2254],{"class":293},[152,33826,1825],{"class":483},[152,33828,33829],{"class":281,"line":18384},[152,33830,307],{"emptyLinePlaceholder":306},[152,33832,33833],{"class":281,"line":18398},[152,33834,33835],{"class":866},"        # 初始化参数\n",[152,33837,33838],{"class":281,"line":18411},[152,33839,33840],{"class":866},"        # 训练集损失函数\n",[152,33842,33843,33846,33848],{"class":281,"line":18416},[152,33844,33845],{"class":483},"        train_loss",[152,33847,1864],{"class":476},[152,33849,33679],{"class":293},[152,33851,33852],{"class":281,"line":18430},[152,33853,33854],{"class":866},"        # 训练集准确度\n",[152,33856,33857,33860,33862],{"class":281,"line":18435},[152,33858,33859],{"class":483},"        train_corrects",[152,33861,1864],{"class":476},[152,33863,4728],{"class":293},[152,33865,33866],{"class":281,"line":18441},[152,33867,33868],{"class":866},"        # 验证集损失函数\n",[152,33870,33871,33874,33876],{"class":281,"line":18446},[152,33872,33873],{"class":483},"        val_loss",[152,33875,1864],{"class":476},[152,33877,33679],{"class":293},[152,33879,33880],{"class":281,"line":18460},[152,33881,33882],{"class":866},"        # 验证集准确度\n",[152,33884,33885,33888,33890],{"class":281,"line":18465},[152,33886,33887],{"class":483},"        val_corrects",[152,33889,1864],{"class":476},[152,33891,4728],{"class":293},[152,33893,33894],{"class":281,"line":18470},[152,33895,33896],{"class":866},"        # 训练集样本数量\n",[152,33898,33899,33902,33904],{"class":281,"line":18484},[152,33900,33901],{"class":483},"        train_num",[152,33903,1864],{"class":476},[152,33905,4728],{"class":293},[152,33907,33908],{"class":281,"line":18496},[152,33909,33910],{"class":866},"        # 验证集样本数量\n",[152,33912,33913,33916,33918],{"class":281,"line":18501},[152,33914,33915],{"class":483},"        val_num",[152,33917,1864],{"class":476},[152,33919,4728],{"class":293},[152,33921,33922],{"class":281,"line":18514},[152,33923,33924],{"class":866},"        # 将数据放到设备,并开始训练\n",[152,33926,33927,33929,33931,33933,33935],{"class":281,"line":18519},[152,33928,5046],{"class":476},[152,33930,32938],{"class":483},[152,33932,27653],{"class":476},[152,33934,32943],{"class":293},[152,33936,33937],{"class":483},"(train_dataloader):\n",[152,33939,33940],{"class":281,"line":18524},[152,33941,33942],{"class":866},"            # 将特征放入到训练设备\n",[152,33944,33945,33948,33950],{"class":281,"line":18529},[152,33946,33947],{"class":483},"            b_x",[152,33949,1864],{"class":476},[152,33951,33952],{"class":483},"b_x.to(device)\n",[152,33954,33955],{"class":281,"line":18542},[152,33956,33957],{"class":866},"            # 将标签放入到训练设备当中\n",[152,33959,33960,33963,33965],{"class":281,"line":18547},[152,33961,33962],{"class":483},"            b_y",[152,33964,1864],{"class":476},[152,33966,33967],{"class":483},"b_y.to(device)\n",[152,33969,33971],{"class":281,"line":33970},98,[152,33972,33973],{"class":866},"            # 设置模型为训练模式\n",[152,33975,33977],{"class":281,"line":33976},99,[152,33978,33979],{"class":483},"            model.train()\n",[152,33981,33983],{"class":281,"line":33982},100,[152,33984,33985],{"class":866},"            # 将数据放到模型当中,开始前向传播\n",[152,33987,33989],{"class":281,"line":33988},101,[152,33990,33991],{"class":866},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[152,33993,33995,33998,34000],{"class":281,"line":33994},102,[152,33996,33997],{"class":483},"            output",[152,33999,1864],{"class":476},[152,34001,34002],{"class":483},"model(b_x)\n",[152,34004,34006],{"class":281,"line":34005},103,[152,34007,34008],{"class":866},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[152,34010,34012,34015,34017,34020,34023,34025,34027],{"class":281,"line":34011},104,[152,34013,34014],{"class":483},"            pre_lab",[152,34016,1864],{"class":476},[152,34018,34019],{"class":483},"torch.argmax(output,",[152,34021,34022],{"class":6858},"dim",[152,34024,1864],{"class":476},[152,34026,2026],{"class":293},[152,34028,1825],{"class":483},[152,34030,34032],{"class":281,"line":34031},105,[152,34033,34034],{"class":866},"            # 计算每一个batch的损失函数\n",[152,34036,34038,34041,34043],{"class":281,"line":34037},106,[152,34039,34040],{"class":483},"            loss",[152,34042,1864],{"class":476},[152,34044,34045],{"class":483},"criterion(output,b_y)\n",[152,34047,34049],{"class":281,"line":34048},107,[152,34050,34051],{"class":866},"            # 将梯度初始化为0\n",[152,34053,34055],{"class":281,"line":34054},108,[152,34056,34057],{"class":483},"            optimizer.zero_grad()\n",[152,34059,34061],{"class":281,"line":34060},109,[152,34062,34063],{"class":866},"            # 梯度置为0后再进行反向传播\n",[152,34065,34067],{"class":281,"line":34066},110,[152,34068,34069],{"class":483},"            loss.backward()\n",[152,34071,34073],{"class":281,"line":34072},111,[152,34074,34075],{"class":866},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[152,34077,34079],{"class":281,"line":34078},112,[152,34080,34081],{"class":483},"            optimizer.step()\n",[152,34083,34085],{"class":281,"line":34084},113,[152,34086,34087],{"class":866},"            # loss.item()指的是batch的平均损失\n",[152,34089,34091,34094,34096,34099,34101,34104,34106],{"class":281,"line":34090},114,[152,34092,34093],{"class":483},"            train_loss",[152,34095,11109],{"class":476},[152,34097,34098],{"class":483},"loss.item()",[152,34100,2263],{"class":476},[152,34102,34103],{"class":483},"b_x.size(",[152,34105,2000],{"class":293},[152,34107,1825],{"class":483},[152,34109,34111],{"class":281,"line":34110},115,[152,34112,34113],{"class":866},"            # 计算每个批次中正确预测的数量\n",[152,34115,34117,34120,34122,34125,34127],{"class":281,"line":34116},116,[152,34118,34119],{"class":483},"            train_corrects",[152,34121,11109],{"class":476},[152,34123,34124],{"class":483},"torch.sum(pre_lab",[152,34126,4592],{"class":476},[152,34128,34129],{"class":483},"b_y.data)\n",[152,34131,34133],{"class":281,"line":34132},117,[152,34134,34135],{"class":866},"            # 计算目前为止一共处理了多少样本\n",[152,34137,34139,34142,34144,34146,34148],{"class":281,"line":34138},118,[152,34140,34141],{"class":483},"            train_num",[152,34143,11109],{"class":476},[152,34145,34103],{"class":483},[152,34147,2000],{"class":293},[152,34149,1825],{"class":483},[152,34151,34153],{"class":281,"line":34152},119,[152,34154,34155],{"class":866},"        # 验证数据\n",[152,34157,34159,34161,34164,34166,34168],{"class":281,"line":34158},120,[152,34160,5046],{"class":476},[152,34162,34163],{"class":483}," step ,(b_x,b_y) ",[152,34165,27653],{"class":476},[152,34167,32943],{"class":293},[152,34169,34170],{"class":483},"(val_dataloader):\n",[152,34172,34174],{"class":281,"line":34173},121,[152,34175,34176],{"class":866},"            # 将特征放到验证设备当中\n",[152,34178,34180,34182,34184],{"class":281,"line":34179},122,[152,34181,33947],{"class":483},[152,34183,1864],{"class":476},[152,34185,33952],{"class":483},[152,34187,34189],{"class":281,"line":34188},123,[152,34190,34191],{"class":866},"            # 将标签放到放到训练设备当中\n",[152,34193,34195,34197,34199],{"class":281,"line":34194},124,[152,34196,33962],{"class":483},[152,34198,1864],{"class":476},[152,34200,33967],{"class":483},[152,34202,34204],{"class":281,"line":34203},125,[152,34205,34206],{"class":866},"            # 开启验证模式，设置模型为评估模式\n",[152,34208,34210],{"class":281,"line":34209},126,[152,34211,34212],{"class":483},"            model.eval()\n",[152,34214,34216,34219],{"class":281,"line":34215},127,[152,34217,34218],{"class":476},"            with",[152,34220,34221],{"class":483}," torch.no_grad():\n",[152,34223,34225],{"class":281,"line":34224},128,[152,34226,34227],{"class":866},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[152,34229,34231,34234,34236],{"class":281,"line":34230},129,[152,34232,34233],{"class":483},"                output ",[152,34235,1864],{"class":476},[152,34237,34238],{"class":483}," model(b_x)\n",[152,34240,34242],{"class":281,"line":34241},130,[152,34243,34244],{"class":866},"                # 查找每一行中最大值对应的下标\n",[152,34246,34248,34251,34253,34256,34258,34260,34262],{"class":281,"line":34247},131,[152,34249,34250],{"class":483},"                pre_lab ",[152,34252,1864],{"class":476},[152,34254,34255],{"class":483}," torch.argmax(output, ",[152,34257,34022],{"class":6858},[152,34259,1864],{"class":476},[152,34261,2026],{"class":293},[152,34263,1825],{"class":483},[152,34265,34267],{"class":281,"line":34266},132,[152,34268,34269],{"class":866},"                # 计算验证集上的当前 batch 损失\n",[152,34271,34273,34276,34278],{"class":281,"line":34272},133,[152,34274,34275],{"class":483},"                val_batch_loss ",[152,34277,1864],{"class":476},[152,34279,34280],{"class":483}," criterion(output, b_y)\n",[152,34282,34284],{"class":281,"line":34283},134,[152,34285,34286],{"class":866},"                # 对损失函数进行累加（按样本数加权）\n",[152,34288,34290,34293,34295,34298,34300,34303,34305],{"class":281,"line":34289},135,[152,34291,34292],{"class":483},"                val_loss ",[152,34294,11109],{"class":476},[152,34296,34297],{"class":483}," val_batch_loss.item() ",[152,34299,2263],{"class":476},[152,34301,34302],{"class":483}," b_x.size(",[152,34304,2000],{"class":293},[152,34306,1825],{"class":483},[152,34308,34310,34313,34315,34318,34320],{"class":281,"line":34309},136,[152,34311,34312],{"class":483},"                val_corrects ",[152,34314,11109],{"class":476},[152,34316,34317],{"class":483}," torch.sum(pre_lab ",[152,34319,4592],{"class":476},[152,34321,34322],{"class":483}," b_y.data)\n",[152,34324,34326],{"class":281,"line":34325},137,[152,34327,34328],{"class":866},"                # 当前用于验证的样本数量\n",[152,34330,34332,34335,34337,34339,34341],{"class":281,"line":34331},138,[152,34333,34334],{"class":483},"            val_num ",[152,34336,11109],{"class":476},[152,34338,34302],{"class":483},[152,34340,2000],{"class":293},[152,34342,1825],{"class":483},[152,34344,34346],{"class":281,"line":34345},139,[152,34347,34348],{"class":866},"        # 计算并保存每一次迭代的loss值和准确率\n",[152,34350,34352],{"class":281,"line":34351},140,[152,34353,34354],{"class":866},"        # 计算并保存训练集的loss值\n",[152,34356,34358,34361,34363],{"class":281,"line":34357},141,[152,34359,34360],{"class":483},"        train_loss_all.append(train_loss",[152,34362,2392],{"class":476},[152,34364,34365],{"class":483},"train_num)\n",[152,34367,34369],{"class":281,"line":34368},142,[152,34370,34371],{"class":866},"        # 取双精度\n",[152,34373,34375],{"class":281,"line":34374},143,[152,34376,34377],{"class":866},"        # 计算并保存训练集的准确率\n",[152,34379,34381,34384,34386],{"class":281,"line":34380},144,[152,34382,34383],{"class":483},"        train_acc_all.append(train_corrects.double().item()",[152,34385,2392],{"class":476},[152,34387,34365],{"class":483},[152,34389,34391],{"class":281,"line":34390},145,[152,34392,34393],{"class":866},"        # 计算并保存验证集的loss值\n",[152,34395,34397,34400,34402],{"class":281,"line":34396},146,[152,34398,34399],{"class":483},"        val_loss_all.append(val_loss",[152,34401,2392],{"class":476},[152,34403,34404],{"class":483},"val_num)\n",[152,34406,34408],{"class":281,"line":34407},147,[152,34409,34410],{"class":866},"        # 计算并保存验证集的准确率\n",[152,34412,34414,34417,34419],{"class":281,"line":34413},148,[152,34415,34416],{"class":483},"        val_acc_all.append(val_corrects.double().item()",[152,34418,2392],{"class":476},[152,34420,34404],{"class":483},[152,34422,34424],{"class":281,"line":34423},149,[152,34425,307],{"emptyLinePlaceholder":306},[152,34427,34429],{"class":281,"line":34428},150,[152,34430,34431],{"class":866},"        # 打印训练一轮的loss值和准确率\n",[152,34433,34435,34437,34439,34441,34443,34446,34448,34451,34453,34456,34458,34460,34462,34464,34467,34469,34471,34474,34476,34478],{"class":281,"line":34434},151,[152,34436,33788],{"class":293},[152,34438,1819],{"class":483},[152,34440,5235],{"class":289},[152,34442,33796],{"class":293},[152,34444,34445],{"class":289},"train loss:",[152,34447,2703],{"class":293},[152,34449,34450],{"class":476},":.4f",[152,34452,2752],{"class":293},[152,34454,34455],{"class":289}," train acc:",[152,34457,2703],{"class":293},[152,34459,34450],{"class":476},[152,34461,2752],{"class":293},[152,34463,5235],{"class":289},[152,34465,34466],{"class":483},".format(epoch,train_loss_all[",[152,34468,2340],{"class":476},[152,34470,2026],{"class":293},[152,34472,34473],{"class":483},"],train_acc_all[",[152,34475,2340],{"class":476},[152,34477,2026],{"class":293},[152,34479,34480],{"class":483},"]))\n",[152,34482,34484,34486,34488,34490,34492,34495,34497,34499,34501,34504,34506,34508,34510,34512,34515,34517,34519,34522,34524,34526],{"class":281,"line":34483},152,[152,34485,33788],{"class":293},[152,34487,1819],{"class":483},[152,34489,5235],{"class":289},[152,34491,33796],{"class":293},[152,34493,34494],{"class":289},"val loss:",[152,34496,2703],{"class":293},[152,34498,34450],{"class":476},[152,34500,2752],{"class":293},[152,34502,34503],{"class":289}," val acc:",[152,34505,2703],{"class":293},[152,34507,34450],{"class":476},[152,34509,2752],{"class":293},[152,34511,5235],{"class":289},[152,34513,34514],{"class":483},".format(epoch,val_loss_all[",[152,34516,2340],{"class":476},[152,34518,2026],{"class":293},[152,34520,34521],{"class":483},"],val_acc_all[",[152,34523,2340],{"class":476},[152,34525,2026],{"class":293},[152,34527,34480],{"class":483},[152,34529,34531],{"class":281,"line":34530},153,[152,34532,307],{"emptyLinePlaceholder":306},[152,34534,34536],{"class":281,"line":34535},154,[152,34537,34538],{"class":866},"        # 判断准确度--->保存最优模型\n",[152,34540,34542,34544,34547,34549,34551,34553,34555],{"class":281,"line":34541},155,[152,34543,4147],{"class":476},[152,34545,34546],{"class":483}," val_acc_all[",[152,34548,2340],{"class":476},[152,34550,2026],{"class":293},[152,34552,2746],{"class":483},[152,34554,487],{"class":476},[152,34556,34557],{"class":483},"best_acc:\n",[152,34559,34561],{"class":281,"line":34560},156,[152,34562,34563],{"class":866},"            # 保存当前模型准确度\n",[152,34565,34567,34570,34572,34574,34577,34579,34581],{"class":281,"line":34566},157,[152,34568,34569],{"class":483},"            best_acc:",[152,34571,1858],{"class":293},[152,34573,1864],{"class":476},[152,34575,34576],{"class":483},"val_acc_all[",[152,34578,2340],{"class":476},[152,34580,2026],{"class":293},[152,34582,34583],{"class":483},"]\n",[152,34585,34587],{"class":281,"line":34586},158,[152,34588,34589],{"class":866},"            # 保存当前的准确度\n",[152,34591,34593],{"class":281,"line":34592},159,[152,34594,34595],{"class":866},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[152,34597,34599,34602,34604],{"class":281,"line":34598},160,[152,34600,34601],{"class":483},"            best_model_wts",[152,34603,1864],{"class":476},[152,34605,33651],{"class":483},[152,34607,34609],{"class":281,"line":34608},161,[152,34610,307],{"emptyLinePlaceholder":306},[152,34612,34614],{"class":281,"line":34613},162,[152,34615,34616],{"class":866},"        # 计算耗时\n",[152,34618,34620,34623,34625,34628,34630],{"class":281,"line":34619},163,[152,34621,34622],{"class":483},"        time_use",[152,34624,1864],{"class":476},[152,34626,34627],{"class":483},"time.time()",[152,34629,2340],{"class":476},[152,34631,34632],{"class":483},"since\n",[152,34634,34636,34638,34640,34643,34645,34648,34650,34652,34654,34656,34658,34661,34664,34667,34669,34672,34674,34676],{"class":281,"line":34635},164,[152,34637,33788],{"class":293},[152,34639,1819],{"class":483},[152,34641,34642],{"class":289},"'训练和验证耗费的时间",[152,34644,2703],{"class":293},[152,34646,34647],{"class":476},":.0f",[152,34649,2752],{"class":293},[152,34651,2352],{"class":289},[152,34653,2703],{"class":293},[152,34655,34647],{"class":476},[152,34657,2752],{"class":293},[152,34659,34660],{"class":289},"s'",[152,34662,34663],{"class":483},".format(time_use",[152,34665,34666],{"class":476},"\u002F\u002F",[152,34668,2714],{"class":293},[152,34670,34671],{"class":483},",time_use",[152,34673,2136],{"class":476},[152,34675,2714],{"class":293},[152,34677,31834],{"class":483},[152,34679,34681],{"class":281,"line":34680},165,[152,34682,34683],{"class":866},"    # 选择最优参数\n",[152,34685,34687],{"class":281,"line":34686},166,[152,34688,34689],{"class":866},"    # 加载最高准确率下的模型参数\n",[152,34691,34693],{"class":281,"line":34692},167,[152,34694,34695],{"class":866},"    # model.load_state_dict(best_model_wts)\n",[152,34697,34699,34702,34705],{"class":281,"line":34698},168,[152,34700,34701],{"class":483},"    torch.save(model.state_dict(best_model_wts), ",[152,34703,34704],{"class":289},"'.\u002Fbest_model.pth'",[152,34706,1825],{"class":483},[152,34708,34710],{"class":281,"line":34709},169,[152,34711,34712],{"class":866},"    # 或者写成\n",[152,34714,34716],{"class":281,"line":34715},170,[152,34717,34718],{"class":866},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[152,34720,34722],{"class":281,"line":34721},171,[152,34723,34724],{"class":866},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[152,34726,34728,34731,34733,34736,34739,34741],{"class":281,"line":34727},172,[152,34729,34730],{"class":483},"    train_process",[152,34732,1864],{"class":476},[152,34734,34735],{"class":483},"pd.DataFrame(",[152,34737,34738],{"class":6858},"data",[152,34740,1864],{"class":476},[152,34742,3217],{"class":483},[152,34744,34746,34749,34751,34754],{"class":281,"line":34745},173,[152,34747,34748],{"class":289},"        \"epoch\"",[152,34750,841],{"class":483},[152,34752,34753],{"class":293},"range",[152,34755,34756],{"class":483},"(num_epochs),\n",[152,34758,34760,34763],{"class":281,"line":34759},174,[152,34761,34762],{"class":289},"        \"train_loss_all\"",[152,34764,34765],{"class":483},":train_loss_all,\n",[152,34767,34769,34772],{"class":281,"line":34768},175,[152,34770,34771],{"class":289},"        \"val_loss_all\"",[152,34773,34774],{"class":483},":val_loss_all,\n",[152,34776,34778,34781],{"class":281,"line":34777},176,[152,34779,34780],{"class":289},"        \"train_acc_all\"",[152,34782,34783],{"class":483},":train_acc_all,\n",[152,34785,34787,34790],{"class":281,"line":34786},177,[152,34788,34789],{"class":289},"        \"val_acc_all\"",[152,34791,34792],{"class":483},":val_acc_all\n",[152,34794,34796],{"class":281,"line":34795},178,[152,34797,34798],{"class":483},"    })\n",[152,34800,34802],{"class":281,"line":34801},179,[152,34803,34804],{"class":866},"    # 返回训练保存的过程\n",[152,34806,34808,34810],{"class":281,"line":34807},180,[152,34809,5732],{"class":476},[152,34811,34812],{"class":483}," train_process\n",[152,34814,34816],{"class":281,"line":34815},181,[152,34817,307],{"emptyLinePlaceholder":306},[152,34819,34821],{"class":281,"line":34820},182,[152,34822,34823],{"class":866},"# 将loss值和精度按照图片的形式展示出来\n",[152,34825,34827,34829,34832],{"class":281,"line":34826},183,[152,34828,33284],{"class":476},[152,34830,34831],{"class":285}," matplot_acc_loss",[152,34833,34834],{"class":483},"(train_process):\n",[152,34836,34838],{"class":281,"line":34837},184,[152,34839,34840],{"class":866},"    # 设置图的大小\n",[152,34842,34844,34847,34849,34851,34853,34855,34857,34859],{"class":281,"line":34843},185,[152,34845,34846],{"class":483},"    plt.figure(",[152,34848,33030],{"class":6858},[152,34850,1864],{"class":476},[152,34852,1819],{"class":483},[152,34854,2306],{"class":293},[152,34856,2186],{"class":483},[152,34858,2101],{"class":293},[152,34860,31834],{"class":483},[152,34862,34864],{"class":281,"line":34863},186,[152,34865,34866],{"class":866},"    # 设置图中有几张图\n",[152,34868,34870],{"class":281,"line":34869},187,[152,34871,34872],{"class":866},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[152,34874,34876],{"class":281,"line":34875},188,[152,34877,34878],{"class":866},"    # ①loss图\n",[152,34880,34882,34884,34886,34888,34890,34892,34894],{"class":281,"line":34881},189,[152,34883,33064],{"class":483},[152,34885,2026],{"class":293},[152,34887,2186],{"class":483},[152,34889,1894],{"class":293},[152,34891,2186],{"class":483},[152,34893,2026],{"class":293},[152,34895,1825],{"class":483},[152,34897,34899],{"class":281,"line":34898},190,[152,34900,34901],{"class":866},"    # 补充:\n",[152,34903,34905],{"class":281,"line":34904},191,[152,34906,34907],{"class":866},"    # plt.subplot(nrows, ncols, index)\n",[152,34909,34911],{"class":281,"line":34910},192,[152,34912,34913],{"class":866},"    # nrows：行数\n",[152,34915,34917],{"class":281,"line":34916},193,[152,34918,34919],{"class":866},"    # ncols：列数\n",[152,34921,34923],{"class":281,"line":34922},194,[152,34924,34925],{"class":866},"    # index：目前选中第几个子图（从1开始）\n",[152,34927,34929,34932,34935,34938,34941,34943,34946,34948,34951],{"class":281,"line":34928},195,[152,34930,34931],{"class":483},"    plt.plot(train_process[",[152,34933,34934],{"class":289},"\"epoch\"",[152,34936,34937],{"class":483},"],train_process.train_loss_all,",[152,34939,34940],{"class":289},"'ro-'",[152,34942,2186],{"class":483},[152,34944,34945],{"class":6858},"label",[152,34947,1864],{"class":476},[152,34949,34950],{"class":289},"'train loss'",[152,34952,1825],{"class":483},[152,34954,34956,34958,34960,34963,34966,34968,34970,34972,34975],{"class":281,"line":34955},196,[152,34957,34931],{"class":483},[152,34959,34934],{"class":289},[152,34961,34962],{"class":483},"],train_process.val_loss_all,",[152,34964,34965],{"class":289},"'bs--'",[152,34967,2186],{"class":483},[152,34969,34945],{"class":6858},[152,34971,1864],{"class":476},[152,34973,34974],{"class":289},"'val loss'",[152,34976,1825],{"class":483},[152,34978,34980],{"class":281,"line":34979},197,[152,34981,34982],{"class":866},"    # 添加一个图例\n",[152,34984,34986],{"class":281,"line":34985},198,[152,34987,34988],{"class":483},"    plt.legend()\n",[152,34990,34992],{"class":281,"line":34991},199,[152,34993,34994],{"class":866},"    # 给轴添加标签\n",[152,34996,34998,35001,35004],{"class":281,"line":34997},200,[152,34999,35000],{"class":483},"    plt.xlabel(",[152,35002,35003],{"class":289},"'epoch'",[152,35005,1825],{"class":483},[152,35007,35009,35012,35015],{"class":281,"line":35008},201,[152,35010,35011],{"class":483},"    plt.ylabel(",[152,35013,35014],{"class":289},"'loss'",[152,35016,1825],{"class":483},[152,35018,35020],{"class":281,"line":35019},202,[152,35021,35022],{"class":866},"    # ②准确度图\n",[152,35024,35026,35028,35030,35032,35034,35036,35038],{"class":281,"line":35025},203,[152,35027,33064],{"class":483},[152,35029,2026],{"class":293},[152,35031,2186],{"class":483},[152,35033,1894],{"class":293},[152,35035,2186],{"class":483},[152,35037,1894],{"class":293},[152,35039,1825],{"class":483},[152,35041,35043,35045,35047,35050,35052,35054,35056,35058,35061],{"class":281,"line":35042},204,[152,35044,34931],{"class":483},[152,35046,34934],{"class":289},[152,35048,35049],{"class":483},"],train_process.train_acc_all,",[152,35051,34940],{"class":289},[152,35053,2186],{"class":483},[152,35055,34945],{"class":6858},[152,35057,1864],{"class":476},[152,35059,35060],{"class":289},"'train acc'",[152,35062,1825],{"class":483},[152,35064,35066,35068,35070,35073,35075,35077,35079,35081,35084],{"class":281,"line":35065},205,[152,35067,34931],{"class":483},[152,35069,34934],{"class":289},[152,35071,35072],{"class":483},"],train_process.val_acc_all,",[152,35074,34965],{"class":289},[152,35076,2186],{"class":483},[152,35078,34945],{"class":6858},[152,35080,1864],{"class":476},[152,35082,35083],{"class":289},"'val acc'",[152,35085,1825],{"class":483},[152,35087,35089],{"class":281,"line":35088},206,[152,35090,35091],{"class":866},"    # 添加图例\n",[152,35093,35095],{"class":281,"line":35094},207,[152,35096,34988],{"class":483},[152,35098,35100,35102,35104],{"class":281,"line":35099},208,[152,35101,35000],{"class":483},[152,35103,34934],{"class":289},[152,35105,1825],{"class":483},[152,35107,35109,35111,35114],{"class":281,"line":35108},209,[152,35110,35011],{"class":483},[152,35112,35113],{"class":289},"\"acc\"",[152,35115,1825],{"class":483},[152,35117,35119],{"class":281,"line":35118},210,[152,35120,35121],{"class":483},"    plt.show()\n",[152,35123,35125],{"class":281,"line":35124},211,[152,35126,307],{"emptyLinePlaceholder":306},[152,35128,35130],{"class":281,"line":35129},212,[152,35131,35132],{"class":866},"# 正式开始训练:\n",[152,35134,35136,35138,35140,35142,35144],{"class":281,"line":35135},213,[152,35137,3202],{"class":476},[152,35139,32557],{"class":293},[152,35141,4592],{"class":476},[152,35143,32562],{"class":289},[152,35145,5382],{"class":483},[152,35147,35149],{"class":281,"line":35148},214,[152,35150,35151],{"class":866},"    # 将模型实例化\n",[152,35153,35155,35158,35160],{"class":281,"line":35154},215,[152,35156,35157],{"class":483},"    LeNet",[152,35159,1864],{"class":476},[152,35161,35162],{"class":483},"LeNet()\n",[152,35164,35166,35169,35171],{"class":281,"line":35165},216,[152,35167,35168],{"class":483},"    train_dataloader,val_dataloader",[152,35170,1864],{"class":476},[152,35172,35173],{"class":483},"train_val_data_process()\n",[152,35175,35177,35179,35181,35184,35187,35189,35191],{"class":281,"line":35176},217,[152,35178,34730],{"class":483},[152,35180,1864],{"class":476},[152,35182,35183],{"class":483},"train_model_process(LeNet,train_dataloader,val_dataloader,",[152,35185,35186],{"class":6858},"num_epochs",[152,35188,1864],{"class":476},[152,35190,2508],{"class":293},[152,35192,1825],{"class":483},[152,35194,35196],{"class":281,"line":35195},218,[152,35197,35198],{"class":483},"    matplot_acc_loss(train_process)\n",[19,35200,35201],{},"画图的补充点学习：",[19,35203,35204],{},[401,35205],{"alt":275,"src":35206},"\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",[416,35208,35209],{"start":310},[419,35210,35211],{},"测试",[270,35213,35215],{"className":31715,"code":35214,"language":31717,"meta":275,"style":275},"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",[277,35216,35217,35223,35233,35245,35255,35260,35270,35280,35284,35289,35298,35315,35327,35344,35355,35371,35376,35387,35398,35409,35416,35420,35425,35435,35440,35457,35465,35469,35474,35483,35492,35496,35501,35506,35511,35518,35523,35535,35545,35555,35560,35564,35569,35578,35583,35599,35604,35609,35614,35628,35633,35647,35651,35656,35671,35676,35688,35692,35697,35709,35714,35722,35727,35732,35742,35747,35756,35761,35766,35770,35775,35780,35796,35804,35809,35814,35873,35879,35884,35895,35903,35911,35915,35920,35924,35929,35937,35942,35958,35963,35973,35983],{"__ignoreMap":275},[152,35218,35219,35221],{"class":281,"line":282},[152,35220,31729],{"class":476},[152,35222,31732],{"class":483},[152,35224,35225,35227,35229,35231],{"class":281,"line":303},[152,35226,31729],{"class":476},[152,35228,32752],{"class":483},[152,35230,32720],{"class":476},[152,35232,32757],{"class":483},[152,35234,35235,35237,35240,35242],{"class":281,"line":310},[152,35236,32074],{"class":476},[152,35238,35239],{"class":483}," jupyter_client.consoleapp ",[152,35241,31729],{"class":476},[152,35243,35244],{"class":483}," classes\n",[152,35246,35247,35249,35251,35253],{"class":281,"line":324},[152,35248,32074],{"class":476},[152,35250,32735],{"class":483},[152,35252,31729],{"class":476},[152,35254,32740],{"class":483},[152,35256,35257],{"class":281,"line":329},[152,35258,35259],{"class":866},"# 导入数据集\n",[152,35261,35262,35264,35266,35268],{"class":281,"line":343},[152,35263,32074],{"class":476},[152,35265,32705],{"class":483},[152,35267,31729],{"class":476},[152,35269,32710],{"class":483},[152,35271,35272,35274,35276,35278],{"class":281,"line":348},[152,35273,32074],{"class":476},[152,35275,33251],{"class":483},[152,35277,31729],{"class":476},[152,35279,33256],{"class":483},[152,35281,35282],{"class":281,"line":362},[152,35283,307],{"emptyLinePlaceholder":306},[152,35285,35286],{"class":281,"line":367},[152,35287,35288],{"class":866},"# 测试数据处理\n",[152,35290,35291,35293,35296],{"class":281,"line":381},[152,35292,33284],{"class":476},[152,35294,35295],{"class":285}," test_data_process",[152,35297,33290],{"class":483},[152,35299,35300,35303,35305,35307,35309,35311,35313],{"class":281,"line":386},[152,35301,35302],{"class":483},"    test_data",[152,35304,1864],{"class":476},[152,35306,32792],{"class":483},[152,35308,32795],{"class":6858},[152,35310,1864],{"class":476},[152,35312,32800],{"class":289},[152,35314,32803],{"class":483},[152,35316,35317,35320,35322,35325],{"class":281,"line":932},[152,35318,35319],{"class":6858},"                           train",[152,35321,1864],{"class":476},[152,35323,35324],{"class":293},"False",[152,35326,32803],{"class":483},[152,35328,35329,35332,35334,35336,35338,35340,35342],{"class":281,"line":942},[152,35330,35331],{"class":6858},"                           transform",[152,35333,1864],{"class":476},[152,35335,32830],{"class":483},[152,35337,32833],{"class":6858},[152,35339,1864],{"class":476},[152,35341,2708],{"class":293},[152,35343,32841],{"class":483},[152,35345,35346,35349,35351,35353],{"class":281,"line":949},[152,35347,35348],{"class":6858},"                           download",[152,35350,1864],{"class":476},[152,35352,32813],{"class":293},[152,35354,1825],{"class":483},[152,35356,35357,35360,35362,35364,35366,35368],{"class":281,"line":954},[152,35358,35359],{"class":483},"    test_dataloader",[152,35361,1864],{"class":476},[152,35363,32871],{"class":483},[152,35365,32874],{"class":6858},[152,35367,1864],{"class":476},[152,35369,35370],{"class":483},"test_data,\n",[152,35372,35373],{"class":281,"line":959},[152,35374,35375],{"class":866},"                                    # 这里是一张一张进行测试\n",[152,35377,35378,35381,35383,35385],{"class":281,"line":970},[152,35379,35380],{"class":6858},"                                    batch_size",[152,35382,1864],{"class":476},[152,35384,2026],{"class":293},[152,35386,32803],{"class":483},[152,35388,35389,35392,35394,35396],{"class":281,"line":979},[152,35390,35391],{"class":6858},"                                    shuffle",[152,35393,1864],{"class":476},[152,35395,32813],{"class":293},[152,35397,32803],{"class":483},[152,35399,35400,35403,35405,35407],{"class":281,"line":989},[152,35401,35402],{"class":6858},"                                    num_workers",[152,35404,1864],{"class":476},[152,35406,2000],{"class":293},[152,35408,1825],{"class":483},[152,35410,35411,35413],{"class":281,"line":996},[152,35412,5732],{"class":476},[152,35414,35415],{"class":483}," test_dataloader\n",[152,35417,35418],{"class":281,"line":1001},[152,35419,307],{"emptyLinePlaceholder":306},[152,35421,35422],{"class":281,"line":1006},[152,35423,35424],{"class":866},"# 定义模型测试函数\n",[152,35426,35427,35429,35432],{"class":281,"line":1018},[152,35428,33284],{"class":476},[152,35430,35431],{"class":285}," test_model_process",[152,35433,35434],{"class":483},"(model,test_dataloader):\n",[152,35436,35437],{"class":281,"line":1027},[152,35438,35439],{"class":866},"    # 将模型放到设备当中，先进行判断\n",[152,35441,35442,35444,35446,35448,35450,35452,35454],{"class":281,"line":1037},[152,35443,32574],{"class":483},[152,35445,1864],{"class":476},[152,35447,32581],{"class":289},[152,35449,3364],{"class":476},[152,35451,32586],{"class":483},[152,35453,3361],{"class":476},[152,35455,35456],{"class":289}," \"cpu\"\n",[152,35458,35459,35461,35463],{"class":281,"line":1044},[152,35460,32626],{"class":483},[152,35462,1864],{"class":476},[152,35464,33626],{"class":483},[152,35466,35467],{"class":281,"line":1049},[152,35468,307],{"emptyLinePlaceholder":306},[152,35470,35471],{"class":281,"line":1054},[152,35472,35473],{"class":866},"    # 设置初始化参数\n",[152,35475,35476,35479,35481],{"class":281,"line":1065},[152,35477,35478],{"class":483},"    test_corrects",[152,35480,1864],{"class":476},[152,35482,33679],{"class":293},[152,35484,35485,35488,35490],{"class":281,"line":1074},[152,35486,35487],{"class":483},"    test_num",[152,35489,1864],{"class":476},[152,35491,4728],{"class":293},[152,35493,35494],{"class":281,"line":1084},[152,35495,307],{"emptyLinePlaceholder":306},[152,35497,35498],{"class":281,"line":1091},[152,35499,35500],{"class":866},"    # 进行模型测试\n",[152,35502,35503],{"class":281,"line":1096},[152,35504,35505],{"class":866},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[152,35507,35508],{"class":281,"line":1101},[152,35509,35510],{"class":866},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[152,35512,35513,35516],{"class":281,"line":1112},[152,35514,35515],{"class":476},"    with",[152,35517,34221],{"class":483},[152,35519,35520],{"class":281,"line":1121},[152,35521,35522],{"class":866},"        # 从数据中进行\n",[152,35524,35525,35527,35530,35532],{"class":281,"line":1131},[152,35526,5046],{"class":476},[152,35528,35529],{"class":483}," test_data_x,test_data_y ",[152,35531,27653],{"class":476},[152,35533,35534],{"class":483}," test_dataloader:\n",[152,35536,35537,35540,35542],{"class":281,"line":1138},[152,35538,35539],{"class":483},"            test_data_x",[152,35541,1864],{"class":476},[152,35543,35544],{"class":483},"test_data_x.to(device)\n",[152,35546,35547,35550,35552],{"class":281,"line":1143},[152,35548,35549],{"class":483},"            test_data_y",[152,35551,1864],{"class":476},[152,35553,35554],{"class":483},"test_data_y.to(device)\n",[152,35556,35557],{"class":281,"line":1148},[152,35558,35559],{"class":866},"            # 设置为验证模式\n",[152,35561,35562],{"class":281,"line":1159},[152,35563,34212],{"class":483},[152,35565,35566],{"class":281,"line":1168},[152,35567,35568],{"class":866},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[152,35570,35571,35573,35575],{"class":281,"line":1178},[152,35572,33997],{"class":483},[152,35574,1864],{"class":476},[152,35576,35577],{"class":483},"model(test_data_x)\n",[152,35579,35580],{"class":281,"line":1185},[152,35581,35582],{"class":866},"            # 查找每一行中最大值对应的下标\n",[152,35584,35585,35587,35589,35591,35593,35595,35597],{"class":281,"line":1190},[152,35586,34014],{"class":483},[152,35588,1864],{"class":476},[152,35590,34019],{"class":483},[152,35592,34022],{"class":6858},[152,35594,1864],{"class":476},[152,35596,2026],{"class":293},[152,35598,1825],{"class":483},[152,35600,35601],{"class":281,"line":1195},[152,35602,35603],{"class":866},"            # 计算正确率\n",[152,35605,35606],{"class":281,"line":1206},[152,35607,35608],{"class":866},"            # .data表示是一个不带梯度信息的tensor\n",[152,35610,35611],{"class":281,"line":1215},[152,35612,35613],{"class":866},"            # 如果预测正确，则准确度test_corrects加1\n",[152,35615,35616,35619,35621,35623,35625],{"class":281,"line":1225},[152,35617,35618],{"class":483},"            test_corrects",[152,35620,11109],{"class":476},[152,35622,34124],{"class":483},[152,35624,4592],{"class":476},[152,35626,35627],{"class":483},"test_data_y.data)\n",[152,35629,35630],{"class":281,"line":1232},[152,35631,35632],{"class":866},"            # 将所有的测试样本进行累计\n",[152,35634,35635,35638,35640,35643,35645],{"class":281,"line":1237},[152,35636,35637],{"class":483},"            test_num",[152,35639,11109],{"class":476},[152,35641,35642],{"class":483},"test_data_x.size(",[152,35644,2000],{"class":293},[152,35646,1825],{"class":483},[152,35648,35649],{"class":281,"line":1242},[152,35650,307],{"emptyLinePlaceholder":306},[152,35652,35653],{"class":281,"line":1253},[152,35654,35655],{"class":866},"        # 计算准确度\n",[152,35657,35658,35661,35663,35666,35668],{"class":281,"line":1262},[152,35659,35660],{"class":483},"        test_acc",[152,35662,1864],{"class":476},[152,35664,35665],{"class":483},"test_corrects.double().item()",[152,35667,2392],{"class":476},[152,35669,35670],{"class":483},"test_num\n",[152,35672,35673],{"class":281,"line":1272},[152,35674,35675],{"class":866},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[152,35677,35678,35680,35682,35685],{"class":281,"line":1279},[152,35679,33788],{"class":293},[152,35681,1819],{"class":483},[152,35683,35684],{"class":289},"\"测试的准确率：\"",[152,35686,35687],{"class":483},",test_acc)\n",[152,35689,35690],{"class":281,"line":1284},[152,35691,307],{"emptyLinePlaceholder":306},[152,35693,35694],{"class":281,"line":1289},[152,35695,35696],{"class":866},"# 实现模型的测试功能\n",[152,35698,35699,35701,35703,35705,35707],{"class":281,"line":1301},[152,35700,3202],{"class":476},[152,35702,32557],{"class":293},[152,35704,4592],{"class":476},[152,35706,32562],{"class":289},[152,35708,5382],{"class":483},[152,35710,35711],{"class":281,"line":1310},[152,35712,35713],{"class":866},"    # 加载模型\n",[152,35715,35716,35718,35720],{"class":281,"line":1320},[152,35717,32626],{"class":483},[152,35719,1864],{"class":476},[152,35721,35162],{"class":483},[152,35723,35724],{"class":281,"line":1327},[152,35725,35726],{"class":866},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[152,35728,35729],{"class":281,"line":11528},[152,35730,35731],{"class":866},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[152,35733,35734,35737,35740],{"class":281,"line":11536},[152,35735,35736],{"class":483},"    model.load_state_dict(torch.load(",[152,35738,35739],{"class":289},"'best_model.pth'",[152,35741,31834],{"class":483},[152,35743,35744],{"class":281,"line":11541},[152,35745,35746],{"class":866},"    # 数据加载\n",[152,35748,35749,35751,35753],{"class":281,"line":18219},[152,35750,35359],{"class":483},[152,35752,1864],{"class":476},[152,35754,35755],{"class":483},"test_data_process()\n",[152,35757,35758],{"class":281,"line":18225},[152,35759,35760],{"class":866},"    # 加载模型测试的函数\n",[152,35762,35763],{"class":281,"line":18248},[152,35764,35765],{"class":483},"    test_model_process(model,test_dataloader)\n",[152,35767,35768],{"class":281,"line":18254},[152,35769,307],{"emptyLinePlaceholder":306},[152,35771,35772],{"class":281,"line":18277},[152,35773,35774],{"class":866},"    # 验证集推理实现：\n",[152,35776,35777],{"class":281,"line":18291},[152,35778,35779],{"class":866},"    # 加载数据加载的更详细一些\n",[152,35781,35782,35784,35786,35788,35790,35792,35794],{"class":281,"line":18311},[152,35783,32574],{"class":483},[152,35785,1864],{"class":476},[152,35787,32581],{"class":289},[152,35789,3364],{"class":476},[152,35791,32586],{"class":483},[152,35793,3361],{"class":476},[152,35795,35456],{"class":289},[152,35797,35798,35800,35802],{"class":281,"line":18317},[152,35799,32626],{"class":483},[152,35801,1864],{"class":476},[152,35803,33626],{"class":483},[152,35805,35806],{"class":281,"line":18328},[152,35807,35808],{"class":866},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[152,35810,35811],{"class":281,"line":18351},[152,35812,35813],{"class":866},"    # 顺序不可改变\n",[152,35815,35816,35819,35821,35823,35826,35828,35831,35833,35836,35838,35841,35843,35846,35848,35851,35853,35856,35858,35861,35863,35866,35868,35871],{"class":281,"line":18373},[152,35817,35818],{"class":483},"    classes",[152,35820,1864],{"class":476},[152,35822,2697],{"class":483},[152,35824,35825],{"class":289},"'T-shirt\u002Ftop'",[152,35827,2186],{"class":483},[152,35829,35830],{"class":289},"'Trouser'",[152,35832,2186],{"class":483},[152,35834,35835],{"class":289},"'Pullover'",[152,35837,2186],{"class":483},[152,35839,35840],{"class":289},"'Dress'",[152,35842,2186],{"class":483},[152,35844,35845],{"class":289},"'Coat'",[152,35847,2186],{"class":483},[152,35849,35850],{"class":289},"'Sandal'",[152,35852,2186],{"class":483},[152,35854,35855],{"class":289},"'Shirt'",[152,35857,2186],{"class":483},[152,35859,35860],{"class":289},"'Sneaker'",[152,35862,2186],{"class":483},[152,35864,35865],{"class":289},"'Bag'",[152,35867,2186],{"class":483},[152,35869,35870],{"class":289},"'Ankle boot'",[152,35872,34583],{"class":483},[152,35874,35875,35877],{"class":281,"line":18378},[152,35876,35515],{"class":476},[152,35878,34221],{"class":483},[152,35880,35881],{"class":281,"line":18384},[152,35882,35883],{"class":866},"        # 将数据和标签都放到设备当中\n",[152,35885,35886,35888,35891,35893],{"class":281,"line":18398},[152,35887,5046],{"class":476},[152,35889,35890],{"class":483}," b_x,b_y ",[152,35892,27653],{"class":476},[152,35894,35534],{"class":483},[152,35896,35897,35899,35901],{"class":281,"line":18411},[152,35898,33947],{"class":483},[152,35900,1864],{"class":476},[152,35902,33952],{"class":483},[152,35904,35905,35907,35909],{"class":281,"line":18416},[152,35906,33962],{"class":483},[152,35908,1864],{"class":476},[152,35910,33967],{"class":483},[152,35912,35913],{"class":281,"line":18430},[152,35914,307],{"emptyLinePlaceholder":306},[152,35916,35917],{"class":281,"line":18435},[152,35918,35919],{"class":866},"            # 设置模型为验证模式\n",[152,35921,35922],{"class":281,"line":18441},[152,35923,34212],{"class":483},[152,35925,35926],{"class":281,"line":18446},[152,35927,35928],{"class":866},"            # 模型推理结果\n",[152,35930,35931,35933,35935],{"class":281,"line":18460},[152,35932,33997],{"class":483},[152,35934,1864],{"class":476},[152,35936,34002],{"class":483},[152,35938,35939],{"class":281,"line":18465},[152,35940,35941],{"class":866},"            # 获取最大下标，最大下标就是类别号\n",[152,35943,35944,35946,35948,35950,35952,35954,35956],{"class":281,"line":18470},[152,35945,34014],{"class":483},[152,35947,1864],{"class":476},[152,35949,34019],{"class":483},[152,35951,34022],{"class":6858},[152,35953,1864],{"class":476},[152,35955,2026],{"class":293},[152,35957,1825],{"class":483},[152,35959,35960],{"class":281,"line":18484},[152,35961,35962],{"class":866},"            # 取出张量中的数值\n",[152,35964,35965,35968,35970],{"class":281,"line":18496},[152,35966,35967],{"class":483},"            result",[152,35969,1864],{"class":476},[152,35971,35972],{"class":483},"pre_lab.item()\n",[152,35974,35975,35978,35980],{"class":281,"line":18501},[152,35976,35977],{"class":483},"            label",[152,35979,1864],{"class":476},[152,35981,35982],{"class":483},"b_y.item()\n",[152,35984,35985,35988,35990,35993,35996,35999,36001,36004],{"class":281,"line":18514},[152,35986,35987],{"class":293},"            print",[152,35989,1819],{"class":483},[152,35991,35992],{"class":289},"\"预测值：\"",[152,35994,35995],{"class":483},",classes[result],",[152,35997,35998],{"class":289},"\"------\"",[152,36000,2186],{"class":483},[152,36002,36003],{"class":289},"\"真实值：\"",[152,36005,36006],{"class":483},",classes[label])\n",[19,36008,36009],{},"（2）AlexNet",[416,36011,36012],{},[419,36013,36014],{},"神经网络构建",[270,36016,36018],{"className":31715,"code":36017,"language":31717,"meta":275,"style":275},"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",[277,36019,36020,36026,36036,36046,36058,36062,36079,36087,36102,36114,36156,36183,36226,36252,36296,36339,36382,36409,36413,36423,36428,36456,36475,36494,36498,36503,36511,36526,36536,36550,36560,36575,36590,36605,36616,36620,36625,36635,36650,36655,36669,36684,36696,36701,36712,36717,36723,36728,36740,36760,36765,36774],{"__ignoreMap":275},[152,36021,36022,36024],{"class":281,"line":282},[152,36023,31729],{"class":476},[152,36025,31732],{"class":483},[152,36027,36028,36030,36032,36034],{"class":281,"line":303},[152,36029,32074],{"class":476},[152,36031,32077],{"class":483},[152,36033,31729],{"class":476},[152,36035,32082],{"class":483},[152,36037,36038,36040,36042,36044],{"class":281,"line":310},[152,36039,32074],{"class":476},[152,36041,32094],{"class":483},[152,36043,31729],{"class":476},[152,36045,32099],{"class":483},[152,36047,36048,36050,36053,36055],{"class":281,"line":324},[152,36049,31729],{"class":476},[152,36051,36052],{"class":483}," torch.nn.functional ",[152,36054,32720],{"class":476},[152,36056,36057],{"class":483}," F\n",[152,36059,36060],{"class":281,"line":329},[152,36061,307],{"emptyLinePlaceholder":306},[152,36063,36064,36066,36069,36071,36073,36075,36077],{"class":281,"line":343},[152,36065,16309],{"class":476},[152,36067,36068],{"class":285}," AlexNet",[152,36070,1819],{"class":483},[152,36072,32115],{"class":285},[152,36074,2366],{"class":483},[152,36076,32120],{"class":285},[152,36078,32123],{"class":483},[152,36080,36081,36083,36085],{"class":281,"line":348},[152,36082,32138],{"class":476},[152,36084,32141],{"class":293},[152,36086,32144],{"class":483},[152,36088,36089,36091,36094,36096,36098,36100],{"class":281,"line":362},[152,36090,32154],{"class":293},[152,36092,36093],{"class":483},"(AlexNet,",[152,36095,32160],{"class":293},[152,36097,32163],{"class":483},[152,36099,32166],{"class":293},[152,36101,3627],{"class":483},[152,36103,36104,36106,36109,36111],{"class":281,"line":367},[152,36105,32182],{"class":293},[152,36107,36108],{"class":483},".ReLu",[152,36110,1864],{"class":476},[152,36112,36113],{"class":483},"nn.ReLU()\n",[152,36115,36116,36118,36120,36122,36124,36126,36128,36130,36132,36134,36136,36138,36140,36142,36144,36146,36148,36150,36152,36154],{"class":281,"line":381},[152,36117,32182],{"class":293},[152,36119,32185],{"class":483},[152,36121,1864],{"class":476},[152,36123,32190],{"class":483},[152,36125,32193],{"class":6858},[152,36127,1864],{"class":476},[152,36129,2026],{"class":293},[152,36131,2186],{"class":483},[152,36133,32202],{"class":6858},[152,36135,1864],{"class":476},[152,36137,2018],{"class":293},[152,36139,2186],{"class":483},[152,36141,32211],{"class":6858},[152,36143,1864],{"class":476},[152,36145,2280],{"class":293},[152,36147,2186],{"class":483},[152,36149,32266],{"class":6858},[152,36151,1864],{"class":476},[152,36153,2101],{"class":293},[152,36155,1825],{"class":483},[152,36157,36158,36160,36162,36164,36167,36169,36171,36173,36175,36177,36179,36181],{"class":281,"line":386},[152,36159,32182],{"class":293},[152,36161,32250],{"class":483},[152,36163,1864],{"class":476},[152,36165,36166],{"class":483},"nn.MaxPool2d(",[152,36168,32211],{"class":6858},[152,36170,1864],{"class":476},[152,36172,1888],{"class":293},[152,36174,2186],{"class":483},[152,36176,32266],{"class":6858},[152,36178,1864],{"class":476},[152,36180,1894],{"class":293},[152,36182,1825],{"class":483},[152,36184,36185,36187,36189,36191,36193,36195,36197,36199,36201,36203,36205,36208,36210,36212,36214,36216,36218,36220,36222,36224],{"class":281,"line":932},[152,36186,32182],{"class":293},[152,36188,32279],{"class":483},[152,36190,1864],{"class":476},[152,36192,32190],{"class":483},[152,36194,32193],{"class":6858},[152,36196,1864],{"class":476},[152,36198,2018],{"class":293},[152,36200,2186],{"class":483},[152,36202,32202],{"class":6858},[152,36204,1864],{"class":476},[152,36206,36207],{"class":293},"256",[152,36209,2186],{"class":483},[152,36211,32211],{"class":6858},[152,36213,1864],{"class":476},[152,36215,2127],{"class":293},[152,36217,2186],{"class":483},[152,36219,32220],{"class":6858},[152,36221,1864],{"class":476},[152,36223,1894],{"class":293},[152,36225,1825],{"class":483},[152,36227,36228,36230,36232,36234,36236,36238,36240,36242,36244,36246,36248,36250],{"class":281,"line":942},[152,36229,32182],{"class":293},[152,36231,32314],{"class":483},[152,36233,1864],{"class":476},[152,36235,36166],{"class":483},[152,36237,32211],{"class":6858},[152,36239,1864],{"class":476},[152,36241,1888],{"class":293},[152,36243,2186],{"class":483},[152,36245,32266],{"class":6858},[152,36247,1864],{"class":476},[152,36249,1894],{"class":293},[152,36251,1825],{"class":483},[152,36253,36254,36256,36259,36261,36263,36265,36267,36269,36271,36273,36275,36278,36280,36282,36284,36286,36288,36290,36292,36294],{"class":281,"line":949},[152,36255,32182],{"class":293},[152,36257,36258],{"class":483},".c5",[152,36260,1864],{"class":476},[152,36262,32190],{"class":483},[152,36264,32193],{"class":6858},[152,36266,1864],{"class":476},[152,36268,36207],{"class":293},[152,36270,2186],{"class":483},[152,36272,32202],{"class":6858},[152,36274,1864],{"class":476},[152,36276,36277],{"class":293},"384",[152,36279,2186],{"class":483},[152,36281,32211],{"class":6858},[152,36283,1864],{"class":476},[152,36285,1888],{"class":293},[152,36287,2186],{"class":483},[152,36289,32220],{"class":6858},[152,36291,1864],{"class":476},[152,36293,2026],{"class":293},[152,36295,1825],{"class":483},[152,36297,36298,36300,36303,36305,36307,36309,36311,36313,36315,36317,36319,36321,36323,36325,36327,36329,36331,36333,36335,36337],{"class":281,"line":954},[152,36299,32182],{"class":293},[152,36301,36302],{"class":483},".c6",[152,36304,1864],{"class":476},[152,36306,32190],{"class":483},[152,36308,32193],{"class":6858},[152,36310,1864],{"class":476},[152,36312,36277],{"class":293},[152,36314,2186],{"class":483},[152,36316,32202],{"class":6858},[152,36318,1864],{"class":476},[152,36320,36277],{"class":293},[152,36322,2186],{"class":483},[152,36324,32211],{"class":6858},[152,36326,1864],{"class":476},[152,36328,1888],{"class":293},[152,36330,2186],{"class":483},[152,36332,32220],{"class":6858},[152,36334,1864],{"class":476},[152,36336,2026],{"class":293},[152,36338,1825],{"class":483},[152,36340,36341,36343,36346,36348,36350,36352,36354,36356,36358,36360,36362,36364,36366,36368,36370,36372,36374,36376,36378,36380],{"class":281,"line":959},[152,36342,32182],{"class":293},[152,36344,36345],{"class":483},".c7",[152,36347,1864],{"class":476},[152,36349,32190],{"class":483},[152,36351,32193],{"class":6858},[152,36353,1864],{"class":476},[152,36355,36277],{"class":293},[152,36357,2186],{"class":483},[152,36359,32202],{"class":6858},[152,36361,1864],{"class":476},[152,36363,36207],{"class":293},[152,36365,2186],{"class":483},[152,36367,32211],{"class":6858},[152,36369,1864],{"class":476},[152,36371,1888],{"class":293},[152,36373,2186],{"class":483},[152,36375,32220],{"class":6858},[152,36377,1864],{"class":476},[152,36379,2026],{"class":293},[152,36381,1825],{"class":483},[152,36383,36384,36386,36389,36391,36393,36395,36397,36399,36401,36403,36405,36407],{"class":281,"line":970},[152,36385,32182],{"class":293},[152,36387,36388],{"class":483},".s8",[152,36390,1864],{"class":476},[152,36392,36166],{"class":483},[152,36394,32211],{"class":6858},[152,36396,1864],{"class":476},[152,36398,1888],{"class":293},[152,36400,2186],{"class":483},[152,36402,32266],{"class":6858},[152,36404,1864],{"class":476},[152,36406,1894],{"class":293},[152,36408,1825],{"class":483},[152,36410,36411],{"class":281,"line":979},[152,36412,32339],{"class":866},[152,36414,36415,36417,36419,36421],{"class":281,"line":989},[152,36416,32182],{"class":293},[152,36418,32346],{"class":483},[152,36420,1864],{"class":476},[152,36422,32351],{"class":483},[152,36424,36425],{"class":281,"line":996},[152,36426,36427],{"class":866},"       # 定义全连接层\n",[152,36429,36430,36432,36435,36437,36439,36441,36443,36445,36447,36449,36451,36454],{"class":281,"line":1001},[152,36431,32182],{"class":293},[152,36433,36434],{"class":483},".f1",[152,36436,1864],{"class":476},[152,36438,32368],{"class":483},[152,36440,2152],{"class":293},[152,36442,2263],{"class":476},[152,36444,2152],{"class":293},[152,36446,2263],{"class":476},[152,36448,36207],{"class":293},[152,36450,2186],{"class":483},[152,36452,36453],{"class":293},"4096",[152,36455,1825],{"class":483},[152,36457,36458,36460,36463,36465,36467,36469,36471,36473],{"class":281,"line":1006},[152,36459,32182],{"class":293},[152,36461,36462],{"class":483},".f2",[152,36464,1864],{"class":476},[152,36466,32368],{"class":483},[152,36468,36453],{"class":293},[152,36470,2186],{"class":483},[152,36472,36453],{"class":293},[152,36474,1825],{"class":483},[152,36476,36477,36479,36482,36484,36486,36488,36490,36492],{"class":281,"line":1018},[152,36478,32182],{"class":293},[152,36480,36481],{"class":483},".f3",[152,36483,1864],{"class":476},[152,36485,32368],{"class":483},[152,36487,36453],{"class":293},[152,36489,2186],{"class":483},[152,36491,2254],{"class":293},[152,36493,1825],{"class":483},[152,36495,36496],{"class":281,"line":1027},[152,36497,307],{"emptyLinePlaceholder":306},[152,36499,36500],{"class":281,"line":1037},[152,36501,36502],{"class":866},"    # 定义前向传播\n",[152,36504,36505,36507,36509],{"class":281,"line":1044},[152,36506,32138],{"class":476},[152,36508,32430],{"class":285},[152,36510,32433],{"class":483},[152,36512,36513,36515,36517,36519,36522,36524],{"class":281,"line":1049},[152,36514,32438],{"class":483},[152,36516,1864],{"class":476},[152,36518,32160],{"class":293},[152,36520,36521],{"class":483},".ReLu(",[152,36523,32160],{"class":293},[152,36525,32450],{"class":483},[152,36527,36528,36530,36532,36534],{"class":281,"line":1054},[152,36529,32438],{"class":483},[152,36531,1864],{"class":476},[152,36533,32160],{"class":293},[152,36535,32461],{"class":483},[152,36537,36538,36540,36542,36544,36546,36548],{"class":281,"line":1065},[152,36539,32438],{"class":483},[152,36541,1864],{"class":476},[152,36543,32160],{"class":293},[152,36545,36521],{"class":483},[152,36547,32160],{"class":293},[152,36549,32476],{"class":483},[152,36551,36552,36554,36556,36558],{"class":281,"line":1074},[152,36553,32438],{"class":483},[152,36555,1864],{"class":476},[152,36557,32160],{"class":293},[152,36559,32487],{"class":483},[152,36561,36562,36564,36566,36568,36570,36572],{"class":281,"line":1084},[152,36563,32438],{"class":483},[152,36565,1864],{"class":476},[152,36567,32160],{"class":293},[152,36569,36521],{"class":483},[152,36571,32160],{"class":293},[152,36573,36574],{"class":483},".c5(x))\n",[152,36576,36577,36579,36581,36583,36585,36587],{"class":281,"line":1091},[152,36578,32438],{"class":483},[152,36580,1864],{"class":476},[152,36582,32160],{"class":293},[152,36584,36521],{"class":483},[152,36586,32160],{"class":293},[152,36588,36589],{"class":483},".c6(x))\n",[152,36591,36592,36594,36596,36598,36600,36602],{"class":281,"line":1096},[152,36593,32438],{"class":483},[152,36595,1864],{"class":476},[152,36597,32160],{"class":293},[152,36599,36521],{"class":483},[152,36601,32160],{"class":293},[152,36603,36604],{"class":483},".c7(x))\n",[152,36606,36607,36609,36611,36613],{"class":281,"line":1101},[152,36608,32438],{"class":483},[152,36610,1864],{"class":476},[152,36612,32160],{"class":293},[152,36614,36615],{"class":483},".s8(x)\n",[152,36617,36618],{"class":281,"line":1112},[152,36619,307],{"emptyLinePlaceholder":306},[152,36621,36622],{"class":281,"line":1121},[152,36623,36624],{"class":866},"        # 展平加线性全连接层\n",[152,36626,36627,36629,36631,36633],{"class":281,"line":1131},[152,36628,32438],{"class":483},[152,36630,1864],{"class":476},[152,36632,32160],{"class":293},[152,36634,32498],{"class":483},[152,36636,36637,36639,36641,36643,36645,36647],{"class":281,"line":1138},[152,36638,32438],{"class":483},[152,36640,1864],{"class":476},[152,36642,32160],{"class":293},[152,36644,36521],{"class":483},[152,36646,32160],{"class":293},[152,36648,36649],{"class":483},".f1(x))\n",[152,36651,36652],{"class":281,"line":1143},[152,36653,36654],{"class":866},"        # 还需要dropout对神经元随机进行失活\n",[152,36656,36657,36659,36661,36664,36667],{"class":281,"line":1148},[152,36658,32438],{"class":483},[152,36660,1864],{"class":476},[152,36662,36663],{"class":483},"F.dropout(x,",[152,36665,36666],{"class":293},"0.5",[152,36668,1825],{"class":483},[152,36670,36671,36673,36675,36677,36679,36681],{"class":281,"line":1159},[152,36672,32438],{"class":483},[152,36674,1864],{"class":476},[152,36676,32160],{"class":293},[152,36678,36521],{"class":483},[152,36680,32160],{"class":293},[152,36682,36683],{"class":483},".f2(x))\n",[152,36685,36686,36688,36690,36692,36694],{"class":281,"line":1168},[152,36687,32438],{"class":483},[152,36689,1864],{"class":476},[152,36691,36663],{"class":483},[152,36693,36666],{"class":293},[152,36695,1825],{"class":483},[152,36697,36698],{"class":281,"line":1178},[152,36699,36700],{"class":866},"        # 直接输出\n",[152,36702,36703,36705,36707,36709],{"class":281,"line":1185},[152,36704,32438],{"class":483},[152,36706,1864],{"class":476},[152,36708,32160],{"class":293},[152,36710,36711],{"class":483},".f3(x)\n",[152,36713,36714],{"class":281,"line":1190},[152,36715,36716],{"class":866},"        # 前向传播输出\n",[152,36718,36719,36721],{"class":281,"line":1195},[152,36720,16367],{"class":476},[152,36722,32546],{"class":483},[152,36724,36725],{"class":281,"line":1206},[152,36726,36727],{"class":866},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[152,36729,36730,36732,36734,36736,36738],{"class":281,"line":1215},[152,36731,3202],{"class":476},[152,36733,32557],{"class":293},[152,36735,4592],{"class":476},[152,36737,32562],{"class":289},[152,36739,5382],{"class":483},[152,36741,36742,36744,36746,36748,36750,36752,36754,36756,36758],{"class":281,"line":1225},[152,36743,32574],{"class":483},[152,36745,1864],{"class":476},[152,36747,31788],{"class":483},[152,36749,32581],{"class":289},[152,36751,3364],{"class":476},[152,36753,32586],{"class":483},[152,36755,3361],{"class":476},[152,36757,31813],{"class":289},[152,36759,1825],{"class":483},[152,36761,36762],{"class":281,"line":1232},[152,36763,36764],{"class":866},"    # 模型实例化，然后将实例化的模型放到设备中\n",[152,36766,36767,36769,36771],{"class":281,"line":1237},[152,36768,32626],{"class":483},[152,36770,1864],{"class":476},[152,36772,36773],{"class":483},"AlexNet().to(device)\n",[152,36775,36776,36778,36780,36782,36784,36787,36789,36791],{"class":281,"line":1242},[152,36777,32636],{"class":293},[152,36779,32639],{"class":483},[152,36781,2026],{"class":293},[152,36783,2186],{"class":483},[152,36785,36786],{"class":293},"227",[152,36788,2186],{"class":483},[152,36790,36786],{"class":293},[152,36792,32652],{"class":483},[416,36794,36795],{"start":303},[419,36796,32665],{},[270,36798,36800],{"className":31715,"code":36799,"language":31717,"meta":275,"style":275},"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",[277,36801,36802,36808,36814,36824,36830,36840,36850,36860,36870,36880,36884,36895,36905,36909,36913,36917,36925,36937,36947,36963,36973,37005,37019,37029,37039,37043,37053,37067,37077,37087,37097,37103,37107,37111,37115,37119,37123,37131,37151,37155,37159,37163,37167,37171,37187,37191,37195,37203,37207,37211,37219,37223,37227,37231,37239,37243,37247,37251,37255,37263,37267,37275,37279,37287,37291,37299,37303,37311,37315,37319,37327,37331,37335,37339,37351,37375,37389,37393,37397,37401,37409,37413,37421,37425,37433,37437,37445,37449,37457,37461,37469,37473,37485,37489,37497,37501,37509,37513,37517,37521,37525,37533,37537,37553,37557,37565,37569,37573,37577,37581,37585,37589,37593,37609,37613,37625,37629,37641,37645,37657,37661,37669,37673,37681,37685,37689,37694,37700,37704,37713,37717,37734,37738,37747,37751,37769,37782,37787,37800,37804,37808,37816,37820,37824,37832,37836,37844,37848,37856,37860,37864,37906,37948,37952,37956,37972,37976,37992,37996,38000,38008,38012,38016,38028,38066,38071,38076,38085,38089,38103,38113,38119,38125,38131,38137,38141,38145,38151,38155,38159,38167,38171,38189,38193,38197,38201,38217,38221,38225,38229,38233,38237,38257,38277,38281,38285,38289,38297,38305,38309,38325,38345,38365,38369,38373,38381,38389,38393,38397,38401,38413,38417,38427,38435,38452],{"__ignoreMap":275},[152,36803,36804,36806],{"class":281,"line":282},[152,36805,31729],{"class":476},[152,36807,33159],{"class":483},[152,36809,36810,36812],{"class":281,"line":303},[152,36811,31729],{"class":476},[152,36813,33166],{"class":483},[152,36815,36816,36818,36820,36822],{"class":281,"line":310},[152,36817,31729],{"class":476},[152,36819,33177],{"class":483},[152,36821,32720],{"class":476},[152,36823,33182],{"class":483},[152,36825,36826,36828],{"class":281,"line":324},[152,36827,31729],{"class":476},[152,36829,31732],{"class":483},[152,36831,36832,36834,36836,36838],{"class":281,"line":329},[152,36833,32074],{"class":476},[152,36835,32752],{"class":483},[152,36837,31729],{"class":476},[152,36839,33199],{"class":483},[152,36841,36842,36844,36846,36848],{"class":281,"line":343},[152,36843,32074],{"class":476},[152,36845,32705],{"class":483},[152,36847,31729],{"class":476},[152,36849,32710],{"class":483},[152,36851,36852,36854,36856,36858],{"class":281,"line":348},[152,36853,32074],{"class":476},[152,36855,32735],{"class":483},[152,36857,31729],{"class":476},[152,36859,32740],{"class":483},[152,36861,36862,36864,36866,36868],{"class":281,"line":362},[152,36863,31729],{"class":476},[152,36865,32752],{"class":483},[152,36867,32720],{"class":476},[152,36869,32757],{"class":483},[152,36871,36872,36874,36876,36878],{"class":281,"line":367},[152,36873,31729],{"class":476},[152,36875,32769],{"class":483},[152,36877,32720],{"class":476},[152,36879,32774],{"class":483},[152,36881,36882],{"class":281,"line":381},[152,36883,33244],{"class":866},[152,36885,36886,36888,36890,36892],{"class":281,"line":386},[152,36887,32074],{"class":476},[152,36889,33251],{"class":483},[152,36891,31729],{"class":476},[152,36893,36894],{"class":483}," AlexNet\n",[152,36896,36897,36899,36901,36903],{"class":281,"line":932},[152,36898,32074],{"class":476},[152,36900,32077],{"class":483},[152,36902,31729],{"class":476},[152,36904,32082],{"class":483},[152,36906,36907],{"class":281,"line":942},[152,36908,307],{"emptyLinePlaceholder":306},[152,36910,36911],{"class":281,"line":949},[152,36912,307],{"emptyLinePlaceholder":306},[152,36914,36915],{"class":281,"line":954},[152,36916,33279],{"class":866},[152,36918,36919,36921,36923],{"class":281,"line":959},[152,36920,33284],{"class":476},[152,36922,33287],{"class":285},[152,36924,33290],{"class":483},[152,36926,36927,36929,36931,36933,36935],{"class":281,"line":970},[152,36928,33295],{"class":483},[152,36930,1864],{"class":476},[152,36932,32792],{"class":483},[152,36934,32800],{"class":289},[152,36936,32803],{"class":483},[152,36938,36939,36941,36943,36945],{"class":281,"line":979},[152,36940,33308],{"class":6858},[152,36942,1864],{"class":476},[152,36944,32813],{"class":293},[152,36946,32803],{"class":483},[152,36948,36949,36951,36953,36955,36957,36959,36961],{"class":281,"line":989},[152,36950,33319],{"class":6858},[152,36952,1864],{"class":476},[152,36954,32830],{"class":483},[152,36956,32833],{"class":6858},[152,36958,1864],{"class":476},[152,36960,36786],{"class":293},[152,36962,32841],{"class":483},[152,36964,36965,36967,36969,36971],{"class":281,"line":996},[152,36966,33336],{"class":6858},[152,36968,1864],{"class":476},[152,36970,32813],{"class":293},[152,36972,1825],{"class":483},[152,36974,36975,36977,36979,36981,36983,36985,36987,36989,36991,36993,36995,36997,36999,37001,37003],{"class":281,"line":1001},[152,36976,33347],{"class":483},[152,36978,1864],{"class":476},[152,36980,33352],{"class":483},[152,36982,33355],{"class":293},[152,36984,1819],{"class":483},[152,36986,33360],{"class":293},[152,36988,2263],{"class":476},[152,36990,9000],{"class":293},[152,36992,33367],{"class":483},[152,36994,33355],{"class":293},[152,36996,1819],{"class":483},[152,36998,33374],{"class":293},[152,37000,2263],{"class":476},[152,37002,9000],{"class":293},[152,37004,33381],{"class":483},[152,37006,37007,37009,37011,37013,37015,37017],{"class":281,"line":1006},[152,37008,33386],{"class":483},[152,37010,1864],{"class":476},[152,37012,33391],{"class":483},[152,37014,32874],{"class":6858},[152,37016,1864],{"class":476},[152,37018,32879],{"class":483},[152,37020,37021,37023,37025,37027],{"class":281,"line":1018},[152,37022,33402],{"class":6858},[152,37024,1864],{"class":476},[152,37026,33407],{"class":293},[152,37028,32803],{"class":483},[152,37030,37031,37033,37035,37037],{"class":281,"line":1027},[152,37032,33414],{"class":6858},[152,37034,1864],{"class":476},[152,37036,32813],{"class":293},[152,37038,32803],{"class":483},[152,37040,37041],{"class":281,"line":1037},[152,37042,33425],{"class":866},[152,37044,37045,37047,37049,37051],{"class":281,"line":1044},[152,37046,33430],{"class":6858},[152,37048,1864],{"class":476},[152,37050,2203],{"class":293},[152,37052,1825],{"class":483},[152,37054,37055,37057,37059,37061,37063,37065],{"class":281,"line":1049},[152,37056,33441],{"class":483},[152,37058,1864],{"class":476},[152,37060,32871],{"class":483},[152,37062,32874],{"class":6858},[152,37064,1864],{"class":476},[152,37066,33452],{"class":483},[152,37068,37069,37071,37073,37075],{"class":281,"line":1054},[152,37070,33457],{"class":6858},[152,37072,1864],{"class":476},[152,37074,33407],{"class":293},[152,37076,32803],{"class":483},[152,37078,37079,37081,37083,37085],{"class":281,"line":1065},[152,37080,33468],{"class":6858},[152,37082,1864],{"class":476},[152,37084,32813],{"class":293},[152,37086,32803],{"class":483},[152,37088,37089,37091,37093,37095],{"class":281,"line":1074},[152,37090,33479],{"class":6858},[152,37092,1864],{"class":476},[152,37094,2203],{"class":293},[152,37096,1825],{"class":483},[152,37098,37099,37101],{"class":281,"line":1084},[152,37100,5732],{"class":476},[152,37102,33492],{"class":483},[152,37104,37105],{"class":281,"line":1091},[152,37106,307],{"emptyLinePlaceholder":306},[152,37108,37109],{"class":281,"line":1096},[152,37110,33501],{"class":866},[152,37112,37113],{"class":281,"line":1101},[152,37114,33506],{"class":866},[152,37116,37117],{"class":281,"line":1112},[152,37118,307],{"emptyLinePlaceholder":306},[152,37120,37121],{"class":281,"line":1121},[152,37122,33515],{"class":866},[152,37124,37125,37127,37129],{"class":281,"line":1131},[152,37126,33284],{"class":476},[152,37128,33522],{"class":285},[152,37130,33525],{"class":483},[152,37132,37133,37135,37137,37139,37141,37143,37145,37147,37149],{"class":281,"line":1138},[152,37134,32574],{"class":483},[152,37136,1864],{"class":476},[152,37138,31788],{"class":483},[152,37140,32581],{"class":289},[152,37142,3364],{"class":476},[152,37144,32586],{"class":483},[152,37146,3361],{"class":476},[152,37148,33544],{"class":289},[152,37150,1825],{"class":483},[152,37152,37153],{"class":281,"line":1143},[152,37154,307],{"emptyLinePlaceholder":306},[152,37156,37157],{"class":281,"line":1148},[152,37158,307],{"emptyLinePlaceholder":306},[152,37160,37161],{"class":281,"line":1159},[152,37162,33559],{"class":866},[152,37164,37165],{"class":281,"line":1168},[152,37166,33564],{"class":866},[152,37168,37169],{"class":281,"line":1178},[152,37170,33569],{"class":866},[152,37172,37173,37175,37177,37179,37181,37183,37185],{"class":281,"line":1185},[152,37174,33574],{"class":483},[152,37176,1864],{"class":476},[152,37178,33579],{"class":483},[152,37180,33582],{"class":6858},[152,37182,1864],{"class":476},[152,37184,33587],{"class":293},[152,37186,1825],{"class":483},[152,37188,37189],{"class":281,"line":1190},[152,37190,307],{"emptyLinePlaceholder":306},[152,37192,37193],{"class":281,"line":1195},[152,37194,33598],{"class":866},[152,37196,37197,37199,37201],{"class":281,"line":1206},[152,37198,33603],{"class":483},[152,37200,1864],{"class":476},[152,37202,33608],{"class":483},[152,37204,37205],{"class":281,"line":1215},[152,37206,307],{"emptyLinePlaceholder":306},[152,37208,37209],{"class":281,"line":1225},[152,37210,33617],{"class":866},[152,37212,37213,37215,37217],{"class":281,"line":1232},[152,37214,32626],{"class":483},[152,37216,1864],{"class":476},[152,37218,33626],{"class":483},[152,37220,37221],{"class":281,"line":1237},[152,37222,33631],{"class":866},[152,37224,37225],{"class":281,"line":1242},[152,37226,33636],{"class":866},[152,37228,37229],{"class":281,"line":1253},[152,37230,33641],{"class":866},[152,37232,37233,37235,37237],{"class":281,"line":1262},[152,37234,33646],{"class":483},[152,37236,1864],{"class":476},[152,37238,33651],{"class":483},[152,37240,37241],{"class":281,"line":1272},[152,37242,307],{"emptyLinePlaceholder":306},[152,37244,37245],{"class":281,"line":1279},[152,37246,307],{"emptyLinePlaceholder":306},[152,37248,37249],{"class":281,"line":1284},[152,37250,33664],{"class":866},[152,37252,37253],{"class":281,"line":1289},[152,37254,33669],{"class":866},[152,37256,37257,37259,37261],{"class":281,"line":1301},[152,37258,33674],{"class":483},[152,37260,1864],{"class":476},[152,37262,33679],{"class":293},[152,37264,37265],{"class":281,"line":1310},[152,37266,33684],{"class":866},[152,37268,37269,37271,37273],{"class":281,"line":1320},[152,37270,33689],{"class":483},[152,37272,1864],{"class":476},[152,37274,33694],{"class":483},[152,37276,37277],{"class":281,"line":1327},[152,37278,33699],{"class":866},[152,37280,37281,37283,37285],{"class":281,"line":11528},[152,37282,33704],{"class":483},[152,37284,1864],{"class":476},[152,37286,33694],{"class":483},[152,37288,37289],{"class":281,"line":11536},[152,37290,33713],{"class":866},[152,37292,37293,37295,37297],{"class":281,"line":11541},[152,37294,33718],{"class":483},[152,37296,1864],{"class":476},[152,37298,33694],{"class":483},[152,37300,37301],{"class":281,"line":18219},[152,37302,33727],{"class":866},[152,37304,37305,37307,37309],{"class":281,"line":18225},[152,37306,33732],{"class":483},[152,37308,1864],{"class":476},[152,37310,33694],{"class":483},[152,37312,37313],{"class":281,"line":18248},[152,37314,307],{"emptyLinePlaceholder":306},[152,37316,37317],{"class":281,"line":18254},[152,37318,33745],{"class":866},[152,37320,37321,37323,37325],{"class":281,"line":18277},[152,37322,33750],{"class":483},[152,37324,1864],{"class":476},[152,37326,33755],{"class":483},[152,37328,37329],{"class":281,"line":18291},[152,37330,307],{"emptyLinePlaceholder":306},[152,37332,37333],{"class":281,"line":18311},[152,37334,307],{"emptyLinePlaceholder":306},[152,37336,37337],{"class":281,"line":18317},[152,37338,33768],{"class":866},[152,37340,37341,37343,37345,37347,37349],{"class":281,"line":18328},[152,37342,4844],{"class":476},[152,37344,33775],{"class":483},[152,37346,27653],{"class":476},[152,37348,33780],{"class":293},[152,37350,33783],{"class":483},[152,37352,37353,37355,37357,37359,37361,37363,37365,37367,37369,37371,37373],{"class":281,"line":18351},[152,37354,33788],{"class":293},[152,37356,1819],{"class":483},[152,37358,33793],{"class":289},[152,37360,33796],{"class":293},[152,37362,2392],{"class":289},[152,37364,33796],{"class":293},[152,37366,2059],{"class":289},[152,37368,33805],{"class":483},[152,37370,2340],{"class":476},[152,37372,2026],{"class":293},[152,37374,31834],{"class":483},[152,37376,37377,37379,37381,37383,37385,37387],{"class":281,"line":18373},[152,37378,33788],{"class":293},[152,37380,1819],{"class":483},[152,37382,33820],{"class":289},[152,37384,2263],{"class":476},[152,37386,2254],{"class":293},[152,37388,1825],{"class":483},[152,37390,37391],{"class":281,"line":18378},[152,37392,307],{"emptyLinePlaceholder":306},[152,37394,37395],{"class":281,"line":18384},[152,37396,33835],{"class":866},[152,37398,37399],{"class":281,"line":18398},[152,37400,33840],{"class":866},[152,37402,37403,37405,37407],{"class":281,"line":18411},[152,37404,33845],{"class":483},[152,37406,1864],{"class":476},[152,37408,33679],{"class":293},[152,37410,37411],{"class":281,"line":18416},[152,37412,33854],{"class":866},[152,37414,37415,37417,37419],{"class":281,"line":18430},[152,37416,33859],{"class":483},[152,37418,1864],{"class":476},[152,37420,4728],{"class":293},[152,37422,37423],{"class":281,"line":18435},[152,37424,33868],{"class":866},[152,37426,37427,37429,37431],{"class":281,"line":18441},[152,37428,33873],{"class":483},[152,37430,1864],{"class":476},[152,37432,33679],{"class":293},[152,37434,37435],{"class":281,"line":18446},[152,37436,33882],{"class":866},[152,37438,37439,37441,37443],{"class":281,"line":18460},[152,37440,33887],{"class":483},[152,37442,1864],{"class":476},[152,37444,4728],{"class":293},[152,37446,37447],{"class":281,"line":18465},[152,37448,33896],{"class":866},[152,37450,37451,37453,37455],{"class":281,"line":18470},[152,37452,33901],{"class":483},[152,37454,1864],{"class":476},[152,37456,4728],{"class":293},[152,37458,37459],{"class":281,"line":18484},[152,37460,33910],{"class":866},[152,37462,37463,37465,37467],{"class":281,"line":18496},[152,37464,33915],{"class":483},[152,37466,1864],{"class":476},[152,37468,4728],{"class":293},[152,37470,37471],{"class":281,"line":18501},[152,37472,33924],{"class":866},[152,37474,37475,37477,37479,37481,37483],{"class":281,"line":18514},[152,37476,5046],{"class":476},[152,37478,32938],{"class":483},[152,37480,27653],{"class":476},[152,37482,32943],{"class":293},[152,37484,33937],{"class":483},[152,37486,37487],{"class":281,"line":18519},[152,37488,33942],{"class":866},[152,37490,37491,37493,37495],{"class":281,"line":18524},[152,37492,33947],{"class":483},[152,37494,1864],{"class":476},[152,37496,33952],{"class":483},[152,37498,37499],{"class":281,"line":18529},[152,37500,33957],{"class":866},[152,37502,37503,37505,37507],{"class":281,"line":18542},[152,37504,33962],{"class":483},[152,37506,1864],{"class":476},[152,37508,33967],{"class":483},[152,37510,37511],{"class":281,"line":18547},[152,37512,33973],{"class":866},[152,37514,37515],{"class":281,"line":33970},[152,37516,33979],{"class":483},[152,37518,37519],{"class":281,"line":33976},[152,37520,33985],{"class":866},[152,37522,37523],{"class":281,"line":33982},[152,37524,33991],{"class":866},[152,37526,37527,37529,37531],{"class":281,"line":33988},[152,37528,33997],{"class":483},[152,37530,1864],{"class":476},[152,37532,34002],{"class":483},[152,37534,37535],{"class":281,"line":33994},[152,37536,34008],{"class":866},[152,37538,37539,37541,37543,37545,37547,37549,37551],{"class":281,"line":34005},[152,37540,34014],{"class":483},[152,37542,1864],{"class":476},[152,37544,34019],{"class":483},[152,37546,34022],{"class":6858},[152,37548,1864],{"class":476},[152,37550,2026],{"class":293},[152,37552,1825],{"class":483},[152,37554,37555],{"class":281,"line":34011},[152,37556,34034],{"class":866},[152,37558,37559,37561,37563],{"class":281,"line":34031},[152,37560,34040],{"class":483},[152,37562,1864],{"class":476},[152,37564,34045],{"class":483},[152,37566,37567],{"class":281,"line":34037},[152,37568,34051],{"class":866},[152,37570,37571],{"class":281,"line":34048},[152,37572,34057],{"class":483},[152,37574,37575],{"class":281,"line":34054},[152,37576,34063],{"class":866},[152,37578,37579],{"class":281,"line":34060},[152,37580,34069],{"class":483},[152,37582,37583],{"class":281,"line":34066},[152,37584,34075],{"class":866},[152,37586,37587],{"class":281,"line":34072},[152,37588,34081],{"class":483},[152,37590,37591],{"class":281,"line":34078},[152,37592,34087],{"class":866},[152,37594,37595,37597,37599,37601,37603,37605,37607],{"class":281,"line":34084},[152,37596,34093],{"class":483},[152,37598,11109],{"class":476},[152,37600,34098],{"class":483},[152,37602,2263],{"class":476},[152,37604,34103],{"class":483},[152,37606,2000],{"class":293},[152,37608,1825],{"class":483},[152,37610,37611],{"class":281,"line":34090},[152,37612,34113],{"class":866},[152,37614,37615,37617,37619,37621,37623],{"class":281,"line":34110},[152,37616,34119],{"class":483},[152,37618,11109],{"class":476},[152,37620,34124],{"class":483},[152,37622,4592],{"class":476},[152,37624,34129],{"class":483},[152,37626,37627],{"class":281,"line":34116},[152,37628,34135],{"class":866},[152,37630,37631,37633,37635,37637,37639],{"class":281,"line":34132},[152,37632,34141],{"class":483},[152,37634,11109],{"class":476},[152,37636,34103],{"class":483},[152,37638,2000],{"class":293},[152,37640,1825],{"class":483},[152,37642,37643],{"class":281,"line":34138},[152,37644,34155],{"class":866},[152,37646,37647,37649,37651,37653,37655],{"class":281,"line":34152},[152,37648,5046],{"class":476},[152,37650,34163],{"class":483},[152,37652,27653],{"class":476},[152,37654,32943],{"class":293},[152,37656,34170],{"class":483},[152,37658,37659],{"class":281,"line":34158},[152,37660,34176],{"class":866},[152,37662,37663,37665,37667],{"class":281,"line":34173},[152,37664,33947],{"class":483},[152,37666,1864],{"class":476},[152,37668,33952],{"class":483},[152,37670,37671],{"class":281,"line":34179},[152,37672,34191],{"class":866},[152,37674,37675,37677,37679],{"class":281,"line":34188},[152,37676,33962],{"class":483},[152,37678,1864],{"class":476},[152,37680,33967],{"class":483},[152,37682,37683],{"class":281,"line":34194},[152,37684,34206],{"class":866},[152,37686,37687],{"class":281,"line":34203},[152,37688,34212],{"class":483},[152,37690,37691],{"class":281,"line":34209},[152,37692,37693],{"class":866},"            # 验证时不计算梯度以节省内存\u002F计算\n",[152,37695,37696,37698],{"class":281,"line":34215},[152,37697,34218],{"class":476},[152,37699,34221],{"class":483},[152,37701,37702],{"class":281,"line":34224},[152,37703,34227],{"class":866},[152,37705,37706,37709,37711],{"class":281,"line":34230},[152,37707,37708],{"class":483},"                output",[152,37710,1864],{"class":476},[152,37712,34002],{"class":483},[152,37714,37715],{"class":281,"line":34241},[152,37716,34244],{"class":866},[152,37718,37719,37722,37724,37726,37728,37730,37732],{"class":281,"line":34247},[152,37720,37721],{"class":483},"                pre_lab",[152,37723,1864],{"class":476},[152,37725,34019],{"class":483},[152,37727,34022],{"class":6858},[152,37729,1864],{"class":476},[152,37731,2026],{"class":293},[152,37733,1825],{"class":483},[152,37735,37736],{"class":281,"line":34266},[152,37737,34269],{"class":866},[152,37739,37740,37743,37745],{"class":281,"line":34272},[152,37741,37742],{"class":483},"                val_batch_loss",[152,37744,1864],{"class":476},[152,37746,34045],{"class":483},[152,37748,37749],{"class":281,"line":34283},[152,37750,34286],{"class":866},[152,37752,37753,37756,37758,37761,37763,37765,37767],{"class":281,"line":34289},[152,37754,37755],{"class":483},"                val_loss",[152,37757,11109],{"class":476},[152,37759,37760],{"class":483},"val_batch_loss.item()",[152,37762,2263],{"class":476},[152,37764,34103],{"class":483},[152,37766,2000],{"class":293},[152,37768,1825],{"class":483},[152,37770,37771,37774,37776,37778,37780],{"class":281,"line":34309},[152,37772,37773],{"class":483},"                val_corrects",[152,37775,11109],{"class":476},[152,37777,34124],{"class":483},[152,37779,4592],{"class":476},[152,37781,34129],{"class":483},[152,37783,37784],{"class":281,"line":34325},[152,37785,37786],{"class":866},"            # 当前用于验证的样本数量\n",[152,37788,37789,37792,37794,37796,37798],{"class":281,"line":34331},[152,37790,37791],{"class":483},"            val_num",[152,37793,11109],{"class":476},[152,37795,34103],{"class":483},[152,37797,2000],{"class":293},[152,37799,1825],{"class":483},[152,37801,37802],{"class":281,"line":34345},[152,37803,34348],{"class":866},[152,37805,37806],{"class":281,"line":34351},[152,37807,34354],{"class":866},[152,37809,37810,37812,37814],{"class":281,"line":34357},[152,37811,34360],{"class":483},[152,37813,2392],{"class":476},[152,37815,34365],{"class":483},[152,37817,37818],{"class":281,"line":34368},[152,37819,34371],{"class":866},[152,37821,37822],{"class":281,"line":34374},[152,37823,34377],{"class":866},[152,37825,37826,37828,37830],{"class":281,"line":34380},[152,37827,34383],{"class":483},[152,37829,2392],{"class":476},[152,37831,34365],{"class":483},[152,37833,37834],{"class":281,"line":34390},[152,37835,34393],{"class":866},[152,37837,37838,37840,37842],{"class":281,"line":34396},[152,37839,34399],{"class":483},[152,37841,2392],{"class":476},[152,37843,34404],{"class":483},[152,37845,37846],{"class":281,"line":34407},[152,37847,34410],{"class":866},[152,37849,37850,37852,37854],{"class":281,"line":34413},[152,37851,34416],{"class":483},[152,37853,2392],{"class":476},[152,37855,34404],{"class":483},[152,37857,37858],{"class":281,"line":34423},[152,37859,307],{"emptyLinePlaceholder":306},[152,37861,37862],{"class":281,"line":34428},[152,37863,34431],{"class":866},[152,37865,37866,37868,37870,37872,37874,37876,37878,37880,37882,37884,37886,37888,37890,37892,37894,37896,37898,37900,37902,37904],{"class":281,"line":34434},[152,37867,33788],{"class":293},[152,37869,1819],{"class":483},[152,37871,5235],{"class":289},[152,37873,33796],{"class":293},[152,37875,34445],{"class":289},[152,37877,2703],{"class":293},[152,37879,34450],{"class":476},[152,37881,2752],{"class":293},[152,37883,34455],{"class":289},[152,37885,2703],{"class":293},[152,37887,34450],{"class":476},[152,37889,2752],{"class":293},[152,37891,5235],{"class":289},[152,37893,34466],{"class":483},[152,37895,2340],{"class":476},[152,37897,2026],{"class":293},[152,37899,34473],{"class":483},[152,37901,2340],{"class":476},[152,37903,2026],{"class":293},[152,37905,34480],{"class":483},[152,37907,37908,37910,37912,37914,37916,37918,37920,37922,37924,37926,37928,37930,37932,37934,37936,37938,37940,37942,37944,37946],{"class":281,"line":34483},[152,37909,33788],{"class":293},[152,37911,1819],{"class":483},[152,37913,5235],{"class":289},[152,37915,33796],{"class":293},[152,37917,34494],{"class":289},[152,37919,2703],{"class":293},[152,37921,34450],{"class":476},[152,37923,2752],{"class":293},[152,37925,34503],{"class":289},[152,37927,2703],{"class":293},[152,37929,34450],{"class":476},[152,37931,2752],{"class":293},[152,37933,5235],{"class":289},[152,37935,34514],{"class":483},[152,37937,2340],{"class":476},[152,37939,2026],{"class":293},[152,37941,34521],{"class":483},[152,37943,2340],{"class":476},[152,37945,2026],{"class":293},[152,37947,34480],{"class":483},[152,37949,37950],{"class":281,"line":34530},[152,37951,307],{"emptyLinePlaceholder":306},[152,37953,37954],{"class":281,"line":34535},[152,37955,34538],{"class":866},[152,37957,37958,37960,37962,37964,37966,37968,37970],{"class":281,"line":34541},[152,37959,4147],{"class":476},[152,37961,34546],{"class":483},[152,37963,2340],{"class":476},[152,37965,2026],{"class":293},[152,37967,2746],{"class":483},[152,37969,487],{"class":476},[152,37971,34557],{"class":483},[152,37973,37974],{"class":281,"line":34560},[152,37975,34563],{"class":866},[152,37977,37978,37980,37982,37984,37986,37988,37990],{"class":281,"line":34566},[152,37979,34569],{"class":483},[152,37981,1858],{"class":293},[152,37983,1864],{"class":476},[152,37985,34576],{"class":483},[152,37987,2340],{"class":476},[152,37989,2026],{"class":293},[152,37991,34583],{"class":483},[152,37993,37994],{"class":281,"line":34586},[152,37995,34589],{"class":866},[152,37997,37998],{"class":281,"line":34592},[152,37999,34595],{"class":866},[152,38001,38002,38004,38006],{"class":281,"line":34598},[152,38003,34601],{"class":483},[152,38005,1864],{"class":476},[152,38007,33651],{"class":483},[152,38009,38010],{"class":281,"line":34608},[152,38011,307],{"emptyLinePlaceholder":306},[152,38013,38014],{"class":281,"line":34613},[152,38015,34616],{"class":866},[152,38017,38018,38020,38022,38024,38026],{"class":281,"line":34619},[152,38019,34622],{"class":483},[152,38021,1864],{"class":476},[152,38023,34627],{"class":483},[152,38025,2340],{"class":476},[152,38027,34632],{"class":483},[152,38029,38030,38032,38034,38036,38038,38040,38042,38044,38046,38048,38050,38052,38054,38056,38058,38060,38062,38064],{"class":281,"line":34635},[152,38031,33788],{"class":293},[152,38033,1819],{"class":483},[152,38035,34642],{"class":289},[152,38037,2703],{"class":293},[152,38039,34647],{"class":476},[152,38041,2752],{"class":293},[152,38043,2352],{"class":289},[152,38045,2703],{"class":293},[152,38047,34647],{"class":476},[152,38049,2752],{"class":293},[152,38051,34660],{"class":289},[152,38053,34663],{"class":483},[152,38055,34666],{"class":476},[152,38057,2714],{"class":293},[152,38059,34671],{"class":483},[152,38061,2136],{"class":476},[152,38063,2714],{"class":293},[152,38065,31834],{"class":483},[152,38067,38068],{"class":281,"line":34680},[152,38069,38070],{"class":866},"    # 选择最优参数并保存\n",[152,38072,38073],{"class":281,"line":34686},[152,38074,38075],{"class":866},"    # 保存最佳模型权重字典\n",[152,38077,38078,38081,38083],{"class":281,"line":34692},[152,38079,38080],{"class":483},"    torch.save(best_model_wts,",[152,38082,34704],{"class":289},[152,38084,1825],{"class":483},[152,38086,38087],{"class":281,"line":34698},[152,38088,34724],{"class":866},[152,38090,38091,38093,38095,38097,38099,38101],{"class":281,"line":34709},[152,38092,34730],{"class":483},[152,38094,1864],{"class":476},[152,38096,34735],{"class":483},[152,38098,34738],{"class":6858},[152,38100,1864],{"class":476},[152,38102,3217],{"class":483},[152,38104,38105,38107,38109,38111],{"class":281,"line":34715},[152,38106,34748],{"class":289},[152,38108,841],{"class":483},[152,38110,34753],{"class":293},[152,38112,34756],{"class":483},[152,38114,38115,38117],{"class":281,"line":34721},[152,38116,34762],{"class":289},[152,38118,34765],{"class":483},[152,38120,38121,38123],{"class":281,"line":34727},[152,38122,34771],{"class":289},[152,38124,34774],{"class":483},[152,38126,38127,38129],{"class":281,"line":34745},[152,38128,34780],{"class":289},[152,38130,34783],{"class":483},[152,38132,38133,38135],{"class":281,"line":34759},[152,38134,34789],{"class":289},[152,38136,34792],{"class":483},[152,38138,38139],{"class":281,"line":34768},[152,38140,34798],{"class":483},[152,38142,38143],{"class":281,"line":34777},[152,38144,34804],{"class":866},[152,38146,38147,38149],{"class":281,"line":34786},[152,38148,5732],{"class":476},[152,38150,34812],{"class":483},[152,38152,38153],{"class":281,"line":34795},[152,38154,307],{"emptyLinePlaceholder":306},[152,38156,38157],{"class":281,"line":34801},[152,38158,34823],{"class":866},[152,38160,38161,38163,38165],{"class":281,"line":34807},[152,38162,33284],{"class":476},[152,38164,34831],{"class":285},[152,38166,34834],{"class":483},[152,38168,38169],{"class":281,"line":34815},[152,38170,34840],{"class":866},[152,38172,38173,38175,38177,38179,38181,38183,38185,38187],{"class":281,"line":34820},[152,38174,34846],{"class":483},[152,38176,33030],{"class":6858},[152,38178,1864],{"class":476},[152,38180,1819],{"class":483},[152,38182,2306],{"class":293},[152,38184,2186],{"class":483},[152,38186,2101],{"class":293},[152,38188,31834],{"class":483},[152,38190,38191],{"class":281,"line":34826},[152,38192,34866],{"class":866},[152,38194,38195],{"class":281,"line":34837},[152,38196,34872],{"class":866},[152,38198,38199],{"class":281,"line":34843},[152,38200,34878],{"class":866},[152,38202,38203,38205,38207,38209,38211,38213,38215],{"class":281,"line":34863},[152,38204,33064],{"class":483},[152,38206,2026],{"class":293},[152,38208,2186],{"class":483},[152,38210,1894],{"class":293},[152,38212,2186],{"class":483},[152,38214,2026],{"class":293},[152,38216,1825],{"class":483},[152,38218,38219],{"class":281,"line":34869},[152,38220,34901],{"class":866},[152,38222,38223],{"class":281,"line":34875},[152,38224,34907],{"class":866},[152,38226,38227],{"class":281,"line":34881},[152,38228,34913],{"class":866},[152,38230,38231],{"class":281,"line":34898},[152,38232,34919],{"class":866},[152,38234,38235],{"class":281,"line":34904},[152,38236,34925],{"class":866},[152,38238,38239,38241,38243,38245,38247,38249,38251,38253,38255],{"class":281,"line":34910},[152,38240,34931],{"class":483},[152,38242,34934],{"class":289},[152,38244,34937],{"class":483},[152,38246,34940],{"class":289},[152,38248,2186],{"class":483},[152,38250,34945],{"class":6858},[152,38252,1864],{"class":476},[152,38254,34950],{"class":289},[152,38256,1825],{"class":483},[152,38258,38259,38261,38263,38265,38267,38269,38271,38273,38275],{"class":281,"line":34916},[152,38260,34931],{"class":483},[152,38262,34934],{"class":289},[152,38264,34962],{"class":483},[152,38266,34965],{"class":289},[152,38268,2186],{"class":483},[152,38270,34945],{"class":6858},[152,38272,1864],{"class":476},[152,38274,34974],{"class":289},[152,38276,1825],{"class":483},[152,38278,38279],{"class":281,"line":34922},[152,38280,34982],{"class":866},[152,38282,38283],{"class":281,"line":34928},[152,38284,34988],{"class":483},[152,38286,38287],{"class":281,"line":34955},[152,38288,34994],{"class":866},[152,38290,38291,38293,38295],{"class":281,"line":34979},[152,38292,35000],{"class":483},[152,38294,35003],{"class":289},[152,38296,1825],{"class":483},[152,38298,38299,38301,38303],{"class":281,"line":34985},[152,38300,35011],{"class":483},[152,38302,35014],{"class":289},[152,38304,1825],{"class":483},[152,38306,38307],{"class":281,"line":34991},[152,38308,35022],{"class":866},[152,38310,38311,38313,38315,38317,38319,38321,38323],{"class":281,"line":34997},[152,38312,33064],{"class":483},[152,38314,2026],{"class":293},[152,38316,2186],{"class":483},[152,38318,1894],{"class":293},[152,38320,2186],{"class":483},[152,38322,1894],{"class":293},[152,38324,1825],{"class":483},[152,38326,38327,38329,38331,38333,38335,38337,38339,38341,38343],{"class":281,"line":35008},[152,38328,34931],{"class":483},[152,38330,34934],{"class":289},[152,38332,35049],{"class":483},[152,38334,34940],{"class":289},[152,38336,2186],{"class":483},[152,38338,34945],{"class":6858},[152,38340,1864],{"class":476},[152,38342,35060],{"class":289},[152,38344,1825],{"class":483},[152,38346,38347,38349,38351,38353,38355,38357,38359,38361,38363],{"class":281,"line":35019},[152,38348,34931],{"class":483},[152,38350,34934],{"class":289},[152,38352,35072],{"class":483},[152,38354,34965],{"class":289},[152,38356,2186],{"class":483},[152,38358,34945],{"class":6858},[152,38360,1864],{"class":476},[152,38362,35083],{"class":289},[152,38364,1825],{"class":483},[152,38366,38367],{"class":281,"line":35025},[152,38368,35091],{"class":866},[152,38370,38371],{"class":281,"line":35042},[152,38372,34988],{"class":483},[152,38374,38375,38377,38379],{"class":281,"line":35065},[152,38376,35000],{"class":483},[152,38378,34934],{"class":289},[152,38380,1825],{"class":483},[152,38382,38383,38385,38387],{"class":281,"line":35088},[152,38384,35011],{"class":483},[152,38386,35113],{"class":289},[152,38388,1825],{"class":483},[152,38390,38391],{"class":281,"line":35094},[152,38392,35121],{"class":483},[152,38394,38395],{"class":281,"line":35099},[152,38396,307],{"emptyLinePlaceholder":306},[152,38398,38399],{"class":281,"line":35108},[152,38400,35132],{"class":866},[152,38402,38403,38405,38407,38409,38411],{"class":281,"line":35118},[152,38404,3202],{"class":476},[152,38406,32557],{"class":293},[152,38408,4592],{"class":476},[152,38410,32562],{"class":289},[152,38412,5382],{"class":483},[152,38414,38415],{"class":281,"line":35124},[152,38416,35151],{"class":866},[152,38418,38419,38422,38424],{"class":281,"line":35129},[152,38420,38421],{"class":483},"    AlexNet",[152,38423,1864],{"class":476},[152,38425,38426],{"class":483},"AlexNet()\n",[152,38428,38429,38431,38433],{"class":281,"line":35135},[152,38430,35168],{"class":483},[152,38432,1864],{"class":476},[152,38434,35173],{"class":483},[152,38436,38437,38439,38441,38444,38446,38448,38450],{"class":281,"line":35148},[152,38438,34730],{"class":483},[152,38440,1864],{"class":476},[152,38442,38443],{"class":483},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[152,38445,35186],{"class":6858},[152,38447,1864],{"class":476},[152,38449,2508],{"class":293},[152,38451,1825],{"class":483},[152,38453,38454],{"class":281,"line":35154},[152,38455,35198],{"class":483},[416,38457,38458],{"start":310},[419,38459,35211],{},[270,38461,38463],{"className":31715,"code":38462,"language":31717,"meta":275,"style":275},"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",[277,38464,38465,38471,38481,38491,38501,38505,38515,38525,38536,38540,38544,38548,38556,38572,38582,38598,38608,38622,38626,38636,38646,38656,38662,38666,38670,38678,38682,38698,38706,38710,38714,38722,38730,38734,38738,38742,38746,38752,38756,38766,38774,38782,38786,38790,38794,38802,38806,38822,38826,38830,38834,38846,38850,38862,38866,38870,38882,38886,38896,38900,38904,38916,38920,38928,38932,38936,38944,38948,38956,38960,38964,38968,38972,38976,38992,39000,39004,39008,39056,39062,39066,39076,39084,39092,39096,39100,39104,39108,39116,39120,39136,39140,39148,39156],{"__ignoreMap":275},[152,38466,38467,38469],{"class":281,"line":282},[152,38468,31729],{"class":476},[152,38470,31732],{"class":483},[152,38472,38473,38475,38477,38479],{"class":281,"line":303},[152,38474,31729],{"class":476},[152,38476,32752],{"class":483},[152,38478,32720],{"class":476},[152,38480,32757],{"class":483},[152,38482,38483,38485,38487,38489],{"class":281,"line":310},[152,38484,32074],{"class":476},[152,38486,35239],{"class":483},[152,38488,31729],{"class":476},[152,38490,35244],{"class":483},[152,38492,38493,38495,38497,38499],{"class":281,"line":324},[152,38494,32074],{"class":476},[152,38496,32735],{"class":483},[152,38498,31729],{"class":476},[152,38500,32740],{"class":483},[152,38502,38503],{"class":281,"line":329},[152,38504,35259],{"class":866},[152,38506,38507,38509,38511,38513],{"class":281,"line":343},[152,38508,32074],{"class":476},[152,38510,32705],{"class":483},[152,38512,31729],{"class":476},[152,38514,32710],{"class":483},[152,38516,38517,38519,38521,38523],{"class":281,"line":348},[152,38518,32074],{"class":476},[152,38520,33251],{"class":483},[152,38522,31729],{"class":476},[152,38524,36894],{"class":483},[152,38526,38527,38529,38532,38534],{"class":281,"line":362},[152,38528,32074],{"class":476},[152,38530,38531],{"class":483}," 练习.AlexNet.model ",[152,38533,31729],{"class":476},[152,38535,36894],{"class":483},[152,38537,38538],{"class":281,"line":367},[152,38539,307],{"emptyLinePlaceholder":306},[152,38541,38542],{"class":281,"line":381},[152,38543,307],{"emptyLinePlaceholder":306},[152,38545,38546],{"class":281,"line":386},[152,38547,35288],{"class":866},[152,38549,38550,38552,38554],{"class":281,"line":932},[152,38551,33284],{"class":476},[152,38553,35295],{"class":285},[152,38555,33290],{"class":483},[152,38557,38558,38560,38562,38564,38566,38568,38570],{"class":281,"line":942},[152,38559,35302],{"class":483},[152,38561,1864],{"class":476},[152,38563,32792],{"class":483},[152,38565,32795],{"class":6858},[152,38567,1864],{"class":476},[152,38569,32800],{"class":289},[152,38571,32803],{"class":483},[152,38573,38574,38576,38578,38580],{"class":281,"line":949},[152,38575,35319],{"class":6858},[152,38577,1864],{"class":476},[152,38579,35324],{"class":293},[152,38581,32803],{"class":483},[152,38583,38584,38586,38588,38590,38592,38594,38596],{"class":281,"line":954},[152,38585,35331],{"class":6858},[152,38587,1864],{"class":476},[152,38589,32830],{"class":483},[152,38591,32833],{"class":6858},[152,38593,1864],{"class":476},[152,38595,36786],{"class":293},[152,38597,32841],{"class":483},[152,38599,38600,38602,38604,38606],{"class":281,"line":959},[152,38601,35348],{"class":6858},[152,38603,1864],{"class":476},[152,38605,32813],{"class":293},[152,38607,1825],{"class":483},[152,38609,38610,38612,38614,38616,38618,38620],{"class":281,"line":970},[152,38611,35359],{"class":483},[152,38613,1864],{"class":476},[152,38615,32871],{"class":483},[152,38617,32874],{"class":6858},[152,38619,1864],{"class":476},[152,38621,35370],{"class":483},[152,38623,38624],{"class":281,"line":979},[152,38625,35375],{"class":866},[152,38627,38628,38630,38632,38634],{"class":281,"line":989},[152,38629,35380],{"class":6858},[152,38631,1864],{"class":476},[152,38633,2026],{"class":293},[152,38635,32803],{"class":483},[152,38637,38638,38640,38642,38644],{"class":281,"line":996},[152,38639,35391],{"class":6858},[152,38641,1864],{"class":476},[152,38643,32813],{"class":293},[152,38645,32803],{"class":483},[152,38647,38648,38650,38652,38654],{"class":281,"line":1001},[152,38649,35402],{"class":6858},[152,38651,1864],{"class":476},[152,38653,2000],{"class":293},[152,38655,1825],{"class":483},[152,38657,38658,38660],{"class":281,"line":1006},[152,38659,5732],{"class":476},[152,38661,35415],{"class":483},[152,38663,38664],{"class":281,"line":1018},[152,38665,307],{"emptyLinePlaceholder":306},[152,38667,38668],{"class":281,"line":1027},[152,38669,35424],{"class":866},[152,38671,38672,38674,38676],{"class":281,"line":1037},[152,38673,33284],{"class":476},[152,38675,35431],{"class":285},[152,38677,35434],{"class":483},[152,38679,38680],{"class":281,"line":1044},[152,38681,35439],{"class":866},[152,38683,38684,38686,38688,38690,38692,38694,38696],{"class":281,"line":1049},[152,38685,32574],{"class":483},[152,38687,1864],{"class":476},[152,38689,32581],{"class":289},[152,38691,3364],{"class":476},[152,38693,32586],{"class":483},[152,38695,3361],{"class":476},[152,38697,35456],{"class":289},[152,38699,38700,38702,38704],{"class":281,"line":1054},[152,38701,32626],{"class":483},[152,38703,1864],{"class":476},[152,38705,33626],{"class":483},[152,38707,38708],{"class":281,"line":1065},[152,38709,307],{"emptyLinePlaceholder":306},[152,38711,38712],{"class":281,"line":1074},[152,38713,35473],{"class":866},[152,38715,38716,38718,38720],{"class":281,"line":1084},[152,38717,35478],{"class":483},[152,38719,1864],{"class":476},[152,38721,33679],{"class":293},[152,38723,38724,38726,38728],{"class":281,"line":1091},[152,38725,35487],{"class":483},[152,38727,1864],{"class":476},[152,38729,4728],{"class":293},[152,38731,38732],{"class":281,"line":1096},[152,38733,307],{"emptyLinePlaceholder":306},[152,38735,38736],{"class":281,"line":1101},[152,38737,35500],{"class":866},[152,38739,38740],{"class":281,"line":1112},[152,38741,35505],{"class":866},[152,38743,38744],{"class":281,"line":1121},[152,38745,35510],{"class":866},[152,38747,38748,38750],{"class":281,"line":1131},[152,38749,35515],{"class":476},[152,38751,34221],{"class":483},[152,38753,38754],{"class":281,"line":1138},[152,38755,35522],{"class":866},[152,38757,38758,38760,38762,38764],{"class":281,"line":1143},[152,38759,5046],{"class":476},[152,38761,35529],{"class":483},[152,38763,27653],{"class":476},[152,38765,35534],{"class":483},[152,38767,38768,38770,38772],{"class":281,"line":1148},[152,38769,35539],{"class":483},[152,38771,1864],{"class":476},[152,38773,35544],{"class":483},[152,38775,38776,38778,38780],{"class":281,"line":1159},[152,38777,35549],{"class":483},[152,38779,1864],{"class":476},[152,38781,35554],{"class":483},[152,38783,38784],{"class":281,"line":1168},[152,38785,35559],{"class":866},[152,38787,38788],{"class":281,"line":1178},[152,38789,34212],{"class":483},[152,38791,38792],{"class":281,"line":1185},[152,38793,35568],{"class":866},[152,38795,38796,38798,38800],{"class":281,"line":1190},[152,38797,33997],{"class":483},[152,38799,1864],{"class":476},[152,38801,35577],{"class":483},[152,38803,38804],{"class":281,"line":1195},[152,38805,35582],{"class":866},[152,38807,38808,38810,38812,38814,38816,38818,38820],{"class":281,"line":1206},[152,38809,34014],{"class":483},[152,38811,1864],{"class":476},[152,38813,34019],{"class":483},[152,38815,34022],{"class":6858},[152,38817,1864],{"class":476},[152,38819,2026],{"class":293},[152,38821,1825],{"class":483},[152,38823,38824],{"class":281,"line":1215},[152,38825,35603],{"class":866},[152,38827,38828],{"class":281,"line":1225},[152,38829,35608],{"class":866},[152,38831,38832],{"class":281,"line":1232},[152,38833,35613],{"class":866},[152,38835,38836,38838,38840,38842,38844],{"class":281,"line":1237},[152,38837,35618],{"class":483},[152,38839,11109],{"class":476},[152,38841,34124],{"class":483},[152,38843,4592],{"class":476},[152,38845,35627],{"class":483},[152,38847,38848],{"class":281,"line":1242},[152,38849,35632],{"class":866},[152,38851,38852,38854,38856,38858,38860],{"class":281,"line":1253},[152,38853,35637],{"class":483},[152,38855,11109],{"class":476},[152,38857,35642],{"class":483},[152,38859,2000],{"class":293},[152,38861,1825],{"class":483},[152,38863,38864],{"class":281,"line":1262},[152,38865,307],{"emptyLinePlaceholder":306},[152,38867,38868],{"class":281,"line":1272},[152,38869,35655],{"class":866},[152,38871,38872,38874,38876,38878,38880],{"class":281,"line":1279},[152,38873,35660],{"class":483},[152,38875,1864],{"class":476},[152,38877,35665],{"class":483},[152,38879,2392],{"class":476},[152,38881,35670],{"class":483},[152,38883,38884],{"class":281,"line":1284},[152,38885,35675],{"class":866},[152,38887,38888,38890,38892,38894],{"class":281,"line":1289},[152,38889,33788],{"class":293},[152,38891,1819],{"class":483},[152,38893,35684],{"class":289},[152,38895,35687],{"class":483},[152,38897,38898],{"class":281,"line":1301},[152,38899,307],{"emptyLinePlaceholder":306},[152,38901,38902],{"class":281,"line":1310},[152,38903,35696],{"class":866},[152,38905,38906,38908,38910,38912,38914],{"class":281,"line":1320},[152,38907,3202],{"class":476},[152,38909,32557],{"class":293},[152,38911,4592],{"class":476},[152,38913,32562],{"class":289},[152,38915,5382],{"class":483},[152,38917,38918],{"class":281,"line":1327},[152,38919,35713],{"class":866},[152,38921,38922,38924,38926],{"class":281,"line":11528},[152,38923,32626],{"class":483},[152,38925,1864],{"class":476},[152,38927,38426],{"class":483},[152,38929,38930],{"class":281,"line":11536},[152,38931,35726],{"class":866},[152,38933,38934],{"class":281,"line":11541},[152,38935,35731],{"class":866},[152,38937,38938,38940,38942],{"class":281,"line":18219},[152,38939,35736],{"class":483},[152,38941,35739],{"class":289},[152,38943,31834],{"class":483},[152,38945,38946],{"class":281,"line":18225},[152,38947,35746],{"class":866},[152,38949,38950,38952,38954],{"class":281,"line":18248},[152,38951,35359],{"class":483},[152,38953,1864],{"class":476},[152,38955,35755],{"class":483},[152,38957,38958],{"class":281,"line":18254},[152,38959,35760],{"class":866},[152,38961,38962],{"class":281,"line":18277},[152,38963,35765],{"class":483},[152,38965,38966],{"class":281,"line":18291},[152,38967,307],{"emptyLinePlaceholder":306},[152,38969,38970],{"class":281,"line":18311},[152,38971,35774],{"class":866},[152,38973,38974],{"class":281,"line":18317},[152,38975,35779],{"class":866},[152,38977,38978,38980,38982,38984,38986,38988,38990],{"class":281,"line":18328},[152,38979,32574],{"class":483},[152,38981,1864],{"class":476},[152,38983,32581],{"class":289},[152,38985,3364],{"class":476},[152,38987,32586],{"class":483},[152,38989,3361],{"class":476},[152,38991,35456],{"class":289},[152,38993,38994,38996,38998],{"class":281,"line":18351},[152,38995,32626],{"class":483},[152,38997,1864],{"class":476},[152,38999,33626],{"class":483},[152,39001,39002],{"class":281,"line":18373},[152,39003,35808],{"class":866},[152,39005,39006],{"class":281,"line":18378},[152,39007,35813],{"class":866},[152,39009,39010,39012,39014,39016,39018,39020,39022,39024,39026,39028,39030,39032,39034,39036,39038,39040,39042,39044,39046,39048,39050,39052,39054],{"class":281,"line":18384},[152,39011,35818],{"class":483},[152,39013,1864],{"class":476},[152,39015,2697],{"class":483},[152,39017,35825],{"class":289},[152,39019,2186],{"class":483},[152,39021,35830],{"class":289},[152,39023,2186],{"class":483},[152,39025,35835],{"class":289},[152,39027,2186],{"class":483},[152,39029,35840],{"class":289},[152,39031,2186],{"class":483},[152,39033,35845],{"class":289},[152,39035,2186],{"class":483},[152,39037,35850],{"class":289},[152,39039,2186],{"class":483},[152,39041,35855],{"class":289},[152,39043,2186],{"class":483},[152,39045,35860],{"class":289},[152,39047,2186],{"class":483},[152,39049,35865],{"class":289},[152,39051,2186],{"class":483},[152,39053,35870],{"class":289},[152,39055,34583],{"class":483},[152,39057,39058,39060],{"class":281,"line":18398},[152,39059,35515],{"class":476},[152,39061,34221],{"class":483},[152,39063,39064],{"class":281,"line":18411},[152,39065,35883],{"class":866},[152,39067,39068,39070,39072,39074],{"class":281,"line":18416},[152,39069,5046],{"class":476},[152,39071,35890],{"class":483},[152,39073,27653],{"class":476},[152,39075,35534],{"class":483},[152,39077,39078,39080,39082],{"class":281,"line":18430},[152,39079,33947],{"class":483},[152,39081,1864],{"class":476},[152,39083,33952],{"class":483},[152,39085,39086,39088,39090],{"class":281,"line":18435},[152,39087,33962],{"class":483},[152,39089,1864],{"class":476},[152,39091,33967],{"class":483},[152,39093,39094],{"class":281,"line":18441},[152,39095,307],{"emptyLinePlaceholder":306},[152,39097,39098],{"class":281,"line":18446},[152,39099,35919],{"class":866},[152,39101,39102],{"class":281,"line":18460},[152,39103,34212],{"class":483},[152,39105,39106],{"class":281,"line":18465},[152,39107,35928],{"class":866},[152,39109,39110,39112,39114],{"class":281,"line":18470},[152,39111,33997],{"class":483},[152,39113,1864],{"class":476},[152,39115,34002],{"class":483},[152,39117,39118],{"class":281,"line":18484},[152,39119,35941],{"class":866},[152,39121,39122,39124,39126,39128,39130,39132,39134],{"class":281,"line":18496},[152,39123,34014],{"class":483},[152,39125,1864],{"class":476},[152,39127,34019],{"class":483},[152,39129,34022],{"class":6858},[152,39131,1864],{"class":476},[152,39133,2026],{"class":293},[152,39135,1825],{"class":483},[152,39137,39138],{"class":281,"line":18501},[152,39139,35962],{"class":866},[152,39141,39142,39144,39146],{"class":281,"line":18514},[152,39143,35967],{"class":483},[152,39145,1864],{"class":476},[152,39147,35972],{"class":483},[152,39149,39150,39152,39154],{"class":281,"line":18519},[152,39151,35977],{"class":483},[152,39153,1864],{"class":476},[152,39155,35982],{"class":483},[152,39157,39158,39160,39162,39164,39166,39168,39170,39172],{"class":281,"line":18524},[152,39159,35987],{"class":293},[152,39161,1819],{"class":483},[152,39163,35992],{"class":289},[152,39165,35995],{"class":483},[152,39167,35998],{"class":289},[152,39169,2186],{"class":483},[152,39171,36003],{"class":289},[152,39173,36006],{"class":483},[14,39175,39177],{"id":39176},"_22vgg","2.2.VGG",[262,39179,39181],{"id":39180},"_221原理","2.2.1.原理",[19,39183,39184],{},[401,39185],{"alt":275,"src":39186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,39188,39189],{},[401,39190],{"alt":275,"src":39191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,39193,39194],{},[401,39195],{"alt":275,"src":39196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[19,39198,39199],{},"参数详细描述：",[19,39201,39202],{},[401,39203],{"alt":275,"src":39204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[19,39206,39207],{},[401,39208],{"alt":275,"src":39209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[19,39211,39212],{},[401,39213],{"alt":275,"src":39214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,39216,39217],{},[401,39218],{"alt":275,"src":39219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,39221,39222],{},[401,39223],{"alt":275,"src":39224},"\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",[262,39226,39228],{"id":39227},"_222代码实现","2.2.2.代码实现",[416,39230,39231],{},[419,39232,39233],{},"网络搭建",[270,39235,39237],{"className":31715,"code":39236,"language":31717,"meta":275,"style":275},"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",[277,39238,39239,39245,39257,39267,39277,39281,39298,39306,39325,39330,39335,39347,39385,39390,39426,39430,39459,39464,39469,39480,39516,39520,39556,39560,39588,39592,39597,39608,39644,39648,39684,39688,39724,39728,39756,39760,39765,39776,39813,39817,39853,39857,39893,39897,39925,39929,39934,39945,39981,39985,40021,40025,40061,40065,40093,40097,40102,40113,40118,40123,40128,40149,40153,40165,40169,40181,40185,40189,40194,40199,40214,40219,40229,40234,40249,40254,40273,40278,40287,40292,40302,40307,40312,40326,40331,40345,40353,40357,40361,40369,40380,40391,40402,40413,40424,40435,40441,40445,40450,40463,40483,40489,40498],{"__ignoreMap":275},[152,39240,39241,39243],{"class":281,"line":282},[152,39242,31729],{"class":476},[152,39244,31732],{"class":483},[152,39246,39247,39249,39252,39254],{"class":281,"line":303},[152,39248,32074],{"class":476},[152,39250,39251],{"class":483}," sympy.core.sympify ",[152,39253,31729],{"class":476},[152,39255,39256],{"class":483}," kernS\n",[152,39258,39259,39261,39263,39265],{"class":281,"line":310},[152,39260,32074],{"class":476},[152,39262,32077],{"class":483},[152,39264,31729],{"class":476},[152,39266,32082],{"class":483},[152,39268,39269,39271,39273,39275],{"class":281,"line":324},[152,39270,32074],{"class":476},[152,39272,32094],{"class":483},[152,39274,31729],{"class":476},[152,39276,32099],{"class":483},[152,39278,39279],{"class":281,"line":329},[152,39280,307],{"emptyLinePlaceholder":306},[152,39282,39283,39285,39288,39290,39292,39294,39296],{"class":281,"line":343},[152,39284,16309],{"class":476},[152,39286,39287],{"class":285}," VGG16",[152,39289,1819],{"class":483},[152,39291,32115],{"class":285},[152,39293,2366],{"class":483},[152,39295,32120],{"class":285},[152,39297,32123],{"class":483},[152,39299,39300,39302,39304],{"class":281,"line":348},[152,39301,32138],{"class":476},[152,39303,32141],{"class":293},[152,39305,32144],{"class":483},[152,39307,39308,39310,39312,39315,39317,39319,39321,39323],{"class":281,"line":362},[152,39309,32154],{"class":293},[152,39311,1819],{"class":483},[152,39313,39314],{"class":293},"VGG16",[152,39316,14051],{"class":483},[152,39318,32160],{"class":293},[152,39320,32163],{"class":483},[152,39322,32166],{"class":293},[152,39324,3627],{"class":483},[152,39326,39327],{"class":281,"line":367},[152,39328,39329],{"class":866},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[152,39331,39332],{"class":281,"line":381},[152,39333,39334],{"class":866},"        # 这里用的是灰度图\n",[152,39336,39337,39339,39342,39344],{"class":281,"line":386},[152,39338,32182],{"class":293},[152,39340,39341],{"class":483},".block1",[152,39343,1864],{"class":476},[152,39345,39346],{"class":483},"nn.Sequential(\n",[152,39348,39349,39352,39354,39356,39358,39360,39362,39364,39366,39368,39370,39372,39374,39376,39378,39380,39382],{"class":281,"line":932},[152,39350,39351],{"class":483},"            nn.Conv2d(",[152,39353,32193],{"class":6858},[152,39355,1864],{"class":476},[152,39357,2026],{"class":293},[152,39359,2186],{"class":483},[152,39361,32202],{"class":6858},[152,39363,1864],{"class":476},[152,39365,2012],{"class":293},[152,39367,2186],{"class":483},[152,39369,32211],{"class":6858},[152,39371,1864],{"class":476},[152,39373,1888],{"class":293},[152,39375,2186],{"class":483},[152,39377,32220],{"class":6858},[152,39379,1864],{"class":476},[152,39381,2026],{"class":293},[152,39383,39384],{"class":483},"),\n",[152,39386,39387],{"class":281,"line":942},[152,39388,39389],{"class":483},"            nn.ReLU(),\n",[152,39391,39392,39394,39396,39398,39400,39402,39404,39406,39408,39410,39412,39414,39416,39418,39420,39422,39424],{"class":281,"line":949},[152,39393,39351],{"class":483},[152,39395,32193],{"class":6858},[152,39397,1864],{"class":476},[152,39399,2012],{"class":293},[152,39401,2186],{"class":483},[152,39403,32202],{"class":6858},[152,39405,1864],{"class":476},[152,39407,2012],{"class":293},[152,39409,2186],{"class":483},[152,39411,32211],{"class":6858},[152,39413,1864],{"class":476},[152,39415,1888],{"class":293},[152,39417,2186],{"class":483},[152,39419,32220],{"class":6858},[152,39421,1864],{"class":476},[152,39423,2026],{"class":293},[152,39425,39384],{"class":483},[152,39427,39428],{"class":281,"line":954},[152,39429,39389],{"class":483},[152,39431,39432,39435,39437,39439,39441,39443,39445,39447,39449,39451,39453,39455,39457],{"class":281,"line":959},[152,39433,39434],{"class":483},"            nn.MaxPool2d(",[152,39436,32211],{"class":6858},[152,39438,1864],{"class":476},[152,39440,1894],{"class":293},[152,39442,2186],{"class":483},[152,39444,32266],{"class":6858},[152,39446,1864],{"class":476},[152,39448,1894],{"class":293},[152,39450,2186],{"class":483},[152,39452,32220],{"class":6858},[152,39454,1864],{"class":476},[152,39456,2000],{"class":293},[152,39458,1825],{"class":483},[152,39460,39461],{"class":281,"line":970},[152,39462,39463],{"class":483},"        )\n",[152,39465,39466],{"class":281,"line":979},[152,39467,39468],{"class":866},"        # 第二层\n",[152,39470,39471,39473,39476,39478],{"class":281,"line":989},[152,39472,32182],{"class":293},[152,39474,39475],{"class":483},".block2",[152,39477,1864],{"class":476},[152,39479,39346],{"class":483},[152,39481,39482,39484,39486,39488,39490,39492,39494,39496,39498,39500,39502,39504,39506,39508,39510,39512,39514],{"class":281,"line":996},[152,39483,39351],{"class":483},[152,39485,32193],{"class":6858},[152,39487,1864],{"class":476},[152,39489,2012],{"class":293},[152,39491,2186],{"class":483},[152,39493,32202],{"class":6858},[152,39495,1864],{"class":476},[152,39497,33407],{"class":293},[152,39499,2186],{"class":483},[152,39501,32211],{"class":6858},[152,39503,1864],{"class":476},[152,39505,1888],{"class":293},[152,39507,2186],{"class":483},[152,39509,32220],{"class":6858},[152,39511,1864],{"class":476},[152,39513,2026],{"class":293},[152,39515,39384],{"class":483},[152,39517,39518],{"class":281,"line":1001},[152,39519,39389],{"class":483},[152,39521,39522,39524,39526,39528,39530,39532,39534,39536,39538,39540,39542,39544,39546,39548,39550,39552,39554],{"class":281,"line":1006},[152,39523,39351],{"class":483},[152,39525,32193],{"class":6858},[152,39527,1864],{"class":476},[152,39529,33407],{"class":293},[152,39531,2186],{"class":483},[152,39533,32202],{"class":6858},[152,39535,1864],{"class":476},[152,39537,33407],{"class":293},[152,39539,2186],{"class":483},[152,39541,32211],{"class":6858},[152,39543,1864],{"class":476},[152,39545,1888],{"class":293},[152,39547,2186],{"class":483},[152,39549,32220],{"class":6858},[152,39551,1864],{"class":476},[152,39553,2026],{"class":293},[152,39555,39384],{"class":483},[152,39557,39558],{"class":281,"line":1018},[152,39559,39389],{"class":483},[152,39561,39562,39564,39566,39568,39570,39572,39574,39576,39578,39580,39582,39584,39586],{"class":281,"line":1027},[152,39563,39434],{"class":483},[152,39565,32211],{"class":6858},[152,39567,1864],{"class":476},[152,39569,1894],{"class":293},[152,39571,2186],{"class":483},[152,39573,32266],{"class":6858},[152,39575,1864],{"class":476},[152,39577,1894],{"class":293},[152,39579,2186],{"class":483},[152,39581,32220],{"class":6858},[152,39583,1864],{"class":476},[152,39585,2000],{"class":293},[152,39587,1825],{"class":483},[152,39589,39590],{"class":281,"line":1037},[152,39591,39463],{"class":483},[152,39593,39594],{"class":281,"line":1044},[152,39595,39596],{"class":866},"        # 第三层\n",[152,39598,39599,39601,39604,39606],{"class":281,"line":1049},[152,39600,32182],{"class":293},[152,39602,39603],{"class":483},".block3",[152,39605,1864],{"class":476},[152,39607,39346],{"class":483},[152,39609,39610,39612,39614,39616,39618,39620,39622,39624,39626,39628,39630,39632,39634,39636,39638,39640,39642],{"class":281,"line":1054},[152,39611,39351],{"class":483},[152,39613,32193],{"class":6858},[152,39615,1864],{"class":476},[152,39617,33407],{"class":293},[152,39619,2186],{"class":483},[152,39621,32202],{"class":6858},[152,39623,1864],{"class":476},[152,39625,36207],{"class":293},[152,39627,2186],{"class":483},[152,39629,32211],{"class":6858},[152,39631,1864],{"class":476},[152,39633,1888],{"class":293},[152,39635,2186],{"class":483},[152,39637,32220],{"class":6858},[152,39639,1864],{"class":476},[152,39641,2026],{"class":293},[152,39643,39384],{"class":483},[152,39645,39646],{"class":281,"line":1065},[152,39647,39389],{"class":483},[152,39649,39650,39652,39654,39656,39658,39660,39662,39664,39666,39668,39670,39672,39674,39676,39678,39680,39682],{"class":281,"line":1074},[152,39651,39351],{"class":483},[152,39653,32193],{"class":6858},[152,39655,1864],{"class":476},[152,39657,36207],{"class":293},[152,39659,2186],{"class":483},[152,39661,32202],{"class":6858},[152,39663,1864],{"class":476},[152,39665,36207],{"class":293},[152,39667,2186],{"class":483},[152,39669,32211],{"class":6858},[152,39671,1864],{"class":476},[152,39673,1888],{"class":293},[152,39675,2186],{"class":483},[152,39677,32220],{"class":6858},[152,39679,1864],{"class":476},[152,39681,2026],{"class":293},[152,39683,39384],{"class":483},[152,39685,39686],{"class":281,"line":1084},[152,39687,39389],{"class":483},[152,39689,39690,39692,39694,39696,39698,39700,39702,39704,39706,39708,39710,39712,39714,39716,39718,39720,39722],{"class":281,"line":1091},[152,39691,39351],{"class":483},[152,39693,32193],{"class":6858},[152,39695,1864],{"class":476},[152,39697,36207],{"class":293},[152,39699,2186],{"class":483},[152,39701,32202],{"class":6858},[152,39703,1864],{"class":476},[152,39705,36207],{"class":293},[152,39707,2186],{"class":483},[152,39709,32211],{"class":6858},[152,39711,1864],{"class":476},[152,39713,1888],{"class":293},[152,39715,2186],{"class":483},[152,39717,32220],{"class":6858},[152,39719,1864],{"class":476},[152,39721,2026],{"class":293},[152,39723,39384],{"class":483},[152,39725,39726],{"class":281,"line":1096},[152,39727,39389],{"class":483},[152,39729,39730,39732,39734,39736,39738,39740,39742,39744,39746,39748,39750,39752,39754],{"class":281,"line":1101},[152,39731,39434],{"class":483},[152,39733,32211],{"class":6858},[152,39735,1864],{"class":476},[152,39737,1894],{"class":293},[152,39739,2186],{"class":483},[152,39741,32266],{"class":6858},[152,39743,1864],{"class":476},[152,39745,1894],{"class":293},[152,39747,2186],{"class":483},[152,39749,32220],{"class":6858},[152,39751,1864],{"class":476},[152,39753,2000],{"class":293},[152,39755,1825],{"class":483},[152,39757,39758],{"class":281,"line":1112},[152,39759,39463],{"class":483},[152,39761,39762],{"class":281,"line":1121},[152,39763,39764],{"class":866},"        # 第四层\n",[152,39766,39767,39769,39772,39774],{"class":281,"line":1131},[152,39768,32182],{"class":293},[152,39770,39771],{"class":483},".block4",[152,39773,1864],{"class":476},[152,39775,39346],{"class":483},[152,39777,39778,39780,39782,39784,39786,39788,39790,39792,39795,39797,39799,39801,39803,39805,39807,39809,39811],{"class":281,"line":1138},[152,39779,39351],{"class":483},[152,39781,32193],{"class":6858},[152,39783,1864],{"class":476},[152,39785,36207],{"class":293},[152,39787,2186],{"class":483},[152,39789,32202],{"class":6858},[152,39791,1864],{"class":476},[152,39793,39794],{"class":293},"512",[152,39796,2186],{"class":483},[152,39798,32211],{"class":6858},[152,39800,1864],{"class":476},[152,39802,1888],{"class":293},[152,39804,2186],{"class":483},[152,39806,32220],{"class":6858},[152,39808,1864],{"class":476},[152,39810,2026],{"class":293},[152,39812,39384],{"class":483},[152,39814,39815],{"class":281,"line":1143},[152,39816,39389],{"class":483},[152,39818,39819,39821,39823,39825,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851],{"class":281,"line":1148},[152,39820,39351],{"class":483},[152,39822,32193],{"class":6858},[152,39824,1864],{"class":476},[152,39826,39794],{"class":293},[152,39828,2186],{"class":483},[152,39830,32202],{"class":6858},[152,39832,1864],{"class":476},[152,39834,39794],{"class":293},[152,39836,2186],{"class":483},[152,39838,32211],{"class":6858},[152,39840,1864],{"class":476},[152,39842,1888],{"class":293},[152,39844,2186],{"class":483},[152,39846,32220],{"class":6858},[152,39848,1864],{"class":476},[152,39850,2026],{"class":293},[152,39852,39384],{"class":483},[152,39854,39855],{"class":281,"line":1159},[152,39856,39389],{"class":483},[152,39858,39859,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891],{"class":281,"line":1168},[152,39860,39351],{"class":483},[152,39862,32193],{"class":6858},[152,39864,1864],{"class":476},[152,39866,39794],{"class":293},[152,39868,2186],{"class":483},[152,39870,32202],{"class":6858},[152,39872,1864],{"class":476},[152,39874,39794],{"class":293},[152,39876,2186],{"class":483},[152,39878,32211],{"class":6858},[152,39880,1864],{"class":476},[152,39882,1888],{"class":293},[152,39884,2186],{"class":483},[152,39886,32220],{"class":6858},[152,39888,1864],{"class":476},[152,39890,2026],{"class":293},[152,39892,39384],{"class":483},[152,39894,39895],{"class":281,"line":1178},[152,39896,39389],{"class":483},[152,39898,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923],{"class":281,"line":1185},[152,39900,39434],{"class":483},[152,39902,32211],{"class":6858},[152,39904,1864],{"class":476},[152,39906,1894],{"class":293},[152,39908,2186],{"class":483},[152,39910,32266],{"class":6858},[152,39912,1864],{"class":476},[152,39914,1894],{"class":293},[152,39916,2186],{"class":483},[152,39918,32220],{"class":6858},[152,39920,1864],{"class":476},[152,39922,2000],{"class":293},[152,39924,1825],{"class":483},[152,39926,39927],{"class":281,"line":1190},[152,39928,39463],{"class":483},[152,39930,39931],{"class":281,"line":1195},[152,39932,39933],{"class":866},"        # 第五层\n",[152,39935,39936,39938,39941,39943],{"class":281,"line":1206},[152,39937,32182],{"class":293},[152,39939,39940],{"class":483},".block5",[152,39942,1864],{"class":476},[152,39944,39346],{"class":483},[152,39946,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979],{"class":281,"line":1215},[152,39948,39351],{"class":483},[152,39950,32193],{"class":6858},[152,39952,1864],{"class":476},[152,39954,39794],{"class":293},[152,39956,2186],{"class":483},[152,39958,32202],{"class":6858},[152,39960,1864],{"class":476},[152,39962,39794],{"class":293},[152,39964,2186],{"class":483},[152,39966,32211],{"class":6858},[152,39968,1864],{"class":476},[152,39970,1888],{"class":293},[152,39972,2186],{"class":483},[152,39974,32220],{"class":6858},[152,39976,1864],{"class":476},[152,39978,2026],{"class":293},[152,39980,39384],{"class":483},[152,39982,39983],{"class":281,"line":1225},[152,39984,39389],{"class":483},[152,39986,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019],{"class":281,"line":1232},[152,39988,39351],{"class":483},[152,39990,32193],{"class":6858},[152,39992,1864],{"class":476},[152,39994,39794],{"class":293},[152,39996,2186],{"class":483},[152,39998,32202],{"class":6858},[152,40000,1864],{"class":476},[152,40002,39794],{"class":293},[152,40004,2186],{"class":483},[152,40006,32211],{"class":6858},[152,40008,1864],{"class":476},[152,40010,1888],{"class":293},[152,40012,2186],{"class":483},[152,40014,32220],{"class":6858},[152,40016,1864],{"class":476},[152,40018,2026],{"class":293},[152,40020,39384],{"class":483},[152,40022,40023],{"class":281,"line":1237},[152,40024,39389],{"class":483},[152,40026,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059],{"class":281,"line":1242},[152,40028,39351],{"class":483},[152,40030,32193],{"class":6858},[152,40032,1864],{"class":476},[152,40034,39794],{"class":293},[152,40036,2186],{"class":483},[152,40038,32202],{"class":6858},[152,40040,1864],{"class":476},[152,40042,39794],{"class":293},[152,40044,2186],{"class":483},[152,40046,32211],{"class":6858},[152,40048,1864],{"class":476},[152,40050,1888],{"class":293},[152,40052,2186],{"class":483},[152,40054,32220],{"class":6858},[152,40056,1864],{"class":476},[152,40058,2026],{"class":293},[152,40060,39384],{"class":483},[152,40062,40063],{"class":281,"line":1253},[152,40064,39389],{"class":483},[152,40066,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091],{"class":281,"line":1262},[152,40068,39434],{"class":483},[152,40070,32211],{"class":6858},[152,40072,1864],{"class":476},[152,40074,1894],{"class":293},[152,40076,2186],{"class":483},[152,40078,32266],{"class":6858},[152,40080,1864],{"class":476},[152,40082,1894],{"class":293},[152,40084,2186],{"class":483},[152,40086,32220],{"class":6858},[152,40088,1864],{"class":476},[152,40090,2000],{"class":293},[152,40092,1825],{"class":483},[152,40094,40095],{"class":281,"line":1272},[152,40096,39463],{"class":483},[152,40098,40099],{"class":281,"line":1279},[152,40100,40101],{"class":866},"        # 全连接层\n",[152,40103,40104,40106,40109,40111],{"class":281,"line":1284},[152,40105,32182],{"class":293},[152,40107,40108],{"class":483},".block6",[152,40110,1864],{"class":476},[152,40112,39346],{"class":483},[152,40114,40115],{"class":281,"line":1289},[152,40116,40117],{"class":866},"            # 平展操作\n",[152,40119,40120],{"class":281,"line":1301},[152,40121,40122],{"class":866},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[152,40124,40125],{"class":281,"line":1310},[152,40126,40127],{"class":483},"            nn.Flatten(),\n",[152,40129,40130,40133,40135,40137,40139,40141,40143,40145,40147],{"class":281,"line":1320},[152,40131,40132],{"class":483},"            nn.Linear(",[152,40134,2177],{"class":293},[152,40136,2263],{"class":476},[152,40138,2177],{"class":293},[152,40140,2263],{"class":476},[152,40142,39794],{"class":293},[152,40144,2186],{"class":483},[152,40146,36207],{"class":293},[152,40148,39384],{"class":483},[152,40150,40151],{"class":281,"line":1327},[152,40152,39389],{"class":483},[152,40154,40155,40157,40159,40161,40163],{"class":281,"line":11528},[152,40156,40132],{"class":483},[152,40158,36207],{"class":293},[152,40160,2186],{"class":483},[152,40162,33407],{"class":293},[152,40164,39384],{"class":483},[152,40166,40167],{"class":281,"line":11536},[152,40168,39389],{"class":483},[152,40170,40171,40173,40175,40177,40179],{"class":281,"line":11541},[152,40172,40132],{"class":483},[152,40174,33407],{"class":293},[152,40176,2186],{"class":483},[152,40178,2254],{"class":293},[152,40180,1825],{"class":483},[152,40182,40183],{"class":281,"line":18219},[152,40184,39463],{"class":483},[152,40186,40187],{"class":281,"line":18225},[152,40188,307],{"emptyLinePlaceholder":306},[152,40190,40191],{"class":281,"line":18248},[152,40192,40193],{"class":866},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[152,40195,40196],{"class":281,"line":18254},[152,40197,40198],{"class":866},"        # 循环遍历模型\n",[152,40200,40201,40203,40206,40208,40211],{"class":281,"line":18277},[152,40202,5046],{"class":476},[152,40204,40205],{"class":483}," m ",[152,40207,27653],{"class":476},[152,40209,40210],{"class":293}," self",[152,40212,40213],{"class":483},".modules():\n",[152,40215,40216],{"class":281,"line":18291},[152,40217,40218],{"class":866},"            # print(m)\n",[152,40220,40221,40223,40226],{"class":281,"line":18311},[152,40222,6284],{"class":476},[152,40224,40225],{"class":293}," isinstance",[152,40227,40228],{"class":483},"(m,nn.Conv2d):\n",[152,40230,40231],{"class":281,"line":18317},[152,40232,40233],{"class":866},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[152,40235,40236,40239,40242,40244,40247],{"class":281,"line":18328},[152,40237,40238],{"class":483},"                nn.init.kaiming_normal_(m.weight,",[152,40240,40241],{"class":6858},"nonlinearity",[152,40243,1864],{"class":476},[152,40245,40246],{"class":289},"'relu'",[152,40248,1825],{"class":483},[152,40250,40251],{"class":281,"line":18351},[152,40252,40253],{"class":866},"                # 判断b参数是否存在\n",[152,40255,40256,40259,40262,40265,40268,40271],{"class":281,"line":18373},[152,40257,40258],{"class":476},"                if",[152,40260,40261],{"class":483}," m.bias ",[152,40263,40264],{"class":476},"is",[152,40266,40267],{"class":476}," not",[152,40269,40270],{"class":293}," None",[152,40272,5382],{"class":483},[152,40274,40275],{"class":281,"line":18378},[152,40276,40277],{"class":866},"                    # 如果参数不存在的化初始化b=0\n",[152,40279,40280,40283,40285],{"class":281,"line":18384},[152,40281,40282],{"class":483},"                    nn.init.constant_(m.bias,",[152,40284,2000],{"class":293},[152,40286,1825],{"class":483},[152,40288,40289],{"class":281,"line":18398},[152,40290,40291],{"class":866},"            # 全连接层初始化\n",[152,40293,40294,40297,40299],{"class":281,"line":18411},[152,40295,40296],{"class":476},"            elif",[152,40298,40225],{"class":293},[152,40300,40301],{"class":483},"(m,nn.Linear):\n",[152,40303,40304],{"class":281,"line":18416},[152,40305,40306],{"class":866},"                # 这个初始化方法是利用的是正太分布的方式\n",[152,40308,40309],{"class":281,"line":18430},[152,40310,40311],{"class":866},"                # 均值为0，方差为0.01\n",[152,40313,40314,40317,40319,40321,40324],{"class":281,"line":18435},[152,40315,40316],{"class":483},"                nn.init.normal_(m.weight,",[152,40318,2000],{"class":293},[152,40320,2186],{"class":483},[152,40322,40323],{"class":293},"0.01",[152,40325,1825],{"class":483},[152,40327,40328],{"class":281,"line":18441},[152,40329,40330],{"class":866},"                # 初始化b参数\n",[152,40332,40333,40335,40337,40339,40341,40343],{"class":281,"line":18446},[152,40334,40258],{"class":476},[152,40336,40261],{"class":483},[152,40338,40264],{"class":476},[152,40340,40267],{"class":476},[152,40342,40270],{"class":293},[152,40344,5382],{"class":483},[152,40346,40347,40349,40351],{"class":281,"line":18460},[152,40348,40282],{"class":483},[152,40350,2000],{"class":293},[152,40352,1825],{"class":483},[152,40354,40355],{"class":281,"line":18465},[152,40356,307],{"emptyLinePlaceholder":306},[152,40358,40359],{"class":281,"line":18470},[152,40360,36502],{"class":866},[152,40362,40363,40365,40367],{"class":281,"line":18484},[152,40364,32138],{"class":476},[152,40366,32430],{"class":285},[152,40368,32433],{"class":483},[152,40370,40371,40373,40375,40377],{"class":281,"line":18496},[152,40372,32438],{"class":483},[152,40374,1864],{"class":476},[152,40376,32160],{"class":293},[152,40378,40379],{"class":483},".block1(x)\n",[152,40381,40382,40384,40386,40388],{"class":281,"line":18501},[152,40383,32438],{"class":483},[152,40385,1864],{"class":476},[152,40387,32160],{"class":293},[152,40389,40390],{"class":483},".block2(x)\n",[152,40392,40393,40395,40397,40399],{"class":281,"line":18514},[152,40394,32438],{"class":483},[152,40396,1864],{"class":476},[152,40398,32160],{"class":293},[152,40400,40401],{"class":483},".block3(x)\n",[152,40403,40404,40406,40408,40410],{"class":281,"line":18519},[152,40405,32438],{"class":483},[152,40407,1864],{"class":476},[152,40409,32160],{"class":293},[152,40411,40412],{"class":483},".block4(x)\n",[152,40414,40415,40417,40419,40421],{"class":281,"line":18524},[152,40416,32438],{"class":483},[152,40418,1864],{"class":476},[152,40420,32160],{"class":293},[152,40422,40423],{"class":483},".block5(x)\n",[152,40425,40426,40428,40430,40432],{"class":281,"line":18529},[152,40427,32438],{"class":483},[152,40429,1864],{"class":476},[152,40431,32160],{"class":293},[152,40433,40434],{"class":483},".block6(x)\n",[152,40436,40437,40439],{"class":281,"line":18542},[152,40438,16367],{"class":476},[152,40440,32546],{"class":483},[152,40442,40443],{"class":281,"line":18547},[152,40444,307],{"emptyLinePlaceholder":306},[152,40446,40447],{"class":281,"line":33970},[152,40448,40449],{"class":866},"# 验证模型\n",[152,40451,40452,40454,40456,40458,40461],{"class":281,"line":33976},[152,40453,3202],{"class":476},[152,40455,32557],{"class":293},[152,40457,4592],{"class":476},[152,40459,40460],{"class":289},"'__main__'",[152,40462,5382],{"class":483},[152,40464,40465,40467,40469,40471,40473,40475,40477,40479,40481],{"class":281,"line":33982},[152,40466,32574],{"class":483},[152,40468,1864],{"class":476},[152,40470,31788],{"class":483},[152,40472,32581],{"class":289},[152,40474,3364],{"class":476},[152,40476,32586],{"class":483},[152,40478,3361],{"class":476},[152,40480,31813],{"class":289},[152,40482,1825],{"class":483},[152,40484,40485,40487],{"class":281,"line":33988},[152,40486,32636],{"class":293},[152,40488,31822],{"class":483},[152,40490,40491,40493,40495],{"class":281,"line":33994},[152,40492,32626],{"class":483},[152,40494,1864],{"class":476},[152,40496,40497],{"class":483},"VGG16().to(device)\n",[152,40499,40500,40502,40504,40506,40508,40510,40512,40514],{"class":281,"line":34005},[152,40501,32636],{"class":293},[152,40503,32639],{"class":483},[152,40505,2026],{"class":293},[152,40507,2186],{"class":483},[152,40509,32838],{"class":293},[152,40511,2186],{"class":483},[152,40513,32838],{"class":293},[152,40515,32652],{"class":483},[416,40517,40518],{"start":303},[419,40519,40520],{},"训练代码",[19,40522,40523],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40525,40526],{},"解决方式:",[19,40528,40529],{},"①权重初始化",[270,40531,40533],{"className":31715,"code":40532,"language":31717,"meta":275,"style":275},"# 权重初始化,保证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",[277,40534,40535,40540,40545,40557,40562,40570,40575,40588,40593,40607,40612,40621,40626,40635,40640,40645,40658,40663,40677],{"__ignoreMap":275},[152,40536,40537],{"class":281,"line":282},[152,40538,40539],{"class":866},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[152,40541,40542],{"class":281,"line":303},[152,40543,40544],{"class":866},"# 循环遍历模型\n",[152,40546,40547,40549,40551,40553,40555],{"class":281,"line":310},[152,40548,4668],{"class":476},[152,40550,40205],{"class":483},[152,40552,27653],{"class":476},[152,40554,40210],{"class":293},[152,40556,40213],{"class":483},[152,40558,40559],{"class":281,"line":324},[152,40560,40561],{"class":866},"    # print(m)\n",[152,40563,40564,40566,40568],{"class":281,"line":329},[152,40565,4744],{"class":476},[152,40567,40225],{"class":293},[152,40569,40228],{"class":483},[152,40571,40572],{"class":281,"line":343},[152,40573,40574],{"class":866},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[152,40576,40577,40580,40582,40584,40586],{"class":281,"line":348},[152,40578,40579],{"class":483},"        nn.init.kaiming_normal_(m.weight,",[152,40581,40241],{"class":6858},[152,40583,1864],{"class":476},[152,40585,40246],{"class":289},[152,40587,1825],{"class":483},[152,40589,40590],{"class":281,"line":362},[152,40591,40592],{"class":866},"        # 判断b参数是否存在\n",[152,40594,40595,40597,40599,40601,40603,40605],{"class":281,"line":367},[152,40596,4147],{"class":476},[152,40598,40261],{"class":483},[152,40600,40264],{"class":476},[152,40602,40267],{"class":476},[152,40604,40270],{"class":293},[152,40606,5382],{"class":483},[152,40608,40609],{"class":281,"line":381},[152,40610,40611],{"class":866},"            # 如果参数不存在的化初始化b=0\n",[152,40613,40614,40617,40619],{"class":281,"line":386},[152,40615,40616],{"class":483},"            nn.init.constant_(m.bias,",[152,40618,2000],{"class":293},[152,40620,1825],{"class":483},[152,40622,40623],{"class":281,"line":932},[152,40624,40625],{"class":866},"    # 全连接层初始化\n",[152,40627,40628,40631,40633],{"class":281,"line":942},[152,40629,40630],{"class":476},"    elif",[152,40632,40225],{"class":293},[152,40634,40301],{"class":483},[152,40636,40637],{"class":281,"line":949},[152,40638,40639],{"class":866},"        # 这个初始化方法是利用的是正太分布的方式\n",[152,40641,40642],{"class":281,"line":954},[152,40643,40644],{"class":866},"        # 均值为0，方差为0.01\n",[152,40646,40647,40650,40652,40654,40656],{"class":281,"line":959},[152,40648,40649],{"class":483},"        nn.init.normal_(m.weight,",[152,40651,2000],{"class":293},[152,40653,2186],{"class":483},[152,40655,40323],{"class":293},[152,40657,1825],{"class":483},[152,40659,40660],{"class":281,"line":970},[152,40661,40662],{"class":866},"        # 初始化b参数\n",[152,40664,40665,40667,40669,40671,40673,40675],{"class":281,"line":979},[152,40666,4147],{"class":476},[152,40668,40261],{"class":483},[152,40670,40264],{"class":476},[152,40672,40267],{"class":476},[152,40674,40270],{"class":293},[152,40676,5382],{"class":483},[152,40678,40679,40681,40683],{"class":281,"line":989},[152,40680,40616],{"class":483},[152,40682,2000],{"class":293},[152,40684,1825],{"class":483},[19,40686,40687],{},"②尽可能地增加批次",[19,40689,40690],{},"训练完整代码：",[270,40692,40693],{"className":31715,"code":39236,"language":31717,"meta":275,"style":275},[277,40694,40695,40701,40711,40721,40731,40735,40751,40759,40777,40781,40785,40795,40831,40835,40871,40875,40903,40907,40911,40921,40957,40961,40997,41001,41029,41033,41037,41047,41083,41087,41123,41127,41163,41167,41195,41199,41203,41213,41249,41253,41289,41293,41329,41333,41361,41365,41369,41379,41415,41419,41455,41459,41495,41499,41527,41531,41535,41545,41549,41553,41557,41577,41581,41593,41597,41609,41613,41617,41621,41625,41637,41641,41649,41653,41665,41669,41683,41687,41695,41699,41707,41711,41715,41727,41731,41745,41753,41757,41761,41769,41779,41789,41799,41809,41819,41829,41835,41839,41843,41855,41875,41881,41889],{"__ignoreMap":275},[152,40696,40697,40699],{"class":281,"line":282},[152,40698,31729],{"class":476},[152,40700,31732],{"class":483},[152,40702,40703,40705,40707,40709],{"class":281,"line":303},[152,40704,32074],{"class":476},[152,40706,39251],{"class":483},[152,40708,31729],{"class":476},[152,40710,39256],{"class":483},[152,40712,40713,40715,40717,40719],{"class":281,"line":310},[152,40714,32074],{"class":476},[152,40716,32077],{"class":483},[152,40718,31729],{"class":476},[152,40720,32082],{"class":483},[152,40722,40723,40725,40727,40729],{"class":281,"line":324},[152,40724,32074],{"class":476},[152,40726,32094],{"class":483},[152,40728,31729],{"class":476},[152,40730,32099],{"class":483},[152,40732,40733],{"class":281,"line":329},[152,40734,307],{"emptyLinePlaceholder":306},[152,40736,40737,40739,40741,40743,40745,40747,40749],{"class":281,"line":343},[152,40738,16309],{"class":476},[152,40740,39287],{"class":285},[152,40742,1819],{"class":483},[152,40744,32115],{"class":285},[152,40746,2366],{"class":483},[152,40748,32120],{"class":285},[152,40750,32123],{"class":483},[152,40752,40753,40755,40757],{"class":281,"line":348},[152,40754,32138],{"class":476},[152,40756,32141],{"class":293},[152,40758,32144],{"class":483},[152,40760,40761,40763,40765,40767,40769,40771,40773,40775],{"class":281,"line":362},[152,40762,32154],{"class":293},[152,40764,1819],{"class":483},[152,40766,39314],{"class":293},[152,40768,14051],{"class":483},[152,40770,32160],{"class":293},[152,40772,32163],{"class":483},[152,40774,32166],{"class":293},[152,40776,3627],{"class":483},[152,40778,40779],{"class":281,"line":367},[152,40780,39329],{"class":866},[152,40782,40783],{"class":281,"line":381},[152,40784,39334],{"class":866},[152,40786,40787,40789,40791,40793],{"class":281,"line":386},[152,40788,32182],{"class":293},[152,40790,39341],{"class":483},[152,40792,1864],{"class":476},[152,40794,39346],{"class":483},[152,40796,40797,40799,40801,40803,40805,40807,40809,40811,40813,40815,40817,40819,40821,40823,40825,40827,40829],{"class":281,"line":932},[152,40798,39351],{"class":483},[152,40800,32193],{"class":6858},[152,40802,1864],{"class":476},[152,40804,2026],{"class":293},[152,40806,2186],{"class":483},[152,40808,32202],{"class":6858},[152,40810,1864],{"class":476},[152,40812,2012],{"class":293},[152,40814,2186],{"class":483},[152,40816,32211],{"class":6858},[152,40818,1864],{"class":476},[152,40820,1888],{"class":293},[152,40822,2186],{"class":483},[152,40824,32220],{"class":6858},[152,40826,1864],{"class":476},[152,40828,2026],{"class":293},[152,40830,39384],{"class":483},[152,40832,40833],{"class":281,"line":942},[152,40834,39389],{"class":483},[152,40836,40837,40839,40841,40843,40845,40847,40849,40851,40853,40855,40857,40859,40861,40863,40865,40867,40869],{"class":281,"line":949},[152,40838,39351],{"class":483},[152,40840,32193],{"class":6858},[152,40842,1864],{"class":476},[152,40844,2012],{"class":293},[152,40846,2186],{"class":483},[152,40848,32202],{"class":6858},[152,40850,1864],{"class":476},[152,40852,2012],{"class":293},[152,40854,2186],{"class":483},[152,40856,32211],{"class":6858},[152,40858,1864],{"class":476},[152,40860,1888],{"class":293},[152,40862,2186],{"class":483},[152,40864,32220],{"class":6858},[152,40866,1864],{"class":476},[152,40868,2026],{"class":293},[152,40870,39384],{"class":483},[152,40872,40873],{"class":281,"line":954},[152,40874,39389],{"class":483},[152,40876,40877,40879,40881,40883,40885,40887,40889,40891,40893,40895,40897,40899,40901],{"class":281,"line":959},[152,40878,39434],{"class":483},[152,40880,32211],{"class":6858},[152,40882,1864],{"class":476},[152,40884,1894],{"class":293},[152,40886,2186],{"class":483},[152,40888,32266],{"class":6858},[152,40890,1864],{"class":476},[152,40892,1894],{"class":293},[152,40894,2186],{"class":483},[152,40896,32220],{"class":6858},[152,40898,1864],{"class":476},[152,40900,2000],{"class":293},[152,40902,1825],{"class":483},[152,40904,40905],{"class":281,"line":970},[152,40906,39463],{"class":483},[152,40908,40909],{"class":281,"line":979},[152,40910,39468],{"class":866},[152,40912,40913,40915,40917,40919],{"class":281,"line":989},[152,40914,32182],{"class":293},[152,40916,39475],{"class":483},[152,40918,1864],{"class":476},[152,40920,39346],{"class":483},[152,40922,40923,40925,40927,40929,40931,40933,40935,40937,40939,40941,40943,40945,40947,40949,40951,40953,40955],{"class":281,"line":996},[152,40924,39351],{"class":483},[152,40926,32193],{"class":6858},[152,40928,1864],{"class":476},[152,40930,2012],{"class":293},[152,40932,2186],{"class":483},[152,40934,32202],{"class":6858},[152,40936,1864],{"class":476},[152,40938,33407],{"class":293},[152,40940,2186],{"class":483},[152,40942,32211],{"class":6858},[152,40944,1864],{"class":476},[152,40946,1888],{"class":293},[152,40948,2186],{"class":483},[152,40950,32220],{"class":6858},[152,40952,1864],{"class":476},[152,40954,2026],{"class":293},[152,40956,39384],{"class":483},[152,40958,40959],{"class":281,"line":1001},[152,40960,39389],{"class":483},[152,40962,40963,40965,40967,40969,40971,40973,40975,40977,40979,40981,40983,40985,40987,40989,40991,40993,40995],{"class":281,"line":1006},[152,40964,39351],{"class":483},[152,40966,32193],{"class":6858},[152,40968,1864],{"class":476},[152,40970,33407],{"class":293},[152,40972,2186],{"class":483},[152,40974,32202],{"class":6858},[152,40976,1864],{"class":476},[152,40978,33407],{"class":293},[152,40980,2186],{"class":483},[152,40982,32211],{"class":6858},[152,40984,1864],{"class":476},[152,40986,1888],{"class":293},[152,40988,2186],{"class":483},[152,40990,32220],{"class":6858},[152,40992,1864],{"class":476},[152,40994,2026],{"class":293},[152,40996,39384],{"class":483},[152,40998,40999],{"class":281,"line":1018},[152,41000,39389],{"class":483},[152,41002,41003,41005,41007,41009,41011,41013,41015,41017,41019,41021,41023,41025,41027],{"class":281,"line":1027},[152,41004,39434],{"class":483},[152,41006,32211],{"class":6858},[152,41008,1864],{"class":476},[152,41010,1894],{"class":293},[152,41012,2186],{"class":483},[152,41014,32266],{"class":6858},[152,41016,1864],{"class":476},[152,41018,1894],{"class":293},[152,41020,2186],{"class":483},[152,41022,32220],{"class":6858},[152,41024,1864],{"class":476},[152,41026,2000],{"class":293},[152,41028,1825],{"class":483},[152,41030,41031],{"class":281,"line":1037},[152,41032,39463],{"class":483},[152,41034,41035],{"class":281,"line":1044},[152,41036,39596],{"class":866},[152,41038,41039,41041,41043,41045],{"class":281,"line":1049},[152,41040,32182],{"class":293},[152,41042,39603],{"class":483},[152,41044,1864],{"class":476},[152,41046,39346],{"class":483},[152,41048,41049,41051,41053,41055,41057,41059,41061,41063,41065,41067,41069,41071,41073,41075,41077,41079,41081],{"class":281,"line":1054},[152,41050,39351],{"class":483},[152,41052,32193],{"class":6858},[152,41054,1864],{"class":476},[152,41056,33407],{"class":293},[152,41058,2186],{"class":483},[152,41060,32202],{"class":6858},[152,41062,1864],{"class":476},[152,41064,36207],{"class":293},[152,41066,2186],{"class":483},[152,41068,32211],{"class":6858},[152,41070,1864],{"class":476},[152,41072,1888],{"class":293},[152,41074,2186],{"class":483},[152,41076,32220],{"class":6858},[152,41078,1864],{"class":476},[152,41080,2026],{"class":293},[152,41082,39384],{"class":483},[152,41084,41085],{"class":281,"line":1065},[152,41086,39389],{"class":483},[152,41088,41089,41091,41093,41095,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121],{"class":281,"line":1074},[152,41090,39351],{"class":483},[152,41092,32193],{"class":6858},[152,41094,1864],{"class":476},[152,41096,36207],{"class":293},[152,41098,2186],{"class":483},[152,41100,32202],{"class":6858},[152,41102,1864],{"class":476},[152,41104,36207],{"class":293},[152,41106,2186],{"class":483},[152,41108,32211],{"class":6858},[152,41110,1864],{"class":476},[152,41112,1888],{"class":293},[152,41114,2186],{"class":483},[152,41116,32220],{"class":6858},[152,41118,1864],{"class":476},[152,41120,2026],{"class":293},[152,41122,39384],{"class":483},[152,41124,41125],{"class":281,"line":1084},[152,41126,39389],{"class":483},[152,41128,41129,41131,41133,41135,41137,41139,41141,41143,41145,41147,41149,41151,41153,41155,41157,41159,41161],{"class":281,"line":1091},[152,41130,39351],{"class":483},[152,41132,32193],{"class":6858},[152,41134,1864],{"class":476},[152,41136,36207],{"class":293},[152,41138,2186],{"class":483},[152,41140,32202],{"class":6858},[152,41142,1864],{"class":476},[152,41144,36207],{"class":293},[152,41146,2186],{"class":483},[152,41148,32211],{"class":6858},[152,41150,1864],{"class":476},[152,41152,1888],{"class":293},[152,41154,2186],{"class":483},[152,41156,32220],{"class":6858},[152,41158,1864],{"class":476},[152,41160,2026],{"class":293},[152,41162,39384],{"class":483},[152,41164,41165],{"class":281,"line":1096},[152,41166,39389],{"class":483},[152,41168,41169,41171,41173,41175,41177,41179,41181,41183,41185,41187,41189,41191,41193],{"class":281,"line":1101},[152,41170,39434],{"class":483},[152,41172,32211],{"class":6858},[152,41174,1864],{"class":476},[152,41176,1894],{"class":293},[152,41178,2186],{"class":483},[152,41180,32266],{"class":6858},[152,41182,1864],{"class":476},[152,41184,1894],{"class":293},[152,41186,2186],{"class":483},[152,41188,32220],{"class":6858},[152,41190,1864],{"class":476},[152,41192,2000],{"class":293},[152,41194,1825],{"class":483},[152,41196,41197],{"class":281,"line":1112},[152,41198,39463],{"class":483},[152,41200,41201],{"class":281,"line":1121},[152,41202,39764],{"class":866},[152,41204,41205,41207,41209,41211],{"class":281,"line":1131},[152,41206,32182],{"class":293},[152,41208,39771],{"class":483},[152,41210,1864],{"class":476},[152,41212,39346],{"class":483},[152,41214,41215,41217,41219,41221,41223,41225,41227,41229,41231,41233,41235,41237,41239,41241,41243,41245,41247],{"class":281,"line":1138},[152,41216,39351],{"class":483},[152,41218,32193],{"class":6858},[152,41220,1864],{"class":476},[152,41222,36207],{"class":293},[152,41224,2186],{"class":483},[152,41226,32202],{"class":6858},[152,41228,1864],{"class":476},[152,41230,39794],{"class":293},[152,41232,2186],{"class":483},[152,41234,32211],{"class":6858},[152,41236,1864],{"class":476},[152,41238,1888],{"class":293},[152,41240,2186],{"class":483},[152,41242,32220],{"class":6858},[152,41244,1864],{"class":476},[152,41246,2026],{"class":293},[152,41248,39384],{"class":483},[152,41250,41251],{"class":281,"line":1143},[152,41252,39389],{"class":483},[152,41254,41255,41257,41259,41261,41263,41265,41267,41269,41271,41273,41275,41277,41279,41281,41283,41285,41287],{"class":281,"line":1148},[152,41256,39351],{"class":483},[152,41258,32193],{"class":6858},[152,41260,1864],{"class":476},[152,41262,39794],{"class":293},[152,41264,2186],{"class":483},[152,41266,32202],{"class":6858},[152,41268,1864],{"class":476},[152,41270,39794],{"class":293},[152,41272,2186],{"class":483},[152,41274,32211],{"class":6858},[152,41276,1864],{"class":476},[152,41278,1888],{"class":293},[152,41280,2186],{"class":483},[152,41282,32220],{"class":6858},[152,41284,1864],{"class":476},[152,41286,2026],{"class":293},[152,41288,39384],{"class":483},[152,41290,41291],{"class":281,"line":1159},[152,41292,39389],{"class":483},[152,41294,41295,41297,41299,41301,41303,41305,41307,41309,41311,41313,41315,41317,41319,41321,41323,41325,41327],{"class":281,"line":1168},[152,41296,39351],{"class":483},[152,41298,32193],{"class":6858},[152,41300,1864],{"class":476},[152,41302,39794],{"class":293},[152,41304,2186],{"class":483},[152,41306,32202],{"class":6858},[152,41308,1864],{"class":476},[152,41310,39794],{"class":293},[152,41312,2186],{"class":483},[152,41314,32211],{"class":6858},[152,41316,1864],{"class":476},[152,41318,1888],{"class":293},[152,41320,2186],{"class":483},[152,41322,32220],{"class":6858},[152,41324,1864],{"class":476},[152,41326,2026],{"class":293},[152,41328,39384],{"class":483},[152,41330,41331],{"class":281,"line":1178},[152,41332,39389],{"class":483},[152,41334,41335,41337,41339,41341,41343,41345,41347,41349,41351,41353,41355,41357,41359],{"class":281,"line":1185},[152,41336,39434],{"class":483},[152,41338,32211],{"class":6858},[152,41340,1864],{"class":476},[152,41342,1894],{"class":293},[152,41344,2186],{"class":483},[152,41346,32266],{"class":6858},[152,41348,1864],{"class":476},[152,41350,1894],{"class":293},[152,41352,2186],{"class":483},[152,41354,32220],{"class":6858},[152,41356,1864],{"class":476},[152,41358,2000],{"class":293},[152,41360,1825],{"class":483},[152,41362,41363],{"class":281,"line":1190},[152,41364,39463],{"class":483},[152,41366,41367],{"class":281,"line":1195},[152,41368,39933],{"class":866},[152,41370,41371,41373,41375,41377],{"class":281,"line":1206},[152,41372,32182],{"class":293},[152,41374,39940],{"class":483},[152,41376,1864],{"class":476},[152,41378,39346],{"class":483},[152,41380,41381,41383,41385,41387,41389,41391,41393,41395,41397,41399,41401,41403,41405,41407,41409,41411,41413],{"class":281,"line":1215},[152,41382,39351],{"class":483},[152,41384,32193],{"class":6858},[152,41386,1864],{"class":476},[152,41388,39794],{"class":293},[152,41390,2186],{"class":483},[152,41392,32202],{"class":6858},[152,41394,1864],{"class":476},[152,41396,39794],{"class":293},[152,41398,2186],{"class":483},[152,41400,32211],{"class":6858},[152,41402,1864],{"class":476},[152,41404,1888],{"class":293},[152,41406,2186],{"class":483},[152,41408,32220],{"class":6858},[152,41410,1864],{"class":476},[152,41412,2026],{"class":293},[152,41414,39384],{"class":483},[152,41416,41417],{"class":281,"line":1225},[152,41418,39389],{"class":483},[152,41420,41421,41423,41425,41427,41429,41431,41433,41435,41437,41439,41441,41443,41445,41447,41449,41451,41453],{"class":281,"line":1232},[152,41422,39351],{"class":483},[152,41424,32193],{"class":6858},[152,41426,1864],{"class":476},[152,41428,39794],{"class":293},[152,41430,2186],{"class":483},[152,41432,32202],{"class":6858},[152,41434,1864],{"class":476},[152,41436,39794],{"class":293},[152,41438,2186],{"class":483},[152,41440,32211],{"class":6858},[152,41442,1864],{"class":476},[152,41444,1888],{"class":293},[152,41446,2186],{"class":483},[152,41448,32220],{"class":6858},[152,41450,1864],{"class":476},[152,41452,2026],{"class":293},[152,41454,39384],{"class":483},[152,41456,41457],{"class":281,"line":1237},[152,41458,39389],{"class":483},[152,41460,41461,41463,41465,41467,41469,41471,41473,41475,41477,41479,41481,41483,41485,41487,41489,41491,41493],{"class":281,"line":1242},[152,41462,39351],{"class":483},[152,41464,32193],{"class":6858},[152,41466,1864],{"class":476},[152,41468,39794],{"class":293},[152,41470,2186],{"class":483},[152,41472,32202],{"class":6858},[152,41474,1864],{"class":476},[152,41476,39794],{"class":293},[152,41478,2186],{"class":483},[152,41480,32211],{"class":6858},[152,41482,1864],{"class":476},[152,41484,1888],{"class":293},[152,41486,2186],{"class":483},[152,41488,32220],{"class":6858},[152,41490,1864],{"class":476},[152,41492,2026],{"class":293},[152,41494,39384],{"class":483},[152,41496,41497],{"class":281,"line":1253},[152,41498,39389],{"class":483},[152,41500,41501,41503,41505,41507,41509,41511,41513,41515,41517,41519,41521,41523,41525],{"class":281,"line":1262},[152,41502,39434],{"class":483},[152,41504,32211],{"class":6858},[152,41506,1864],{"class":476},[152,41508,1894],{"class":293},[152,41510,2186],{"class":483},[152,41512,32266],{"class":6858},[152,41514,1864],{"class":476},[152,41516,1894],{"class":293},[152,41518,2186],{"class":483},[152,41520,32220],{"class":6858},[152,41522,1864],{"class":476},[152,41524,2000],{"class":293},[152,41526,1825],{"class":483},[152,41528,41529],{"class":281,"line":1272},[152,41530,39463],{"class":483},[152,41532,41533],{"class":281,"line":1279},[152,41534,40101],{"class":866},[152,41536,41537,41539,41541,41543],{"class":281,"line":1284},[152,41538,32182],{"class":293},[152,41540,40108],{"class":483},[152,41542,1864],{"class":476},[152,41544,39346],{"class":483},[152,41546,41547],{"class":281,"line":1289},[152,41548,40117],{"class":866},[152,41550,41551],{"class":281,"line":1301},[152,41552,40122],{"class":866},[152,41554,41555],{"class":281,"line":1310},[152,41556,40127],{"class":483},[152,41558,41559,41561,41563,41565,41567,41569,41571,41573,41575],{"class":281,"line":1320},[152,41560,40132],{"class":483},[152,41562,2177],{"class":293},[152,41564,2263],{"class":476},[152,41566,2177],{"class":293},[152,41568,2263],{"class":476},[152,41570,39794],{"class":293},[152,41572,2186],{"class":483},[152,41574,36207],{"class":293},[152,41576,39384],{"class":483},[152,41578,41579],{"class":281,"line":1327},[152,41580,39389],{"class":483},[152,41582,41583,41585,41587,41589,41591],{"class":281,"line":11528},[152,41584,40132],{"class":483},[152,41586,36207],{"class":293},[152,41588,2186],{"class":483},[152,41590,33407],{"class":293},[152,41592,39384],{"class":483},[152,41594,41595],{"class":281,"line":11536},[152,41596,39389],{"class":483},[152,41598,41599,41601,41603,41605,41607],{"class":281,"line":11541},[152,41600,40132],{"class":483},[152,41602,33407],{"class":293},[152,41604,2186],{"class":483},[152,41606,2254],{"class":293},[152,41608,1825],{"class":483},[152,41610,41611],{"class":281,"line":18219},[152,41612,39463],{"class":483},[152,41614,41615],{"class":281,"line":18225},[152,41616,307],{"emptyLinePlaceholder":306},[152,41618,41619],{"class":281,"line":18248},[152,41620,40193],{"class":866},[152,41622,41623],{"class":281,"line":18254},[152,41624,40198],{"class":866},[152,41626,41627,41629,41631,41633,41635],{"class":281,"line":18277},[152,41628,5046],{"class":476},[152,41630,40205],{"class":483},[152,41632,27653],{"class":476},[152,41634,40210],{"class":293},[152,41636,40213],{"class":483},[152,41638,41639],{"class":281,"line":18291},[152,41640,40218],{"class":866},[152,41642,41643,41645,41647],{"class":281,"line":18311},[152,41644,6284],{"class":476},[152,41646,40225],{"class":293},[152,41648,40228],{"class":483},[152,41650,41651],{"class":281,"line":18317},[152,41652,40233],{"class":866},[152,41654,41655,41657,41659,41661,41663],{"class":281,"line":18328},[152,41656,40238],{"class":483},[152,41658,40241],{"class":6858},[152,41660,1864],{"class":476},[152,41662,40246],{"class":289},[152,41664,1825],{"class":483},[152,41666,41667],{"class":281,"line":18351},[152,41668,40253],{"class":866},[152,41670,41671,41673,41675,41677,41679,41681],{"class":281,"line":18373},[152,41672,40258],{"class":476},[152,41674,40261],{"class":483},[152,41676,40264],{"class":476},[152,41678,40267],{"class":476},[152,41680,40270],{"class":293},[152,41682,5382],{"class":483},[152,41684,41685],{"class":281,"line":18378},[152,41686,40277],{"class":866},[152,41688,41689,41691,41693],{"class":281,"line":18384},[152,41690,40282],{"class":483},[152,41692,2000],{"class":293},[152,41694,1825],{"class":483},[152,41696,41697],{"class":281,"line":18398},[152,41698,40291],{"class":866},[152,41700,41701,41703,41705],{"class":281,"line":18411},[152,41702,40296],{"class":476},[152,41704,40225],{"class":293},[152,41706,40301],{"class":483},[152,41708,41709],{"class":281,"line":18416},[152,41710,40306],{"class":866},[152,41712,41713],{"class":281,"line":18430},[152,41714,40311],{"class":866},[152,41716,41717,41719,41721,41723,41725],{"class":281,"line":18435},[152,41718,40316],{"class":483},[152,41720,2000],{"class":293},[152,41722,2186],{"class":483},[152,41724,40323],{"class":293},[152,41726,1825],{"class":483},[152,41728,41729],{"class":281,"line":18441},[152,41730,40330],{"class":866},[152,41732,41733,41735,41737,41739,41741,41743],{"class":281,"line":18446},[152,41734,40258],{"class":476},[152,41736,40261],{"class":483},[152,41738,40264],{"class":476},[152,41740,40267],{"class":476},[152,41742,40270],{"class":293},[152,41744,5382],{"class":483},[152,41746,41747,41749,41751],{"class":281,"line":18460},[152,41748,40282],{"class":483},[152,41750,2000],{"class":293},[152,41752,1825],{"class":483},[152,41754,41755],{"class":281,"line":18465},[152,41756,307],{"emptyLinePlaceholder":306},[152,41758,41759],{"class":281,"line":18470},[152,41760,36502],{"class":866},[152,41762,41763,41765,41767],{"class":281,"line":18484},[152,41764,32138],{"class":476},[152,41766,32430],{"class":285},[152,41768,32433],{"class":483},[152,41770,41771,41773,41775,41777],{"class":281,"line":18496},[152,41772,32438],{"class":483},[152,41774,1864],{"class":476},[152,41776,32160],{"class":293},[152,41778,40379],{"class":483},[152,41780,41781,41783,41785,41787],{"class":281,"line":18501},[152,41782,32438],{"class":483},[152,41784,1864],{"class":476},[152,41786,32160],{"class":293},[152,41788,40390],{"class":483},[152,41790,41791,41793,41795,41797],{"class":281,"line":18514},[152,41792,32438],{"class":483},[152,41794,1864],{"class":476},[152,41796,32160],{"class":293},[152,41798,40401],{"class":483},[152,41800,41801,41803,41805,41807],{"class":281,"line":18519},[152,41802,32438],{"class":483},[152,41804,1864],{"class":476},[152,41806,32160],{"class":293},[152,41808,40412],{"class":483},[152,41810,41811,41813,41815,41817],{"class":281,"line":18524},[152,41812,32438],{"class":483},[152,41814,1864],{"class":476},[152,41816,32160],{"class":293},[152,41818,40423],{"class":483},[152,41820,41821,41823,41825,41827],{"class":281,"line":18529},[152,41822,32438],{"class":483},[152,41824,1864],{"class":476},[152,41826,32160],{"class":293},[152,41828,40434],{"class":483},[152,41830,41831,41833],{"class":281,"line":18542},[152,41832,16367],{"class":476},[152,41834,32546],{"class":483},[152,41836,41837],{"class":281,"line":18547},[152,41838,307],{"emptyLinePlaceholder":306},[152,41840,41841],{"class":281,"line":33970},[152,41842,40449],{"class":866},[152,41844,41845,41847,41849,41851,41853],{"class":281,"line":33976},[152,41846,3202],{"class":476},[152,41848,32557],{"class":293},[152,41850,4592],{"class":476},[152,41852,40460],{"class":289},[152,41854,5382],{"class":483},[152,41856,41857,41859,41861,41863,41865,41867,41869,41871,41873],{"class":281,"line":33982},[152,41858,32574],{"class":483},[152,41860,1864],{"class":476},[152,41862,31788],{"class":483},[152,41864,32581],{"class":289},[152,41866,3364],{"class":476},[152,41868,32586],{"class":483},[152,41870,3361],{"class":476},[152,41872,31813],{"class":289},[152,41874,1825],{"class":483},[152,41876,41877,41879],{"class":281,"line":33988},[152,41878,32636],{"class":293},[152,41880,31822],{"class":483},[152,41882,41883,41885,41887],{"class":281,"line":33994},[152,41884,32626],{"class":483},[152,41886,1864],{"class":476},[152,41888,40497],{"class":483},[152,41890,41891,41893,41895,41897,41899,41901,41903,41905],{"class":281,"line":34005},[152,41892,32636],{"class":293},[152,41894,32639],{"class":483},[152,41896,2026],{"class":293},[152,41898,2186],{"class":483},[152,41900,32838],{"class":293},[152,41902,2186],{"class":483},[152,41904,32838],{"class":293},[152,41906,32652],{"class":483},[416,41908,41909],{"start":310},[419,41910,41911],{},"测试代码",[270,41913,41915],{"className":31715,"code":41914,"language":31717,"meta":275,"style":275},"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",[277,41916,41917,41923,41933,41943,41947,41957,41968,41972,41976,41980,41988,42004,42014,42030,42040,42054,42058,42068,42078,42088,42094,42098,42102,42110,42114,42130,42138,42142,42146,42154,42162,42166,42170,42174,42178,42184,42188,42198,42206,42214,42218,42222,42226,42234,42238,42254,42258,42262,42266,42278,42282,42294,42298,42302,42314,42318,42328,42332,42336,42348,42352,42361,42365,42369,42377,42381,42389,42393,42397,42401,42405,42409,42425,42433,42437,42441,42489,42495,42499,42509,42517,42525,42529,42533,42537,42541,42549,42553,42569,42573,42581,42589],{"__ignoreMap":275},[152,41918,41919,41921],{"class":281,"line":282},[152,41920,31729],{"class":476},[152,41922,31732],{"class":483},[152,41924,41925,41927,41929,41931],{"class":281,"line":303},[152,41926,31729],{"class":476},[152,41928,32752],{"class":483},[152,41930,32720],{"class":476},[152,41932,32757],{"class":483},[152,41934,41935,41937,41939,41941],{"class":281,"line":310},[152,41936,32074],{"class":476},[152,41938,32735],{"class":483},[152,41940,31729],{"class":476},[152,41942,32740],{"class":483},[152,41944,41945],{"class":281,"line":324},[152,41946,35259],{"class":866},[152,41948,41949,41951,41953,41955],{"class":281,"line":329},[152,41950,32074],{"class":476},[152,41952,32705],{"class":483},[152,41954,31729],{"class":476},[152,41956,32710],{"class":483},[152,41958,41959,41961,41963,41965],{"class":281,"line":343},[152,41960,32074],{"class":476},[152,41962,33251],{"class":483},[152,41964,31729],{"class":476},[152,41966,41967],{"class":293}," VGG16\n",[152,41969,41970],{"class":281,"line":348},[152,41971,307],{"emptyLinePlaceholder":306},[152,41973,41974],{"class":281,"line":362},[152,41975,307],{"emptyLinePlaceholder":306},[152,41977,41978],{"class":281,"line":367},[152,41979,35288],{"class":866},[152,41981,41982,41984,41986],{"class":281,"line":381},[152,41983,33284],{"class":476},[152,41985,35295],{"class":285},[152,41987,33290],{"class":483},[152,41989,41990,41992,41994,41996,41998,42000,42002],{"class":281,"line":386},[152,41991,35302],{"class":483},[152,41993,1864],{"class":476},[152,41995,32792],{"class":483},[152,41997,32795],{"class":6858},[152,41999,1864],{"class":476},[152,42001,32800],{"class":289},[152,42003,32803],{"class":483},[152,42005,42006,42008,42010,42012],{"class":281,"line":932},[152,42007,35319],{"class":6858},[152,42009,1864],{"class":476},[152,42011,35324],{"class":293},[152,42013,32803],{"class":483},[152,42015,42016,42018,42020,42022,42024,42026,42028],{"class":281,"line":942},[152,42017,35331],{"class":6858},[152,42019,1864],{"class":476},[152,42021,32830],{"class":483},[152,42023,32833],{"class":6858},[152,42025,1864],{"class":476},[152,42027,32838],{"class":293},[152,42029,32841],{"class":483},[152,42031,42032,42034,42036,42038],{"class":281,"line":949},[152,42033,35348],{"class":6858},[152,42035,1864],{"class":476},[152,42037,32813],{"class":293},[152,42039,1825],{"class":483},[152,42041,42042,42044,42046,42048,42050,42052],{"class":281,"line":954},[152,42043,35359],{"class":483},[152,42045,1864],{"class":476},[152,42047,32871],{"class":483},[152,42049,32874],{"class":6858},[152,42051,1864],{"class":476},[152,42053,35370],{"class":483},[152,42055,42056],{"class":281,"line":959},[152,42057,35375],{"class":866},[152,42059,42060,42062,42064,42066],{"class":281,"line":970},[152,42061,35380],{"class":6858},[152,42063,1864],{"class":476},[152,42065,2026],{"class":293},[152,42067,32803],{"class":483},[152,42069,42070,42072,42074,42076],{"class":281,"line":979},[152,42071,35391],{"class":6858},[152,42073,1864],{"class":476},[152,42075,32813],{"class":293},[152,42077,32803],{"class":483},[152,42079,42080,42082,42084,42086],{"class":281,"line":989},[152,42081,35402],{"class":6858},[152,42083,1864],{"class":476},[152,42085,2000],{"class":293},[152,42087,1825],{"class":483},[152,42089,42090,42092],{"class":281,"line":996},[152,42091,5732],{"class":476},[152,42093,35415],{"class":483},[152,42095,42096],{"class":281,"line":1001},[152,42097,307],{"emptyLinePlaceholder":306},[152,42099,42100],{"class":281,"line":1006},[152,42101,35424],{"class":866},[152,42103,42104,42106,42108],{"class":281,"line":1018},[152,42105,33284],{"class":476},[152,42107,35431],{"class":285},[152,42109,35434],{"class":483},[152,42111,42112],{"class":281,"line":1027},[152,42113,35439],{"class":866},[152,42115,42116,42118,42120,42122,42124,42126,42128],{"class":281,"line":1037},[152,42117,32574],{"class":483},[152,42119,1864],{"class":476},[152,42121,32581],{"class":289},[152,42123,3364],{"class":476},[152,42125,32586],{"class":483},[152,42127,3361],{"class":476},[152,42129,35456],{"class":289},[152,42131,42132,42134,42136],{"class":281,"line":1044},[152,42133,32626],{"class":483},[152,42135,1864],{"class":476},[152,42137,33626],{"class":483},[152,42139,42140],{"class":281,"line":1049},[152,42141,307],{"emptyLinePlaceholder":306},[152,42143,42144],{"class":281,"line":1054},[152,42145,35473],{"class":866},[152,42147,42148,42150,42152],{"class":281,"line":1065},[152,42149,35478],{"class":483},[152,42151,1864],{"class":476},[152,42153,33679],{"class":293},[152,42155,42156,42158,42160],{"class":281,"line":1074},[152,42157,35487],{"class":483},[152,42159,1864],{"class":476},[152,42161,4728],{"class":293},[152,42163,42164],{"class":281,"line":1084},[152,42165,307],{"emptyLinePlaceholder":306},[152,42167,42168],{"class":281,"line":1091},[152,42169,35500],{"class":866},[152,42171,42172],{"class":281,"line":1096},[152,42173,35505],{"class":866},[152,42175,42176],{"class":281,"line":1101},[152,42177,35510],{"class":866},[152,42179,42180,42182],{"class":281,"line":1112},[152,42181,35515],{"class":476},[152,42183,34221],{"class":483},[152,42185,42186],{"class":281,"line":1121},[152,42187,35522],{"class":866},[152,42189,42190,42192,42194,42196],{"class":281,"line":1131},[152,42191,5046],{"class":476},[152,42193,35529],{"class":483},[152,42195,27653],{"class":476},[152,42197,35534],{"class":483},[152,42199,42200,42202,42204],{"class":281,"line":1138},[152,42201,35539],{"class":483},[152,42203,1864],{"class":476},[152,42205,35544],{"class":483},[152,42207,42208,42210,42212],{"class":281,"line":1143},[152,42209,35549],{"class":483},[152,42211,1864],{"class":476},[152,42213,35554],{"class":483},[152,42215,42216],{"class":281,"line":1148},[152,42217,35559],{"class":866},[152,42219,42220],{"class":281,"line":1159},[152,42221,34212],{"class":483},[152,42223,42224],{"class":281,"line":1168},[152,42225,35568],{"class":866},[152,42227,42228,42230,42232],{"class":281,"line":1178},[152,42229,33997],{"class":483},[152,42231,1864],{"class":476},[152,42233,35577],{"class":483},[152,42235,42236],{"class":281,"line":1185},[152,42237,35582],{"class":866},[152,42239,42240,42242,42244,42246,42248,42250,42252],{"class":281,"line":1190},[152,42241,34014],{"class":483},[152,42243,1864],{"class":476},[152,42245,34019],{"class":483},[152,42247,34022],{"class":6858},[152,42249,1864],{"class":476},[152,42251,2026],{"class":293},[152,42253,1825],{"class":483},[152,42255,42256],{"class":281,"line":1195},[152,42257,35603],{"class":866},[152,42259,42260],{"class":281,"line":1206},[152,42261,35608],{"class":866},[152,42263,42264],{"class":281,"line":1215},[152,42265,35613],{"class":866},[152,42267,42268,42270,42272,42274,42276],{"class":281,"line":1225},[152,42269,35618],{"class":483},[152,42271,11109],{"class":476},[152,42273,34124],{"class":483},[152,42275,4592],{"class":476},[152,42277,35627],{"class":483},[152,42279,42280],{"class":281,"line":1232},[152,42281,35632],{"class":866},[152,42283,42284,42286,42288,42290,42292],{"class":281,"line":1237},[152,42285,35637],{"class":483},[152,42287,11109],{"class":476},[152,42289,35642],{"class":483},[152,42291,2000],{"class":293},[152,42293,1825],{"class":483},[152,42295,42296],{"class":281,"line":1242},[152,42297,307],{"emptyLinePlaceholder":306},[152,42299,42300],{"class":281,"line":1253},[152,42301,35655],{"class":866},[152,42303,42304,42306,42308,42310,42312],{"class":281,"line":1262},[152,42305,35660],{"class":483},[152,42307,1864],{"class":476},[152,42309,35665],{"class":483},[152,42311,2392],{"class":476},[152,42313,35670],{"class":483},[152,42315,42316],{"class":281,"line":1272},[152,42317,35675],{"class":866},[152,42319,42320,42322,42324,42326],{"class":281,"line":1279},[152,42321,33788],{"class":293},[152,42323,1819],{"class":483},[152,42325,35684],{"class":289},[152,42327,35687],{"class":483},[152,42329,42330],{"class":281,"line":1284},[152,42331,307],{"emptyLinePlaceholder":306},[152,42333,42334],{"class":281,"line":1289},[152,42335,35696],{"class":866},[152,42337,42338,42340,42342,42344,42346],{"class":281,"line":1301},[152,42339,3202],{"class":476},[152,42341,32557],{"class":293},[152,42343,4592],{"class":476},[152,42345,32562],{"class":289},[152,42347,5382],{"class":483},[152,42349,42350],{"class":281,"line":1310},[152,42351,35713],{"class":866},[152,42353,42354,42356,42358],{"class":281,"line":1320},[152,42355,32626],{"class":483},[152,42357,1864],{"class":476},[152,42359,42360],{"class":483},"VGG16()\n",[152,42362,42363],{"class":281,"line":1327},[152,42364,35726],{"class":866},[152,42366,42367],{"class":281,"line":11528},[152,42368,35731],{"class":866},[152,42370,42371,42373,42375],{"class":281,"line":11536},[152,42372,35736],{"class":483},[152,42374,35739],{"class":289},[152,42376,31834],{"class":483},[152,42378,42379],{"class":281,"line":11541},[152,42380,35746],{"class":866},[152,42382,42383,42385,42387],{"class":281,"line":18219},[152,42384,35359],{"class":483},[152,42386,1864],{"class":476},[152,42388,35755],{"class":483},[152,42390,42391],{"class":281,"line":18225},[152,42392,35760],{"class":866},[152,42394,42395],{"class":281,"line":18248},[152,42396,35765],{"class":483},[152,42398,42399],{"class":281,"line":18254},[152,42400,307],{"emptyLinePlaceholder":306},[152,42402,42403],{"class":281,"line":18277},[152,42404,35774],{"class":866},[152,42406,42407],{"class":281,"line":18291},[152,42408,35779],{"class":866},[152,42410,42411,42413,42415,42417,42419,42421,42423],{"class":281,"line":18311},[152,42412,32574],{"class":483},[152,42414,1864],{"class":476},[152,42416,32581],{"class":289},[152,42418,3364],{"class":476},[152,42420,32586],{"class":483},[152,42422,3361],{"class":476},[152,42424,35456],{"class":289},[152,42426,42427,42429,42431],{"class":281,"line":18317},[152,42428,32626],{"class":483},[152,42430,1864],{"class":476},[152,42432,33626],{"class":483},[152,42434,42435],{"class":281,"line":18328},[152,42436,35808],{"class":866},[152,42438,42439],{"class":281,"line":18351},[152,42440,35813],{"class":866},[152,42442,42443,42445,42447,42449,42451,42453,42455,42457,42459,42461,42463,42465,42467,42469,42471,42473,42475,42477,42479,42481,42483,42485,42487],{"class":281,"line":18373},[152,42444,35818],{"class":483},[152,42446,1864],{"class":476},[152,42448,2697],{"class":483},[152,42450,35825],{"class":289},[152,42452,2186],{"class":483},[152,42454,35830],{"class":289},[152,42456,2186],{"class":483},[152,42458,35835],{"class":289},[152,42460,2186],{"class":483},[152,42462,35840],{"class":289},[152,42464,2186],{"class":483},[152,42466,35845],{"class":289},[152,42468,2186],{"class":483},[152,42470,35850],{"class":289},[152,42472,2186],{"class":483},[152,42474,35855],{"class":289},[152,42476,2186],{"class":483},[152,42478,35860],{"class":289},[152,42480,2186],{"class":483},[152,42482,35865],{"class":289},[152,42484,2186],{"class":483},[152,42486,35870],{"class":289},[152,42488,34583],{"class":483},[152,42490,42491,42493],{"class":281,"line":18378},[152,42492,35515],{"class":476},[152,42494,34221],{"class":483},[152,42496,42497],{"class":281,"line":18384},[152,42498,35883],{"class":866},[152,42500,42501,42503,42505,42507],{"class":281,"line":18398},[152,42502,5046],{"class":476},[152,42504,35890],{"class":483},[152,42506,27653],{"class":476},[152,42508,35534],{"class":483},[152,42510,42511,42513,42515],{"class":281,"line":18411},[152,42512,33947],{"class":483},[152,42514,1864],{"class":476},[152,42516,33952],{"class":483},[152,42518,42519,42521,42523],{"class":281,"line":18416},[152,42520,33962],{"class":483},[152,42522,1864],{"class":476},[152,42524,33967],{"class":483},[152,42526,42527],{"class":281,"line":18430},[152,42528,307],{"emptyLinePlaceholder":306},[152,42530,42531],{"class":281,"line":18435},[152,42532,35919],{"class":866},[152,42534,42535],{"class":281,"line":18441},[152,42536,34212],{"class":483},[152,42538,42539],{"class":281,"line":18446},[152,42540,35928],{"class":866},[152,42542,42543,42545,42547],{"class":281,"line":18460},[152,42544,33997],{"class":483},[152,42546,1864],{"class":476},[152,42548,34002],{"class":483},[152,42550,42551],{"class":281,"line":18465},[152,42552,35941],{"class":866},[152,42554,42555,42557,42559,42561,42563,42565,42567],{"class":281,"line":18470},[152,42556,34014],{"class":483},[152,42558,1864],{"class":476},[152,42560,34019],{"class":483},[152,42562,34022],{"class":6858},[152,42564,1864],{"class":476},[152,42566,2026],{"class":293},[152,42568,1825],{"class":483},[152,42570,42571],{"class":281,"line":18484},[152,42572,35962],{"class":866},[152,42574,42575,42577,42579],{"class":281,"line":18496},[152,42576,35967],{"class":483},[152,42578,1864],{"class":476},[152,42580,35972],{"class":483},[152,42582,42583,42585,42587],{"class":281,"line":18501},[152,42584,35977],{"class":483},[152,42586,1864],{"class":476},[152,42588,35982],{"class":483},[152,42590,42591,42593,42595,42597,42599,42601,42603,42605],{"class":281,"line":18514},[152,42592,35987],{"class":293},[152,42594,1819],{"class":483},[152,42596,35992],{"class":289},[152,42598,35995],{"class":483},[152,42600,35998],{"class":289},[152,42602,2186],{"class":483},[152,42604,36003],{"class":289},[152,42606,36006],{"class":483},[14,42608,42610],{"id":42609},"_23googlenet","2.3.GoogLeNet",[262,42612,42614],{"id":42613},"_231原理","2.3.1.原理",[416,42616,42617],{},[419,42618,42619],{},"网络结构",[19,42621,42622],{},[401,42623],{"alt":275,"src":42624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[19,42626,42627],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,42629,42630],{},[401,42631],{"alt":275,"src":42632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[19,42634,42635],{},[401,42636],{"alt":275,"src":42637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[19,42639,42640],{},[401,42641],{"alt":275,"src":42642},"\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",[416,42644,42645],{"start":303},[419,42646,42647],{},"1x1卷积的优点",[19,42649,42650],{},[401,42651],{"alt":275,"src":42652},"\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",[416,42654,42655],{"start":310},[419,42656,42657],{},"全局平均池化层优点",[19,42659,42660],{},[401,42661],{"alt":275,"src":42662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[19,42664,42665],{},[401,42666],{"alt":275,"src":42667},"\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",[416,42669,42670],{"start":324},[419,42671,42672],{},"参数详细描述",[19,42674,42675],{},[401,42676],{"alt":275,"src":42677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[19,42679,42680],{},[401,42681],{"alt":275,"src":42682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[19,42684,42685],{},[401,42686],{"alt":275,"src":42687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[19,42689,42690],{},[401,42691],{"alt":275,"src":42692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[19,42694,42695],{},[401,42696],{"alt":275,"src":42697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,42699,42700],{},[401,42701],{"alt":275,"src":42702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,42704,42705],{},[401,42706],{"alt":275,"src":42707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,42709,42710],{},[401,42711],{"alt":275,"src":42712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,42714,42715],{},[401,42716],{"alt":275,"src":42717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,42719,42720],{},[401,42721],{"alt":275,"src":42722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,42724,42725],{},[401,42726],{"alt":275,"src":42727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,42729,42730],{},[401,42731],{"alt":275,"src":42732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,42734,42735],{},[401,42736],{"alt":275,"src":42737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[19,42739,42740],{},[401,42741],{"alt":275,"src":42742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[19,42744,42745],{},[401,42746],{"alt":275,"src":42747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[19,42749,42750],{},[401,42751],{"alt":275,"src":42752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,42754,42755],{},[401,42756],{"alt":275,"src":42757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[19,42759,42760],{},[401,42761],{"alt":275,"src":42762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,42764,42765],{},[401,42766],{"alt":275,"src":42767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,42769,42770],{},[401,42771],{"alt":275,"src":42772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,42774,42775],{},[401,42776],{"alt":275,"src":42777},"\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",[262,42779,42781],{"id":42780},"_232代码实现","2.3.2.代码实现",[416,42783,42784],{},[419,42785,32048],{},[19,42787,42788],{},"根据原理一步一步搭建即可",[270,42790,42792],{"className":31715,"code":42791,"language":31717,"meta":275,"style":275},"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",[277,42793,42794,42800,42810,42820,42824,42841,42850,42865,42875,42880,42913,42918,42955,43002,43007,43043,43090,43095,43100,43135,43167,43171,43179,43195,43219,43244,43265,43270,43285,43289,43293,43298,43315,43320,43329,43344,43355,43399,43403,43431,43435,43446,43474,43478,43515,43519,43547,43551,43562,43598,43630,43658,43662,43673,43707,43739,43771,43804,43838,43866,43870,43881,43914,43946,43960,43964,43977,43981,43986,43998,44006,44028,44033,44038,44043,44048,44053,44058,44072,44080,44089,44102,44117,44126,44130,44138,44149,44160,44171,44182,44193,44199,44203,44208,44220,44240,44249],{"__ignoreMap":275},[152,42795,42796,42798],{"class":281,"line":282},[152,42797,31729],{"class":476},[152,42799,31732],{"class":483},[152,42801,42802,42804,42806,42808],{"class":281,"line":303},[152,42803,32074],{"class":476},[152,42805,32077],{"class":483},[152,42807,31729],{"class":476},[152,42809,32082],{"class":483},[152,42811,42812,42814,42816,42818],{"class":281,"line":310},[152,42813,32074],{"class":476},[152,42815,32094],{"class":483},[152,42817,31729],{"class":476},[152,42819,32099],{"class":483},[152,42821,42822],{"class":281,"line":324},[152,42823,307],{"emptyLinePlaceholder":306},[152,42825,42826,42828,42831,42833,42835,42837,42839],{"class":281,"line":329},[152,42827,16309],{"class":476},[152,42829,42830],{"class":285}," Inception",[152,42832,1819],{"class":483},[152,42834,32115],{"class":285},[152,42836,2366],{"class":483},[152,42838,32120],{"class":285},[152,42840,32123],{"class":483},[152,42842,42843,42845,42847],{"class":281,"line":343},[152,42844,32138],{"class":476},[152,42846,32141],{"class":293},[152,42848,42849],{"class":483},"(self,in_channels,c1,c2,c3,c4):\n",[152,42851,42852,42854,42857,42859,42861,42863],{"class":281,"line":348},[152,42853,32154],{"class":293},[152,42855,42856],{"class":483},"(Inception,",[152,42858,32160],{"class":293},[152,42860,32163],{"class":483},[152,42862,32166],{"class":293},[152,42864,3627],{"class":483},[152,42866,42867,42869,42871,42873],{"class":281,"line":362},[152,42868,32182],{"class":293},[152,42870,36108],{"class":483},[152,42872,1864],{"class":476},[152,42874,36113],{"class":483},[152,42876,42877],{"class":281,"line":367},[152,42878,42879],{"class":866},"        # 路线1：定义1*1卷积\n",[152,42881,42882,42884,42887,42889,42891,42893,42895,42898,42900,42902,42905,42907,42909,42911],{"class":281,"line":381},[152,42883,32182],{"class":293},[152,42885,42886],{"class":483},".p1_1",[152,42888,1864],{"class":476},[152,42890,32190],{"class":483},[152,42892,32193],{"class":6858},[152,42894,1864],{"class":476},[152,42896,42897],{"class":483},"in_channels,",[152,42899,32202],{"class":6858},[152,42901,1864],{"class":476},[152,42903,42904],{"class":483},"c1,",[152,42906,32211],{"class":6858},[152,42908,1864],{"class":476},[152,42910,2026],{"class":293},[152,42912,1825],{"class":483},[152,42914,42915],{"class":281,"line":386},[152,42916,42917],{"class":866},"        # 路线2：定义1*1卷积和3*3\n",[152,42919,42920,42922,42925,42927,42929,42931,42933,42935,42937,42939,42942,42944,42947,42949,42951,42953],{"class":281,"line":932},[152,42921,32182],{"class":293},[152,42923,42924],{"class":483},".p2_1",[152,42926,1864],{"class":476},[152,42928,32190],{"class":483},[152,42930,32193],{"class":6858},[152,42932,1864],{"class":476},[152,42934,42897],{"class":483},[152,42936,32202],{"class":6858},[152,42938,1864],{"class":476},[152,42940,42941],{"class":483},"c2[",[152,42943,2000],{"class":293},[152,42945,42946],{"class":483},"],",[152,42948,32211],{"class":6858},[152,42950,1864],{"class":476},[152,42952,2026],{"class":293},[152,42954,1825],{"class":483},[152,42956,42957,42959,42962,42964,42966,42968,42970,42972,42974,42976,42978,42980,42982,42984,42986,42988,42990,42992,42994,42996,42998,43000],{"class":281,"line":942},[152,42958,32182],{"class":293},[152,42960,42961],{"class":483},".p2_2",[152,42963,1864],{"class":476},[152,42965,32190],{"class":483},[152,42967,32193],{"class":6858},[152,42969,1864],{"class":476},[152,42971,42941],{"class":483},[152,42973,2000],{"class":293},[152,42975,42946],{"class":483},[152,42977,32202],{"class":6858},[152,42979,1864],{"class":476},[152,42981,42941],{"class":483},[152,42983,2026],{"class":293},[152,42985,42946],{"class":483},[152,42987,32211],{"class":6858},[152,42989,1864],{"class":476},[152,42991,1888],{"class":293},[152,42993,2186],{"class":483},[152,42995,32220],{"class":6858},[152,42997,1864],{"class":476},[152,42999,2026],{"class":293},[152,43001,1825],{"class":483},[152,43003,43004],{"class":281,"line":949},[152,43005,43006],{"class":866},"        # 路线3：定义1*1卷积和5*5\n",[152,43008,43009,43011,43014,43016,43018,43020,43022,43024,43026,43028,43031,43033,43035,43037,43039,43041],{"class":281,"line":954},[152,43010,32182],{"class":293},[152,43012,43013],{"class":483},".p3_1",[152,43015,1864],{"class":476},[152,43017,32190],{"class":483},[152,43019,32193],{"class":6858},[152,43021,1864],{"class":476},[152,43023,42897],{"class":483},[152,43025,32202],{"class":6858},[152,43027,1864],{"class":476},[152,43029,43030],{"class":483},"c3[",[152,43032,2000],{"class":293},[152,43034,42946],{"class":483},[152,43036,32211],{"class":6858},[152,43038,1864],{"class":476},[152,43040,2026],{"class":293},[152,43042,1825],{"class":483},[152,43044,43045,43047,43050,43052,43054,43056,43058,43060,43062,43064,43066,43068,43070,43072,43074,43076,43078,43080,43082,43084,43086,43088],{"class":281,"line":959},[152,43046,32182],{"class":293},[152,43048,43049],{"class":483},".p3_2",[152,43051,1864],{"class":476},[152,43053,32190],{"class":483},[152,43055,32193],{"class":6858},[152,43057,1864],{"class":476},[152,43059,43030],{"class":483},[152,43061,2000],{"class":293},[152,43063,42946],{"class":483},[152,43065,32202],{"class":6858},[152,43067,1864],{"class":476},[152,43069,43030],{"class":483},[152,43071,2026],{"class":293},[152,43073,42946],{"class":483},[152,43075,32211],{"class":6858},[152,43077,1864],{"class":476},[152,43079,2127],{"class":293},[152,43081,2186],{"class":483},[152,43083,32220],{"class":6858},[152,43085,1864],{"class":476},[152,43087,1894],{"class":293},[152,43089,1825],{"class":483},[152,43091,43092],{"class":281,"line":970},[152,43093,43094],{"class":866},"        # 路线4：定义3*3最大池化和1*1卷积\n",[152,43096,43097],{"class":281,"line":979},[152,43098,43099],{"class":866},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[152,43101,43102,43104,43107,43109,43111,43113,43115,43117,43119,43121,43123,43125,43127,43129,43131,43133],{"class":281,"line":989},[152,43103,32182],{"class":293},[152,43105,43106],{"class":483},".p4_1",[152,43108,1864],{"class":476},[152,43110,36166],{"class":483},[152,43112,32211],{"class":6858},[152,43114,1864],{"class":476},[152,43116,1888],{"class":293},[152,43118,2186],{"class":483},[152,43120,32266],{"class":6858},[152,43122,1864],{"class":476},[152,43124,2026],{"class":293},[152,43126,2186],{"class":483},[152,43128,32220],{"class":6858},[152,43130,1864],{"class":476},[152,43132,2026],{"class":293},[152,43134,1825],{"class":483},[152,43136,43137,43139,43142,43144,43146,43148,43150,43152,43154,43156,43159,43161,43163,43165],{"class":281,"line":996},[152,43138,32182],{"class":293},[152,43140,43141],{"class":483},".p4_2",[152,43143,1864],{"class":476},[152,43145,32190],{"class":483},[152,43147,32193],{"class":6858},[152,43149,1864],{"class":476},[152,43151,42897],{"class":483},[152,43153,32202],{"class":6858},[152,43155,1864],{"class":476},[152,43157,43158],{"class":483},"c4,",[152,43160,32211],{"class":6858},[152,43162,1864],{"class":476},[152,43164,2026],{"class":293},[152,43166,1825],{"class":483},[152,43168,43169],{"class":281,"line":1001},[152,43170,307],{"emptyLinePlaceholder":306},[152,43172,43173,43175,43177],{"class":281,"line":1006},[152,43174,32138],{"class":476},[152,43176,32430],{"class":285},[152,43178,32433],{"class":483},[152,43180,43181,43184,43186,43188,43190,43192],{"class":281,"line":1018},[152,43182,43183],{"class":483},"        p1",[152,43185,1864],{"class":476},[152,43187,32160],{"class":293},[152,43189,36521],{"class":483},[152,43191,32160],{"class":293},[152,43193,43194],{"class":483},".p1_1(x))\n",[152,43196,43197,43199,43201,43203,43205,43207,43210,43212,43214,43216],{"class":281,"line":1027},[152,43198,8727],{"class":483},[152,43200,1864],{"class":476},[152,43202,32160],{"class":293},[152,43204,36521],{"class":483},[152,43206,32160],{"class":293},[152,43208,43209],{"class":483},".p2_2(",[152,43211,32160],{"class":293},[152,43213,36521],{"class":483},[152,43215,32160],{"class":293},[152,43217,43218],{"class":483},".p2_1(x))))\n",[152,43220,43221,43224,43226,43228,43230,43232,43235,43237,43239,43241],{"class":281,"line":1037},[152,43222,43223],{"class":483},"        p3",[152,43225,1864],{"class":476},[152,43227,32160],{"class":293},[152,43229,36521],{"class":483},[152,43231,32160],{"class":293},[152,43233,43234],{"class":483},".p3_2(",[152,43236,32160],{"class":293},[152,43238,36521],{"class":483},[152,43240,32160],{"class":293},[152,43242,43243],{"class":483},".p3_1(x))))\n",[152,43245,43246,43249,43251,43253,43255,43257,43260,43262],{"class":281,"line":1044},[152,43247,43248],{"class":483},"        p4",[152,43250,1864],{"class":476},[152,43252,32160],{"class":293},[152,43254,36521],{"class":483},[152,43256,32160],{"class":293},[152,43258,43259],{"class":483},".p4_2(",[152,43261,32160],{"class":293},[152,43263,43264],{"class":483},".p4_1(x)))\n",[152,43266,43267],{"class":281,"line":1049},[152,43268,43269],{"class":866},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[152,43271,43272,43274,43277,43279,43281,43283],{"class":281,"line":1054},[152,43273,16367],{"class":476},[152,43275,43276],{"class":483}," torch.cat((p1,p2,p3,p4),",[152,43278,34022],{"class":6858},[152,43280,1864],{"class":476},[152,43282,2026],{"class":293},[152,43284,1825],{"class":483},[152,43286,43287],{"class":281,"line":1065},[152,43288,307],{"emptyLinePlaceholder":306},[152,43290,43291],{"class":281,"line":1074},[152,43292,307],{"emptyLinePlaceholder":306},[152,43294,43295],{"class":281,"line":1084},[152,43296,43297],{"class":866},"# 搭建GoogLeNet网络\n",[152,43299,43300,43302,43305,43307,43309,43311,43313],{"class":281,"line":1091},[152,43301,16309],{"class":476},[152,43303,43304],{"class":285}," GoogLeNet",[152,43306,1819],{"class":483},[152,43308,32115],{"class":285},[152,43310,2366],{"class":483},[152,43312,32120],{"class":285},[152,43314,32123],{"class":483},[152,43316,43317],{"class":281,"line":1096},[152,43318,43319],{"class":866},"    # 必须把Inception导入到里边\n",[152,43321,43322,43324,43326],{"class":281,"line":1101},[152,43323,32138],{"class":476},[152,43325,32141],{"class":293},[152,43327,43328],{"class":483},"(self,Inception):\n",[152,43330,43331,43333,43336,43338,43340,43342],{"class":281,"line":1112},[152,43332,32154],{"class":293},[152,43334,43335],{"class":483},"(GoogLeNet,",[152,43337,32160],{"class":293},[152,43339,32163],{"class":483},[152,43341,32166],{"class":293},[152,43343,3627],{"class":483},[152,43345,43346,43348,43351,43353],{"class":281,"line":1121},[152,43347,32182],{"class":293},[152,43349,43350],{"class":483},".b1",[152,43352,1864],{"class":476},[152,43354,39346],{"class":483},[152,43356,43357,43359,43361,43363,43365,43367,43369,43371,43373,43375,43377,43379,43381,43383,43385,43387,43389,43391,43393,43395,43397],{"class":281,"line":1131},[152,43358,39351],{"class":483},[152,43360,32193],{"class":6858},[152,43362,1864],{"class":476},[152,43364,2026],{"class":293},[152,43366,2186],{"class":483},[152,43368,32202],{"class":6858},[152,43370,1864],{"class":476},[152,43372,2012],{"class":293},[152,43374,2186],{"class":483},[152,43376,32211],{"class":6858},[152,43378,1864],{"class":476},[152,43380,2177],{"class":293},[152,43382,2186],{"class":483},[152,43384,32266],{"class":6858},[152,43386,1864],{"class":476},[152,43388,1894],{"class":293},[152,43390,2186],{"class":483},[152,43392,32220],{"class":6858},[152,43394,1864],{"class":476},[152,43396,1888],{"class":293},[152,43398,39384],{"class":483},[152,43400,43401],{"class":281,"line":1138},[152,43402,39389],{"class":483},[152,43404,43405,43407,43409,43411,43413,43415,43417,43419,43421,43423,43425,43427,43429],{"class":281,"line":1143},[152,43406,39434],{"class":483},[152,43408,32211],{"class":6858},[152,43410,1864],{"class":476},[152,43412,1888],{"class":293},[152,43414,2186],{"class":483},[152,43416,32266],{"class":6858},[152,43418,1864],{"class":476},[152,43420,1894],{"class":293},[152,43422,2186],{"class":483},[152,43424,32220],{"class":6858},[152,43426,1864],{"class":476},[152,43428,2026],{"class":293},[152,43430,1825],{"class":483},[152,43432,43433],{"class":281,"line":1148},[152,43434,39463],{"class":483},[152,43436,43437,43439,43442,43444],{"class":281,"line":1159},[152,43438,32182],{"class":293},[152,43440,43441],{"class":483},".b2",[152,43443,1864],{"class":476},[152,43445,39346],{"class":483},[152,43447,43448,43450,43452,43454,43456,43458,43460,43462,43464,43466,43468,43470,43472],{"class":281,"line":1168},[152,43449,39351],{"class":483},[152,43451,32193],{"class":6858},[152,43453,1864],{"class":476},[152,43455,2012],{"class":293},[152,43457,2186],{"class":483},[152,43459,32202],{"class":6858},[152,43461,1864],{"class":476},[152,43463,2012],{"class":293},[152,43465,2186],{"class":483},[152,43467,32211],{"class":6858},[152,43469,1864],{"class":476},[152,43471,2026],{"class":293},[152,43473,39384],{"class":483},[152,43475,43476],{"class":281,"line":1178},[152,43477,39389],{"class":483},[152,43479,43480,43482,43484,43486,43488,43490,43492,43494,43497,43499,43501,43503,43505,43507,43509,43511,43513],{"class":281,"line":1185},[152,43481,39351],{"class":483},[152,43483,32193],{"class":6858},[152,43485,1864],{"class":476},[152,43487,2012],{"class":293},[152,43489,2186],{"class":483},[152,43491,32202],{"class":6858},[152,43493,1864],{"class":476},[152,43495,43496],{"class":293},"192",[152,43498,2186],{"class":483},[152,43500,32211],{"class":6858},[152,43502,1864],{"class":476},[152,43504,1888],{"class":293},[152,43506,2186],{"class":483},[152,43508,32220],{"class":6858},[152,43510,1864],{"class":476},[152,43512,2026],{"class":293},[152,43514,39384],{"class":483},[152,43516,43517],{"class":281,"line":1190},[152,43518,39389],{"class":483},[152,43520,43521,43523,43525,43527,43529,43531,43533,43535,43537,43539,43541,43543,43545],{"class":281,"line":1195},[152,43522,39434],{"class":483},[152,43524,32211],{"class":6858},[152,43526,1864],{"class":476},[152,43528,1888],{"class":293},[152,43530,2186],{"class":483},[152,43532,32266],{"class":6858},[152,43534,1864],{"class":476},[152,43536,1894],{"class":293},[152,43538,2186],{"class":483},[152,43540,32220],{"class":6858},[152,43542,1864],{"class":476},[152,43544,2026],{"class":293},[152,43546,1825],{"class":483},[152,43548,43549],{"class":281,"line":1206},[152,43550,39463],{"class":483},[152,43552,43553,43555,43558,43560],{"class":281,"line":1215},[152,43554,32182],{"class":293},[152,43556,43557],{"class":483},".b3",[152,43559,1864],{"class":476},[152,43561,39346],{"class":483},[152,43563,43564,43567,43569,43571,43573,43576,43578,43580,43582,43585,43587,43589,43591,43594,43596],{"class":281,"line":1225},[152,43565,43566],{"class":483},"            Inception(",[152,43568,43496],{"class":293},[152,43570,2186],{"class":483},[152,43572,2012],{"class":293},[152,43574,43575],{"class":483},",(",[152,43577,2018],{"class":293},[152,43579,2186],{"class":483},[152,43581,33407],{"class":293},[152,43583,43584],{"class":483},"),(",[152,43586,2409],{"class":293},[152,43588,2186],{"class":483},[152,43590,2006],{"class":293},[152,43592,43593],{"class":483},"),",[152,43595,2006],{"class":293},[152,43597,39384],{"class":483},[152,43599,43600,43602,43604,43606,43608,43610,43612,43614,43616,43618,43620,43622,43624,43626,43628],{"class":281,"line":1232},[152,43601,43566],{"class":483},[152,43603,36207],{"class":293},[152,43605,2186],{"class":483},[152,43607,33407],{"class":293},[152,43609,43575],{"class":483},[152,43611,33407],{"class":293},[152,43613,2186],{"class":483},[152,43615,43496],{"class":293},[152,43617,43584],{"class":483},[152,43619,2006],{"class":293},[152,43621,2186],{"class":483},[152,43623,2018],{"class":293},[152,43625,43593],{"class":483},[152,43627,2012],{"class":293},[152,43629,39384],{"class":483},[152,43631,43632,43634,43636,43638,43640,43642,43644,43646,43648,43650,43652,43654,43656],{"class":281,"line":1237},[152,43633,39434],{"class":483},[152,43635,32211],{"class":6858},[152,43637,1864],{"class":476},[152,43639,1888],{"class":293},[152,43641,2186],{"class":483},[152,43643,32266],{"class":6858},[152,43645,1864],{"class":476},[152,43647,1894],{"class":293},[152,43649,2186],{"class":483},[152,43651,32220],{"class":6858},[152,43653,1864],{"class":476},[152,43655,2026],{"class":293},[152,43657,1825],{"class":483},[152,43659,43660],{"class":281,"line":1242},[152,43661,39463],{"class":483},[152,43663,43664,43666,43669,43671],{"class":281,"line":1253},[152,43665,32182],{"class":293},[152,43667,43668],{"class":483},".b4",[152,43670,1864],{"class":476},[152,43672,39346],{"class":483},[152,43674,43675,43677,43680,43682,43684,43686,43688,43690,43693,43695,43697,43699,43701,43703,43705],{"class":281,"line":1262},[152,43676,43566],{"class":483},[152,43678,43679],{"class":293},"480",[152,43681,2186],{"class":483},[152,43683,43496],{"class":293},[152,43685,43575],{"class":483},[152,43687,2018],{"class":293},[152,43689,2186],{"class":483},[152,43691,43692],{"class":293},"208",[152,43694,43584],{"class":483},[152,43696,2409],{"class":293},[152,43698,2186],{"class":483},[152,43700,2415],{"class":293},[152,43702,43593],{"class":483},[152,43704,2012],{"class":293},[152,43706,39384],{"class":483},[152,43708,43709,43711,43713,43715,43717,43719,43721,43723,43725,43727,43729,43731,43733,43735,43737],{"class":281,"line":1272},[152,43710,43566],{"class":483},[152,43712,39794],{"class":293},[152,43714,2186],{"class":483},[152,43716,22663],{"class":293},[152,43718,43575],{"class":483},[152,43720,2426],{"class":293},[152,43722,2186],{"class":483},[152,43724,32838],{"class":293},[152,43726,43584],{"class":483},[152,43728,2608],{"class":293},[152,43730,2186],{"class":483},[152,43732,2012],{"class":293},[152,43734,43593],{"class":483},[152,43736,2012],{"class":293},[152,43738,39384],{"class":483},[152,43740,43741,43743,43745,43747,43749,43751,43753,43755,43757,43759,43761,43763,43765,43767,43769],{"class":281,"line":1279},[152,43742,43566],{"class":483},[152,43744,39794],{"class":293},[152,43746,2186],{"class":483},[152,43748,33407],{"class":293},[152,43750,43575],{"class":483},[152,43752,33407],{"class":293},[152,43754,2186],{"class":483},[152,43756,36207],{"class":293},[152,43758,43584],{"class":483},[152,43760,2608],{"class":293},[152,43762,2186],{"class":483},[152,43764,2012],{"class":293},[152,43766,43593],{"class":483},[152,43768,2012],{"class":293},[152,43770,39384],{"class":483},[152,43772,43773,43775,43777,43779,43781,43783,43785,43787,43790,43792,43794,43796,43798,43800,43802],{"class":281,"line":1284},[152,43774,43566],{"class":483},[152,43776,39794],{"class":293},[152,43778,2186],{"class":483},[152,43780,2426],{"class":293},[152,43782,43575],{"class":483},[152,43784,33407],{"class":293},[152,43786,2186],{"class":483},[152,43788,43789],{"class":293},"288",[152,43791,43584],{"class":483},[152,43793,2006],{"class":293},[152,43795,2186],{"class":483},[152,43797,2012],{"class":293},[152,43799,43593],{"class":483},[152,43801,2012],{"class":293},[152,43803,39384],{"class":483},[152,43805,43806,43808,43811,43813,43815,43817,43819,43821,43824,43826,43828,43830,43832,43834,43836],{"class":281,"line":1289},[152,43807,43566],{"class":483},[152,43809,43810],{"class":293},"528",[152,43812,2186],{"class":483},[152,43814,36207],{"class":293},[152,43816,43575],{"class":483},[152,43818,22663],{"class":293},[152,43820,2186],{"class":483},[152,43822,43823],{"class":293},"320",[152,43825,43584],{"class":483},[152,43827,2006],{"class":293},[152,43829,2186],{"class":483},[152,43831,33407],{"class":293},[152,43833,43593],{"class":483},[152,43835,33407],{"class":293},[152,43837,39384],{"class":483},[152,43839,43840,43842,43844,43846,43848,43850,43852,43854,43856,43858,43860,43862,43864],{"class":281,"line":1301},[152,43841,39434],{"class":483},[152,43843,32211],{"class":6858},[152,43845,1864],{"class":476},[152,43847,1888],{"class":293},[152,43849,2186],{"class":483},[152,43851,32266],{"class":6858},[152,43853,1864],{"class":476},[152,43855,1894],{"class":293},[152,43857,2186],{"class":483},[152,43859,32220],{"class":6858},[152,43861,1864],{"class":476},[152,43863,2026],{"class":293},[152,43865,1825],{"class":483},[152,43867,43868],{"class":281,"line":1310},[152,43869,39463],{"class":483},[152,43871,43872,43874,43877,43879],{"class":281,"line":1320},[152,43873,32182],{"class":293},[152,43875,43876],{"class":483},".b5",[152,43878,1864],{"class":476},[152,43880,39346],{"class":483},[152,43882,43883,43885,43888,43890,43892,43894,43896,43898,43900,43902,43904,43906,43908,43910,43912],{"class":281,"line":1327},[152,43884,43566],{"class":483},[152,43886,43887],{"class":293},"832",[152,43889,2186],{"class":483},[152,43891,36207],{"class":293},[152,43893,43575],{"class":483},[152,43895,22663],{"class":293},[152,43897,2186],{"class":483},[152,43899,43823],{"class":293},[152,43901,43584],{"class":483},[152,43903,2006],{"class":293},[152,43905,2186],{"class":483},[152,43907,33407],{"class":293},[152,43909,43593],{"class":483},[152,43911,33407],{"class":293},[152,43913,39384],{"class":483},[152,43915,43916,43918,43920,43922,43924,43926,43928,43930,43932,43934,43936,43938,43940,43942,43944],{"class":281,"line":11528},[152,43917,43566],{"class":483},[152,43919,43887],{"class":293},[152,43921,2186],{"class":483},[152,43923,36277],{"class":293},[152,43925,43575],{"class":483},[152,43927,43496],{"class":293},[152,43929,2186],{"class":483},[152,43931,36277],{"class":293},[152,43933,43584],{"class":483},[152,43935,2415],{"class":293},[152,43937,2186],{"class":483},[152,43939,33407],{"class":293},[152,43941,43593],{"class":483},[152,43943,33407],{"class":293},[152,43945,39384],{"class":483},[152,43947,43948,43951,43953,43955,43957],{"class":281,"line":11536},[152,43949,43950],{"class":483},"            nn.AdaptiveAvgPool2d((",[152,43952,2026],{"class":293},[152,43954,2186],{"class":483},[152,43956,2026],{"class":293},[152,43958,43959],{"class":483},")),\n",[152,43961,43962],{"class":281,"line":11541},[152,43963,40127],{"class":483},[152,43965,43966,43968,43971,43973,43975],{"class":281,"line":18219},[152,43967,40132],{"class":483},[152,43969,43970],{"class":293},"1024",[152,43972,2186],{"class":483},[152,43974,2254],{"class":293},[152,43976,1825],{"class":483},[152,43978,43979],{"class":281,"line":18225},[152,43980,39463],{"class":483},[152,43982,43983],{"class":281,"line":18248},[152,43984,43985],{"class":866},"        # 对模型参数初始化\n",[152,43987,43988,43990,43992,43994,43996],{"class":281,"line":18254},[152,43989,5046],{"class":476},[152,43991,40205],{"class":483},[152,43993,27653],{"class":476},[152,43995,40210],{"class":293},[152,43997,40213],{"class":483},[152,43999,44000,44002,44004],{"class":281,"line":18277},[152,44001,6284],{"class":476},[152,44003,40225],{"class":293},[152,44005,40228],{"class":483},[152,44007,44008,44010,44013,44015,44018,44020,44022,44024,44026],{"class":281,"line":18291},[152,44009,40238],{"class":483},[152,44011,44012],{"class":6858},"mode",[152,44014,1864],{"class":476},[152,44016,44017],{"class":289},"'fan_out'",[152,44019,2186],{"class":483},[152,44021,40241],{"class":6858},[152,44023,1864],{"class":476},[152,44025,40246],{"class":289},[152,44027,1825],{"class":483},[152,44029,44030],{"class":281,"line":18311},[152,44031,44032],{"class":866},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[152,44034,44035],{"class":281,"line":18317},[152,44036,44037],{"class":866},"                # ② mode = 'fan_out'决定使用的fan值：\n",[152,44039,44040],{"class":281,"line":18328},[152,44041,44042],{"class":866},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[152,44044,44045],{"class":281,"line":18351},[152,44046,44047],{"class":866},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[152,44049,44050],{"class":281,"line":18373},[152,44051,44052],{"class":866},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[152,44054,44055],{"class":281,"line":18378},[152,44056,44057],{"class":866},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[152,44059,44060,44062,44064,44066,44068,44070],{"class":281,"line":18384},[152,44061,40258],{"class":476},[152,44063,40261],{"class":483},[152,44065,40264],{"class":476},[152,44067,40267],{"class":476},[152,44069,40270],{"class":293},[152,44071,5382],{"class":483},[152,44073,44074,44076,44078],{"class":281,"line":18398},[152,44075,40282],{"class":483},[152,44077,2000],{"class":293},[152,44079,1825],{"class":483},[152,44081,44082,44085,44087],{"class":281,"line":18411},[152,44083,44084],{"class":476},"                elif",[152,44086,40225],{"class":293},[152,44088,40301],{"class":483},[152,44090,44091,44094,44096,44098,44100],{"class":281,"line":18416},[152,44092,44093],{"class":483},"                    nn.init.normal_(m.weight,",[152,44095,2000],{"class":293},[152,44097,2186],{"class":483},[152,44099,40323],{"class":293},[152,44101,1825],{"class":483},[152,44103,44104,44107,44109,44111,44113,44115],{"class":281,"line":18430},[152,44105,44106],{"class":476},"                    if",[152,44108,40261],{"class":483},[152,44110,40264],{"class":476},[152,44112,40267],{"class":476},[152,44114,40270],{"class":293},[152,44116,5382],{"class":483},[152,44118,44119,44122,44124],{"class":281,"line":18435},[152,44120,44121],{"class":483},"                        nn.init.constant_(m.bias,",[152,44123,2000],{"class":293},[152,44125,1825],{"class":483},[152,44127,44128],{"class":281,"line":18441},[152,44129,36502],{"class":866},[152,44131,44132,44134,44136],{"class":281,"line":18446},[152,44133,32138],{"class":476},[152,44135,32430],{"class":285},[152,44137,32433],{"class":483},[152,44139,44140,44142,44144,44146],{"class":281,"line":18460},[152,44141,32438],{"class":483},[152,44143,1864],{"class":476},[152,44145,32160],{"class":293},[152,44147,44148],{"class":483},".b1(x)\n",[152,44150,44151,44153,44155,44157],{"class":281,"line":18465},[152,44152,32438],{"class":483},[152,44154,1864],{"class":476},[152,44156,32160],{"class":293},[152,44158,44159],{"class":483},".b2(x)\n",[152,44161,44162,44164,44166,44168],{"class":281,"line":18470},[152,44163,32438],{"class":483},[152,44165,1864],{"class":476},[152,44167,32160],{"class":293},[152,44169,44170],{"class":483},".b3(x)\n",[152,44172,44173,44175,44177,44179],{"class":281,"line":18484},[152,44174,32438],{"class":483},[152,44176,1864],{"class":476},[152,44178,32160],{"class":293},[152,44180,44181],{"class":483},".b4(x)\n",[152,44183,44184,44186,44188,44190],{"class":281,"line":18496},[152,44185,32438],{"class":483},[152,44187,1864],{"class":476},[152,44189,32160],{"class":293},[152,44191,44192],{"class":483},".b5(x)\n",[152,44194,44195,44197],{"class":281,"line":18501},[152,44196,16367],{"class":476},[152,44198,32546],{"class":483},[152,44200,44201],{"class":281,"line":18514},[152,44202,307],{"emptyLinePlaceholder":306},[152,44204,44205],{"class":281,"line":18519},[152,44206,44207],{"class":866},"# 模型展示\n",[152,44209,44210,44212,44214,44216,44218],{"class":281,"line":18524},[152,44211,3202],{"class":476},[152,44213,32557],{"class":293},[152,44215,4592],{"class":476},[152,44217,32562],{"class":289},[152,44219,5382],{"class":483},[152,44221,44222,44224,44226,44228,44230,44232,44234,44236,44238],{"class":281,"line":18529},[152,44223,32574],{"class":483},[152,44225,1864],{"class":476},[152,44227,31788],{"class":483},[152,44229,32581],{"class":289},[152,44231,3364],{"class":476},[152,44233,32586],{"class":483},[152,44235,3361],{"class":476},[152,44237,31813],{"class":289},[152,44239,1825],{"class":483},[152,44241,44242,44244,44246],{"class":281,"line":18542},[152,44243,32626],{"class":483},[152,44245,1864],{"class":476},[152,44247,44248],{"class":483},"GoogLeNet(Inception).to(device)\n",[152,44250,44251,44253,44255,44257,44259,44261,44263,44265],{"class":281,"line":18547},[152,44252,32636],{"class":293},[152,44254,32639],{"class":483},[152,44256,2026],{"class":293},[152,44258,2186],{"class":483},[152,44260,32838],{"class":293},[152,44262,2186],{"class":483},[152,44264,32838],{"class":293},[152,44266,32652],{"class":483},[416,44268,44269],{"start":303},[419,44270,40520],{},[270,44272,44274],{"className":31715,"code":44273,"language":31717,"meta":275,"style":275},"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",[277,44275,44276,44282,44288,44298,44304,44314,44324,44334,44344,44354,44358,44369,44379,44383,44387,44391,44399,44411,44421,44437,44447,44479,44493,44503,44513,44517,44527,44541,44551,44561,44571,44577,44581,44585,44589,44593,44597,44605,44625,44629,44633,44637,44641,44645,44661,44665,44669,44677,44681,44685,44693,44697,44701,44705,44713,44717,44721,44725,44729,44737,44741,44749,44753,44761,44765,44773,44777,44785,44789,44793,44801,44805,44809,44813,44825,44849,44863,44867,44871,44875,44883,44887,44895,44899,44907,44911,44919,44923,44931,44935,44943,44947,44959,44963,44971,44975,44983,44987,44991,44995,44999,45007,45011,45027,45031,45039,45043,45047,45051,45055,45059,45063,45067,45083,45087,45099,45103,45115,45119,45131,45135,45143,45147,45155,45159,45163,45167,45173,45177,45185,45189,45205,45209,45217,45221,45237,45249,45253,45265,45269,45273,45281,45285,45289,45297,45301,45309,45313,45321,45325,45329,45371,45413,45417,45421,45437,45441,45457,45461,45465,45473,45477,45481,45493,45531,45535,45539,45547,45551,45565,45575,45581,45587,45593,45599,45603,45607,45613,45617,45621,45629,45633,45651,45655,45659,45663,45679,45683,45687,45691,45695,45699,45719,45739,45743,45747,45751,45759,45767,45771,45787,45807,45827,45831,45835,45843,45851,45855,45859,45863,45875,45879,45889,45897,45914],{"__ignoreMap":275},[152,44277,44278,44280],{"class":281,"line":282},[152,44279,31729],{"class":476},[152,44281,33159],{"class":483},[152,44283,44284,44286],{"class":281,"line":303},[152,44285,31729],{"class":476},[152,44287,33166],{"class":483},[152,44289,44290,44292,44294,44296],{"class":281,"line":310},[152,44291,31729],{"class":476},[152,44293,33177],{"class":483},[152,44295,32720],{"class":476},[152,44297,33182],{"class":483},[152,44299,44300,44302],{"class":281,"line":324},[152,44301,31729],{"class":476},[152,44303,31732],{"class":483},[152,44305,44306,44308,44310,44312],{"class":281,"line":329},[152,44307,32074],{"class":476},[152,44309,32752],{"class":483},[152,44311,31729],{"class":476},[152,44313,33199],{"class":483},[152,44315,44316,44318,44320,44322],{"class":281,"line":343},[152,44317,32074],{"class":476},[152,44319,32705],{"class":483},[152,44321,31729],{"class":476},[152,44323,32710],{"class":483},[152,44325,44326,44328,44330,44332],{"class":281,"line":348},[152,44327,32074],{"class":476},[152,44329,32735],{"class":483},[152,44331,31729],{"class":476},[152,44333,32740],{"class":483},[152,44335,44336,44338,44340,44342],{"class":281,"line":362},[152,44337,31729],{"class":476},[152,44339,32752],{"class":483},[152,44341,32720],{"class":476},[152,44343,32757],{"class":483},[152,44345,44346,44348,44350,44352],{"class":281,"line":367},[152,44347,31729],{"class":476},[152,44349,32769],{"class":483},[152,44351,32720],{"class":476},[152,44353,32774],{"class":483},[152,44355,44356],{"class":281,"line":381},[152,44357,33244],{"class":866},[152,44359,44360,44362,44364,44366],{"class":281,"line":386},[152,44361,32074],{"class":476},[152,44363,33251],{"class":483},[152,44365,31729],{"class":476},[152,44367,44368],{"class":483}," GoogLeNet, Inception\n",[152,44370,44371,44373,44375,44377],{"class":281,"line":932},[152,44372,32074],{"class":476},[152,44374,32077],{"class":483},[152,44376,31729],{"class":476},[152,44378,32082],{"class":483},[152,44380,44381],{"class":281,"line":942},[152,44382,307],{"emptyLinePlaceholder":306},[152,44384,44385],{"class":281,"line":949},[152,44386,307],{"emptyLinePlaceholder":306},[152,44388,44389],{"class":281,"line":954},[152,44390,33279],{"class":866},[152,44392,44393,44395,44397],{"class":281,"line":959},[152,44394,33284],{"class":476},[152,44396,33287],{"class":285},[152,44398,33290],{"class":483},[152,44400,44401,44403,44405,44407,44409],{"class":281,"line":970},[152,44402,33295],{"class":483},[152,44404,1864],{"class":476},[152,44406,32792],{"class":483},[152,44408,32800],{"class":289},[152,44410,32803],{"class":483},[152,44412,44413,44415,44417,44419],{"class":281,"line":979},[152,44414,33308],{"class":6858},[152,44416,1864],{"class":476},[152,44418,32813],{"class":293},[152,44420,32803],{"class":483},[152,44422,44423,44425,44427,44429,44431,44433,44435],{"class":281,"line":989},[152,44424,33319],{"class":6858},[152,44426,1864],{"class":476},[152,44428,32830],{"class":483},[152,44430,32833],{"class":6858},[152,44432,1864],{"class":476},[152,44434,36786],{"class":293},[152,44436,32841],{"class":483},[152,44438,44439,44441,44443,44445],{"class":281,"line":996},[152,44440,33336],{"class":6858},[152,44442,1864],{"class":476},[152,44444,32813],{"class":293},[152,44446,1825],{"class":483},[152,44448,44449,44451,44453,44455,44457,44459,44461,44463,44465,44467,44469,44471,44473,44475,44477],{"class":281,"line":1001},[152,44450,33347],{"class":483},[152,44452,1864],{"class":476},[152,44454,33352],{"class":483},[152,44456,33355],{"class":293},[152,44458,1819],{"class":483},[152,44460,33360],{"class":293},[152,44462,2263],{"class":476},[152,44464,9000],{"class":293},[152,44466,33367],{"class":483},[152,44468,33355],{"class":293},[152,44470,1819],{"class":483},[152,44472,33374],{"class":293},[152,44474,2263],{"class":476},[152,44476,9000],{"class":293},[152,44478,33381],{"class":483},[152,44480,44481,44483,44485,44487,44489,44491],{"class":281,"line":1006},[152,44482,33386],{"class":483},[152,44484,1864],{"class":476},[152,44486,33391],{"class":483},[152,44488,32874],{"class":6858},[152,44490,1864],{"class":476},[152,44492,32879],{"class":483},[152,44494,44495,44497,44499,44501],{"class":281,"line":1018},[152,44496,33402],{"class":6858},[152,44498,1864],{"class":476},[152,44500,2006],{"class":293},[152,44502,32803],{"class":483},[152,44504,44505,44507,44509,44511],{"class":281,"line":1027},[152,44506,33414],{"class":6858},[152,44508,1864],{"class":476},[152,44510,32813],{"class":293},[152,44512,32803],{"class":483},[152,44514,44515],{"class":281,"line":1037},[152,44516,33425],{"class":866},[152,44518,44519,44521,44523,44525],{"class":281,"line":1044},[152,44520,33430],{"class":6858},[152,44522,1864],{"class":476},[152,44524,2203],{"class":293},[152,44526,1825],{"class":483},[152,44528,44529,44531,44533,44535,44537,44539],{"class":281,"line":1049},[152,44530,33441],{"class":483},[152,44532,1864],{"class":476},[152,44534,32871],{"class":483},[152,44536,32874],{"class":6858},[152,44538,1864],{"class":476},[152,44540,33452],{"class":483},[152,44542,44543,44545,44547,44549],{"class":281,"line":1054},[152,44544,33457],{"class":6858},[152,44546,1864],{"class":476},[152,44548,2006],{"class":293},[152,44550,32803],{"class":483},[152,44552,44553,44555,44557,44559],{"class":281,"line":1065},[152,44554,33468],{"class":6858},[152,44556,1864],{"class":476},[152,44558,32813],{"class":293},[152,44560,32803],{"class":483},[152,44562,44563,44565,44567,44569],{"class":281,"line":1074},[152,44564,33479],{"class":6858},[152,44566,1864],{"class":476},[152,44568,2203],{"class":293},[152,44570,1825],{"class":483},[152,44572,44573,44575],{"class":281,"line":1084},[152,44574,5732],{"class":476},[152,44576,33492],{"class":483},[152,44578,44579],{"class":281,"line":1091},[152,44580,307],{"emptyLinePlaceholder":306},[152,44582,44583],{"class":281,"line":1096},[152,44584,33501],{"class":866},[152,44586,44587],{"class":281,"line":1101},[152,44588,33506],{"class":866},[152,44590,44591],{"class":281,"line":1112},[152,44592,307],{"emptyLinePlaceholder":306},[152,44594,44595],{"class":281,"line":1121},[152,44596,33515],{"class":866},[152,44598,44599,44601,44603],{"class":281,"line":1131},[152,44600,33284],{"class":476},[152,44602,33522],{"class":285},[152,44604,33525],{"class":483},[152,44606,44607,44609,44611,44613,44615,44617,44619,44621,44623],{"class":281,"line":1138},[152,44608,32574],{"class":483},[152,44610,1864],{"class":476},[152,44612,31788],{"class":483},[152,44614,32581],{"class":289},[152,44616,3364],{"class":476},[152,44618,32586],{"class":483},[152,44620,3361],{"class":476},[152,44622,33544],{"class":289},[152,44624,1825],{"class":483},[152,44626,44627],{"class":281,"line":1143},[152,44628,307],{"emptyLinePlaceholder":306},[152,44630,44631],{"class":281,"line":1148},[152,44632,307],{"emptyLinePlaceholder":306},[152,44634,44635],{"class":281,"line":1159},[152,44636,33559],{"class":866},[152,44638,44639],{"class":281,"line":1168},[152,44640,33564],{"class":866},[152,44642,44643],{"class":281,"line":1178},[152,44644,33569],{"class":866},[152,44646,44647,44649,44651,44653,44655,44657,44659],{"class":281,"line":1185},[152,44648,33574],{"class":483},[152,44650,1864],{"class":476},[152,44652,33579],{"class":483},[152,44654,33582],{"class":6858},[152,44656,1864],{"class":476},[152,44658,33587],{"class":293},[152,44660,1825],{"class":483},[152,44662,44663],{"class":281,"line":1190},[152,44664,307],{"emptyLinePlaceholder":306},[152,44666,44667],{"class":281,"line":1195},[152,44668,33598],{"class":866},[152,44670,44671,44673,44675],{"class":281,"line":1206},[152,44672,33603],{"class":483},[152,44674,1864],{"class":476},[152,44676,33608],{"class":483},[152,44678,44679],{"class":281,"line":1215},[152,44680,307],{"emptyLinePlaceholder":306},[152,44682,44683],{"class":281,"line":1225},[152,44684,33617],{"class":866},[152,44686,44687,44689,44691],{"class":281,"line":1232},[152,44688,32626],{"class":483},[152,44690,1864],{"class":476},[152,44692,33626],{"class":483},[152,44694,44695],{"class":281,"line":1237},[152,44696,33631],{"class":866},[152,44698,44699],{"class":281,"line":1242},[152,44700,33636],{"class":866},[152,44702,44703],{"class":281,"line":1253},[152,44704,33641],{"class":866},[152,44706,44707,44709,44711],{"class":281,"line":1262},[152,44708,33646],{"class":483},[152,44710,1864],{"class":476},[152,44712,33651],{"class":483},[152,44714,44715],{"class":281,"line":1272},[152,44716,307],{"emptyLinePlaceholder":306},[152,44718,44719],{"class":281,"line":1279},[152,44720,307],{"emptyLinePlaceholder":306},[152,44722,44723],{"class":281,"line":1284},[152,44724,33664],{"class":866},[152,44726,44727],{"class":281,"line":1289},[152,44728,33669],{"class":866},[152,44730,44731,44733,44735],{"class":281,"line":1301},[152,44732,33674],{"class":483},[152,44734,1864],{"class":476},[152,44736,33679],{"class":293},[152,44738,44739],{"class":281,"line":1310},[152,44740,33684],{"class":866},[152,44742,44743,44745,44747],{"class":281,"line":1320},[152,44744,33689],{"class":483},[152,44746,1864],{"class":476},[152,44748,33694],{"class":483},[152,44750,44751],{"class":281,"line":1327},[152,44752,33699],{"class":866},[152,44754,44755,44757,44759],{"class":281,"line":11528},[152,44756,33704],{"class":483},[152,44758,1864],{"class":476},[152,44760,33694],{"class":483},[152,44762,44763],{"class":281,"line":11536},[152,44764,33713],{"class":866},[152,44766,44767,44769,44771],{"class":281,"line":11541},[152,44768,33718],{"class":483},[152,44770,1864],{"class":476},[152,44772,33694],{"class":483},[152,44774,44775],{"class":281,"line":18219},[152,44776,33727],{"class":866},[152,44778,44779,44781,44783],{"class":281,"line":18225},[152,44780,33732],{"class":483},[152,44782,1864],{"class":476},[152,44784,33694],{"class":483},[152,44786,44787],{"class":281,"line":18248},[152,44788,307],{"emptyLinePlaceholder":306},[152,44790,44791],{"class":281,"line":18254},[152,44792,33745],{"class":866},[152,44794,44795,44797,44799],{"class":281,"line":18277},[152,44796,33750],{"class":483},[152,44798,1864],{"class":476},[152,44800,33755],{"class":483},[152,44802,44803],{"class":281,"line":18291},[152,44804,307],{"emptyLinePlaceholder":306},[152,44806,44807],{"class":281,"line":18311},[152,44808,307],{"emptyLinePlaceholder":306},[152,44810,44811],{"class":281,"line":18317},[152,44812,33768],{"class":866},[152,44814,44815,44817,44819,44821,44823],{"class":281,"line":18328},[152,44816,4844],{"class":476},[152,44818,33775],{"class":483},[152,44820,27653],{"class":476},[152,44822,33780],{"class":293},[152,44824,33783],{"class":483},[152,44826,44827,44829,44831,44833,44835,44837,44839,44841,44843,44845,44847],{"class":281,"line":18351},[152,44828,33788],{"class":293},[152,44830,1819],{"class":483},[152,44832,33793],{"class":289},[152,44834,33796],{"class":293},[152,44836,2392],{"class":289},[152,44838,33796],{"class":293},[152,44840,2059],{"class":289},[152,44842,33805],{"class":483},[152,44844,2340],{"class":476},[152,44846,2026],{"class":293},[152,44848,31834],{"class":483},[152,44850,44851,44853,44855,44857,44859,44861],{"class":281,"line":18373},[152,44852,33788],{"class":293},[152,44854,1819],{"class":483},[152,44856,33820],{"class":289},[152,44858,2263],{"class":476},[152,44860,2254],{"class":293},[152,44862,1825],{"class":483},[152,44864,44865],{"class":281,"line":18378},[152,44866,307],{"emptyLinePlaceholder":306},[152,44868,44869],{"class":281,"line":18384},[152,44870,33835],{"class":866},[152,44872,44873],{"class":281,"line":18398},[152,44874,33840],{"class":866},[152,44876,44877,44879,44881],{"class":281,"line":18411},[152,44878,33845],{"class":483},[152,44880,1864],{"class":476},[152,44882,33679],{"class":293},[152,44884,44885],{"class":281,"line":18416},[152,44886,33854],{"class":866},[152,44888,44889,44891,44893],{"class":281,"line":18430},[152,44890,33859],{"class":483},[152,44892,1864],{"class":476},[152,44894,4728],{"class":293},[152,44896,44897],{"class":281,"line":18435},[152,44898,33868],{"class":866},[152,44900,44901,44903,44905],{"class":281,"line":18441},[152,44902,33873],{"class":483},[152,44904,1864],{"class":476},[152,44906,33679],{"class":293},[152,44908,44909],{"class":281,"line":18446},[152,44910,33882],{"class":866},[152,44912,44913,44915,44917],{"class":281,"line":18460},[152,44914,33887],{"class":483},[152,44916,1864],{"class":476},[152,44918,4728],{"class":293},[152,44920,44921],{"class":281,"line":18465},[152,44922,33896],{"class":866},[152,44924,44925,44927,44929],{"class":281,"line":18470},[152,44926,33901],{"class":483},[152,44928,1864],{"class":476},[152,44930,4728],{"class":293},[152,44932,44933],{"class":281,"line":18484},[152,44934,33910],{"class":866},[152,44936,44937,44939,44941],{"class":281,"line":18496},[152,44938,33915],{"class":483},[152,44940,1864],{"class":476},[152,44942,4728],{"class":293},[152,44944,44945],{"class":281,"line":18501},[152,44946,33924],{"class":866},[152,44948,44949,44951,44953,44955,44957],{"class":281,"line":18514},[152,44950,5046],{"class":476},[152,44952,32938],{"class":483},[152,44954,27653],{"class":476},[152,44956,32943],{"class":293},[152,44958,33937],{"class":483},[152,44960,44961],{"class":281,"line":18519},[152,44962,33942],{"class":866},[152,44964,44965,44967,44969],{"class":281,"line":18524},[152,44966,33947],{"class":483},[152,44968,1864],{"class":476},[152,44970,33952],{"class":483},[152,44972,44973],{"class":281,"line":18529},[152,44974,33957],{"class":866},[152,44976,44977,44979,44981],{"class":281,"line":18542},[152,44978,33962],{"class":483},[152,44980,1864],{"class":476},[152,44982,33967],{"class":483},[152,44984,44985],{"class":281,"line":18547},[152,44986,33973],{"class":866},[152,44988,44989],{"class":281,"line":33970},[152,44990,33979],{"class":483},[152,44992,44993],{"class":281,"line":33976},[152,44994,33985],{"class":866},[152,44996,44997],{"class":281,"line":33982},[152,44998,33991],{"class":866},[152,45000,45001,45003,45005],{"class":281,"line":33988},[152,45002,33997],{"class":483},[152,45004,1864],{"class":476},[152,45006,34002],{"class":483},[152,45008,45009],{"class":281,"line":33994},[152,45010,34008],{"class":866},[152,45012,45013,45015,45017,45019,45021,45023,45025],{"class":281,"line":34005},[152,45014,34014],{"class":483},[152,45016,1864],{"class":476},[152,45018,34019],{"class":483},[152,45020,34022],{"class":6858},[152,45022,1864],{"class":476},[152,45024,2026],{"class":293},[152,45026,1825],{"class":483},[152,45028,45029],{"class":281,"line":34011},[152,45030,34034],{"class":866},[152,45032,45033,45035,45037],{"class":281,"line":34031},[152,45034,34040],{"class":483},[152,45036,1864],{"class":476},[152,45038,34045],{"class":483},[152,45040,45041],{"class":281,"line":34037},[152,45042,34051],{"class":866},[152,45044,45045],{"class":281,"line":34048},[152,45046,34057],{"class":483},[152,45048,45049],{"class":281,"line":34054},[152,45050,34063],{"class":866},[152,45052,45053],{"class":281,"line":34060},[152,45054,34069],{"class":483},[152,45056,45057],{"class":281,"line":34066},[152,45058,34075],{"class":866},[152,45060,45061],{"class":281,"line":34072},[152,45062,34081],{"class":483},[152,45064,45065],{"class":281,"line":34078},[152,45066,34087],{"class":866},[152,45068,45069,45071,45073,45075,45077,45079,45081],{"class":281,"line":34084},[152,45070,34093],{"class":483},[152,45072,11109],{"class":476},[152,45074,34098],{"class":483},[152,45076,2263],{"class":476},[152,45078,34103],{"class":483},[152,45080,2000],{"class":293},[152,45082,1825],{"class":483},[152,45084,45085],{"class":281,"line":34090},[152,45086,34113],{"class":866},[152,45088,45089,45091,45093,45095,45097],{"class":281,"line":34110},[152,45090,34119],{"class":483},[152,45092,11109],{"class":476},[152,45094,34124],{"class":483},[152,45096,4592],{"class":476},[152,45098,34129],{"class":483},[152,45100,45101],{"class":281,"line":34116},[152,45102,34135],{"class":866},[152,45104,45105,45107,45109,45111,45113],{"class":281,"line":34132},[152,45106,34141],{"class":483},[152,45108,11109],{"class":476},[152,45110,34103],{"class":483},[152,45112,2000],{"class":293},[152,45114,1825],{"class":483},[152,45116,45117],{"class":281,"line":34138},[152,45118,34155],{"class":866},[152,45120,45121,45123,45125,45127,45129],{"class":281,"line":34152},[152,45122,5046],{"class":476},[152,45124,34163],{"class":483},[152,45126,27653],{"class":476},[152,45128,32943],{"class":293},[152,45130,34170],{"class":483},[152,45132,45133],{"class":281,"line":34158},[152,45134,34176],{"class":866},[152,45136,45137,45139,45141],{"class":281,"line":34173},[152,45138,33947],{"class":483},[152,45140,1864],{"class":476},[152,45142,33952],{"class":483},[152,45144,45145],{"class":281,"line":34179},[152,45146,34191],{"class":866},[152,45148,45149,45151,45153],{"class":281,"line":34188},[152,45150,33962],{"class":483},[152,45152,1864],{"class":476},[152,45154,33967],{"class":483},[152,45156,45157],{"class":281,"line":34194},[152,45158,34206],{"class":866},[152,45160,45161],{"class":281,"line":34203},[152,45162,34212],{"class":483},[152,45164,45165],{"class":281,"line":34209},[152,45166,37693],{"class":866},[152,45168,45169,45171],{"class":281,"line":34215},[152,45170,34218],{"class":476},[152,45172,34221],{"class":483},[152,45174,45175],{"class":281,"line":34224},[152,45176,34227],{"class":866},[152,45178,45179,45181,45183],{"class":281,"line":34230},[152,45180,37708],{"class":483},[152,45182,1864],{"class":476},[152,45184,34002],{"class":483},[152,45186,45187],{"class":281,"line":34241},[152,45188,34244],{"class":866},[152,45190,45191,45193,45195,45197,45199,45201,45203],{"class":281,"line":34247},[152,45192,37721],{"class":483},[152,45194,1864],{"class":476},[152,45196,34019],{"class":483},[152,45198,34022],{"class":6858},[152,45200,1864],{"class":476},[152,45202,2026],{"class":293},[152,45204,1825],{"class":483},[152,45206,45207],{"class":281,"line":34266},[152,45208,34269],{"class":866},[152,45210,45211,45213,45215],{"class":281,"line":34272},[152,45212,37742],{"class":483},[152,45214,1864],{"class":476},[152,45216,34045],{"class":483},[152,45218,45219],{"class":281,"line":34283},[152,45220,34286],{"class":866},[152,45222,45223,45225,45227,45229,45231,45233,45235],{"class":281,"line":34289},[152,45224,37755],{"class":483},[152,45226,11109],{"class":476},[152,45228,37760],{"class":483},[152,45230,2263],{"class":476},[152,45232,34103],{"class":483},[152,45234,2000],{"class":293},[152,45236,1825],{"class":483},[152,45238,45239,45241,45243,45245,45247],{"class":281,"line":34309},[152,45240,37773],{"class":483},[152,45242,11109],{"class":476},[152,45244,34124],{"class":483},[152,45246,4592],{"class":476},[152,45248,34129],{"class":483},[152,45250,45251],{"class":281,"line":34325},[152,45252,37786],{"class":866},[152,45254,45255,45257,45259,45261,45263],{"class":281,"line":34331},[152,45256,37791],{"class":483},[152,45258,11109],{"class":476},[152,45260,34103],{"class":483},[152,45262,2000],{"class":293},[152,45264,1825],{"class":483},[152,45266,45267],{"class":281,"line":34345},[152,45268,34348],{"class":866},[152,45270,45271],{"class":281,"line":34351},[152,45272,34354],{"class":866},[152,45274,45275,45277,45279],{"class":281,"line":34357},[152,45276,34360],{"class":483},[152,45278,2392],{"class":476},[152,45280,34365],{"class":483},[152,45282,45283],{"class":281,"line":34368},[152,45284,34371],{"class":866},[152,45286,45287],{"class":281,"line":34374},[152,45288,34377],{"class":866},[152,45290,45291,45293,45295],{"class":281,"line":34380},[152,45292,34383],{"class":483},[152,45294,2392],{"class":476},[152,45296,34365],{"class":483},[152,45298,45299],{"class":281,"line":34390},[152,45300,34393],{"class":866},[152,45302,45303,45305,45307],{"class":281,"line":34396},[152,45304,34399],{"class":483},[152,45306,2392],{"class":476},[152,45308,34404],{"class":483},[152,45310,45311],{"class":281,"line":34407},[152,45312,34410],{"class":866},[152,45314,45315,45317,45319],{"class":281,"line":34413},[152,45316,34416],{"class":483},[152,45318,2392],{"class":476},[152,45320,34404],{"class":483},[152,45322,45323],{"class":281,"line":34423},[152,45324,307],{"emptyLinePlaceholder":306},[152,45326,45327],{"class":281,"line":34428},[152,45328,34431],{"class":866},[152,45330,45331,45333,45335,45337,45339,45341,45343,45345,45347,45349,45351,45353,45355,45357,45359,45361,45363,45365,45367,45369],{"class":281,"line":34434},[152,45332,33788],{"class":293},[152,45334,1819],{"class":483},[152,45336,5235],{"class":289},[152,45338,33796],{"class":293},[152,45340,34445],{"class":289},[152,45342,2703],{"class":293},[152,45344,34450],{"class":476},[152,45346,2752],{"class":293},[152,45348,34455],{"class":289},[152,45350,2703],{"class":293},[152,45352,34450],{"class":476},[152,45354,2752],{"class":293},[152,45356,5235],{"class":289},[152,45358,34466],{"class":483},[152,45360,2340],{"class":476},[152,45362,2026],{"class":293},[152,45364,34473],{"class":483},[152,45366,2340],{"class":476},[152,45368,2026],{"class":293},[152,45370,34480],{"class":483},[152,45372,45373,45375,45377,45379,45381,45383,45385,45387,45389,45391,45393,45395,45397,45399,45401,45403,45405,45407,45409,45411],{"class":281,"line":34483},[152,45374,33788],{"class":293},[152,45376,1819],{"class":483},[152,45378,5235],{"class":289},[152,45380,33796],{"class":293},[152,45382,34494],{"class":289},[152,45384,2703],{"class":293},[152,45386,34450],{"class":476},[152,45388,2752],{"class":293},[152,45390,34503],{"class":289},[152,45392,2703],{"class":293},[152,45394,34450],{"class":476},[152,45396,2752],{"class":293},[152,45398,5235],{"class":289},[152,45400,34514],{"class":483},[152,45402,2340],{"class":476},[152,45404,2026],{"class":293},[152,45406,34521],{"class":483},[152,45408,2340],{"class":476},[152,45410,2026],{"class":293},[152,45412,34480],{"class":483},[152,45414,45415],{"class":281,"line":34530},[152,45416,307],{"emptyLinePlaceholder":306},[152,45418,45419],{"class":281,"line":34535},[152,45420,34538],{"class":866},[152,45422,45423,45425,45427,45429,45431,45433,45435],{"class":281,"line":34541},[152,45424,4147],{"class":476},[152,45426,34546],{"class":483},[152,45428,2340],{"class":476},[152,45430,2026],{"class":293},[152,45432,2746],{"class":483},[152,45434,487],{"class":476},[152,45436,34557],{"class":483},[152,45438,45439],{"class":281,"line":34560},[152,45440,34563],{"class":866},[152,45442,45443,45445,45447,45449,45451,45453,45455],{"class":281,"line":34566},[152,45444,34569],{"class":483},[152,45446,1858],{"class":293},[152,45448,1864],{"class":476},[152,45450,34576],{"class":483},[152,45452,2340],{"class":476},[152,45454,2026],{"class":293},[152,45456,34583],{"class":483},[152,45458,45459],{"class":281,"line":34586},[152,45460,34589],{"class":866},[152,45462,45463],{"class":281,"line":34592},[152,45464,34595],{"class":866},[152,45466,45467,45469,45471],{"class":281,"line":34598},[152,45468,34601],{"class":483},[152,45470,1864],{"class":476},[152,45472,33651],{"class":483},[152,45474,45475],{"class":281,"line":34608},[152,45476,307],{"emptyLinePlaceholder":306},[152,45478,45479],{"class":281,"line":34613},[152,45480,34616],{"class":866},[152,45482,45483,45485,45487,45489,45491],{"class":281,"line":34619},[152,45484,34622],{"class":483},[152,45486,1864],{"class":476},[152,45488,34627],{"class":483},[152,45490,2340],{"class":476},[152,45492,34632],{"class":483},[152,45494,45495,45497,45499,45501,45503,45505,45507,45509,45511,45513,45515,45517,45519,45521,45523,45525,45527,45529],{"class":281,"line":34635},[152,45496,33788],{"class":293},[152,45498,1819],{"class":483},[152,45500,34642],{"class":289},[152,45502,2703],{"class":293},[152,45504,34647],{"class":476},[152,45506,2752],{"class":293},[152,45508,2352],{"class":289},[152,45510,2703],{"class":293},[152,45512,34647],{"class":476},[152,45514,2752],{"class":293},[152,45516,34660],{"class":289},[152,45518,34663],{"class":483},[152,45520,34666],{"class":476},[152,45522,2714],{"class":293},[152,45524,34671],{"class":483},[152,45526,2136],{"class":476},[152,45528,2714],{"class":293},[152,45530,31834],{"class":483},[152,45532,45533],{"class":281,"line":34680},[152,45534,38070],{"class":866},[152,45536,45537],{"class":281,"line":34686},[152,45538,38075],{"class":866},[152,45540,45541,45543,45545],{"class":281,"line":34692},[152,45542,38080],{"class":483},[152,45544,34704],{"class":289},[152,45546,1825],{"class":483},[152,45548,45549],{"class":281,"line":34698},[152,45550,34724],{"class":866},[152,45552,45553,45555,45557,45559,45561,45563],{"class":281,"line":34709},[152,45554,34730],{"class":483},[152,45556,1864],{"class":476},[152,45558,34735],{"class":483},[152,45560,34738],{"class":6858},[152,45562,1864],{"class":476},[152,45564,3217],{"class":483},[152,45566,45567,45569,45571,45573],{"class":281,"line":34715},[152,45568,34748],{"class":289},[152,45570,841],{"class":483},[152,45572,34753],{"class":293},[152,45574,34756],{"class":483},[152,45576,45577,45579],{"class":281,"line":34721},[152,45578,34762],{"class":289},[152,45580,34765],{"class":483},[152,45582,45583,45585],{"class":281,"line":34727},[152,45584,34771],{"class":289},[152,45586,34774],{"class":483},[152,45588,45589,45591],{"class":281,"line":34745},[152,45590,34780],{"class":289},[152,45592,34783],{"class":483},[152,45594,45595,45597],{"class":281,"line":34759},[152,45596,34789],{"class":289},[152,45598,34792],{"class":483},[152,45600,45601],{"class":281,"line":34768},[152,45602,34798],{"class":483},[152,45604,45605],{"class":281,"line":34777},[152,45606,34804],{"class":866},[152,45608,45609,45611],{"class":281,"line":34786},[152,45610,5732],{"class":476},[152,45612,34812],{"class":483},[152,45614,45615],{"class":281,"line":34795},[152,45616,307],{"emptyLinePlaceholder":306},[152,45618,45619],{"class":281,"line":34801},[152,45620,34823],{"class":866},[152,45622,45623,45625,45627],{"class":281,"line":34807},[152,45624,33284],{"class":476},[152,45626,34831],{"class":285},[152,45628,34834],{"class":483},[152,45630,45631],{"class":281,"line":34815},[152,45632,34840],{"class":866},[152,45634,45635,45637,45639,45641,45643,45645,45647,45649],{"class":281,"line":34820},[152,45636,34846],{"class":483},[152,45638,33030],{"class":6858},[152,45640,1864],{"class":476},[152,45642,1819],{"class":483},[152,45644,2306],{"class":293},[152,45646,2186],{"class":483},[152,45648,2101],{"class":293},[152,45650,31834],{"class":483},[152,45652,45653],{"class":281,"line":34826},[152,45654,34866],{"class":866},[152,45656,45657],{"class":281,"line":34837},[152,45658,34872],{"class":866},[152,45660,45661],{"class":281,"line":34843},[152,45662,34878],{"class":866},[152,45664,45665,45667,45669,45671,45673,45675,45677],{"class":281,"line":34863},[152,45666,33064],{"class":483},[152,45668,2026],{"class":293},[152,45670,2186],{"class":483},[152,45672,1894],{"class":293},[152,45674,2186],{"class":483},[152,45676,2026],{"class":293},[152,45678,1825],{"class":483},[152,45680,45681],{"class":281,"line":34869},[152,45682,34901],{"class":866},[152,45684,45685],{"class":281,"line":34875},[152,45686,34907],{"class":866},[152,45688,45689],{"class":281,"line":34881},[152,45690,34913],{"class":866},[152,45692,45693],{"class":281,"line":34898},[152,45694,34919],{"class":866},[152,45696,45697],{"class":281,"line":34904},[152,45698,34925],{"class":866},[152,45700,45701,45703,45705,45707,45709,45711,45713,45715,45717],{"class":281,"line":34910},[152,45702,34931],{"class":483},[152,45704,34934],{"class":289},[152,45706,34937],{"class":483},[152,45708,34940],{"class":289},[152,45710,2186],{"class":483},[152,45712,34945],{"class":6858},[152,45714,1864],{"class":476},[152,45716,34950],{"class":289},[152,45718,1825],{"class":483},[152,45720,45721,45723,45725,45727,45729,45731,45733,45735,45737],{"class":281,"line":34916},[152,45722,34931],{"class":483},[152,45724,34934],{"class":289},[152,45726,34962],{"class":483},[152,45728,34965],{"class":289},[152,45730,2186],{"class":483},[152,45732,34945],{"class":6858},[152,45734,1864],{"class":476},[152,45736,34974],{"class":289},[152,45738,1825],{"class":483},[152,45740,45741],{"class":281,"line":34922},[152,45742,34982],{"class":866},[152,45744,45745],{"class":281,"line":34928},[152,45746,34988],{"class":483},[152,45748,45749],{"class":281,"line":34955},[152,45750,34994],{"class":866},[152,45752,45753,45755,45757],{"class":281,"line":34979},[152,45754,35000],{"class":483},[152,45756,35003],{"class":289},[152,45758,1825],{"class":483},[152,45760,45761,45763,45765],{"class":281,"line":34985},[152,45762,35011],{"class":483},[152,45764,35014],{"class":289},[152,45766,1825],{"class":483},[152,45768,45769],{"class":281,"line":34991},[152,45770,35022],{"class":866},[152,45772,45773,45775,45777,45779,45781,45783,45785],{"class":281,"line":34997},[152,45774,33064],{"class":483},[152,45776,2026],{"class":293},[152,45778,2186],{"class":483},[152,45780,1894],{"class":293},[152,45782,2186],{"class":483},[152,45784,1894],{"class":293},[152,45786,1825],{"class":483},[152,45788,45789,45791,45793,45795,45797,45799,45801,45803,45805],{"class":281,"line":35008},[152,45790,34931],{"class":483},[152,45792,34934],{"class":289},[152,45794,35049],{"class":483},[152,45796,34940],{"class":289},[152,45798,2186],{"class":483},[152,45800,34945],{"class":6858},[152,45802,1864],{"class":476},[152,45804,35060],{"class":289},[152,45806,1825],{"class":483},[152,45808,45809,45811,45813,45815,45817,45819,45821,45823,45825],{"class":281,"line":35019},[152,45810,34931],{"class":483},[152,45812,34934],{"class":289},[152,45814,35072],{"class":483},[152,45816,34965],{"class":289},[152,45818,2186],{"class":483},[152,45820,34945],{"class":6858},[152,45822,1864],{"class":476},[152,45824,35083],{"class":289},[152,45826,1825],{"class":483},[152,45828,45829],{"class":281,"line":35025},[152,45830,35091],{"class":866},[152,45832,45833],{"class":281,"line":35042},[152,45834,34988],{"class":483},[152,45836,45837,45839,45841],{"class":281,"line":35065},[152,45838,35000],{"class":483},[152,45840,34934],{"class":289},[152,45842,1825],{"class":483},[152,45844,45845,45847,45849],{"class":281,"line":35088},[152,45846,35011],{"class":483},[152,45848,35113],{"class":289},[152,45850,1825],{"class":483},[152,45852,45853],{"class":281,"line":35094},[152,45854,35121],{"class":483},[152,45856,45857],{"class":281,"line":35099},[152,45858,307],{"emptyLinePlaceholder":306},[152,45860,45861],{"class":281,"line":35108},[152,45862,35132],{"class":866},[152,45864,45865,45867,45869,45871,45873],{"class":281,"line":35118},[152,45866,3202],{"class":476},[152,45868,32557],{"class":293},[152,45870,4592],{"class":476},[152,45872,32562],{"class":289},[152,45874,5382],{"class":483},[152,45876,45877],{"class":281,"line":35124},[152,45878,35151],{"class":866},[152,45880,45881,45884,45886],{"class":281,"line":35129},[152,45882,45883],{"class":483},"    GoogLeNet",[152,45885,1864],{"class":476},[152,45887,45888],{"class":483},"GoogLeNet(Inception)\n",[152,45890,45891,45893,45895],{"class":281,"line":35135},[152,45892,35168],{"class":483},[152,45894,1864],{"class":476},[152,45896,35173],{"class":483},[152,45898,45899,45901,45903,45906,45908,45910,45912],{"class":281,"line":35148},[152,45900,34730],{"class":483},[152,45902,1864],{"class":476},[152,45904,45905],{"class":483},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[152,45907,35186],{"class":6858},[152,45909,1864],{"class":476},[152,45911,2757],{"class":293},[152,45913,1825],{"class":483},[152,45915,45916],{"class":281,"line":35154},[152,45917,35198],{"class":483},[416,45919,45920],{"start":310},[419,45921,41911],{},[270,45923,45925],{"className":31715,"code":45924,"language":31717,"meta":275,"style":275},"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",[277,45926,45927,45933,45943,45953,45957,45967,45978,45982,45986,45990,45998,46014,46024,46040,46050,46064,46068,46078,46088,46098,46104,46108,46112,46120,46124,46140,46148,46152,46156,46164,46172,46176,46180,46184,46188,46194,46198,46208,46216,46224,46228,46232,46236,46244,46248,46264,46268,46272,46276,46288,46292,46304,46308,46312,46324,46328,46338,46342,46346,46358,46362,46370,46374,46378,46386,46390,46398,46402,46406,46410,46414,46418,46434,46442,46446,46450,46498,46504,46508,46518,46526,46534,46538,46542,46546,46550,46558,46562,46578,46582,46590,46598],{"__ignoreMap":275},[152,45928,45929,45931],{"class":281,"line":282},[152,45930,31729],{"class":476},[152,45932,31732],{"class":483},[152,45934,45935,45937,45939,45941],{"class":281,"line":303},[152,45936,31729],{"class":476},[152,45938,32752],{"class":483},[152,45940,32720],{"class":476},[152,45942,32757],{"class":483},[152,45944,45945,45947,45949,45951],{"class":281,"line":310},[152,45946,32074],{"class":476},[152,45948,32735],{"class":483},[152,45950,31729],{"class":476},[152,45952,32740],{"class":483},[152,45954,45955],{"class":281,"line":324},[152,45956,35259],{"class":866},[152,45958,45959,45961,45963,45965],{"class":281,"line":329},[152,45960,32074],{"class":476},[152,45962,32705],{"class":483},[152,45964,31729],{"class":476},[152,45966,32710],{"class":483},[152,45968,45969,45971,45973,45975],{"class":281,"line":343},[152,45970,32074],{"class":476},[152,45972,33251],{"class":483},[152,45974,31729],{"class":476},[152,45976,45977],{"class":483}," GoogLeNet,Inception\n",[152,45979,45980],{"class":281,"line":348},[152,45981,307],{"emptyLinePlaceholder":306},[152,45983,45984],{"class":281,"line":362},[152,45985,307],{"emptyLinePlaceholder":306},[152,45987,45988],{"class":281,"line":367},[152,45989,35288],{"class":866},[152,45991,45992,45994,45996],{"class":281,"line":381},[152,45993,33284],{"class":476},[152,45995,35295],{"class":285},[152,45997,33290],{"class":483},[152,45999,46000,46002,46004,46006,46008,46010,46012],{"class":281,"line":386},[152,46001,35302],{"class":483},[152,46003,1864],{"class":476},[152,46005,32792],{"class":483},[152,46007,32795],{"class":6858},[152,46009,1864],{"class":476},[152,46011,32800],{"class":289},[152,46013,32803],{"class":483},[152,46015,46016,46018,46020,46022],{"class":281,"line":932},[152,46017,35319],{"class":6858},[152,46019,1864],{"class":476},[152,46021,35324],{"class":293},[152,46023,32803],{"class":483},[152,46025,46026,46028,46030,46032,46034,46036,46038],{"class":281,"line":942},[152,46027,35331],{"class":6858},[152,46029,1864],{"class":476},[152,46031,32830],{"class":483},[152,46033,32833],{"class":6858},[152,46035,1864],{"class":476},[152,46037,36786],{"class":293},[152,46039,32841],{"class":483},[152,46041,46042,46044,46046,46048],{"class":281,"line":949},[152,46043,35348],{"class":6858},[152,46045,1864],{"class":476},[152,46047,32813],{"class":293},[152,46049,1825],{"class":483},[152,46051,46052,46054,46056,46058,46060,46062],{"class":281,"line":954},[152,46053,35359],{"class":483},[152,46055,1864],{"class":476},[152,46057,32871],{"class":483},[152,46059,32874],{"class":6858},[152,46061,1864],{"class":476},[152,46063,35370],{"class":483},[152,46065,46066],{"class":281,"line":959},[152,46067,35375],{"class":866},[152,46069,46070,46072,46074,46076],{"class":281,"line":970},[152,46071,35380],{"class":6858},[152,46073,1864],{"class":476},[152,46075,2026],{"class":293},[152,46077,32803],{"class":483},[152,46079,46080,46082,46084,46086],{"class":281,"line":979},[152,46081,35391],{"class":6858},[152,46083,1864],{"class":476},[152,46085,32813],{"class":293},[152,46087,32803],{"class":483},[152,46089,46090,46092,46094,46096],{"class":281,"line":989},[152,46091,35402],{"class":6858},[152,46093,1864],{"class":476},[152,46095,2000],{"class":293},[152,46097,1825],{"class":483},[152,46099,46100,46102],{"class":281,"line":996},[152,46101,5732],{"class":476},[152,46103,35415],{"class":483},[152,46105,46106],{"class":281,"line":1001},[152,46107,307],{"emptyLinePlaceholder":306},[152,46109,46110],{"class":281,"line":1006},[152,46111,35424],{"class":866},[152,46113,46114,46116,46118],{"class":281,"line":1018},[152,46115,33284],{"class":476},[152,46117,35431],{"class":285},[152,46119,35434],{"class":483},[152,46121,46122],{"class":281,"line":1027},[152,46123,35439],{"class":866},[152,46125,46126,46128,46130,46132,46134,46136,46138],{"class":281,"line":1037},[152,46127,32574],{"class":483},[152,46129,1864],{"class":476},[152,46131,32581],{"class":289},[152,46133,3364],{"class":476},[152,46135,32586],{"class":483},[152,46137,3361],{"class":476},[152,46139,35456],{"class":289},[152,46141,46142,46144,46146],{"class":281,"line":1044},[152,46143,32626],{"class":483},[152,46145,1864],{"class":476},[152,46147,33626],{"class":483},[152,46149,46150],{"class":281,"line":1049},[152,46151,307],{"emptyLinePlaceholder":306},[152,46153,46154],{"class":281,"line":1054},[152,46155,35473],{"class":866},[152,46157,46158,46160,46162],{"class":281,"line":1065},[152,46159,35478],{"class":483},[152,46161,1864],{"class":476},[152,46163,33679],{"class":293},[152,46165,46166,46168,46170],{"class":281,"line":1074},[152,46167,35487],{"class":483},[152,46169,1864],{"class":476},[152,46171,4728],{"class":293},[152,46173,46174],{"class":281,"line":1084},[152,46175,307],{"emptyLinePlaceholder":306},[152,46177,46178],{"class":281,"line":1091},[152,46179,35500],{"class":866},[152,46181,46182],{"class":281,"line":1096},[152,46183,35505],{"class":866},[152,46185,46186],{"class":281,"line":1101},[152,46187,35510],{"class":866},[152,46189,46190,46192],{"class":281,"line":1112},[152,46191,35515],{"class":476},[152,46193,34221],{"class":483},[152,46195,46196],{"class":281,"line":1121},[152,46197,35522],{"class":866},[152,46199,46200,46202,46204,46206],{"class":281,"line":1131},[152,46201,5046],{"class":476},[152,46203,35529],{"class":483},[152,46205,27653],{"class":476},[152,46207,35534],{"class":483},[152,46209,46210,46212,46214],{"class":281,"line":1138},[152,46211,35539],{"class":483},[152,46213,1864],{"class":476},[152,46215,35544],{"class":483},[152,46217,46218,46220,46222],{"class":281,"line":1143},[152,46219,35549],{"class":483},[152,46221,1864],{"class":476},[152,46223,35554],{"class":483},[152,46225,46226],{"class":281,"line":1148},[152,46227,35559],{"class":866},[152,46229,46230],{"class":281,"line":1159},[152,46231,34212],{"class":483},[152,46233,46234],{"class":281,"line":1168},[152,46235,35568],{"class":866},[152,46237,46238,46240,46242],{"class":281,"line":1178},[152,46239,33997],{"class":483},[152,46241,1864],{"class":476},[152,46243,35577],{"class":483},[152,46245,46246],{"class":281,"line":1185},[152,46247,35582],{"class":866},[152,46249,46250,46252,46254,46256,46258,46260,46262],{"class":281,"line":1190},[152,46251,34014],{"class":483},[152,46253,1864],{"class":476},[152,46255,34019],{"class":483},[152,46257,34022],{"class":6858},[152,46259,1864],{"class":476},[152,46261,2026],{"class":293},[152,46263,1825],{"class":483},[152,46265,46266],{"class":281,"line":1195},[152,46267,35603],{"class":866},[152,46269,46270],{"class":281,"line":1206},[152,46271,35608],{"class":866},[152,46273,46274],{"class":281,"line":1215},[152,46275,35613],{"class":866},[152,46277,46278,46280,46282,46284,46286],{"class":281,"line":1225},[152,46279,35618],{"class":483},[152,46281,11109],{"class":476},[152,46283,34124],{"class":483},[152,46285,4592],{"class":476},[152,46287,35627],{"class":483},[152,46289,46290],{"class":281,"line":1232},[152,46291,35632],{"class":866},[152,46293,46294,46296,46298,46300,46302],{"class":281,"line":1237},[152,46295,35637],{"class":483},[152,46297,11109],{"class":476},[152,46299,35642],{"class":483},[152,46301,2000],{"class":293},[152,46303,1825],{"class":483},[152,46305,46306],{"class":281,"line":1242},[152,46307,307],{"emptyLinePlaceholder":306},[152,46309,46310],{"class":281,"line":1253},[152,46311,35655],{"class":866},[152,46313,46314,46316,46318,46320,46322],{"class":281,"line":1262},[152,46315,35660],{"class":483},[152,46317,1864],{"class":476},[152,46319,35665],{"class":483},[152,46321,2392],{"class":476},[152,46323,35670],{"class":483},[152,46325,46326],{"class":281,"line":1272},[152,46327,35675],{"class":866},[152,46329,46330,46332,46334,46336],{"class":281,"line":1279},[152,46331,33788],{"class":293},[152,46333,1819],{"class":483},[152,46335,35684],{"class":289},[152,46337,35687],{"class":483},[152,46339,46340],{"class":281,"line":1284},[152,46341,307],{"emptyLinePlaceholder":306},[152,46343,46344],{"class":281,"line":1289},[152,46345,35696],{"class":866},[152,46347,46348,46350,46352,46354,46356],{"class":281,"line":1301},[152,46349,3202],{"class":476},[152,46351,32557],{"class":293},[152,46353,4592],{"class":476},[152,46355,32562],{"class":289},[152,46357,5382],{"class":483},[152,46359,46360],{"class":281,"line":1310},[152,46361,35713],{"class":866},[152,46363,46364,46366,46368],{"class":281,"line":1320},[152,46365,32626],{"class":483},[152,46367,1864],{"class":476},[152,46369,45888],{"class":483},[152,46371,46372],{"class":281,"line":1327},[152,46373,35726],{"class":866},[152,46375,46376],{"class":281,"line":11528},[152,46377,35731],{"class":866},[152,46379,46380,46382,46384],{"class":281,"line":11536},[152,46381,35736],{"class":483},[152,46383,35739],{"class":289},[152,46385,31834],{"class":483},[152,46387,46388],{"class":281,"line":11541},[152,46389,35746],{"class":866},[152,46391,46392,46394,46396],{"class":281,"line":18219},[152,46393,35359],{"class":483},[152,46395,1864],{"class":476},[152,46397,35755],{"class":483},[152,46399,46400],{"class":281,"line":18225},[152,46401,35760],{"class":866},[152,46403,46404],{"class":281,"line":18248},[152,46405,35765],{"class":483},[152,46407,46408],{"class":281,"line":18254},[152,46409,307],{"emptyLinePlaceholder":306},[152,46411,46412],{"class":281,"line":18277},[152,46413,35774],{"class":866},[152,46415,46416],{"class":281,"line":18291},[152,46417,35779],{"class":866},[152,46419,46420,46422,46424,46426,46428,46430,46432],{"class":281,"line":18311},[152,46421,32574],{"class":483},[152,46423,1864],{"class":476},[152,46425,32581],{"class":289},[152,46427,3364],{"class":476},[152,46429,32586],{"class":483},[152,46431,3361],{"class":476},[152,46433,35456],{"class":289},[152,46435,46436,46438,46440],{"class":281,"line":18317},[152,46437,32626],{"class":483},[152,46439,1864],{"class":476},[152,46441,33626],{"class":483},[152,46443,46444],{"class":281,"line":18328},[152,46445,35808],{"class":866},[152,46447,46448],{"class":281,"line":18351},[152,46449,35813],{"class":866},[152,46451,46452,46454,46456,46458,46460,46462,46464,46466,46468,46470,46472,46474,46476,46478,46480,46482,46484,46486,46488,46490,46492,46494,46496],{"class":281,"line":18373},[152,46453,35818],{"class":483},[152,46455,1864],{"class":476},[152,46457,2697],{"class":483},[152,46459,35825],{"class":289},[152,46461,2186],{"class":483},[152,46463,35830],{"class":289},[152,46465,2186],{"class":483},[152,46467,35835],{"class":289},[152,46469,2186],{"class":483},[152,46471,35840],{"class":289},[152,46473,2186],{"class":483},[152,46475,35845],{"class":289},[152,46477,2186],{"class":483},[152,46479,35850],{"class":289},[152,46481,2186],{"class":483},[152,46483,35855],{"class":289},[152,46485,2186],{"class":483},[152,46487,35860],{"class":289},[152,46489,2186],{"class":483},[152,46491,35865],{"class":289},[152,46493,2186],{"class":483},[152,46495,35870],{"class":289},[152,46497,34583],{"class":483},[152,46499,46500,46502],{"class":281,"line":18378},[152,46501,35515],{"class":476},[152,46503,34221],{"class":483},[152,46505,46506],{"class":281,"line":18384},[152,46507,35883],{"class":866},[152,46509,46510,46512,46514,46516],{"class":281,"line":18398},[152,46511,5046],{"class":476},[152,46513,35890],{"class":483},[152,46515,27653],{"class":476},[152,46517,35534],{"class":483},[152,46519,46520,46522,46524],{"class":281,"line":18411},[152,46521,33947],{"class":483},[152,46523,1864],{"class":476},[152,46525,33952],{"class":483},[152,46527,46528,46530,46532],{"class":281,"line":18416},[152,46529,33962],{"class":483},[152,46531,1864],{"class":476},[152,46533,33967],{"class":483},[152,46535,46536],{"class":281,"line":18430},[152,46537,307],{"emptyLinePlaceholder":306},[152,46539,46540],{"class":281,"line":18435},[152,46541,35919],{"class":866},[152,46543,46544],{"class":281,"line":18441},[152,46545,34212],{"class":483},[152,46547,46548],{"class":281,"line":18446},[152,46549,35928],{"class":866},[152,46551,46552,46554,46556],{"class":281,"line":18460},[152,46553,33997],{"class":483},[152,46555,1864],{"class":476},[152,46557,34002],{"class":483},[152,46559,46560],{"class":281,"line":18465},[152,46561,35941],{"class":866},[152,46563,46564,46566,46568,46570,46572,46574,46576],{"class":281,"line":18470},[152,46565,34014],{"class":483},[152,46567,1864],{"class":476},[152,46569,34019],{"class":483},[152,46571,34022],{"class":6858},[152,46573,1864],{"class":476},[152,46575,2026],{"class":293},[152,46577,1825],{"class":483},[152,46579,46580],{"class":281,"line":18484},[152,46581,35962],{"class":866},[152,46583,46584,46586,46588],{"class":281,"line":18496},[152,46585,35967],{"class":483},[152,46587,1864],{"class":476},[152,46589,35972],{"class":483},[152,46591,46592,46594,46596],{"class":281,"line":18501},[152,46593,35977],{"class":483},[152,46595,1864],{"class":476},[152,46597,35982],{"class":483},[152,46599,46600,46602,46604,46606,46608,46610,46612,46614],{"class":281,"line":18514},[152,46601,35987],{"class":293},[152,46603,1819],{"class":483},[152,46605,35992],{"class":289},[152,46607,35995],{"class":483},[152,46609,35998],{"class":289},[152,46611,2186],{"class":483},[152,46613,36003],{"class":289},[152,46615,36006],{"class":483},[14,46617,46619],{"id":46618},"_24训练自己的数据集","2.4.训练自己的数据集",[19,46621,46622],{},"猫狗分类任务",[19,46624,46625],{},"划分数据集和验证集",[270,46627,46629],{"className":31715,"code":46628,"language":31717,"meta":275,"style":275},"# 创建脚本，用于划分数据集和验证集\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",[277,46630,46631,46636,46643,46648,46659,46666,46670,46680,46694,46703,46707,46712,46722,46742,46746,46751,46761,46772,46785,46789,46794,46803,46813,46824,46828,46833,46843,46847,46852,46857,46862,46867,46872,46876,46886,46913,46926,46938,46965,46970,46975,46989,46994,47006,47021,47036,47044,47048,47053,47059,47071,47084,47089,47094,47099,47149,47155,47159],{"__ignoreMap":275},[152,46632,46633],{"class":281,"line":282},[152,46634,46635],{"class":866},"# 创建脚本，用于划分数据集和验证集\n",[152,46637,46638,46640],{"class":281,"line":303},[152,46639,31729],{"class":476},[152,46641,46642],{"class":483}," os\n",[152,46644,46645],{"class":281,"line":310},[152,46646,46647],{"class":866},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[152,46649,46650,46652,46655,46657],{"class":281,"line":324},[152,46651,32074],{"class":476},[152,46653,46654],{"class":483}," shutil ",[152,46656,31729],{"class":476},[152,46658,33159],{"class":483},[152,46660,46661,46663],{"class":281,"line":329},[152,46662,31729],{"class":476},[152,46664,46665],{"class":483}," random\n",[152,46667,46668],{"class":281,"line":343},[152,46669,307],{"emptyLinePlaceholder":306},[152,46671,46672,46674,46677],{"class":281,"line":348},[152,46673,33284],{"class":476},[152,46675,46676],{"class":285}," mkfile",[152,46678,46679],{"class":483},"(file):\n",[152,46681,46682,46684,46686,46689,46692],{"class":281,"line":362},[152,46683,4744],{"class":476},[152,46685,40267],{"class":476},[152,46687,46688],{"class":483}," os.path.exists(",[152,46690,46691],{"class":6858},"file",[152,46693,32123],{"class":483},[152,46695,46696,46699,46701],{"class":281,"line":367},[152,46697,46698],{"class":483},"        os.makedirs(",[152,46700,46691],{"class":6858},[152,46702,1825],{"class":483},[152,46704,46705],{"class":281,"line":381},[152,46706,307],{"emptyLinePlaceholder":306},[152,46708,46709],{"class":281,"line":386},[152,46710,46711],{"class":866},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[152,46713,46714,46717,46719],{"class":281,"line":932},[152,46715,46716],{"class":483},"file_path",[152,46718,1864],{"class":476},[152,46720,46721],{"class":289},"'data_cat_dog'\n",[152,46723,46724,46727,46729,46732,46734,46737,46739],{"class":281,"line":942},[152,46725,46726],{"class":483},"flower_class",[152,46728,1864],{"class":476},[152,46730,46731],{"class":483},"[cla ",[152,46733,4668],{"class":476},[152,46735,46736],{"class":483}," cla ",[152,46738,27653],{"class":476},[152,46740,46741],{"class":483}," os.listdir(file_path)]\n",[152,46743,46744],{"class":281,"line":949},[152,46745,307],{"emptyLinePlaceholder":306},[152,46747,46748],{"class":281,"line":954},[152,46749,46750],{"class":866},"# 创建训练集train文件夹\n",[152,46752,46753,46756,46759],{"class":281,"line":959},[152,46754,46755],{"class":483},"mkfile(",[152,46757,46758],{"class":289},"'data\u002Ftrain'",[152,46760,1825],{"class":483},[152,46762,46763,46765,46767,46769],{"class":281,"line":970},[152,46764,4668],{"class":476},[152,46766,46736],{"class":483},[152,46768,27653],{"class":476},[152,46770,46771],{"class":483}," flower_class:\n",[152,46773,46774,46777,46780,46782],{"class":281,"line":979},[152,46775,46776],{"class":483},"    mkfile(",[152,46778,46779],{"class":289},"'data\u002Ftrain\u002F'",[152,46781,2289],{"class":476},[152,46783,46784],{"class":483},"cla)\n",[152,46786,46787],{"class":281,"line":989},[152,46788,307],{"emptyLinePlaceholder":306},[152,46790,46791],{"class":281,"line":996},[152,46792,46793],{"class":866},"# 创建验证集val文件夹\n",[152,46795,46796,46798,46801],{"class":281,"line":1001},[152,46797,46755],{"class":483},[152,46799,46800],{"class":289},"'data\u002Ftest'",[152,46802,1825],{"class":483},[152,46804,46805,46807,46809,46811],{"class":281,"line":1006},[152,46806,4668],{"class":476},[152,46808,46736],{"class":483},[152,46810,27653],{"class":476},[152,46812,46771],{"class":483},[152,46814,46815,46817,46820,46822],{"class":281,"line":1018},[152,46816,46776],{"class":483},[152,46818,46819],{"class":289},"'data\u002Ftest\u002F'",[152,46821,2289],{"class":476},[152,46823,46784],{"class":483},[152,46825,46826],{"class":281,"line":1027},[152,46827,307],{"emptyLinePlaceholder":306},[152,46829,46830],{"class":281,"line":1037},[152,46831,46832],{"class":866},"# 划分比例，训练集：测试集=9：1\n",[152,46834,46835,46838,46840],{"class":281,"line":1044},[152,46836,46837],{"class":483},"split_rate",[152,46839,1864],{"class":476},[152,46841,46842],{"class":293},"0.1\n",[152,46844,46845],{"class":281,"line":1049},[152,46846,307],{"emptyLinePlaceholder":306},[152,46848,46849],{"class":281,"line":1054},[152,46850,46851],{"class":866},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[152,46853,46854],{"class":281,"line":1065},[152,46855,46856],{"class":866},"# cla_path：当前类别的原始图片路径\n",[152,46858,46859],{"class":281,"line":1074},[152,46860,46861],{"class":866},"# images：当前类别下所有图片的文件名列表\n",[152,46863,46864],{"class":281,"line":1084},[152,46865,46866],{"class":866},"# num：该类别图片总数\n",[152,46868,46869],{"class":281,"line":1091},[152,46870,46871],{"class":866},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[152,46873,46874],{"class":281,"line":1096},[152,46875,307],{"emptyLinePlaceholder":306},[152,46877,46878,46880,46882,46884],{"class":281,"line":1101},[152,46879,4668],{"class":476},[152,46881,46736],{"class":483},[152,46883,27653],{"class":476},[152,46885,46771],{"class":483},[152,46887,46888,46891,46893,46896,46898,46901,46904,46906,46908,46910],{"class":281,"line":1112},[152,46889,46890],{"class":483},"    cla_path ",[152,46892,1864],{"class":476},[152,46894,46895],{"class":483}," file_path ",[152,46897,2289],{"class":476},[152,46899,46900],{"class":289}," '\u002F'",[152,46902,46903],{"class":476}," +",[152,46905,46736],{"class":483},[152,46907,2289],{"class":476},[152,46909,46900],{"class":289},[152,46911,46912],{"class":866},"  # 某一类别的子目录\n",[152,46914,46915,46918,46920,46923],{"class":281,"line":1121},[152,46916,46917],{"class":483},"    images ",[152,46919,1864],{"class":476},[152,46921,46922],{"class":483}," os.listdir(cla_path)  ",[152,46924,46925],{"class":866},"# iamges 列表存储了该目录下所有图像的名称\n",[152,46927,46928,46931,46933,46935],{"class":281,"line":1131},[152,46929,46930],{"class":483},"    num ",[152,46932,1864],{"class":476},[152,46934,8973],{"class":293},[152,46936,46937],{"class":483},"(images)\n",[152,46939,46940,46943,46945,46948,46950,46952,46954,46957,46959,46962],{"class":281,"line":1138},[152,46941,46942],{"class":483},"    eval_index ",[152,46944,1864],{"class":476},[152,46946,46947],{"class":483}," random.sample(images, ",[152,46949,2301],{"class":6858},[152,46951,1864],{"class":476},[152,46953,1822],{"class":293},[152,46955,46956],{"class":483},"(num ",[152,46958,2263],{"class":476},[152,46960,46961],{"class":483}," split_rate))  ",[152,46963,46964],{"class":866},"# 从images列表中随机抽取 k 个图像名称\n",[152,46966,46967],{"class":281,"line":1143},[152,46968,46969],{"class":866},"    # 遍历该类别下的所有图片\n",[152,46971,46972],{"class":281,"line":1148},[152,46973,46974],{"class":866},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[152,46976,46977,46979,46982,46984,46986],{"class":281,"line":1159},[152,46978,4844],{"class":476},[152,46980,46981],{"class":483}," index, image ",[152,46983,27653],{"class":476},[152,46985,32943],{"class":293},[152,46987,46988],{"class":483},"(images):\n",[152,46990,46991],{"class":281,"line":1168},[152,46992,46993],{"class":866},"        # eval_index 中保存验证集val的图像名称\n",[152,46995,46996,46998,47001,47003],{"class":281,"line":1178},[152,46997,4147],{"class":476},[152,46999,47000],{"class":483}," image ",[152,47002,27653],{"class":476},[152,47004,47005],{"class":483}," eval_index:\n",[152,47007,47008,47011,47013,47016,47018],{"class":281,"line":1185},[152,47009,47010],{"class":483},"            image_path ",[152,47012,1864],{"class":476},[152,47014,47015],{"class":483}," cla_path ",[152,47017,2289],{"class":476},[152,47019,47020],{"class":483}," image\n",[152,47022,47023,47026,47028,47031,47033],{"class":281,"line":1190},[152,47024,47025],{"class":483},"            new_path ",[152,47027,1864],{"class":476},[152,47029,47030],{"class":289}," 'data\u002Ftest\u002F'",[152,47032,46903],{"class":476},[152,47034,47035],{"class":483}," cla\n",[152,47037,47038,47041],{"class":281,"line":1195},[152,47039,47040],{"class":483},"            copy(image_path, new_path)  ",[152,47042,47043],{"class":866},"# 将选中的图像复制到新路径\n",[152,47045,47046],{"class":281,"line":1206},[152,47047,307],{"emptyLinePlaceholder":306},[152,47049,47050],{"class":281,"line":1215},[152,47051,47052],{"class":866},"        # 其余的图像保存在训练集train中\n",[152,47054,47055,47057],{"class":281,"line":1225},[152,47056,4184],{"class":476},[152,47058,5382],{"class":483},[152,47060,47061,47063,47065,47067,47069],{"class":281,"line":1232},[152,47062,47010],{"class":483},[152,47064,1864],{"class":476},[152,47066,47015],{"class":483},[152,47068,2289],{"class":476},[152,47070,47020],{"class":483},[152,47072,47073,47075,47077,47080,47082],{"class":281,"line":1237},[152,47074,47025],{"class":483},[152,47076,1864],{"class":476},[152,47078,47079],{"class":289}," 'data\u002Ftrain\u002F'",[152,47081,46903],{"class":476},[152,47083,47035],{"class":483},[152,47085,47086],{"class":281,"line":1242},[152,47087,47088],{"class":483},"            copy(image_path, new_path)\n",[152,47090,47091],{"class":281,"line":1253},[152,47092,47093],{"class":866},"            # 打印进度条信息\n",[152,47095,47096],{"class":281,"line":1262},[152,47097,47098],{"class":866},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[152,47100,47101,47103,47105,47107,47110,47112,47114,47117,47119,47121,47123,47126,47129,47131,47133,47136,47139,47141,47143,47146],{"class":281,"line":1272},[152,47102,33788],{"class":293},[152,47104,1819],{"class":483},[152,47106,2059],{"class":289},[152,47108,47109],{"class":293},"\\r",[152,47111,2697],{"class":289},[152,47113,33796],{"class":293},[152,47115,47116],{"class":289},"] processing [",[152,47118,33796],{"class":293},[152,47120,2392],{"class":289},[152,47122,33796],{"class":293},[152,47124,47125],{"class":289},"]\"",[152,47127,47128],{"class":483},".format(cla, index ",[152,47130,2289],{"class":476},[152,47132,26729],{"class":293},[152,47134,47135],{"class":483},", num), ",[152,47137,47138],{"class":6858},"end",[152,47140,1864],{"class":476},[152,47142,9294],{"class":289},[152,47144,47145],{"class":483},")  ",[152,47147,47148],{"class":866},"# processing bar\n",[152,47150,47151,47153],{"class":281,"line":1279},[152,47152,32636],{"class":293},[152,47154,3627],{"class":483},[152,47156,47157],{"class":281,"line":1284},[152,47158,307],{"emptyLinePlaceholder":306},[152,47160,47161,47163,47165,47168],{"class":281,"line":1289},[152,47162,31752],{"class":293},[152,47164,1819],{"class":483},[152,47166,47167],{"class":289},"\"processing done!\"",[152,47169,1825],{"class":483},[19,47171,47172],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[262,47174,47176],{"id":47175},"_242模型代码","2.4.2.模型代码",[19,47178,47179],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[270,47181,47183],{"className":31715,"code":47182,"language":31717,"meta":275,"style":275},"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",[277,47184,47185,47191,47201,47211,47215,47231,47239,47253,47263,47267,47297,47301,47335,47381,47385,47419,47465,47469,47473,47507,47537,47541,47549,47563,47585,47607,47625,47629,47643,47647,47651,47667,47671,47679,47693,47703,47747,47751,47779,47783,47793,47821,47825,47861,47865,47893,47897,47907,47939,47971,47999,48003,48013,48045,48077,48109,48141,48173,48201,48205,48215,48247,48279,48291,48295,48307,48311,48315,48327,48335,48355,48359,48363,48367,48371,48375,48379,48393,48401,48409,48421,48435,48443,48447,48455,48465,48475,48485,48495,48505,48511,48515,48519,48531,48551,48559],{"__ignoreMap":275},[152,47186,47187,47189],{"class":281,"line":282},[152,47188,31729],{"class":476},[152,47190,31732],{"class":483},[152,47192,47193,47195,47197,47199],{"class":281,"line":303},[152,47194,32074],{"class":476},[152,47196,32077],{"class":483},[152,47198,31729],{"class":476},[152,47200,32082],{"class":483},[152,47202,47203,47205,47207,47209],{"class":281,"line":310},[152,47204,32074],{"class":476},[152,47206,32094],{"class":483},[152,47208,31729],{"class":476},[152,47210,32099],{"class":483},[152,47212,47213],{"class":281,"line":324},[152,47214,307],{"emptyLinePlaceholder":306},[152,47216,47217,47219,47221,47223,47225,47227,47229],{"class":281,"line":329},[152,47218,16309],{"class":476},[152,47220,42830],{"class":285},[152,47222,1819],{"class":483},[152,47224,32115],{"class":285},[152,47226,2366],{"class":483},[152,47228,32120],{"class":285},[152,47230,32123],{"class":483},[152,47232,47233,47235,47237],{"class":281,"line":343},[152,47234,32138],{"class":476},[152,47236,32141],{"class":293},[152,47238,42849],{"class":483},[152,47240,47241,47243,47245,47247,47249,47251],{"class":281,"line":348},[152,47242,32154],{"class":293},[152,47244,42856],{"class":483},[152,47246,32160],{"class":293},[152,47248,32163],{"class":483},[152,47250,32166],{"class":293},[152,47252,3627],{"class":483},[152,47254,47255,47257,47259,47261],{"class":281,"line":362},[152,47256,32182],{"class":293},[152,47258,36108],{"class":483},[152,47260,1864],{"class":476},[152,47262,36113],{"class":483},[152,47264,47265],{"class":281,"line":367},[152,47266,42879],{"class":866},[152,47268,47269,47271,47273,47275,47277,47279,47281,47283,47285,47287,47289,47291,47293,47295],{"class":281,"line":381},[152,47270,32182],{"class":293},[152,47272,42886],{"class":483},[152,47274,1864],{"class":476},[152,47276,32190],{"class":483},[152,47278,32193],{"class":6858},[152,47280,1864],{"class":476},[152,47282,42897],{"class":483},[152,47284,32202],{"class":6858},[152,47286,1864],{"class":476},[152,47288,42904],{"class":483},[152,47290,32211],{"class":6858},[152,47292,1864],{"class":476},[152,47294,2026],{"class":293},[152,47296,1825],{"class":483},[152,47298,47299],{"class":281,"line":386},[152,47300,42917],{"class":866},[152,47302,47303,47305,47307,47309,47311,47313,47315,47317,47319,47321,47323,47325,47327,47329,47331,47333],{"class":281,"line":932},[152,47304,32182],{"class":293},[152,47306,42924],{"class":483},[152,47308,1864],{"class":476},[152,47310,32190],{"class":483},[152,47312,32193],{"class":6858},[152,47314,1864],{"class":476},[152,47316,42897],{"class":483},[152,47318,32202],{"class":6858},[152,47320,1864],{"class":476},[152,47322,42941],{"class":483},[152,47324,2000],{"class":293},[152,47326,42946],{"class":483},[152,47328,32211],{"class":6858},[152,47330,1864],{"class":476},[152,47332,2026],{"class":293},[152,47334,1825],{"class":483},[152,47336,47337,47339,47341,47343,47345,47347,47349,47351,47353,47355,47357,47359,47361,47363,47365,47367,47369,47371,47373,47375,47377,47379],{"class":281,"line":942},[152,47338,32182],{"class":293},[152,47340,42961],{"class":483},[152,47342,1864],{"class":476},[152,47344,32190],{"class":483},[152,47346,32193],{"class":6858},[152,47348,1864],{"class":476},[152,47350,42941],{"class":483},[152,47352,2000],{"class":293},[152,47354,42946],{"class":483},[152,47356,32202],{"class":6858},[152,47358,1864],{"class":476},[152,47360,42941],{"class":483},[152,47362,2026],{"class":293},[152,47364,42946],{"class":483},[152,47366,32211],{"class":6858},[152,47368,1864],{"class":476},[152,47370,1888],{"class":293},[152,47372,2186],{"class":483},[152,47374,32220],{"class":6858},[152,47376,1864],{"class":476},[152,47378,2026],{"class":293},[152,47380,1825],{"class":483},[152,47382,47383],{"class":281,"line":949},[152,47384,43006],{"class":866},[152,47386,47387,47389,47391,47393,47395,47397,47399,47401,47403,47405,47407,47409,47411,47413,47415,47417],{"class":281,"line":954},[152,47388,32182],{"class":293},[152,47390,43013],{"class":483},[152,47392,1864],{"class":476},[152,47394,32190],{"class":483},[152,47396,32193],{"class":6858},[152,47398,1864],{"class":476},[152,47400,42897],{"class":483},[152,47402,32202],{"class":6858},[152,47404,1864],{"class":476},[152,47406,43030],{"class":483},[152,47408,2000],{"class":293},[152,47410,42946],{"class":483},[152,47412,32211],{"class":6858},[152,47414,1864],{"class":476},[152,47416,2026],{"class":293},[152,47418,1825],{"class":483},[152,47420,47421,47423,47425,47427,47429,47431,47433,47435,47437,47439,47441,47443,47445,47447,47449,47451,47453,47455,47457,47459,47461,47463],{"class":281,"line":959},[152,47422,32182],{"class":293},[152,47424,43049],{"class":483},[152,47426,1864],{"class":476},[152,47428,32190],{"class":483},[152,47430,32193],{"class":6858},[152,47432,1864],{"class":476},[152,47434,43030],{"class":483},[152,47436,2000],{"class":293},[152,47438,42946],{"class":483},[152,47440,32202],{"class":6858},[152,47442,1864],{"class":476},[152,47444,43030],{"class":483},[152,47446,2026],{"class":293},[152,47448,42946],{"class":483},[152,47450,32211],{"class":6858},[152,47452,1864],{"class":476},[152,47454,2127],{"class":293},[152,47456,2186],{"class":483},[152,47458,32220],{"class":6858},[152,47460,1864],{"class":476},[152,47462,1894],{"class":293},[152,47464,1825],{"class":483},[152,47466,47467],{"class":281,"line":970},[152,47468,43094],{"class":866},[152,47470,47471],{"class":281,"line":979},[152,47472,43099],{"class":866},[152,47474,47475,47477,47479,47481,47483,47485,47487,47489,47491,47493,47495,47497,47499,47501,47503,47505],{"class":281,"line":989},[152,47476,32182],{"class":293},[152,47478,43106],{"class":483},[152,47480,1864],{"class":476},[152,47482,36166],{"class":483},[152,47484,32211],{"class":6858},[152,47486,1864],{"class":476},[152,47488,1888],{"class":293},[152,47490,2186],{"class":483},[152,47492,32266],{"class":6858},[152,47494,1864],{"class":476},[152,47496,2026],{"class":293},[152,47498,2186],{"class":483},[152,47500,32220],{"class":6858},[152,47502,1864],{"class":476},[152,47504,2026],{"class":293},[152,47506,1825],{"class":483},[152,47508,47509,47511,47513,47515,47517,47519,47521,47523,47525,47527,47529,47531,47533,47535],{"class":281,"line":996},[152,47510,32182],{"class":293},[152,47512,43141],{"class":483},[152,47514,1864],{"class":476},[152,47516,32190],{"class":483},[152,47518,32193],{"class":6858},[152,47520,1864],{"class":476},[152,47522,42897],{"class":483},[152,47524,32202],{"class":6858},[152,47526,1864],{"class":476},[152,47528,43158],{"class":483},[152,47530,32211],{"class":6858},[152,47532,1864],{"class":476},[152,47534,2026],{"class":293},[152,47536,1825],{"class":483},[152,47538,47539],{"class":281,"line":1001},[152,47540,307],{"emptyLinePlaceholder":306},[152,47542,47543,47545,47547],{"class":281,"line":1006},[152,47544,32138],{"class":476},[152,47546,32430],{"class":285},[152,47548,32433],{"class":483},[152,47550,47551,47553,47555,47557,47559,47561],{"class":281,"line":1018},[152,47552,43183],{"class":483},[152,47554,1864],{"class":476},[152,47556,32160],{"class":293},[152,47558,36521],{"class":483},[152,47560,32160],{"class":293},[152,47562,43194],{"class":483},[152,47564,47565,47567,47569,47571,47573,47575,47577,47579,47581,47583],{"class":281,"line":1027},[152,47566,8727],{"class":483},[152,47568,1864],{"class":476},[152,47570,32160],{"class":293},[152,47572,36521],{"class":483},[152,47574,32160],{"class":293},[152,47576,43209],{"class":483},[152,47578,32160],{"class":293},[152,47580,36521],{"class":483},[152,47582,32160],{"class":293},[152,47584,43218],{"class":483},[152,47586,47587,47589,47591,47593,47595,47597,47599,47601,47603,47605],{"class":281,"line":1037},[152,47588,43223],{"class":483},[152,47590,1864],{"class":476},[152,47592,32160],{"class":293},[152,47594,36521],{"class":483},[152,47596,32160],{"class":293},[152,47598,43234],{"class":483},[152,47600,32160],{"class":293},[152,47602,36521],{"class":483},[152,47604,32160],{"class":293},[152,47606,43243],{"class":483},[152,47608,47609,47611,47613,47615,47617,47619,47621,47623],{"class":281,"line":1044},[152,47610,43248],{"class":483},[152,47612,1864],{"class":476},[152,47614,32160],{"class":293},[152,47616,36521],{"class":483},[152,47618,32160],{"class":293},[152,47620,43259],{"class":483},[152,47622,32160],{"class":293},[152,47624,43264],{"class":483},[152,47626,47627],{"class":281,"line":1049},[152,47628,43269],{"class":866},[152,47630,47631,47633,47635,47637,47639,47641],{"class":281,"line":1054},[152,47632,16367],{"class":476},[152,47634,43276],{"class":483},[152,47636,34022],{"class":6858},[152,47638,1864],{"class":476},[152,47640,2026],{"class":293},[152,47642,1825],{"class":483},[152,47644,47645],{"class":281,"line":1065},[152,47646,307],{"emptyLinePlaceholder":306},[152,47648,47649],{"class":281,"line":1074},[152,47650,43297],{"class":866},[152,47652,47653,47655,47657,47659,47661,47663,47665],{"class":281,"line":1084},[152,47654,16309],{"class":476},[152,47656,43304],{"class":285},[152,47658,1819],{"class":483},[152,47660,32115],{"class":285},[152,47662,2366],{"class":483},[152,47664,32120],{"class":285},[152,47666,32123],{"class":483},[152,47668,47669],{"class":281,"line":1091},[152,47670,43319],{"class":866},[152,47672,47673,47675,47677],{"class":281,"line":1096},[152,47674,32138],{"class":476},[152,47676,32141],{"class":293},[152,47678,43328],{"class":483},[152,47680,47681,47683,47685,47687,47689,47691],{"class":281,"line":1101},[152,47682,32154],{"class":293},[152,47684,43335],{"class":483},[152,47686,32160],{"class":293},[152,47688,32163],{"class":483},[152,47690,32166],{"class":293},[152,47692,3627],{"class":483},[152,47694,47695,47697,47699,47701],{"class":281,"line":1112},[152,47696,32182],{"class":293},[152,47698,43350],{"class":483},[152,47700,1864],{"class":476},[152,47702,39346],{"class":483},[152,47704,47705,47707,47709,47711,47713,47715,47717,47719,47721,47723,47725,47727,47729,47731,47733,47735,47737,47739,47741,47743,47745],{"class":281,"line":1121},[152,47706,39351],{"class":483},[152,47708,32193],{"class":6858},[152,47710,1864],{"class":476},[152,47712,1888],{"class":293},[152,47714,2186],{"class":483},[152,47716,32202],{"class":6858},[152,47718,1864],{"class":476},[152,47720,2012],{"class":293},[152,47722,2186],{"class":483},[152,47724,32211],{"class":6858},[152,47726,1864],{"class":476},[152,47728,2177],{"class":293},[152,47730,2186],{"class":483},[152,47732,32266],{"class":6858},[152,47734,1864],{"class":476},[152,47736,1894],{"class":293},[152,47738,2186],{"class":483},[152,47740,32220],{"class":6858},[152,47742,1864],{"class":476},[152,47744,1888],{"class":293},[152,47746,39384],{"class":483},[152,47748,47749],{"class":281,"line":1131},[152,47750,39389],{"class":483},[152,47752,47753,47755,47757,47759,47761,47763,47765,47767,47769,47771,47773,47775,47777],{"class":281,"line":1138},[152,47754,39434],{"class":483},[152,47756,32211],{"class":6858},[152,47758,1864],{"class":476},[152,47760,1888],{"class":293},[152,47762,2186],{"class":483},[152,47764,32266],{"class":6858},[152,47766,1864],{"class":476},[152,47768,1894],{"class":293},[152,47770,2186],{"class":483},[152,47772,32220],{"class":6858},[152,47774,1864],{"class":476},[152,47776,2026],{"class":293},[152,47778,1825],{"class":483},[152,47780,47781],{"class":281,"line":1143},[152,47782,39463],{"class":483},[152,47784,47785,47787,47789,47791],{"class":281,"line":1148},[152,47786,32182],{"class":293},[152,47788,43441],{"class":483},[152,47790,1864],{"class":476},[152,47792,39346],{"class":483},[152,47794,47795,47797,47799,47801,47803,47805,47807,47809,47811,47813,47815,47817,47819],{"class":281,"line":1159},[152,47796,39351],{"class":483},[152,47798,32193],{"class":6858},[152,47800,1864],{"class":476},[152,47802,2012],{"class":293},[152,47804,2186],{"class":483},[152,47806,32202],{"class":6858},[152,47808,1864],{"class":476},[152,47810,2012],{"class":293},[152,47812,2186],{"class":483},[152,47814,32211],{"class":6858},[152,47816,1864],{"class":476},[152,47818,2026],{"class":293},[152,47820,39384],{"class":483},[152,47822,47823],{"class":281,"line":1168},[152,47824,39389],{"class":483},[152,47826,47827,47829,47831,47833,47835,47837,47839,47841,47843,47845,47847,47849,47851,47853,47855,47857,47859],{"class":281,"line":1178},[152,47828,39351],{"class":483},[152,47830,32193],{"class":6858},[152,47832,1864],{"class":476},[152,47834,2012],{"class":293},[152,47836,2186],{"class":483},[152,47838,32202],{"class":6858},[152,47840,1864],{"class":476},[152,47842,43496],{"class":293},[152,47844,2186],{"class":483},[152,47846,32211],{"class":6858},[152,47848,1864],{"class":476},[152,47850,1888],{"class":293},[152,47852,2186],{"class":483},[152,47854,32220],{"class":6858},[152,47856,1864],{"class":476},[152,47858,2026],{"class":293},[152,47860,39384],{"class":483},[152,47862,47863],{"class":281,"line":1185},[152,47864,39389],{"class":483},[152,47866,47867,47869,47871,47873,47875,47877,47879,47881,47883,47885,47887,47889,47891],{"class":281,"line":1190},[152,47868,39434],{"class":483},[152,47870,32211],{"class":6858},[152,47872,1864],{"class":476},[152,47874,1888],{"class":293},[152,47876,2186],{"class":483},[152,47878,32266],{"class":6858},[152,47880,1864],{"class":476},[152,47882,1894],{"class":293},[152,47884,2186],{"class":483},[152,47886,32220],{"class":6858},[152,47888,1864],{"class":476},[152,47890,2026],{"class":293},[152,47892,1825],{"class":483},[152,47894,47895],{"class":281,"line":1195},[152,47896,39463],{"class":483},[152,47898,47899,47901,47903,47905],{"class":281,"line":1206},[152,47900,32182],{"class":293},[152,47902,43557],{"class":483},[152,47904,1864],{"class":476},[152,47906,39346],{"class":483},[152,47908,47909,47911,47913,47915,47917,47919,47921,47923,47925,47927,47929,47931,47933,47935,47937],{"class":281,"line":1215},[152,47910,43566],{"class":483},[152,47912,43496],{"class":293},[152,47914,2186],{"class":483},[152,47916,2012],{"class":293},[152,47918,43575],{"class":483},[152,47920,2018],{"class":293},[152,47922,2186],{"class":483},[152,47924,33407],{"class":293},[152,47926,43584],{"class":483},[152,47928,2409],{"class":293},[152,47930,2186],{"class":483},[152,47932,2006],{"class":293},[152,47934,43593],{"class":483},[152,47936,2006],{"class":293},[152,47938,39384],{"class":483},[152,47940,47941,47943,47945,47947,47949,47951,47953,47955,47957,47959,47961,47963,47965,47967,47969],{"class":281,"line":1225},[152,47942,43566],{"class":483},[152,47944,36207],{"class":293},[152,47946,2186],{"class":483},[152,47948,33407],{"class":293},[152,47950,43575],{"class":483},[152,47952,33407],{"class":293},[152,47954,2186],{"class":483},[152,47956,43496],{"class":293},[152,47958,43584],{"class":483},[152,47960,2006],{"class":293},[152,47962,2186],{"class":483},[152,47964,2018],{"class":293},[152,47966,43593],{"class":483},[152,47968,2012],{"class":293},[152,47970,39384],{"class":483},[152,47972,47973,47975,47977,47979,47981,47983,47985,47987,47989,47991,47993,47995,47997],{"class":281,"line":1232},[152,47974,39434],{"class":483},[152,47976,32211],{"class":6858},[152,47978,1864],{"class":476},[152,47980,1888],{"class":293},[152,47982,2186],{"class":483},[152,47984,32266],{"class":6858},[152,47986,1864],{"class":476},[152,47988,1894],{"class":293},[152,47990,2186],{"class":483},[152,47992,32220],{"class":6858},[152,47994,1864],{"class":476},[152,47996,2026],{"class":293},[152,47998,1825],{"class":483},[152,48000,48001],{"class":281,"line":1237},[152,48002,39463],{"class":483},[152,48004,48005,48007,48009,48011],{"class":281,"line":1242},[152,48006,32182],{"class":293},[152,48008,43668],{"class":483},[152,48010,1864],{"class":476},[152,48012,39346],{"class":483},[152,48014,48015,48017,48019,48021,48023,48025,48027,48029,48031,48033,48035,48037,48039,48041,48043],{"class":281,"line":1253},[152,48016,43566],{"class":483},[152,48018,43679],{"class":293},[152,48020,2186],{"class":483},[152,48022,43496],{"class":293},[152,48024,43575],{"class":483},[152,48026,2018],{"class":293},[152,48028,2186],{"class":483},[152,48030,43692],{"class":293},[152,48032,43584],{"class":483},[152,48034,2409],{"class":293},[152,48036,2186],{"class":483},[152,48038,2415],{"class":293},[152,48040,43593],{"class":483},[152,48042,2012],{"class":293},[152,48044,39384],{"class":483},[152,48046,48047,48049,48051,48053,48055,48057,48059,48061,48063,48065,48067,48069,48071,48073,48075],{"class":281,"line":1262},[152,48048,43566],{"class":483},[152,48050,39794],{"class":293},[152,48052,2186],{"class":483},[152,48054,22663],{"class":293},[152,48056,43575],{"class":483},[152,48058,2426],{"class":293},[152,48060,2186],{"class":483},[152,48062,32838],{"class":293},[152,48064,43584],{"class":483},[152,48066,2608],{"class":293},[152,48068,2186],{"class":483},[152,48070,2012],{"class":293},[152,48072,43593],{"class":483},[152,48074,2012],{"class":293},[152,48076,39384],{"class":483},[152,48078,48079,48081,48083,48085,48087,48089,48091,48093,48095,48097,48099,48101,48103,48105,48107],{"class":281,"line":1272},[152,48080,43566],{"class":483},[152,48082,39794],{"class":293},[152,48084,2186],{"class":483},[152,48086,33407],{"class":293},[152,48088,43575],{"class":483},[152,48090,33407],{"class":293},[152,48092,2186],{"class":483},[152,48094,36207],{"class":293},[152,48096,43584],{"class":483},[152,48098,2608],{"class":293},[152,48100,2186],{"class":483},[152,48102,2012],{"class":293},[152,48104,43593],{"class":483},[152,48106,2012],{"class":293},[152,48108,39384],{"class":483},[152,48110,48111,48113,48115,48117,48119,48121,48123,48125,48127,48129,48131,48133,48135,48137,48139],{"class":281,"line":1279},[152,48112,43566],{"class":483},[152,48114,39794],{"class":293},[152,48116,2186],{"class":483},[152,48118,2426],{"class":293},[152,48120,43575],{"class":483},[152,48122,33407],{"class":293},[152,48124,2186],{"class":483},[152,48126,43789],{"class":293},[152,48128,43584],{"class":483},[152,48130,2006],{"class":293},[152,48132,2186],{"class":483},[152,48134,2012],{"class":293},[152,48136,43593],{"class":483},[152,48138,2012],{"class":293},[152,48140,39384],{"class":483},[152,48142,48143,48145,48147,48149,48151,48153,48155,48157,48159,48161,48163,48165,48167,48169,48171],{"class":281,"line":1284},[152,48144,43566],{"class":483},[152,48146,43810],{"class":293},[152,48148,2186],{"class":483},[152,48150,36207],{"class":293},[152,48152,43575],{"class":483},[152,48154,22663],{"class":293},[152,48156,2186],{"class":483},[152,48158,43823],{"class":293},[152,48160,43584],{"class":483},[152,48162,2006],{"class":293},[152,48164,2186],{"class":483},[152,48166,33407],{"class":293},[152,48168,43593],{"class":483},[152,48170,33407],{"class":293},[152,48172,39384],{"class":483},[152,48174,48175,48177,48179,48181,48183,48185,48187,48189,48191,48193,48195,48197,48199],{"class":281,"line":1289},[152,48176,39434],{"class":483},[152,48178,32211],{"class":6858},[152,48180,1864],{"class":476},[152,48182,1888],{"class":293},[152,48184,2186],{"class":483},[152,48186,32266],{"class":6858},[152,48188,1864],{"class":476},[152,48190,1894],{"class":293},[152,48192,2186],{"class":483},[152,48194,32220],{"class":6858},[152,48196,1864],{"class":476},[152,48198,2026],{"class":293},[152,48200,1825],{"class":483},[152,48202,48203],{"class":281,"line":1301},[152,48204,39463],{"class":483},[152,48206,48207,48209,48211,48213],{"class":281,"line":1310},[152,48208,32182],{"class":293},[152,48210,43876],{"class":483},[152,48212,1864],{"class":476},[152,48214,39346],{"class":483},[152,48216,48217,48219,48221,48223,48225,48227,48229,48231,48233,48235,48237,48239,48241,48243,48245],{"class":281,"line":1320},[152,48218,43566],{"class":483},[152,48220,43887],{"class":293},[152,48222,2186],{"class":483},[152,48224,36207],{"class":293},[152,48226,43575],{"class":483},[152,48228,22663],{"class":293},[152,48230,2186],{"class":483},[152,48232,43823],{"class":293},[152,48234,43584],{"class":483},[152,48236,2006],{"class":293},[152,48238,2186],{"class":483},[152,48240,33407],{"class":293},[152,48242,43593],{"class":483},[152,48244,33407],{"class":293},[152,48246,39384],{"class":483},[152,48248,48249,48251,48253,48255,48257,48259,48261,48263,48265,48267,48269,48271,48273,48275,48277],{"class":281,"line":1327},[152,48250,43566],{"class":483},[152,48252,43887],{"class":293},[152,48254,2186],{"class":483},[152,48256,36277],{"class":293},[152,48258,43575],{"class":483},[152,48260,43496],{"class":293},[152,48262,2186],{"class":483},[152,48264,36277],{"class":293},[152,48266,43584],{"class":483},[152,48268,2415],{"class":293},[152,48270,2186],{"class":483},[152,48272,33407],{"class":293},[152,48274,43593],{"class":483},[152,48276,33407],{"class":293},[152,48278,39384],{"class":483},[152,48280,48281,48283,48285,48287,48289],{"class":281,"line":11528},[152,48282,43950],{"class":483},[152,48284,2026],{"class":293},[152,48286,2186],{"class":483},[152,48288,2026],{"class":293},[152,48290,43959],{"class":483},[152,48292,48293],{"class":281,"line":11536},[152,48294,40127],{"class":483},[152,48296,48297,48299,48301,48303,48305],{"class":281,"line":11541},[152,48298,40132],{"class":483},[152,48300,43970],{"class":293},[152,48302,2186],{"class":483},[152,48304,1894],{"class":293},[152,48306,1825],{"class":483},[152,48308,48309],{"class":281,"line":18219},[152,48310,39463],{"class":483},[152,48312,48313],{"class":281,"line":18225},[152,48314,43985],{"class":866},[152,48316,48317,48319,48321,48323,48325],{"class":281,"line":18248},[152,48318,5046],{"class":476},[152,48320,40205],{"class":483},[152,48322,27653],{"class":476},[152,48324,40210],{"class":293},[152,48326,40213],{"class":483},[152,48328,48329,48331,48333],{"class":281,"line":18254},[152,48330,6284],{"class":476},[152,48332,40225],{"class":293},[152,48334,40228],{"class":483},[152,48336,48337,48339,48341,48343,48345,48347,48349,48351,48353],{"class":281,"line":18277},[152,48338,40238],{"class":483},[152,48340,44012],{"class":6858},[152,48342,1864],{"class":476},[152,48344,44017],{"class":289},[152,48346,2186],{"class":483},[152,48348,40241],{"class":6858},[152,48350,1864],{"class":476},[152,48352,40246],{"class":289},[152,48354,1825],{"class":483},[152,48356,48357],{"class":281,"line":18291},[152,48358,44032],{"class":866},[152,48360,48361],{"class":281,"line":18311},[152,48362,44037],{"class":866},[152,48364,48365],{"class":281,"line":18317},[152,48366,44042],{"class":866},[152,48368,48369],{"class":281,"line":18328},[152,48370,44047],{"class":866},[152,48372,48373],{"class":281,"line":18351},[152,48374,44052],{"class":866},[152,48376,48377],{"class":281,"line":18373},[152,48378,44057],{"class":866},[152,48380,48381,48383,48385,48387,48389,48391],{"class":281,"line":18378},[152,48382,40258],{"class":476},[152,48384,40261],{"class":483},[152,48386,40264],{"class":476},[152,48388,40267],{"class":476},[152,48390,40270],{"class":293},[152,48392,5382],{"class":483},[152,48394,48395,48397,48399],{"class":281,"line":18384},[152,48396,40282],{"class":483},[152,48398,2000],{"class":293},[152,48400,1825],{"class":483},[152,48402,48403,48405,48407],{"class":281,"line":18398},[152,48404,44084],{"class":476},[152,48406,40225],{"class":293},[152,48408,40301],{"class":483},[152,48410,48411,48413,48415,48417,48419],{"class":281,"line":18411},[152,48412,44093],{"class":483},[152,48414,2000],{"class":293},[152,48416,2186],{"class":483},[152,48418,40323],{"class":293},[152,48420,1825],{"class":483},[152,48422,48423,48425,48427,48429,48431,48433],{"class":281,"line":18416},[152,48424,44106],{"class":476},[152,48426,40261],{"class":483},[152,48428,40264],{"class":476},[152,48430,40267],{"class":476},[152,48432,40270],{"class":293},[152,48434,5382],{"class":483},[152,48436,48437,48439,48441],{"class":281,"line":18430},[152,48438,44121],{"class":483},[152,48440,2000],{"class":293},[152,48442,1825],{"class":483},[152,48444,48445],{"class":281,"line":18435},[152,48446,36502],{"class":866},[152,48448,48449,48451,48453],{"class":281,"line":18441},[152,48450,32138],{"class":476},[152,48452,32430],{"class":285},[152,48454,32433],{"class":483},[152,48456,48457,48459,48461,48463],{"class":281,"line":18446},[152,48458,32438],{"class":483},[152,48460,1864],{"class":476},[152,48462,32160],{"class":293},[152,48464,44148],{"class":483},[152,48466,48467,48469,48471,48473],{"class":281,"line":18460},[152,48468,32438],{"class":483},[152,48470,1864],{"class":476},[152,48472,32160],{"class":293},[152,48474,44159],{"class":483},[152,48476,48477,48479,48481,48483],{"class":281,"line":18465},[152,48478,32438],{"class":483},[152,48480,1864],{"class":476},[152,48482,32160],{"class":293},[152,48484,44170],{"class":483},[152,48486,48487,48489,48491,48493],{"class":281,"line":18470},[152,48488,32438],{"class":483},[152,48490,1864],{"class":476},[152,48492,32160],{"class":293},[152,48494,44181],{"class":483},[152,48496,48497,48499,48501,48503],{"class":281,"line":18484},[152,48498,32438],{"class":483},[152,48500,1864],{"class":476},[152,48502,32160],{"class":293},[152,48504,44192],{"class":483},[152,48506,48507,48509],{"class":281,"line":18496},[152,48508,16367],{"class":476},[152,48510,32546],{"class":483},[152,48512,48513],{"class":281,"line":18501},[152,48514,307],{"emptyLinePlaceholder":306},[152,48516,48517],{"class":281,"line":18514},[152,48518,44207],{"class":866},[152,48520,48521,48523,48525,48527,48529],{"class":281,"line":18519},[152,48522,3202],{"class":476},[152,48524,32557],{"class":293},[152,48526,4592],{"class":476},[152,48528,32562],{"class":289},[152,48530,5382],{"class":483},[152,48532,48533,48535,48537,48539,48541,48543,48545,48547,48549],{"class":281,"line":18524},[152,48534,32574],{"class":483},[152,48536,1864],{"class":476},[152,48538,31788],{"class":483},[152,48540,32581],{"class":289},[152,48542,3364],{"class":476},[152,48544,32586],{"class":483},[152,48546,3361],{"class":476},[152,48548,31813],{"class":289},[152,48550,1825],{"class":483},[152,48552,48553,48555,48557],{"class":281,"line":18529},[152,48554,32626],{"class":483},[152,48556,1864],{"class":476},[152,48558,44248],{"class":483},[152,48560,48561,48563,48565,48567,48569,48571,48573,48575],{"class":281,"line":18542},[152,48562,32636],{"class":293},[152,48564,32639],{"class":483},[152,48566,2026],{"class":293},[152,48568,2186],{"class":483},[152,48570,32838],{"class":293},[152,48572,2186],{"class":483},[152,48574,32838],{"class":293},[152,48576,32652],{"class":483},[262,48578,48580],{"id":48579},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,48582,48583],{},"计算图片的均值与方差，用于训练中归一化处理操作",[270,48585,48587],{"className":31715,"code":48586,"language":31717,"meta":275,"style":275},"# 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",[277,48588,48589,48594,48607,48612,48618,48623,48633,48637,48642,48652,48656,48661,48671,48688,48692,48697,48709,48721,48752,48761,48771,48781,48785,48790,48805,48809,48814,48819,48824,48834,48839,48864,48868,48873,48888,48892,48905,48909,48914,48919,48924,48929,48934,48944,48954,48977,48985,48993,49001,49005,49017,49021,49026,49030,49034,49041,49061,49085,49092,49106,49111,49116,49120,49134,49138,49150],{"__ignoreMap":275},[152,48590,48591],{"class":281,"line":282},[152,48592,48593],{"class":866},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[152,48595,48596,48598,48601,48604],{"class":281,"line":303},[152,48597,32074],{"class":476},[152,48599,48600],{"class":293}," PIL",[152,48602,48603],{"class":476}," import",[152,48605,48606],{"class":483}," Image\n",[152,48608,48609],{"class":281,"line":310},[152,48610,48611],{"class":866},"# os 用来处理文件夹和文件路径\n",[152,48613,48614,48616],{"class":281,"line":324},[152,48615,31729],{"class":476},[152,48617,46642],{"class":483},[152,48619,48620],{"class":281,"line":329},[152,48621,48622],{"class":866},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[152,48624,48625,48627,48629,48631],{"class":281,"line":343},[152,48626,31729],{"class":476},[152,48628,32717],{"class":483},[152,48630,32720],{"class":476},[152,48632,32723],{"class":483},[152,48634,48635],{"class":281,"line":348},[152,48636,307],{"emptyLinePlaceholder":306},[152,48638,48639],{"class":281,"line":362},[152,48640,48641],{"class":866},"# 文件夹路径，包含所有图片文件\n",[152,48643,48644,48647,48649],{"class":281,"line":367},[152,48645,48646],{"class":483},"folder_path ",[152,48648,1864],{"class":476},[152,48650,48651],{"class":289}," 'data_cat_dog'\n",[152,48653,48654],{"class":281,"line":381},[152,48655,307],{"emptyLinePlaceholder":306},[152,48657,48658],{"class":281,"line":386},[152,48659,48660],{"class":866},"# 初始化累积变量\n",[152,48662,48663,48666,48668],{"class":281,"line":932},[152,48664,48665],{"class":483},"total_pixels ",[152,48667,1864],{"class":476},[152,48669,48670],{"class":293}," 0\n",[152,48672,48673,48676,48678,48681,48683,48685],{"class":281,"line":942},[152,48674,48675],{"class":483},"sum_normalized_pixel_values ",[152,48677,1864],{"class":476},[152,48679,48680],{"class":483}," np.zeros(",[152,48682,1888],{"class":293},[152,48684,47145],{"class":483},[152,48686,48687],{"class":866},"# 如果是RGB图像，需要三个通道的均值和方差\n",[152,48689,48690],{"class":281,"line":949},[152,48691,307],{"emptyLinePlaceholder":306},[152,48693,48694],{"class":281,"line":954},[152,48695,48696],{"class":866},"# 遍历文件夹中的图片文件\n",[152,48698,48699,48701,48704,48706],{"class":281,"line":959},[152,48700,4668],{"class":476},[152,48702,48703],{"class":483}," root, dirs, files ",[152,48705,27653],{"class":476},[152,48707,48708],{"class":483}," os.walk(folder_path):\n",[152,48710,48711,48713,48716,48718],{"class":281,"line":970},[152,48712,4844],{"class":476},[152,48714,48715],{"class":483}," filename ",[152,48717,27653],{"class":476},[152,48719,48720],{"class":483}," files:\n",[152,48722,48723,48725,48728,48731,48733,48736,48738,48741,48743,48746,48749],{"class":281,"line":979},[152,48724,4147],{"class":476},[152,48726,48727],{"class":483}," filename.endswith((",[152,48729,48730],{"class":289},"'.jpg'",[152,48732,14051],{"class":483},[152,48734,48735],{"class":289},"'.jpeg'",[152,48737,14051],{"class":483},[152,48739,48740],{"class":289},"'.png'",[152,48742,14051],{"class":483},[152,48744,48745],{"class":289},"'.bmp'",[152,48747,48748],{"class":483},")):  ",[152,48750,48751],{"class":866},"# 可根据实际情况添加其他格式\n",[152,48753,48754,48756,48758],{"class":281,"line":989},[152,48755,47010],{"class":483},[152,48757,1864],{"class":476},[152,48759,48760],{"class":483}," os.path.join(root, filename)\n",[152,48762,48763,48766,48768],{"class":281,"line":996},[152,48764,48765],{"class":483},"            image ",[152,48767,1864],{"class":476},[152,48769,48770],{"class":483}," Image.open(image_path)\n",[152,48772,48773,48776,48778],{"class":281,"line":1001},[152,48774,48775],{"class":483},"            image_array ",[152,48777,1864],{"class":476},[152,48779,48780],{"class":483}," np.array(image)\n",[152,48782,48783],{"class":281,"line":1006},[152,48784,307],{"emptyLinePlaceholder":306},[152,48786,48787],{"class":281,"line":1018},[152,48788,48789],{"class":866},"            # 归一化像素值到0-1之间\n",[152,48791,48792,48795,48797,48800,48802],{"class":281,"line":1027},[152,48793,48794],{"class":483},"            normalized_image_array ",[152,48796,1864],{"class":476},[152,48798,48799],{"class":483}," image_array ",[152,48801,2392],{"class":476},[152,48803,48804],{"class":293}," 255.0\n",[152,48806,48807],{"class":281,"line":1037},[152,48808,307],{"emptyLinePlaceholder":306},[152,48810,48811],{"class":281,"line":1044},[152,48812,48813],{"class":866},"            # print(image_path)\n",[152,48815,48816],{"class":281,"line":1049},[152,48817,48818],{"class":866},"            # print(normalized_image_array.shape)\n",[152,48820,48821],{"class":281,"line":1054},[152,48822,48823],{"class":866},"            # 累积归一化后的像素值和像素数量\n",[152,48825,48826,48829,48831],{"class":281,"line":1065},[152,48827,48828],{"class":483},"            total_pixels ",[152,48830,11109],{"class":476},[152,48832,48833],{"class":483}," normalized_image_array.size\n",[152,48835,48836],{"class":281,"line":1074},[152,48837,48838],{"class":866},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[152,48840,48841,48844,48846,48849,48852,48854,48856,48858,48860,48862],{"class":281,"line":1084},[152,48842,48843],{"class":483},"            sum_normalized_pixel_values ",[152,48845,11109],{"class":476},[152,48847,48848],{"class":483}," np.sum(normalized_image_array, ",[152,48850,48851],{"class":6858},"axis",[152,48853,1864],{"class":476},[152,48855,1819],{"class":483},[152,48857,2000],{"class":293},[152,48859,14051],{"class":483},[152,48861,2026],{"class":293},[152,48863,31834],{"class":483},[152,48865,48866],{"class":281,"line":1091},[152,48867,307],{"emptyLinePlaceholder":306},[152,48869,48870],{"class":281,"line":1096},[152,48871,48872],{"class":866},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[152,48874,48875,48878,48880,48883,48885],{"class":281,"line":1101},[152,48876,48877],{"class":483},"mean ",[152,48879,1864],{"class":476},[152,48881,48882],{"class":483}," sum_normalized_pixel_values ",[152,48884,2392],{"class":476},[152,48886,48887],{"class":483}," total_pixels\n",[152,48889,48890],{"class":281,"line":1112},[152,48891,307],{"emptyLinePlaceholder":306},[152,48893,48894,48897,48899,48901,48903],{"class":281,"line":1121},[152,48895,48896],{"class":483},"sum_squared_diff ",[152,48898,1864],{"class":476},[152,48900,48680],{"class":483},[152,48902,1888],{"class":293},[152,48904,1825],{"class":483},[152,48906,48907],{"class":281,"line":1131},[152,48908,307],{"emptyLinePlaceholder":306},[152,48910,48911],{"class":281,"line":1138},[152,48912,48913],{"class":866},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[152,48915,48916],{"class":281,"line":1143},[152,48917,48918],{"class":866},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[152,48920,48921],{"class":281,"line":1148},[152,48922,48923],{"class":866},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[152,48925,48926],{"class":281,"line":1159},[152,48927,48928],{"class":866},"# Image.open(image_path)：打开图片\n",[152,48930,48931],{"class":281,"line":1168},[152,48932,48933],{"class":866},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[152,48935,48936,48938,48940,48942],{"class":281,"line":1178},[152,48937,4668],{"class":476},[152,48939,48703],{"class":483},[152,48941,27653],{"class":476},[152,48943,48708],{"class":483},[152,48945,48946,48948,48950,48952],{"class":281,"line":1185},[152,48947,4844],{"class":476},[152,48949,48715],{"class":483},[152,48951,27653],{"class":476},[152,48953,48720],{"class":483},[152,48955,48956,48958,48960,48962,48964,48966,48968,48970,48972,48974],{"class":281,"line":1190},[152,48957,4147],{"class":476},[152,48959,48727],{"class":483},[152,48961,48730],{"class":289},[152,48963,14051],{"class":483},[152,48965,48735],{"class":289},[152,48967,14051],{"class":483},[152,48969,48740],{"class":289},[152,48971,14051],{"class":483},[152,48973,48745],{"class":289},[152,48975,48976],{"class":483},")):\n",[152,48978,48979,48981,48983],{"class":281,"line":1195},[152,48980,47010],{"class":483},[152,48982,1864],{"class":476},[152,48984,48760],{"class":483},[152,48986,48987,48989,48991],{"class":281,"line":1206},[152,48988,48765],{"class":483},[152,48990,1864],{"class":476},[152,48992,48770],{"class":483},[152,48994,48995,48997,48999],{"class":281,"line":1215},[152,48996,48775],{"class":483},[152,48998,1864],{"class":476},[152,49000,48780],{"class":483},[152,49002,49003],{"class":281,"line":1225},[152,49004,48789],{"class":866},[152,49006,49007,49009,49011,49013,49015],{"class":281,"line":1232},[152,49008,48794],{"class":483},[152,49010,1864],{"class":476},[152,49012,48799],{"class":483},[152,49014,2392],{"class":476},[152,49016,48804],{"class":293},[152,49018,49019],{"class":281,"line":1237},[152,49020,48818],{"class":866},[152,49022,49023],{"class":281,"line":1242},[152,49024,49025],{"class":866},"            # print(mean.shape)\n",[152,49027,49028],{"class":281,"line":1253},[152,49029,48813],{"class":866},[152,49031,49032],{"class":281,"line":1262},[152,49033,307],{"emptyLinePlaceholder":306},[152,49035,49036,49039],{"class":281,"line":1272},[152,49037,49038],{"class":476},"            try",[152,49040,5382],{"class":483},[152,49042,49043,49046,49048,49051,49053,49056,49058],{"class":281,"line":1279},[152,49044,49045],{"class":483},"                diff ",[152,49047,1864],{"class":476},[152,49049,49050],{"class":483}," (normalized_image_array ",[152,49052,2340],{"class":476},[152,49054,49055],{"class":483}," mean) ",[152,49057,12277],{"class":476},[152,49059,49060],{"class":293}," 2\n",[152,49062,49063,49066,49068,49071,49073,49075,49077,49079,49081,49083],{"class":281,"line":1284},[152,49064,49065],{"class":483},"                sum_squared_diff ",[152,49067,11109],{"class":476},[152,49069,49070],{"class":483}," np.sum(diff, ",[152,49072,48851],{"class":6858},[152,49074,1864],{"class":476},[152,49076,1819],{"class":483},[152,49078,2000],{"class":293},[152,49080,14051],{"class":483},[152,49082,2026],{"class":293},[152,49084,31834],{"class":483},[152,49086,49087,49090],{"class":281,"line":1289},[152,49088,49089],{"class":476},"            except",[152,49091,5382],{"class":483},[152,49093,49094,49097,49099,49101,49104],{"class":281,"line":1301},[152,49095,49096],{"class":293},"                print",[152,49098,1819],{"class":483},[152,49100,1870],{"class":476},[152,49102,49103],{"class":289},"\"捕获到自定义异常\"",[152,49105,1825],{"class":483},[152,49107,49108],{"class":281,"line":1310},[152,49109,49110],{"class":866},"            # diff = (normalized_image_array - mean) ** 2\n",[152,49112,49113],{"class":281,"line":1320},[152,49114,49115],{"class":866},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[152,49117,49118],{"class":281,"line":1327},[152,49119,307],{"emptyLinePlaceholder":306},[152,49121,49122,49125,49127,49130,49132],{"class":281,"line":11528},[152,49123,49124],{"class":483},"variance ",[152,49126,1864],{"class":476},[152,49128,49129],{"class":483}," sum_squared_diff ",[152,49131,2392],{"class":476},[152,49133,48887],{"class":483},[152,49135,49136],{"class":281,"line":11536},[152,49137,307],{"emptyLinePlaceholder":306},[152,49139,49140,49142,49144,49147],{"class":281,"line":11541},[152,49141,31752],{"class":293},[152,49143,1819],{"class":483},[152,49145,49146],{"class":289},"\"Mean:\"",[152,49148,49149],{"class":483},", mean)\n",[152,49151,49152,49154,49156,49159],{"class":281,"line":18219},[152,49153,31752],{"class":293},[152,49155,1819],{"class":483},[152,49157,49158],{"class":289},"\"Variance:\"",[152,49160,49161],{"class":483},", variance)\n",[270,49163,49165],{"className":31715,"code":49164,"language":31717,"meta":275,"style":275},"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",[277,49166,49167,49173,49179,49189,49195,49205,49219,49229,49239,49249,49253,49263,49273,49277,49281,49289,49294,49299,49318,49322,49327,49332,49337,49342,49383,49388,49398,49403,49416,49421,49426,49431,49436,49441,49445,49450,49455,49477,49481,49513,49527,49537,49547,49551,49561,49575,49585,49595,49605,49611,49615,49619,49623,49627,49631,49639,49659,49663,49667,49671,49675,49691,49695,49699,49707,49711,49715,49723,49727,49731,49735,49743,49747,49751,49755,49763,49767,49775,49779,49787,49791,49799,49803,49811,49815,49819,49827,49831,49835,49847,49871,49885,49889,49893,49897,49905,49909,49917,49921,49929,49933,49941,49945,49953,49957,49965,49969,49981,49985,49993,49997,50005,50009,50013,50017,50021,50029,50033,50049,50053,50061,50065,50069,50073,50077,50081,50085,50089,50105,50109,50121,50125,50137,50141,50153,50157,50165,50169,50177,50181,50185,50189,50195,50199,50207,50211,50227,50231,50239,50243,50259,50271,50275,50287,50291,50295,50303,50307,50311,50319,50323,50331,50335,50343,50347,50351,50393,50435,50439,50443,50459,50463,50479,50483,50487,50495,50499,50503,50515,50553,50557,50561,50569,50573,50587,50597,50603,50609,50615,50621,50625,50629,50635,50639,50643,50651,50655,50673,50677,50681,50685,50701,50705,50709,50713,50717,50721,50741,50761,50765,50769,50773,50781,50789,50793,50809,50829,50849,50853,50858,50867,50876,50881,50886,50891,50904,50909,50918,50927,50944],{"__ignoreMap":275},[152,49168,49169,49171],{"class":281,"line":282},[152,49170,31729],{"class":476},[152,49172,33159],{"class":483},[152,49174,49175,49177],{"class":281,"line":303},[152,49176,31729],{"class":476},[152,49178,33166],{"class":483},[152,49180,49181,49183,49185,49187],{"class":281,"line":310},[152,49182,31729],{"class":476},[152,49184,33177],{"class":483},[152,49186,32720],{"class":476},[152,49188,33182],{"class":483},[152,49190,49191,49193],{"class":281,"line":324},[152,49192,31729],{"class":476},[152,49194,31732],{"class":483},[152,49196,49197,49199,49201,49203],{"class":281,"line":329},[152,49198,32074],{"class":476},[152,49200,32752],{"class":483},[152,49202,31729],{"class":476},[152,49204,33199],{"class":483},[152,49206,49207,49209,49211,49213,49216],{"class":281,"line":343},[152,49208,32074],{"class":476},[152,49210,32705],{"class":483},[152,49212,31729],{"class":476},[152,49214,49215],{"class":483}," ImageFolder ",[152,49217,49218],{"class":866},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[152,49220,49221,49223,49225,49227],{"class":281,"line":348},[152,49222,32074],{"class":476},[152,49224,32735],{"class":483},[152,49226,31729],{"class":476},[152,49228,32740],{"class":483},[152,49230,49231,49233,49235,49237],{"class":281,"line":362},[152,49232,31729],{"class":476},[152,49234,32752],{"class":483},[152,49236,32720],{"class":476},[152,49238,32757],{"class":483},[152,49240,49241,49243,49245,49247],{"class":281,"line":367},[152,49242,31729],{"class":476},[152,49244,32769],{"class":483},[152,49246,32720],{"class":476},[152,49248,32774],{"class":483},[152,49250,49251],{"class":281,"line":381},[152,49252,33244],{"class":866},[152,49254,49255,49257,49259,49261],{"class":281,"line":386},[152,49256,32074],{"class":476},[152,49258,33251],{"class":483},[152,49260,31729],{"class":476},[152,49262,44368],{"class":483},[152,49264,49265,49267,49269,49271],{"class":281,"line":932},[152,49266,32074],{"class":476},[152,49268,32077],{"class":483},[152,49270,31729],{"class":476},[152,49272,32082],{"class":483},[152,49274,49275],{"class":281,"line":942},[152,49276,307],{"emptyLinePlaceholder":306},[152,49278,49279],{"class":281,"line":949},[152,49280,33279],{"class":866},[152,49282,49283,49285,49287],{"class":281,"line":954},[152,49284,33284],{"class":476},[152,49286,33287],{"class":285},[152,49288,33290],{"class":483},[152,49290,49291],{"class":281,"line":959},[152,49292,49293],{"class":866},"    # 导入自己的数据集，并进行数据处理\n",[152,49295,49296],{"class":281,"line":970},[152,49297,49298],{"class":866},"    # 定义数据集的路径\n",[152,49300,49301,49304,49306,49308,49310,49312,49316],{"class":281,"line":979},[152,49302,49303],{"class":293},"    ROOT_PATH",[152,49305,1864],{"class":476},[152,49307,2478],{"class":476},[152,49309,2059],{"class":289},[152,49311,2366],{"class":293},[152,49313,49315],{"class":49314},"sA_wV","\u002Fdata\u002Ftrain",[152,49317,26744],{"class":289},[152,49319,49320],{"class":281,"line":989},[152,49321,307],{"emptyLinePlaceholder":306},[152,49323,49324],{"class":281,"line":996},[152,49325,49326],{"class":866},"    # 定义归一化方法\n",[152,49328,49329],{"class":281,"line":1001},[152,49330,49331],{"class":866},"    # 这里需要先计算一下数据集的均值和方差\n",[152,49333,49334],{"class":281,"line":1006},[152,49335,49336],{"class":866},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[152,49338,49339],{"class":281,"line":1018},[152,49340,49341],{"class":866},"    # 第一个参数是均值，第二个参数是方差\n",[152,49343,49344,49347,49349,49352,49355,49357,49360,49362,49365,49368,49371,49373,49376,49378,49381],{"class":281,"line":1027},[152,49345,49346],{"class":483},"    normalize",[152,49348,1864],{"class":476},[152,49350,49351],{"class":483},"transforms.Normalize([",[152,49353,49354],{"class":293},"0.162",[152,49356,2186],{"class":483},[152,49358,49359],{"class":293},"0.151",[152,49361,2186],{"class":483},[152,49363,49364],{"class":293},"0.138",[152,49366,49367],{"class":483},"],[",[152,49369,49370],{"class":293},"0.058",[152,49372,2186],{"class":483},[152,49374,49375],{"class":293},"0.052",[152,49377,2186],{"class":483},[152,49379,49380],{"class":293},"0.048",[152,49382,6299],{"class":483},[152,49384,49385],{"class":281,"line":1037},[152,49386,49387],{"class":866},"    # 定义数据集处理方法变量\n",[152,49389,49390,49393,49395],{"class":281,"line":1044},[152,49391,49392],{"class":483},"    train_transform",[152,49394,1864],{"class":476},[152,49396,49397],{"class":483},"transforms.Compose([\n",[152,49399,49400],{"class":281,"line":1049},[152,49401,49402],{"class":866},"        # 调整图像大小为224*224\n",[152,49404,49405,49408,49410,49412,49414],{"class":281,"line":1054},[152,49406,49407],{"class":483},"        transforms.Resize((",[152,49409,32838],{"class":293},[152,49411,2186],{"class":483},[152,49413,32838],{"class":293},[152,49415,43959],{"class":483},[152,49417,49418],{"class":281,"line":1065},[152,49419,49420],{"class":866},"        # 将图像转换为张量\n",[152,49422,49423],{"class":281,"line":1074},[152,49424,49425],{"class":483},"        transforms.ToTensor(),\n",[152,49427,49428],{"class":281,"line":1084},[152,49429,49430],{"class":483},"        normalize])\n",[152,49432,49433],{"class":281,"line":1091},[152,49434,49435],{"class":866},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[152,49437,49438],{"class":281,"line":1096},[152,49439,49440],{"class":866},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[152,49442,49443],{"class":281,"line":1101},[152,49444,307],{"emptyLinePlaceholder":306},[152,49446,49447],{"class":281,"line":1112},[152,49448,49449],{"class":866},"    # 加载数据集\n",[152,49451,49452],{"class":281,"line":1121},[152,49453,49454],{"class":866},"    # 传入数据集路径与处理方法\n",[152,49456,49457,49459,49461,49464,49467,49469,49472,49474],{"class":281,"line":1131},[152,49458,33295],{"class":483},[152,49460,1864],{"class":476},[152,49462,49463],{"class":483},"ImageFolder(",[152,49465,49466],{"class":293},"ROOT_PATH",[152,49468,2186],{"class":483},[152,49470,49471],{"class":6858},"transform",[152,49473,1864],{"class":476},[152,49475,49476],{"class":483},"train_transform)\n",[152,49478,49479],{"class":281,"line":1138},[152,49480,307],{"emptyLinePlaceholder":306},[152,49482,49483,49485,49487,49489,49491,49493,49495,49497,49499,49501,49503,49505,49507,49509,49511],{"class":281,"line":1143},[152,49484,33347],{"class":483},[152,49486,1864],{"class":476},[152,49488,33352],{"class":483},[152,49490,33355],{"class":293},[152,49492,1819],{"class":483},[152,49494,33360],{"class":293},[152,49496,2263],{"class":476},[152,49498,9000],{"class":293},[152,49500,33367],{"class":483},[152,49502,33355],{"class":293},[152,49504,1819],{"class":483},[152,49506,33374],{"class":293},[152,49508,2263],{"class":476},[152,49510,9000],{"class":293},[152,49512,33381],{"class":483},[152,49514,49515,49517,49519,49521,49523,49525],{"class":281,"line":1148},[152,49516,33386],{"class":483},[152,49518,1864],{"class":476},[152,49520,33391],{"class":483},[152,49522,32874],{"class":6858},[152,49524,1864],{"class":476},[152,49526,32879],{"class":483},[152,49528,49529,49531,49533,49535],{"class":281,"line":1159},[152,49530,33402],{"class":6858},[152,49532,1864],{"class":476},[152,49534,2006],{"class":293},[152,49536,32803],{"class":483},[152,49538,49539,49541,49543,49545],{"class":281,"line":1168},[152,49540,33414],{"class":6858},[152,49542,1864],{"class":476},[152,49544,32813],{"class":293},[152,49546,32803],{"class":483},[152,49548,49549],{"class":281,"line":1178},[152,49550,33425],{"class":866},[152,49552,49553,49555,49557,49559],{"class":281,"line":1185},[152,49554,33430],{"class":6858},[152,49556,1864],{"class":476},[152,49558,2203],{"class":293},[152,49560,1825],{"class":483},[152,49562,49563,49565,49567,49569,49571,49573],{"class":281,"line":1190},[152,49564,33441],{"class":483},[152,49566,1864],{"class":476},[152,49568,32871],{"class":483},[152,49570,32874],{"class":6858},[152,49572,1864],{"class":476},[152,49574,33452],{"class":483},[152,49576,49577,49579,49581,49583],{"class":281,"line":1195},[152,49578,33457],{"class":6858},[152,49580,1864],{"class":476},[152,49582,2006],{"class":293},[152,49584,32803],{"class":483},[152,49586,49587,49589,49591,49593],{"class":281,"line":1206},[152,49588,33468],{"class":6858},[152,49590,1864],{"class":476},[152,49592,32813],{"class":293},[152,49594,32803],{"class":483},[152,49596,49597,49599,49601,49603],{"class":281,"line":1215},[152,49598,33479],{"class":6858},[152,49600,1864],{"class":476},[152,49602,2203],{"class":293},[152,49604,1825],{"class":483},[152,49606,49607,49609],{"class":281,"line":1225},[152,49608,5732],{"class":476},[152,49610,33492],{"class":483},[152,49612,49613],{"class":281,"line":1232},[152,49614,307],{"emptyLinePlaceholder":306},[152,49616,49617],{"class":281,"line":1237},[152,49618,33501],{"class":866},[152,49620,49621],{"class":281,"line":1242},[152,49622,33506],{"class":866},[152,49624,49625],{"class":281,"line":1253},[152,49626,307],{"emptyLinePlaceholder":306},[152,49628,49629],{"class":281,"line":1262},[152,49630,33515],{"class":866},[152,49632,49633,49635,49637],{"class":281,"line":1272},[152,49634,33284],{"class":476},[152,49636,33522],{"class":285},[152,49638,33525],{"class":483},[152,49640,49641,49643,49645,49647,49649,49651,49653,49655,49657],{"class":281,"line":1279},[152,49642,32574],{"class":483},[152,49644,1864],{"class":476},[152,49646,31788],{"class":483},[152,49648,32581],{"class":289},[152,49650,3364],{"class":476},[152,49652,32586],{"class":483},[152,49654,3361],{"class":476},[152,49656,33544],{"class":289},[152,49658,1825],{"class":483},[152,49660,49661],{"class":281,"line":1284},[152,49662,307],{"emptyLinePlaceholder":306},[152,49664,49665],{"class":281,"line":1289},[152,49666,33559],{"class":866},[152,49668,49669],{"class":281,"line":1301},[152,49670,33564],{"class":866},[152,49672,49673],{"class":281,"line":1310},[152,49674,33569],{"class":866},[152,49676,49677,49679,49681,49683,49685,49687,49689],{"class":281,"line":1320},[152,49678,33574],{"class":483},[152,49680,1864],{"class":476},[152,49682,33579],{"class":483},[152,49684,33582],{"class":6858},[152,49686,1864],{"class":476},[152,49688,33587],{"class":293},[152,49690,1825],{"class":483},[152,49692,49693],{"class":281,"line":1327},[152,49694,307],{"emptyLinePlaceholder":306},[152,49696,49697],{"class":281,"line":11528},[152,49698,33598],{"class":866},[152,49700,49701,49703,49705],{"class":281,"line":11536},[152,49702,33603],{"class":483},[152,49704,1864],{"class":476},[152,49706,33608],{"class":483},[152,49708,49709],{"class":281,"line":11541},[152,49710,307],{"emptyLinePlaceholder":306},[152,49712,49713],{"class":281,"line":18219},[152,49714,33617],{"class":866},[152,49716,49717,49719,49721],{"class":281,"line":18225},[152,49718,32626],{"class":483},[152,49720,1864],{"class":476},[152,49722,33626],{"class":483},[152,49724,49725],{"class":281,"line":18248},[152,49726,33631],{"class":866},[152,49728,49729],{"class":281,"line":18254},[152,49730,33636],{"class":866},[152,49732,49733],{"class":281,"line":18277},[152,49734,33641],{"class":866},[152,49736,49737,49739,49741],{"class":281,"line":18291},[152,49738,33646],{"class":483},[152,49740,1864],{"class":476},[152,49742,33651],{"class":483},[152,49744,49745],{"class":281,"line":18311},[152,49746,307],{"emptyLinePlaceholder":306},[152,49748,49749],{"class":281,"line":18317},[152,49750,33664],{"class":866},[152,49752,49753],{"class":281,"line":18328},[152,49754,33669],{"class":866},[152,49756,49757,49759,49761],{"class":281,"line":18351},[152,49758,33674],{"class":483},[152,49760,1864],{"class":476},[152,49762,33679],{"class":293},[152,49764,49765],{"class":281,"line":18373},[152,49766,33684],{"class":866},[152,49768,49769,49771,49773],{"class":281,"line":18378},[152,49770,33689],{"class":483},[152,49772,1864],{"class":476},[152,49774,33694],{"class":483},[152,49776,49777],{"class":281,"line":18384},[152,49778,33699],{"class":866},[152,49780,49781,49783,49785],{"class":281,"line":18398},[152,49782,33704],{"class":483},[152,49784,1864],{"class":476},[152,49786,33694],{"class":483},[152,49788,49789],{"class":281,"line":18411},[152,49790,33713],{"class":866},[152,49792,49793,49795,49797],{"class":281,"line":18416},[152,49794,33718],{"class":483},[152,49796,1864],{"class":476},[152,49798,33694],{"class":483},[152,49800,49801],{"class":281,"line":18430},[152,49802,33727],{"class":866},[152,49804,49805,49807,49809],{"class":281,"line":18435},[152,49806,33732],{"class":483},[152,49808,1864],{"class":476},[152,49810,33694],{"class":483},[152,49812,49813],{"class":281,"line":18441},[152,49814,307],{"emptyLinePlaceholder":306},[152,49816,49817],{"class":281,"line":18446},[152,49818,33745],{"class":866},[152,49820,49821,49823,49825],{"class":281,"line":18460},[152,49822,33750],{"class":483},[152,49824,1864],{"class":476},[152,49826,33755],{"class":483},[152,49828,49829],{"class":281,"line":18465},[152,49830,307],{"emptyLinePlaceholder":306},[152,49832,49833],{"class":281,"line":18470},[152,49834,33768],{"class":866},[152,49836,49837,49839,49841,49843,49845],{"class":281,"line":18484},[152,49838,4844],{"class":476},[152,49840,33775],{"class":483},[152,49842,27653],{"class":476},[152,49844,33780],{"class":293},[152,49846,33783],{"class":483},[152,49848,49849,49851,49853,49855,49857,49859,49861,49863,49865,49867,49869],{"class":281,"line":18496},[152,49850,33788],{"class":293},[152,49852,1819],{"class":483},[152,49854,33793],{"class":289},[152,49856,33796],{"class":293},[152,49858,2392],{"class":289},[152,49860,33796],{"class":293},[152,49862,2059],{"class":289},[152,49864,33805],{"class":483},[152,49866,2340],{"class":476},[152,49868,2026],{"class":293},[152,49870,31834],{"class":483},[152,49872,49873,49875,49877,49879,49881,49883],{"class":281,"line":18501},[152,49874,33788],{"class":293},[152,49876,1819],{"class":483},[152,49878,33820],{"class":289},[152,49880,2263],{"class":476},[152,49882,2254],{"class":293},[152,49884,1825],{"class":483},[152,49886,49887],{"class":281,"line":18514},[152,49888,307],{"emptyLinePlaceholder":306},[152,49890,49891],{"class":281,"line":18519},[152,49892,33835],{"class":866},[152,49894,49895],{"class":281,"line":18524},[152,49896,33840],{"class":866},[152,49898,49899,49901,49903],{"class":281,"line":18529},[152,49900,33845],{"class":483},[152,49902,1864],{"class":476},[152,49904,33679],{"class":293},[152,49906,49907],{"class":281,"line":18542},[152,49908,33854],{"class":866},[152,49910,49911,49913,49915],{"class":281,"line":18547},[152,49912,33859],{"class":483},[152,49914,1864],{"class":476},[152,49916,4728],{"class":293},[152,49918,49919],{"class":281,"line":33970},[152,49920,33868],{"class":866},[152,49922,49923,49925,49927],{"class":281,"line":33976},[152,49924,33873],{"class":483},[152,49926,1864],{"class":476},[152,49928,33679],{"class":293},[152,49930,49931],{"class":281,"line":33982},[152,49932,33882],{"class":866},[152,49934,49935,49937,49939],{"class":281,"line":33988},[152,49936,33887],{"class":483},[152,49938,1864],{"class":476},[152,49940,4728],{"class":293},[152,49942,49943],{"class":281,"line":33994},[152,49944,33896],{"class":866},[152,49946,49947,49949,49951],{"class":281,"line":34005},[152,49948,33901],{"class":483},[152,49950,1864],{"class":476},[152,49952,4728],{"class":293},[152,49954,49955],{"class":281,"line":34011},[152,49956,33910],{"class":866},[152,49958,49959,49961,49963],{"class":281,"line":34031},[152,49960,33915],{"class":483},[152,49962,1864],{"class":476},[152,49964,4728],{"class":293},[152,49966,49967],{"class":281,"line":34037},[152,49968,33924],{"class":866},[152,49970,49971,49973,49975,49977,49979],{"class":281,"line":34048},[152,49972,5046],{"class":476},[152,49974,32938],{"class":483},[152,49976,27653],{"class":476},[152,49978,32943],{"class":293},[152,49980,33937],{"class":483},[152,49982,49983],{"class":281,"line":34054},[152,49984,33942],{"class":866},[152,49986,49987,49989,49991],{"class":281,"line":34060},[152,49988,33947],{"class":483},[152,49990,1864],{"class":476},[152,49992,33952],{"class":483},[152,49994,49995],{"class":281,"line":34066},[152,49996,33957],{"class":866},[152,49998,49999,50001,50003],{"class":281,"line":34072},[152,50000,33962],{"class":483},[152,50002,1864],{"class":476},[152,50004,33967],{"class":483},[152,50006,50007],{"class":281,"line":34078},[152,50008,33973],{"class":866},[152,50010,50011],{"class":281,"line":34084},[152,50012,33979],{"class":483},[152,50014,50015],{"class":281,"line":34090},[152,50016,33985],{"class":866},[152,50018,50019],{"class":281,"line":34110},[152,50020,33991],{"class":866},[152,50022,50023,50025,50027],{"class":281,"line":34116},[152,50024,33997],{"class":483},[152,50026,1864],{"class":476},[152,50028,34002],{"class":483},[152,50030,50031],{"class":281,"line":34132},[152,50032,34008],{"class":866},[152,50034,50035,50037,50039,50041,50043,50045,50047],{"class":281,"line":34138},[152,50036,34014],{"class":483},[152,50038,1864],{"class":476},[152,50040,34019],{"class":483},[152,50042,34022],{"class":6858},[152,50044,1864],{"class":476},[152,50046,2026],{"class":293},[152,50048,1825],{"class":483},[152,50050,50051],{"class":281,"line":34152},[152,50052,34034],{"class":866},[152,50054,50055,50057,50059],{"class":281,"line":34158},[152,50056,34040],{"class":483},[152,50058,1864],{"class":476},[152,50060,34045],{"class":483},[152,50062,50063],{"class":281,"line":34173},[152,50064,34051],{"class":866},[152,50066,50067],{"class":281,"line":34179},[152,50068,34057],{"class":483},[152,50070,50071],{"class":281,"line":34188},[152,50072,34063],{"class":866},[152,50074,50075],{"class":281,"line":34194},[152,50076,34069],{"class":483},[152,50078,50079],{"class":281,"line":34203},[152,50080,34075],{"class":866},[152,50082,50083],{"class":281,"line":34209},[152,50084,34081],{"class":483},[152,50086,50087],{"class":281,"line":34215},[152,50088,34087],{"class":866},[152,50090,50091,50093,50095,50097,50099,50101,50103],{"class":281,"line":34224},[152,50092,34093],{"class":483},[152,50094,11109],{"class":476},[152,50096,34098],{"class":483},[152,50098,2263],{"class":476},[152,50100,34103],{"class":483},[152,50102,2000],{"class":293},[152,50104,1825],{"class":483},[152,50106,50107],{"class":281,"line":34230},[152,50108,34113],{"class":866},[152,50110,50111,50113,50115,50117,50119],{"class":281,"line":34241},[152,50112,34119],{"class":483},[152,50114,11109],{"class":476},[152,50116,34124],{"class":483},[152,50118,4592],{"class":476},[152,50120,34129],{"class":483},[152,50122,50123],{"class":281,"line":34247},[152,50124,34135],{"class":866},[152,50126,50127,50129,50131,50133,50135],{"class":281,"line":34266},[152,50128,34141],{"class":483},[152,50130,11109],{"class":476},[152,50132,34103],{"class":483},[152,50134,2000],{"class":293},[152,50136,1825],{"class":483},[152,50138,50139],{"class":281,"line":34272},[152,50140,34155],{"class":866},[152,50142,50143,50145,50147,50149,50151],{"class":281,"line":34283},[152,50144,5046],{"class":476},[152,50146,34163],{"class":483},[152,50148,27653],{"class":476},[152,50150,32943],{"class":293},[152,50152,34170],{"class":483},[152,50154,50155],{"class":281,"line":34289},[152,50156,34176],{"class":866},[152,50158,50159,50161,50163],{"class":281,"line":34309},[152,50160,33947],{"class":483},[152,50162,1864],{"class":476},[152,50164,33952],{"class":483},[152,50166,50167],{"class":281,"line":34325},[152,50168,34191],{"class":866},[152,50170,50171,50173,50175],{"class":281,"line":34331},[152,50172,33962],{"class":483},[152,50174,1864],{"class":476},[152,50176,33967],{"class":483},[152,50178,50179],{"class":281,"line":34345},[152,50180,34206],{"class":866},[152,50182,50183],{"class":281,"line":34351},[152,50184,34212],{"class":483},[152,50186,50187],{"class":281,"line":34357},[152,50188,37693],{"class":866},[152,50190,50191,50193],{"class":281,"line":34368},[152,50192,34218],{"class":476},[152,50194,34221],{"class":483},[152,50196,50197],{"class":281,"line":34374},[152,50198,34227],{"class":866},[152,50200,50201,50203,50205],{"class":281,"line":34380},[152,50202,37708],{"class":483},[152,50204,1864],{"class":476},[152,50206,34002],{"class":483},[152,50208,50209],{"class":281,"line":34390},[152,50210,34244],{"class":866},[152,50212,50213,50215,50217,50219,50221,50223,50225],{"class":281,"line":34396},[152,50214,37721],{"class":483},[152,50216,1864],{"class":476},[152,50218,34019],{"class":483},[152,50220,34022],{"class":6858},[152,50222,1864],{"class":476},[152,50224,2026],{"class":293},[152,50226,1825],{"class":483},[152,50228,50229],{"class":281,"line":34407},[152,50230,34269],{"class":866},[152,50232,50233,50235,50237],{"class":281,"line":34413},[152,50234,37742],{"class":483},[152,50236,1864],{"class":476},[152,50238,34045],{"class":483},[152,50240,50241],{"class":281,"line":34423},[152,50242,34286],{"class":866},[152,50244,50245,50247,50249,50251,50253,50255,50257],{"class":281,"line":34428},[152,50246,37755],{"class":483},[152,50248,11109],{"class":476},[152,50250,37760],{"class":483},[152,50252,2263],{"class":476},[152,50254,34103],{"class":483},[152,50256,2000],{"class":293},[152,50258,1825],{"class":483},[152,50260,50261,50263,50265,50267,50269],{"class":281,"line":34434},[152,50262,37773],{"class":483},[152,50264,11109],{"class":476},[152,50266,34124],{"class":483},[152,50268,4592],{"class":476},[152,50270,34129],{"class":483},[152,50272,50273],{"class":281,"line":34483},[152,50274,37786],{"class":866},[152,50276,50277,50279,50281,50283,50285],{"class":281,"line":34530},[152,50278,37791],{"class":483},[152,50280,11109],{"class":476},[152,50282,34103],{"class":483},[152,50284,2000],{"class":293},[152,50286,1825],{"class":483},[152,50288,50289],{"class":281,"line":34535},[152,50290,34348],{"class":866},[152,50292,50293],{"class":281,"line":34541},[152,50294,34354],{"class":866},[152,50296,50297,50299,50301],{"class":281,"line":34560},[152,50298,34360],{"class":483},[152,50300,2392],{"class":476},[152,50302,34365],{"class":483},[152,50304,50305],{"class":281,"line":34566},[152,50306,34371],{"class":866},[152,50308,50309],{"class":281,"line":34586},[152,50310,34377],{"class":866},[152,50312,50313,50315,50317],{"class":281,"line":34592},[152,50314,34383],{"class":483},[152,50316,2392],{"class":476},[152,50318,34365],{"class":483},[152,50320,50321],{"class":281,"line":34598},[152,50322,34393],{"class":866},[152,50324,50325,50327,50329],{"class":281,"line":34608},[152,50326,34399],{"class":483},[152,50328,2392],{"class":476},[152,50330,34404],{"class":483},[152,50332,50333],{"class":281,"line":34613},[152,50334,34410],{"class":866},[152,50336,50337,50339,50341],{"class":281,"line":34619},[152,50338,34416],{"class":483},[152,50340,2392],{"class":476},[152,50342,34404],{"class":483},[152,50344,50345],{"class":281,"line":34635},[152,50346,307],{"emptyLinePlaceholder":306},[152,50348,50349],{"class":281,"line":34680},[152,50350,34431],{"class":866},[152,50352,50353,50355,50357,50359,50361,50363,50365,50367,50369,50371,50373,50375,50377,50379,50381,50383,50385,50387,50389,50391],{"class":281,"line":34686},[152,50354,33788],{"class":293},[152,50356,1819],{"class":483},[152,50358,5235],{"class":289},[152,50360,33796],{"class":293},[152,50362,34445],{"class":289},[152,50364,2703],{"class":293},[152,50366,34450],{"class":476},[152,50368,2752],{"class":293},[152,50370,34455],{"class":289},[152,50372,2703],{"class":293},[152,50374,34450],{"class":476},[152,50376,2752],{"class":293},[152,50378,5235],{"class":289},[152,50380,34466],{"class":483},[152,50382,2340],{"class":476},[152,50384,2026],{"class":293},[152,50386,34473],{"class":483},[152,50388,2340],{"class":476},[152,50390,2026],{"class":293},[152,50392,34480],{"class":483},[152,50394,50395,50397,50399,50401,50403,50405,50407,50409,50411,50413,50415,50417,50419,50421,50423,50425,50427,50429,50431,50433],{"class":281,"line":34692},[152,50396,33788],{"class":293},[152,50398,1819],{"class":483},[152,50400,5235],{"class":289},[152,50402,33796],{"class":293},[152,50404,34494],{"class":289},[152,50406,2703],{"class":293},[152,50408,34450],{"class":476},[152,50410,2752],{"class":293},[152,50412,34503],{"class":289},[152,50414,2703],{"class":293},[152,50416,34450],{"class":476},[152,50418,2752],{"class":293},[152,50420,5235],{"class":289},[152,50422,34514],{"class":483},[152,50424,2340],{"class":476},[152,50426,2026],{"class":293},[152,50428,34521],{"class":483},[152,50430,2340],{"class":476},[152,50432,2026],{"class":293},[152,50434,34480],{"class":483},[152,50436,50437],{"class":281,"line":34698},[152,50438,307],{"emptyLinePlaceholder":306},[152,50440,50441],{"class":281,"line":34709},[152,50442,34538],{"class":866},[152,50444,50445,50447,50449,50451,50453,50455,50457],{"class":281,"line":34715},[152,50446,4147],{"class":476},[152,50448,34546],{"class":483},[152,50450,2340],{"class":476},[152,50452,2026],{"class":293},[152,50454,2746],{"class":483},[152,50456,487],{"class":476},[152,50458,34557],{"class":483},[152,50460,50461],{"class":281,"line":34721},[152,50462,34563],{"class":866},[152,50464,50465,50467,50469,50471,50473,50475,50477],{"class":281,"line":34727},[152,50466,34569],{"class":483},[152,50468,1858],{"class":293},[152,50470,1864],{"class":476},[152,50472,34576],{"class":483},[152,50474,2340],{"class":476},[152,50476,2026],{"class":293},[152,50478,34583],{"class":483},[152,50480,50481],{"class":281,"line":34745},[152,50482,34589],{"class":866},[152,50484,50485],{"class":281,"line":34759},[152,50486,34595],{"class":866},[152,50488,50489,50491,50493],{"class":281,"line":34768},[152,50490,34601],{"class":483},[152,50492,1864],{"class":476},[152,50494,33651],{"class":483},[152,50496,50497],{"class":281,"line":34777},[152,50498,307],{"emptyLinePlaceholder":306},[152,50500,50501],{"class":281,"line":34786},[152,50502,34616],{"class":866},[152,50504,50505,50507,50509,50511,50513],{"class":281,"line":34795},[152,50506,34622],{"class":483},[152,50508,1864],{"class":476},[152,50510,34627],{"class":483},[152,50512,2340],{"class":476},[152,50514,34632],{"class":483},[152,50516,50517,50519,50521,50523,50525,50527,50529,50531,50533,50535,50537,50539,50541,50543,50545,50547,50549,50551],{"class":281,"line":34801},[152,50518,33788],{"class":293},[152,50520,1819],{"class":483},[152,50522,34642],{"class":289},[152,50524,2703],{"class":293},[152,50526,34647],{"class":476},[152,50528,2752],{"class":293},[152,50530,2352],{"class":289},[152,50532,2703],{"class":293},[152,50534,34647],{"class":476},[152,50536,2752],{"class":293},[152,50538,34660],{"class":289},[152,50540,34663],{"class":483},[152,50542,34666],{"class":476},[152,50544,2714],{"class":293},[152,50546,34671],{"class":483},[152,50548,2136],{"class":476},[152,50550,2714],{"class":293},[152,50552,31834],{"class":483},[152,50554,50555],{"class":281,"line":34807},[152,50556,38070],{"class":866},[152,50558,50559],{"class":281,"line":34815},[152,50560,38075],{"class":866},[152,50562,50563,50565,50567],{"class":281,"line":34820},[152,50564,38080],{"class":483},[152,50566,34704],{"class":289},[152,50568,1825],{"class":483},[152,50570,50571],{"class":281,"line":34826},[152,50572,34724],{"class":866},[152,50574,50575,50577,50579,50581,50583,50585],{"class":281,"line":34837},[152,50576,34730],{"class":483},[152,50578,1864],{"class":476},[152,50580,34735],{"class":483},[152,50582,34738],{"class":6858},[152,50584,1864],{"class":476},[152,50586,3217],{"class":483},[152,50588,50589,50591,50593,50595],{"class":281,"line":34843},[152,50590,34748],{"class":289},[152,50592,841],{"class":483},[152,50594,34753],{"class":293},[152,50596,34756],{"class":483},[152,50598,50599,50601],{"class":281,"line":34863},[152,50600,34762],{"class":289},[152,50602,34765],{"class":483},[152,50604,50605,50607],{"class":281,"line":34869},[152,50606,34771],{"class":289},[152,50608,34774],{"class":483},[152,50610,50611,50613],{"class":281,"line":34875},[152,50612,34780],{"class":289},[152,50614,34783],{"class":483},[152,50616,50617,50619],{"class":281,"line":34881},[152,50618,34789],{"class":289},[152,50620,34792],{"class":483},[152,50622,50623],{"class":281,"line":34898},[152,50624,34798],{"class":483},[152,50626,50627],{"class":281,"line":34904},[152,50628,34804],{"class":866},[152,50630,50631,50633],{"class":281,"line":34910},[152,50632,5732],{"class":476},[152,50634,34812],{"class":483},[152,50636,50637],{"class":281,"line":34916},[152,50638,307],{"emptyLinePlaceholder":306},[152,50640,50641],{"class":281,"line":34922},[152,50642,34823],{"class":866},[152,50644,50645,50647,50649],{"class":281,"line":34928},[152,50646,33284],{"class":476},[152,50648,34831],{"class":285},[152,50650,34834],{"class":483},[152,50652,50653],{"class":281,"line":34955},[152,50654,34840],{"class":866},[152,50656,50657,50659,50661,50663,50665,50667,50669,50671],{"class":281,"line":34979},[152,50658,34846],{"class":483},[152,50660,33030],{"class":6858},[152,50662,1864],{"class":476},[152,50664,1819],{"class":483},[152,50666,2306],{"class":293},[152,50668,2186],{"class":483},[152,50670,2101],{"class":293},[152,50672,31834],{"class":483},[152,50674,50675],{"class":281,"line":34985},[152,50676,34866],{"class":866},[152,50678,50679],{"class":281,"line":34991},[152,50680,34872],{"class":866},[152,50682,50683],{"class":281,"line":34997},[152,50684,34878],{"class":866},[152,50686,50687,50689,50691,50693,50695,50697,50699],{"class":281,"line":35008},[152,50688,33064],{"class":483},[152,50690,2026],{"class":293},[152,50692,2186],{"class":483},[152,50694,1894],{"class":293},[152,50696,2186],{"class":483},[152,50698,2026],{"class":293},[152,50700,1825],{"class":483},[152,50702,50703],{"class":281,"line":35019},[152,50704,34901],{"class":866},[152,50706,50707],{"class":281,"line":35025},[152,50708,34907],{"class":866},[152,50710,50711],{"class":281,"line":35042},[152,50712,34913],{"class":866},[152,50714,50715],{"class":281,"line":35065},[152,50716,34919],{"class":866},[152,50718,50719],{"class":281,"line":35088},[152,50720,34925],{"class":866},[152,50722,50723,50725,50727,50729,50731,50733,50735,50737,50739],{"class":281,"line":35094},[152,50724,34931],{"class":483},[152,50726,34934],{"class":289},[152,50728,34937],{"class":483},[152,50730,34940],{"class":289},[152,50732,2186],{"class":483},[152,50734,34945],{"class":6858},[152,50736,1864],{"class":476},[152,50738,34950],{"class":289},[152,50740,1825],{"class":483},[152,50742,50743,50745,50747,50749,50751,50753,50755,50757,50759],{"class":281,"line":35099},[152,50744,34931],{"class":483},[152,50746,34934],{"class":289},[152,50748,34962],{"class":483},[152,50750,34965],{"class":289},[152,50752,2186],{"class":483},[152,50754,34945],{"class":6858},[152,50756,1864],{"class":476},[152,50758,34974],{"class":289},[152,50760,1825],{"class":483},[152,50762,50763],{"class":281,"line":35108},[152,50764,34982],{"class":866},[152,50766,50767],{"class":281,"line":35118},[152,50768,34988],{"class":483},[152,50770,50771],{"class":281,"line":35124},[152,50772,34994],{"class":866},[152,50774,50775,50777,50779],{"class":281,"line":35129},[152,50776,35000],{"class":483},[152,50778,35003],{"class":289},[152,50780,1825],{"class":483},[152,50782,50783,50785,50787],{"class":281,"line":35135},[152,50784,35011],{"class":483},[152,50786,35014],{"class":289},[152,50788,1825],{"class":483},[152,50790,50791],{"class":281,"line":35148},[152,50792,35022],{"class":866},[152,50794,50795,50797,50799,50801,50803,50805,50807],{"class":281,"line":35154},[152,50796,33064],{"class":483},[152,50798,2026],{"class":293},[152,50800,2186],{"class":483},[152,50802,1894],{"class":293},[152,50804,2186],{"class":483},[152,50806,1894],{"class":293},[152,50808,1825],{"class":483},[152,50810,50811,50813,50815,50817,50819,50821,50823,50825,50827],{"class":281,"line":35165},[152,50812,34931],{"class":483},[152,50814,34934],{"class":289},[152,50816,35049],{"class":483},[152,50818,34940],{"class":289},[152,50820,2186],{"class":483},[152,50822,34945],{"class":6858},[152,50824,1864],{"class":476},[152,50826,35060],{"class":289},[152,50828,1825],{"class":483},[152,50830,50831,50833,50835,50837,50839,50841,50843,50845,50847],{"class":281,"line":35176},[152,50832,34931],{"class":483},[152,50834,34934],{"class":289},[152,50836,35072],{"class":483},[152,50838,34965],{"class":289},[152,50840,2186],{"class":483},[152,50842,34945],{"class":6858},[152,50844,1864],{"class":476},[152,50846,35083],{"class":289},[152,50848,1825],{"class":483},[152,50850,50851],{"class":281,"line":35195},[152,50852,35091],{"class":866},[152,50854,50856],{"class":281,"line":50855},219,[152,50857,34988],{"class":483},[152,50859,50861,50863,50865],{"class":281,"line":50860},220,[152,50862,35000],{"class":483},[152,50864,34934],{"class":289},[152,50866,1825],{"class":483},[152,50868,50870,50872,50874],{"class":281,"line":50869},221,[152,50871,35011],{"class":483},[152,50873,35113],{"class":289},[152,50875,1825],{"class":483},[152,50877,50879],{"class":281,"line":50878},222,[152,50880,35121],{"class":483},[152,50882,50884],{"class":281,"line":50883},223,[152,50885,307],{"emptyLinePlaceholder":306},[152,50887,50889],{"class":281,"line":50888},224,[152,50890,35132],{"class":866},[152,50892,50894,50896,50898,50900,50902],{"class":281,"line":50893},225,[152,50895,3202],{"class":476},[152,50897,32557],{"class":293},[152,50899,4592],{"class":476},[152,50901,32562],{"class":289},[152,50903,5382],{"class":483},[152,50905,50907],{"class":281,"line":50906},226,[152,50908,35151],{"class":866},[152,50910,50912,50914,50916],{"class":281,"line":50911},227,[152,50913,45883],{"class":483},[152,50915,1864],{"class":476},[152,50917,45888],{"class":483},[152,50919,50921,50923,50925],{"class":281,"line":50920},228,[152,50922,35168],{"class":483},[152,50924,1864],{"class":476},[152,50926,35173],{"class":483},[152,50928,50930,50932,50934,50936,50938,50940,50942],{"class":281,"line":50929},229,[152,50931,34730],{"class":483},[152,50933,1864],{"class":476},[152,50935,45905],{"class":483},[152,50937,35186],{"class":6858},[152,50939,1864],{"class":476},[152,50941,2714],{"class":293},[152,50943,1825],{"class":483},[152,50945,50947],{"class":281,"line":50946},230,[152,50948,35198],{"class":483},[262,50950,50952],{"id":50951},"_242测试代码","2.4.2.测试代码",[19,50954,50955],{},"使用测试集进行测试与推理",[270,50957,50959],{"className":31715,"code":50958,"language":31717,"meta":275,"style":275},"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",[277,50960,50961,50967,50977,50987,50998,51008,51012,51016,51024,51029,51033,51050,51054,51058,51062,51066,51070,51102,51106,51114,51118,51130,51134,51138,51142,51146,51150,51154,51158,51162,51180,51194,51198,51208,51218,51228,51234,51238,51242,51250,51254,51270,51278,51282,51286,51294,51302,51306,51310,51314,51318,51324,51328,51338,51346,51354,51358,51362,51366,51374,51378,51394,51398,51402,51406,51418,51422,51434,51438,51442,51454,51458,51468,51472,51476,51488,51492,51500,51504,51508,51516,51520,51528,51532,51536,51540,51544,51548,51564,51572,51576,51580,51598,51604,51608,51618,51626,51634,51638,51642,51646,51650,51658,51662,51678,51682,51690,51698],{"__ignoreMap":275},[152,50962,50963,50965],{"class":281,"line":282},[152,50964,31729],{"class":476},[152,50966,31732],{"class":483},[152,50968,50969,50971,50973,50975],{"class":281,"line":303},[152,50970,31729],{"class":476},[152,50972,32752],{"class":483},[152,50974,32720],{"class":476},[152,50976,32757],{"class":483},[152,50978,50979,50981,50983,50985],{"class":281,"line":310},[152,50980,32074],{"class":476},[152,50982,32735],{"class":483},[152,50984,31729],{"class":476},[152,50986,32740],{"class":483},[152,50988,50989,50991,50993,50995],{"class":281,"line":324},[152,50990,32074],{"class":476},[152,50992,32705],{"class":483},[152,50994,31729],{"class":476},[152,50996,50997],{"class":483}," ImageFolder\n",[152,50999,51000,51002,51004,51006],{"class":281,"line":329},[152,51001,32074],{"class":476},[152,51003,33251],{"class":483},[152,51005,31729],{"class":476},[152,51007,45977],{"class":483},[152,51009,51010],{"class":281,"line":343},[152,51011,307],{"emptyLinePlaceholder":306},[152,51013,51014],{"class":281,"line":348},[152,51015,35288],{"class":866},[152,51017,51018,51020,51022],{"class":281,"line":362},[152,51019,33284],{"class":476},[152,51021,35295],{"class":285},[152,51023,33290],{"class":483},[152,51025,51026],{"class":281,"line":367},[152,51027,51028],{"class":866},"   # 导入自己的数据集，并进行数据处理\n",[152,51030,51031],{"class":281,"line":381},[152,51032,49298],{"class":866},[152,51034,51035,51037,51039,51041,51043,51045,51048],{"class":281,"line":386},[152,51036,49303],{"class":293},[152,51038,1864],{"class":476},[152,51040,2478],{"class":476},[152,51042,2059],{"class":289},[152,51044,2366],{"class":293},[152,51046,51047],{"class":49314},"\u002Fdata\u002Ftest",[152,51049,26744],{"class":289},[152,51051,51052],{"class":281,"line":932},[152,51053,307],{"emptyLinePlaceholder":306},[152,51055,51056],{"class":281,"line":942},[152,51057,49326],{"class":866},[152,51059,51060],{"class":281,"line":949},[152,51061,49331],{"class":866},[152,51063,51064],{"class":281,"line":954},[152,51065,49336],{"class":866},[152,51067,51068],{"class":281,"line":959},[152,51069,49341],{"class":866},[152,51071,51072,51074,51076,51078,51080,51082,51084,51086,51088,51090,51092,51094,51096,51098,51100],{"class":281,"line":970},[152,51073,49346],{"class":483},[152,51075,1864],{"class":476},[152,51077,49351],{"class":483},[152,51079,49354],{"class":293},[152,51081,2186],{"class":483},[152,51083,49359],{"class":293},[152,51085,2186],{"class":483},[152,51087,49364],{"class":293},[152,51089,49367],{"class":483},[152,51091,49370],{"class":293},[152,51093,2186],{"class":483},[152,51095,49375],{"class":293},[152,51097,2186],{"class":483},[152,51099,49380],{"class":293},[152,51101,6299],{"class":483},[152,51103,51104],{"class":281,"line":979},[152,51105,49387],{"class":866},[152,51107,51108,51110,51112],{"class":281,"line":989},[152,51109,49392],{"class":483},[152,51111,1864],{"class":476},[152,51113,49397],{"class":483},[152,51115,51116],{"class":281,"line":996},[152,51117,49402],{"class":866},[152,51119,51120,51122,51124,51126,51128],{"class":281,"line":1001},[152,51121,49407],{"class":483},[152,51123,32838],{"class":293},[152,51125,2186],{"class":483},[152,51127,32838],{"class":293},[152,51129,43959],{"class":483},[152,51131,51132],{"class":281,"line":1006},[152,51133,49420],{"class":866},[152,51135,51136],{"class":281,"line":1018},[152,51137,49425],{"class":483},[152,51139,51140],{"class":281,"line":1027},[152,51141,49430],{"class":483},[152,51143,51144],{"class":281,"line":1037},[152,51145,49435],{"class":866},[152,51147,51148],{"class":281,"line":1044},[152,51149,49440],{"class":866},[152,51151,51152],{"class":281,"line":1049},[152,51153,307],{"emptyLinePlaceholder":306},[152,51155,51156],{"class":281,"line":1054},[152,51157,49449],{"class":866},[152,51159,51160],{"class":281,"line":1065},[152,51161,49454],{"class":866},[152,51163,51164,51166,51168,51170,51172,51174,51176,51178],{"class":281,"line":1074},[152,51165,35302],{"class":483},[152,51167,1864],{"class":476},[152,51169,49463],{"class":483},[152,51171,49466],{"class":293},[152,51173,2186],{"class":483},[152,51175,49471],{"class":6858},[152,51177,1864],{"class":476},[152,51179,49476],{"class":483},[152,51181,51182,51184,51186,51188,51190,51192],{"class":281,"line":1084},[152,51183,35359],{"class":483},[152,51185,1864],{"class":476},[152,51187,32871],{"class":483},[152,51189,32874],{"class":6858},[152,51191,1864],{"class":476},[152,51193,35370],{"class":483},[152,51195,51196],{"class":281,"line":1091},[152,51197,35375],{"class":866},[152,51199,51200,51202,51204,51206],{"class":281,"line":1096},[152,51201,35380],{"class":6858},[152,51203,1864],{"class":476},[152,51205,2026],{"class":293},[152,51207,32803],{"class":483},[152,51209,51210,51212,51214,51216],{"class":281,"line":1101},[152,51211,35391],{"class":6858},[152,51213,1864],{"class":476},[152,51215,32813],{"class":293},[152,51217,32803],{"class":483},[152,51219,51220,51222,51224,51226],{"class":281,"line":1112},[152,51221,35402],{"class":6858},[152,51223,1864],{"class":476},[152,51225,2000],{"class":293},[152,51227,1825],{"class":483},[152,51229,51230,51232],{"class":281,"line":1121},[152,51231,5732],{"class":476},[152,51233,35415],{"class":483},[152,51235,51236],{"class":281,"line":1131},[152,51237,307],{"emptyLinePlaceholder":306},[152,51239,51240],{"class":281,"line":1138},[152,51241,35424],{"class":866},[152,51243,51244,51246,51248],{"class":281,"line":1143},[152,51245,33284],{"class":476},[152,51247,35431],{"class":285},[152,51249,35434],{"class":483},[152,51251,51252],{"class":281,"line":1148},[152,51253,35439],{"class":866},[152,51255,51256,51258,51260,51262,51264,51266,51268],{"class":281,"line":1159},[152,51257,32574],{"class":483},[152,51259,1864],{"class":476},[152,51261,32581],{"class":289},[152,51263,3364],{"class":476},[152,51265,32586],{"class":483},[152,51267,3361],{"class":476},[152,51269,35456],{"class":289},[152,51271,51272,51274,51276],{"class":281,"line":1168},[152,51273,32626],{"class":483},[152,51275,1864],{"class":476},[152,51277,33626],{"class":483},[152,51279,51280],{"class":281,"line":1178},[152,51281,307],{"emptyLinePlaceholder":306},[152,51283,51284],{"class":281,"line":1185},[152,51285,35473],{"class":866},[152,51287,51288,51290,51292],{"class":281,"line":1190},[152,51289,35478],{"class":483},[152,51291,1864],{"class":476},[152,51293,33679],{"class":293},[152,51295,51296,51298,51300],{"class":281,"line":1195},[152,51297,35487],{"class":483},[152,51299,1864],{"class":476},[152,51301,4728],{"class":293},[152,51303,51304],{"class":281,"line":1206},[152,51305,307],{"emptyLinePlaceholder":306},[152,51307,51308],{"class":281,"line":1215},[152,51309,35500],{"class":866},[152,51311,51312],{"class":281,"line":1225},[152,51313,35505],{"class":866},[152,51315,51316],{"class":281,"line":1232},[152,51317,35510],{"class":866},[152,51319,51320,51322],{"class":281,"line":1237},[152,51321,35515],{"class":476},[152,51323,34221],{"class":483},[152,51325,51326],{"class":281,"line":1242},[152,51327,35522],{"class":866},[152,51329,51330,51332,51334,51336],{"class":281,"line":1253},[152,51331,5046],{"class":476},[152,51333,35529],{"class":483},[152,51335,27653],{"class":476},[152,51337,35534],{"class":483},[152,51339,51340,51342,51344],{"class":281,"line":1262},[152,51341,35539],{"class":483},[152,51343,1864],{"class":476},[152,51345,35544],{"class":483},[152,51347,51348,51350,51352],{"class":281,"line":1272},[152,51349,35549],{"class":483},[152,51351,1864],{"class":476},[152,51353,35554],{"class":483},[152,51355,51356],{"class":281,"line":1279},[152,51357,35559],{"class":866},[152,51359,51360],{"class":281,"line":1284},[152,51361,34212],{"class":483},[152,51363,51364],{"class":281,"line":1289},[152,51365,35568],{"class":866},[152,51367,51368,51370,51372],{"class":281,"line":1301},[152,51369,33997],{"class":483},[152,51371,1864],{"class":476},[152,51373,35577],{"class":483},[152,51375,51376],{"class":281,"line":1310},[152,51377,35582],{"class":866},[152,51379,51380,51382,51384,51386,51388,51390,51392],{"class":281,"line":1320},[152,51381,34014],{"class":483},[152,51383,1864],{"class":476},[152,51385,34019],{"class":483},[152,51387,34022],{"class":6858},[152,51389,1864],{"class":476},[152,51391,2026],{"class":293},[152,51393,1825],{"class":483},[152,51395,51396],{"class":281,"line":1327},[152,51397,35603],{"class":866},[152,51399,51400],{"class":281,"line":11528},[152,51401,35608],{"class":866},[152,51403,51404],{"class":281,"line":11536},[152,51405,35613],{"class":866},[152,51407,51408,51410,51412,51414,51416],{"class":281,"line":11541},[152,51409,35618],{"class":483},[152,51411,11109],{"class":476},[152,51413,34124],{"class":483},[152,51415,4592],{"class":476},[152,51417,35627],{"class":483},[152,51419,51420],{"class":281,"line":18219},[152,51421,35632],{"class":866},[152,51423,51424,51426,51428,51430,51432],{"class":281,"line":18225},[152,51425,35637],{"class":483},[152,51427,11109],{"class":476},[152,51429,35642],{"class":483},[152,51431,2000],{"class":293},[152,51433,1825],{"class":483},[152,51435,51436],{"class":281,"line":18248},[152,51437,307],{"emptyLinePlaceholder":306},[152,51439,51440],{"class":281,"line":18254},[152,51441,35655],{"class":866},[152,51443,51444,51446,51448,51450,51452],{"class":281,"line":18277},[152,51445,35660],{"class":483},[152,51447,1864],{"class":476},[152,51449,35665],{"class":483},[152,51451,2392],{"class":476},[152,51453,35670],{"class":483},[152,51455,51456],{"class":281,"line":18291},[152,51457,35675],{"class":866},[152,51459,51460,51462,51464,51466],{"class":281,"line":18311},[152,51461,33788],{"class":293},[152,51463,1819],{"class":483},[152,51465,35684],{"class":289},[152,51467,35687],{"class":483},[152,51469,51470],{"class":281,"line":18317},[152,51471,307],{"emptyLinePlaceholder":306},[152,51473,51474],{"class":281,"line":18328},[152,51475,35696],{"class":866},[152,51477,51478,51480,51482,51484,51486],{"class":281,"line":18351},[152,51479,3202],{"class":476},[152,51481,32557],{"class":293},[152,51483,4592],{"class":476},[152,51485,32562],{"class":289},[152,51487,5382],{"class":483},[152,51489,51490],{"class":281,"line":18373},[152,51491,35713],{"class":866},[152,51493,51494,51496,51498],{"class":281,"line":18378},[152,51495,32626],{"class":483},[152,51497,1864],{"class":476},[152,51499,45888],{"class":483},[152,51501,51502],{"class":281,"line":18384},[152,51503,35726],{"class":866},[152,51505,51506],{"class":281,"line":18398},[152,51507,35731],{"class":866},[152,51509,51510,51512,51514],{"class":281,"line":18411},[152,51511,35736],{"class":483},[152,51513,35739],{"class":289},[152,51515,31834],{"class":483},[152,51517,51518],{"class":281,"line":18416},[152,51519,35746],{"class":866},[152,51521,51522,51524,51526],{"class":281,"line":18430},[152,51523,35359],{"class":483},[152,51525,1864],{"class":476},[152,51527,35755],{"class":483},[152,51529,51530],{"class":281,"line":18435},[152,51531,35760],{"class":866},[152,51533,51534],{"class":281,"line":18441},[152,51535,35765],{"class":483},[152,51537,51538],{"class":281,"line":18446},[152,51539,307],{"emptyLinePlaceholder":306},[152,51541,51542],{"class":281,"line":18460},[152,51543,35774],{"class":866},[152,51545,51546],{"class":281,"line":18465},[152,51547,35779],{"class":866},[152,51549,51550,51552,51554,51556,51558,51560,51562],{"class":281,"line":18470},[152,51551,32574],{"class":483},[152,51553,1864],{"class":476},[152,51555,32581],{"class":289},[152,51557,3364],{"class":476},[152,51559,32586],{"class":483},[152,51561,3361],{"class":476},[152,51563,35456],{"class":289},[152,51565,51566,51568,51570],{"class":281,"line":18484},[152,51567,32626],{"class":483},[152,51569,1864],{"class":476},[152,51571,33626],{"class":483},[152,51573,51574],{"class":281,"line":18496},[152,51575,35808],{"class":866},[152,51577,51578],{"class":281,"line":18501},[152,51579,35813],{"class":866},[152,51581,51582,51584,51586,51588,51591,51593,51596],{"class":281,"line":18514},[152,51583,35818],{"class":483},[152,51585,1864],{"class":476},[152,51587,2697],{"class":483},[152,51589,51590],{"class":289},"'猫'",[152,51592,2186],{"class":483},[152,51594,51595],{"class":289},"'狗'",[152,51597,34583],{"class":483},[152,51599,51600,51602],{"class":281,"line":18519},[152,51601,35515],{"class":476},[152,51603,34221],{"class":483},[152,51605,51606],{"class":281,"line":18524},[152,51607,35883],{"class":866},[152,51609,51610,51612,51614,51616],{"class":281,"line":18529},[152,51611,5046],{"class":476},[152,51613,35890],{"class":483},[152,51615,27653],{"class":476},[152,51617,35534],{"class":483},[152,51619,51620,51622,51624],{"class":281,"line":18542},[152,51621,33947],{"class":483},[152,51623,1864],{"class":476},[152,51625,33952],{"class":483},[152,51627,51628,51630,51632],{"class":281,"line":18547},[152,51629,33962],{"class":483},[152,51631,1864],{"class":476},[152,51633,33967],{"class":483},[152,51635,51636],{"class":281,"line":33970},[152,51637,307],{"emptyLinePlaceholder":306},[152,51639,51640],{"class":281,"line":33976},[152,51641,35919],{"class":866},[152,51643,51644],{"class":281,"line":33982},[152,51645,34212],{"class":483},[152,51647,51648],{"class":281,"line":33988},[152,51649,35928],{"class":866},[152,51651,51652,51654,51656],{"class":281,"line":33994},[152,51653,33997],{"class":483},[152,51655,1864],{"class":476},[152,51657,34002],{"class":483},[152,51659,51660],{"class":281,"line":34005},[152,51661,35941],{"class":866},[152,51663,51664,51666,51668,51670,51672,51674,51676],{"class":281,"line":34011},[152,51665,34014],{"class":483},[152,51667,1864],{"class":476},[152,51669,34019],{"class":483},[152,51671,34022],{"class":6858},[152,51673,1864],{"class":476},[152,51675,2026],{"class":293},[152,51677,1825],{"class":483},[152,51679,51680],{"class":281,"line":34031},[152,51681,35962],{"class":866},[152,51683,51684,51686,51688],{"class":281,"line":34037},[152,51685,35967],{"class":483},[152,51687,1864],{"class":476},[152,51689,35972],{"class":483},[152,51691,51692,51694,51696],{"class":281,"line":34048},[152,51693,35977],{"class":483},[152,51695,1864],{"class":476},[152,51697,35982],{"class":483},[152,51699,51700,51702,51704,51706,51708,51710,51712,51714],{"class":281,"line":34054},[152,51701,35987],{"class":293},[152,51703,1819],{"class":483},[152,51705,35992],{"class":289},[152,51707,35995],{"class":483},[152,51709,35998],{"class":289},[152,51711,2186],{"class":483},[152,51713,36003],{"class":289},[152,51715,36006],{"class":483},[1736,51717,51718],{},"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":275,"searchDepth":303,"depth":303,"links":51720},[51721,51722,51723,51724],{"id":31928,"depth":310,"text":31929},{"id":39176,"depth":310,"text":39177},{"id":42609,"depth":310,"text":42610},{"id":46618,"depth":310,"text":46619},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31920,"description":24991},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51731,"title":51732,"body":51733,"description":24991,"extension":1744,"meta":51740,"navigation":306,"path":51741,"seo":51742,"stem":51743,"__hash__":51744},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51734,"toc":51738},[51735],[10,51736,51732],{"id":51737},"_3yolo模型学习",{"title":275,"searchDepth":303,"depth":303,"links":51739},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51732,"description":24991},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51746,"title":51747,"body":51748,"description":51755,"extension":1744,"meta":51756,"navigation":306,"path":51758,"seo":51759,"stem":51760,"__hash__":51761},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51749,"toc":51753},[51750],[19,51751,51752],{},"yolo模型还未补充",{"title":275,"searchDepth":303,"depth":303,"links":51754},[],"深度学习学习",{"category":51757},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51747,"description":51755},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51763,"title":51764,"body":51765,"description":24991,"extension":1744,"meta":51790,"navigation":306,"path":51791,"seo":51792,"stem":51793,"__hash__":51794},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51766,"toc":51788},[51767,51770,51773,51778,51785],[10,51768,51764],{"id":51769},"_1工具",[19,51771,51772],{},"提示错误插件：有问题会提前报错",[19,51774,51775],{},[401,51776],{"alt":275,"src":51777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,51779,51780],{},[69,51781,51784],{"href":51782,"rel":51783},"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",[245],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,51786,51787],{},"alt键加上下箭头可以实现语句的移动",{"title":275,"searchDepth":303,"depth":303,"links":51789},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51764,"description":24991},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51796,"title":51797,"body":51798,"description":24991,"extension":1744,"meta":54662,"navigation":306,"path":54663,"seo":54664,"stem":54665,"__hash__":54666},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51799,"toc":54613},[51800,51803,51807,51811,51816,51819,51824,51828,51835,51840,51847,51852,51859,51864,51868,51873,51876,51880,51885,51889,51894,51897,51900,51903,51906,51909,51912,51915,51918,51923,51928,51933,51937,51940,51943,51947,51952,51955,51963,51968,51985,51993,51998,52003,52008,52013,52018,52021,52026,52031,52035,52044,52049,52054,52058,52063,52066,52070,52075,52083,52088,52093,52096,52101,52106,52111,52114,52117,52120,52125,52130,52133,52138,52141,52146,52149,52152,52155,52160,52163,52166,52181,52186,52191,52196,52199,52202,52205,52219,52222,52227,52232,52235,52238,52241,52244,52247,52250,52253,52257,52261,52266,52270,52273,52278,52283,52286,52291,52294,52298,52303,52306,52309,52312,52315,52318,52321,52324,52327,52330,52334,52339,52344,52349,52352,52355,52359,52364,52367,52371,52374,52377,52382,52385,52388,52392,52396,52399,52404,52409,52412,52441,52446,52451,52456,52461,52465,52470,52474,52479,52482,52486,52490,52495,52499,52504,52509,52513,52518,52521,52523,52526,52531,52535,52540,52544,52548,52553,52558,52563,52568,52572,52577,52582,52587,52590,52593,52598,52601,52606,52611,52616,52621,52625,53432,53436,53779,53784,53787,53790,53793,53796,53799,53802,53805,53808,53810,53813,53815,53818,53822,53827,53830,53833,53836,53840,53845,53850,53870,53873,53877,53882,53887,53904,53908,53937,53941,53963,53965,54004,54012,54018,54022,54025,54028,54033,54038,54041,54044,54047,54052,54057,54060,54063,54066,54069,54072,54075,54078,54081,54084,54087,54090,54092,54095,54098,54101,54104,54107,54110,54113,54116,54120,54125,54128,54133,54136,54139,54142,54145,54148,54151,54154,54156,54159,54162,54165,54168,54171,54174,54178,54181,54190,54193,54198,54201,54206,54209,54212,54215,54218,54221,54224,54227,54231,54235,54238,54241,54246,54251,54256,54260,54265,54270,54273,54276,54279,54282,54285,54290,54293,54298,54300,54305,54308,54312,54317,54320,54323,54328,54332,54335,54340,54343,54346,54375,54380,54383,54386,54389,54392,54395,54399,54402,54488,54492,54495,54500,54505,54512,54515,54518,54521,54524,54527,54532,54537,54540,54543,54546,54549,54552,54555,54558,54561,54564,54566,54569,54573,54578,54583,54588,54591,54596,54601,54604,54607,54610],[10,51801,51797],{"id":51802},"_2基础语法",[1760,51804,51806],{"id":51805},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[14,51808,51810],{"id":51809},"_211-js组成","2.1.1 js组成",[416,51812,51813],{},[419,51814,51815],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,51817,51818],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[416,51820,51821],{"start":303},[419,51822,51823],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[14,51825,51827],{"id":51826},"_212-js书写位置","2.1.2 js书写位置",[416,51829,51830],{},[419,51831,51832],{},[694,51833,51834],{},"内部 JavaScript",[19,51836,51837],{},[401,51838],{"alt":275,"src":51839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[416,51841,51842],{"start":303},[419,51843,51844],{},[694,51845,51846],{},"外部 JavaScript",[19,51848,51849],{},[401,51850],{"alt":275,"src":51851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[416,51853,51854],{"start":310},[419,51855,51856],{},[694,51857,51858],{},"内联 JavaScript",[19,51860,51861],{},[401,51862],{"alt":275,"src":51863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[14,51865,51867],{"id":51866},"_213-javascript注释","2.1.3 JavaScript注释",[19,51869,51870],{},[401,51871],{"alt":275,"src":51872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51874,51875],{},"alt+shift+a一定要记住！",[14,51877,51879],{"id":51878},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51881,51882],{},[401,51883],{"alt":275,"src":51884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[14,51886,51888],{"id":51887},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[416,51890,51891],{},[419,51892,51893],{},"输出语法：",[19,51895,51896],{},"①document.write('要出的内容')",[19,51898,51899],{},"向body内输出内容；",[19,51901,51902],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51904,51905],{},"②alert('要出的内容')",[19,51907,51908],{},"页面弹出警告对话框",[19,51910,51911],{},"③console.log('控制台打印')",[19,51913,51914],{},"控制台输出语法，程序员调试使用",[19,51916,51917],{},"输入log就行，自动生成：",[19,51919,51920],{},[401,51921],{"alt":275,"src":51922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[416,51924,51925],{"start":303},[419,51926,51927],{},"输入语法：",[19,51929,51930],{},[401,51931],{"alt":275,"src":51932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[14,51934,51936],{"id":51935},"_2116-字面量","21.1.6 字面量",[19,51938,51939],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51941,51942],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[1760,51944,51946],{"id":51945},"_22-变量","2.2 变量",[416,51948,51949],{},[419,51950,51951],{},"变量声明",[19,51953,51954],{},"let 变量名",[698,51956,51957,51960],{},[419,51958,51959],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[419,51961,51962],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[416,51964,51965],{"start":303},[419,51966,51967],{},"变量赋值",[270,51969,51973],{"className":51970,"code":51971,"language":51972,"meta":275,"style":275},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[277,51974,51975,51980],{"__ignoreMap":275},[152,51976,51977],{"class":281,"line":282},[152,51978,51979],{"class":483},"let age\n",[152,51981,51982],{"class":281,"line":303},[152,51983,51984],{"class":483},"age=18\n",[416,51986,51987,51990],{"start":310},[419,51988,51989],{},"连这些（变量的初始化）：let age=18",[419,51991,51992],{},"更新变量",[19,51994,51995],{},[401,51996],{"alt":275,"src":51997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[416,51999,52000],{"start":329},[419,52001,52002],{},"声明多个变量",[19,52004,52005],{},[401,52006],{"alt":275,"src":52007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[416,52009,52010],{"start":343},[419,52011,52012],{},"变量命名规则与规范",[19,52014,52015],{},[401,52016],{"alt":275,"src":52017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52019,52020],{},"遵守小驼峰！",[416,52022,52023],{"start":348},[419,52024,52025],{},"变量拓展-let和var的区别",[19,52027,52028],{},[401,52029],{"alt":275,"src":52030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[1760,52032,52034],{"id":52033},"_23-数组","2.3 数组",[270,52036,52038],{"className":51970,"code":52037,"language":51972,"meta":275,"style":275},"let arr = []\n",[277,52039,52040],{"__ignoreMap":275},[152,52041,52042],{"class":281,"line":282},[152,52043,52037],{"class":483},[19,52045,52046],{},[401,52047],{"alt":275,"src":52048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52050,52051],{},[401,52052],{"alt":275,"src":52053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[1760,52055,52057],{"id":52056},"_24-常量","2.4 常量",[19,52059,52060],{},[401,52061],{"alt":275,"src":52062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52064,52065],{},"const — 类似于 let ，但是变量的值无法被修改",[1760,52067,52069],{"id":52068},"_25-数据类型","2.5 数据类型",[19,52071,52072],{},[401,52073],{"alt":275,"src":52074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[416,52076,52077,52080],{},[419,52078,52079],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[419,52081,52082],{},"算数运算符：",[19,52084,52085],{},[401,52086],{"alt":275,"src":52087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[416,52089,52090],{"start":310},[419,52091,52092],{},"数字类型（Number）",[19,52094,52095],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52097,52098],{},[401,52099],{"alt":275,"src":52100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[416,52102,52103],{"start":324},[419,52104,52105],{},"字符串类型（string）",[19,52107,52108],{},[401,52109],{"alt":275,"src":52110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52112,52113],{},"反引号也是可以使用的",[19,52115,52116],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52118,52119],{},"例如：document.write(\"我今年\"+age+\"岁\")",[416,52121,52122],{"start":329},[419,52123,52124],{},"模板字符串",[19,52126,52127],{},[401,52128],{"alt":275,"src":52129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52131,52132],{},"类似于python的字符串格式化",[416,52134,52135],{"start":343},[419,52136,52137],{},"布尔类型",[19,52139,52140],{},"true 和 false",[416,52142,52143],{"start":348},[419,52144,52145],{},"未定义类型（underfined）",[19,52147,52148],{},"表示没有赋值",[19,52150,52151],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52153,52154],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[416,52156,52157],{"start":362},[419,52158,52159],{},"null（空类型）",[19,52161,52162],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52164,52165],{},"赋值了，但是内容为空",[270,52167,52169],{"className":51970,"code":52168,"language":51972,"meta":275,"style":275},"typeof null\n输出的是'object'，是一个对象数据类型\n",[277,52170,52171,52176],{"__ignoreMap":275},[152,52172,52173],{"class":281,"line":282},[152,52174,52175],{"class":483},"typeof null\n",[152,52177,52178],{"class":281,"line":303},[152,52179,52180],{"class":483},"输出的是'object'，是一个对象数据类型\n",[416,52182,52183],{"start":367},[419,52184,52185],{},"控制台检测数据类型",[19,52187,52188],{},[401,52189],{"alt":275,"src":52190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[416,52192,52193],{"start":381},[419,52194,52195],{},"类型转换",[19,52197,52198],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52200,52201],{},"转换方式：隐式转换和显示转换",[19,52203,52204],{},"①隐式转换",[698,52206,52207,52210,52213,52216],{},[419,52208,52209],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[419,52211,52212],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[419,52214,52215],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[419,52217,52218],{},"任何数据和字符串相加结果都是字符串",[19,52220,52221],{},"②显示转换",[19,52223,52224],{},[401,52225],{"alt":275,"src":52226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52228,52229],{},[401,52230],{"alt":275,"src":52231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52233,52234],{},"在输入的时候要用好隐式转换，简单写起来",[19,52236,52237],{},"let num = +prompt(’请输入数字：‘)",[19,52239,52240],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52242,52243],{},"console.log(parseInt('12.333px'))",[19,52245,52246],{},"输出为：12",[19,52248,52249],{},"console.log(parseInt('a'a'a12.333px'))",[19,52251,52252],{},"输出：NaN",[1760,52254,52256],{"id":52255},"_26-运算符","2.6 运算符",[14,52258,52260],{"id":52259},"_261-赋值运算符","2.6.1 赋值运算符",[19,52262,52263],{},[401,52264],{"alt":275,"src":52265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[14,52267,52269],{"id":52268},"_262-一元运算符","2.6.2 一元运算符",[19,52271,52272],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52274,52275],{},[401,52276],{"alt":275,"src":52277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52279,52280],{},[401,52281],{"alt":275,"src":52282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52284,52285],{},"两者的区别：",[19,52287,52288],{},[401,52289],{"alt":275,"src":52290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52292,52293],{},"前置先自加；后置后加，代码执行完之后再加",[14,52295,52297],{"id":52296},"_263-比较运算符","2.6.3 比较运算符",[19,52299,52300],{},[401,52301],{"alt":275,"src":52302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52304,52305],{},"比较运算符也有隐式转换",[19,52307,52308],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52310,52311],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52313,52314],{},"要使用三等，开发的时候",[19,52316,52317],{},"NaN不等于任何人，包括它自己",[19,52319,52320],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52322,52323],{},"7\u002F10=0.7",[19,52325,52326],{},"最后：0.5+0.2=0.7",[19,52328,52329],{},"字符串比较，比较的是字符对应的ASCII码",[14,52331,52333],{"id":52332},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52335,52336],{},[401,52337],{"alt":275,"src":52338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52340,52341],{},[401,52342],{"alt":275,"src":52343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52345,52346],{},[401,52347],{"alt":275,"src":52348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52350,52351],{},"上述题目选D",[19,52353,52354],{},"与真2假1；或真1假2",[14,52356,52358],{"id":52357},"_265-运算符优先级","2.6.5 运算符优先级",[19,52360,52361],{},[401,52362],{"alt":275,"src":52363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52365,52366],{},"先算逻辑与，后算逻辑或",[1760,52368,52370],{"id":52369},"_27-语句","2.7 语句",[19,52372,52373],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52375,52376],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52378,52379],{},[401,52380],{"alt":275,"src":52381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52383,52384],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52386,52387],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[14,52389,52391],{"id":52390},"_271-分支语句","2.7.1 分支语句",[262,52393,52395],{"id":52394},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52397,52398],{},"if语句单行简单的话，可以不写{}，写在一行就行",[416,52400,52401],{},[419,52402,52403],{},"单分支语句",[19,52405,52406],{},[401,52407],{"alt":275,"src":52408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52410,52411],{},"除了0，所有数字都为真",[270,52413,52415],{"className":51970,"code":52414,"language":51972,"meta":275,"style":275},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[277,52416,52417,52422,52427,52432,52436],{"__ignoreMap":275},[152,52418,52419],{"class":281,"line":282},[152,52420,52421],{"class":483},"if（0) {\n",[152,52423,52424],{"class":281,"line":303},[152,52425,52426],{"class":483},"    let a=1\n",[152,52428,52429],{"class":281,"line":310},[152,52430,52431],{"class":483},"    alert(typeof a)\n",[152,52433,52434],{"class":281,"line":324},[152,52435,3236],{"class":483},[152,52437,52438],{"class":281,"line":329},[152,52439,52440],{"class":483},"不输出，括号为假\n",[416,52442,52443],{"start":303},[419,52444,52445],{},"双分支语句",[19,52447,52448],{},[401,52449],{"alt":275,"src":52450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[416,52452,52453],{"start":310},[419,52454,52455],{},"多分支语句",[19,52457,52458],{},[401,52459],{"alt":275,"src":52460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[262,52462,52464],{"id":52463},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52466,52467],{},[401,52468],{"alt":275,"src":52469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[262,52471,52473],{"id":52472},"_2713-switch语句","2.7.1.3 switch语句",[19,52475,52476],{},[401,52477],{"alt":275,"src":52478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52480,52481],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[14,52483,52485],{"id":52484},"_272-循环语句","2.7.2 循环语句",[262,52487,52489],{"id":52488},"_2721-断点演示","2.7.2.1 断点演示",[19,52491,52492],{},[401,52493],{"alt":275,"src":52494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[262,52496,52498],{"id":52497},"_2722-while循环","2.7.2.2 while循环",[19,52500,52501],{},[401,52502],{"alt":275,"src":52503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52505,52506],{},[401,52507],{"alt":275,"src":52508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[262,52510,52512],{"id":52511},"_2723-for循环","2.7.2.3 for循环",[19,52514,52515],{},[401,52516],{"alt":275,"src":52517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52519,52520],{},"for(;;) {",[19,52522,2752],{},[19,52524,52525],{},"表示无限循环",[19,52527,52528],{},[401,52529],{"alt":275,"src":52530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[262,52532,52534],{"id":52533},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52536,52537],{},[401,52538],{"alt":275,"src":52539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[1760,52541,52543],{"id":52542},"_28-数组","2.8 数组",[14,52545,52547],{"id":52546},"_281-基础认识","2.8.1 基础认识",[19,52549,52550],{},[401,52551],{"alt":275,"src":52552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,52554,52555],{},[401,52556],{"alt":275,"src":52557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,52559,52560],{},[401,52561],{"alt":275,"src":52562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,52564,52565],{},[401,52566],{"alt":275,"src":52567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[14,52569,52571],{"id":52570},"_282-操作数组","2.8.2 操作数组",[19,52573,52574],{},[401,52575],{"alt":275,"src":52576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[416,52578,52579],{},[419,52580,52581],{},"添加元素",[19,52583,52584],{},[401,52585],{"alt":275,"src":52586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,52588,52589],{},"console.log(arr.push('green'))",[19,52591,52592],{},"输出结果：为新数组的长度",[19,52594,52595],{},[401,52596],{"alt":275,"src":52597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,52599,52600],{},"push用的非常多，一定要记住",[416,52602,52603],{},[419,52604,52605],{},"删除元素",[19,52607,52608],{},[401,52609],{"alt":275,"src":52610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,52612,52613],{},[401,52614],{"alt":275,"src":52615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,52617,52618],{},[401,52619],{"alt":275,"src":52620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[14,52622,52624],{"id":52623},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[270,52626,52628],{"className":51970,"code":52627,"language":51972,"meta":275,"style":275},"\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",[277,52629,52630,52645,52661,52665,52674,52692,52716,52738,52752,52760,52767,52779,52790,52794,52798,52805,52817,52832,52845,52864,52881,52896,52908,52920,52932,52936,52940,52951,52961,52973,52985,52997,53008,53012,53016,53028,53032,53046,53050,53054,53065,53079,53091,53105,53109,53118,53127,53131,53140,53144,53153,53158,53163,53176,53204,53209,53214,53239,53244,53248,53253,53258,53273,53277,53282,53312,53324,53340,53356,53370,53375,53382,53386,53391,53404,53412,53420,53424],{"__ignoreMap":275},[152,52631,52632,52635,52639,52642],{"class":281,"line":282},[152,52633,52634],{"class":483},"\u003C!",[152,52636,52638],{"class":52637},"s9eBZ","DOCTYPE",[152,52640,52641],{"class":285}," html",[152,52643,52644],{"class":483},">\n",[152,52646,52647,52649,52651,52654,52656,52659],{"class":281,"line":303},[152,52648,844],{"class":483},[152,52650,51972],{"class":52637},[152,52652,52653],{"class":285}," lang",[152,52655,1864],{"class":483},[152,52657,52658],{"class":289},"\"en\"",[152,52660,52644],{"class":483},[152,52662,52663],{"class":281,"line":310},[152,52664,307],{"emptyLinePlaceholder":306},[152,52666,52667,52669,52672],{"class":281,"line":324},[152,52668,844],{"class":483},[152,52670,52671],{"class":52637},"head",[152,52673,52644],{"class":483},[152,52675,52676,52679,52682,52685,52687,52690],{"class":281,"line":329},[152,52677,52678],{"class":483},"    \u003C",[152,52680,52681],{"class":52637},"meta",[152,52683,52684],{"class":285}," charset",[152,52686,1864],{"class":483},[152,52688,52689],{"class":289},"\"UTF-8\"",[152,52691,52644],{"class":483},[152,52693,52694,52696,52698,52701,52703,52706,52709,52711,52714],{"class":281,"line":343},[152,52695,52678],{"class":483},[152,52697,52681],{"class":52637},[152,52699,52700],{"class":285}," http-equiv",[152,52702,1864],{"class":483},[152,52704,52705],{"class":289},"\"X-UA-Compatible\"",[152,52707,52708],{"class":285}," content",[152,52710,1864],{"class":483},[152,52712,52713],{"class":289},"\"IE=edge\"",[152,52715,52644],{"class":483},[152,52717,52718,52720,52722,52724,52726,52729,52731,52733,52736],{"class":281,"line":348},[152,52719,52678],{"class":483},[152,52721,52681],{"class":52637},[152,52723,16535],{"class":285},[152,52725,1864],{"class":483},[152,52727,52728],{"class":289},"\"viewport\"",[152,52730,52708],{"class":285},[152,52732,1864],{"class":483},[152,52734,52735],{"class":289},"\"width=device-width, initial-scale=1.0\"",[152,52737,52644],{"class":483},[152,52739,52740,52742,52745,52748,52750],{"class":281,"line":362},[152,52741,52678],{"class":483},[152,52743,52744],{"class":52637},"title",[152,52746,52747],{"class":483},">Document\u003C\u002F",[152,52749,52744],{"class":52637},[152,52751,52644],{"class":483},[152,52753,52754,52756,52758],{"class":281,"line":367},[152,52755,52678],{"class":483},[152,52757,1736],{"class":52637},[152,52759,52644],{"class":483},[152,52761,52762,52765],{"class":281,"line":381},[152,52763,52764],{"class":52637},"        *",[152,52766,17187],{"class":483},[152,52768,52769,52772,52775,52777],{"class":281,"line":386},[152,52770,52771],{"class":293},"            margin",[152,52773,52774],{"class":483},": ",[152,52776,2000],{"class":293},[152,52778,2965],{"class":483},[152,52780,52781,52784,52786,52788],{"class":281,"line":932},[152,52782,52783],{"class":293},"            padding",[152,52785,52774],{"class":483},[152,52787,2000],{"class":293},[152,52789,2965],{"class":483},[152,52791,52792],{"class":281,"line":942},[152,52793,4179],{"class":483},[152,52795,52796],{"class":281,"line":949},[152,52797,307],{"emptyLinePlaceholder":306},[152,52799,52800,52803],{"class":281,"line":954},[152,52801,52802],{"class":285},"        .box",[152,52804,17187],{"class":483},[152,52806,52807,52810,52812,52815],{"class":281,"line":959},[152,52808,52809],{"class":293},"            display",[152,52811,52774],{"class":483},[152,52813,52814],{"class":293},"flex",[152,52816,2965],{"class":483},[152,52818,52819,52822,52824,52827,52830],{"class":281,"line":970},[152,52820,52821],{"class":293},"            width",[152,52823,52774],{"class":483},[152,52825,52826],{"class":293},"700",[152,52828,52829],{"class":476},"px",[152,52831,2965],{"class":483},[152,52833,52834,52837,52839,52841,52843],{"class":281,"line":979},[152,52835,52836],{"class":293},"            height",[152,52838,52774],{"class":483},[152,52840,5615],{"class":293},[152,52842,52829],{"class":476},[152,52844,2965],{"class":483},[152,52846,52847,52850,52852,52854,52856,52859,52862],{"class":281,"line":989},[152,52848,52849],{"class":293},"            border-left",[152,52851,52774],{"class":483},[152,52853,2026],{"class":293},[152,52855,52829],{"class":476},[152,52857,52858],{"class":293}," solid",[152,52860,52861],{"class":293}," pink",[152,52863,2965],{"class":483},[152,52865,52866,52869,52871,52873,52875,52877,52879],{"class":281,"line":996},[152,52867,52868],{"class":293},"            border-bottom",[152,52870,52774],{"class":483},[152,52872,2026],{"class":293},[152,52874,52829],{"class":476},[152,52876,52858],{"class":293},[152,52878,52861],{"class":293},[152,52880,2965],{"class":483},[152,52882,52883,52885,52887,52889,52891,52894],{"class":281,"line":1001},[152,52884,52771],{"class":293},[152,52886,52774],{"class":483},[152,52888,2464],{"class":293},[152,52890,52829],{"class":476},[152,52892,52893],{"class":293}," auto",[152,52895,2965],{"class":483},[152,52897,52898,52901,52903,52906],{"class":281,"line":1006},[152,52899,52900],{"class":293},"            justify-content",[152,52902,52774],{"class":483},[152,52904,52905],{"class":293},"space-around",[152,52907,2965],{"class":483},[152,52909,52910,52913,52915,52918],{"class":281,"line":1018},[152,52911,52912],{"class":293},"            align-items",[152,52914,52774],{"class":483},[152,52916,52917],{"class":293},"flex-end",[152,52919,2965],{"class":483},[152,52921,52922,52925,52927,52930],{"class":281,"line":1027},[152,52923,52924],{"class":293},"            text-align",[152,52926,52774],{"class":483},[152,52928,52929],{"class":293},"center",[152,52931,2965],{"class":483},[152,52933,52934],{"class":281,"line":1037},[152,52935,4179],{"class":483},[152,52937,52938],{"class":281,"line":1044},[152,52939,307],{"emptyLinePlaceholder":306},[152,52941,52942,52944,52946,52949],{"class":281,"line":1049},[152,52943,52802],{"class":285},[152,52945,487],{"class":476},[152,52947,52948],{"class":52637},"div",[152,52950,17187],{"class":483},[152,52952,52953,52955,52957,52959],{"class":281,"line":1054},[152,52954,52809],{"class":293},[152,52956,52774],{"class":483},[152,52958,52814],{"class":293},[152,52960,2965],{"class":483},[152,52962,52963,52965,52967,52969,52971],{"class":281,"line":1065},[152,52964,52821],{"class":293},[152,52966,52774],{"class":483},[152,52968,2464],{"class":293},[152,52970,52829],{"class":476},[152,52972,2965],{"class":483},[152,52974,52975,52978,52980,52983],{"class":281,"line":1074},[152,52976,52977],{"class":293},"            background-color",[152,52979,52774],{"class":483},[152,52981,52982],{"class":293},"pink",[152,52984,2965],{"class":483},[152,52986,52987,52990,52992,52995],{"class":281,"line":1084},[152,52988,52989],{"class":293},"            flex-direction",[152,52991,52774],{"class":483},[152,52993,52994],{"class":293},"column",[152,52996,2965],{"class":483},[152,52998,52999,53001,53003,53006],{"class":281,"line":1091},[152,53000,52900],{"class":293},[152,53002,52774],{"class":483},[152,53004,53005],{"class":293},"space-between",[152,53007,2965],{"class":483},[152,53009,53010],{"class":281,"line":1096},[152,53011,4179],{"class":483},[152,53013,53014],{"class":281,"line":1101},[152,53015,307],{"emptyLinePlaceholder":306},[152,53017,53018,53020,53023,53026],{"class":281,"line":1112},[152,53019,52802],{"class":285},[152,53021,53022],{"class":52637}," div",[152,53024,53025],{"class":52637}," span",[152,53027,17187],{"class":483},[152,53029,53030],{"class":281,"line":1121},[152,53031,307],{"emptyLinePlaceholder":306},[152,53033,53034,53037,53039,53042,53044],{"class":281,"line":1131},[152,53035,53036],{"class":293},"            margin-top",[152,53038,52774],{"class":483},[152,53040,53041],{"class":293},"-20",[152,53043,52829],{"class":476},[152,53045,2965],{"class":483},[152,53047,53048],{"class":281,"line":1138},[152,53049,4179],{"class":483},[152,53051,53052],{"class":281,"line":1143},[152,53053,307],{"emptyLinePlaceholder":306},[152,53055,53056,53058,53060,53063],{"class":281,"line":1148},[152,53057,52802],{"class":285},[152,53059,53022],{"class":52637},[152,53061,53062],{"class":52637}," h4",[152,53064,17187],{"class":483},[152,53066,53067,53070,53072,53075,53077],{"class":281,"line":1159},[152,53068,53069],{"class":293},"            margin-bottom",[152,53071,52774],{"class":483},[152,53073,53074],{"class":293},"-35",[152,53076,52829],{"class":476},[152,53078,2965],{"class":483},[152,53080,53081,53083,53085,53087,53089],{"class":281,"line":1168},[152,53082,52821],{"class":293},[152,53084,52774],{"class":483},[152,53086,2164],{"class":293},[152,53088,52829],{"class":476},[152,53090,2965],{"class":483},[152,53092,53093,53096,53098,53101,53103],{"class":281,"line":1178},[152,53094,53095],{"class":293},"            margin-left",[152,53097,52774],{"class":483},[152,53099,53100],{"class":293},"-10",[152,53102,52829],{"class":476},[152,53104,2965],{"class":483},[152,53106,53107],{"class":281,"line":1185},[152,53108,4179],{"class":483},[152,53110,53111,53114,53116],{"class":281,"line":1190},[152,53112,53113],{"class":483},"    \u003C\u002F",[152,53115,1736],{"class":52637},[152,53117,52644],{"class":483},[152,53119,53120,53123,53125],{"class":281,"line":1195},[152,53121,53122],{"class":483},"\u003C\u002F",[152,53124,52671],{"class":52637},[152,53126,52644],{"class":483},[152,53128,53129],{"class":281,"line":1206},[152,53130,307],{"emptyLinePlaceholder":306},[152,53132,53133,53135,53138],{"class":281,"line":1215},[152,53134,844],{"class":483},[152,53136,53137],{"class":52637},"body",[152,53139,52644],{"class":483},[152,53141,53142],{"class":281,"line":1225},[152,53143,307],{"emptyLinePlaceholder":306},[152,53145,53146,53148,53151],{"class":281,"line":1232},[152,53147,52678],{"class":483},[152,53149,53150],{"class":52637},"script",[152,53152,52644],{"class":483},[152,53154,53155],{"class":281,"line":1237},[152,53156,53157],{"class":866},"        \u002F\u002F 1. 四次弹框效果\n",[152,53159,53160],{"class":281,"line":1242},[152,53161,53162],{"class":866},"        \u002F\u002F 声明一个新的数组\n",[152,53164,53165,53168,53171,53173],{"class":281,"line":1253},[152,53166,53167],{"class":476},"        let",[152,53169,53170],{"class":483}," arr ",[152,53172,1864],{"class":476},[152,53174,53175],{"class":483}," []\n",[152,53177,53178,53180,53182,53185,53187,53189,53191,53193,53195,53198,53200,53202],{"class":281,"line":1262},[152,53179,5046],{"class":476},[152,53181,3322],{"class":483},[152,53183,53184],{"class":476},"let",[152,53186,11070],{"class":483},[152,53188,1864],{"class":476},[152,53190,26729],{"class":293},[152,53192,11077],{"class":483},[152,53194,3259],{"class":476},[152,53196,53197],{"class":293}," 4",[152,53199,4857],{"class":483},[152,53201,3943],{"class":476},[152,53203,14058],{"class":483},[152,53205,53206],{"class":281,"line":1272},[152,53207,53208],{"class":866},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[152,53210,53211],{"class":281,"line":1279},[152,53212,53213],{"class":866},"            \u002F\u002F arr.push(num)\n",[152,53215,53216,53219,53222,53224,53227,53229,53232,53234,53237],{"class":281,"line":1284},[152,53217,53218],{"class":483},"            arr.",[152,53220,53221],{"class":285},"push",[152,53223,1819],{"class":483},[152,53225,53226],{"class":285},"prompt",[152,53228,1819],{"class":483},[152,53230,53231],{"class":289},"`请输入第${",[152,53233,2249],{"class":483},[152,53235,53236],{"class":289},"}季度的数据:`",[152,53238,31834],{"class":483},[152,53240,53241],{"class":281,"line":1289},[152,53242,53243],{"class":866},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[152,53245,53246],{"class":281,"line":1301},[152,53247,4179],{"class":483},[152,53249,53250],{"class":281,"line":1310},[152,53251,53252],{"class":866},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[152,53254,53255],{"class":281,"line":1320},[152,53256,53257],{"class":866},"        \u002F\u002F 盒子开头\n",[152,53259,53260,53263,53266,53268,53271],{"class":281,"line":1327},[152,53261,53262],{"class":483},"        document.",[152,53264,53265],{"class":285},"write",[152,53267,1819],{"class":483},[152,53269,53270],{"class":289},"` \u003Cdiv class=\"box\">`",[152,53272,1825],{"class":483},[152,53274,53275],{"class":281,"line":11528},[152,53276,307],{"emptyLinePlaceholder":306},[152,53278,53279],{"class":281,"line":11536},[152,53280,53281],{"class":866},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[152,53283,53284,53286,53288,53290,53292,53294,53296,53298,53300,53303,53306,53308,53310],{"class":281,"line":11541},[152,53285,5046],{"class":476},[152,53287,3322],{"class":483},[152,53289,53184],{"class":476},[152,53291,11070],{"class":483},[152,53293,1864],{"class":476},[152,53295,5735],{"class":293},[152,53297,11077],{"class":483},[152,53299,844],{"class":476},[152,53301,53302],{"class":483}," arr.",[152,53304,53305],{"class":293},"length",[152,53307,4857],{"class":483},[152,53309,3943],{"class":476},[152,53311,14058],{"class":483},[152,53313,53314,53317,53319,53321],{"class":281,"line":18219},[152,53315,53316],{"class":483},"            document.",[152,53318,53265],{"class":285},[152,53320,1819],{"class":483},[152,53322,53323],{"class":289},"`\n",[152,53325,53326,53329,53331,53333,53335,53337],{"class":281,"line":18225},[152,53327,53328],{"class":289},"              \u003Cdiv style=\"height: ${",[152,53330,5522],{"class":483},[152,53332,2697],{"class":289},[152,53334,2249],{"class":483},[152,53336,2746],{"class":289},[152,53338,53339],{"class":289},"}px;\">\n",[152,53341,53342,53345,53347,53349,53351,53353],{"class":281,"line":18248},[152,53343,53344],{"class":289},"                \u003Cspan>${",[152,53346,5522],{"class":483},[152,53348,2697],{"class":289},[152,53350,2249],{"class":483},[152,53352,2746],{"class":289},[152,53354,53355],{"class":289},"}\u003C\u002Fspan>\n",[152,53357,53358,53361,53363,53365,53367],{"class":281,"line":18254},[152,53359,53360],{"class":289},"                \u003Ch4>第${",[152,53362,2249],{"class":483},[152,53364,46903],{"class":476},[152,53366,26729],{"class":293},[152,53368,53369],{"class":289},"}季度\u003C\u002Fh4>\n",[152,53371,53372],{"class":281,"line":18277},[152,53373,53374],{"class":289},"              \u003C\u002Fdiv>          \n",[152,53376,53377,53380],{"class":281,"line":18291},[152,53378,53379],{"class":289},"            `",[152,53381,1825],{"class":483},[152,53383,53384],{"class":281,"line":18311},[152,53385,4179],{"class":483},[152,53387,53388],{"class":281,"line":18317},[152,53389,53390],{"class":866},"        \u002F\u002F 盒子结尾\n",[152,53392,53393,53395,53397,53399,53402],{"class":281,"line":18328},[152,53394,53262],{"class":483},[152,53396,53265],{"class":285},[152,53398,1819],{"class":483},[152,53400,53401],{"class":289},"` \u003C\u002Fdiv>`",[152,53403,1825],{"class":483},[152,53405,53406,53408,53410],{"class":281,"line":18351},[152,53407,53113],{"class":483},[152,53409,53150],{"class":52637},[152,53411,52644],{"class":483},[152,53413,53414,53416,53418],{"class":281,"line":18373},[152,53415,53122],{"class":483},[152,53417,53137],{"class":52637},[152,53419,52644],{"class":483},[152,53421,53422],{"class":281,"line":18378},[152,53423,307],{"emptyLinePlaceholder":306},[152,53425,53426,53428,53430],{"class":281,"line":18384},[152,53427,53122],{"class":483},[152,53429,51972],{"class":52637},[152,53431,52644],{"class":483},[14,53433,53435],{"id":53434},"_284-冒泡排序","2.8.4 冒泡排序",[270,53437,53439],{"className":51970,"code":53438,"language":51972,"meta":275,"style":275},"\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",[277,53440,53441,53451,53465,53469,53477,53492,53512,53524,53532,53536,53544,53552,53584,53617,53654,53659,53678,53683,53696,53711,53727,53731,53736,53740,53750,53759,53767,53771],{"__ignoreMap":275},[152,53442,53443,53445,53447,53449],{"class":281,"line":282},[152,53444,52634],{"class":483},[152,53446,52638],{"class":52637},[152,53448,52641],{"class":285},[152,53450,52644],{"class":483},[152,53452,53453,53455,53457,53459,53461,53463],{"class":281,"line":303},[152,53454,844],{"class":483},[152,53456,51972],{"class":52637},[152,53458,52653],{"class":285},[152,53460,1864],{"class":483},[152,53462,52658],{"class":289},[152,53464,52644],{"class":483},[152,53466,53467],{"class":281,"line":310},[152,53468,307],{"emptyLinePlaceholder":306},[152,53470,53471,53473,53475],{"class":281,"line":324},[152,53472,844],{"class":483},[152,53474,52671],{"class":52637},[152,53476,52644],{"class":483},[152,53478,53479,53482,53484,53486,53488,53490],{"class":281,"line":329},[152,53480,53481],{"class":483},"  \u003C",[152,53483,52681],{"class":52637},[152,53485,52684],{"class":285},[152,53487,1864],{"class":483},[152,53489,52689],{"class":289},[152,53491,52644],{"class":483},[152,53493,53494,53496,53498,53500,53502,53504,53506,53508,53510],{"class":281,"line":343},[152,53495,53481],{"class":483},[152,53497,52681],{"class":52637},[152,53499,16535],{"class":285},[152,53501,1864],{"class":483},[152,53503,52728],{"class":289},[152,53505,52708],{"class":285},[152,53507,1864],{"class":483},[152,53509,52735],{"class":289},[152,53511,52644],{"class":483},[152,53513,53514,53516,53518,53520,53522],{"class":281,"line":348},[152,53515,53481],{"class":483},[152,53517,52744],{"class":52637},[152,53519,52747],{"class":483},[152,53521,52744],{"class":52637},[152,53523,52644],{"class":483},[152,53525,53526,53528,53530],{"class":281,"line":362},[152,53527,53122],{"class":483},[152,53529,52671],{"class":52637},[152,53531,52644],{"class":483},[152,53533,53534],{"class":281,"line":367},[152,53535,307],{"emptyLinePlaceholder":306},[152,53537,53538,53540,53542],{"class":281,"line":381},[152,53539,844],{"class":483},[152,53541,53137],{"class":52637},[152,53543,52644],{"class":483},[152,53545,53546,53548,53550],{"class":281,"line":386},[152,53547,53481],{"class":483},[152,53549,53150],{"class":52637},[152,53551,52644],{"class":483},[152,53553,53554,53557,53559,53561,53564,53566,53568,53570,53572,53574,53576,53578,53580,53582],{"class":281,"line":932},[152,53555,53556],{"class":476},"    let",[152,53558,53170],{"class":483},[152,53560,1864],{"class":476},[152,53562,53563],{"class":483}," [",[152,53565,2127],{"class":293},[152,53567,14051],{"class":483},[152,53569,2101],{"class":293},[152,53571,14051],{"class":483},[152,53573,1888],{"class":293},[152,53575,14051],{"class":483},[152,53577,1894],{"class":293},[152,53579,14051],{"class":483},[152,53581,2026],{"class":293},[152,53583,34583],{"class":483},[152,53585,53586,53588,53590,53592,53594,53596,53598,53600,53602,53604,53606,53609,53611,53613,53615],{"class":281,"line":942},[152,53587,4844],{"class":476},[152,53589,3322],{"class":483},[152,53591,53184],{"class":476},[152,53593,11070],{"class":483},[152,53595,1864],{"class":476},[152,53597,5735],{"class":293},[152,53599,11077],{"class":483},[152,53601,844],{"class":476},[152,53603,53302],{"class":483},[152,53605,53305],{"class":293},[152,53607,53608],{"class":476}," -",[152,53610,26729],{"class":293},[152,53612,4857],{"class":483},[152,53614,3943],{"class":476},[152,53616,14058],{"class":483},[152,53618,53619,53622,53624,53626,53628,53630,53632,53634,53636,53638,53640,53642,53644,53646,53648,53650,53652],{"class":281,"line":949},[152,53620,53621],{"class":476},"      for",[152,53623,3322],{"class":483},[152,53625,53184],{"class":476},[152,53627,11132],{"class":483},[152,53629,1864],{"class":476},[152,53631,5735],{"class":293},[152,53633,11139],{"class":483},[152,53635,844],{"class":476},[152,53637,53302],{"class":483},[152,53639,53305],{"class":293},[152,53641,53608],{"class":476},[152,53643,11070],{"class":483},[152,53645,2340],{"class":476},[152,53647,26729],{"class":293},[152,53649,11146],{"class":483},[152,53651,3943],{"class":476},[152,53653,14058],{"class":483},[152,53655,53656],{"class":281,"line":954},[152,53657,53658],{"class":866},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[152,53660,53661,53663,53666,53668,53671,53673,53675],{"class":281,"line":959},[152,53662,4147],{"class":476},[152,53664,53665],{"class":483}," (arr[j] ",[152,53667,487],{"class":476},[152,53669,53670],{"class":483}," arr[j ",[152,53672,2289],{"class":476},[152,53674,26729],{"class":293},[152,53676,53677],{"class":483},"]) {\n",[152,53679,53680],{"class":281,"line":970},[152,53681,53682],{"class":866},"          \u002F\u002F 交换两个变量\n",[152,53684,53685,53688,53691,53693],{"class":281,"line":979},[152,53686,53687],{"class":476},"          let",[152,53689,53690],{"class":483}," tmp ",[152,53692,1864],{"class":476},[152,53694,53695],{"class":483}," arr[j]\n",[152,53697,53698,53701,53703,53705,53707,53709],{"class":281,"line":989},[152,53699,53700],{"class":483},"          arr[j] ",[152,53702,1864],{"class":476},[152,53704,53670],{"class":483},[152,53706,2289],{"class":476},[152,53708,26729],{"class":293},[152,53710,34583],{"class":483},[152,53712,53713,53716,53718,53720,53722,53724],{"class":281,"line":996},[152,53714,53715],{"class":483},"          arr[j ",[152,53717,2289],{"class":476},[152,53719,26729],{"class":293},[152,53721,6085],{"class":483},[152,53723,1864],{"class":476},[152,53725,53726],{"class":483}," tmp\n",[152,53728,53729],{"class":281,"line":1001},[152,53730,4179],{"class":483},[152,53732,53733],{"class":281,"line":1006},[152,53734,53735],{"class":483},"      }\n",[152,53737,53738],{"class":281,"line":1018},[152,53739,3838],{"class":483},[152,53741,53742,53745,53747],{"class":281,"line":1027},[152,53743,53744],{"class":483},"    document.",[152,53746,53265],{"class":285},[152,53748,53749],{"class":483},"(arr)\n",[152,53751,53752,53755,53757],{"class":281,"line":1037},[152,53753,53754],{"class":483},"  \u003C\u002F",[152,53756,53150],{"class":52637},[152,53758,52644],{"class":483},[152,53760,53761,53763,53765],{"class":281,"line":1044},[152,53762,53122],{"class":483},[152,53764,53137],{"class":52637},[152,53766,52644],{"class":483},[152,53768,53769],{"class":281,"line":1049},[152,53770,307],{"emptyLinePlaceholder":306},[152,53772,53773,53775,53777],{"class":281,"line":1054},[152,53774,53122],{"class":483},[152,53776,51972],{"class":52637},[152,53778,52644],{"class":483},[19,53780,53781],{},[401,53782],{"alt":275,"src":53783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,53785,53786],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,53788,53789],{},"let arr = [4, 2, 5, 1, 3]",[19,53791,53792],{},"\u002F\u002F 1.升序排列写法",[19,53794,53795],{},"arr.sort(function (a, b) {",[19,53797,53798],{},"return a - b",[19,53800,53801],{},"})",[19,53803,53804],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,53806,53807],{},"\u002F\u002F 降序排列写法",[19,53809,53795],{},[19,53811,53812],{},"return b - a",[19,53814,53801],{},[19,53816,53817],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[1760,53819,53821],{"id":53820},"_29-函数","2.9 函数",[19,53823,53824],{},[401,53825],{"alt":275,"src":53826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,53828,53829],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,53831,53832],{},"函数的声明用function",[19,53834,53835],{},"函数里边可以嵌套函数",[14,53837,53839],{"id":53838},"_291-函数传参","2.9.1 函数传参",[19,53841,53842],{},[401,53843],{"alt":275,"src":53844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,53846,53847],{},[401,53848],{"alt":275,"src":53849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[698,53851,53852,53855,53858,53861,53864,53867],{},[419,53853,53854],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[419,53856,53857],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[419,53859,53860],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[419,53862,53863],{},"开发中尽量保持形参和实参个数一致",[419,53865,53866],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[419,53868,53869],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53871,53872],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[14,53874,53876],{"id":53875},"_292-函数的返回值","2.9.2 函数的返回值",[19,53878,53879],{},[401,53880],{"alt":275,"src":53881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53883,53884],{},[401,53885],{"alt":275,"src":53886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[698,53888,53889,53892,53895,53898,53901],{},[419,53890,53891],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[419,53893,53894],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[419,53896,53897],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[419,53899,53900],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[419,53902,53903],{},"断点调试:进入函数内部看执行过程F11",[14,53905,53907],{"id":53906},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[270,53909,53911],{"className":51970,"code":53910,"language":51972,"meta":275,"style":275},"    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",[277,53912,53913,53918,53923,53927,53932],{"__ignoreMap":275},[152,53914,53915],{"class":281,"line":282},[152,53916,53917],{"class":483},"    function fn(a, b) {\n",[152,53919,53920],{"class":281,"line":303},[152,53921,53922],{"class":483},"      console.log(a + b);\n",[152,53924,53925],{"class":281,"line":310},[152,53926,3838],{"class":483},[152,53928,53929],{"class":281,"line":324},[152,53930,53931],{"class":483},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[152,53933,53934],{"class":281,"line":329},[152,53935,53936],{"class":483},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[14,53938,53940],{"id":53939},"_294-作用域","2.9.4 作用域",[698,53942,53943,53949,53954,53957,53960],{},[419,53944,53945,53946],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[694,53947,53948],{},"作用域",[419,53950,53951],{},[694,53952,53953],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[419,53955,53956],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[419,53958,53959],{},"函数内部可以直接所使用全局变量",[419,53961,53962],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53964,607],{},[270,53966,53968],{"className":51970,"code":53967,"language":51972,"meta":275,"style":275},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[277,53969,53970,53975,53980,53984,53989,53994,53999],{"__ignoreMap":275},[152,53971,53972],{"class":281,"line":282},[152,53973,53974],{"class":483},"    function fun() {\n",[152,53976,53977],{"class":281,"line":303},[152,53978,53979],{"class":483},"      num = 10\n",[152,53981,53982],{"class":281,"line":310},[152,53983,3838],{"class":483},[152,53985,53986],{"class":281,"line":324},[152,53987,53988],{"class":483},"    fun()\n",[152,53990,53991],{"class":281,"line":329},[152,53992,53993],{"class":483},"    console.log(num)\n",[152,53995,53996],{"class":281,"line":343},[152,53997,53998],{"class":483},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[152,54000,54001],{"class":281,"line":348},[152,54002,54003],{"class":483},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[698,54005,54006,54009],{},[419,54007,54008],{},"函数内部的形参可以看做是局部变量",[419,54010,54011],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54013,54014,54015],{},"变量访问原则： ",[694,54016,54017],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[14,54019,54021],{"id":54020},"_295-匿名函数","2.9.5 匿名函数",[19,54023,54024],{},"函数可以分为具名函数和匿名函数",[19,54026,54027],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[416,54029,54030],{},[419,54031,54032],{},"函数表达式",[19,54034,54035],{},[401,54036],{"alt":275,"src":54037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54039,54040],{},"里边也可以写参数",[19,54042,54043],{},"具名函数调用位置可以随意调整；",[19,54045,54046],{},"匿名函数函数表达式形式只能在声明后才可以使用",[416,54048,54049],{"start":303},[419,54050,54051],{},"立即执行函数",[19,54053,54054],{},[401,54055],{"alt":275,"src":54056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54058,54059],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54061,54062],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54064,54065],{},"(function () {})();",[19,54067,54068],{},"不要落下最后的;",[19,54070,54071],{},"立即执行函数必须要加;",[19,54073,54074],{},"分号写前写后都没问题",[19,54076,54077],{},"写前：",[19,54079,54080],{},"(function() {})()",[19,54082,54083],{},";(function () {})();",[19,54085,54086],{},"写后:",[19,54088,54089],{},"(function() {})();",[19,54091,54065],{},[19,54093,54094],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54096,54097],{},"还有一种写法：",[19,54099,54100],{},"(function(){}());",[19,54102,54103],{},"或者:",[19,54105,54106],{},"!function(){}();",[19,54108,54109],{},"立即执行函数有时候也是可以加名字的：",[19,54111,54112],{},"(function flexible(window,document) {}(window,document));",[19,54114,54115],{},"省一些调用方法",[14,54117,54119],{"id":54118},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54121,54122],{},[401,54123],{"alt":275,"src":54124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54126,54127],{},"这样就不用非得给x,y初始化了",[19,54129,54130],{},[401,54131],{"alt":275,"src":54132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54134,54135],{},"代码执行时先看左边",[19,54137,54138],{},"例如：console.log(false && 3+5)",[19,54140,54141],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54143,54144],{},"&&都是真时，就返回最后一个真值",[19,54146,54147],{},"console.log(11 && 22)",[19,54149,54150],{},"输出22",[19,54152,54153],{},"逻辑与：遇真则真",[19,54155,607],{},[19,54157,54158],{},"let age=1",[19,54160,54161],{},"console.log(11 || age++)",[19,54163,54164],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54166,54167],{},"console.log(11 || 22)",[19,54169,54170],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54172,54173],{},"||如果都是假的话，就取最后一个假的值了",[14,54175,54177],{"id":54176},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54179,54180],{},"显示转换：",[19,54182,54183,54186,54187],{},[694,54184,54185],{},"记忆","： ",[694,54188,54189],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54191,54192],{},"空字符串为假，其他字符串全为真",[19,54194,54195],{},[401,54196],{"alt":275,"src":54197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54199,54200],{},"隐式转换：",[19,54202,54203],{},[401,54204],{"alt":275,"src":54205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54207,54208],{},"隐式转换:",[19,54210,54211],{},"null+3=3",[19,54213,54214],{},"undefined+3=NaN",[19,54216,54217],{},"null==undefined 输出true,他两个都当0看",[19,54219,54220],{},"null===undefined 输出false",[19,54222,54223],{},"undefined做任何操作都是NaN",[19,54225,54226],{},"NaN不等于NaN，NaN表示计算错误",[1760,54228,54230],{"id":54229},"_210-对象","2.10 对象",[14,54232,54234],{"id":54233},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54236,54237],{},"对象也是一种数据类型，里边的数据是无序的",[19,54239,54240],{},"对象由属性和方法组成",[19,54242,54243],{},[401,54244],{"alt":275,"src":54245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54247,54248],{},[401,54249],{"alt":275,"src":54250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54252,54253],{},[401,54254],{"alt":275,"src":54255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[14,54257,54259],{"id":54258},"_2102-对象属性","2.10.2 对象属性",[19,54261,54262],{},[401,54263],{"alt":275,"src":54264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[416,54266,54267],{},[419,54268,54269],{},"查询对象",[19,54271,54272],{},"对象名.属性 goods.uname",[19,54274,54275],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54277,54278],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54280,54281],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54283,54284],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[416,54286,54287],{"start":303},[419,54288,54289],{},"重新赋值",[19,54291,54292],{},"对象名.属性=新值",[416,54294,54295],{"start":310},[419,54296,54297],{},"增加新数据",[19,54299,54292],{},[416,54301,54302],{"start":324},[419,54303,54304],{},"删除对象中的属性",[19,54306,54307],{},"delete 对象名.属性",[14,54309,54311],{"id":54310},"_2103-对象方法","2.10.3 对象方法",[19,54313,54314],{},[401,54315],{"alt":275,"src":54316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54318,54319],{},"后边跟的是匿名函数",[19,54321,54322],{},"对象外面的叫函数；对象内部的叫方法",[19,54324,54325],{},[401,54326],{"alt":275,"src":54327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[14,54329,54331],{"id":54330},"_2104-遍历对象","2.10.4 遍历对象",[19,54333,54334],{},"理解为加括号的python字典遍历",[19,54336,54337],{},[401,54338],{"alt":275,"src":54339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54341,54342],{},"k是字符串类型",[19,54344,54345],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[270,54347,54349],{"className":51970,"code":54348,"language":51972,"meta":275,"style":275},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[277,54350,54351,54356,54361,54366,54371],{"__ignoreMap":275},[152,54352,54353],{"class":281,"line":282},[152,54354,54355],{"class":483},"   let arr = [1, 2, 3]\n",[152,54357,54358],{"class":281,"line":303},[152,54359,54360],{"class":483},"    for (let k in arr) {\n",[152,54362,54363],{"class":281,"line":310},[152,54364,54365],{"class":483},"      console.log(k)\n",[152,54367,54368],{"class":281,"line":324},[152,54369,54370],{"class":483},"      console.log(arr[k])\n",[152,54372,54373],{"class":281,"line":329},[152,54374,3838],{"class":483},[19,54376,54377],{},[401,54378],{"alt":275,"src":54379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54381,54382],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54384,54385],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54387,54388],{},"for in 得到的k是属性名",[53150,54390,54391],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[19,54393,54394],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[14,54396,54398],{"id":54397},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54400,54401],{},"数组中放对象信息",[270,54403,54407],{"className":54404,"code":54405,"language":54406,"meta":275,"style":275},"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",[277,54408,54409,54417,54422,54427,54432,54437,54442,54447,54452,54457,54462,54467,54472,54476,54480],{"__ignoreMap":275},[152,54410,54411,54413,54415],{"class":281,"line":282},[152,54412,844],{"class":483},[152,54414,53150],{"class":52637},[152,54416,52644],{"class":483},[152,54418,54419],{"class":281,"line":303},[152,54420,54421],{"class":483},"    let students = [\n",[152,54423,54424],{"class":281,"line":310},[152,54425,54426],{"class":483},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[152,54428,54429],{"class":281,"line":324},[152,54430,54431],{"class":483},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[152,54433,54434],{"class":281,"line":329},[152,54435,54436],{"class":483},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[152,54438,54439],{"class":281,"line":343},[152,54440,54441],{"class":483},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[152,54443,54444],{"class":281,"line":348},[152,54445,54446],{"class":483},"    ]\n",[152,54448,54449],{"class":281,"line":362},[152,54450,54451],{"class":483},"    for (let i = 0; i \u003C students.length; i++) {\n",[152,54453,54454],{"class":281,"line":367},[152,54455,54456],{"class":483},"      for (let k in students[i]) {\n",[152,54458,54459],{"class":281,"line":381},[152,54460,54461],{"class":483},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[152,54463,54464],{"class":281,"line":386},[152,54465,54466],{"class":483},"        \u002F\u002F输出每个人的名字：\n",[152,54468,54469],{"class":281,"line":932},[152,54470,54471],{"class":483},"        \u002F\u002Fconsole.log(students[i].name)\n",[152,54473,54474],{"class":281,"line":942},[152,54475,53735],{"class":483},[152,54477,54478],{"class":281,"line":949},[152,54479,3838],{"class":483},[152,54481,54482,54484,54486],{"class":281,"line":954},[152,54483,53754],{"class":483},[152,54485,53150],{"class":52637},[152,54487,52644],{"class":483},[14,54489,54491],{"id":54490},"_2106-内置对象","2.10.6 内置对象",[19,54493,54494],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[416,54496,54497],{},[419,54498,54499],{},"数学对象Math",[19,54501,54502],{},[401,54503],{"alt":275,"src":54504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54506,54507],{},[69,54508,54511],{"href":54509,"rel":54510},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[245],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54513,54514],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54516,54517],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54519,54520],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54522,54523],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54525,54526],{},"null属于对象数据类型",[416,54528,54529],{"start":303},[419,54530,54531],{},"生成任意范围随机数",[19,54533,54534],{},[401,54535],{"alt":275,"src":54536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54538,54539],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54541,54542],{},"乘以几就取不到几",[19,54544,54545],{},"取数组中的随机元素：",[19,54547,54548],{},"let arr = ['red', 'green', 'blue']",[19,54550,54551],{},"let random = Math.floor(Math.random() * arr.length)",[19,54553,54554],{},"console.log(arr[random])",[19,54556,54557],{},"这个函数得到的是全闭区间",[19,54559,54560],{},"function getRandom(N, M) {",[19,54562,54563],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,54565,2752],{},[19,54567,54568],{},"console.log(getRandom(4, 8))",[14,54570,54572],{"id":54571},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,54574,54575],{},[401,54576],{"alt":275,"src":54577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,54579,54580],{},[401,54581],{"alt":275,"src":54582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,54584,54585],{},[401,54586],{"alt":275,"src":54587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,54589,54590],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,54592,54593],{},[401,54594],{"alt":275,"src":54595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,54597,54598],{},[401,54599],{"alt":275,"src":54600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,54602,54603],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,54605,54606],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,54608,54609],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1736,54611,54612],{},"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":275,"searchDepth":303,"depth":303,"links":54614},[54615,54623,54624,54625,54626,54627,54634,54638,54644,54653],{"id":51805,"depth":303,"text":51806,"children":54616},[54617,54618,54619,54620,54621,54622],{"id":51809,"depth":310,"text":51810},{"id":51826,"depth":310,"text":51827},{"id":51866,"depth":310,"text":51867},{"id":51878,"depth":310,"text":51879},{"id":51887,"depth":310,"text":51888},{"id":51935,"depth":310,"text":51936},{"id":51945,"depth":303,"text":51946},{"id":52033,"depth":303,"text":52034},{"id":52056,"depth":303,"text":52057},{"id":52068,"depth":303,"text":52069},{"id":52255,"depth":303,"text":52256,"children":54628},[54629,54630,54631,54632,54633],{"id":52259,"depth":310,"text":52260},{"id":52268,"depth":310,"text":52269},{"id":52296,"depth":310,"text":52297},{"id":52332,"depth":310,"text":52333},{"id":52357,"depth":310,"text":52358},{"id":52369,"depth":303,"text":52370,"children":54635},[54636,54637],{"id":52390,"depth":310,"text":52391},{"id":52484,"depth":310,"text":52485},{"id":52542,"depth":303,"text":52543,"children":54639},[54640,54641,54642,54643],{"id":52546,"depth":310,"text":52547},{"id":52570,"depth":310,"text":52571},{"id":52623,"depth":310,"text":52624},{"id":53434,"depth":310,"text":53435},{"id":53820,"depth":303,"text":53821,"children":54645},[54646,54647,54648,54649,54650,54651,54652],{"id":53838,"depth":310,"text":53839},{"id":53875,"depth":310,"text":53876},{"id":53906,"depth":310,"text":53907},{"id":53939,"depth":310,"text":53940},{"id":54020,"depth":310,"text":54021},{"id":54118,"depth":310,"text":54119},{"id":54176,"depth":310,"text":54177},{"id":54229,"depth":303,"text":54230,"children":54654},[54655,54656,54657,54658,54659,54660,54661],{"id":54233,"depth":310,"text":54234},{"id":54258,"depth":310,"text":54259},{"id":54310,"depth":310,"text":54311},{"id":54330,"depth":310,"text":54331},{"id":54397,"depth":310,"text":54398},{"id":54490,"depth":310,"text":54491},{"id":54571,"depth":310,"text":54572},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51797,"description":24991},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54668,"title":54669,"body":54670,"description":24991,"extension":1744,"meta":78010,"navigation":306,"path":78011,"seo":78012,"stem":78013,"__hash__":78014},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54671,"toc":77950},[54672,54675,54678,54681,54686,54689,54692,54695,54699,54703,54709,54714,54722,54729,54732,54736,54741,54746,54751,54754,54757,54768,54771,54775,54778,54781,54786,54791,54796,54799,54802,54894,54897,54902,54905,54910,54913,54916,54921,54924,54929,54933,54936,54950,54954,54959,54962,54965,54969,54974,54977,54981,54985,54990,54994,54999,55002,55005,55008,55011,55014,55017,55022,55027,55055,55058,55061,55064,55069,55072,55075,55078,55081,55085,55114,55118,55123,55128,55131,55134,55137,55142,55257,55262,55267,55428,55433,55436,55440,55445,55450,55453,55456,55459,55462,55465,55468,55471,55474,55477,55480,55483,55486,55489,55492,55494,55497,55500,55503,55508,55512,55909,55912,55918,55922,55927,57209,57214,57217,57220,57223,57228,58424,58428,58434,58439,58442,58447,58452,58456,58460,58465,58468,58473,58476,58479,58483,59391,59394,59398,59619,59622,59625,59628,59854,59857,60081,60084,60088,60093,60096,60099,60327,60330,60363,60366,60370,60375,60379,60382,60385,60388,60391,60394,60397,60400,60405,61685,61689,61692,62785,62789,62792,62795,62798,62801,62805,62808,62811,62813,62821,64302,64306,64309,64312,64315,64524,64527,64531,64535,64540,64545,64548,64551,64556,64560,64565,64568,64677,64681,64686,64691,64694,64697,64701,64706,64711,64716,64719,64722,64733,64736,64741,64746,64749,64752,64825,64829,64834,64837,64839,64850,64854,64859,66185,66188,66191,66194,66196,66199,66202,66205,66208,66211,66214,66217,66220,66223,66226,66229,66232,66234,66236,66239,66243,67337,67340,67343,67359,67373,67376,67381,67387,67392,67396,67400,67405,67409,67414,67856,67861,67864,67868,67873,67876,67879,67883,67888,67892,67897,67902,67906,67911,67916,67919,67924,67929,67933,67938,67943,68047,68050,68054,68059,68425,68428,68431,68434,68437,68440,68443,68446,68449,69745,69749,69754,69759,69762,69765,69768,69771,69773,69778,69783,69786,69790,69795,69800,69805,69808,69811,69814,69817,69820,69825,69828,69832,69837,69842,69846,69851,69854,69859,69862,69865,69868,69871,69874,69879,69882,69885,69888,69891,69895,69900,69903,69907,69912,69915,69918,69922,69951,69954,69958,69962,69967,69971,69976,69979,69982,69985,69988,69991,69994,69997,70000,70003,70006,70009,70012,70015,70018,70022,70027,70032,70035,70039,70043,70048,70051,70055,70058,70061,70066,70071,70076,70081,70086,70089,70092,70097,70102,70106,70111,70114,70119,70122,70125,70128,70131,70136,70139,70148,70152,70157,70160,70163,70167,70170,70175,70179,70182,70188,70194,70198,70224,70227,71788,71791,72287,72290,72295,72300,72305,72309,72314,72319,72324,72328,72333,72336,72339,72342,72345,72349,72352,72357,72360,72365,72369,72374,72377,72382,72387,72392,72395,72398,72403,72408,72411,72414,72418,72421,72426,72429,72434,72437,72442,72447,72452,72455,72460,72525,72528,72539,72543,72548,72720,72724,72729,72732,72735,72738,72742,72753,72757,72760,72765,72770,72773,72776,72779,72782,72785,72787,72790,72793,72796,72801,72804,72809,72812,72816,72819,72822,72836,72840,72843,72898,72903,72906,72909,72914,72917,72921,72926,73056,73060,73065,73070,73151,73156,73160,73163,73168,73173,73179,73182,73185,73188,73192,73197,73200,73211,73215,73232,76279,76283,76286,76289,76292,76313,76317,76320,76328,76331,76336,76339,76342,76347,76352,76356,76377,76381,76386,76389,76392,76395,76398,76402,76407,76410,76414,76419,76422,76427,76430,76435,76438,76443,77646,77650,77655,77658,77663,77947],[10,54673,54669],{"id":54674},"_3web-apis",[19,54676,54677],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,54679,54680],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,54682,54683],{},[401,54684],{"alt":275,"src":54685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,54687,54688],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,54690,54691],{},"建议数组和对象使用 const 来声明",[19,54693,54694],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[1760,54696,54698],{"id":54697},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[14,54700,54702],{"id":54701},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,54704,54705,54708],{},[277,54706,54707],{},"document"," = HTML 文件解析后的对象化表示；",[19,54710,54711,54713],{},[277,54712,54707],{}," ≠ HTML 文件本身",[19,54715,54716,54721],{},[694,54717,54718],{},[277,54719,54720],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,54723,54724,54728],{},[694,54725,54726],{},[277,54727,54707],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,54730,54731],{},"document实际上为window.document的简写",[14,54733,54735],{"id":54734},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,54737,54738],{},[401,54739],{"alt":275,"src":54740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,54742,54743],{},[401,54744],{"alt":275,"src":54745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,54747,54748],{},[401,54749],{"alt":275,"src":54750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,54752,54753],{},"console.dir()",[19,54755,54756],{},"dir用来打印对象",[698,54758,54759,54762,54765],{},[419,54760,54761],{},"任何一个标签，都是一个对象",[419,54763,54764],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[419,54766,54767],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,54769,54770],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[14,54772,54774],{"id":54773},"_312-获取dom对象","3.1.2 获取DoM对象",[19,54776,54777],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,54779,54780],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,54782,54783],{},[694,54784,54785],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[416,54787,54788],{},[419,54789,54790],{},"利用CSS选择器来获取标签元素",[19,54792,54793],{},[401,54794],{"alt":275,"src":54795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,54797,54798],{},"里边的选择器必须必须加引号！！！",[19,54800,54801],{},"只选择第一个元素",[270,54803,54805],{"className":54404,"code":54804,"language":54406,"meta":275,"style":275},"\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",[277,54806,54807,54815,54836,54855,54863,54868,54873,54878,54886],{"__ignoreMap":275},[152,54808,54809,54811,54813],{"class":281,"line":282},[152,54810,844],{"class":483},[152,54812,53137],{"class":52637},[152,54814,52644],{"class":483},[152,54816,54817,54819,54821,54824,54826,54829,54832,54834],{"class":281,"line":303},[152,54818,53481],{"class":483},[152,54820,52948],{"class":52637},[152,54822,54823],{"class":285}," class",[152,54825,1864],{"class":483},[152,54827,54828],{"class":289},"\"box\"",[152,54830,54831],{"class":483},">123\u003C\u002F",[152,54833,52948],{"class":52637},[152,54835,52644],{"class":483},[152,54837,54838,54840,54842,54844,54846,54848,54851,54853],{"class":281,"line":310},[152,54839,53481],{"class":483},[152,54841,52948],{"class":52637},[152,54843,54823],{"class":285},[152,54845,1864],{"class":483},[152,54847,54828],{"class":289},[152,54849,54850],{"class":483},">456\u003C\u002F",[152,54852,52948],{"class":52637},[152,54854,52644],{"class":483},[152,54856,54857,54859,54861],{"class":281,"line":324},[152,54858,53481],{"class":483},[152,54860,53150],{"class":52637},[152,54862,52644],{"class":483},[152,54864,54865],{"class":281,"line":329},[152,54866,54867],{"class":483},"    \u002F\u002F 1.获取匹配的第一个元素\n",[152,54869,54870],{"class":281,"line":343},[152,54871,54872],{"class":483},"    const box = document.querySelector('div')\n",[152,54874,54875],{"class":281,"line":348},[152,54876,54877],{"class":483},"    console.dir(box)\n",[152,54879,54880,54882,54884],{"class":281,"line":362},[152,54881,53754],{"class":483},[152,54883,53150],{"class":52637},[152,54885,52644],{"class":483},[152,54887,54888,54890,54892],{"class":281,"line":367},[152,54889,53122],{"class":483},[152,54891,53137],{"class":52637},[152,54893,52644],{"class":483},[19,54895,54896],{},"只选123，不选456",[19,54898,54899],{},[401,54900],{"alt":275,"src":54901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54903,54904],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54906,54907],{},[401,54908],{"alt":275,"src":54909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54911,54912],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54914,54915],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[416,54917,54918],{"start":303},[419,54919,54920],{},"其他方法来获取标签元素",[19,54922,54923],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54925,54926],{},[401,54927],{"alt":275,"src":54928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[14,54930,54932],{"id":54931},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54934,54935],{},"设置修改DOM元素内容有两种方式：",[698,54937,54938,54941,54944,54947],{},[419,54939,54940],{},"元素.innerText=''",[419,54942,54943],{},"元素.innerHTML=''",[419,54945,54946],{},"不写字符串输出数字也是可以的",[419,54948,54949],{},"元素.innerHtml=1",[262,54951,54953],{"id":54952},"_3131-innertext","3.1.3.1 innerText",[19,54955,54956],{},[401,54957],{"alt":275,"src":54958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54960,54961],{},"思路：实现了修改盒子中的内容！",[19,54963,54964],{},"它只显示纯文本，不解析标签",[262,54966,54968],{"id":54967},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54970,54971],{},[401,54972],{"alt":275,"src":54973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54975,54976],{},"相比于innerText，他的强大之处在于可以解析标签",[14,54978,54980],{"id":54979},"_314-操作元素属性","3.1.4 操作元素属性",[262,54982,54984],{"id":54983},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54986,54987],{},[401,54988],{"alt":275,"src":54989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[262,54991,54993],{"id":54992},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54995,54996],{},[401,54997],{"alt":275,"src":54998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55000,55001],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55003,55004],{},"div.style.backgroundColor = 'hotpink'",[19,55006,55007],{},"如果按照css的写法，-表示减，就会出错",[19,55009,55010],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55012,55013],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55015,55016],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55018,55019],{},[401,55020],{"alt":275,"src":55021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55023,55024],{},[401,55025],{"alt":275,"src":55026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[416,55028,55029,55032,55035,55038,55041,55044],{},[419,55030,55031],{},"className这个方式就是修改很多样式的时候来使用的！",[419,55033,55034],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[419,55036,55037],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[419,55039,55040],{},"className为属性名，如果还用class的话就导致与关键字冲突",[419,55042,55043],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[419,55045,55046,55047,55052],{},"解析标签的时候就变为了",[52948,55048],{"className":55049},[55050,55051],"nav","box",[55053,55054],"br",{},[19,55056,55057],{},"例子：",[52948,55059],{"className":55060},[55050],[53150,55062,55063],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55065,55066],{},[401,55067],{"alt":275,"src":55068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55070,55071],{},"追加和删除类名用classList",[19,55073,55074],{},"常用于类似于开关的操作",[19,55076,55077],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55079,55080],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[262,55082,55084],{"id":55083},"_3143-牢记点","3.1.4.3 牢记点",[416,55086,55087,55090,55093,55096,55099,55102,55105,55108,55111],{},[419,55088,55089],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[419,55091,55092],{},"使用style属性操作css时不要忘记引号",[419,55094,55095],{},"使用className或者classList时也不要忘记引号",[419,55097,55098],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[419,55100,55101],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[419,55103,55104],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[419,55106,55107],{},"若： let arr=['1','2',3] arr[0]=1",[419,55109,55110],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[419,55112,55113],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[14,55115,55117],{"id":55116},"_315-操作表单元素","3.1.5 操作表单元素",[416,55119,55120],{},[419,55121,55122],{},"天生的属性",[19,55124,55125],{},[401,55126],{"alt":275,"src":55127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55129,55130],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55132,55133],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55135,55136],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55138,55139],{},[401,55140],{"alt":275,"src":55141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[270,55143,55145],{"className":51970,"code":55144,"language":51972,"meta":275,"style":275},"在复选框中如果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",[277,55146,55147,55152,55184,55189,55194,55199,55204,55208,55213,55218,55235,55247,55252],{"__ignoreMap":275},[152,55148,55149],{"class":281,"line":282},[152,55150,55151],{"class":483},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[152,55153,55154,55156,55159,55162,55164,55167,55169,55171,55173,55175,55177,55179,55182],{"class":281,"line":303},[152,55155,844],{"class":483},[152,55157,55158],{"class":52637},"input",[152,55160,55161],{"class":285}," type",[152,55163,1864],{"class":483},[152,55165,55166],{"class":289},"\"checkbox\"",[152,55168,16535],{"class":285},[152,55170,1864],{"class":483},[152,55172,9294],{"class":289},[152,55174,16574],{"class":285},[152,55176,1864],{"class":483},[152,55178,9294],{"class":289},[152,55180,55181],{"class":285}," checked",[152,55183,52644],{"class":483},[152,55185,55186],{"class":281,"line":310},[152,55187,55188],{"class":483},"不选的话：\n",[152,55190,55191],{"class":281,"line":324},[152,55192,55193],{"class":483},"const input = document.querySelector('input')\n",[152,55195,55196],{"class":281,"line":329},[152,55197,55198],{"class":483},"input.checked=false\n",[152,55200,55201],{"class":281,"line":343},[152,55202,55203],{"class":483},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[152,55205,55206],{"class":281,"line":348},[152,55207,307],{"emptyLinePlaceholder":306},[152,55209,55210],{"class":281,"line":362},[152,55211,55212],{"class":483},"禁用按钮：\n",[152,55214,55215],{"class":281,"line":367},[152,55216,55217],{"class":483},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[152,55219,55220,55222,55225,55228,55231,55233],{"class":281,"line":381},[152,55221,844],{"class":483},[152,55223,55224],{"class":52637},"button",[152,55226,55227],{"class":285}," disabled",[152,55229,55230],{"class":483},">点击\u003C\u002F",[152,55232,55224],{"class":52637},[152,55234,52644],{"class":483},[152,55236,55237,55239,55241,55243,55245],{"class":281,"line":386},[152,55238,844],{"class":483},[152,55240,55224],{"class":52637},[152,55242,55230],{"class":483},[152,55244,55224],{"class":52637},[152,55246,52644],{"class":483},[152,55248,55249],{"class":281,"line":932},[152,55250,55251],{"class":483},"const bt = document.querySelector('button')\n",[152,55253,55254],{"class":281,"line":942},[152,55255,55256],{"class":483},"bt.disabled = false\n",[416,55258,55259],{"start":303},[419,55260,55261],{},"自定义属性",[19,55263,55264],{},[401,55265],{"alt":275,"src":55266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[270,55268,55270],{"className":54404,"code":55269,"language":54406,"meta":275,"style":275},"\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",[277,55271,55272,55280,55308,55327,55346,55365,55384,55392,55397,55402,55407,55412,55420],{"__ignoreMap":275},[152,55273,55274,55276,55278],{"class":281,"line":282},[152,55275,844],{"class":483},[152,55277,53137],{"class":52637},[152,55279,52644],{"class":483},[152,55281,55282,55284,55286,55289,55291,55293,55296,55298,55301,55304,55306],{"class":281,"line":303},[152,55283,53481],{"class":483},[152,55285,52948],{"class":52637},[152,55287,55288],{"class":285}," data-id",[152,55290,1864],{"class":483},[152,55292,5321],{"class":289},[152,55294,55295],{"class":285}," data-spm",[152,55297,1864],{"class":483},[152,55299,55300],{"class":289},"\"我不知道\"",[152,55302,55303],{"class":483},">1\u003C\u002F",[152,55305,52948],{"class":52637},[152,55307,52644],{"class":483},[152,55309,55310,55312,55314,55316,55318,55320,55323,55325],{"class":281,"line":310},[152,55311,53481],{"class":483},[152,55313,52948],{"class":52637},[152,55315,55288],{"class":285},[152,55317,1864],{"class":483},[152,55319,5344],{"class":289},[152,55321,55322],{"class":483},">2\u003C\u002F",[152,55324,52948],{"class":52637},[152,55326,52644],{"class":483},[152,55328,55329,55331,55333,55335,55337,55339,55342,55344],{"class":281,"line":324},[152,55330,53481],{"class":483},[152,55332,52948],{"class":52637},[152,55334,55288],{"class":285},[152,55336,1864],{"class":483},[152,55338,5357],{"class":289},[152,55340,55341],{"class":483},">3\u003C\u002F",[152,55343,52948],{"class":52637},[152,55345,52644],{"class":483},[152,55347,55348,55350,55352,55354,55356,55358,55361,55363],{"class":281,"line":329},[152,55349,53481],{"class":483},[152,55351,52948],{"class":52637},[152,55353,55288],{"class":285},[152,55355,1864],{"class":483},[152,55357,5370],{"class":289},[152,55359,55360],{"class":483},">4\u003C\u002F",[152,55362,52948],{"class":52637},[152,55364,52644],{"class":483},[152,55366,55367,55369,55371,55373,55375,55377,55380,55382],{"class":281,"line":343},[152,55368,53481],{"class":483},[152,55370,52948],{"class":52637},[152,55372,55288],{"class":285},[152,55374,1864],{"class":483},[152,55376,5391],{"class":289},[152,55378,55379],{"class":483},">5\u003C\u002F",[152,55381,52948],{"class":52637},[152,55383,52644],{"class":483},[152,55385,55386,55388,55390],{"class":281,"line":348},[152,55387,53481],{"class":483},[152,55389,53150],{"class":52637},[152,55391,52644],{"class":483},[152,55393,55394],{"class":281,"line":362},[152,55395,55396],{"class":483},"    const one = document.querySelector('div')\n",[152,55398,55399],{"class":281,"line":367},[152,55400,55401],{"class":483},"    console.log(one.dataset)\n",[152,55403,55404],{"class":281,"line":381},[152,55405,55406],{"class":483},"    console.log(one.dataset.id)\n",[152,55408,55409],{"class":281,"line":386},[152,55410,55411],{"class":483},"    console.log(one.dataset.spm)\n",[152,55413,55414,55416,55418],{"class":281,"line":932},[152,55415,53754],{"class":483},[152,55417,53150],{"class":52637},[152,55419,52644],{"class":483},[152,55421,55422,55424,55426],{"class":281,"line":942},[152,55423,53122],{"class":483},[152,55425,53137],{"class":52637},[152,55427,52644],{"class":483},[19,55429,55430],{},[401,55431],{"alt":275,"src":55432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55434,55435],{},"document.querySelector选择的是第一个对象（元素）",[14,55437,55439],{"id":55438},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55441,55442],{},[401,55443],{"alt":275,"src":55444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55446,55447],{},[401,55448],{"alt":275,"src":55449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55451,55452],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53150,55454,55455],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55457,55458],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53150,55460,55461],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[19,55463,55464],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55466,55467],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55469,55470],{},"单位为毫秒！！！",[19,55472,55473],{},"可以搭配匿名函数来用！！！",[19,55475,55476],{},"setInterval(function () {",[19,55478,55479],{},"alert('两秒执行一次')",[19,55481,55482],{},"}, 2000)",[19,55484,55485],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55487,55488],{},"function fn() {",[19,55490,55491],{},"document.write(1)",[19,55493,2752],{},[19,55495,55496],{},"setInterval(fn, 1000)",[19,55498,55499],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55501,55502],{},"setInterval('fn()', 1000)",[19,55504,55505],{},[401,55506],{"alt":275,"src":55507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[262,55509,55511],{"id":55510},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[270,55513,55515],{"className":51970,"code":55514,"language":51972,"meta":275,"style":275},"\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",[277,55516,55517,55527,55541,55545,55553,55567,55587,55599,55607,55611,55619,55656,55661,55666,55671,55679,55687,55709,55717,55722,55744,55749,55754,55765,55770,55790,55798,55813,55828,55839,55844,55854,55864,55868,55877,55881,55889,55897,55901],{"__ignoreMap":275},[152,55518,55519,55521,55523,55525],{"class":281,"line":282},[152,55520,52634],{"class":483},[152,55522,52638],{"class":52637},[152,55524,52641],{"class":285},[152,55526,52644],{"class":483},[152,55528,55529,55531,55533,55535,55537,55539],{"class":281,"line":303},[152,55530,844],{"class":483},[152,55532,51972],{"class":52637},[152,55534,52653],{"class":285},[152,55536,1864],{"class":483},[152,55538,52658],{"class":289},[152,55540,52644],{"class":483},[152,55542,55543],{"class":281,"line":310},[152,55544,307],{"emptyLinePlaceholder":306},[152,55546,55547,55549,55551],{"class":281,"line":324},[152,55548,844],{"class":483},[152,55550,52671],{"class":52637},[152,55552,52644],{"class":483},[152,55554,55555,55557,55559,55561,55563,55565],{"class":281,"line":329},[152,55556,53481],{"class":483},[152,55558,52681],{"class":52637},[152,55560,52684],{"class":285},[152,55562,1864],{"class":483},[152,55564,52689],{"class":289},[152,55566,52644],{"class":483},[152,55568,55569,55571,55573,55575,55577,55579,55581,55583,55585],{"class":281,"line":343},[152,55570,53481],{"class":483},[152,55572,52681],{"class":52637},[152,55574,16535],{"class":285},[152,55576,1864],{"class":483},[152,55578,52728],{"class":289},[152,55580,52708],{"class":285},[152,55582,1864],{"class":483},[152,55584,52735],{"class":289},[152,55586,52644],{"class":483},[152,55588,55589,55591,55593,55595,55597],{"class":281,"line":348},[152,55590,53481],{"class":483},[152,55592,52744],{"class":52637},[152,55594,52747],{"class":483},[152,55596,52744],{"class":52637},[152,55598,52644],{"class":483},[152,55600,55601,55603,55605],{"class":281,"line":362},[152,55602,53122],{"class":483},[152,55604,52671],{"class":52637},[152,55606,52644],{"class":483},[152,55608,55609],{"class":281,"line":367},[152,55610,307],{"emptyLinePlaceholder":306},[152,55612,55613,55615,55617],{"class":281,"line":381},[152,55614,844],{"class":483},[152,55616,53137],{"class":52637},[152,55618,52644],{"class":483},[152,55620,55621,55623,55626,55628,55630,55632,55634,55636,55638,55641,55643,55646,55649,55651,55654],{"class":281,"line":386},[152,55622,53481],{"class":483},[152,55624,55625],{"class":52637},"textarea",[152,55627,16535],{"class":285},[152,55629,1864],{"class":483},[152,55631,9294],{"class":289},[152,55633,16574],{"class":285},[152,55635,1864],{"class":483},[152,55637,9294],{"class":289},[152,55639,55640],{"class":285}," cols",[152,55642,1864],{"class":483},[152,55644,55645],{"class":289},"\"30\"",[152,55647,55648],{"class":285}," rows",[152,55650,1864],{"class":483},[152,55652,55653],{"class":289},"\"10\"",[152,55655,52644],{"class":483},[152,55657,55658],{"class":281,"line":932},[152,55659,55660],{"class":483},"        用户注册协议\n",[152,55662,55663],{"class":281,"line":942},[152,55664,55665],{"class":483},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[152,55667,55668],{"class":281,"line":949},[152,55669,55670],{"class":483},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[152,55672,55673,55675,55677],{"class":281,"line":954},[152,55674,53113],{"class":483},[152,55676,55625],{"class":52637},[152,55678,52644],{"class":483},[152,55680,55681,55683,55685],{"class":281,"line":959},[152,55682,53481],{"class":483},[152,55684,55053],{"class":52637},[152,55686,52644],{"class":483},[152,55688,55689,55691,55693,55695,55697,55700,55702,55705,55707],{"class":281,"line":970},[152,55690,53481],{"class":483},[152,55692,55224],{"class":52637},[152,55694,54823],{"class":285},[152,55696,1864],{"class":483},[152,55698,55699],{"class":289},"\"btn\"",[152,55701,55227],{"class":285},[152,55703,55704],{"class":483},">我已经阅读用户协议(5)\u003C\u002F",[152,55706,55224],{"class":52637},[152,55708,52644],{"class":483},[152,55710,55711,55713,55715],{"class":281,"line":979},[152,55712,53481],{"class":483},[152,55714,53150],{"class":52637},[152,55716,52644],{"class":483},[152,55718,55719],{"class":281,"line":989},[152,55720,55721],{"class":866},"    \u002F\u002F 1. 获取元素\n",[152,55723,55724,55726,55729,55731,55734,55737,55739,55742],{"class":281,"line":996},[152,55725,12837],{"class":476},[152,55727,55728],{"class":293}," btn",[152,55730,15180],{"class":476},[152,55732,55733],{"class":483}," document.",[152,55735,55736],{"class":285},"querySelector",[152,55738,1819],{"class":483},[152,55740,55741],{"class":289},"'.btn'",[152,55743,1825],{"class":483},[152,55745,55746],{"class":281,"line":1001},[152,55747,55748],{"class":866},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[152,55750,55751],{"class":281,"line":1006},[152,55752,55753],{"class":866},"    \u002F\u002F 2. 倒计时\n",[152,55755,55756,55758,55760,55762],{"class":281,"line":1018},[152,55757,53556],{"class":476},[152,55759,11070],{"class":483},[152,55761,1864],{"class":476},[152,55763,55764],{"class":293}," 5\n",[152,55766,55767],{"class":281,"line":1027},[152,55768,55769],{"class":866},"    \u002F\u002F 2.1 开启定时器\n",[152,55771,55772,55774,55777,55779,55782,55784,55787],{"class":281,"line":1037},[152,55773,53556],{"class":476},[152,55775,55776],{"class":483}," n ",[152,55778,1864],{"class":476},[152,55780,55781],{"class":285}," setInterval",[152,55783,1819],{"class":483},[152,55785,55786],{"class":476},"function",[152,55788,55789],{"class":483}," () {\n",[152,55791,55792,55795],{"class":281,"line":1044},[152,55793,55794],{"class":483},"      i",[152,55796,55797],{"class":476},"--\n",[152,55799,55800,55803,55805,55808,55810],{"class":281,"line":1049},[152,55801,55802],{"class":483},"      btn.innerHTML ",[152,55804,1864],{"class":476},[152,55806,55807],{"class":289}," `我已经阅读用户协议(${",[152,55809,2249],{"class":483},[152,55811,55812],{"class":289},"})`\n",[152,55814,55815,55818,55821,55824,55826],{"class":281,"line":1054},[152,55816,55817],{"class":476},"      if",[152,55819,55820],{"class":483}," (i ",[152,55822,55823],{"class":476},"===",[152,55825,5735],{"class":293},[152,55827,14058],{"class":483},[152,55829,55830,55833,55836],{"class":281,"line":1065},[152,55831,55832],{"class":285},"        clearInterval",[152,55834,55835],{"class":483},"(n)  ",[152,55837,55838],{"class":866},"\u002F\u002F 关闭定时器\n",[152,55840,55841],{"class":281,"line":1074},[152,55842,55843],{"class":866},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[152,55845,55846,55849,55851],{"class":281,"line":1084},[152,55847,55848],{"class":483},"        btn.disabled ",[152,55850,1864],{"class":476},[152,55852,55853],{"class":293}," false\n",[152,55855,55856,55859,55861],{"class":281,"line":1091},[152,55857,55858],{"class":483},"        btn.innerHTML ",[152,55860,1864],{"class":476},[152,55862,55863],{"class":289}," '同意'\n",[152,55865,55866],{"class":281,"line":1096},[152,55867,53735],{"class":483},[152,55869,55870,55873,55875],{"class":281,"line":1101},[152,55871,55872],{"class":483},"    }, ",[152,55874,8052],{"class":293},[152,55876,1825],{"class":483},[152,55878,55879],{"class":281,"line":1112},[152,55880,307],{"emptyLinePlaceholder":306},[152,55882,55883,55885,55887],{"class":281,"line":1121},[152,55884,53754],{"class":483},[152,55886,53150],{"class":52637},[152,55888,52644],{"class":483},[152,55890,55891,55893,55895],{"class":281,"line":1131},[152,55892,53122],{"class":483},[152,55894,53137],{"class":52637},[152,55896,52644],{"class":483},[152,55898,55899],{"class":281,"line":1138},[152,55900,307],{"emptyLinePlaceholder":306},[152,55902,55903,55905,55907],{"class":281,"line":1143},[152,55904,53122],{"class":483},[152,55906,51972],{"class":52637},[152,55908,52644],{"class":483},[19,55910,55911],{},"不要一直想着用死循环,避免死循环",[19,55913,55914,55917],{},[277,55915,55916],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[262,55919,55921],{"id":55920},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[416,55923,55924],{},[419,55925,55926],{},"法1",[270,55928,55930],{"className":51970,"code":55929,"language":51972,"meta":275,"style":275},"\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",[277,55931,55932,55942,55956,55960,55968,55982,56002,56014,56022,56028,56039,56050,56054,56058,56065,56077,56081,56085,56092,56104,56118,56131,56145,56149,56153,56160,56171,56182,56193,56205,56217,56229,56233,56237,56245,56255,56268,56280,56293,56297,56301,56308,56318,56330,56342,56353,56364,56374,56386,56398,56402,56406,56415,56427,56439,56467,56480,56484,56488,56495,56506,56510,56518,56526,56530,56538,56552,56567,56591,56599,56614,56627,56635,56656,56668,56680,56692,56704,56716,56728,56740,56749,56757,56765,56773,56785,56808,56827,56846,56865,56884,56903,56922,56942,56946,56966,56985,57005,57026,57037,57054,57064,57074,57084,57089,57094,57099,57104,57129,57142,57146,57169,57173,57181,57189,57197,57201],{"__ignoreMap":275},[152,55933,55934,55936,55938,55940],{"class":281,"line":282},[152,55935,52634],{"class":483},[152,55937,52638],{"class":52637},[152,55939,52641],{"class":285},[152,55941,52644],{"class":483},[152,55943,55944,55946,55948,55950,55952,55954],{"class":281,"line":303},[152,55945,844],{"class":483},[152,55947,51972],{"class":52637},[152,55949,52653],{"class":285},[152,55951,1864],{"class":483},[152,55953,52658],{"class":289},[152,55955,52644],{"class":483},[152,55957,55958],{"class":281,"line":310},[152,55959,307],{"emptyLinePlaceholder":306},[152,55961,55962,55964,55966],{"class":281,"line":324},[152,55963,844],{"class":483},[152,55965,52671],{"class":52637},[152,55967,52644],{"class":483},[152,55969,55970,55972,55974,55976,55978,55980],{"class":281,"line":329},[152,55971,53481],{"class":483},[152,55973,52681],{"class":52637},[152,55975,52684],{"class":285},[152,55977,1864],{"class":483},[152,55979,52689],{"class":289},[152,55981,52644],{"class":483},[152,55983,55984,55986,55988,55990,55992,55994,55996,55998,56000],{"class":281,"line":343},[152,55985,53481],{"class":483},[152,55987,52681],{"class":52637},[152,55989,16535],{"class":285},[152,55991,1864],{"class":483},[152,55993,52728],{"class":289},[152,55995,52708],{"class":285},[152,55997,1864],{"class":483},[152,55999,52735],{"class":289},[152,56001,52644],{"class":483},[152,56003,56004,56006,56008,56010,56012],{"class":281,"line":348},[152,56005,53481],{"class":483},[152,56007,52744],{"class":52637},[152,56009,52747],{"class":483},[152,56011,52744],{"class":52637},[152,56013,52644],{"class":483},[152,56015,56016,56018,56020],{"class":281,"line":362},[152,56017,53481],{"class":483},[152,56019,1736],{"class":52637},[152,56021,52644],{"class":483},[152,56023,56024,56026],{"class":281,"line":367},[152,56025,8045],{"class":52637},[152,56027,17187],{"class":483},[152,56029,56030,56033,56035,56037],{"class":281,"line":381},[152,56031,56032],{"class":293},"      padding",[152,56034,52774],{"class":483},[152,56036,2000],{"class":293},[152,56038,2965],{"class":483},[152,56040,56041,56044,56046,56048],{"class":281,"line":386},[152,56042,56043],{"class":293},"      margin",[152,56045,52774],{"class":483},[152,56047,2000],{"class":293},[152,56049,2965],{"class":483},[152,56051,56052],{"class":281,"line":932},[152,56053,3838],{"class":483},[152,56055,56056],{"class":281,"line":942},[152,56057,307],{"emptyLinePlaceholder":306},[152,56059,56060,56063],{"class":281,"line":949},[152,56061,56062],{"class":52637},"    li",[152,56064,17187],{"class":483},[152,56066,56067,56070,56072,56075],{"class":281,"line":954},[152,56068,56069],{"class":293},"      list-style",[152,56071,52774],{"class":483},[152,56073,56074],{"class":293},"none",[152,56076,2965],{"class":483},[152,56078,56079],{"class":281,"line":959},[152,56080,3838],{"class":483},[152,56082,56083],{"class":281,"line":970},[152,56084,307],{"emptyLinePlaceholder":306},[152,56086,56087,56090],{"class":281,"line":979},[152,56088,56089],{"class":285},"    .box",[152,56091,17187],{"class":483},[152,56093,56094,56097,56099,56102],{"class":281,"line":989},[152,56095,56096],{"class":293},"      position",[152,56098,52774],{"class":483},[152,56100,56101],{"class":293},"relative",[152,56103,2965],{"class":483},[152,56105,56106,56109,56111,56114,56116],{"class":281,"line":996},[152,56107,56108],{"class":293},"      width",[152,56110,52774],{"class":483},[152,56112,56113],{"class":293},"976",[152,56115,52829],{"class":476},[152,56117,2965],{"class":483},[152,56119,56120,56123,56125,56127,56129],{"class":281,"line":1001},[152,56121,56122],{"class":293},"      height",[152,56124,52774],{"class":483},[152,56126,3210],{"class":293},[152,56128,52829],{"class":476},[152,56130,2965],{"class":483},[152,56132,56133,56135,56137,56139,56141,56143],{"class":281,"line":1006},[152,56134,56043],{"class":293},[152,56136,52774],{"class":483},[152,56138,2119],{"class":293},[152,56140,52829],{"class":476},[152,56142,52893],{"class":293},[152,56144,2965],{"class":483},[152,56146,56147],{"class":281,"line":1018},[152,56148,3838],{"class":483},[152,56150,56151],{"class":281,"line":1027},[152,56152,307],{"emptyLinePlaceholder":306},[152,56154,56155,56158],{"class":281,"line":1037},[152,56156,56157],{"class":285},"    .slider-footer",[152,56159,17187],{"class":483},[152,56161,56162,56164,56166,56169],{"class":281,"line":1044},[152,56163,56096],{"class":293},[152,56165,52774],{"class":483},[152,56167,56168],{"class":293},"absolute",[152,56170,2965],{"class":483},[152,56172,56173,56176,56178,56180],{"class":281,"line":1049},[152,56174,56175],{"class":293},"      left",[152,56177,52774],{"class":483},[152,56179,2000],{"class":293},[152,56181,2965],{"class":483},[152,56183,56184,56187,56189,56191],{"class":281,"line":1054},[152,56185,56186],{"class":293},"      bottom",[152,56188,52774],{"class":483},[152,56190,2000],{"class":293},[152,56192,2965],{"class":483},[152,56194,56195,56197,56199,56201,56203],{"class":281,"line":1065},[152,56196,56108],{"class":293},[152,56198,52774],{"class":483},[152,56200,2119],{"class":293},[152,56202,2136],{"class":476},[152,56204,2965],{"class":483},[152,56206,56207,56209,56211,56213,56215],{"class":281,"line":1074},[152,56208,56122],{"class":293},[152,56210,52774],{"class":483},[152,56212,2383],{"class":293},[152,56214,2136],{"class":476},[152,56216,2965],{"class":483},[152,56218,56219,56222,56224,56227],{"class":281,"line":1084},[152,56220,56221],{"class":293},"      background-color",[152,56223,52774],{"class":483},[152,56225,56226],{"class":293},"skyblue",[152,56228,2965],{"class":483},[152,56230,56231],{"class":281,"line":1091},[152,56232,3838],{"class":483},[152,56234,56235],{"class":281,"line":1096},[152,56236,307],{"emptyLinePlaceholder":306},[152,56238,56239,56241,56243],{"class":281,"line":1101},[152,56240,56157],{"class":285},[152,56242,8467],{"class":52637},[152,56244,17187],{"class":483},[152,56246,56247,56249,56251,56253],{"class":281,"line":1112},[152,56248,56096],{"class":293},[152,56250,52774],{"class":483},[152,56252,56168],{"class":293},[152,56254,2965],{"class":483},[152,56256,56257,56260,56262,56264,56266],{"class":281,"line":1121},[152,56258,56259],{"class":293},"      font-size",[152,56261,52774],{"class":483},[152,56263,2708],{"class":293},[152,56265,52829],{"class":476},[152,56267,2965],{"class":483},[152,56269,56270,56272,56274,56276,56278],{"class":281,"line":1131},[152,56271,56175],{"class":293},[152,56273,52774],{"class":483},[152,56275,2508],{"class":293},[152,56277,52829],{"class":476},[152,56279,2965],{"class":483},[152,56281,56282,56285,56287,56289,56291],{"class":281,"line":1138},[152,56283,56284],{"class":293},"      top",[152,56286,52774],{"class":483},[152,56288,2127],{"class":293},[152,56290,52829],{"class":476},[152,56292,2965],{"class":483},[152,56294,56295],{"class":281,"line":1143},[152,56296,3838],{"class":483},[152,56298,56299],{"class":281,"line":1148},[152,56300,307],{"emptyLinePlaceholder":306},[152,56302,56303,56306],{"class":281,"line":1159},[152,56304,56305],{"class":52637},"    ul",[152,56307,17187],{"class":483},[152,56309,56310,56312,56314,56316],{"class":281,"line":1168},[152,56311,56096],{"class":293},[152,56313,52774],{"class":483},[152,56315,56168],{"class":293},[152,56317,2965],{"class":483},[152,56319,56320,56322,56324,56326,56328],{"class":281,"line":1178},[152,56321,56284],{"class":293},[152,56323,52774],{"class":483},[152,56325,2589],{"class":293},[152,56327,52829],{"class":476},[152,56329,2965],{"class":483},[152,56331,56332,56334,56336,56338,56340],{"class":281,"line":1185},[152,56333,56175],{"class":293},[152,56335,52774],{"class":483},[152,56337,2508],{"class":293},[152,56339,52829],{"class":476},[152,56341,2965],{"class":483},[152,56343,56344,56347,56349,56351],{"class":281,"line":1190},[152,56345,56346],{"class":293},"      display",[152,56348,52774],{"class":483},[152,56350,52814],{"class":293},[152,56352,2965],{"class":483},[152,56354,56355,56358,56360,56362],{"class":281,"line":1195},[152,56356,56357],{"class":293},"      justify-content",[152,56359,52774],{"class":483},[152,56361,53005],{"class":293},[152,56363,2965],{"class":483},[152,56365,56366,56368,56370,56372],{"class":281,"line":1206},[152,56367,56096],{"class":293},[152,56369,52774],{"class":483},[152,56371,56168],{"class":293},[152,56373,2965],{"class":483},[152,56375,56376,56378,56380,56382,56384],{"class":281,"line":1215},[152,56377,56108],{"class":293},[152,56379,52774],{"class":483},[152,56381,5634],{"class":293},[152,56383,52829],{"class":476},[152,56385,2965],{"class":483},[152,56387,56388,56390,56392,56394,56396],{"class":281,"line":1225},[152,56389,56122],{"class":293},[152,56391,52774],{"class":483},[152,56393,2508],{"class":293},[152,56395,52829],{"class":476},[152,56397,2965],{"class":483},[152,56399,56400],{"class":281,"line":1232},[152,56401,3838],{"class":483},[152,56403,56404],{"class":281,"line":1237},[152,56405,307],{"emptyLinePlaceholder":306},[152,56407,56408,56410,56413],{"class":281,"line":1242},[152,56409,56305],{"class":52637},[152,56411,56412],{"class":52637}," li",[152,56414,17187],{"class":483},[152,56416,56417,56419,56421,56423,56425],{"class":281,"line":1253},[152,56418,56108],{"class":293},[152,56420,52774],{"class":483},[152,56422,2508],{"class":293},[152,56424,52829],{"class":476},[152,56426,2965],{"class":483},[152,56428,56429,56431,56433,56435,56437],{"class":281,"line":1262},[152,56430,56122],{"class":293},[152,56432,52774],{"class":483},[152,56434,2508],{"class":293},[152,56436,52829],{"class":476},[152,56438,2965],{"class":483},[152,56440,56441,56443,56445,56448,56450,56452,56454,56456,56458,56460,56462,56465],{"class":281,"line":1272},[152,56442,56221],{"class":293},[152,56444,52774],{"class":483},[152,56446,56447],{"class":293},"rgba",[152,56449,1819],{"class":483},[152,56451,2000],{"class":293},[152,56453,14051],{"class":483},[152,56455,2000],{"class":293},[152,56457,14051],{"class":483},[152,56459,2000],{"class":293},[152,56461,14051],{"class":483},[152,56463,56464],{"class":293},".4",[152,56466,4362],{"class":483},[152,56468,56469,56472,56474,56476,56478],{"class":281,"line":1279},[152,56470,56471],{"class":293},"      border-radius",[152,56473,52774],{"class":483},[152,56475,2254],{"class":293},[152,56477,52829],{"class":476},[152,56479,2965],{"class":483},[152,56481,56482],{"class":281,"line":1284},[152,56483,3838],{"class":483},[152,56485,56486],{"class":281,"line":1289},[152,56487,307],{"emptyLinePlaceholder":306},[152,56489,56490,56493],{"class":281,"line":1301},[152,56491,56492],{"class":285},"    .activate",[152,56494,17187],{"class":483},[152,56496,56497,56499,56501,56504],{"class":281,"line":1310},[152,56498,56221],{"class":293},[152,56500,52774],{"class":483},[152,56502,56503],{"class":293},"#f7f7f7",[152,56505,2965],{"class":483},[152,56507,56508],{"class":281,"line":1320},[152,56509,3838],{"class":483},[152,56511,56512,56514,56516],{"class":281,"line":1327},[152,56513,53754],{"class":483},[152,56515,1736],{"class":52637},[152,56517,52644],{"class":483},[152,56519,56520,56522,56524],{"class":281,"line":11528},[152,56521,53122],{"class":483},[152,56523,52671],{"class":52637},[152,56525,52644],{"class":483},[152,56527,56528],{"class":281,"line":11536},[152,56529,307],{"emptyLinePlaceholder":306},[152,56531,56532,56534,56536],{"class":281,"line":11541},[152,56533,844],{"class":483},[152,56535,53137],{"class":52637},[152,56537,52644],{"class":483},[152,56539,56540,56542,56544,56546,56548,56550],{"class":281,"line":18219},[152,56541,53481],{"class":483},[152,56543,52948],{"class":52637},[152,56545,54823],{"class":285},[152,56547,1864],{"class":483},[152,56549,54828],{"class":289},[152,56551,52644],{"class":483},[152,56553,56554,56556,56558,56560,56562,56565],{"class":281,"line":18225},[152,56555,52678],{"class":483},[152,56557,52948],{"class":52637},[152,56559,54823],{"class":285},[152,56561,1864],{"class":483},[152,56563,56564],{"class":289},"\"slider-wrapper\"",[152,56566,52644],{"class":483},[152,56568,56569,56572,56574,56577,56579,56582,56585,56587,56589],{"class":281,"line":18248},[152,56570,56571],{"class":483},"      \u003C",[152,56573,401],{"class":52637},[152,56575,56576],{"class":285}," src",[152,56578,1864],{"class":483},[152,56580,56581],{"class":289},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[152,56583,56584],{"class":285}," alt",[152,56586,1864],{"class":483},[152,56588,9294],{"class":289},[152,56590,52644],{"class":483},[152,56592,56593,56595,56597],{"class":281,"line":18254},[152,56594,53113],{"class":483},[152,56596,52948],{"class":52637},[152,56598,52644],{"class":483},[152,56600,56601,56603,56605,56607,56609,56612],{"class":281,"line":18277},[152,56602,52678],{"class":483},[152,56604,52948],{"class":52637},[152,56606,54823],{"class":285},[152,56608,1864],{"class":483},[152,56610,56611],{"class":289},"\"slider-footer\"",[152,56613,52644],{"class":483},[152,56615,56616,56618,56620,56623,56625],{"class":281,"line":18291},[152,56617,56571],{"class":483},[152,56619,19],{"class":52637},[152,56621,56622],{"class":483},">对人类来说会不会太超前了?\u003C\u002F",[152,56624,19],{"class":52637},[152,56626,52644],{"class":483},[152,56628,56629,56631,56633],{"class":281,"line":18311},[152,56630,56571],{"class":483},[152,56632,698],{"class":52637},[152,56634,52644],{"class":483},[152,56636,56637,56640,56642,56644,56646,56649,56652,56654],{"class":281,"line":18317},[152,56638,56639],{"class":483},"        \u003C",[152,56641,419],{"class":52637},[152,56643,54823],{"class":285},[152,56645,1864],{"class":483},[152,56647,56648],{"class":289},"\"activate\"",[152,56650,56651],{"class":483},">\u003C\u002F",[152,56653,419],{"class":52637},[152,56655,52644],{"class":483},[152,56657,56658,56660,56662,56664,56666],{"class":281,"line":18328},[152,56659,56639],{"class":483},[152,56661,419],{"class":52637},[152,56663,56651],{"class":483},[152,56665,419],{"class":52637},[152,56667,52644],{"class":483},[152,56669,56670,56672,56674,56676,56678],{"class":281,"line":18351},[152,56671,56639],{"class":483},[152,56673,419],{"class":52637},[152,56675,56651],{"class":483},[152,56677,419],{"class":52637},[152,56679,52644],{"class":483},[152,56681,56682,56684,56686,56688,56690],{"class":281,"line":18373},[152,56683,56639],{"class":483},[152,56685,419],{"class":52637},[152,56687,56651],{"class":483},[152,56689,419],{"class":52637},[152,56691,52644],{"class":483},[152,56693,56694,56696,56698,56700,56702],{"class":281,"line":18378},[152,56695,56639],{"class":483},[152,56697,419],{"class":52637},[152,56699,56651],{"class":483},[152,56701,419],{"class":52637},[152,56703,52644],{"class":483},[152,56705,56706,56708,56710,56712,56714],{"class":281,"line":18384},[152,56707,56639],{"class":483},[152,56709,419],{"class":52637},[152,56711,56651],{"class":483},[152,56713,419],{"class":52637},[152,56715,52644],{"class":483},[152,56717,56718,56720,56722,56724,56726],{"class":281,"line":18398},[152,56719,56639],{"class":483},[152,56721,419],{"class":52637},[152,56723,56651],{"class":483},[152,56725,419],{"class":52637},[152,56727,52644],{"class":483},[152,56729,56730,56732,56734,56736,56738],{"class":281,"line":18411},[152,56731,56639],{"class":483},[152,56733,419],{"class":52637},[152,56735,56651],{"class":483},[152,56737,419],{"class":52637},[152,56739,52644],{"class":483},[152,56741,56742,56745,56747],{"class":281,"line":18416},[152,56743,56744],{"class":483},"      \u003C\u002F",[152,56746,698],{"class":52637},[152,56748,52644],{"class":483},[152,56750,56751,56753,56755],{"class":281,"line":18430},[152,56752,53113],{"class":483},[152,56754,52948],{"class":52637},[152,56756,52644],{"class":483},[152,56758,56759,56761,56763],{"class":281,"line":18435},[152,56760,53754],{"class":483},[152,56762,52948],{"class":52637},[152,56764,52644],{"class":483},[152,56766,56767,56769,56771],{"class":281,"line":18441},[152,56768,53481],{"class":483},[152,56770,53150],{"class":52637},[152,56772,52644],{"class":483},[152,56774,56775,56777,56780,56782],{"class":281,"line":18446},[152,56776,12837],{"class":476},[152,56778,56779],{"class":293}," arrImage",[152,56781,15180],{"class":476},[152,56783,56784],{"class":483}," [\n",[152,56786,56787,56790,56793,56796,56799,56802,56805],{"class":281,"line":18460},[152,56788,56789],{"class":483},"      { url: ",[152,56791,56792],{"class":289},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[152,56794,56795],{"class":483},", title: ",[152,56797,56798],{"class":289},"'对人类来说会不会太超前了?'",[152,56800,56801],{"class":483},", color: ",[152,56803,56804],{"class":289},"'rgba(100,67,68)'",[152,56806,56807],{"class":483}," },\n",[152,56809,56810,56812,56815,56817,56820,56822,56825],{"class":281,"line":18465},[152,56811,56789],{"class":483},[152,56813,56814],{"class":289},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[152,56816,56795],{"class":483},[152,56818,56819],{"class":289},"'开启剑与雪的黑暗传说!'",[152,56821,56801],{"class":483},[152,56823,56824],{"class":289},"'rgba(43,35,26)'",[152,56826,56807],{"class":483},[152,56828,56829,56831,56834,56836,56839,56841,56844],{"class":281,"line":18470},[152,56830,56789],{"class":483},[152,56832,56833],{"class":289},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[152,56835,56795],{"class":483},[152,56837,56838],{"class":289},"'真正的jo厨出现了!'",[152,56840,56801],{"class":483},[152,56842,56843],{"class":289},"'rgba(36,31,33)'",[152,56845,56807],{"class":483},[152,56847,56848,56850,56853,56855,56858,56860,56863],{"class":281,"line":18484},[152,56849,56789],{"class":483},[152,56851,56852],{"class":289},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[152,56854,56795],{"class":483},[152,56856,56857],{"class":289},"'李玉刚:让世界通过b站看到东方大国文化'",[152,56859,56801],{"class":483},[152,56861,56862],{"class":289},"'rgba(139,98,66)'",[152,56864,56807],{"class":483},[152,56866,56867,56869,56872,56874,56877,56879,56882],{"class":281,"line":18496},[152,56868,56789],{"class":483},[152,56870,56871],{"class":289},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[152,56873,56795],{"class":483},[152,56875,56876],{"class":289},"'快来分享你的寒假日常吧'",[152,56878,56801],{"class":483},[152,56880,56881],{"class":289},"'rgba(67,90,92)'",[152,56883,56807],{"class":483},[152,56885,56886,56888,56891,56893,56896,56898,56901],{"class":281,"line":18501},[152,56887,56789],{"class":483},[152,56889,56890],{"class":289},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[152,56892,56795],{"class":483},[152,56894,56895],{"class":289},"'哔哩哔哩小年YEAR'",[152,56897,56801],{"class":483},[152,56899,56900],{"class":289},"'rgba(166,131,143)'",[152,56902,56807],{"class":483},[152,56904,56905,56907,56910,56912,56915,56917,56920],{"class":281,"line":18514},[152,56906,56789],{"class":483},[152,56908,56909],{"class":289},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[152,56911,56795],{"class":483},[152,56913,56914],{"class":289},"'一站式解决你的电脑配置问题'",[152,56916,56801],{"class":483},[152,56918,56919],{"class":289},"'rgba(53,29,25)'",[152,56921,56807],{"class":483},[152,56923,56924,56926,56929,56931,56934,56936,56939],{"class":281,"line":18519},[152,56925,56789],{"class":483},[152,56927,56928],{"class":289},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[152,56930,56795],{"class":483},[152,56932,56933],{"class":289},"'谁不想和小猫咪贴贴呢?'",[152,56935,56801],{"class":483},[152,56937,56938],{"class":289},"'rgba(99,72,114)'",[152,56940,56941],{"class":483}," }\n",[152,56943,56944],{"class":281,"line":18524},[152,56945,54446],{"class":483},[152,56947,56948,56950,56953,56955,56957,56959,56961,56964],{"class":281,"line":18529},[152,56949,12837],{"class":476},[152,56951,56952],{"class":293}," img",[152,56954,15180],{"class":476},[152,56956,55733],{"class":483},[152,56958,55736],{"class":285},[152,56960,1819],{"class":483},[152,56962,56963],{"class":289},"'.slider-wrapper img'",[152,56965,1825],{"class":483},[152,56967,56968,56970,56972,56974,56976,56978,56980,56983],{"class":281,"line":18542},[152,56969,12837],{"class":476},[152,56971,8467],{"class":293},[152,56973,15180],{"class":476},[152,56975,55733],{"class":483},[152,56977,55736],{"class":285},[152,56979,1819],{"class":483},[152,56981,56982],{"class":289},"'.slider-footer p'",[152,56984,1825],{"class":483},[152,56986,56987,56989,56992,56994,56996,56998,57000,57003],{"class":281,"line":18547},[152,56988,12837],{"class":476},[152,56990,56991],{"class":293}," color",[152,56993,15180],{"class":476},[152,56995,55733],{"class":483},[152,56997,55736],{"class":285},[152,56999,1819],{"class":483},[152,57001,57002],{"class":289},"'.slider-footer'",[152,57004,1825],{"class":483},[152,57006,57007,57009,57012,57014,57016,57019,57021,57024],{"class":281,"line":33970},[152,57008,12837],{"class":476},[152,57010,57011],{"class":293}," lis",[152,57013,15180],{"class":476},[152,57015,55733],{"class":483},[152,57017,57018],{"class":285},"querySelectorAll",[152,57020,1819],{"class":483},[152,57022,57023],{"class":289},"'.slider-footer ul li'",[152,57025,1825],{"class":483},[152,57027,57028,57030,57032,57034],{"class":281,"line":33976},[152,57029,53556],{"class":476},[152,57031,11070],{"class":483},[152,57033,1864],{"class":476},[152,57035,57036],{"class":293}," 1\n",[152,57038,57039,57041,57044,57046,57048,57050,57052],{"class":281,"line":33982},[152,57040,53556],{"class":476},[152,57042,57043],{"class":483}," timer ",[152,57045,1864],{"class":476},[152,57047,55781],{"class":285},[152,57049,1819],{"class":483},[152,57051,55786],{"class":476},[152,57053,55789],{"class":483},[152,57055,57056,57059,57061],{"class":281,"line":33988},[152,57057,57058],{"class":483},"      img.src ",[152,57060,1864],{"class":476},[152,57062,57063],{"class":483}," arrImage[i].url\n",[152,57065,57066,57069,57071],{"class":281,"line":33994},[152,57067,57068],{"class":483},"      p.innerHTML ",[152,57070,1864],{"class":476},[152,57072,57073],{"class":483}," arrImage[i].title\n",[152,57075,57076,57079,57081],{"class":281,"line":34005},[152,57077,57078],{"class":483},"      color.style.backgroundColor ",[152,57080,1864],{"class":476},[152,57082,57083],{"class":483}," arrImage[i].color\n",[152,57085,57086],{"class":281,"line":34011},[152,57087,57088],{"class":866},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[152,57090,57091],{"class":281,"line":34031},[152,57092,57093],{"class":866},"      \u002F\u002F li.classList.add('activate')\n",[152,57095,57096],{"class":281,"line":34037},[152,57097,57098],{"class":866},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[152,57100,57101],{"class":281,"line":34048},[152,57102,57103],{"class":866},"      \u002F\u002F lis[i].classList.remove('activate')\n",[152,57105,57106,57109,57111,57113,57116,57119,57122,57124,57127],{"class":281,"line":34054},[152,57107,57108],{"class":483},"      document.",[152,57110,55736],{"class":285},[152,57112,1819],{"class":483},[152,57114,57115],{"class":289},"'.activate'",[152,57117,57118],{"class":483},")?.classList.",[152,57120,57121],{"class":285},"toggle",[152,57123,1819],{"class":483},[152,57125,57126],{"class":289},"'activate'",[152,57128,1825],{"class":483},[152,57130,57131,57134,57136,57138,57140],{"class":281,"line":34060},[152,57132,57133],{"class":483},"      lis[i].classList.",[152,57135,6976],{"class":285},[152,57137,1819],{"class":483},[152,57139,57126],{"class":289},[152,57141,1825],{"class":483},[152,57143,57144],{"class":281,"line":34066},[152,57145,307],{"emptyLinePlaceholder":306},[152,57147,57148,57151,57153,57155,57157,57159,57161,57163,57166],{"class":281,"line":34072},[152,57149,57150],{"class":483},"      i ",[152,57152,1864],{"class":476},[152,57154,55820],{"class":483},[152,57156,2289],{"class":476},[152,57158,26729],{"class":293},[152,57160,15330],{"class":483},[152,57162,2136],{"class":476},[152,57164,57165],{"class":483}," arrImage.",[152,57167,57168],{"class":293},"length\n",[152,57170,57171],{"class":281,"line":34078},[152,57172,307],{"emptyLinePlaceholder":306},[152,57174,57175,57177,57179],{"class":281,"line":34084},[152,57176,55872],{"class":483},[152,57178,8052],{"class":293},[152,57180,1825],{"class":483},[152,57182,57183,57185,57187],{"class":281,"line":34090},[152,57184,53754],{"class":483},[152,57186,53150],{"class":52637},[152,57188,52644],{"class":483},[152,57190,57191,57193,57195],{"class":281,"line":34110},[152,57192,53122],{"class":483},[152,57194,53137],{"class":52637},[152,57196,52644],{"class":483},[152,57198,57199],{"class":281,"line":34116},[152,57200,307],{"emptyLinePlaceholder":306},[152,57202,57203,57205,57207],{"class":281,"line":34132},[152,57204,53122],{"class":483},[152,57206,51972],{"class":52637},[152,57208,52644],{"class":483},[19,57210,57211],{},[401,57212],{"alt":275,"src":57213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57215,57216],{},"?.就是短路保护,确保输出正常进行",[19,57218,57219],{},"不要忘记取余%,有时候可以用",[19,57221,57222],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[416,57224,57225],{"start":303},[419,57226,57227],{},"法2",[270,57229,57231],{"className":51970,"code":57230,"language":51972,"meta":275,"style":275},"\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",[277,57232,57233,57243,57257,57261,57269,57283,57303,57315,57323,57329,57339,57349,57353,57357,57363,57373,57377,57381,57387,57397,57409,57421,57435,57439,57443,57449,57459,57469,57479,57491,57503,57513,57517,57521,57529,57539,57551,57563,57575,57579,57583,57589,57599,57611,57623,57633,57643,57653,57665,57677,57681,57685,57693,57705,57717,57743,57755,57759,57763,57769,57779,57783,57791,57799,57803,57811,57825,57839,57859,57867,57881,57893,57901,57919,57931,57943,57955,57967,57979,57991,58003,58011,58019,58027,58035,58046,58062,58078,58094,58110,58126,58142,58158,58174,58178,58183,58201,58219,58229,58234,58239,58250,58256,58271,58280,58284,58289,58298,58303,58312,58317,58322,58327,58350,58380,58384,58392,58396,58404,58412,58416],{"__ignoreMap":275},[152,57234,57235,57237,57239,57241],{"class":281,"line":282},[152,57236,52634],{"class":483},[152,57238,52638],{"class":52637},[152,57240,52641],{"class":285},[152,57242,52644],{"class":483},[152,57244,57245,57247,57249,57251,57253,57255],{"class":281,"line":303},[152,57246,844],{"class":483},[152,57248,51972],{"class":52637},[152,57250,52653],{"class":285},[152,57252,1864],{"class":483},[152,57254,52658],{"class":289},[152,57256,52644],{"class":483},[152,57258,57259],{"class":281,"line":310},[152,57260,307],{"emptyLinePlaceholder":306},[152,57262,57263,57265,57267],{"class":281,"line":324},[152,57264,844],{"class":483},[152,57266,52671],{"class":52637},[152,57268,52644],{"class":483},[152,57270,57271,57273,57275,57277,57279,57281],{"class":281,"line":329},[152,57272,53481],{"class":483},[152,57274,52681],{"class":52637},[152,57276,52684],{"class":285},[152,57278,1864],{"class":483},[152,57280,52689],{"class":289},[152,57282,52644],{"class":483},[152,57284,57285,57287,57289,57291,57293,57295,57297,57299,57301],{"class":281,"line":343},[152,57286,53481],{"class":483},[152,57288,52681],{"class":52637},[152,57290,16535],{"class":285},[152,57292,1864],{"class":483},[152,57294,52728],{"class":289},[152,57296,52708],{"class":285},[152,57298,1864],{"class":483},[152,57300,52735],{"class":289},[152,57302,52644],{"class":483},[152,57304,57305,57307,57309,57311,57313],{"class":281,"line":348},[152,57306,53481],{"class":483},[152,57308,52744],{"class":52637},[152,57310,52747],{"class":483},[152,57312,52744],{"class":52637},[152,57314,52644],{"class":483},[152,57316,57317,57319,57321],{"class":281,"line":362},[152,57318,53481],{"class":483},[152,57320,1736],{"class":52637},[152,57322,52644],{"class":483},[152,57324,57325,57327],{"class":281,"line":367},[152,57326,8045],{"class":52637},[152,57328,17187],{"class":483},[152,57330,57331,57333,57335,57337],{"class":281,"line":381},[152,57332,56032],{"class":293},[152,57334,52774],{"class":483},[152,57336,2000],{"class":293},[152,57338,2965],{"class":483},[152,57340,57341,57343,57345,57347],{"class":281,"line":386},[152,57342,56043],{"class":293},[152,57344,52774],{"class":483},[152,57346,2000],{"class":293},[152,57348,2965],{"class":483},[152,57350,57351],{"class":281,"line":932},[152,57352,3838],{"class":483},[152,57354,57355],{"class":281,"line":942},[152,57356,307],{"emptyLinePlaceholder":306},[152,57358,57359,57361],{"class":281,"line":949},[152,57360,56062],{"class":52637},[152,57362,17187],{"class":483},[152,57364,57365,57367,57369,57371],{"class":281,"line":954},[152,57366,56069],{"class":293},[152,57368,52774],{"class":483},[152,57370,56074],{"class":293},[152,57372,2965],{"class":483},[152,57374,57375],{"class":281,"line":959},[152,57376,3838],{"class":483},[152,57378,57379],{"class":281,"line":970},[152,57380,307],{"emptyLinePlaceholder":306},[152,57382,57383,57385],{"class":281,"line":979},[152,57384,56089],{"class":285},[152,57386,17187],{"class":483},[152,57388,57389,57391,57393,57395],{"class":281,"line":989},[152,57390,56096],{"class":293},[152,57392,52774],{"class":483},[152,57394,56101],{"class":293},[152,57396,2965],{"class":483},[152,57398,57399,57401,57403,57405,57407],{"class":281,"line":996},[152,57400,56108],{"class":293},[152,57402,52774],{"class":483},[152,57404,56113],{"class":293},[152,57406,52829],{"class":476},[152,57408,2965],{"class":483},[152,57410,57411,57413,57415,57417,57419],{"class":281,"line":1001},[152,57412,56122],{"class":293},[152,57414,52774],{"class":483},[152,57416,3210],{"class":293},[152,57418,52829],{"class":476},[152,57420,2965],{"class":483},[152,57422,57423,57425,57427,57429,57431,57433],{"class":281,"line":1006},[152,57424,56043],{"class":293},[152,57426,52774],{"class":483},[152,57428,2119],{"class":293},[152,57430,52829],{"class":476},[152,57432,52893],{"class":293},[152,57434,2965],{"class":483},[152,57436,57437],{"class":281,"line":1018},[152,57438,3838],{"class":483},[152,57440,57441],{"class":281,"line":1027},[152,57442,307],{"emptyLinePlaceholder":306},[152,57444,57445,57447],{"class":281,"line":1037},[152,57446,56157],{"class":285},[152,57448,17187],{"class":483},[152,57450,57451,57453,57455,57457],{"class":281,"line":1044},[152,57452,56096],{"class":293},[152,57454,52774],{"class":483},[152,57456,56168],{"class":293},[152,57458,2965],{"class":483},[152,57460,57461,57463,57465,57467],{"class":281,"line":1049},[152,57462,56175],{"class":293},[152,57464,52774],{"class":483},[152,57466,2000],{"class":293},[152,57468,2965],{"class":483},[152,57470,57471,57473,57475,57477],{"class":281,"line":1054},[152,57472,56186],{"class":293},[152,57474,52774],{"class":483},[152,57476,2000],{"class":293},[152,57478,2965],{"class":483},[152,57480,57481,57483,57485,57487,57489],{"class":281,"line":1065},[152,57482,56108],{"class":293},[152,57484,52774],{"class":483},[152,57486,2119],{"class":293},[152,57488,2136],{"class":476},[152,57490,2965],{"class":483},[152,57492,57493,57495,57497,57499,57501],{"class":281,"line":1074},[152,57494,56122],{"class":293},[152,57496,52774],{"class":483},[152,57498,2383],{"class":293},[152,57500,2136],{"class":476},[152,57502,2965],{"class":483},[152,57504,57505,57507,57509,57511],{"class":281,"line":1084},[152,57506,56221],{"class":293},[152,57508,52774],{"class":483},[152,57510,56226],{"class":293},[152,57512,2965],{"class":483},[152,57514,57515],{"class":281,"line":1091},[152,57516,3838],{"class":483},[152,57518,57519],{"class":281,"line":1096},[152,57520,307],{"emptyLinePlaceholder":306},[152,57522,57523,57525,57527],{"class":281,"line":1101},[152,57524,56157],{"class":285},[152,57526,8467],{"class":52637},[152,57528,17187],{"class":483},[152,57530,57531,57533,57535,57537],{"class":281,"line":1112},[152,57532,56096],{"class":293},[152,57534,52774],{"class":483},[152,57536,56168],{"class":293},[152,57538,2965],{"class":483},[152,57540,57541,57543,57545,57547,57549],{"class":281,"line":1121},[152,57542,56259],{"class":293},[152,57544,52774],{"class":483},[152,57546,2708],{"class":293},[152,57548,52829],{"class":476},[152,57550,2965],{"class":483},[152,57552,57553,57555,57557,57559,57561],{"class":281,"line":1131},[152,57554,56175],{"class":293},[152,57556,52774],{"class":483},[152,57558,2508],{"class":293},[152,57560,52829],{"class":476},[152,57562,2965],{"class":483},[152,57564,57565,57567,57569,57571,57573],{"class":281,"line":1138},[152,57566,56284],{"class":293},[152,57568,52774],{"class":483},[152,57570,2127],{"class":293},[152,57572,52829],{"class":476},[152,57574,2965],{"class":483},[152,57576,57577],{"class":281,"line":1143},[152,57578,3838],{"class":483},[152,57580,57581],{"class":281,"line":1148},[152,57582,307],{"emptyLinePlaceholder":306},[152,57584,57585,57587],{"class":281,"line":1159},[152,57586,56305],{"class":52637},[152,57588,17187],{"class":483},[152,57590,57591,57593,57595,57597],{"class":281,"line":1168},[152,57592,56096],{"class":293},[152,57594,52774],{"class":483},[152,57596,56168],{"class":293},[152,57598,2965],{"class":483},[152,57600,57601,57603,57605,57607,57609],{"class":281,"line":1178},[152,57602,56284],{"class":293},[152,57604,52774],{"class":483},[152,57606,2589],{"class":293},[152,57608,52829],{"class":476},[152,57610,2965],{"class":483},[152,57612,57613,57615,57617,57619,57621],{"class":281,"line":1185},[152,57614,56175],{"class":293},[152,57616,52774],{"class":483},[152,57618,2508],{"class":293},[152,57620,52829],{"class":476},[152,57622,2965],{"class":483},[152,57624,57625,57627,57629,57631],{"class":281,"line":1190},[152,57626,56346],{"class":293},[152,57628,52774],{"class":483},[152,57630,52814],{"class":293},[152,57632,2965],{"class":483},[152,57634,57635,57637,57639,57641],{"class":281,"line":1195},[152,57636,56357],{"class":293},[152,57638,52774],{"class":483},[152,57640,53005],{"class":293},[152,57642,2965],{"class":483},[152,57644,57645,57647,57649,57651],{"class":281,"line":1206},[152,57646,56096],{"class":293},[152,57648,52774],{"class":483},[152,57650,56168],{"class":293},[152,57652,2965],{"class":483},[152,57654,57655,57657,57659,57661,57663],{"class":281,"line":1215},[152,57656,56108],{"class":293},[152,57658,52774],{"class":483},[152,57660,5634],{"class":293},[152,57662,52829],{"class":476},[152,57664,2965],{"class":483},[152,57666,57667,57669,57671,57673,57675],{"class":281,"line":1225},[152,57668,56122],{"class":293},[152,57670,52774],{"class":483},[152,57672,2508],{"class":293},[152,57674,52829],{"class":476},[152,57676,2965],{"class":483},[152,57678,57679],{"class":281,"line":1232},[152,57680,3838],{"class":483},[152,57682,57683],{"class":281,"line":1237},[152,57684,307],{"emptyLinePlaceholder":306},[152,57686,57687,57689,57691],{"class":281,"line":1242},[152,57688,56305],{"class":52637},[152,57690,56412],{"class":52637},[152,57692,17187],{"class":483},[152,57694,57695,57697,57699,57701,57703],{"class":281,"line":1253},[152,57696,56108],{"class":293},[152,57698,52774],{"class":483},[152,57700,2508],{"class":293},[152,57702,52829],{"class":476},[152,57704,2965],{"class":483},[152,57706,57707,57709,57711,57713,57715],{"class":281,"line":1262},[152,57708,56122],{"class":293},[152,57710,52774],{"class":483},[152,57712,2508],{"class":293},[152,57714,52829],{"class":476},[152,57716,2965],{"class":483},[152,57718,57719,57721,57723,57725,57727,57729,57731,57733,57735,57737,57739,57741],{"class":281,"line":1272},[152,57720,56221],{"class":293},[152,57722,52774],{"class":483},[152,57724,56447],{"class":293},[152,57726,1819],{"class":483},[152,57728,2000],{"class":293},[152,57730,14051],{"class":483},[152,57732,2000],{"class":293},[152,57734,14051],{"class":483},[152,57736,2000],{"class":293},[152,57738,14051],{"class":483},[152,57740,56464],{"class":293},[152,57742,4362],{"class":483},[152,57744,57745,57747,57749,57751,57753],{"class":281,"line":1279},[152,57746,56471],{"class":293},[152,57748,52774],{"class":483},[152,57750,2254],{"class":293},[152,57752,52829],{"class":476},[152,57754,2965],{"class":483},[152,57756,57757],{"class":281,"line":1284},[152,57758,3838],{"class":483},[152,57760,57761],{"class":281,"line":1289},[152,57762,307],{"emptyLinePlaceholder":306},[152,57764,57765,57767],{"class":281,"line":1301},[152,57766,56492],{"class":285},[152,57768,17187],{"class":483},[152,57770,57771,57773,57775,57777],{"class":281,"line":1310},[152,57772,56221],{"class":293},[152,57774,52774],{"class":483},[152,57776,56503],{"class":293},[152,57778,2965],{"class":483},[152,57780,57781],{"class":281,"line":1320},[152,57782,3838],{"class":483},[152,57784,57785,57787,57789],{"class":281,"line":1327},[152,57786,53754],{"class":483},[152,57788,1736],{"class":52637},[152,57790,52644],{"class":483},[152,57792,57793,57795,57797],{"class":281,"line":11528},[152,57794,53122],{"class":483},[152,57796,52671],{"class":52637},[152,57798,52644],{"class":483},[152,57800,57801],{"class":281,"line":11536},[152,57802,307],{"emptyLinePlaceholder":306},[152,57804,57805,57807,57809],{"class":281,"line":11541},[152,57806,844],{"class":483},[152,57808,53137],{"class":52637},[152,57810,52644],{"class":483},[152,57812,57813,57815,57817,57819,57821,57823],{"class":281,"line":18219},[152,57814,53481],{"class":483},[152,57816,52948],{"class":52637},[152,57818,54823],{"class":285},[152,57820,1864],{"class":483},[152,57822,54828],{"class":289},[152,57824,52644],{"class":483},[152,57826,57827,57829,57831,57833,57835,57837],{"class":281,"line":18225},[152,57828,52678],{"class":483},[152,57830,52948],{"class":52637},[152,57832,54823],{"class":285},[152,57834,1864],{"class":483},[152,57836,56564],{"class":289},[152,57838,52644],{"class":483},[152,57840,57841,57843,57845,57847,57849,57851,57853,57855,57857],{"class":281,"line":18248},[152,57842,56571],{"class":483},[152,57844,401],{"class":52637},[152,57846,56576],{"class":285},[152,57848,1864],{"class":483},[152,57850,56581],{"class":289},[152,57852,56584],{"class":285},[152,57854,1864],{"class":483},[152,57856,9294],{"class":289},[152,57858,52644],{"class":483},[152,57860,57861,57863,57865],{"class":281,"line":18254},[152,57862,53113],{"class":483},[152,57864,52948],{"class":52637},[152,57866,52644],{"class":483},[152,57868,57869,57871,57873,57875,57877,57879],{"class":281,"line":18277},[152,57870,52678],{"class":483},[152,57872,52948],{"class":52637},[152,57874,54823],{"class":285},[152,57876,1864],{"class":483},[152,57878,56611],{"class":289},[152,57880,52644],{"class":483},[152,57882,57883,57885,57887,57889,57891],{"class":281,"line":18291},[152,57884,56571],{"class":483},[152,57886,19],{"class":52637},[152,57888,56622],{"class":483},[152,57890,19],{"class":52637},[152,57892,52644],{"class":483},[152,57894,57895,57897,57899],{"class":281,"line":18311},[152,57896,56571],{"class":483},[152,57898,698],{"class":52637},[152,57900,52644],{"class":483},[152,57902,57903,57905,57907,57909,57911,57913,57915,57917],{"class":281,"line":18317},[152,57904,56639],{"class":483},[152,57906,419],{"class":52637},[152,57908,54823],{"class":285},[152,57910,1864],{"class":483},[152,57912,56648],{"class":289},[152,57914,56651],{"class":483},[152,57916,419],{"class":52637},[152,57918,52644],{"class":483},[152,57920,57921,57923,57925,57927,57929],{"class":281,"line":18328},[152,57922,56639],{"class":483},[152,57924,419],{"class":52637},[152,57926,56651],{"class":483},[152,57928,419],{"class":52637},[152,57930,52644],{"class":483},[152,57932,57933,57935,57937,57939,57941],{"class":281,"line":18351},[152,57934,56639],{"class":483},[152,57936,419],{"class":52637},[152,57938,56651],{"class":483},[152,57940,419],{"class":52637},[152,57942,52644],{"class":483},[152,57944,57945,57947,57949,57951,57953],{"class":281,"line":18373},[152,57946,56639],{"class":483},[152,57948,419],{"class":52637},[152,57950,56651],{"class":483},[152,57952,419],{"class":52637},[152,57954,52644],{"class":483},[152,57956,57957,57959,57961,57963,57965],{"class":281,"line":18378},[152,57958,56639],{"class":483},[152,57960,419],{"class":52637},[152,57962,56651],{"class":483},[152,57964,419],{"class":52637},[152,57966,52644],{"class":483},[152,57968,57969,57971,57973,57975,57977],{"class":281,"line":18384},[152,57970,56639],{"class":483},[152,57972,419],{"class":52637},[152,57974,56651],{"class":483},[152,57976,419],{"class":52637},[152,57978,52644],{"class":483},[152,57980,57981,57983,57985,57987,57989],{"class":281,"line":18398},[152,57982,56639],{"class":483},[152,57984,419],{"class":52637},[152,57986,56651],{"class":483},[152,57988,419],{"class":52637},[152,57990,52644],{"class":483},[152,57992,57993,57995,57997,57999,58001],{"class":281,"line":18411},[152,57994,56639],{"class":483},[152,57996,419],{"class":52637},[152,57998,56651],{"class":483},[152,58000,419],{"class":52637},[152,58002,52644],{"class":483},[152,58004,58005,58007,58009],{"class":281,"line":18416},[152,58006,56744],{"class":483},[152,58008,698],{"class":52637},[152,58010,52644],{"class":483},[152,58012,58013,58015,58017],{"class":281,"line":18430},[152,58014,53113],{"class":483},[152,58016,52948],{"class":52637},[152,58018,52644],{"class":483},[152,58020,58021,58023,58025],{"class":281,"line":18435},[152,58022,53754],{"class":483},[152,58024,52948],{"class":52637},[152,58026,52644],{"class":483},[152,58028,58029,58031,58033],{"class":281,"line":18441},[152,58030,53481],{"class":483},[152,58032,53150],{"class":52637},[152,58034,52644],{"class":483},[152,58036,58037,58039,58042,58044],{"class":281,"line":18446},[152,58038,12837],{"class":476},[152,58040,58041],{"class":293}," sliderData",[152,58043,15180],{"class":476},[152,58045,56784],{"class":483},[152,58047,58048,58050,58052,58054,58056,58058,58060],{"class":281,"line":18460},[152,58049,56789],{"class":483},[152,58051,56792],{"class":289},[152,58053,56795],{"class":483},[152,58055,56798],{"class":289},[152,58057,56801],{"class":483},[152,58059,56804],{"class":289},[152,58061,56807],{"class":483},[152,58063,58064,58066,58068,58070,58072,58074,58076],{"class":281,"line":18465},[152,58065,56789],{"class":483},[152,58067,56814],{"class":289},[152,58069,56795],{"class":483},[152,58071,56819],{"class":289},[152,58073,56801],{"class":483},[152,58075,56824],{"class":289},[152,58077,56807],{"class":483},[152,58079,58080,58082,58084,58086,58088,58090,58092],{"class":281,"line":18470},[152,58081,56789],{"class":483},[152,58083,56833],{"class":289},[152,58085,56795],{"class":483},[152,58087,56838],{"class":289},[152,58089,56801],{"class":483},[152,58091,56843],{"class":289},[152,58093,56807],{"class":483},[152,58095,58096,58098,58100,58102,58104,58106,58108],{"class":281,"line":18484},[152,58097,56789],{"class":483},[152,58099,56852],{"class":289},[152,58101,56795],{"class":483},[152,58103,56857],{"class":289},[152,58105,56801],{"class":483},[152,58107,56862],{"class":289},[152,58109,56807],{"class":483},[152,58111,58112,58114,58116,58118,58120,58122,58124],{"class":281,"line":18496},[152,58113,56789],{"class":483},[152,58115,56871],{"class":289},[152,58117,56795],{"class":483},[152,58119,56876],{"class":289},[152,58121,56801],{"class":483},[152,58123,56881],{"class":289},[152,58125,56807],{"class":483},[152,58127,58128,58130,58132,58134,58136,58138,58140],{"class":281,"line":18501},[152,58129,56789],{"class":483},[152,58131,56890],{"class":289},[152,58133,56795],{"class":483},[152,58135,56895],{"class":289},[152,58137,56801],{"class":483},[152,58139,56900],{"class":289},[152,58141,56807],{"class":483},[152,58143,58144,58146,58148,58150,58152,58154,58156],{"class":281,"line":18514},[152,58145,56789],{"class":483},[152,58147,56909],{"class":289},[152,58149,56795],{"class":483},[152,58151,56914],{"class":289},[152,58153,56801],{"class":483},[152,58155,56919],{"class":289},[152,58157,56807],{"class":483},[152,58159,58160,58162,58164,58166,58168,58170,58172],{"class":281,"line":18519},[152,58161,56789],{"class":483},[152,58163,56928],{"class":289},[152,58165,56795],{"class":483},[152,58167,56933],{"class":289},[152,58169,56801],{"class":483},[152,58171,56938],{"class":289},[152,58173,56941],{"class":483},[152,58175,58176],{"class":281,"line":18524},[152,58177,54446],{"class":483},[152,58179,58180],{"class":281,"line":18529},[152,58181,58182],{"class":866},"    \u002F\u002F 1.获取元素\n",[152,58184,58185,58187,58189,58191,58193,58195,58197,58199],{"class":281,"line":18542},[152,58186,12837],{"class":476},[152,58188,56952],{"class":293},[152,58190,15180],{"class":476},[152,58192,55733],{"class":483},[152,58194,55736],{"class":285},[152,58196,1819],{"class":483},[152,58198,56963],{"class":289},[152,58200,1825],{"class":483},[152,58202,58203,58205,58207,58209,58211,58213,58215,58217],{"class":281,"line":18547},[152,58204,12837],{"class":476},[152,58206,8467],{"class":293},[152,58208,15180],{"class":476},[152,58210,55733],{"class":483},[152,58212,55736],{"class":285},[152,58214,1819],{"class":483},[152,58216,56982],{"class":289},[152,58218,1825],{"class":483},[152,58220,58221,58223,58225,58227],{"class":281,"line":33970},[152,58222,53556],{"class":476},[152,58224,11070],{"class":483},[152,58226,1864],{"class":476},[152,58228,48670],{"class":293},[152,58230,58231],{"class":281,"line":33976},[152,58232,58233],{"class":866},"    \u002F\u002F 2.开启定时器\n",[152,58235,58236],{"class":281,"line":33982},[152,58237,58238],{"class":866},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[152,58240,58241,58244,58246,58248],{"class":281,"line":33988},[152,58242,58243],{"class":285},"    setInterval",[152,58245,1819],{"class":483},[152,58247,55786],{"class":476},[152,58249,55789],{"class":483},[152,58251,58252,58254],{"class":281,"line":33994},[152,58253,55794],{"class":483},[152,58255,4345],{"class":476},[152,58257,58258,58260,58262,58264,58267,58269],{"class":281,"line":34005},[152,58259,55817],{"class":476},[152,58261,55820],{"class":483},[152,58263,3370],{"class":476},[152,58265,58266],{"class":483}," sliderData.",[152,58268,53305],{"class":293},[152,58270,14058],{"class":483},[152,58272,58273,58276,58278],{"class":281,"line":34011},[152,58274,58275],{"class":483},"        i ",[152,58277,1864],{"class":476},[152,58279,48670],{"class":293},[152,58281,58282],{"class":281,"line":34031},[152,58283,53735],{"class":483},[152,58285,58286],{"class":281,"line":34037},[152,58287,58288],{"class":866},"      \u002F\u002F 更换图片路径\n",[152,58290,58291,58293,58295],{"class":281,"line":34048},[152,58292,57058],{"class":483},[152,58294,1864],{"class":476},[152,58296,58297],{"class":483}," sliderData[i].url\n",[152,58299,58300],{"class":281,"line":34054},[152,58301,58302],{"class":866},"      \u002F\u002F 把文字写到p里面\n",[152,58304,58305,58307,58309],{"class":281,"line":34060},[152,58306,57068],{"class":483},[152,58308,1864],{"class":476},[152,58310,58311],{"class":483}," sliderData[i].title\n",[152,58313,58314],{"class":281,"line":34066},[152,58315,58316],{"class":866},"      \u002F\u002F 小圆点\n",[152,58318,58319],{"class":281,"line":34072},[152,58320,58321],{"class":866},"      \u002F\u002F 先删除以前的active\n",[152,58323,58324],{"class":281,"line":34078},[152,58325,58326],{"class":866},"      \u002F\u002F 只让当前li添加active\n",[152,58328,58329,58331,58333,58335,58338,58341,58344,58346,58348],{"class":281,"line":34084},[152,58330,57108],{"class":483},[152,58332,55736],{"class":285},[152,58334,1819],{"class":483},[152,58336,58337],{"class":289},"'.slider-footer .activate'",[152,58339,58340],{"class":483},").classList.",[152,58342,58343],{"class":285},"remove",[152,58345,1819],{"class":483},[152,58347,57126],{"class":289},[152,58349,1825],{"class":483},[152,58351,58352,58354,58356,58358,58361,58363,58365,58367,58370,58372,58374,58376,58378],{"class":281,"line":34090},[152,58353,57108],{"class":483},[152,58355,55736],{"class":285},[152,58357,1819],{"class":483},[152,58359,58360],{"class":289},"`.slider-footer ul li:nth-child(${",[152,58362,2249],{"class":483},[152,58364,46903],{"class":476},[152,58366,26729],{"class":293},[152,58368,58369],{"class":289},"})`",[152,58371,58340],{"class":483},[152,58373,6976],{"class":285},[152,58375,1819],{"class":483},[152,58377,57126],{"class":289},[152,58379,1825],{"class":483},[152,58381,58382],{"class":281,"line":34110},[152,58383,307],{"emptyLinePlaceholder":306},[152,58385,58386,58388,58390],{"class":281,"line":34116},[152,58387,55872],{"class":483},[152,58389,8052],{"class":293},[152,58391,1825],{"class":483},[152,58393,58394],{"class":281,"line":34132},[152,58395,307],{"emptyLinePlaceholder":306},[152,58397,58398,58400,58402],{"class":281,"line":34138},[152,58399,53754],{"class":483},[152,58401,53150],{"class":52637},[152,58403,52644],{"class":483},[152,58405,58406,58408,58410],{"class":281,"line":34152},[152,58407,53122],{"class":483},[152,58409,53137],{"class":52637},[152,58411,52644],{"class":483},[152,58413,58414],{"class":281,"line":34158},[152,58415,307],{"emptyLinePlaceholder":306},[152,58417,58418,58420,58422],{"class":281,"line":34173},[152,58419,53122],{"class":483},[152,58421,51972],{"class":52637},[152,58423,52644],{"class":483},[14,58425,58427],{"id":58426},"_317-重要知识点","3.1.7 重要知识点",[19,58429,58430,58431],{},"浏览器在渲染文本时， ",[694,58432,58433],{},"没有空格或换行符就没有“断行点”",[19,58435,58436],{},[401,58437],{"alt":275,"src":58438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58440,58441],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58443,58444],{},[401,58445],{"alt":275,"src":58446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58448,58449],{},[401,58450],{"alt":275,"src":58451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[1760,58453,58455],{"id":58454},"_32-dom事件基础","3.2 DOM事件基础",[14,58457,58459],{"id":58458},"_321-事件监听","3.2.1 事件监听",[19,58461,58462],{},[401,58463],{"alt":275,"src":58464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58466,58467],{},"事件监听有响应的发生",[19,58469,58470],{},[401,58471],{"alt":275,"src":58472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58474,58475],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58477,58478],{},"对于有名函数,要执行的函数名后边不要加()",[14,58480,58482],{"id":58481},"_322-随机点名案例","3.2.2 随机点名案例",[270,58484,58486],{"className":51970,"code":58485,"language":51972,"meta":275,"style":275},"\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",[277,58487,58488,58498,58512,58516,58524,58538,58558,58570,58578,58584,58594,58604,58608,58612,58619,58630,58634,58638,58644,58656,58670,58680,58692,58705,58709,58713,58720,58724,58737,58749,58761,58765,58769,58773,58780,58790,58794,58798,58807,58819,58831,58846,58850,58858,58866,58870,58878,58891,58905,58918,58938,58946,58961,58981,59001,59009,59013,59021,59026,59062,59082,59087,59106,59111,59122,59127,59138,59143,59162,59177,59182,59208,59218,59227,59232,59248,59253,59258,59263,59278,59282,59286,59291,59310,59327,59335,59340,59355,59359,59363,59371,59379,59383],{"__ignoreMap":275},[152,58489,58490,58492,58494,58496],{"class":281,"line":282},[152,58491,52634],{"class":483},[152,58493,52638],{"class":52637},[152,58495,52641],{"class":285},[152,58497,52644],{"class":483},[152,58499,58500,58502,58504,58506,58508,58510],{"class":281,"line":303},[152,58501,844],{"class":483},[152,58503,51972],{"class":52637},[152,58505,52653],{"class":285},[152,58507,1864],{"class":483},[152,58509,52658],{"class":289},[152,58511,52644],{"class":483},[152,58513,58514],{"class":281,"line":310},[152,58515,307],{"emptyLinePlaceholder":306},[152,58517,58518,58520,58522],{"class":281,"line":324},[152,58519,844],{"class":483},[152,58521,52671],{"class":52637},[152,58523,52644],{"class":483},[152,58525,58526,58528,58530,58532,58534,58536],{"class":281,"line":329},[152,58527,53481],{"class":483},[152,58529,52681],{"class":52637},[152,58531,52684],{"class":285},[152,58533,1864],{"class":483},[152,58535,52689],{"class":289},[152,58537,52644],{"class":483},[152,58539,58540,58542,58544,58546,58548,58550,58552,58554,58556],{"class":281,"line":343},[152,58541,53481],{"class":483},[152,58543,52681],{"class":52637},[152,58545,16535],{"class":285},[152,58547,1864],{"class":483},[152,58549,52728],{"class":289},[152,58551,52708],{"class":285},[152,58553,1864],{"class":483},[152,58555,52735],{"class":289},[152,58557,52644],{"class":483},[152,58559,58560,58562,58564,58566,58568],{"class":281,"line":348},[152,58561,53481],{"class":483},[152,58563,52744],{"class":52637},[152,58565,52747],{"class":483},[152,58567,52744],{"class":52637},[152,58569,52644],{"class":483},[152,58571,58572,58574,58576],{"class":281,"line":362},[152,58573,53481],{"class":483},[152,58575,1736],{"class":52637},[152,58577,52644],{"class":483},[152,58579,58580,58582],{"class":281,"line":367},[152,58581,8045],{"class":52637},[152,58583,17187],{"class":483},[152,58585,58586,58588,58590,58592],{"class":281,"line":381},[152,58587,56043],{"class":293},[152,58589,52774],{"class":483},[152,58591,2000],{"class":293},[152,58593,2965],{"class":483},[152,58595,58596,58598,58600,58602],{"class":281,"line":386},[152,58597,56032],{"class":293},[152,58599,52774],{"class":483},[152,58601,2000],{"class":293},[152,58603,2965],{"class":483},[152,58605,58606],{"class":281,"line":932},[152,58607,3838],{"class":483},[152,58609,58610],{"class":281,"line":942},[152,58611,307],{"emptyLinePlaceholder":306},[152,58613,58614,58617],{"class":281,"line":949},[152,58615,58616],{"class":52637},"    h2",[152,58618,17187],{"class":483},[152,58620,58621,58624,58626,58628],{"class":281,"line":954},[152,58622,58623],{"class":293},"      text-align",[152,58625,52774],{"class":483},[152,58627,52929],{"class":293},[152,58629,2965],{"class":483},[152,58631,58632],{"class":281,"line":959},[152,58633,3838],{"class":483},[152,58635,58636],{"class":281,"line":970},[152,58637,307],{"emptyLinePlaceholder":306},[152,58639,58640,58642],{"class":281,"line":979},[152,58641,56089],{"class":285},[152,58643,17187],{"class":483},[152,58645,58646,58648,58650,58652,58654],{"class":281,"line":989},[152,58647,56108],{"class":293},[152,58649,52774],{"class":483},[152,58651,3210],{"class":293},[152,58653,52829],{"class":476},[152,58655,2965],{"class":483},[152,58657,58658,58660,58662,58664,58666,58668],{"class":281,"line":996},[152,58659,56043],{"class":293},[152,58661,52774],{"class":483},[152,58663,2464],{"class":293},[152,58665,52829],{"class":476},[152,58667,52893],{"class":293},[152,58669,2965],{"class":483},[152,58671,58672,58674,58676,58678],{"class":281,"line":1001},[152,58673,56346],{"class":293},[152,58675,52774],{"class":483},[152,58677,52814],{"class":293},[152,58679,2965],{"class":483},[152,58681,58682,58684,58686,58688,58690],{"class":281,"line":1006},[152,58683,56259],{"class":293},[152,58685,52774],{"class":483},[152,58687,2633],{"class":293},[152,58689,52829],{"class":476},[152,58691,2965],{"class":483},[152,58693,58694,58697,58699,58701,58703],{"class":281,"line":1018},[152,58695,58696],{"class":293},"      line-height",[152,58698,52774],{"class":483},[152,58700,2209],{"class":293},[152,58702,52829],{"class":476},[152,58704,2965],{"class":483},[152,58706,58707],{"class":281,"line":1027},[152,58708,3838],{"class":483},[152,58710,58711],{"class":281,"line":1037},[152,58712,307],{"emptyLinePlaceholder":306},[152,58714,58715,58718],{"class":281,"line":1044},[152,58716,58717],{"class":285},"    .qs",[152,58719,17187],{"class":483},[152,58721,58722],{"class":281,"line":1049},[152,58723,307],{"emptyLinePlaceholder":306},[152,58725,58726,58728,58730,58733,58735],{"class":281,"line":1054},[152,58727,56108],{"class":293},[152,58729,52774],{"class":483},[152,58731,58732],{"class":293},"450",[152,58734,52829],{"class":476},[152,58736,2965],{"class":483},[152,58738,58739,58741,58743,58745,58747],{"class":281,"line":1065},[152,58740,56122],{"class":293},[152,58742,52774],{"class":483},[152,58744,2209],{"class":293},[152,58746,52829],{"class":476},[152,58748,2965],{"class":483},[152,58750,58751,58754,58756,58759],{"class":281,"line":1074},[152,58752,58753],{"class":293},"      color",[152,58755,52774],{"class":483},[152,58757,58758],{"class":293},"red",[152,58760,2965],{"class":483},[152,58762,58763],{"class":281,"line":1084},[152,58764,307],{"emptyLinePlaceholder":306},[152,58766,58767],{"class":281,"line":1091},[152,58768,3838],{"class":483},[152,58770,58771],{"class":281,"line":1096},[152,58772,307],{"emptyLinePlaceholder":306},[152,58774,58775,58778],{"class":281,"line":1101},[152,58776,58777],{"class":285},"    .btns",[152,58779,17187],{"class":483},[152,58781,58782,58784,58786,58788],{"class":281,"line":1112},[152,58783,58623],{"class":293},[152,58785,52774],{"class":483},[152,58787,52929],{"class":293},[152,58789,2965],{"class":483},[152,58791,58792],{"class":281,"line":1121},[152,58793,3838],{"class":483},[152,58795,58796],{"class":281,"line":1131},[152,58797,307],{"emptyLinePlaceholder":306},[152,58799,58800,58802,58805],{"class":281,"line":1138},[152,58801,58777],{"class":285},[152,58803,58804],{"class":52637}," button",[152,58806,17187],{"class":483},[152,58808,58809,58811,58813,58815,58817],{"class":281,"line":1143},[152,58810,56108],{"class":293},[152,58812,52774],{"class":483},[152,58814,2625],{"class":293},[152,58816,52829],{"class":476},[152,58818,2965],{"class":483},[152,58820,58821,58823,58825,58827,58829],{"class":281,"line":1148},[152,58822,56122],{"class":293},[152,58824,52774],{"class":483},[152,58826,2081],{"class":293},[152,58828,52829],{"class":476},[152,58830,2965],{"class":483},[152,58832,58833,58835,58837,58839,58842,58844],{"class":281,"line":1159},[152,58834,56043],{"class":293},[152,58836,52774],{"class":483},[152,58838,2000],{"class":293},[152,58840,58841],{"class":293}," 50",[152,58843,52829],{"class":476},[152,58845,2965],{"class":483},[152,58847,58848],{"class":281,"line":1168},[152,58849,3838],{"class":483},[152,58851,58852,58854,58856],{"class":281,"line":1178},[152,58853,53754],{"class":483},[152,58855,1736],{"class":52637},[152,58857,52644],{"class":483},[152,58859,58860,58862,58864],{"class":281,"line":1185},[152,58861,53122],{"class":483},[152,58863,52671],{"class":52637},[152,58865,52644],{"class":483},[152,58867,58868],{"class":281,"line":1190},[152,58869,307],{"emptyLinePlaceholder":306},[152,58871,58872,58874,58876],{"class":281,"line":1195},[152,58873,844],{"class":483},[152,58875,53137],{"class":52637},[152,58877,52644],{"class":483},[152,58879,58880,58882,58884,58887,58889],{"class":281,"line":1206},[152,58881,53481],{"class":483},[152,58883,1760],{"class":52637},[152,58885,58886],{"class":483},">随机点名\u003C\u002F",[152,58888,1760],{"class":52637},[152,58890,52644],{"class":483},[152,58892,58893,58895,58897,58899,58901,58903],{"class":281,"line":1215},[152,58894,53481],{"class":483},[152,58896,52948],{"class":52637},[152,58898,54823],{"class":285},[152,58900,1864],{"class":483},[152,58902,54828],{"class":289},[152,58904,52644],{"class":483},[152,58906,58907,58909,58911,58914,58916],{"class":281,"line":1225},[152,58908,52678],{"class":483},[152,58910,152],{"class":52637},[152,58912,58913],{"class":483},">名字是：\u003C\u002F",[152,58915,152],{"class":52637},[152,58917,52644],{"class":483},[152,58919,58920,58922,58924,58926,58928,58931,58934,58936],{"class":281,"line":1232},[152,58921,52678],{"class":483},[152,58923,52948],{"class":52637},[152,58925,54823],{"class":285},[152,58927,1864],{"class":483},[152,58929,58930],{"class":289},"\"qs\"",[152,58932,58933],{"class":483},">这里显示姓名\u003C\u002F",[152,58935,52948],{"class":52637},[152,58937,52644],{"class":483},[152,58939,58940,58942,58944],{"class":281,"line":1237},[152,58941,53754],{"class":483},[152,58943,52948],{"class":52637},[152,58945,52644],{"class":483},[152,58947,58948,58950,58952,58954,58956,58959],{"class":281,"line":1242},[152,58949,53481],{"class":483},[152,58951,52948],{"class":52637},[152,58953,54823],{"class":285},[152,58955,1864],{"class":483},[152,58957,58958],{"class":289},"\"btns\"",[152,58960,52644],{"class":483},[152,58962,58963,58965,58967,58969,58971,58974,58977,58979],{"class":281,"line":1253},[152,58964,52678],{"class":483},[152,58966,55224],{"class":52637},[152,58968,54823],{"class":285},[152,58970,1864],{"class":483},[152,58972,58973],{"class":289},"\"start\"",[152,58975,58976],{"class":483},">开始\u003C\u002F",[152,58978,55224],{"class":52637},[152,58980,52644],{"class":483},[152,58982,58983,58985,58987,58989,58991,58994,58997,58999],{"class":281,"line":1262},[152,58984,52678],{"class":483},[152,58986,55224],{"class":52637},[152,58988,54823],{"class":285},[152,58990,1864],{"class":483},[152,58992,58993],{"class":289},"\"end\"",[152,58995,58996],{"class":483},">结束\u003C\u002F",[152,58998,55224],{"class":52637},[152,59000,52644],{"class":483},[152,59002,59003,59005,59007],{"class":281,"line":1272},[152,59004,53754],{"class":483},[152,59006,52948],{"class":52637},[152,59008,52644],{"class":483},[152,59010,59011],{"class":281,"line":1279},[152,59012,307],{"emptyLinePlaceholder":306},[152,59014,59015,59017,59019],{"class":281,"line":1284},[152,59016,53481],{"class":483},[152,59018,53150],{"class":52637},[152,59020,52644],{"class":483},[152,59022,59023],{"class":281,"line":1289},[152,59024,59025],{"class":866},"    \u002F\u002F 数据数组\n",[152,59027,59028,59030,59033,59035,59037,59040,59042,59045,59047,59050,59052,59055,59057,59060],{"class":281,"line":1301},[152,59029,12837],{"class":476},[152,59031,59032],{"class":293}," arr",[152,59034,15180],{"class":476},[152,59036,53563],{"class":483},[152,59038,59039],{"class":289},"'马超'",[152,59041,14051],{"class":483},[152,59043,59044],{"class":289},"'黄忠'",[152,59046,14051],{"class":483},[152,59048,59049],{"class":289},"'赵云'",[152,59051,14051],{"class":483},[152,59053,59054],{"class":289},"'关羽'",[152,59056,14051],{"class":483},[152,59058,59059],{"class":289},"'张飞'",[152,59061,34583],{"class":483},[152,59063,59064,59066,59069,59071,59073,59075,59077,59080],{"class":281,"line":1310},[152,59065,12837],{"class":476},[152,59067,59068],{"class":293}," qs",[152,59070,15180],{"class":476},[152,59072,55733],{"class":483},[152,59074,55736],{"class":285},[152,59076,1819],{"class":483},[152,59078,59079],{"class":289},"'.qs'",[152,59081,1825],{"class":483},[152,59083,59084],{"class":281,"line":1320},[152,59085,59086],{"class":866},"    \u002F\u002F 1.业务1.开始按钮模块\n",[152,59088,59089,59091,59093,59095,59097,59099,59101,59104],{"class":281,"line":1327},[152,59090,12837],{"class":476},[152,59092,5826],{"class":293},[152,59094,15180],{"class":476},[152,59096,55733],{"class":483},[152,59098,55736],{"class":285},[152,59100,1819],{"class":483},[152,59102,59103],{"class":289},"'.start'",[152,59105,1825],{"class":483},[152,59107,59108],{"class":281,"line":11528},[152,59109,59110],{"class":866},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[152,59112,59113,59115,59118,59120],{"class":281,"line":11536},[152,59114,53556],{"class":476},[152,59116,59117],{"class":483}," timerId ",[152,59119,1864],{"class":476},[152,59121,48670],{"class":293},[152,59123,59124],{"class":281,"line":11541},[152,59125,59126],{"class":866},"    \u002F\u002F 随机号要全局变量\n",[152,59128,59129,59131,59134,59136],{"class":281,"line":18219},[152,59130,53556],{"class":476},[152,59132,59133],{"class":483}," random ",[152,59135,1864],{"class":476},[152,59137,48670],{"class":293},[152,59139,59140],{"class":281,"line":18225},[152,59141,59142],{"class":866},"    \u002F\u002F 1.1 添加点击事件\n",[152,59144,59145,59148,59151,59153,59156,59158,59160],{"class":281,"line":18248},[152,59146,59147],{"class":483},"    start.",[152,59149,59150],{"class":285},"addEventListener",[152,59152,1819],{"class":483},[152,59154,59155],{"class":289},"'click'",[152,59157,14051],{"class":483},[152,59159,55786],{"class":476},[152,59161,55789],{"class":483},[152,59163,59164,59167,59169,59171,59173,59175],{"class":281,"line":18254},[152,59165,59166],{"class":483},"      timerId ",[152,59168,1864],{"class":476},[152,59170,55781],{"class":285},[152,59172,1819],{"class":483},[152,59174,55786],{"class":476},[152,59176,55789],{"class":483},[152,59178,59179],{"class":281,"line":18277},[152,59180,59181],{"class":866},"        \u002F\u002F 随机数\n",[152,59183,59184,59187,59189,59192,59195,59198,59200,59202,59204,59206],{"class":281,"line":18291},[152,59185,59186],{"class":483},"        random ",[152,59188,1864],{"class":476},[152,59190,59191],{"class":285}," parseInt",[152,59193,59194],{"class":483},"(Math.",[152,59196,59197],{"class":285},"random",[152,59199,14666],{"class":483},[152,59201,2263],{"class":476},[152,59203,53302],{"class":483},[152,59205,53305],{"class":293},[152,59207,1825],{"class":483},[152,59209,59210,59213,59215],{"class":281,"line":18311},[152,59211,59212],{"class":483},"        qs.innerHTML ",[152,59214,1864],{"class":476},[152,59216,59217],{"class":483}," arr[random]\n",[152,59219,59220,59223,59225],{"class":281,"line":18317},[152,59221,59222],{"class":483},"      }, ",[152,59224,2081],{"class":293},[152,59226,1825],{"class":483},[152,59228,59229],{"class":281,"line":18328},[152,59230,59231],{"class":866},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[152,59233,59234,59236,59239,59241,59244,59246],{"class":281,"line":18351},[152,59235,55817],{"class":476},[152,59237,59238],{"class":483}," (arr.",[152,59240,53305],{"class":293},[152,59242,59243],{"class":476}," ===",[152,59245,26729],{"class":293},[152,59247,14058],{"class":483},[152,59249,59250],{"class":281,"line":18373},[152,59251,59252],{"class":866},"        \u002F\u002F start.disabled = true\n",[152,59254,59255],{"class":281,"line":18378},[152,59256,59257],{"class":866},"        \u002F\u002F end.disabled = true\n",[152,59259,59260],{"class":281,"line":18384},[152,59261,59262],{"class":866},"        \u002F\u002F 可以合起来写\n",[152,59264,59265,59268,59270,59273,59275],{"class":281,"line":18398},[152,59266,59267],{"class":483},"        start.disabled ",[152,59269,1864],{"class":476},[152,59271,59272],{"class":483}," end.disabled ",[152,59274,1864],{"class":476},[152,59276,59277],{"class":293}," true\n",[152,59279,59280],{"class":281,"line":18411},[152,59281,53735],{"class":483},[152,59283,59284],{"class":281,"line":18416},[152,59285,34798],{"class":483},[152,59287,59288],{"class":281,"line":18430},[152,59289,59290],{"class":866},"    \u002F\u002F 1.2 关闭按钮模块\n",[152,59292,59293,59295,59297,59299,59301,59303,59305,59308],{"class":281,"line":18435},[152,59294,12837],{"class":476},[152,59296,5842],{"class":293},[152,59298,15180],{"class":476},[152,59300,55733],{"class":483},[152,59302,55736],{"class":285},[152,59304,1819],{"class":483},[152,59306,59307],{"class":289},"'.end'",[152,59309,1825],{"class":483},[152,59311,59312,59315,59317,59319,59321,59323,59325],{"class":281,"line":18441},[152,59313,59314],{"class":483},"    end.",[152,59316,59150],{"class":285},[152,59318,1819],{"class":483},[152,59320,59155],{"class":289},[152,59322,14051],{"class":483},[152,59324,55786],{"class":476},[152,59326,55789],{"class":483},[152,59328,59329,59332],{"class":281,"line":18446},[152,59330,59331],{"class":285},"      clearInterval",[152,59333,59334],{"class":483},"(timerId)\n",[152,59336,59337],{"class":281,"line":18460},[152,59338,59339],{"class":866},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[152,59341,59342,59345,59348,59351,59353],{"class":281,"line":18465},[152,59343,59344],{"class":483},"      arr.",[152,59346,59347],{"class":285},"splice",[152,59349,59350],{"class":483},"(random, ",[152,59352,2026],{"class":293},[152,59354,1825],{"class":483},[152,59356,59357],{"class":281,"line":18470},[152,59358,34798],{"class":483},[152,59360,59361],{"class":281,"line":18484},[152,59362,307],{"emptyLinePlaceholder":306},[152,59364,59365,59367,59369],{"class":281,"line":18496},[152,59366,53754],{"class":483},[152,59368,53150],{"class":52637},[152,59370,52644],{"class":483},[152,59372,59373,59375,59377],{"class":281,"line":18501},[152,59374,53122],{"class":483},[152,59376,53137],{"class":52637},[152,59378,52644],{"class":483},[152,59380,59381],{"class":281,"line":18514},[152,59382,307],{"emptyLinePlaceholder":306},[152,59384,59385,59387,59389],{"class":281,"line":18519},[152,59386,53122],{"class":483},[152,59388,51972],{"class":52637},[152,59390,52644],{"class":483},[19,59392,59393],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[14,59395,59397],{"id":59396},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[270,59399,59401],{"className":51970,"code":59400,"language":51972,"meta":275,"style":275},"\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",[277,59402,59403,59413,59427,59431,59439,59453,59473,59485,59493,59497,59505,59517,59525,59544,59561,59577,59587,59591,59599,59607,59611],{"__ignoreMap":275},[152,59404,59405,59407,59409,59411],{"class":281,"line":282},[152,59406,52634],{"class":483},[152,59408,52638],{"class":52637},[152,59410,52641],{"class":285},[152,59412,52644],{"class":483},[152,59414,59415,59417,59419,59421,59423,59425],{"class":281,"line":303},[152,59416,844],{"class":483},[152,59418,51972],{"class":52637},[152,59420,52653],{"class":285},[152,59422,1864],{"class":483},[152,59424,52658],{"class":289},[152,59426,52644],{"class":483},[152,59428,59429],{"class":281,"line":310},[152,59430,307],{"emptyLinePlaceholder":306},[152,59432,59433,59435,59437],{"class":281,"line":324},[152,59434,844],{"class":483},[152,59436,52671],{"class":52637},[152,59438,52644],{"class":483},[152,59440,59441,59443,59445,59447,59449,59451],{"class":281,"line":329},[152,59442,53481],{"class":483},[152,59444,52681],{"class":52637},[152,59446,52684],{"class":285},[152,59448,1864],{"class":483},[152,59450,52689],{"class":289},[152,59452,52644],{"class":483},[152,59454,59455,59457,59459,59461,59463,59465,59467,59469,59471],{"class":281,"line":343},[152,59456,53481],{"class":483},[152,59458,52681],{"class":52637},[152,59460,16535],{"class":285},[152,59462,1864],{"class":483},[152,59464,52728],{"class":289},[152,59466,52708],{"class":285},[152,59468,1864],{"class":483},[152,59470,52735],{"class":289},[152,59472,52644],{"class":483},[152,59474,59475,59477,59479,59481,59483],{"class":281,"line":348},[152,59476,53481],{"class":483},[152,59478,52744],{"class":52637},[152,59480,52747],{"class":483},[152,59482,52744],{"class":52637},[152,59484,52644],{"class":483},[152,59486,59487,59489,59491],{"class":281,"line":362},[152,59488,53122],{"class":483},[152,59490,52671],{"class":52637},[152,59492,52644],{"class":483},[152,59494,59495],{"class":281,"line":367},[152,59496,307],{"emptyLinePlaceholder":306},[152,59498,59499,59501,59503],{"class":281,"line":381},[152,59500,844],{"class":483},[152,59502,53137],{"class":52637},[152,59504,52644],{"class":483},[152,59506,59507,59509,59511,59513,59515],{"class":281,"line":386},[152,59508,53481],{"class":483},[152,59510,55224],{"class":52637},[152,59512,55230],{"class":483},[152,59514,55224],{"class":52637},[152,59516,52644],{"class":483},[152,59518,59519,59521,59523],{"class":281,"line":932},[152,59520,53481],{"class":483},[152,59522,53150],{"class":52637},[152,59524,52644],{"class":483},[152,59526,59527,59529,59531,59533,59535,59537,59539,59542],{"class":281,"line":942},[152,59528,12837],{"class":476},[152,59530,55728],{"class":293},[152,59532,15180],{"class":476},[152,59534,55733],{"class":483},[152,59536,55736],{"class":285},[152,59538,1819],{"class":483},[152,59540,59541],{"class":289},"'button'",[152,59543,1825],{"class":483},[152,59545,59546,59549,59551,59553,59555,59557,59559],{"class":281,"line":949},[152,59547,59548],{"class":483},"    btn.",[152,59550,59150],{"class":285},[152,59552,1819],{"class":483},[152,59554,59155],{"class":289},[152,59556,14051],{"class":483},[152,59558,55786],{"class":476},[152,59560,55789],{"class":483},[152,59562,59563,59566,59568,59570,59573,59575],{"class":281,"line":954},[152,59564,59565],{"class":476},"      const",[152,59567,3891],{"class":293},[152,59569,15180],{"class":476},[152,59571,59572],{"class":483}," Math.",[152,59574,59197],{"class":285},[152,59576,3627],{"class":483},[152,59578,59579,59582,59585],{"class":281,"line":959},[152,59580,59581],{"class":483},"      console.",[152,59583,59584],{"class":285},"log",[152,59586,1832],{"class":483},[152,59588,59589],{"class":281,"line":970},[152,59590,34798],{"class":483},[152,59592,59593,59595,59597],{"class":281,"line":979},[152,59594,53754],{"class":483},[152,59596,53150],{"class":52637},[152,59598,52644],{"class":483},[152,59600,59601,59603,59605],{"class":281,"line":989},[152,59602,53122],{"class":483},[152,59604,53137],{"class":52637},[152,59606,52644],{"class":483},[152,59608,59609],{"class":281,"line":996},[152,59610,307],{"emptyLinePlaceholder":306},[152,59612,59613,59615,59617],{"class":281,"line":1001},[152,59614,53122],{"class":483},[152,59616,51972],{"class":52637},[152,59618,52644],{"class":483},[19,59620,59621],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,59623,59624],{},"常量不可以重新赋值",[19,59626,59627],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[270,59629,59631],{"className":51970,"code":59630,"language":51972,"meta":275,"style":275},"\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",[277,59632,59633,59643,59657,59661,59669,59683,59703,59715,59723,59727,59735,59747,59755,59766,59784,59800,59814,59822,59826,59834,59842,59846],{"__ignoreMap":275},[152,59634,59635,59637,59639,59641],{"class":281,"line":282},[152,59636,52634],{"class":483},[152,59638,52638],{"class":52637},[152,59640,52641],{"class":285},[152,59642,52644],{"class":483},[152,59644,59645,59647,59649,59651,59653,59655],{"class":281,"line":303},[152,59646,844],{"class":483},[152,59648,51972],{"class":52637},[152,59650,52653],{"class":285},[152,59652,1864],{"class":483},[152,59654,52658],{"class":289},[152,59656,52644],{"class":483},[152,59658,59659],{"class":281,"line":310},[152,59660,307],{"emptyLinePlaceholder":306},[152,59662,59663,59665,59667],{"class":281,"line":324},[152,59664,844],{"class":483},[152,59666,52671],{"class":52637},[152,59668,52644],{"class":483},[152,59670,59671,59673,59675,59677,59679,59681],{"class":281,"line":329},[152,59672,53481],{"class":483},[152,59674,52681],{"class":52637},[152,59676,52684],{"class":285},[152,59678,1864],{"class":483},[152,59680,52689],{"class":289},[152,59682,52644],{"class":483},[152,59684,59685,59687,59689,59691,59693,59695,59697,59699,59701],{"class":281,"line":343},[152,59686,53481],{"class":483},[152,59688,52681],{"class":52637},[152,59690,16535],{"class":285},[152,59692,1864],{"class":483},[152,59694,52728],{"class":289},[152,59696,52708],{"class":285},[152,59698,1864],{"class":483},[152,59700,52735],{"class":289},[152,59702,52644],{"class":483},[152,59704,59705,59707,59709,59711,59713],{"class":281,"line":348},[152,59706,53481],{"class":483},[152,59708,52744],{"class":52637},[152,59710,52747],{"class":483},[152,59712,52744],{"class":52637},[152,59714,52644],{"class":483},[152,59716,59717,59719,59721],{"class":281,"line":362},[152,59718,53122],{"class":483},[152,59720,52671],{"class":52637},[152,59722,52644],{"class":483},[152,59724,59725],{"class":281,"line":367},[152,59726,307],{"emptyLinePlaceholder":306},[152,59728,59729,59731,59733],{"class":281,"line":381},[152,59730,844],{"class":483},[152,59732,53137],{"class":52637},[152,59734,52644],{"class":483},[152,59736,59737,59739,59741,59743,59745],{"class":281,"line":386},[152,59738,53481],{"class":483},[152,59740,55224],{"class":52637},[152,59742,55230],{"class":483},[152,59744,55224],{"class":52637},[152,59746,52644],{"class":483},[152,59748,59749,59751,59753],{"class":281,"line":932},[152,59750,53481],{"class":483},[152,59752,53150],{"class":52637},[152,59754,52644],{"class":483},[152,59756,59757,59759,59761,59763],{"class":281,"line":942},[152,59758,12837],{"class":476},[152,59760,3891],{"class":293},[152,59762,15180],{"class":476},[152,59764,59765],{"class":293}," 10\n",[152,59767,59768,59770,59772,59774,59776,59778,59780,59782],{"class":281,"line":949},[152,59769,12837],{"class":476},[152,59771,55728],{"class":293},[152,59773,15180],{"class":476},[152,59775,55733],{"class":483},[152,59777,55736],{"class":285},[152,59779,1819],{"class":483},[152,59781,59541],{"class":289},[152,59783,1825],{"class":483},[152,59785,59786,59788,59790,59792,59794,59796,59798],{"class":281,"line":954},[152,59787,59548],{"class":483},[152,59789,59150],{"class":285},[152,59791,1819],{"class":483},[152,59793,59155],{"class":289},[152,59795,14051],{"class":483},[152,59797,55786],{"class":476},[152,59799,55789],{"class":483},[152,59801,59802,59804,59806,59808,59810,59812],{"class":281,"line":959},[152,59803,59565],{"class":476},[152,59805,3891],{"class":293},[152,59807,15180],{"class":476},[152,59809,59572],{"class":483},[152,59811,59197],{"class":285},[152,59813,3627],{"class":483},[152,59815,59816,59818,59820],{"class":281,"line":970},[152,59817,59581],{"class":483},[152,59819,59584],{"class":285},[152,59821,1832],{"class":483},[152,59823,59824],{"class":281,"line":979},[152,59825,34798],{"class":483},[152,59827,59828,59830,59832],{"class":281,"line":989},[152,59829,53754],{"class":483},[152,59831,53150],{"class":52637},[152,59833,52644],{"class":483},[152,59835,59836,59838,59840],{"class":281,"line":996},[152,59837,53122],{"class":483},[152,59839,53137],{"class":52637},[152,59841,52644],{"class":483},[152,59843,59844],{"class":281,"line":1001},[152,59845,307],{"emptyLinePlaceholder":306},[152,59847,59848,59850,59852],{"class":281,"line":1006},[152,59849,53122],{"class":483},[152,59851,51972],{"class":52637},[152,59853,52644],{"class":483},[19,59855,59856],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[270,59858,59860],{"className":51970,"code":59859,"language":51972,"meta":275,"style":275},"\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",[277,59861,59862,59872,59886,59890,59898,59912,59932,59944,59952,59956,59964,59976,59984,59994,60012,60028,60041,60049,60053,60061,60069,60073],{"__ignoreMap":275},[152,59863,59864,59866,59868,59870],{"class":281,"line":282},[152,59865,52634],{"class":483},[152,59867,52638],{"class":52637},[152,59869,52641],{"class":285},[152,59871,52644],{"class":483},[152,59873,59874,59876,59878,59880,59882,59884],{"class":281,"line":303},[152,59875,844],{"class":483},[152,59877,51972],{"class":52637},[152,59879,52653],{"class":285},[152,59881,1864],{"class":483},[152,59883,52658],{"class":289},[152,59885,52644],{"class":483},[152,59887,59888],{"class":281,"line":310},[152,59889,307],{"emptyLinePlaceholder":306},[152,59891,59892,59894,59896],{"class":281,"line":324},[152,59893,844],{"class":483},[152,59895,52671],{"class":52637},[152,59897,52644],{"class":483},[152,59899,59900,59902,59904,59906,59908,59910],{"class":281,"line":329},[152,59901,53481],{"class":483},[152,59903,52681],{"class":52637},[152,59905,52684],{"class":285},[152,59907,1864],{"class":483},[152,59909,52689],{"class":289},[152,59911,52644],{"class":483},[152,59913,59914,59916,59918,59920,59922,59924,59926,59928,59930],{"class":281,"line":343},[152,59915,53481],{"class":483},[152,59917,52681],{"class":52637},[152,59919,16535],{"class":285},[152,59921,1864],{"class":483},[152,59923,52728],{"class":289},[152,59925,52708],{"class":285},[152,59927,1864],{"class":483},[152,59929,52735],{"class":289},[152,59931,52644],{"class":483},[152,59933,59934,59936,59938,59940,59942],{"class":281,"line":348},[152,59935,53481],{"class":483},[152,59937,52744],{"class":52637},[152,59939,52747],{"class":483},[152,59941,52744],{"class":52637},[152,59943,52644],{"class":483},[152,59945,59946,59948,59950],{"class":281,"line":362},[152,59947,53122],{"class":483},[152,59949,52671],{"class":52637},[152,59951,52644],{"class":483},[152,59953,59954],{"class":281,"line":367},[152,59955,307],{"emptyLinePlaceholder":306},[152,59957,59958,59960,59962],{"class":281,"line":381},[152,59959,844],{"class":483},[152,59961,53137],{"class":52637},[152,59963,52644],{"class":483},[152,59965,59966,59968,59970,59972,59974],{"class":281,"line":386},[152,59967,53481],{"class":483},[152,59969,55224],{"class":52637},[152,59971,55230],{"class":483},[152,59973,55224],{"class":52637},[152,59975,52644],{"class":483},[152,59977,59978,59980,59982],{"class":281,"line":932},[152,59979,53481],{"class":483},[152,59981,53150],{"class":52637},[152,59983,52644],{"class":483},[152,59985,59986,59988,59990,59992],{"class":281,"line":942},[152,59987,12837],{"class":476},[152,59989,3891],{"class":293},[152,59991,15180],{"class":476},[152,59993,59765],{"class":293},[152,59995,59996,59998,60000,60002,60004,60006,60008,60010],{"class":281,"line":949},[152,59997,12837],{"class":476},[152,59999,55728],{"class":293},[152,60001,15180],{"class":476},[152,60003,55733],{"class":483},[152,60005,55736],{"class":285},[152,60007,1819],{"class":483},[152,60009,59541],{"class":289},[152,60011,1825],{"class":483},[152,60013,60014,60016,60018,60020,60022,60024,60026],{"class":281,"line":954},[152,60015,59548],{"class":483},[152,60017,59150],{"class":285},[152,60019,1819],{"class":483},[152,60021,59155],{"class":289},[152,60023,14051],{"class":483},[152,60025,55786],{"class":476},[152,60027,55789],{"class":483},[152,60029,60030,60033,60035,60037,60039],{"class":281,"line":959},[152,60031,60032],{"class":483},"      num ",[152,60034,1864],{"class":476},[152,60036,59572],{"class":483},[152,60038,59197],{"class":285},[152,60040,3627],{"class":483},[152,60042,60043,60045,60047],{"class":281,"line":970},[152,60044,59581],{"class":483},[152,60046,59584],{"class":285},[152,60048,1832],{"class":483},[152,60050,60051],{"class":281,"line":979},[152,60052,34798],{"class":483},[152,60054,60055,60057,60059],{"class":281,"line":989},[152,60056,53754],{"class":483},[152,60058,53150],{"class":52637},[152,60060,52644],{"class":483},[152,60062,60063,60065,60067],{"class":281,"line":996},[152,60064,53122],{"class":483},[152,60066,53137],{"class":52637},[152,60068,52644],{"class":483},[152,60070,60071],{"class":281,"line":1001},[152,60072,307],{"emptyLinePlaceholder":306},[152,60074,60075,60077,60079],{"class":281,"line":1006},[152,60076,53122],{"class":483},[152,60078,51972],{"class":52637},[152,60080,52644],{"class":483},[19,60082,60083],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[14,60085,60087],{"id":60086},"_324-事件监听版本","3.2.4 事件监听版本",[19,60089,60090],{},[401,60091],{"alt":275,"src":60092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60094,60095],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60097,60098],{},"这种方式会覆盖前边的事件监听:",[270,60100,60102],{"className":51970,"code":60101,"language":51972,"meta":275,"style":275},"\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",[277,60103,60104,60114,60128,60132,60140,60154,60174,60186,60194,60198,60206,60218,60226,60244,60258,60269,60273,60285,60295,60299,60307,60315,60319],{"__ignoreMap":275},[152,60105,60106,60108,60110,60112],{"class":281,"line":282},[152,60107,52634],{"class":483},[152,60109,52638],{"class":52637},[152,60111,52641],{"class":285},[152,60113,52644],{"class":483},[152,60115,60116,60118,60120,60122,60124,60126],{"class":281,"line":303},[152,60117,844],{"class":483},[152,60119,51972],{"class":52637},[152,60121,52653],{"class":285},[152,60123,1864],{"class":483},[152,60125,52658],{"class":289},[152,60127,52644],{"class":483},[152,60129,60130],{"class":281,"line":310},[152,60131,307],{"emptyLinePlaceholder":306},[152,60133,60134,60136,60138],{"class":281,"line":324},[152,60135,844],{"class":483},[152,60137,52671],{"class":52637},[152,60139,52644],{"class":483},[152,60141,60142,60144,60146,60148,60150,60152],{"class":281,"line":329},[152,60143,53481],{"class":483},[152,60145,52681],{"class":52637},[152,60147,52684],{"class":285},[152,60149,1864],{"class":483},[152,60151,52689],{"class":289},[152,60153,52644],{"class":483},[152,60155,60156,60158,60160,60162,60164,60166,60168,60170,60172],{"class":281,"line":343},[152,60157,53481],{"class":483},[152,60159,52681],{"class":52637},[152,60161,16535],{"class":285},[152,60163,1864],{"class":483},[152,60165,52728],{"class":289},[152,60167,52708],{"class":285},[152,60169,1864],{"class":483},[152,60171,52735],{"class":289},[152,60173,52644],{"class":483},[152,60175,60176,60178,60180,60182,60184],{"class":281,"line":348},[152,60177,53481],{"class":483},[152,60179,52744],{"class":52637},[152,60181,52747],{"class":483},[152,60183,52744],{"class":52637},[152,60185,52644],{"class":483},[152,60187,60188,60190,60192],{"class":281,"line":362},[152,60189,53122],{"class":483},[152,60191,52671],{"class":52637},[152,60193,52644],{"class":483},[152,60195,60196],{"class":281,"line":367},[152,60197,307],{"emptyLinePlaceholder":306},[152,60199,60200,60202,60204],{"class":281,"line":381},[152,60201,844],{"class":483},[152,60203,53137],{"class":52637},[152,60205,52644],{"class":483},[152,60207,60208,60210,60212,60214,60216],{"class":281,"line":386},[152,60209,53481],{"class":483},[152,60211,55224],{"class":52637},[152,60213,55230],{"class":483},[152,60215,55224],{"class":52637},[152,60217,52644],{"class":483},[152,60219,60220,60222,60224],{"class":281,"line":932},[152,60221,53481],{"class":483},[152,60223,53150],{"class":52637},[152,60225,52644],{"class":483},[152,60227,60228,60230,60232,60234,60236,60238,60240,60242],{"class":281,"line":942},[152,60229,12837],{"class":476},[152,60231,55728],{"class":293},[152,60233,15180],{"class":476},[152,60235,55733],{"class":483},[152,60237,55736],{"class":285},[152,60239,1819],{"class":483},[152,60241,59541],{"class":289},[152,60243,1825],{"class":483},[152,60245,60246,60248,60251,60253,60256],{"class":281,"line":949},[152,60247,59548],{"class":483},[152,60249,60250],{"class":285},"onclick",[152,60252,15180],{"class":476},[152,60254,60255],{"class":476}," function",[152,60257,55789],{"class":483},[152,60259,60260,60263,60265,60267],{"class":281,"line":954},[152,60261,60262],{"class":285},"      alert",[152,60264,1819],{"class":483},[152,60266,2280],{"class":293},[152,60268,1825],{"class":483},[152,60270,60271],{"class":281,"line":959},[152,60272,3838],{"class":483},[152,60274,60275,60277,60279,60281,60283],{"class":281,"line":970},[152,60276,59548],{"class":483},[152,60278,60250],{"class":285},[152,60280,15180],{"class":476},[152,60282,60255],{"class":476},[152,60284,55789],{"class":483},[152,60286,60287,60289,60291,60293],{"class":281,"line":979},[152,60288,60262],{"class":285},[152,60290,1819],{"class":483},[152,60292,2558],{"class":293},[152,60294,1825],{"class":483},[152,60296,60297],{"class":281,"line":989},[152,60298,3838],{"class":483},[152,60300,60301,60303,60305],{"class":281,"line":996},[152,60302,53754],{"class":483},[152,60304,53150],{"class":52637},[152,60306,52644],{"class":483},[152,60308,60309,60311,60313],{"class":281,"line":1001},[152,60310,53122],{"class":483},[152,60312,53137],{"class":52637},[152,60314,52644],{"class":483},[152,60316,60317],{"class":281,"line":1006},[152,60318,307],{"emptyLinePlaceholder":306},[152,60320,60321,60323,60325],{"class":281,"line":1018},[152,60322,53122],{"class":483},[152,60324,51972],{"class":52637},[152,60326,52644],{"class":483},[19,60328,60329],{},"只要点击就输出结果为22,前边11被覆盖了",[270,60331,60333],{"className":51970,"code":60332,"language":51972,"meta":275,"style":275},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[277,60334,60335,60340,60345,60349,60354,60359],{"__ignoreMap":275},[152,60336,60337],{"class":281,"line":282},[152,60338,60339],{"class":483},"  btn.addEventListener('click', function () {\n",[152,60341,60342],{"class":281,"line":303},[152,60343,60344],{"class":483},"      alert(11)\n",[152,60346,60347],{"class":281,"line":310},[152,60348,34798],{"class":483},[152,60350,60351],{"class":281,"line":324},[152,60352,60353],{"class":483},"    btn.addEventListener('click', function () {\n",[152,60355,60356],{"class":281,"line":329},[152,60357,60358],{"class":483},"      alert(22)\n",[152,60360,60361],{"class":281,"line":343},[152,60362,34798],{"class":483},[19,60364,60365],{},"点击第一次输出11,第二次点击为22",[14,60367,60369],{"id":60368},"_325-事件类型","3.2.5 事件类型",[19,60371,60372],{},[401,60373],{"alt":275,"src":60374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[262,60376,60378],{"id":60377},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60380,60381],{},"补充知识:",[19,60383,60384],{},"轮播图自动播放模块,可以使用",[19,60386,60387],{},"let timerId = setInterval(function () {",[19,60389,60390],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60392,60393],{},"用js方法模拟进行点击事件,click必须加()",[19,60395,60396],{},"next.click()",[19,60398,60399],{},"}, 1000)",[19,60401,60402],{},[401,60403],{"alt":275,"src":60404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[270,60406,60408],{"className":54404,"code":60407,"language":54406,"meta":275,"style":275},"\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",[277,60409,60410,60414,60424,60438,60442,60450,60465,60485,60505,60518,60526,60531,60536,60540,60544,60549,60554,60559,60564,60568,60572,60577,60582,60587,60591,60595,60600,60604,60609,60614,60618,60622,60627,60632,60637,60642,60647,60651,60655,60660,60665,60670,60675,60680,60684,60688,60693,60698,60703,60708,60713,60718,60723,60728,60733,60738,60742,60746,60751,60756,60760,60764,60769,60774,60778,60783,60788,60792,60796,60801,60805,60810,60815,60819,60824,60828,60832,60837,60842,60847,60852,60857,60862,60867,60871,60875,60879,60884,60889,60894,60899,60903,60911,60919,60923,60931,60946,60960,60981,60989,61003,61016,61031,61050,61062,61074,61086,61098,61110,61122,61134,61142,61157,61181,61205,61213,61221,61229,61237,61242,61247,61252,61257,61262,61267,61272,61277,61282,61287,61291,61296,61301,61306,61311,61316,61321,61326,61331,61336,61340,61345,61350,61355,61360,61365,61370,61375,61380,61385,61390,61395,61400,61404,61408,61413,61418,61423,61427,61432,61437,61442,61447,61452,61456,61461,61465,61469,61473,61477,61481,61485,61490,61495,61500,61505,61510,61515,61520,61525,61530,61534,61538,61543,61548,61553,61558,61563,61567,61572,61577,61582,61587,61592,61597,61601,61605,61610,61614,61619,61623,61628,61633,61638,61643,61648,61653,61657,61665,61673,61677],{"__ignoreMap":275},[152,60411,60412],{"class":281,"line":282},[152,60413,307],{"emptyLinePlaceholder":306},[152,60415,60416,60418,60420,60422],{"class":281,"line":303},[152,60417,52634],{"class":483},[152,60419,52638],{"class":476},[152,60421,52641],{"class":293},[152,60423,52644],{"class":483},[152,60425,60426,60428,60430,60432,60434,60436],{"class":281,"line":310},[152,60427,844],{"class":483},[152,60429,51972],{"class":52637},[152,60431,52653],{"class":285},[152,60433,1864],{"class":483},[152,60435,52658],{"class":289},[152,60437,52644],{"class":483},[152,60439,60440],{"class":281,"line":324},[152,60441,307],{"emptyLinePlaceholder":306},[152,60443,60444,60446,60448],{"class":281,"line":329},[152,60445,844],{"class":483},[152,60447,52671],{"class":52637},[152,60449,52644],{"class":483},[152,60451,60452,60454,60456,60458,60460,60462],{"class":281,"line":343},[152,60453,53481],{"class":483},[152,60455,52681],{"class":52637},[152,60457,52684],{"class":285},[152,60459,1864],{"class":483},[152,60461,52689],{"class":289},[152,60463,60464],{"class":483}," \u002F>\n",[152,60466,60467,60469,60471,60473,60475,60477,60479,60481,60483],{"class":281,"line":348},[152,60468,53481],{"class":483},[152,60470,52681],{"class":52637},[152,60472,52700],{"class":285},[152,60474,1864],{"class":483},[152,60476,52705],{"class":289},[152,60478,52708],{"class":285},[152,60480,1864],{"class":483},[152,60482,52713],{"class":289},[152,60484,60464],{"class":483},[152,60486,60487,60489,60491,60493,60495,60497,60499,60501,60503],{"class":281,"line":362},[152,60488,53481],{"class":483},[152,60490,52681],{"class":52637},[152,60492,16535],{"class":285},[152,60494,1864],{"class":483},[152,60496,52728],{"class":289},[152,60498,52708],{"class":285},[152,60500,1864],{"class":483},[152,60502,52735],{"class":289},[152,60504,60464],{"class":483},[152,60506,60507,60509,60511,60514,60516],{"class":281,"line":367},[152,60508,53481],{"class":483},[152,60510,52744],{"class":52637},[152,60512,60513],{"class":483},">轮播图点击切换\u003C\u002F",[152,60515,52744],{"class":52637},[152,60517,52644],{"class":483},[152,60519,60520,60522,60524],{"class":281,"line":381},[152,60521,53481],{"class":483},[152,60523,1736],{"class":52637},[152,60525,52644],{"class":483},[152,60527,60528],{"class":281,"line":386},[152,60529,60530],{"class":483},"    * {\n",[152,60532,60533],{"class":281,"line":932},[152,60534,60535],{"class":483},"      box-sizing: border-box;\n",[152,60537,60538],{"class":281,"line":942},[152,60539,3838],{"class":483},[152,60541,60542],{"class":281,"line":949},[152,60543,307],{"emptyLinePlaceholder":306},[152,60545,60546],{"class":281,"line":954},[152,60547,60548],{"class":483},"    .slider {\n",[152,60550,60551],{"class":281,"line":959},[152,60552,60553],{"class":483},"      width: 560px;\n",[152,60555,60556],{"class":281,"line":970},[152,60557,60558],{"class":483},"      height: 400px;\n",[152,60560,60561],{"class":281,"line":979},[152,60562,60563],{"class":483},"      overflow: hidden;\n",[152,60565,60566],{"class":281,"line":989},[152,60567,3838],{"class":483},[152,60569,60570],{"class":281,"line":996},[152,60571,307],{"emptyLinePlaceholder":306},[152,60573,60574],{"class":281,"line":1001},[152,60575,60576],{"class":483},"    .slider-wrapper {\n",[152,60578,60579],{"class":281,"line":1006},[152,60580,60581],{"class":483},"      width: 100%;\n",[152,60583,60584],{"class":281,"line":1018},[152,60585,60586],{"class":483},"      height: 320px;\n",[152,60588,60589],{"class":281,"line":1027},[152,60590,3838],{"class":483},[152,60592,60593],{"class":281,"line":1037},[152,60594,307],{"emptyLinePlaceholder":306},[152,60596,60597],{"class":281,"line":1044},[152,60598,60599],{"class":483},"    .slider-wrapper img {\n",[152,60601,60602],{"class":281,"line":1049},[152,60603,60581],{"class":483},[152,60605,60606],{"class":281,"line":1054},[152,60607,60608],{"class":483},"      height: 100%;\n",[152,60610,60611],{"class":281,"line":1065},[152,60612,60613],{"class":483},"      display: block;\n",[152,60615,60616],{"class":281,"line":1074},[152,60617,3838],{"class":483},[152,60619,60620],{"class":281,"line":1084},[152,60621,307],{"emptyLinePlaceholder":306},[152,60623,60624],{"class":281,"line":1091},[152,60625,60626],{"class":483},"    .slider-footer {\n",[152,60628,60629],{"class":281,"line":1096},[152,60630,60631],{"class":483},"      height: 80px;\n",[152,60633,60634],{"class":281,"line":1101},[152,60635,60636],{"class":483},"      background-color: rgb(100, 67, 68);\n",[152,60638,60639],{"class":281,"line":1112},[152,60640,60641],{"class":483},"      padding: 12px 12px 0 12px;\n",[152,60643,60644],{"class":281,"line":1121},[152,60645,60646],{"class":483},"      position: relative;\n",[152,60648,60649],{"class":281,"line":1131},[152,60650,3838],{"class":483},[152,60652,60653],{"class":281,"line":1138},[152,60654,307],{"emptyLinePlaceholder":306},[152,60656,60657],{"class":281,"line":1143},[152,60658,60659],{"class":483},"    .slider-footer .toggle {\n",[152,60661,60662],{"class":281,"line":1148},[152,60663,60664],{"class":483},"      position: absolute;\n",[152,60666,60667],{"class":281,"line":1159},[152,60668,60669],{"class":483},"      right: 0;\n",[152,60671,60672],{"class":281,"line":1168},[152,60673,60674],{"class":483},"      top: 12px;\n",[152,60676,60677],{"class":281,"line":1178},[152,60678,60679],{"class":483},"      display: flex;\n",[152,60681,60682],{"class":281,"line":1185},[152,60683,3838],{"class":483},[152,60685,60686],{"class":281,"line":1190},[152,60687,307],{"emptyLinePlaceholder":306},[152,60689,60690],{"class":281,"line":1195},[152,60691,60692],{"class":483},"    .slider-footer .toggle button {\n",[152,60694,60695],{"class":281,"line":1206},[152,60696,60697],{"class":483},"      margin-right: 12px;\n",[152,60699,60700],{"class":281,"line":1215},[152,60701,60702],{"class":483},"      width: 28px;\n",[152,60704,60705],{"class":281,"line":1225},[152,60706,60707],{"class":483},"      height: 28px;\n",[152,60709,60710],{"class":281,"line":1232},[152,60711,60712],{"class":483},"      appearance: none;\n",[152,60714,60715],{"class":281,"line":1237},[152,60716,60717],{"class":483},"      border: none;\n",[152,60719,60720],{"class":281,"line":1242},[152,60721,60722],{"class":483},"      background: rgba(255, 255, 255, 0.1);\n",[152,60724,60725],{"class":281,"line":1253},[152,60726,60727],{"class":483},"      color: #fff;\n",[152,60729,60730],{"class":281,"line":1262},[152,60731,60732],{"class":483},"      border-radius: 4px;\n",[152,60734,60735],{"class":281,"line":1272},[152,60736,60737],{"class":483},"      cursor: pointer;\n",[152,60739,60740],{"class":281,"line":1279},[152,60741,3838],{"class":483},[152,60743,60744],{"class":281,"line":1284},[152,60745,307],{"emptyLinePlaceholder":306},[152,60747,60748],{"class":281,"line":1289},[152,60749,60750],{"class":483},"    .slider-footer .toggle button:hover {\n",[152,60752,60753],{"class":281,"line":1301},[152,60754,60755],{"class":483},"      background: rgba(255, 255, 255, 0.2);\n",[152,60757,60758],{"class":281,"line":1310},[152,60759,3838],{"class":483},[152,60761,60762],{"class":281,"line":1320},[152,60763,307],{"emptyLinePlaceholder":306},[152,60765,60766],{"class":281,"line":1327},[152,60767,60768],{"class":483},"    .slider-footer p {\n",[152,60770,60771],{"class":281,"line":11528},[152,60772,60773],{"class":483},"      margin: 0;\n",[152,60775,60776],{"class":281,"line":11536},[152,60777,60727],{"class":483},[152,60779,60780],{"class":281,"line":11541},[152,60781,60782],{"class":483},"      font-size: 18px;\n",[152,60784,60785],{"class":281,"line":18219},[152,60786,60787],{"class":483},"      margin-bottom: 10px;\n",[152,60789,60790],{"class":281,"line":18225},[152,60791,3838],{"class":483},[152,60793,60794],{"class":281,"line":18248},[152,60795,307],{"emptyLinePlaceholder":306},[152,60797,60798],{"class":281,"line":18254},[152,60799,60800],{"class":483},"    .slider-indicator {\n",[152,60802,60803],{"class":281,"line":18277},[152,60804,60773],{"class":483},[152,60806,60807],{"class":281,"line":18291},[152,60808,60809],{"class":483},"      padding: 0;\n",[152,60811,60812],{"class":281,"line":18311},[152,60813,60814],{"class":483},"      list-style: none;\n",[152,60816,60817],{"class":281,"line":18317},[152,60818,60679],{"class":483},[152,60820,60821],{"class":281,"line":18328},[152,60822,60823],{"class":483},"      align-items: center;\n",[152,60825,60826],{"class":281,"line":18351},[152,60827,3838],{"class":483},[152,60829,60830],{"class":281,"line":18373},[152,60831,307],{"emptyLinePlaceholder":306},[152,60833,60834],{"class":281,"line":18378},[152,60835,60836],{"class":483},"    .slider-indicator li {\n",[152,60838,60839],{"class":281,"line":18384},[152,60840,60841],{"class":483},"      width: 8px;\n",[152,60843,60844],{"class":281,"line":18398},[152,60845,60846],{"class":483},"      height: 8px;\n",[152,60848,60849],{"class":281,"line":18411},[152,60850,60851],{"class":483},"      margin: 4px;\n",[152,60853,60854],{"class":281,"line":18416},[152,60855,60856],{"class":483},"      border-radius: 50%;\n",[152,60858,60859],{"class":281,"line":18430},[152,60860,60861],{"class":483},"      background: #fff;\n",[152,60863,60864],{"class":281,"line":18435},[152,60865,60866],{"class":483},"      opacity: 0.4;\n",[152,60868,60869],{"class":281,"line":18441},[152,60870,60737],{"class":483},[152,60872,60873],{"class":281,"line":18446},[152,60874,3838],{"class":483},[152,60876,60877],{"class":281,"line":18460},[152,60878,307],{"emptyLinePlaceholder":306},[152,60880,60881],{"class":281,"line":18465},[152,60882,60883],{"class":483},"    .slider-indicator li.active {\n",[152,60885,60886],{"class":281,"line":18470},[152,60887,60888],{"class":483},"      width: 12px;\n",[152,60890,60891],{"class":281,"line":18484},[152,60892,60893],{"class":483},"      height: 12px;\n",[152,60895,60896],{"class":281,"line":18496},[152,60897,60898],{"class":483},"      opacity: 1;\n",[152,60900,60901],{"class":281,"line":18501},[152,60902,3838],{"class":483},[152,60904,60905,60907,60909],{"class":281,"line":18514},[152,60906,53754],{"class":483},[152,60908,1736],{"class":52637},[152,60910,52644],{"class":483},[152,60912,60913,60915,60917],{"class":281,"line":18519},[152,60914,53122],{"class":483},[152,60916,52671],{"class":52637},[152,60918,52644],{"class":483},[152,60920,60921],{"class":281,"line":18524},[152,60922,307],{"emptyLinePlaceholder":306},[152,60924,60925,60927,60929],{"class":281,"line":18529},[152,60926,844],{"class":483},[152,60928,53137],{"class":52637},[152,60930,52644],{"class":483},[152,60932,60933,60935,60937,60939,60941,60944],{"class":281,"line":18542},[152,60934,53481],{"class":483},[152,60936,52948],{"class":52637},[152,60938,54823],{"class":285},[152,60940,1864],{"class":483},[152,60942,60943],{"class":289},"\"slider\"",[152,60945,52644],{"class":483},[152,60947,60948,60950,60952,60954,60956,60958],{"class":281,"line":18547},[152,60949,52678],{"class":483},[152,60951,52948],{"class":52637},[152,60953,54823],{"class":285},[152,60955,1864],{"class":483},[152,60957,56564],{"class":289},[152,60959,52644],{"class":483},[152,60961,60962,60964,60966,60968,60970,60973,60975,60977,60979],{"class":281,"line":33970},[152,60963,56571],{"class":483},[152,60965,401],{"class":52637},[152,60967,56576],{"class":285},[152,60969,1864],{"class":483},[152,60971,60972],{"class":289},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[152,60974,56584],{"class":285},[152,60976,1864],{"class":483},[152,60978,9294],{"class":289},[152,60980,60464],{"class":483},[152,60982,60983,60985,60987],{"class":281,"line":33976},[152,60984,53113],{"class":483},[152,60986,52948],{"class":52637},[152,60988,52644],{"class":483},[152,60990,60991,60993,60995,60997,60999,61001],{"class":281,"line":33982},[152,60992,52678],{"class":483},[152,60994,52948],{"class":52637},[152,60996,54823],{"class":285},[152,60998,1864],{"class":483},[152,61000,56611],{"class":289},[152,61002,52644],{"class":483},[152,61004,61005,61007,61009,61012,61014],{"class":281,"line":33988},[152,61006,56571],{"class":483},[152,61008,19],{"class":52637},[152,61010,61011],{"class":483},">对人类来说会不会太超前了？\u003C\u002F",[152,61013,19],{"class":52637},[152,61015,52644],{"class":483},[152,61017,61018,61020,61022,61024,61026,61029],{"class":281,"line":33994},[152,61019,56571],{"class":483},[152,61021,698],{"class":52637},[152,61023,54823],{"class":285},[152,61025,1864],{"class":483},[152,61027,61028],{"class":289},"\"slider-indicator\"",[152,61030,52644],{"class":483},[152,61032,61033,61035,61037,61039,61041,61044,61046,61048],{"class":281,"line":34005},[152,61034,56639],{"class":483},[152,61036,419],{"class":52637},[152,61038,54823],{"class":285},[152,61040,1864],{"class":483},[152,61042,61043],{"class":289},"\"active\"",[152,61045,56651],{"class":483},[152,61047,419],{"class":52637},[152,61049,52644],{"class":483},[152,61051,61052,61054,61056,61058,61060],{"class":281,"line":34011},[152,61053,56639],{"class":483},[152,61055,419],{"class":52637},[152,61057,56651],{"class":483},[152,61059,419],{"class":52637},[152,61061,52644],{"class":483},[152,61063,61064,61066,61068,61070,61072],{"class":281,"line":34031},[152,61065,56639],{"class":483},[152,61067,419],{"class":52637},[152,61069,56651],{"class":483},[152,61071,419],{"class":52637},[152,61073,52644],{"class":483},[152,61075,61076,61078,61080,61082,61084],{"class":281,"line":34037},[152,61077,56639],{"class":483},[152,61079,419],{"class":52637},[152,61081,56651],{"class":483},[152,61083,419],{"class":52637},[152,61085,52644],{"class":483},[152,61087,61088,61090,61092,61094,61096],{"class":281,"line":34048},[152,61089,56639],{"class":483},[152,61091,419],{"class":52637},[152,61093,56651],{"class":483},[152,61095,419],{"class":52637},[152,61097,52644],{"class":483},[152,61099,61100,61102,61104,61106,61108],{"class":281,"line":34054},[152,61101,56639],{"class":483},[152,61103,419],{"class":52637},[152,61105,56651],{"class":483},[152,61107,419],{"class":52637},[152,61109,52644],{"class":483},[152,61111,61112,61114,61116,61118,61120],{"class":281,"line":34060},[152,61113,56639],{"class":483},[152,61115,419],{"class":52637},[152,61117,56651],{"class":483},[152,61119,419],{"class":52637},[152,61121,52644],{"class":483},[152,61123,61124,61126,61128,61130,61132],{"class":281,"line":34066},[152,61125,56639],{"class":483},[152,61127,419],{"class":52637},[152,61129,56651],{"class":483},[152,61131,419],{"class":52637},[152,61133,52644],{"class":483},[152,61135,61136,61138,61140],{"class":281,"line":34072},[152,61137,56744],{"class":483},[152,61139,698],{"class":52637},[152,61141,52644],{"class":483},[152,61143,61144,61146,61148,61150,61152,61155],{"class":281,"line":34078},[152,61145,56571],{"class":483},[152,61147,52948],{"class":52637},[152,61149,54823],{"class":285},[152,61151,1864],{"class":483},[152,61153,61154],{"class":289},"\"toggle\"",[152,61156,52644],{"class":483},[152,61158,61159,61161,61163,61165,61167,61170,61172,61175,61177,61179],{"class":281,"line":34084},[152,61160,56639],{"class":483},[152,61162,55224],{"class":52637},[152,61164,54823],{"class":285},[152,61166,1864],{"class":483},[152,61168,61169],{"class":289},"\"prev\"",[152,61171,487],{"class":483},[152,61173,61174],{"class":293},"&lt;",[152,61176,53122],{"class":483},[152,61178,55224],{"class":52637},[152,61180,52644],{"class":483},[152,61182,61183,61185,61187,61189,61191,61194,61196,61199,61201,61203],{"class":281,"line":34090},[152,61184,56639],{"class":483},[152,61186,55224],{"class":52637},[152,61188,54823],{"class":285},[152,61190,1864],{"class":483},[152,61192,61193],{"class":289},"\"next\"",[152,61195,487],{"class":483},[152,61197,61198],{"class":293},"&gt;",[152,61200,53122],{"class":483},[152,61202,55224],{"class":52637},[152,61204,52644],{"class":483},[152,61206,61207,61209,61211],{"class":281,"line":34110},[152,61208,56744],{"class":483},[152,61210,52948],{"class":52637},[152,61212,52644],{"class":483},[152,61214,61215,61217,61219],{"class":281,"line":34116},[152,61216,53113],{"class":483},[152,61218,52948],{"class":52637},[152,61220,52644],{"class":483},[152,61222,61223,61225,61227],{"class":281,"line":34132},[152,61224,53754],{"class":483},[152,61226,52948],{"class":52637},[152,61228,52644],{"class":483},[152,61230,61231,61233,61235],{"class":281,"line":34138},[152,61232,53481],{"class":483},[152,61234,53150],{"class":52637},[152,61236,52644],{"class":483},[152,61238,61239],{"class":281,"line":34152},[152,61240,61241],{"class":483},"    \u002F\u002F 1. 初始数据\n",[152,61243,61244],{"class":281,"line":34158},[152,61245,61246],{"class":483},"    const data = [\n",[152,61248,61249],{"class":281,"line":34173},[152,61250,61251],{"class":483},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[152,61253,61254],{"class":281,"line":34179},[152,61255,61256],{"class":483},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[152,61258,61259],{"class":281,"line":34188},[152,61260,61261],{"class":483},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[152,61263,61264],{"class":281,"line":34194},[152,61265,61266],{"class":483},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[152,61268,61269],{"class":281,"line":34203},[152,61270,61271],{"class":483},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[152,61273,61274],{"class":281,"line":34209},[152,61275,61276],{"class":483},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[152,61278,61279],{"class":281,"line":34215},[152,61280,61281],{"class":483},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[152,61283,61284],{"class":281,"line":34224},[152,61285,61286],{"class":483},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[152,61288,61289],{"class":281,"line":34230},[152,61290,54446],{"class":483},[152,61292,61293],{"class":281,"line":34241},[152,61294,61295],{"class":483},"    \u002F\u002F 获取元素\n",[152,61297,61298],{"class":281,"line":34247},[152,61299,61300],{"class":483},"    const img = document.querySelector('.slider-wrapper img')\n",[152,61302,61303],{"class":281,"line":34266},[152,61304,61305],{"class":483},"    const p = document.querySelector('.slider-footer p')\n",[152,61307,61308],{"class":281,"line":34272},[152,61309,61310],{"class":483},"    const footer = document.querySelector('.slider-footer')\n",[152,61312,61313],{"class":281,"line":34283},[152,61314,61315],{"class":483},"    \u002F\u002F 1. 右按钮业务\n",[152,61317,61318],{"class":281,"line":34289},[152,61319,61320],{"class":483},"    \u002F\u002F 1.1 获取右侧按钮 \n",[152,61322,61323],{"class":281,"line":34309},[152,61324,61325],{"class":483},"    const next = document.querySelector('.next')\n",[152,61327,61328],{"class":281,"line":34325},[152,61329,61330],{"class":483},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[152,61332,61333],{"class":281,"line":34331},[152,61334,61335],{"class":483},"    \u002F\u002F 1.2 注册点击事件\n",[152,61337,61338],{"class":281,"line":34345},[152,61339,307],{"emptyLinePlaceholder":306},[152,61341,61342],{"class":281,"line":34351},[152,61343,61344],{"class":483},"    next.addEventListener('click', function () {\n",[152,61346,61347],{"class":281,"line":34357},[152,61348,61349],{"class":483},"      \u002F\u002F console.log(11)\n",[152,61351,61352],{"class":281,"line":34368},[152,61353,61354],{"class":483},"      i++\n",[152,61356,61357],{"class":281,"line":34374},[152,61358,61359],{"class":483},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[152,61361,61362],{"class":281,"line":34380},[152,61363,61364],{"class":483},"      \u002F\u002F if (i >= 8) {\n",[152,61366,61367],{"class":281,"line":34390},[152,61368,61369],{"class":483},"      \u002F\u002F   i = 0\n",[152,61371,61372],{"class":281,"line":34396},[152,61373,61374],{"class":483},"      \u002F\u002F }\n",[152,61376,61377],{"class":281,"line":34407},[152,61378,61379],{"class":483},"      i = i >= data.length ? 0 : i\n",[152,61381,61382],{"class":281,"line":34413},[152,61383,61384],{"class":483},"      \u002F\u002F 1.3 得到对应的对象\n",[152,61386,61387],{"class":281,"line":34423},[152,61388,61389],{"class":483},"      \u002F\u002F console.log(data[i])\n",[152,61391,61392],{"class":281,"line":34428},[152,61393,61394],{"class":483},"      \u002F\u002F 调用函数\n",[152,61396,61397],{"class":281,"line":34434},[152,61398,61399],{"class":483},"      toggle()\n",[152,61401,61402],{"class":281,"line":34483},[152,61403,34798],{"class":483},[152,61405,61406],{"class":281,"line":34530},[152,61407,307],{"emptyLinePlaceholder":306},[152,61409,61410],{"class":281,"line":34535},[152,61411,61412],{"class":483},"    \u002F\u002F 2. 左侧按钮业务\n",[152,61414,61415],{"class":281,"line":34541},[152,61416,61417],{"class":483},"    \u002F\u002F 2.1 获取左侧按钮 \n",[152,61419,61420],{"class":281,"line":34560},[152,61421,61422],{"class":483},"    const prev = document.querySelector('.prev')\n",[152,61424,61425],{"class":281,"line":34566},[152,61426,61335],{"class":483},[152,61428,61429],{"class":281,"line":34586},[152,61430,61431],{"class":483},"    prev.addEventListener('click', function () {\n",[152,61433,61434],{"class":281,"line":34592},[152,61435,61436],{"class":483},"      i--\n",[152,61438,61439],{"class":281,"line":34598},[152,61440,61441],{"class":483},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[152,61443,61444],{"class":281,"line":34608},[152,61445,61446],{"class":483},"      \u002F\u002F if (i \u003C 0) {\n",[152,61448,61449],{"class":281,"line":34613},[152,61450,61451],{"class":483},"      \u002F\u002F   i = 7\n",[152,61453,61454],{"class":281,"line":34619},[152,61455,61374],{"class":483},[152,61457,61458],{"class":281,"line":34635},[152,61459,61460],{"class":483},"      i = i \u003C 0 ? data.length - 1 : i\n",[152,61462,61463],{"class":281,"line":34680},[152,61464,61384],{"class":483},[152,61466,61467],{"class":281,"line":34686},[152,61468,61389],{"class":483},[152,61470,61471],{"class":281,"line":34692},[152,61472,61394],{"class":483},[152,61474,61475],{"class":281,"line":34698},[152,61476,61399],{"class":483},[152,61478,61479],{"class":281,"line":34709},[152,61480,34798],{"class":483},[152,61482,61483],{"class":281,"line":34715},[152,61484,307],{"emptyLinePlaceholder":306},[152,61486,61487],{"class":281,"line":34721},[152,61488,61489],{"class":483},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[152,61491,61492],{"class":281,"line":34727},[152,61493,61494],{"class":483},"    function toggle() {\n",[152,61496,61497],{"class":281,"line":34745},[152,61498,61499],{"class":483},"      \u002F\u002F 1.4 渲染对应的数据\n",[152,61501,61502],{"class":281,"line":34759},[152,61503,61504],{"class":483},"      img.src = data[i].url\n",[152,61506,61507],{"class":281,"line":34768},[152,61508,61509],{"class":483},"      p.innerHTML = data[i].title\n",[152,61511,61512],{"class":281,"line":34777},[152,61513,61514],{"class":483},"      footer.style.backgroundColor = data[i].color\n",[152,61516,61517],{"class":281,"line":34786},[152,61518,61519],{"class":483},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[152,61521,61522],{"class":281,"line":34795},[152,61523,61524],{"class":483},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[152,61526,61527],{"class":281,"line":34801},[152,61528,61529],{"class":483},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[152,61531,61532],{"class":281,"line":34807},[152,61533,3838],{"class":483},[152,61535,61536],{"class":281,"line":34815},[152,61537,307],{"emptyLinePlaceholder":306},[152,61539,61540],{"class":281,"line":34820},[152,61541,61542],{"class":483},"    \u002F\u002F 3. 自动播放模块\n",[152,61544,61545],{"class":281,"line":34826},[152,61546,61547],{"class":483},"    let timerId = setInterval(function () {\n",[152,61549,61550],{"class":281,"line":34837},[152,61551,61552],{"class":483},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[152,61554,61555],{"class":281,"line":34843},[152,61556,61557],{"class":483},"      next.click()\n",[152,61559,61560],{"class":281,"line":34863},[152,61561,61562],{"class":483},"    }, 1000)\n",[152,61564,61565],{"class":281,"line":34869},[152,61566,307],{"emptyLinePlaceholder":306},[152,61568,61569],{"class":281,"line":34875},[152,61570,61571],{"class":483},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[152,61573,61574],{"class":281,"line":34881},[152,61575,61576],{"class":483},"    const slider = document.querySelector('.slider')\n",[152,61578,61579],{"class":281,"line":34898},[152,61580,61581],{"class":483},"    \u002F\u002F 注册事件\n",[152,61583,61584],{"class":281,"line":34904},[152,61585,61586],{"class":483},"    slider.addEventListener('mouseenter', function () {\n",[152,61588,61589],{"class":281,"line":34910},[152,61590,61591],{"class":483},"      \u002F\u002F 停止定时器\n",[152,61593,61594],{"class":281,"line":34916},[152,61595,61596],{"class":483},"      clearInterval(timerId)\n",[152,61598,61599],{"class":281,"line":34922},[152,61600,34798],{"class":483},[152,61602,61603],{"class":281,"line":34928},[152,61604,307],{"emptyLinePlaceholder":306},[152,61606,61607],{"class":281,"line":34955},[152,61608,61609],{"class":483},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[152,61611,61612],{"class":281,"line":34979},[152,61613,61581],{"class":483},[152,61615,61616],{"class":281,"line":34985},[152,61617,61618],{"class":483},"    slider.addEventListener('mouseleave', function () {\n",[152,61620,61621],{"class":281,"line":34991},[152,61622,61591],{"class":483},[152,61624,61625],{"class":281,"line":34997},[152,61626,61627],{"class":483},"      if (timerId) clearInterval(timerId)\n",[152,61629,61630],{"class":281,"line":35008},[152,61631,61632],{"class":483},"      \u002F\u002F 开启定时器\n",[152,61634,61635],{"class":281,"line":35019},[152,61636,61637],{"class":483},"      timerId = setInterval(function () {\n",[152,61639,61640],{"class":281,"line":35025},[152,61641,61642],{"class":483},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[152,61644,61645],{"class":281,"line":35042},[152,61646,61647],{"class":483},"        next.click()\n",[152,61649,61650],{"class":281,"line":35065},[152,61651,61652],{"class":483},"      }, 1000)\n",[152,61654,61655],{"class":281,"line":35088},[152,61656,34798],{"class":483},[152,61658,61659,61661,61663],{"class":281,"line":35094},[152,61660,53754],{"class":483},[152,61662,53150],{"class":52637},[152,61664,52644],{"class":483},[152,61666,61667,61669,61671],{"class":281,"line":35099},[152,61668,53122],{"class":483},[152,61670,53137],{"class":52637},[152,61672,52644],{"class":483},[152,61674,61675],{"class":281,"line":35108},[152,61676,307],{"emptyLinePlaceholder":306},[152,61678,61679,61681,61683],{"class":281,"line":35118},[152,61680,53122],{"class":483},[152,61682,51972],{"class":52637},[152,61684,52644],{"class":483},[262,61686,61688],{"id":61687},"_3252-焦点事件","3.2.5.2 焦点事件",[19,61690,61691],{},"小米搜索框案例：",[270,61693,61695],{"className":51970,"code":61694,"language":51972,"meta":275,"style":275},"\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",[277,61696,61697,61707,61721,61725,61733,61747,61767,61787,61799,61807,61813,61823,61833,61845,61849,61853,61860,61864,61875,61879,61883,61890,61901,61914,61928,61932,61936,61945,61957,61969,61983,61996,62009,62027,62038,62042,62046,62055,62072,62076,62080,62087,62097,62107,62118,62131,62143,62159,62170,62182,62186,62190,62198,62209,62226,62238,62250,62261,62265,62269,62280,62291,62295,62303,62307,62315,62319,62327,62342,62365,62380,62411,62438,62465,62492,62519,62546,62573,62582,62590,62598,62603,62623,62643,62648,62653,62671,62676,62686,62691,62705,62710,62715,62732,62741,62753,62757,62765,62773,62777],{"__ignoreMap":275},[152,61698,61699,61701,61703,61705],{"class":281,"line":282},[152,61700,52634],{"class":483},[152,61702,52638],{"class":52637},[152,61704,52641],{"class":285},[152,61706,52644],{"class":483},[152,61708,61709,61711,61713,61715,61717,61719],{"class":281,"line":303},[152,61710,844],{"class":483},[152,61712,51972],{"class":52637},[152,61714,52653],{"class":285},[152,61716,1864],{"class":483},[152,61718,52658],{"class":289},[152,61720,52644],{"class":483},[152,61722,61723],{"class":281,"line":310},[152,61724,307],{"emptyLinePlaceholder":306},[152,61726,61727,61729,61731],{"class":281,"line":324},[152,61728,844],{"class":483},[152,61730,52671],{"class":52637},[152,61732,52644],{"class":483},[152,61734,61735,61737,61739,61741,61743,61745],{"class":281,"line":329},[152,61736,52678],{"class":483},[152,61738,52681],{"class":52637},[152,61740,52684],{"class":285},[152,61742,1864],{"class":483},[152,61744,52689],{"class":289},[152,61746,52644],{"class":483},[152,61748,61749,61751,61753,61755,61757,61759,61761,61763,61765],{"class":281,"line":343},[152,61750,52678],{"class":483},[152,61752,52681],{"class":52637},[152,61754,52700],{"class":285},[152,61756,1864],{"class":483},[152,61758,52705],{"class":289},[152,61760,52708],{"class":285},[152,61762,1864],{"class":483},[152,61764,52713],{"class":289},[152,61766,52644],{"class":483},[152,61768,61769,61771,61773,61775,61777,61779,61781,61783,61785],{"class":281,"line":348},[152,61770,52678],{"class":483},[152,61772,52681],{"class":52637},[152,61774,16535],{"class":285},[152,61776,1864],{"class":483},[152,61778,52728],{"class":289},[152,61780,52708],{"class":285},[152,61782,1864],{"class":483},[152,61784,52735],{"class":289},[152,61786,52644],{"class":483},[152,61788,61789,61791,61793,61795,61797],{"class":281,"line":362},[152,61790,52678],{"class":483},[152,61792,52744],{"class":52637},[152,61794,52747],{"class":483},[152,61796,52744],{"class":52637},[152,61798,52644],{"class":483},[152,61800,61801,61803,61805],{"class":281,"line":367},[152,61802,52678],{"class":483},[152,61804,1736],{"class":52637},[152,61806,52644],{"class":483},[152,61808,61809,61811],{"class":281,"line":381},[152,61810,52764],{"class":52637},[152,61812,17187],{"class":483},[152,61814,61815,61817,61819,61821],{"class":281,"line":386},[152,61816,52771],{"class":293},[152,61818,52774],{"class":483},[152,61820,2000],{"class":293},[152,61822,2965],{"class":483},[152,61824,61825,61827,61829,61831],{"class":281,"line":932},[152,61826,52783],{"class":293},[152,61828,52774],{"class":483},[152,61830,2000],{"class":293},[152,61832,2965],{"class":483},[152,61834,61835,61838,61840,61843],{"class":281,"line":942},[152,61836,61837],{"class":293},"            box-sizing",[152,61839,52774],{"class":483},[152,61841,61842],{"class":293},"border-box",[152,61844,2965],{"class":483},[152,61846,61847],{"class":281,"line":949},[152,61848,4179],{"class":483},[152,61850,61851],{"class":281,"line":954},[152,61852,307],{"emptyLinePlaceholder":306},[152,61854,61855,61858],{"class":281,"line":959},[152,61856,61857],{"class":52637},"        ul",[152,61859,17187],{"class":483},[152,61861,61862],{"class":281,"line":970},[152,61863,307],{"emptyLinePlaceholder":306},[152,61865,61866,61869,61871,61873],{"class":281,"line":979},[152,61867,61868],{"class":293},"            list-style",[152,61870,52774],{"class":483},[152,61872,56074],{"class":293},[152,61874,2965],{"class":483},[152,61876,61877],{"class":281,"line":989},[152,61878,4179],{"class":483},[152,61880,61881],{"class":281,"line":996},[152,61882,307],{"emptyLinePlaceholder":306},[152,61884,61885,61888],{"class":281,"line":1001},[152,61886,61887],{"class":285},"        .mi",[152,61889,17187],{"class":483},[152,61891,61892,61895,61897,61899],{"class":281,"line":1006},[152,61893,61894],{"class":293},"            position",[152,61896,52774],{"class":483},[152,61898,56101],{"class":293},[152,61900,2965],{"class":483},[152,61902,61903,61905,61907,61910,61912],{"class":281,"line":1018},[152,61904,52821],{"class":293},[152,61906,52774],{"class":483},[152,61908,61909],{"class":293},"223",[152,61911,52829],{"class":476},[152,61913,2965],{"class":483},[152,61915,61916,61918,61920,61922,61924,61926],{"class":281,"line":1027},[152,61917,52771],{"class":293},[152,61919,52774],{"class":483},[152,61921,2119],{"class":293},[152,61923,52829],{"class":476},[152,61925,52893],{"class":293},[152,61927,2965],{"class":483},[152,61929,61930],{"class":281,"line":1037},[152,61931,4179],{"class":483},[152,61933,61934],{"class":281,"line":1044},[152,61935,307],{"emptyLinePlaceholder":306},[152,61937,61938,61940,61943],{"class":281,"line":1049},[152,61939,61887],{"class":285},[152,61941,61942],{"class":52637}," input",[152,61944,17187],{"class":483},[152,61946,61947,61949,61951,61953,61955],{"class":281,"line":1054},[152,61948,52821],{"class":293},[152,61950,52774],{"class":483},[152,61952,61909],{"class":293},[152,61954,52829],{"class":476},[152,61956,2965],{"class":483},[152,61958,61959,61961,61963,61965,61967],{"class":281,"line":1065},[152,61960,52836],{"class":293},[152,61962,52774],{"class":483},[152,61964,2415],{"class":293},[152,61966,52829],{"class":476},[152,61968,2965],{"class":483},[152,61970,61971,61973,61975,61977,61979,61981],{"class":281,"line":1074},[152,61972,52783],{"class":293},[152,61974,52774],{"class":483},[152,61976,2000],{"class":293},[152,61978,3689],{"class":293},[152,61980,52829],{"class":476},[152,61982,2965],{"class":483},[152,61984,61985,61988,61990,61992,61994],{"class":281,"line":1084},[152,61986,61987],{"class":293},"            font-size",[152,61989,52774],{"class":483},[152,61991,2357],{"class":293},[152,61993,52829],{"class":476},[152,61995,2965],{"class":483},[152,61997,61998,62001,62003,62005,62007],{"class":281,"line":1091},[152,61999,62000],{"class":293},"            line-height",[152,62002,52774],{"class":483},[152,62004,2415],{"class":293},[152,62006,52829],{"class":476},[152,62008,2965],{"class":483},[152,62010,62011,62014,62016,62018,62020,62022,62025],{"class":281,"line":1096},[152,62012,62013],{"class":293},"            border",[152,62015,52774],{"class":483},[152,62017,2026],{"class":293},[152,62019,52829],{"class":476},[152,62021,52858],{"class":293},[152,62023,62024],{"class":293}," #e0e0e0",[152,62026,2965],{"class":483},[152,62028,62029,62032,62034,62036],{"class":281,"line":1101},[152,62030,62031],{"class":293},"            outline",[152,62033,52774],{"class":483},[152,62035,56074],{"class":293},[152,62037,2965],{"class":483},[152,62039,62040],{"class":281,"line":1112},[152,62041,4179],{"class":483},[152,62043,62044],{"class":281,"line":1121},[152,62045,307],{"emptyLinePlaceholder":306},[152,62047,62048,62050,62053],{"class":281,"line":1131},[152,62049,61887],{"class":285},[152,62051,62052],{"class":285}," .search",[152,62054,17187],{"class":483},[152,62056,62057,62059,62061,62063,62065,62067,62070],{"class":281,"line":1138},[152,62058,62013],{"class":293},[152,62060,52774],{"class":483},[152,62062,2026],{"class":293},[152,62064,52829],{"class":476},[152,62066,52858],{"class":293},[152,62068,62069],{"class":293}," #ff6700",[152,62071,2965],{"class":483},[152,62073,62074],{"class":281,"line":1143},[152,62075,4179],{"class":483},[152,62077,62078],{"class":281,"line":1148},[152,62079,307],{"emptyLinePlaceholder":306},[152,62081,62082,62085],{"class":281,"line":1159},[152,62083,62084],{"class":285},"        .result-list",[152,62086,17187],{"class":483},[152,62088,62089,62091,62093,62095],{"class":281,"line":1168},[152,62090,52809],{"class":293},[152,62092,52774],{"class":483},[152,62094,56074],{"class":293},[152,62096,2965],{"class":483},[152,62098,62099,62101,62103,62105],{"class":281,"line":1178},[152,62100,61894],{"class":293},[152,62102,52774],{"class":483},[152,62104,56168],{"class":293},[152,62106,2965],{"class":483},[152,62108,62109,62112,62114,62116],{"class":281,"line":1185},[152,62110,62111],{"class":293},"            left",[152,62113,52774],{"class":483},[152,62115,2000],{"class":293},[152,62117,2965],{"class":483},[152,62119,62120,62123,62125,62127,62129],{"class":281,"line":1190},[152,62121,62122],{"class":293},"            top",[152,62124,52774],{"class":483},[152,62126,2415],{"class":293},[152,62128,52829],{"class":476},[152,62130,2965],{"class":483},[152,62132,62133,62135,62137,62139,62141],{"class":281,"line":1195},[152,62134,52821],{"class":293},[152,62136,52774],{"class":483},[152,62138,61909],{"class":293},[152,62140,52829],{"class":476},[152,62142,2965],{"class":483},[152,62144,62145,62147,62149,62151,62153,62155,62157],{"class":281,"line":1206},[152,62146,62013],{"class":293},[152,62148,52774],{"class":483},[152,62150,2026],{"class":293},[152,62152,52829],{"class":476},[152,62154,52858],{"class":293},[152,62156,62069],{"class":293},[152,62158,2965],{"class":483},[152,62160,62161,62164,62166,62168],{"class":281,"line":1215},[152,62162,62163],{"class":293},"            border-top",[152,62165,52774],{"class":483},[152,62167,2000],{"class":293},[152,62169,2965],{"class":483},[152,62171,62172,62175,62177,62180],{"class":281,"line":1225},[152,62173,62174],{"class":293},"            background",[152,62176,52774],{"class":483},[152,62178,62179],{"class":293},"#fff",[152,62181,2965],{"class":483},[152,62183,62184],{"class":281,"line":1232},[152,62185,4179],{"class":483},[152,62187,62188],{"class":281,"line":1237},[152,62189,307],{"emptyLinePlaceholder":306},[152,62191,62192,62194,62196],{"class":281,"line":1242},[152,62193,62084],{"class":285},[152,62195,3070],{"class":52637},[152,62197,17187],{"class":483},[152,62199,62200,62202,62204,62207],{"class":281,"line":1253},[152,62201,52809],{"class":293},[152,62203,52774],{"class":483},[152,62205,62206],{"class":293},"block",[152,62208,2965],{"class":483},[152,62210,62211,62213,62215,62217,62219,62222,62224],{"class":281,"line":1262},[152,62212,52783],{"class":293},[152,62214,52774],{"class":483},[152,62216,2152],{"class":293},[152,62218,52829],{"class":476},[152,62220,62221],{"class":293}," 15",[152,62223,52829],{"class":476},[152,62225,2965],{"class":483},[152,62227,62228,62230,62232,62234,62236],{"class":281,"line":1272},[152,62229,61987],{"class":293},[152,62231,52774],{"class":483},[152,62233,2306],{"class":293},[152,62235,52829],{"class":476},[152,62237,2965],{"class":483},[152,62239,62240,62243,62245,62248],{"class":281,"line":1279},[152,62241,62242],{"class":293},"            color",[152,62244,52774],{"class":483},[152,62246,62247],{"class":293},"#424242",[152,62249,2965],{"class":483},[152,62251,62252,62255,62257,62259],{"class":281,"line":1284},[152,62253,62254],{"class":293},"            text-decoration",[152,62256,52774],{"class":483},[152,62258,56074],{"class":293},[152,62260,2965],{"class":483},[152,62262,62263],{"class":281,"line":1289},[152,62264,4179],{"class":483},[152,62266,62267],{"class":281,"line":1301},[152,62268,307],{"emptyLinePlaceholder":306},[152,62270,62271,62273,62275,62278],{"class":281,"line":1310},[152,62272,62084],{"class":285},[152,62274,3070],{"class":52637},[152,62276,62277],{"class":285},":hover",[152,62279,17187],{"class":483},[152,62281,62282,62284,62286,62289],{"class":281,"line":1320},[152,62283,52977],{"class":293},[152,62285,52774],{"class":483},[152,62287,62288],{"class":293},"#eee",[152,62290,2965],{"class":483},[152,62292,62293],{"class":281,"line":1327},[152,62294,4179],{"class":483},[152,62296,62297,62299,62301],{"class":281,"line":11528},[152,62298,53113],{"class":483},[152,62300,1736],{"class":52637},[152,62302,52644],{"class":483},[152,62304,62305],{"class":281,"line":11536},[152,62306,307],{"emptyLinePlaceholder":306},[152,62308,62309,62311,62313],{"class":281,"line":11541},[152,62310,53122],{"class":483},[152,62312,52671],{"class":52637},[152,62314,52644],{"class":483},[152,62316,62317],{"class":281,"line":18219},[152,62318,307],{"emptyLinePlaceholder":306},[152,62320,62321,62323,62325],{"class":281,"line":18225},[152,62322,844],{"class":483},[152,62324,53137],{"class":52637},[152,62326,52644],{"class":483},[152,62328,62329,62331,62333,62335,62337,62340],{"class":281,"line":18248},[152,62330,52678],{"class":483},[152,62332,52948],{"class":52637},[152,62334,54823],{"class":285},[152,62336,1864],{"class":483},[152,62338,62339],{"class":289},"\"mi\"",[152,62341,52644],{"class":483},[152,62343,62344,62346,62348,62350,62352,62355,62358,62360,62363],{"class":281,"line":18254},[152,62345,56639],{"class":483},[152,62347,55158],{"class":52637},[152,62349,55161],{"class":285},[152,62351,1864],{"class":483},[152,62353,62354],{"class":289},"\"search\"",[152,62356,62357],{"class":285}," placeholder",[152,62359,1864],{"class":483},[152,62361,62362],{"class":289},"\"小米笔记本\"",[152,62364,52644],{"class":483},[152,62366,62367,62369,62371,62373,62375,62378],{"class":281,"line":18277},[152,62368,56639],{"class":483},[152,62370,698],{"class":52637},[152,62372,54823],{"class":285},[152,62374,1864],{"class":483},[152,62376,62377],{"class":289},"\"result-list\"",[152,62379,52644],{"class":483},[152,62381,62382,62385,62387,62390,62392,62395,62397,62400,62403,62405,62407,62409],{"class":281,"line":18291},[152,62383,62384],{"class":483},"            \u003C",[152,62386,419],{"class":52637},[152,62388,62389],{"class":483},">\u003C",[152,62391,69],{"class":52637},[152,62393,62394],{"class":285}," href",[152,62396,1864],{"class":483},[152,62398,62399],{"class":289},"\"#\"",[152,62401,62402],{"class":483},">全部商品\u003C\u002F",[152,62404,69],{"class":52637},[152,62406,56651],{"class":483},[152,62408,419],{"class":52637},[152,62410,52644],{"class":483},[152,62412,62413,62415,62417,62419,62421,62423,62425,62427,62430,62432,62434,62436],{"class":281,"line":18311},[152,62414,62384],{"class":483},[152,62416,419],{"class":52637},[152,62418,62389],{"class":483},[152,62420,69],{"class":52637},[152,62422,62394],{"class":285},[152,62424,1864],{"class":483},[152,62426,62399],{"class":289},[152,62428,62429],{"class":483},">小米11\u003C\u002F",[152,62431,69],{"class":52637},[152,62433,56651],{"class":483},[152,62435,419],{"class":52637},[152,62437,52644],{"class":483},[152,62439,62440,62442,62444,62446,62448,62450,62452,62454,62457,62459,62461,62463],{"class":281,"line":18317},[152,62441,62384],{"class":483},[152,62443,419],{"class":52637},[152,62445,62389],{"class":483},[152,62447,69],{"class":52637},[152,62449,62394],{"class":285},[152,62451,1864],{"class":483},[152,62453,62399],{"class":289},[152,62455,62456],{"class":483},">小米10S\u003C\u002F",[152,62458,69],{"class":52637},[152,62460,56651],{"class":483},[152,62462,419],{"class":52637},[152,62464,52644],{"class":483},[152,62466,62467,62469,62471,62473,62475,62477,62479,62481,62484,62486,62488,62490],{"class":281,"line":18328},[152,62468,62384],{"class":483},[152,62470,419],{"class":52637},[152,62472,62389],{"class":483},[152,62474,69],{"class":52637},[152,62476,62394],{"class":285},[152,62478,1864],{"class":483},[152,62480,62399],{"class":289},[152,62482,62483],{"class":483},">小米笔记本\u003C\u002F",[152,62485,69],{"class":52637},[152,62487,56651],{"class":483},[152,62489,419],{"class":52637},[152,62491,52644],{"class":483},[152,62493,62494,62496,62498,62500,62502,62504,62506,62508,62511,62513,62515,62517],{"class":281,"line":18351},[152,62495,62384],{"class":483},[152,62497,419],{"class":52637},[152,62499,62389],{"class":483},[152,62501,69],{"class":52637},[152,62503,62394],{"class":285},[152,62505,1864],{"class":483},[152,62507,62399],{"class":289},[152,62509,62510],{"class":483},">小米手机\u003C\u002F",[152,62512,69],{"class":52637},[152,62514,56651],{"class":483},[152,62516,419],{"class":52637},[152,62518,52644],{"class":483},[152,62520,62521,62523,62525,62527,62529,62531,62533,62535,62538,62540,62542,62544],{"class":281,"line":18373},[152,62522,62384],{"class":483},[152,62524,419],{"class":52637},[152,62526,62389],{"class":483},[152,62528,69],{"class":52637},[152,62530,62394],{"class":285},[152,62532,1864],{"class":483},[152,62534,62399],{"class":289},[152,62536,62537],{"class":483},">黑鲨4\u003C\u002F",[152,62539,69],{"class":52637},[152,62541,56651],{"class":483},[152,62543,419],{"class":52637},[152,62545,52644],{"class":483},[152,62547,62548,62550,62552,62554,62556,62558,62560,62562,62565,62567,62569,62571],{"class":281,"line":18378},[152,62549,62384],{"class":483},[152,62551,419],{"class":52637},[152,62553,62389],{"class":483},[152,62555,69],{"class":52637},[152,62557,62394],{"class":285},[152,62559,1864],{"class":483},[152,62561,62399],{"class":289},[152,62563,62564],{"class":483},">空调\u003C\u002F",[152,62566,69],{"class":52637},[152,62568,56651],{"class":483},[152,62570,419],{"class":52637},[152,62572,52644],{"class":483},[152,62574,62575,62578,62580],{"class":281,"line":18384},[152,62576,62577],{"class":483},"        \u003C\u002F",[152,62579,698],{"class":52637},[152,62581,52644],{"class":483},[152,62583,62584,62586,62588],{"class":281,"line":18398},[152,62585,53113],{"class":483},[152,62587,52948],{"class":52637},[152,62589,52644],{"class":483},[152,62591,62592,62594,62596],{"class":281,"line":18411},[152,62593,52678],{"class":483},[152,62595,53150],{"class":52637},[152,62597,52644],{"class":483},[152,62599,62600],{"class":281,"line":18416},[152,62601,62602],{"class":866},"        \u002F\u002F 1. 获取元素\n",[152,62604,62605,62608,62610,62612,62614,62616,62618,62621],{"class":281,"line":18430},[152,62606,62607],{"class":476},"        const",[152,62609,61942],{"class":293},[152,62611,15180],{"class":476},[152,62613,55733],{"class":483},[152,62615,55736],{"class":285},[152,62617,1819],{"class":483},[152,62619,62620],{"class":289},"'[type=search]'",[152,62622,1825],{"class":483},[152,62624,62625,62627,62630,62632,62634,62636,62638,62641],{"class":281,"line":18435},[152,62626,62607],{"class":476},[152,62628,62629],{"class":293}," ul",[152,62631,15180],{"class":476},[152,62633,55733],{"class":483},[152,62635,55736],{"class":285},[152,62637,1819],{"class":483},[152,62639,62640],{"class":289},"'.result-list'",[152,62642,1825],{"class":483},[152,62644,62645],{"class":281,"line":18441},[152,62646,62647],{"class":866},"        \u002F\u002F console.log(input)\n",[152,62649,62650],{"class":281,"line":18446},[152,62651,62652],{"class":866},"        \u002F\u002F 2. 监听事件 获得焦点\n",[152,62654,62655,62658,62660,62662,62665,62667,62669],{"class":281,"line":18460},[152,62656,62657],{"class":483},"        input.",[152,62659,59150],{"class":285},[152,62661,1819],{"class":483},[152,62663,62664],{"class":289},"'focus'",[152,62666,14051],{"class":483},[152,62668,55786],{"class":476},[152,62670,55789],{"class":483},[152,62672,62673],{"class":281,"line":18465},[152,62674,62675],{"class":866},"            \u002F\u002F ul显示\n",[152,62677,62678,62681,62683],{"class":281,"line":18470},[152,62679,62680],{"class":483},"            ul.style.display ",[152,62682,1864],{"class":476},[152,62684,62685],{"class":289}," 'block'\n",[152,62687,62688],{"class":281,"line":18484},[152,62689,62690],{"class":866},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[152,62692,62693,62696,62698,62700,62703],{"class":281,"line":18496},[152,62694,62695],{"class":483},"            input.classList.",[152,62697,6976],{"class":285},[152,62699,1819],{"class":483},[152,62701,62702],{"class":289},"'search'",[152,62704,1825],{"class":483},[152,62706,62707],{"class":281,"line":18501},[152,62708,62709],{"class":483},"        })\n",[152,62711,62712],{"class":281,"line":18514},[152,62713,62714],{"class":866},"        \u002F\u002F 3. 监听事件 失去焦点\n",[152,62716,62717,62719,62721,62723,62726,62728,62730],{"class":281,"line":18519},[152,62718,62657],{"class":483},[152,62720,59150],{"class":285},[152,62722,1819],{"class":483},[152,62724,62725],{"class":289},"'blur'",[152,62727,14051],{"class":483},[152,62729,55786],{"class":476},[152,62731,55789],{"class":483},[152,62733,62734,62736,62738],{"class":281,"line":18524},[152,62735,62680],{"class":483},[152,62737,1864],{"class":476},[152,62739,62740],{"class":289}," 'none'\n",[152,62742,62743,62745,62747,62749,62751],{"class":281,"line":18529},[152,62744,62695],{"class":483},[152,62746,58343],{"class":285},[152,62748,1819],{"class":483},[152,62750,62702],{"class":289},[152,62752,1825],{"class":483},[152,62754,62755],{"class":281,"line":18542},[152,62756,62709],{"class":483},[152,62758,62759,62761,62763],{"class":281,"line":18547},[152,62760,53113],{"class":483},[152,62762,53150],{"class":52637},[152,62764,52644],{"class":483},[152,62766,62767,62769,62771],{"class":281,"line":33970},[152,62768,53122],{"class":483},[152,62770,53137],{"class":52637},[152,62772,52644],{"class":483},[152,62774,62775],{"class":281,"line":33976},[152,62776,307],{"emptyLinePlaceholder":306},[152,62778,62779,62781,62783],{"class":281,"line":33982},[152,62780,53122],{"class":483},[152,62782,51972],{"class":52637},[152,62784,52644],{"class":483},[262,62786,62788],{"id":62787},"_3253-键盘事件","3.2.5.3 键盘事件",[19,62790,62791],{},"评论字数统计案例",[19,62793,62794],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,62796,62797],{},"牢记focus伪类选择器",[52681,62799],{"charSet":62800},"UTF-8",[52681,62802],{"name":62803,"content":62804},"viewport","width=device-width, initial-scale=1.0",[52744,62806,62807],{},"Document",[1736,62809,62810],{},"\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",[55158,62812],{"type":6829},[698,62814,62815,62818],{},[419,62816,62817],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[419,62819,62820],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[270,62822,62824],{"className":51970,"code":62823,"language":51972,"meta":275,"style":275},"\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",[277,62825,62826,62836,62850,62854,62862,62876,62896,62916,62929,62937,62944,62957,62971,62981,62991,62995,62999,63006,63018,63030,63042,63054,63083,63096,63100,63104,63113,63124,63136,63147,63158,63170,63181,63193,63209,63221,63225,63229,63240,63251,63261,63273,63277,63281,63289,63300,63310,63321,63333,63346,63358,63370,63374,63378,63387,63399,63410,63423,63434,63448,63452,63456,63463,63475,63487,63497,63501,63505,63514,63526,63536,63540,63544,63555,63565,63584,63597,63601,63605,63615,63625,63629,63633,63644,63655,63667,63679,63683,63687,63698,63709,63723,63727,63731,63742,63752,63764,63768,63776,63784,63788,63796,63811,63830,63870,63883,63891,63905,63925,63933,63948,63971,63989,64004,64024,64044,64064,64072,64080,64088,64096,64116,64136,64141,64158,64167,64171,64176,64192,64200,64204,64209,64226,64231,64256,64260,64264,64269,64274,64282,64290,64294],{"__ignoreMap":275},[152,62827,62828,62830,62832,62834],{"class":281,"line":282},[152,62829,52634],{"class":483},[152,62831,52638],{"class":52637},[152,62833,52641],{"class":285},[152,62835,52644],{"class":483},[152,62837,62838,62840,62842,62844,62846,62848],{"class":281,"line":303},[152,62839,844],{"class":483},[152,62841,51972],{"class":52637},[152,62843,52653],{"class":285},[152,62845,1864],{"class":483},[152,62847,52658],{"class":289},[152,62849,52644],{"class":483},[152,62851,62852],{"class":281,"line":310},[152,62853,307],{"emptyLinePlaceholder":306},[152,62855,62856,62858,62860],{"class":281,"line":324},[152,62857,844],{"class":483},[152,62859,52671],{"class":52637},[152,62861,52644],{"class":483},[152,62863,62864,62866,62868,62870,62872,62874],{"class":281,"line":329},[152,62865,53481],{"class":483},[152,62867,52681],{"class":52637},[152,62869,52684],{"class":285},[152,62871,1864],{"class":483},[152,62873,52689],{"class":289},[152,62875,52644],{"class":483},[152,62877,62878,62880,62882,62884,62886,62888,62890,62892,62894],{"class":281,"line":343},[152,62879,53481],{"class":483},[152,62881,52681],{"class":52637},[152,62883,52700],{"class":285},[152,62885,1864],{"class":483},[152,62887,52705],{"class":289},[152,62889,52708],{"class":285},[152,62891,1864],{"class":483},[152,62893,52713],{"class":289},[152,62895,52644],{"class":483},[152,62897,62898,62900,62902,62904,62906,62908,62910,62912,62914],{"class":281,"line":348},[152,62899,53481],{"class":483},[152,62901,52681],{"class":52637},[152,62903,16535],{"class":285},[152,62905,1864],{"class":483},[152,62907,52728],{"class":289},[152,62909,52708],{"class":285},[152,62911,1864],{"class":483},[152,62913,52735],{"class":289},[152,62915,52644],{"class":483},[152,62917,62918,62920,62922,62925,62927],{"class":281,"line":362},[152,62919,53481],{"class":483},[152,62921,52744],{"class":52637},[152,62923,62924],{"class":483},">评论回车发布\u003C\u002F",[152,62926,52744],{"class":52637},[152,62928,52644],{"class":483},[152,62930,62931,62933,62935],{"class":281,"line":367},[152,62932,53481],{"class":483},[152,62934,1736],{"class":52637},[152,62936,52644],{"class":483},[152,62938,62939,62942],{"class":281,"line":381},[152,62940,62941],{"class":285},"    .wrapper",[152,62943,17187],{"class":483},[152,62945,62946,62949,62951,62953,62955],{"class":281,"line":386},[152,62947,62948],{"class":293},"      min-width",[152,62950,52774],{"class":483},[152,62952,5629],{"class":293},[152,62954,52829],{"class":476},[152,62956,2965],{"class":483},[152,62958,62959,62962,62964,62967,62969],{"class":281,"line":932},[152,62960,62961],{"class":293},"      max-width",[152,62963,52774],{"class":483},[152,62965,62966],{"class":293},"800",[152,62968,52829],{"class":476},[152,62970,2965],{"class":483},[152,62972,62973,62975,62977,62979],{"class":281,"line":942},[152,62974,56346],{"class":293},[152,62976,52774],{"class":483},[152,62978,52814],{"class":293},[152,62980,2965],{"class":483},[152,62982,62983,62985,62987,62989],{"class":281,"line":949},[152,62984,56357],{"class":293},[152,62986,52774],{"class":483},[152,62988,52917],{"class":293},[152,62990,2965],{"class":483},[152,62992,62993],{"class":281,"line":954},[152,62994,3838],{"class":483},[152,62996,62997],{"class":281,"line":959},[152,62998,307],{"emptyLinePlaceholder":306},[152,63000,63001,63004],{"class":281,"line":970},[152,63002,63003],{"class":285},"    .avatar",[152,63005,17187],{"class":483},[152,63007,63008,63010,63012,63014,63016],{"class":281,"line":979},[152,63009,56108],{"class":293},[152,63011,52774],{"class":483},[152,63013,2415],{"class":293},[152,63015,52829],{"class":476},[152,63017,2965],{"class":483},[152,63019,63020,63022,63024,63026,63028],{"class":281,"line":989},[152,63021,56122],{"class":293},[152,63023,52774],{"class":483},[152,63025,2415],{"class":293},[152,63027,52829],{"class":476},[152,63029,2965],{"class":483},[152,63031,63032,63034,63036,63038,63040],{"class":281,"line":996},[152,63033,56471],{"class":293},[152,63035,52774],{"class":483},[152,63037,2464],{"class":293},[152,63039,2136],{"class":476},[152,63041,2965],{"class":483},[152,63043,63044,63047,63049,63052],{"class":281,"line":1001},[152,63045,63046],{"class":293},"      overflow",[152,63048,52774],{"class":483},[152,63050,63051],{"class":293},"hidden",[152,63053,2965],{"class":483},[152,63055,63056,63059,63061,63064,63066,63069,63071,63074,63076,63078,63081],{"class":281,"line":1006},[152,63057,63058],{"class":293},"      background",[152,63060,52774],{"class":483},[152,63062,63063],{"class":293},"url",[152,63065,1819],{"class":483},[152,63067,63068],{"class":6858},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[152,63070,15330],{"class":483},[152,63072,63073],{"class":293},"no-repeat",[152,63075,18759],{"class":293},[152,63077,26589],{"class":483},[152,63079,63080],{"class":293},"cover",[152,63082,2965],{"class":483},[152,63084,63085,63088,63090,63092,63094],{"class":281,"line":1018},[152,63086,63087],{"class":293},"      margin-right",[152,63089,52774],{"class":483},[152,63091,2508],{"class":293},[152,63093,52829],{"class":476},[152,63095,2965],{"class":483},[152,63097,63098],{"class":281,"line":1027},[152,63099,3838],{"class":483},[152,63101,63102],{"class":281,"line":1037},[152,63103,307],{"emptyLinePlaceholder":306},[152,63105,63106,63108,63111],{"class":281,"line":1044},[152,63107,62941],{"class":285},[152,63109,63110],{"class":52637}," textarea",[152,63112,17187],{"class":483},[152,63114,63115,63118,63120,63122],{"class":281,"line":1049},[152,63116,63117],{"class":293},"      outline",[152,63119,52774],{"class":483},[152,63121,56074],{"class":293},[152,63123,2965],{"class":483},[152,63125,63126,63129,63131,63134],{"class":281,"line":1054},[152,63127,63128],{"class":293},"      border-color",[152,63130,52774],{"class":483},[152,63132,63133],{"class":293},"transparent",[152,63135,2965],{"class":483},[152,63137,63138,63141,63143,63145],{"class":281,"line":1065},[152,63139,63140],{"class":293},"      resize",[152,63142,52774],{"class":483},[152,63144,56074],{"class":293},[152,63146,2965],{"class":483},[152,63148,63149,63151,63153,63156],{"class":281,"line":1074},[152,63150,63058],{"class":293},[152,63152,52774],{"class":483},[152,63154,63155],{"class":293},"#f5f5f5",[152,63157,2965],{"class":483},[152,63159,63160,63162,63164,63166,63168],{"class":281,"line":1084},[152,63161,56471],{"class":293},[152,63163,52774],{"class":483},[152,63165,2101],{"class":293},[152,63167,52829],{"class":476},[152,63169,2965],{"class":483},[152,63171,63172,63175,63177,63179],{"class":281,"line":1091},[152,63173,63174],{"class":293},"      flex",[152,63176,52774],{"class":483},[152,63178,2026],{"class":293},[152,63180,2965],{"class":483},[152,63182,63183,63185,63187,63189,63191],{"class":281,"line":1096},[152,63184,56032],{"class":293},[152,63186,52774],{"class":483},[152,63188,2254],{"class":293},[152,63190,52829],{"class":476},[152,63192,2965],{"class":483},[152,63194,63195,63198,63200,63202,63205,63207],{"class":281,"line":1101},[152,63196,63197],{"class":293},"      transition",[152,63199,52774],{"class":483},[152,63201,29721],{"class":293},[152,63203,63204],{"class":293}," 0.5",[152,63206,2503],{"class":476},[152,63208,2965],{"class":483},[152,63210,63211,63213,63215,63217,63219],{"class":281,"line":1112},[152,63212,56122],{"class":293},[152,63214,52774],{"class":483},[152,63216,2757],{"class":293},[152,63218,52829],{"class":476},[152,63220,2965],{"class":483},[152,63222,63223],{"class":281,"line":1121},[152,63224,3838],{"class":483},[152,63226,63227],{"class":281,"line":1131},[152,63228,307],{"emptyLinePlaceholder":306},[152,63230,63231,63233,63235,63238],{"class":281,"line":1138},[152,63232,62941],{"class":285},[152,63234,63110],{"class":52637},[152,63236,63237],{"class":285},":focus",[152,63239,17187],{"class":483},[152,63241,63242,63244,63246,63249],{"class":281,"line":1143},[152,63243,63128],{"class":293},[152,63245,52774],{"class":483},[152,63247,63248],{"class":293},"#e4e4e4",[152,63250,2965],{"class":483},[152,63252,63253,63255,63257,63259],{"class":281,"line":1148},[152,63254,63058],{"class":293},[152,63256,52774],{"class":483},[152,63258,62179],{"class":293},[152,63260,2965],{"class":483},[152,63262,63263,63265,63267,63269,63271],{"class":281,"line":1159},[152,63264,56122],{"class":293},[152,63266,52774],{"class":483},[152,63268,2464],{"class":293},[152,63270,52829],{"class":476},[152,63272,2965],{"class":483},[152,63274,63275],{"class":281,"line":1168},[152,63276,3838],{"class":483},[152,63278,63279],{"class":281,"line":1178},[152,63280,307],{"emptyLinePlaceholder":306},[152,63282,63283,63285,63287],{"class":281,"line":1185},[152,63284,62941],{"class":285},[152,63286,58804],{"class":52637},[152,63288,17187],{"class":483},[152,63290,63291,63293,63295,63298],{"class":281,"line":1190},[152,63292,63058],{"class":293},[152,63294,52774],{"class":483},[152,63296,63297],{"class":293},"#00aeec",[152,63299,2965],{"class":483},[152,63301,63302,63304,63306,63308],{"class":281,"line":1195},[152,63303,58753],{"class":293},[152,63305,52774],{"class":483},[152,63307,62179],{"class":293},[152,63309,2965],{"class":483},[152,63311,63312,63315,63317,63319],{"class":281,"line":1206},[152,63313,63314],{"class":293},"      border",[152,63316,52774],{"class":483},[152,63318,56074],{"class":293},[152,63320,2965],{"class":483},[152,63322,63323,63325,63327,63329,63331],{"class":281,"line":1215},[152,63324,56471],{"class":293},[152,63326,52774],{"class":483},[152,63328,2101],{"class":293},[152,63330,52829],{"class":476},[152,63332,2965],{"class":483},[152,63334,63335,63338,63340,63342,63344],{"class":281,"line":1225},[152,63336,63337],{"class":293},"      margin-left",[152,63339,52774],{"class":483},[152,63341,2254],{"class":293},[152,63343,52829],{"class":476},[152,63345,2965],{"class":483},[152,63347,63348,63350,63352,63354,63356],{"class":281,"line":1232},[152,63349,56108],{"class":293},[152,63351,52774],{"class":483},[152,63353,2164],{"class":293},[152,63355,52829],{"class":476},[152,63357,2965],{"class":483},[152,63359,63360,63363,63365,63368],{"class":281,"line":1237},[152,63361,63362],{"class":293},"      cursor",[152,63364,52774],{"class":483},[152,63366,63367],{"class":293},"pointer",[152,63369,2965],{"class":483},[152,63371,63372],{"class":281,"line":1242},[152,63373,3838],{"class":483},[152,63375,63376],{"class":281,"line":1253},[152,63377,307],{"emptyLinePlaceholder":306},[152,63379,63380,63382,63385],{"class":281,"line":1262},[152,63381,62941],{"class":285},[152,63383,63384],{"class":285}," .total",[152,63386,17187],{"class":483},[152,63388,63389,63391,63393,63395,63397],{"class":281,"line":1272},[152,63390,63087],{"class":293},[152,63392,52774],{"class":483},[152,63394,2420],{"class":293},[152,63396,52829],{"class":476},[152,63398,2965],{"class":483},[152,63400,63401,63403,63405,63408],{"class":281,"line":1279},[152,63402,58753],{"class":293},[152,63404,52774],{"class":483},[152,63406,63407],{"class":293},"#999",[152,63409,2965],{"class":483},[152,63411,63412,63415,63417,63419,63421],{"class":281,"line":1284},[152,63413,63414],{"class":293},"      margin-top",[152,63416,52774],{"class":483},[152,63418,2127],{"class":293},[152,63420,52829],{"class":476},[152,63422,2965],{"class":483},[152,63424,63425,63428,63430,63432],{"class":281,"line":1289},[152,63426,63427],{"class":293},"      opacity",[152,63429,52774],{"class":483},[152,63431,2000],{"class":293},[152,63433,2965],{"class":483},[152,63435,63436,63438,63440,63442,63444,63446],{"class":281,"line":1301},[152,63437,63197],{"class":293},[152,63439,52774],{"class":483},[152,63441,29721],{"class":293},[152,63443,63204],{"class":293},[152,63445,2503],{"class":476},[152,63447,2965],{"class":483},[152,63449,63450],{"class":281,"line":1310},[152,63451,3838],{"class":483},[152,63453,63454],{"class":281,"line":1320},[152,63455,307],{"emptyLinePlaceholder":306},[152,63457,63458,63461],{"class":281,"line":1327},[152,63459,63460],{"class":285},"    .list",[152,63462,17187],{"class":483},[152,63464,63465,63467,63469,63471,63473],{"class":281,"line":11528},[152,63466,62948],{"class":293},[152,63468,52774],{"class":483},[152,63470,5629],{"class":293},[152,63472,52829],{"class":476},[152,63474,2965],{"class":483},[152,63476,63477,63479,63481,63483,63485],{"class":281,"line":11536},[152,63478,62961],{"class":293},[152,63480,52774],{"class":483},[152,63482,62966],{"class":293},[152,63484,52829],{"class":476},[152,63486,2965],{"class":483},[152,63488,63489,63491,63493,63495],{"class":281,"line":11541},[152,63490,56346],{"class":293},[152,63492,52774],{"class":483},[152,63494,52814],{"class":293},[152,63496,2965],{"class":483},[152,63498,63499],{"class":281,"line":18219},[152,63500,3838],{"class":483},[152,63502,63503],{"class":281,"line":18225},[152,63504,307],{"emptyLinePlaceholder":306},[152,63506,63507,63509,63512],{"class":281,"line":18248},[152,63508,63460],{"class":285},[152,63510,63511],{"class":285}," .item",[152,63513,17187],{"class":483},[152,63515,63516,63518,63520,63522,63524],{"class":281,"line":18254},[152,63517,56108],{"class":293},[152,63519,52774],{"class":483},[152,63521,2119],{"class":293},[152,63523,2136],{"class":476},[152,63525,2965],{"class":483},[152,63527,63528,63530,63532,63534],{"class":281,"line":18277},[152,63529,56346],{"class":293},[152,63531,52774],{"class":483},[152,63533,52814],{"class":293},[152,63535,2965],{"class":483},[152,63537,63538],{"class":281,"line":18291},[152,63539,3838],{"class":483},[152,63541,63542],{"class":281,"line":18311},[152,63543,307],{"emptyLinePlaceholder":306},[152,63545,63546,63548,63550,63553],{"class":281,"line":18317},[152,63547,63460],{"class":285},[152,63549,63511],{"class":285},[152,63551,63552],{"class":285}," .info",[152,63554,17187],{"class":483},[152,63556,63557,63559,63561,63563],{"class":281,"line":18328},[152,63558,63174],{"class":293},[152,63560,52774],{"class":483},[152,63562,2026],{"class":293},[152,63564,2965],{"class":483},[152,63566,63567,63570,63572,63574,63576,63579,63582],{"class":281,"line":18351},[152,63568,63569],{"class":293},"      border-bottom",[152,63571,52774],{"class":483},[152,63573,2026],{"class":293},[152,63575,52829],{"class":476},[152,63577,63578],{"class":293}," dashed",[152,63580,63581],{"class":293}," #e4e4e4",[152,63583,2965],{"class":483},[152,63585,63586,63589,63591,63593,63595],{"class":281,"line":18373},[152,63587,63588],{"class":293},"      padding-bottom",[152,63590,52774],{"class":483},[152,63592,2254],{"class":293},[152,63594,52829],{"class":476},[152,63596,2965],{"class":483},[152,63598,63599],{"class":281,"line":18378},[152,63600,3838],{"class":483},[152,63602,63603],{"class":281,"line":18384},[152,63604,307],{"emptyLinePlaceholder":306},[152,63606,63607,63609,63611,63613],{"class":281,"line":18398},[152,63608,63460],{"class":285},[152,63610,63511],{"class":285},[152,63612,8467],{"class":52637},[152,63614,17187],{"class":483},[152,63616,63617,63619,63621,63623],{"class":281,"line":18411},[152,63618,56043],{"class":293},[152,63620,52774],{"class":483},[152,63622,2000],{"class":293},[152,63624,2965],{"class":483},[152,63626,63627],{"class":281,"line":18416},[152,63628,3838],{"class":483},[152,63630,63631],{"class":281,"line":18430},[152,63632,307],{"emptyLinePlaceholder":306},[152,63634,63635,63637,63639,63642],{"class":281,"line":18435},[152,63636,63460],{"class":285},[152,63638,63511],{"class":285},[152,63640,63641],{"class":285}," .name",[152,63643,17187],{"class":483},[152,63645,63646,63648,63650,63653],{"class":281,"line":18441},[152,63647,58753],{"class":293},[152,63649,52774],{"class":483},[152,63651,63652],{"class":293},"#FB7299",[152,63654,2965],{"class":483},[152,63656,63657,63659,63661,63663,63665],{"class":281,"line":18446},[152,63658,56259],{"class":293},[152,63660,52774],{"class":483},[152,63662,2357],{"class":293},[152,63664,52829],{"class":476},[152,63666,2965],{"class":483},[152,63668,63669,63672,63674,63677],{"class":281,"line":18460},[152,63670,63671],{"class":293},"      font-weight",[152,63673,52774],{"class":483},[152,63675,63676],{"class":293},"bold",[152,63678,2965],{"class":483},[152,63680,63681],{"class":281,"line":18465},[152,63682,3838],{"class":483},[152,63684,63685],{"class":281,"line":18470},[152,63686,307],{"emptyLinePlaceholder":306},[152,63688,63689,63691,63693,63696],{"class":281,"line":18484},[152,63690,63460],{"class":285},[152,63692,63511],{"class":285},[152,63694,63695],{"class":285}," .text",[152,63697,17187],{"class":483},[152,63699,63700,63702,63704,63707],{"class":281,"line":18496},[152,63701,58753],{"class":293},[152,63703,52774],{"class":483},[152,63705,63706],{"class":293},"#333",[152,63708,2965],{"class":483},[152,63710,63711,63713,63715,63717,63719,63721],{"class":281,"line":18501},[152,63712,56032],{"class":293},[152,63714,52774],{"class":483},[152,63716,2254],{"class":293},[152,63718,52829],{"class":476},[152,63720,5735],{"class":293},[152,63722,2965],{"class":483},[152,63724,63725],{"class":281,"line":18514},[152,63726,3838],{"class":483},[152,63728,63729],{"class":281,"line":18519},[152,63730,307],{"emptyLinePlaceholder":306},[152,63732,63733,63735,63737,63740],{"class":281,"line":18524},[152,63734,63460],{"class":285},[152,63736,63511],{"class":285},[152,63738,63739],{"class":285}," .time",[152,63741,17187],{"class":483},[152,63743,63744,63746,63748,63750],{"class":281,"line":18529},[152,63745,58753],{"class":293},[152,63747,52774],{"class":483},[152,63749,63407],{"class":293},[152,63751,2965],{"class":483},[152,63753,63754,63756,63758,63760,63762],{"class":281,"line":18542},[152,63755,56259],{"class":293},[152,63757,52774],{"class":483},[152,63759,2306],{"class":293},[152,63761,52829],{"class":476},[152,63763,2965],{"class":483},[152,63765,63766],{"class":281,"line":18547},[152,63767,3838],{"class":483},[152,63769,63770,63772,63774],{"class":281,"line":33970},[152,63771,53754],{"class":483},[152,63773,1736],{"class":52637},[152,63775,52644],{"class":483},[152,63777,63778,63780,63782],{"class":281,"line":33976},[152,63779,53122],{"class":483},[152,63781,52671],{"class":52637},[152,63783,52644],{"class":483},[152,63785,63786],{"class":281,"line":33982},[152,63787,307],{"emptyLinePlaceholder":306},[152,63789,63790,63792,63794],{"class":281,"line":33988},[152,63791,844],{"class":483},[152,63793,53137],{"class":52637},[152,63795,52644],{"class":483},[152,63797,63798,63800,63802,63804,63806,63809],{"class":281,"line":33994},[152,63799,53481],{"class":483},[152,63801,52948],{"class":52637},[152,63803,54823],{"class":285},[152,63805,1864],{"class":483},[152,63807,63808],{"class":289},"\"wrapper\"",[152,63810,52644],{"class":483},[152,63812,63813,63815,63817,63819,63821,63824,63826,63828],{"class":281,"line":34005},[152,63814,52678],{"class":483},[152,63816,2249],{"class":52637},[152,63818,54823],{"class":285},[152,63820,1864],{"class":483},[152,63822,63823],{"class":289},"\"avatar\"",[152,63825,56651],{"class":483},[152,63827,2249],{"class":52637},[152,63829,52644],{"class":483},[152,63831,63832,63834,63836,63838,63840,63843,63845,63847,63850,63852,63854,63856,63859,63861,63864,63866,63868],{"class":281,"line":34011},[152,63833,52678],{"class":483},[152,63835,55625],{"class":52637},[152,63837,16574],{"class":285},[152,63839,1864],{"class":483},[152,63841,63842],{"class":289},"\"tx\"",[152,63844,62357],{"class":285},[152,63846,1864],{"class":483},[152,63848,63849],{"class":289},"\"发一条友善的评论\"",[152,63851,55648],{"class":285},[152,63853,1864],{"class":483},[152,63855,5344],{"class":289},[152,63857,63858],{"class":285}," maxlength",[152,63860,1864],{"class":483},[152,63862,63863],{"class":289},"\"200\"",[152,63865,56651],{"class":483},[152,63867,55625],{"class":52637},[152,63869,52644],{"class":483},[152,63871,63872,63874,63876,63879,63881],{"class":281,"line":34031},[152,63873,52678],{"class":483},[152,63875,55224],{"class":52637},[152,63877,63878],{"class":483},">发布\u003C\u002F",[152,63880,55224],{"class":52637},[152,63882,52644],{"class":483},[152,63884,63885,63887,63889],{"class":281,"line":34037},[152,63886,53754],{"class":483},[152,63888,52948],{"class":52637},[152,63890,52644],{"class":483},[152,63892,63893,63895,63897,63899,63901,63903],{"class":281,"line":34048},[152,63894,53481],{"class":483},[152,63896,52948],{"class":52637},[152,63898,54823],{"class":285},[152,63900,1864],{"class":483},[152,63902,63808],{"class":289},[152,63904,52644],{"class":483},[152,63906,63907,63909,63911,63913,63915,63918,63921,63923],{"class":281,"line":34054},[152,63908,52678],{"class":483},[152,63910,152],{"class":52637},[152,63912,54823],{"class":285},[152,63914,1864],{"class":483},[152,63916,63917],{"class":289},"\"total\"",[152,63919,63920],{"class":483},">0\u002F200字\u003C\u002F",[152,63922,152],{"class":52637},[152,63924,52644],{"class":483},[152,63926,63927,63929,63931],{"class":281,"line":34060},[152,63928,53754],{"class":483},[152,63930,52948],{"class":52637},[152,63932,52644],{"class":483},[152,63934,63935,63937,63939,63941,63943,63946],{"class":281,"line":34066},[152,63936,53481],{"class":483},[152,63938,52948],{"class":52637},[152,63940,54823],{"class":285},[152,63942,1864],{"class":483},[152,63944,63945],{"class":289},"\"list\"",[152,63947,52644],{"class":483},[152,63949,63950,63952,63954,63956,63958,63961,63964,63966,63969],{"class":281,"line":34072},[152,63951,52678],{"class":483},[152,63953,52948],{"class":52637},[152,63955,54823],{"class":285},[152,63957,1864],{"class":483},[152,63959,63960],{"class":289},"\"item\"",[152,63962,63963],{"class":285}," style",[152,63965,1864],{"class":483},[152,63967,63968],{"class":289},"\"display: none;\"",[152,63970,52644],{"class":483},[152,63972,63973,63975,63977,63979,63981,63983,63985,63987],{"class":281,"line":34078},[152,63974,56571],{"class":483},[152,63976,2249],{"class":52637},[152,63978,54823],{"class":285},[152,63980,1864],{"class":483},[152,63982,63823],{"class":289},[152,63984,56651],{"class":483},[152,63986,2249],{"class":52637},[152,63988,52644],{"class":483},[152,63990,63991,63993,63995,63997,63999,64002],{"class":281,"line":34084},[152,63992,56571],{"class":483},[152,63994,52948],{"class":52637},[152,63996,54823],{"class":285},[152,63998,1864],{"class":483},[152,64000,64001],{"class":289},"\"info\"",[152,64003,52644],{"class":483},[152,64005,64006,64008,64010,64012,64014,64017,64020,64022],{"class":281,"line":34090},[152,64007,56639],{"class":483},[152,64009,19],{"class":52637},[152,64011,54823],{"class":285},[152,64013,1864],{"class":483},[152,64015,64016],{"class":289},"\"name\"",[152,64018,64019],{"class":483},">清风徐来\u003C\u002F",[152,64021,19],{"class":52637},[152,64023,52644],{"class":483},[152,64025,64026,64028,64030,64032,64034,64037,64040,64042],{"class":281,"line":34110},[152,64027,56639],{"class":483},[152,64029,19],{"class":52637},[152,64031,54823],{"class":285},[152,64033,1864],{"class":483},[152,64035,64036],{"class":289},"\"text\"",[152,64038,64039],{"class":483},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[152,64041,19],{"class":52637},[152,64043,52644],{"class":483},[152,64045,64046,64048,64050,64052,64054,64057,64060,64062],{"class":281,"line":34116},[152,64047,56639],{"class":483},[152,64049,19],{"class":52637},[152,64051,54823],{"class":285},[152,64053,1864],{"class":483},[152,64055,64056],{"class":289},"\"time\"",[152,64058,64059],{"class":483},">2022-10-10 20:29:21\u003C\u002F",[152,64061,19],{"class":52637},[152,64063,52644],{"class":483},[152,64065,64066,64068,64070],{"class":281,"line":34132},[152,64067,56744],{"class":483},[152,64069,52948],{"class":52637},[152,64071,52644],{"class":483},[152,64073,64074,64076,64078],{"class":281,"line":34138},[152,64075,53113],{"class":483},[152,64077,52948],{"class":52637},[152,64079,52644],{"class":483},[152,64081,64082,64084,64086],{"class":281,"line":34152},[152,64083,53754],{"class":483},[152,64085,52948],{"class":52637},[152,64087,52644],{"class":483},[152,64089,64090,64092,64094],{"class":281,"line":34158},[152,64091,53481],{"class":483},[152,64093,53150],{"class":52637},[152,64095,52644],{"class":483},[152,64097,64098,64100,64103,64105,64107,64109,64111,64114],{"class":281,"line":34173},[152,64099,12837],{"class":476},[152,64101,64102],{"class":293}," tx",[152,64104,15180],{"class":476},[152,64106,55733],{"class":483},[152,64108,55736],{"class":285},[152,64110,1819],{"class":483},[152,64112,64113],{"class":289},"'#tx'",[152,64115,1825],{"class":483},[152,64117,64118,64120,64123,64125,64127,64129,64131,64134],{"class":281,"line":34179},[152,64119,12837],{"class":476},[152,64121,64122],{"class":293}," total",[152,64124,15180],{"class":476},[152,64126,55733],{"class":483},[152,64128,55736],{"class":285},[152,64130,1819],{"class":483},[152,64132,64133],{"class":289},"'.total'",[152,64135,1825],{"class":483},[152,64137,64138],{"class":281,"line":34188},[152,64139,64140],{"class":866},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[152,64142,64143,64146,64148,64150,64152,64154,64156],{"class":281,"line":34194},[152,64144,64145],{"class":483},"    tx.",[152,64147,59150],{"class":285},[152,64149,1819],{"class":483},[152,64151,62664],{"class":289},[152,64153,14051],{"class":483},[152,64155,55786],{"class":476},[152,64157,55789],{"class":483},[152,64159,64160,64163,64165],{"class":281,"line":34203},[152,64161,64162],{"class":483},"      total.style.opacity ",[152,64164,1864],{"class":476},[152,64166,57036],{"class":293},[152,64168,64169],{"class":281,"line":34209},[152,64170,34798],{"class":483},[152,64172,64173],{"class":281,"line":34215},[152,64174,64175],{"class":866},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[152,64177,64178,64180,64182,64184,64186,64188,64190],{"class":281,"line":34224},[152,64179,64145],{"class":483},[152,64181,59150],{"class":285},[152,64183,1819],{"class":483},[152,64185,62725],{"class":289},[152,64187,14051],{"class":483},[152,64189,55786],{"class":476},[152,64191,55789],{"class":483},[152,64193,64194,64196,64198],{"class":281,"line":34230},[152,64195,64162],{"class":483},[152,64197,1864],{"class":476},[152,64199,48670],{"class":293},[152,64201,64202],{"class":281,"line":34241},[152,64203,34798],{"class":483},[152,64205,64206],{"class":281,"line":34247},[152,64207,64208],{"class":866},"    \u002F\u002F 3. 检测用户输入\n",[152,64210,64211,64213,64215,64217,64220,64222,64224],{"class":281,"line":34266},[152,64212,64145],{"class":483},[152,64214,59150],{"class":285},[152,64216,1819],{"class":483},[152,64218,64219],{"class":289},"'input'",[152,64221,14051],{"class":483},[152,64223,55786],{"class":476},[152,64225,55789],{"class":483},[152,64227,64228],{"class":281,"line":34272},[152,64229,64230],{"class":866},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[152,64232,64233,64236,64238,64241,64244,64246,64249,64251,64253],{"class":281,"line":34283},[152,64234,64235],{"class":483},"      total.innerHTML ",[152,64237,1864],{"class":476},[152,64239,64240],{"class":289}," `${",[152,64242,64243],{"class":483},"tx",[152,64245,2366],{"class":289},[152,64247,64248],{"class":483},"value",[152,64250,2366],{"class":289},[152,64252,53305],{"class":293},[152,64254,64255],{"class":289},"}\u002F200字`\n",[152,64257,64258],{"class":281,"line":34289},[152,64259,34798],{"class":483},[152,64261,64262],{"class":281,"line":34309},[152,64263,307],{"emptyLinePlaceholder":306},[152,64265,64266],{"class":281,"line":34325},[152,64267,64268],{"class":866},"    \u002F\u002F const str = 'andy'\n",[152,64270,64271],{"class":281,"line":34331},[152,64272,64273],{"class":866},"    \u002F\u002F console.log(str.length)\n",[152,64275,64276,64278,64280],{"class":281,"line":34345},[152,64277,53754],{"class":483},[152,64279,53150],{"class":52637},[152,64281,52644],{"class":483},[152,64283,64284,64286,64288],{"class":281,"line":34351},[152,64285,53122],{"class":483},[152,64287,53137],{"class":52637},[152,64289,52644],{"class":483},[152,64291,64292],{"class":281,"line":34357},[152,64293,307],{"emptyLinePlaceholder":306},[152,64295,64296,64298,64300],{"class":281,"line":34368},[152,64297,53122],{"class":483},[152,64299,51972],{"class":52637},[152,64301,52644],{"class":483},[262,64303,64305],{"id":64304},"_3254-change事件","3.2.5.4 change事件",[19,64307,64308],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64310,64311],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64313,64314],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[270,64316,64318],{"className":51970,"code":64317,"language":51972,"meta":275,"style":275},"\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",[277,64319,64320,64330,64344,64348,64356,64370,64390,64402,64410,64414,64422,64436,64444,64462,64480,64492,64496,64504,64512,64516],{"__ignoreMap":275},[152,64321,64322,64324,64326,64328],{"class":281,"line":282},[152,64323,52634],{"class":483},[152,64325,52638],{"class":52637},[152,64327,52641],{"class":285},[152,64329,52644],{"class":483},[152,64331,64332,64334,64336,64338,64340,64342],{"class":281,"line":303},[152,64333,844],{"class":483},[152,64335,51972],{"class":52637},[152,64337,52653],{"class":285},[152,64339,1864],{"class":483},[152,64341,52658],{"class":289},[152,64343,52644],{"class":483},[152,64345,64346],{"class":281,"line":310},[152,64347,307],{"emptyLinePlaceholder":306},[152,64349,64350,64352,64354],{"class":281,"line":324},[152,64351,844],{"class":483},[152,64353,52671],{"class":52637},[152,64355,52644],{"class":483},[152,64357,64358,64360,64362,64364,64366,64368],{"class":281,"line":329},[152,64359,53481],{"class":483},[152,64361,52681],{"class":52637},[152,64363,52684],{"class":285},[152,64365,1864],{"class":483},[152,64367,52689],{"class":289},[152,64369,52644],{"class":483},[152,64371,64372,64374,64376,64378,64380,64382,64384,64386,64388],{"class":281,"line":343},[152,64373,53481],{"class":483},[152,64375,52681],{"class":52637},[152,64377,16535],{"class":285},[152,64379,1864],{"class":483},[152,64381,52728],{"class":289},[152,64383,52708],{"class":285},[152,64385,1864],{"class":483},[152,64387,52735],{"class":289},[152,64389,52644],{"class":483},[152,64391,64392,64394,64396,64398,64400],{"class":281,"line":348},[152,64393,53481],{"class":483},[152,64395,52744],{"class":52637},[152,64397,52747],{"class":483},[152,64399,52744],{"class":52637},[152,64401,52644],{"class":483},[152,64403,64404,64406,64408],{"class":281,"line":362},[152,64405,53122],{"class":483},[152,64407,52671],{"class":52637},[152,64409,52644],{"class":483},[152,64411,64412],{"class":281,"line":367},[152,64413,307],{"emptyLinePlaceholder":306},[152,64415,64416,64418,64420],{"class":281,"line":381},[152,64417,844],{"class":483},[152,64419,53137],{"class":52637},[152,64421,52644],{"class":483},[152,64423,64424,64426,64428,64430,64432,64434],{"class":281,"line":386},[152,64425,53481],{"class":483},[152,64427,55158],{"class":52637},[152,64429,55161],{"class":285},[152,64431,1864],{"class":483},[152,64433,64036],{"class":289},[152,64435,52644],{"class":483},[152,64437,64438,64440,64442],{"class":281,"line":932},[152,64439,53481],{"class":483},[152,64441,53150],{"class":52637},[152,64443,52644],{"class":483},[152,64445,64446,64448,64450,64452,64454,64456,64458,64460],{"class":281,"line":942},[152,64447,12837],{"class":476},[152,64449,61942],{"class":293},[152,64451,15180],{"class":476},[152,64453,55733],{"class":483},[152,64455,55736],{"class":285},[152,64457,1819],{"class":483},[152,64459,64219],{"class":289},[152,64461,1825],{"class":483},[152,64463,64464,64467,64469,64471,64474,64476,64478],{"class":281,"line":949},[152,64465,64466],{"class":483},"    input.",[152,64468,59150],{"class":285},[152,64470,1819],{"class":483},[152,64472,64473],{"class":289},"'change'",[152,64475,14051],{"class":483},[152,64477,55786],{"class":476},[152,64479,55789],{"class":483},[152,64481,64482,64484,64486,64488,64490],{"class":281,"line":954},[152,64483,59581],{"class":483},[152,64485,59584],{"class":285},[152,64487,1819],{"class":483},[152,64489,2401],{"class":293},[152,64491,1825],{"class":483},[152,64493,64494],{"class":281,"line":959},[152,64495,34798],{"class":483},[152,64497,64498,64500,64502],{"class":281,"line":970},[152,64499,53754],{"class":483},[152,64501,53150],{"class":52637},[152,64503,52644],{"class":483},[152,64505,64506,64508,64510],{"class":281,"line":979},[152,64507,53122],{"class":483},[152,64509,53137],{"class":52637},[152,64511,52644],{"class":483},[152,64513,64514],{"class":281,"line":989},[152,64515,307],{"emptyLinePlaceholder":306},[152,64517,64518,64520,64522],{"class":281,"line":996},[152,64519,53122],{"class":483},[152,64521,51972],{"class":52637},[152,64523,52644],{"class":483},[19,64525,64526],{},"总结：内容发生改变才回去触发",[14,64528,64530],{"id":64529},"_326-事件对象","3.2.6 事件对象",[262,64532,64534],{"id":64533},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64536,64537],{},[401,64538],{"alt":275,"src":64539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64541,64542],{},[401,64543],{"alt":275,"src":64544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64546,64547],{},"点击一次，就输出了事件对象，它是个对象",[19,64549,64550],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64552,64553],{},[401,64554],{"alt":275,"src":64555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[262,64557,64559],{"id":64558},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,64561,64562],{},[401,64563],{"alt":275,"src":64564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,64566,64567],{},"实现按特殊字符才是实现打印输出效果：",[270,64569,64571],{"className":54404,"code":64570,"language":54406,"meta":275,"style":275},"\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",[277,64572,64573,64581,64586,64600,64608,64613,64618,64623,64628,64633,64638,64643,64648,64653,64657,64661,64669],{"__ignoreMap":275},[152,64574,64575,64577,64579],{"class":281,"line":282},[152,64576,844],{"class":483},[152,64578,53137],{"class":52637},[152,64580,52644],{"class":483},[152,64582,64583],{"class":281,"line":303},[152,64584,64585],{"class":866},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[152,64587,64588,64590,64592,64594,64596,64598],{"class":281,"line":310},[152,64589,53481],{"class":483},[152,64591,55158],{"class":52637},[152,64593,55161],{"class":285},[152,64595,1864],{"class":483},[152,64597,64036],{"class":289},[152,64599,52644],{"class":483},[152,64601,64602,64604,64606],{"class":281,"line":324},[152,64603,53481],{"class":483},[152,64605,53150],{"class":52637},[152,64607,52644],{"class":483},[152,64609,64610],{"class":281,"line":329},[152,64611,64612],{"class":483},"    \u002F\u002F const btn = document.querySelector('button')\n",[152,64614,64615],{"class":281,"line":343},[152,64616,64617],{"class":483},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[152,64619,64620],{"class":281,"line":348},[152,64621,64622],{"class":483},"    \u002F\u002F   console.log(e);\n",[152,64624,64625],{"class":281,"line":362},[152,64626,64627],{"class":483},"    \u002F\u002F })\n",[152,64629,64630],{"class":281,"line":367},[152,64631,64632],{"class":483},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[152,64634,64635],{"class":281,"line":381},[152,64636,64637],{"class":483},"    const input = document.querySelector('input')\n",[152,64639,64640],{"class":281,"line":386},[152,64641,64642],{"class":483},"    input.addEventListener('keyup', function (e) {\n",[152,64644,64645],{"class":281,"line":932},[152,64646,64647],{"class":483},"      if (e.key === 'Enter') {\n",[152,64649,64650],{"class":281,"line":942},[152,64651,64652],{"class":483},"        console.log('我按下了回车键')\n",[152,64654,64655],{"class":281,"line":949},[152,64656,53735],{"class":483},[152,64658,64659],{"class":281,"line":954},[152,64660,34798],{"class":483},[152,64662,64663,64665,64667],{"class":281,"line":959},[152,64664,53754],{"class":483},[152,64666,53150],{"class":52637},[152,64668,52644],{"class":483},[152,64670,64671,64673,64675],{"class":281,"line":970},[152,64672,53122],{"class":483},[152,64674,53137],{"class":52637},[152,64676,52644],{"class":483},[262,64678,64680],{"id":64679},"_3263-trim方法","3.2.6.3 trim方法",[19,64682,64683],{},[401,64684],{"alt":275,"src":64685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,64687,64688],{},[401,64689],{"alt":275,"src":64690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,64692,64693],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,64695,64696],{},"str.trim()",[14,64698,64700],{"id":64699},"_327-环境对象","3.2.7 环境对象",[19,64702,64703],{},[401,64704],{"alt":275,"src":64705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,64707,64708],{},[401,64709],{"alt":275,"src":64710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,64712,64713],{},[401,64714],{"alt":275,"src":64715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,64717,64718],{},"实际函数调用是window.fn()",[19,64720,64721],{},"普通函数里面this指向的是window",[698,64723,64724,64727,64730],{},[419,64725,64726],{},"在普通函数下，this指向的是window",[419,64728,64729],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[419,64731,64732],{},"箭头函数没有this",[19,64734,64735],{},"粗略记法就是：谁调用，this就指向谁",[19,64737,64738],{},[401,64739],{"alt":275,"src":64740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,64742,64743],{},[401,64744],{"alt":275,"src":64745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,64747,64748],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,64750,64751],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[270,64753,64755],{"className":54404,"code":64754,"language":54406,"meta":275,"style":275},"\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",[277,64756,64757,64765,64777,64785,64790,64795,64800,64805,64809,64817],{"__ignoreMap":275},[152,64758,64759,64761,64763],{"class":281,"line":282},[152,64760,844],{"class":483},[152,64762,53137],{"class":52637},[152,64764,52644],{"class":483},[152,64766,64767,64769,64771,64773,64775],{"class":281,"line":303},[152,64768,53481],{"class":483},[152,64770,55224],{"class":52637},[152,64772,55230],{"class":483},[152,64774,55224],{"class":52637},[152,64776,52644],{"class":483},[152,64778,64779,64781,64783],{"class":281,"line":310},[152,64780,53481],{"class":483},[152,64782,53150],{"class":52637},[152,64784,52644],{"class":483},[152,64786,64787],{"class":281,"line":324},[152,64788,64789],{"class":483},"    const button = document.querySelector('button')\n",[152,64791,64792],{"class":281,"line":329},[152,64793,64794],{"class":483},"    button.addEventListener('click', function () {\n",[152,64796,64797],{"class":281,"line":343},[152,64798,64799],{"class":483},"      \u002F\u002F console.log(this);\n",[152,64801,64802],{"class":281,"line":348},[152,64803,64804],{"class":483},"      this.style.color = 'pink'\n",[152,64806,64807],{"class":281,"line":362},[152,64808,34798],{"class":483},[152,64810,64811,64813,64815],{"class":281,"line":367},[152,64812,53754],{"class":483},[152,64814,53150],{"class":52637},[152,64816,52644],{"class":483},[152,64818,64819,64821,64823],{"class":281,"line":381},[152,64820,53122],{"class":483},[152,64822,53137],{"class":52637},[152,64824,52644],{"class":483},[14,64826,64828],{"id":64827},"_328-回调函数","3.2.8 回调函数",[19,64830,64831],{},[401,64832],{"alt":275,"src":64833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,64835,64836],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,64838,12948],{},[698,64840,64841,64844,64847],{},[419,64842,64843],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[419,64845,64846],{},"回调函数本质还是函数，只不过把它当成参数使用",[419,64848,64849],{},"使用匿名函数做为回调函数比较常见",[14,64851,64853],{"id":64852},"_329-tab栏切换","3.2.9 tab栏切换",[19,64855,64856],{},[401,64857],{"alt":275,"src":64858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[270,64860,64862],{"className":51970,"code":64861,"language":51972,"meta":275,"style":275},"\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",[277,64863,64864,64874,64888,64892,64900,64914,64934,64954,64967,64975,64981,64991,65001,65005,65009,65016,65029,65042,65054,65070,65074,65078,65085,65097,65109,65121,65131,65141,65145,65149,65158,65170,65181,65193,65197,65201,65209,65219,65229,65239,65243,65247,65257,65271,65283,65287,65291,65303,65314,65331,65341,65345,65349,65364,65375,65385,65389,65393,65400,65415,65419,65423,65431,65441,65445,65449,65458,65468,65472,65480,65488,65492,65500,65515,65530,65543,65551,65585,65612,65639,65666,65693,65701,65709,65724,65761,65796,65831,65866,65901,65909,65917,65925,65930,65935,65955,65960,65989,65994,65999,66017,66022,66027,66032,66054,66059,66075,66079,66084,66089,66110,66115,66144,66148,66153,66157,66165,66173,66177],{"__ignoreMap":275},[152,64865,64866,64868,64870,64872],{"class":281,"line":282},[152,64867,52634],{"class":483},[152,64869,52638],{"class":52637},[152,64871,52641],{"class":285},[152,64873,52644],{"class":483},[152,64875,64876,64878,64880,64882,64884,64886],{"class":281,"line":303},[152,64877,844],{"class":483},[152,64879,51972],{"class":52637},[152,64881,52653],{"class":285},[152,64883,1864],{"class":483},[152,64885,52658],{"class":289},[152,64887,52644],{"class":483},[152,64889,64890],{"class":281,"line":310},[152,64891,307],{"emptyLinePlaceholder":306},[152,64893,64894,64896,64898],{"class":281,"line":324},[152,64895,844],{"class":483},[152,64897,52671],{"class":52637},[152,64899,52644],{"class":483},[152,64901,64902,64904,64906,64908,64910,64912],{"class":281,"line":329},[152,64903,53481],{"class":483},[152,64905,52681],{"class":52637},[152,64907,52684],{"class":285},[152,64909,1864],{"class":483},[152,64911,52689],{"class":289},[152,64913,60464],{"class":483},[152,64915,64916,64918,64920,64922,64924,64926,64928,64930,64932],{"class":281,"line":343},[152,64917,53481],{"class":483},[152,64919,52681],{"class":52637},[152,64921,52700],{"class":285},[152,64923,1864],{"class":483},[152,64925,52705],{"class":289},[152,64927,52708],{"class":285},[152,64929,1864],{"class":483},[152,64931,52713],{"class":289},[152,64933,60464],{"class":483},[152,64935,64936,64938,64940,64942,64944,64946,64948,64950,64952],{"class":281,"line":348},[152,64937,53481],{"class":483},[152,64939,52681],{"class":52637},[152,64941,16535],{"class":285},[152,64943,1864],{"class":483},[152,64945,52728],{"class":289},[152,64947,52708],{"class":285},[152,64949,1864],{"class":483},[152,64951,52735],{"class":289},[152,64953,60464],{"class":483},[152,64955,64956,64958,64960,64963,64965],{"class":281,"line":362},[152,64957,53481],{"class":483},[152,64959,52744],{"class":52637},[152,64961,64962],{"class":483},">tab栏切换\u003C\u002F",[152,64964,52744],{"class":52637},[152,64966,52644],{"class":483},[152,64968,64969,64971,64973],{"class":281,"line":367},[152,64970,53481],{"class":483},[152,64972,1736],{"class":52637},[152,64974,52644],{"class":483},[152,64976,64977,64979],{"class":281,"line":381},[152,64978,8045],{"class":52637},[152,64980,17187],{"class":483},[152,64982,64983,64985,64987,64989],{"class":281,"line":386},[152,64984,56043],{"class":293},[152,64986,52774],{"class":483},[152,64988,2000],{"class":293},[152,64990,2965],{"class":483},[152,64992,64993,64995,64997,64999],{"class":281,"line":932},[152,64994,56032],{"class":293},[152,64996,52774],{"class":483},[152,64998,2000],{"class":293},[152,65000,2965],{"class":483},[152,65002,65003],{"class":281,"line":942},[152,65004,3838],{"class":483},[152,65006,65007],{"class":281,"line":949},[152,65008,307],{"emptyLinePlaceholder":306},[152,65010,65011,65014],{"class":281,"line":954},[152,65012,65013],{"class":285},"    .tab",[152,65015,17187],{"class":483},[152,65017,65018,65020,65022,65025,65027],{"class":281,"line":959},[152,65019,56108],{"class":293},[152,65021,52774],{"class":483},[152,65023,65024],{"class":293},"590",[152,65026,52829],{"class":476},[152,65028,2965],{"class":483},[152,65030,65031,65033,65035,65038,65040],{"class":281,"line":970},[152,65032,56122],{"class":293},[152,65034,52774],{"class":483},[152,65036,65037],{"class":293},"340",[152,65039,52829],{"class":476},[152,65041,2965],{"class":483},[152,65043,65044,65046,65048,65050,65052],{"class":281,"line":979},[152,65045,56043],{"class":293},[152,65047,52774],{"class":483},[152,65049,2508],{"class":293},[152,65051,52829],{"class":476},[152,65053,2965],{"class":483},[152,65055,65056,65058,65060,65062,65064,65066,65068],{"class":281,"line":989},[152,65057,63314],{"class":293},[152,65059,52774],{"class":483},[152,65061,2026],{"class":293},[152,65063,52829],{"class":476},[152,65065,52858],{"class":293},[152,65067,63581],{"class":293},[152,65069,2965],{"class":483},[152,65071,65072],{"class":281,"line":996},[152,65073,3838],{"class":483},[152,65075,65076],{"class":281,"line":1001},[152,65077,307],{"emptyLinePlaceholder":306},[152,65079,65080,65083],{"class":281,"line":1006},[152,65081,65082],{"class":285},"    .tab-nav",[152,65084,17187],{"class":483},[152,65086,65087,65089,65091,65093,65095],{"class":281,"line":1018},[152,65088,56108],{"class":293},[152,65090,52774],{"class":483},[152,65092,2119],{"class":293},[152,65094,2136],{"class":476},[152,65096,2965],{"class":483},[152,65098,65099,65101,65103,65105,65107],{"class":281,"line":1027},[152,65100,56122],{"class":293},[152,65102,52774],{"class":483},[152,65104,2714],{"class":293},[152,65106,52829],{"class":476},[152,65108,2965],{"class":483},[152,65110,65111,65113,65115,65117,65119],{"class":281,"line":1037},[152,65112,58696],{"class":293},[152,65114,52774],{"class":483},[152,65116,2714],{"class":293},[152,65118,52829],{"class":476},[152,65120,2965],{"class":483},[152,65122,65123,65125,65127,65129],{"class":281,"line":1044},[152,65124,56346],{"class":293},[152,65126,52774],{"class":483},[152,65128,52814],{"class":293},[152,65130,2965],{"class":483},[152,65132,65133,65135,65137,65139],{"class":281,"line":1049},[152,65134,56357],{"class":293},[152,65136,52774],{"class":483},[152,65138,53005],{"class":293},[152,65140,2965],{"class":483},[152,65142,65143],{"class":281,"line":1054},[152,65144,3838],{"class":483},[152,65146,65147],{"class":281,"line":1065},[152,65148,307],{"emptyLinePlaceholder":306},[152,65150,65151,65153,65156],{"class":281,"line":1074},[152,65152,65082],{"class":285},[152,65154,65155],{"class":52637}," h3",[152,65157,17187],{"class":483},[152,65159,65160,65162,65164,65166,65168],{"class":281,"line":1084},[152,65161,56259],{"class":293},[152,65163,52774],{"class":483},[152,65165,2608],{"class":293},[152,65167,52829],{"class":476},[152,65169,2965],{"class":483},[152,65171,65172,65174,65176,65179],{"class":281,"line":1091},[152,65173,63671],{"class":293},[152,65175,52774],{"class":483},[152,65177,65178],{"class":293},"normal",[152,65180,2965],{"class":483},[152,65182,65183,65185,65187,65189,65191],{"class":281,"line":1096},[152,65184,63337],{"class":293},[152,65186,52774],{"class":483},[152,65188,2508],{"class":293},[152,65190,52829],{"class":476},[152,65192,2965],{"class":483},[152,65194,65195],{"class":281,"line":1101},[152,65196,3838],{"class":483},[152,65198,65199],{"class":281,"line":1112},[152,65200,307],{"emptyLinePlaceholder":306},[152,65202,65203,65205,65207],{"class":281,"line":1121},[152,65204,65082],{"class":285},[152,65206,62629],{"class":52637},[152,65208,17187],{"class":483},[152,65210,65211,65213,65215,65217],{"class":281,"line":1131},[152,65212,56069],{"class":293},[152,65214,52774],{"class":483},[152,65216,56074],{"class":293},[152,65218,2965],{"class":483},[152,65220,65221,65223,65225,65227],{"class":281,"line":1138},[152,65222,56346],{"class":293},[152,65224,52774],{"class":483},[152,65226,52814],{"class":293},[152,65228,2965],{"class":483},[152,65230,65231,65233,65235,65237],{"class":281,"line":1143},[152,65232,56357],{"class":293},[152,65234,52774],{"class":483},[152,65236,52917],{"class":293},[152,65238,2965],{"class":483},[152,65240,65241],{"class":281,"line":1148},[152,65242,3838],{"class":483},[152,65244,65245],{"class":281,"line":1159},[152,65246,307],{"emptyLinePlaceholder":306},[152,65248,65249,65251,65253,65255],{"class":281,"line":1168},[152,65250,65082],{"class":285},[152,65252,62629],{"class":52637},[152,65254,56412],{"class":52637},[152,65256,17187],{"class":483},[152,65258,65259,65261,65263,65265,65267,65269],{"class":281,"line":1178},[152,65260,56043],{"class":293},[152,65262,52774],{"class":483},[152,65264,2000],{"class":293},[152,65266,10582],{"class":293},[152,65268,52829],{"class":476},[152,65270,2965],{"class":483},[152,65272,65273,65275,65277,65279,65281],{"class":281,"line":1185},[152,65274,56259],{"class":293},[152,65276,52774],{"class":483},[152,65278,2357],{"class":293},[152,65280,52829],{"class":476},[152,65282,2965],{"class":483},[152,65284,65285],{"class":281,"line":1190},[152,65286,3838],{"class":483},[152,65288,65289],{"class":281,"line":1195},[152,65290,307],{"emptyLinePlaceholder":306},[152,65292,65293,65295,65297,65299,65301],{"class":281,"line":1206},[152,65294,65082],{"class":285},[152,65296,62629],{"class":52637},[152,65298,56412],{"class":52637},[152,65300,3070],{"class":52637},[152,65302,17187],{"class":483},[152,65304,65305,65308,65310,65312],{"class":281,"line":1215},[152,65306,65307],{"class":293},"      text-decoration",[152,65309,52774],{"class":483},[152,65311,56074],{"class":293},[152,65313,2965],{"class":483},[152,65315,65316,65318,65320,65322,65324,65326,65329],{"class":281,"line":1225},[152,65317,63569],{"class":293},[152,65319,52774],{"class":483},[152,65321,1894],{"class":293},[152,65323,52829],{"class":476},[152,65325,52858],{"class":293},[152,65327,65328],{"class":293}," transparent",[152,65330,2965],{"class":483},[152,65332,65333,65335,65337,65339],{"class":281,"line":1232},[152,65334,58753],{"class":293},[152,65336,52774],{"class":483},[152,65338,63706],{"class":293},[152,65340,2965],{"class":483},[152,65342,65343],{"class":281,"line":1237},[152,65344,3838],{"class":483},[152,65346,65347],{"class":281,"line":1242},[152,65348,307],{"emptyLinePlaceholder":306},[152,65350,65351,65353,65355,65357,65359,65362],{"class":281,"line":1253},[152,65352,65082],{"class":285},[152,65354,62629],{"class":52637},[152,65356,56412],{"class":52637},[152,65358,3070],{"class":52637},[152,65360,65361],{"class":285},".active",[152,65363,17187],{"class":483},[152,65365,65366,65368,65370,65373],{"class":281,"line":1262},[152,65367,63128],{"class":293},[152,65369,52774],{"class":483},[152,65371,65372],{"class":293},"#e1251b",[152,65374,2965],{"class":483},[152,65376,65377,65379,65381,65383],{"class":281,"line":1272},[152,65378,58753],{"class":293},[152,65380,52774],{"class":483},[152,65382,65372],{"class":293},[152,65384,2965],{"class":483},[152,65386,65387],{"class":281,"line":1279},[152,65388,3838],{"class":483},[152,65390,65391],{"class":281,"line":1284},[152,65392,307],{"emptyLinePlaceholder":306},[152,65394,65395,65398],{"class":281,"line":1289},[152,65396,65397],{"class":285},"    .tab-content",[152,65399,17187],{"class":483},[152,65401,65402,65404,65406,65408,65411,65413],{"class":281,"line":1301},[152,65403,56032],{"class":293},[152,65405,52774],{"class":483},[152,65407,2000],{"class":293},[152,65409,65410],{"class":293}," 16",[152,65412,52829],{"class":476},[152,65414,2965],{"class":483},[152,65416,65417],{"class":281,"line":1310},[152,65418,3838],{"class":483},[152,65420,65421],{"class":281,"line":1320},[152,65422,307],{"emptyLinePlaceholder":306},[152,65424,65425,65427,65429],{"class":281,"line":1327},[152,65426,65397],{"class":285},[152,65428,63511],{"class":285},[152,65430,17187],{"class":483},[152,65432,65433,65435,65437,65439],{"class":281,"line":11528},[152,65434,56346],{"class":293},[152,65436,52774],{"class":483},[152,65438,56074],{"class":293},[152,65440,2965],{"class":483},[152,65442,65443],{"class":281,"line":11536},[152,65444,3838],{"class":483},[152,65446,65447],{"class":281,"line":11541},[152,65448,307],{"emptyLinePlaceholder":306},[152,65450,65451,65453,65456],{"class":281,"line":18219},[152,65452,65397],{"class":285},[152,65454,65455],{"class":285}," .item.active",[152,65457,17187],{"class":483},[152,65459,65460,65462,65464,65466],{"class":281,"line":18225},[152,65461,56346],{"class":293},[152,65463,52774],{"class":483},[152,65465,62206],{"class":293},[152,65467,2965],{"class":483},[152,65469,65470],{"class":281,"line":18248},[152,65471,3838],{"class":483},[152,65473,65474,65476,65478],{"class":281,"line":18254},[152,65475,53754],{"class":483},[152,65477,1736],{"class":52637},[152,65479,52644],{"class":483},[152,65481,65482,65484,65486],{"class":281,"line":18277},[152,65483,53122],{"class":483},[152,65485,52671],{"class":52637},[152,65487,52644],{"class":483},[152,65489,65490],{"class":281,"line":18291},[152,65491,307],{"emptyLinePlaceholder":306},[152,65493,65494,65496,65498],{"class":281,"line":18311},[152,65495,844],{"class":483},[152,65497,53137],{"class":52637},[152,65499,52644],{"class":483},[152,65501,65502,65504,65506,65508,65510,65513],{"class":281,"line":18317},[152,65503,53481],{"class":483},[152,65505,52948],{"class":52637},[152,65507,54823],{"class":285},[152,65509,1864],{"class":483},[152,65511,65512],{"class":289},"\"tab\"",[152,65514,52644],{"class":483},[152,65516,65517,65519,65521,65523,65525,65528],{"class":281,"line":18328},[152,65518,52678],{"class":483},[152,65520,52948],{"class":52637},[152,65522,54823],{"class":285},[152,65524,1864],{"class":483},[152,65526,65527],{"class":289},"\"tab-nav\"",[152,65529,52644],{"class":483},[152,65531,65532,65534,65536,65539,65541],{"class":281,"line":18351},[152,65533,56571],{"class":483},[152,65535,14],{"class":52637},[152,65537,65538],{"class":483},">每日特价\u003C\u002F",[152,65540,14],{"class":52637},[152,65542,52644],{"class":483},[152,65544,65545,65547,65549],{"class":281,"line":18373},[152,65546,56571],{"class":483},[152,65548,698],{"class":52637},[152,65550,52644],{"class":483},[152,65552,65553,65555,65557,65559,65561,65563,65565,65567,65569,65571,65574,65577,65579,65581,65583],{"class":281,"line":18378},[152,65554,56639],{"class":483},[152,65556,419],{"class":52637},[152,65558,62389],{"class":483},[152,65560,69],{"class":52637},[152,65562,54823],{"class":285},[152,65564,1864],{"class":483},[152,65566,61043],{"class":289},[152,65568,62394],{"class":285},[152,65570,1864],{"class":483},[152,65572,65573],{"class":289},"\"javascript:;\"",[152,65575,65576],{"class":483},">精选\u003C\u002F",[152,65578,69],{"class":52637},[152,65580,56651],{"class":483},[152,65582,419],{"class":52637},[152,65584,52644],{"class":483},[152,65586,65587,65589,65591,65593,65595,65597,65599,65601,65604,65606,65608,65610],{"class":281,"line":18384},[152,65588,56639],{"class":483},[152,65590,419],{"class":52637},[152,65592,62389],{"class":483},[152,65594,69],{"class":52637},[152,65596,62394],{"class":285},[152,65598,1864],{"class":483},[152,65600,65573],{"class":289},[152,65602,65603],{"class":483},">美食\u003C\u002F",[152,65605,69],{"class":52637},[152,65607,56651],{"class":483},[152,65609,419],{"class":52637},[152,65611,52644],{"class":483},[152,65613,65614,65616,65618,65620,65622,65624,65626,65628,65631,65633,65635,65637],{"class":281,"line":18398},[152,65615,56639],{"class":483},[152,65617,419],{"class":52637},[152,65619,62389],{"class":483},[152,65621,69],{"class":52637},[152,65623,62394],{"class":285},[152,65625,1864],{"class":483},[152,65627,65573],{"class":289},[152,65629,65630],{"class":483},">百货\u003C\u002F",[152,65632,69],{"class":52637},[152,65634,56651],{"class":483},[152,65636,419],{"class":52637},[152,65638,52644],{"class":483},[152,65640,65641,65643,65645,65647,65649,65651,65653,65655,65658,65660,65662,65664],{"class":281,"line":18411},[152,65642,56639],{"class":483},[152,65644,419],{"class":52637},[152,65646,62389],{"class":483},[152,65648,69],{"class":52637},[152,65650,62394],{"class":285},[152,65652,1864],{"class":483},[152,65654,65573],{"class":289},[152,65656,65657],{"class":483},">个护\u003C\u002F",[152,65659,69],{"class":52637},[152,65661,56651],{"class":483},[152,65663,419],{"class":52637},[152,65665,52644],{"class":483},[152,65667,65668,65670,65672,65674,65676,65678,65680,65682,65685,65687,65689,65691],{"class":281,"line":18416},[152,65669,56639],{"class":483},[152,65671,419],{"class":52637},[152,65673,62389],{"class":483},[152,65675,69],{"class":52637},[152,65677,62394],{"class":285},[152,65679,1864],{"class":483},[152,65681,65573],{"class":289},[152,65683,65684],{"class":483},">预告\u003C\u002F",[152,65686,69],{"class":52637},[152,65688,56651],{"class":483},[152,65690,419],{"class":52637},[152,65692,52644],{"class":483},[152,65694,65695,65697,65699],{"class":281,"line":18430},[152,65696,56744],{"class":483},[152,65698,698],{"class":52637},[152,65700,52644],{"class":483},[152,65702,65703,65705,65707],{"class":281,"line":18435},[152,65704,53113],{"class":483},[152,65706,52948],{"class":52637},[152,65708,52644],{"class":483},[152,65710,65711,65713,65715,65717,65719,65722],{"class":281,"line":18441},[152,65712,52678],{"class":483},[152,65714,52948],{"class":52637},[152,65716,54823],{"class":285},[152,65718,1864],{"class":483},[152,65720,65721],{"class":289},"\"tab-content\"",[152,65723,52644],{"class":483},[152,65725,65726,65728,65730,65732,65734,65737,65739,65741,65743,65745,65748,65750,65752,65754,65757,65759],{"class":281,"line":18446},[152,65727,56571],{"class":483},[152,65729,52948],{"class":52637},[152,65731,54823],{"class":285},[152,65733,1864],{"class":483},[152,65735,65736],{"class":289},"\"item active\"",[152,65738,62389],{"class":483},[152,65740,401],{"class":52637},[152,65742,56576],{"class":285},[152,65744,1864],{"class":483},[152,65746,65747],{"class":289},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[152,65749,56584],{"class":285},[152,65751,1864],{"class":483},[152,65753,9294],{"class":289},[152,65755,65756],{"class":483}," \u002F>\u003C\u002F",[152,65758,52948],{"class":52637},[152,65760,52644],{"class":483},[152,65762,65763,65765,65767,65769,65771,65773,65775,65777,65779,65781,65784,65786,65788,65790,65792,65794],{"class":281,"line":18460},[152,65764,56571],{"class":483},[152,65766,52948],{"class":52637},[152,65768,54823],{"class":285},[152,65770,1864],{"class":483},[152,65772,63960],{"class":289},[152,65774,62389],{"class":483},[152,65776,401],{"class":52637},[152,65778,56576],{"class":285},[152,65780,1864],{"class":483},[152,65782,65783],{"class":289},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[152,65785,56584],{"class":285},[152,65787,1864],{"class":483},[152,65789,9294],{"class":289},[152,65791,65756],{"class":483},[152,65793,52948],{"class":52637},[152,65795,52644],{"class":483},[152,65797,65798,65800,65802,65804,65806,65808,65810,65812,65814,65816,65819,65821,65823,65825,65827,65829],{"class":281,"line":18465},[152,65799,56571],{"class":483},[152,65801,52948],{"class":52637},[152,65803,54823],{"class":285},[152,65805,1864],{"class":483},[152,65807,63960],{"class":289},[152,65809,62389],{"class":483},[152,65811,401],{"class":52637},[152,65813,56576],{"class":285},[152,65815,1864],{"class":483},[152,65817,65818],{"class":289},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[152,65820,56584],{"class":285},[152,65822,1864],{"class":483},[152,65824,9294],{"class":289},[152,65826,65756],{"class":483},[152,65828,52948],{"class":52637},[152,65830,52644],{"class":483},[152,65832,65833,65835,65837,65839,65841,65843,65845,65847,65849,65851,65854,65856,65858,65860,65862,65864],{"class":281,"line":18470},[152,65834,56571],{"class":483},[152,65836,52948],{"class":52637},[152,65838,54823],{"class":285},[152,65840,1864],{"class":483},[152,65842,63960],{"class":289},[152,65844,62389],{"class":483},[152,65846,401],{"class":52637},[152,65848,56576],{"class":285},[152,65850,1864],{"class":483},[152,65852,65853],{"class":289},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[152,65855,56584],{"class":285},[152,65857,1864],{"class":483},[152,65859,9294],{"class":289},[152,65861,65756],{"class":483},[152,65863,52948],{"class":52637},[152,65865,52644],{"class":483},[152,65867,65868,65870,65872,65874,65876,65878,65880,65882,65884,65886,65889,65891,65893,65895,65897,65899],{"class":281,"line":18484},[152,65869,56571],{"class":483},[152,65871,52948],{"class":52637},[152,65873,54823],{"class":285},[152,65875,1864],{"class":483},[152,65877,63960],{"class":289},[152,65879,62389],{"class":483},[152,65881,401],{"class":52637},[152,65883,56576],{"class":285},[152,65885,1864],{"class":483},[152,65887,65888],{"class":289},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[152,65890,56584],{"class":285},[152,65892,1864],{"class":483},[152,65894,9294],{"class":289},[152,65896,65756],{"class":483},[152,65898,52948],{"class":52637},[152,65900,52644],{"class":483},[152,65902,65903,65905,65907],{"class":281,"line":18496},[152,65904,53113],{"class":483},[152,65906,52948],{"class":52637},[152,65908,52644],{"class":483},[152,65910,65911,65913,65915],{"class":281,"line":18501},[152,65912,53754],{"class":483},[152,65914,52948],{"class":52637},[152,65916,52644],{"class":483},[152,65918,65919,65921,65923],{"class":281,"line":18514},[152,65920,53481],{"class":483},[152,65922,53150],{"class":52637},[152,65924,52644],{"class":483},[152,65926,65927],{"class":281,"line":18519},[152,65928,65929],{"class":866},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[152,65931,65932],{"class":281,"line":18524},[152,65933,65934],{"class":866},"    \u002F\u002F 1.1 获取 a 元素 \n",[152,65936,65937,65939,65942,65944,65946,65948,65950,65953],{"class":281,"line":18529},[152,65938,12837],{"class":476},[152,65940,65941],{"class":293}," as",[152,65943,15180],{"class":476},[152,65945,55733],{"class":483},[152,65947,57018],{"class":285},[152,65949,1819],{"class":483},[152,65951,65952],{"class":289},"'.tab-nav a'",[152,65954,1825],{"class":483},[152,65956,65957],{"class":281,"line":18542},[152,65958,65959],{"class":866},"    \u002F\u002F console.log(as) \n",[152,65961,65962,65964,65966,65968,65970,65972,65974,65976,65978,65981,65983,65985,65987],{"class":281,"line":18547},[152,65963,4844],{"class":476},[152,65965,3322],{"class":483},[152,65967,53184],{"class":476},[152,65969,11070],{"class":483},[152,65971,1864],{"class":476},[152,65973,5735],{"class":293},[152,65975,11077],{"class":483},[152,65977,844],{"class":476},[152,65979,65980],{"class":483}," as.",[152,65982,53305],{"class":293},[152,65984,4857],{"class":483},[152,65986,3943],{"class":476},[152,65988,14058],{"class":483},[152,65990,65991],{"class":281,"line":33970},[152,65992,65993],{"class":866},"      \u002F\u002F console.log(as[i])\n",[152,65995,65996],{"class":281,"line":33976},[152,65997,65998],{"class":866},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[152,66000,66001,66004,66006,66008,66011,66013,66015],{"class":281,"line":33982},[152,66002,66003],{"class":483},"      as[i].",[152,66005,59150],{"class":285},[152,66007,1819],{"class":483},[152,66009,66010],{"class":289},"'mouseenter'",[152,66012,14051],{"class":483},[152,66014,55786],{"class":476},[152,66016,55789],{"class":483},[152,66018,66019],{"class":281,"line":33988},[152,66020,66021],{"class":866},"        \u002F\u002F console.log('鼠标经过')\n",[152,66023,66024],{"class":281,"line":33994},[152,66025,66026],{"class":866},"        \u002F\u002F 排他思想  \n",[152,66028,66029],{"class":281,"line":34005},[152,66030,66031],{"class":866},"        \u002F\u002F 干掉别人 移除类active\n",[152,66033,66034,66036,66038,66040,66043,66045,66047,66049,66052],{"class":281,"line":34011},[152,66035,53262],{"class":483},[152,66037,55736],{"class":285},[152,66039,1819],{"class":483},[152,66041,66042],{"class":289},"'.tab-nav .active'",[152,66044,58340],{"class":483},[152,66046,58343],{"class":285},[152,66048,1819],{"class":483},[152,66050,66051],{"class":289},"'active'",[152,66053,1825],{"class":483},[152,66055,66056],{"class":281,"line":34031},[152,66057,66058],{"class":866},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[152,66060,66061,66064,66067,66069,66071,66073],{"class":281,"line":34037},[152,66062,66063],{"class":293},"        this",[152,66065,66066],{"class":483},".classList.",[152,66068,6976],{"class":285},[152,66070,1819],{"class":483},[152,66072,66051],{"class":289},[152,66074,1825],{"class":483},[152,66076,66077],{"class":281,"line":34048},[152,66078,307],{"emptyLinePlaceholder":306},[152,66080,66081],{"class":281,"line":34054},[152,66082,66083],{"class":866},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[152,66085,66086],{"class":281,"line":34060},[152,66087,66088],{"class":866},"        \u002F\u002F 干掉别人\n",[152,66090,66091,66093,66095,66097,66100,66102,66104,66106,66108],{"class":281,"line":34066},[152,66092,53262],{"class":483},[152,66094,55736],{"class":285},[152,66096,1819],{"class":483},[152,66098,66099],{"class":289},"'.tab-content .active'",[152,66101,58340],{"class":483},[152,66103,58343],{"class":285},[152,66105,1819],{"class":483},[152,66107,66051],{"class":289},[152,66109,1825],{"class":483},[152,66111,66112],{"class":281,"line":34072},[152,66113,66114],{"class":866},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[152,66116,66117,66119,66121,66123,66126,66128,66130,66132,66134,66136,66138,66140,66142],{"class":281,"line":34078},[152,66118,53262],{"class":483},[152,66120,55736],{"class":285},[152,66122,1819],{"class":483},[152,66124,66125],{"class":289},"`.tab-content .item:nth-child(${",[152,66127,2249],{"class":483},[152,66129,46903],{"class":476},[152,66131,26729],{"class":293},[152,66133,58369],{"class":289},[152,66135,58340],{"class":483},[152,66137,6976],{"class":285},[152,66139,1819],{"class":483},[152,66141,66051],{"class":289},[152,66143,1825],{"class":483},[152,66145,66146],{"class":281,"line":34084},[152,66147,307],{"emptyLinePlaceholder":306},[152,66149,66150],{"class":281,"line":34090},[152,66151,66152],{"class":483},"      })\n",[152,66154,66155],{"class":281,"line":34110},[152,66156,3838],{"class":483},[152,66158,66159,66161,66163],{"class":281,"line":34116},[152,66160,53754],{"class":483},[152,66162,53150],{"class":52637},[152,66164,52644],{"class":483},[152,66166,66167,66169,66171],{"class":281,"line":34132},[152,66168,53122],{"class":483},[152,66170,53137],{"class":52637},[152,66172,52644],{"class":483},[152,66174,66175],{"class":281,"line":34138},[152,66176,307],{"emptyLinePlaceholder":306},[152,66178,66179,66181,66183],{"class":281,"line":34152},[152,66180,53122],{"class":483},[152,66182,51972],{"class":52637},[152,66184,52644],{"class":483},[19,66186,66187],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66189,66190],{},"在监听事件中，this指向的就是他的调用者",[19,66192,66193],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66195,55057],{},[19,66197,66198],{},"(function () {",[19,66200,66201],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66203,66204],{},"list.addEventListener('click', function (e) {",[19,66206,66207],{},"if (e.target.tagName === 'A') {",[19,66209,66210],{},"\u002F\u002F 排他思想",[19,66212,66213],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66215,66216],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66218,66219],{},"\u002F\u002F console.log(old);",[19,66221,66222],{},"\u002F\u002F 判断",[19,66224,66225],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66227,66228],{},"if (old) old.classList.remove('active')",[19,66230,66231],{},"e.target.classList.add('active')",[19,66233,2752],{},[19,66235,53801],{},[19,66237,66238],{},"})();",[14,66240,66242],{"id":66241},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[270,66244,66246],{"className":51970,"code":66245,"language":51972,"meta":275,"style":275},"\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",[277,66247,66248,66258,66262,66270,66274,66288,66302,66314,66322,66328,66338,66348,66352,66356,66363,66375,66386,66403,66416,66430,66440,66444,66448,66455,66466,66484,66494,66506,66510,66514,66521,66538,66549,66561,66565,66569,66576,66588,66592,66600,66608,66612,66620,66628,66636,66651,66695,66703,66716,66729,66742,66750,66758,66766,66794,66802,66814,66827,66840,66848,66856,66864,66890,66898,66911,66923,66936,66944,66952,66960,66986,66994,67007,67019,67032,67040,67048,67056,67061,67081,67086,67106,67111,67128,67133,67141,67146,67175,67188,67192,67196,67201,67205,67233,67238,67255,67260,67265,67270,67275,67301,67305,67309,67317,67325,67329],{"__ignoreMap":275},[152,66249,66250,66252,66254,66256],{"class":281,"line":282},[152,66251,52634],{"class":483},[152,66253,52638],{"class":52637},[152,66255,52641],{"class":285},[152,66257,52644],{"class":483},[152,66259,66260],{"class":281,"line":303},[152,66261,307],{"emptyLinePlaceholder":306},[152,66263,66264,66266,66268],{"class":281,"line":310},[152,66265,844],{"class":483},[152,66267,51972],{"class":52637},[152,66269,52644],{"class":483},[152,66271,66272],{"class":281,"line":324},[152,66273,307],{"emptyLinePlaceholder":306},[152,66275,66276,66278,66280,66282,66284,66286],{"class":281,"line":329},[152,66277,844],{"class":483},[152,66279,52671],{"class":52637},[152,66281,52653],{"class":285},[152,66283,1864],{"class":483},[152,66285,52658],{"class":289},[152,66287,52644],{"class":483},[152,66289,66290,66292,66294,66296,66298,66300],{"class":281,"line":343},[152,66291,53481],{"class":483},[152,66293,52681],{"class":52637},[152,66295,52684],{"class":285},[152,66297,1864],{"class":483},[152,66299,52689],{"class":289},[152,66301,52644],{"class":483},[152,66303,66304,66306,66308,66310,66312],{"class":281,"line":348},[152,66305,53481],{"class":483},[152,66307,52744],{"class":52637},[152,66309,56651],{"class":483},[152,66311,52744],{"class":52637},[152,66313,52644],{"class":483},[152,66315,66316,66318,66320],{"class":281,"line":362},[152,66317,53481],{"class":483},[152,66319,1736],{"class":52637},[152,66321,52644],{"class":483},[152,66323,66324,66326],{"class":281,"line":367},[152,66325,8045],{"class":52637},[152,66327,17187],{"class":483},[152,66329,66330,66332,66334,66336],{"class":281,"line":381},[152,66331,56043],{"class":293},[152,66333,52774],{"class":483},[152,66335,2000],{"class":293},[152,66337,2965],{"class":483},[152,66339,66340,66342,66344,66346],{"class":281,"line":386},[152,66341,56032],{"class":293},[152,66343,52774],{"class":483},[152,66345,2000],{"class":293},[152,66347,2965],{"class":483},[152,66349,66350],{"class":281,"line":932},[152,66351,3838],{"class":483},[152,66353,66354],{"class":281,"line":942},[152,66355,307],{"emptyLinePlaceholder":306},[152,66357,66358,66361],{"class":281,"line":949},[152,66359,66360],{"class":52637},"    table",[152,66362,17187],{"class":483},[152,66364,66365,66368,66370,66373],{"class":281,"line":954},[152,66366,66367],{"class":293},"      border-collapse",[152,66369,52774],{"class":483},[152,66371,66372],{"class":293},"collapse",[152,66374,2965],{"class":483},[152,66376,66377,66380,66382,66384],{"class":281,"line":959},[152,66378,66379],{"class":293},"      border-spacing",[152,66381,52774],{"class":483},[152,66383,2000],{"class":293},[152,66385,2965],{"class":483},[152,66387,66388,66390,66392,66394,66396,66398,66401],{"class":281,"line":970},[152,66389,63314],{"class":293},[152,66391,52774],{"class":483},[152,66393,2026],{"class":293},[152,66395,52829],{"class":476},[152,66397,52858],{"class":293},[152,66399,66400],{"class":293}," #c0c0c0",[152,66402,2965],{"class":483},[152,66404,66405,66407,66409,66412,66414],{"class":281,"line":979},[152,66406,56108],{"class":293},[152,66408,52774],{"class":483},[152,66410,66411],{"class":293},"500",[152,66413,52829],{"class":476},[152,66415,2965],{"class":483},[152,66417,66418,66420,66422,66424,66426,66428],{"class":281,"line":989},[152,66419,56043],{"class":293},[152,66421,52774],{"class":483},[152,66423,2119],{"class":293},[152,66425,52829],{"class":476},[152,66427,52893],{"class":293},[152,66429,2965],{"class":483},[152,66431,66432,66434,66436,66438],{"class":281,"line":996},[152,66433,58623],{"class":293},[152,66435,52774],{"class":483},[152,66437,52929],{"class":293},[152,66439,2965],{"class":483},[152,66441,66442],{"class":281,"line":1001},[152,66443,3838],{"class":483},[152,66445,66446],{"class":281,"line":1006},[152,66447,307],{"emptyLinePlaceholder":306},[152,66449,66450,66453],{"class":281,"line":1018},[152,66451,66452],{"class":52637},"    th",[152,66454,17187],{"class":483},[152,66456,66457,66459,66461,66464],{"class":281,"line":1027},[152,66458,56221],{"class":293},[152,66460,52774],{"class":483},[152,66462,66463],{"class":293},"#09c",[152,66465,2965],{"class":483},[152,66467,66468,66471,66473,66475,66477,66479,66482],{"class":281,"line":1037},[152,66469,66470],{"class":293},"      font",[152,66472,52774],{"class":483},[152,66474,63676],{"class":293},[152,66476,65410],{"class":293},[152,66478,52829],{"class":476},[152,66480,66481],{"class":289}," \"微软雅黑\"",[152,66483,2965],{"class":483},[152,66485,66486,66488,66490,66492],{"class":281,"line":1044},[152,66487,58753],{"class":293},[152,66489,52774],{"class":483},[152,66491,62179],{"class":293},[152,66493,2965],{"class":483},[152,66495,66496,66498,66500,66502,66504],{"class":281,"line":1049},[152,66497,56122],{"class":293},[152,66499,52774],{"class":483},[152,66501,2608],{"class":293},[152,66503,52829],{"class":476},[152,66505,2965],{"class":483},[152,66507,66508],{"class":281,"line":1054},[152,66509,3838],{"class":483},[152,66511,66512],{"class":281,"line":1065},[152,66513,307],{"emptyLinePlaceholder":306},[152,66515,66516,66519],{"class":281,"line":1074},[152,66517,66518],{"class":52637},"    td",[152,66520,17187],{"class":483},[152,66522,66523,66525,66527,66529,66531,66533,66536],{"class":281,"line":1084},[152,66524,63314],{"class":293},[152,66526,52774],{"class":483},[152,66528,2026],{"class":293},[152,66530,52829],{"class":476},[152,66532,52858],{"class":293},[152,66534,66535],{"class":293}," #d0d0d0",[152,66537,2965],{"class":483},[152,66539,66540,66542,66544,66547],{"class":281,"line":1091},[152,66541,58753],{"class":293},[152,66543,52774],{"class":483},[152,66545,66546],{"class":293},"#404060",[152,66548,2965],{"class":483},[152,66550,66551,66553,66555,66557,66559],{"class":281,"line":1096},[152,66552,56032],{"class":293},[152,66554,52774],{"class":483},[152,66556,2254],{"class":293},[152,66558,52829],{"class":476},[152,66560,2965],{"class":483},[152,66562,66563],{"class":281,"line":1101},[152,66564,3838],{"class":483},[152,66566,66567],{"class":281,"line":1112},[152,66568,307],{"emptyLinePlaceholder":306},[152,66570,66571,66574],{"class":281,"line":1121},[152,66572,66573],{"class":285},"    .allCheck",[152,66575,17187],{"class":483},[152,66577,66578,66580,66582,66584,66586],{"class":281,"line":1131},[152,66579,56108],{"class":293},[152,66581,52774],{"class":483},[152,66583,2420],{"class":293},[152,66585,52829],{"class":476},[152,66587,2965],{"class":483},[152,66589,66590],{"class":281,"line":1138},[152,66591,3838],{"class":483},[152,66593,66594,66596,66598],{"class":281,"line":1143},[152,66595,53754],{"class":483},[152,66597,1736],{"class":52637},[152,66599,52644],{"class":483},[152,66601,66602,66604,66606],{"class":281,"line":1148},[152,66603,53122],{"class":483},[152,66605,52671],{"class":52637},[152,66607,52644],{"class":483},[152,66609,66610],{"class":281,"line":1159},[152,66611,307],{"emptyLinePlaceholder":306},[152,66613,66614,66616,66618],{"class":281,"line":1168},[152,66615,844],{"class":483},[152,66617,53137],{"class":52637},[152,66619,52644],{"class":483},[152,66621,66622,66624,66626],{"class":281,"line":1178},[152,66623,53481],{"class":483},[152,66625,23],{"class":52637},[152,66627,52644],{"class":483},[152,66629,66630,66632,66634],{"class":281,"line":1185},[152,66631,52678],{"class":483},[152,66633,29],{"class":52637},[152,66635,52644],{"class":483},[152,66637,66638,66640,66642,66644,66646,66649],{"class":281,"line":1190},[152,66639,56571],{"class":483},[152,66641,32],{"class":52637},[152,66643,54823],{"class":285},[152,66645,1864],{"class":483},[152,66647,66648],{"class":289},"\"allCheck\"",[152,66650,52644],{"class":483},[152,66652,66653,66655,66657,66659,66661,66663,66665,66667,66669,66671,66673,66676,66679,66681,66683,66685,66688,66691,66693],{"class":281,"line":1195},[152,66654,56639],{"class":483},[152,66656,55158],{"class":52637},[152,66658,55161],{"class":285},[152,66660,1864],{"class":483},[152,66662,55166],{"class":289},[152,66664,16535],{"class":285},[152,66666,1864],{"class":483},[152,66668,9294],{"class":289},[152,66670,16574],{"class":285},[152,66672,1864],{"class":483},[152,66674,66675],{"class":289},"\"checkAll\"",[152,66677,66678],{"class":483},"> \u003C",[152,66680,152],{"class":52637},[152,66682,54823],{"class":285},[152,66684,1864],{"class":483},[152,66686,66687],{"class":289},"\"all\"",[152,66689,66690],{"class":483},">全选\u003C\u002F",[152,66692,152],{"class":52637},[152,66694,52644],{"class":483},[152,66696,66697,66699,66701],{"class":281,"line":1206},[152,66698,56744],{"class":483},[152,66700,32],{"class":52637},[152,66702,52644],{"class":483},[152,66704,66705,66707,66709,66712,66714],{"class":281,"line":1215},[152,66706,56571],{"class":483},[152,66708,32],{"class":52637},[152,66710,66711],{"class":483},">商品\u003C\u002F",[152,66713,32],{"class":52637},[152,66715,52644],{"class":483},[152,66717,66718,66720,66722,66725,66727],{"class":281,"line":1225},[152,66719,56571],{"class":483},[152,66721,32],{"class":52637},[152,66723,66724],{"class":483},">商家\u003C\u002F",[152,66726,32],{"class":52637},[152,66728,52644],{"class":483},[152,66730,66731,66733,66735,66738,66740],{"class":281,"line":1232},[152,66732,56571],{"class":483},[152,66734,32],{"class":52637},[152,66736,66737],{"class":483},">价格\u003C\u002F",[152,66739,32],{"class":52637},[152,66741,52644],{"class":483},[152,66743,66744,66746,66748],{"class":281,"line":1237},[152,66745,53113],{"class":483},[152,66747,29],{"class":52637},[152,66749,52644],{"class":483},[152,66751,66752,66754,66756],{"class":281,"line":1242},[152,66753,52678],{"class":483},[152,66755,29],{"class":52637},[152,66757,52644],{"class":483},[152,66759,66760,66762,66764],{"class":281,"line":1253},[152,66761,56571],{"class":483},[152,66763,48],{"class":52637},[152,66765,52644],{"class":483},[152,66767,66768,66770,66772,66774,66776,66778,66780,66782,66785,66787,66789,66792],{"class":281,"line":1262},[152,66769,56639],{"class":483},[152,66771,55158],{"class":52637},[152,66773,55161],{"class":285},[152,66775,1864],{"class":483},[152,66777,55166],{"class":289},[152,66779,16535],{"class":285},[152,66781,1864],{"class":483},[152,66783,66784],{"class":289},"\"check\"",[152,66786,54823],{"class":285},[152,66788,1864],{"class":483},[152,66790,66791],{"class":289},"\"ck\"",[152,66793,52644],{"class":483},[152,66795,66796,66798,66800],{"class":281,"line":1272},[152,66797,56744],{"class":483},[152,66799,48],{"class":52637},[152,66801,52644],{"class":483},[152,66803,66804,66806,66808,66810,66812],{"class":281,"line":1279},[152,66805,56571],{"class":483},[152,66807,48],{"class":52637},[152,66809,62510],{"class":483},[152,66811,48],{"class":52637},[152,66813,52644],{"class":483},[152,66815,66816,66818,66820,66823,66825],{"class":281,"line":1284},[152,66817,56571],{"class":483},[152,66819,48],{"class":52637},[152,66821,66822],{"class":483},">小米\u003C\u002F",[152,66824,48],{"class":52637},[152,66826,52644],{"class":483},[152,66828,66829,66831,66833,66836,66838],{"class":281,"line":1289},[152,66830,56571],{"class":483},[152,66832,48],{"class":52637},[152,66834,66835],{"class":483},">￥1999\u003C\u002F",[152,66837,48],{"class":52637},[152,66839,52644],{"class":483},[152,66841,66842,66844,66846],{"class":281,"line":1301},[152,66843,53113],{"class":483},[152,66845,29],{"class":52637},[152,66847,52644],{"class":483},[152,66849,66850,66852,66854],{"class":281,"line":1310},[152,66851,52678],{"class":483},[152,66853,29],{"class":52637},[152,66855,52644],{"class":483},[152,66857,66858,66860,66862],{"class":281,"line":1320},[152,66859,56571],{"class":483},[152,66861,48],{"class":52637},[152,66863,52644],{"class":483},[152,66865,66866,66868,66870,66872,66874,66876,66878,66880,66882,66884,66886,66888],{"class":281,"line":1327},[152,66867,56639],{"class":483},[152,66869,55158],{"class":52637},[152,66871,55161],{"class":285},[152,66873,1864],{"class":483},[152,66875,55166],{"class":289},[152,66877,16535],{"class":285},[152,66879,1864],{"class":483},[152,66881,66784],{"class":289},[152,66883,54823],{"class":285},[152,66885,1864],{"class":483},[152,66887,66791],{"class":289},[152,66889,52644],{"class":483},[152,66891,66892,66894,66896],{"class":281,"line":11528},[152,66893,56744],{"class":483},[152,66895,48],{"class":52637},[152,66897,52644],{"class":483},[152,66899,66900,66902,66904,66907,66909],{"class":281,"line":11536},[152,66901,56571],{"class":483},[152,66903,48],{"class":52637},[152,66905,66906],{"class":483},">小米净水器\u003C\u002F",[152,66908,48],{"class":52637},[152,66910,52644],{"class":483},[152,66912,66913,66915,66917,66919,66921],{"class":281,"line":11541},[152,66914,56571],{"class":483},[152,66916,48],{"class":52637},[152,66918,66822],{"class":483},[152,66920,48],{"class":52637},[152,66922,52644],{"class":483},[152,66924,66925,66927,66929,66932,66934],{"class":281,"line":18219},[152,66926,56571],{"class":483},[152,66928,48],{"class":52637},[152,66930,66931],{"class":483},">￥4999\u003C\u002F",[152,66933,48],{"class":52637},[152,66935,52644],{"class":483},[152,66937,66938,66940,66942],{"class":281,"line":18225},[152,66939,53113],{"class":483},[152,66941,29],{"class":52637},[152,66943,52644],{"class":483},[152,66945,66946,66948,66950],{"class":281,"line":18248},[152,66947,52678],{"class":483},[152,66949,29],{"class":52637},[152,66951,52644],{"class":483},[152,66953,66954,66956,66958],{"class":281,"line":18254},[152,66955,56571],{"class":483},[152,66957,48],{"class":52637},[152,66959,52644],{"class":483},[152,66961,66962,66964,66966,66968,66970,66972,66974,66976,66978,66980,66982,66984],{"class":281,"line":18277},[152,66963,56639],{"class":483},[152,66965,55158],{"class":52637},[152,66967,55161],{"class":285},[152,66969,1864],{"class":483},[152,66971,55166],{"class":289},[152,66973,16535],{"class":285},[152,66975,1864],{"class":483},[152,66977,66784],{"class":289},[152,66979,54823],{"class":285},[152,66981,1864],{"class":483},[152,66983,66791],{"class":289},[152,66985,52644],{"class":483},[152,66987,66988,66990,66992],{"class":281,"line":18291},[152,66989,56744],{"class":483},[152,66991,48],{"class":52637},[152,66993,52644],{"class":483},[152,66995,66996,66998,67000,67003,67005],{"class":281,"line":18311},[152,66997,56571],{"class":483},[152,66999,48],{"class":52637},[152,67001,67002],{"class":483},">小米电视\u003C\u002F",[152,67004,48],{"class":52637},[152,67006,52644],{"class":483},[152,67008,67009,67011,67013,67015,67017],{"class":281,"line":18317},[152,67010,56571],{"class":483},[152,67012,48],{"class":52637},[152,67014,66822],{"class":483},[152,67016,48],{"class":52637},[152,67018,52644],{"class":483},[152,67020,67021,67023,67025,67028,67030],{"class":281,"line":18328},[152,67022,56571],{"class":483},[152,67024,48],{"class":52637},[152,67026,67027],{"class":483},">￥5999\u003C\u002F",[152,67029,48],{"class":52637},[152,67031,52644],{"class":483},[152,67033,67034,67036,67038],{"class":281,"line":18351},[152,67035,53113],{"class":483},[152,67037,29],{"class":52637},[152,67039,52644],{"class":483},[152,67041,67042,67044,67046],{"class":281,"line":18373},[152,67043,53754],{"class":483},[152,67045,23],{"class":52637},[152,67047,52644],{"class":483},[152,67049,67050,67052,67054],{"class":281,"line":18378},[152,67051,53481],{"class":483},[152,67053,53150],{"class":52637},[152,67055,52644],{"class":483},[152,67057,67058],{"class":281,"line":18384},[152,67059,67060],{"class":866},"    \u002F\u002F 1. 获取大复选框\n",[152,67062,67063,67065,67068,67070,67072,67074,67076,67079],{"class":281,"line":18398},[152,67064,12837],{"class":476},[152,67066,67067],{"class":293}," checkAll",[152,67069,15180],{"class":476},[152,67071,55733],{"class":483},[152,67073,55736],{"class":285},[152,67075,1819],{"class":483},[152,67077,67078],{"class":289},"'#checkAll'",[152,67080,1825],{"class":483},[152,67082,67083],{"class":281,"line":18411},[152,67084,67085],{"class":866},"    \u002F\u002F 2. 获取所有的小复选框\n",[152,67087,67088,67090,67093,67095,67097,67099,67101,67104],{"class":281,"line":18416},[152,67089,12837],{"class":476},[152,67091,67092],{"class":293}," cks",[152,67094,15180],{"class":476},[152,67096,55733],{"class":483},[152,67098,57018],{"class":285},[152,67100,1819],{"class":483},[152,67102,67103],{"class":289},"'.ck'",[152,67105,1825],{"class":483},[152,67107,67108],{"class":281,"line":18430},[152,67109,67110],{"class":866},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[152,67112,67113,67116,67118,67120,67122,67124,67126],{"class":281,"line":18435},[152,67114,67115],{"class":483},"    checkAll.",[152,67117,59150],{"class":285},[152,67119,1819],{"class":483},[152,67121,59155],{"class":289},[152,67123,14051],{"class":483},[152,67125,55786],{"class":476},[152,67127,55789],{"class":483},[152,67129,67130],{"class":281,"line":18441},[152,67131,67132],{"class":866},"      \u002F\u002F 得到当前大复选框的选中状态\n",[152,67134,67135,67138],{"class":281,"line":18446},[152,67136,67137],{"class":866},"      \u002F\u002F console.log(checkAll.checked)",[152,67139,67140],{"class":866},"  \u002F\u002F 得到 是 true 或者是 false\n",[152,67142,67143],{"class":281,"line":18460},[152,67144,67145],{"class":866},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[152,67147,67148,67150,67152,67154,67156,67158,67160,67162,67164,67167,67169,67171,67173],{"class":281,"line":18465},[152,67149,53621],{"class":476},[152,67151,3322],{"class":483},[152,67153,53184],{"class":476},[152,67155,11070],{"class":483},[152,67157,1864],{"class":476},[152,67159,5735],{"class":293},[152,67161,11077],{"class":483},[152,67163,844],{"class":476},[152,67165,67166],{"class":483}," cks.",[152,67168,53305],{"class":293},[152,67170,4857],{"class":483},[152,67172,3943],{"class":476},[152,67174,14058],{"class":483},[152,67176,67177,67180,67182,67185],{"class":281,"line":18470},[152,67178,67179],{"class":483},"        cks[i].checked ",[152,67181,1864],{"class":476},[152,67183,67184],{"class":293}," this",[152,67186,67187],{"class":483},".checked\n",[152,67189,67190],{"class":281,"line":18484},[152,67191,53735],{"class":483},[152,67193,67194],{"class":281,"line":18496},[152,67195,34798],{"class":483},[152,67197,67198],{"class":281,"line":18501},[152,67199,67200],{"class":866},"    \u002F\u002F 5. 小复选框控制大复选框\n",[152,67202,67203],{"class":281,"line":18514},[152,67204,307],{"emptyLinePlaceholder":306},[152,67206,67207,67209,67211,67213,67215,67217,67219,67221,67223,67225,67227,67229,67231],{"class":281,"line":18519},[152,67208,4844],{"class":476},[152,67210,3322],{"class":483},[152,67212,53184],{"class":476},[152,67214,11070],{"class":483},[152,67216,1864],{"class":476},[152,67218,5735],{"class":293},[152,67220,11077],{"class":483},[152,67222,844],{"class":476},[152,67224,67166],{"class":483},[152,67226,53305],{"class":293},[152,67228,4857],{"class":483},[152,67230,3943],{"class":476},[152,67232,14058],{"class":483},[152,67234,67235],{"class":281,"line":18524},[152,67236,67237],{"class":866},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[152,67239,67240,67243,67245,67247,67249,67251,67253],{"class":281,"line":18529},[152,67241,67242],{"class":483},"      cks[i].",[152,67244,59150],{"class":285},[152,67246,1819],{"class":483},[152,67248,59155],{"class":289},[152,67250,14051],{"class":483},[152,67252,55786],{"class":476},[152,67254,55789],{"class":483},[152,67256,67257],{"class":281,"line":18542},[152,67258,67259],{"class":866},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[152,67261,67262],{"class":281,"line":18547},[152,67263,67264],{"class":866},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[152,67266,67267],{"class":281,"line":33970},[152,67268,67269],{"class":866},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[152,67271,67272],{"class":281,"line":33976},[152,67273,67274],{"class":866},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[152,67276,67277,67280,67282,67284,67286,67288,67291,67293,67295,67297,67299],{"class":281,"line":33982},[152,67278,67279],{"class":483},"        checkAll.checked ",[152,67281,1864],{"class":476},[152,67283,55733],{"class":483},[152,67285,57018],{"class":285},[152,67287,1819],{"class":483},[152,67289,67290],{"class":289},"'.ck:checked'",[152,67292,32163],{"class":483},[152,67294,53305],{"class":293},[152,67296,59243],{"class":476},[152,67298,67166],{"class":483},[152,67300,57168],{"class":293},[152,67302,67303],{"class":281,"line":33988},[152,67304,66152],{"class":483},[152,67306,67307],{"class":281,"line":33994},[152,67308,3838],{"class":483},[152,67310,67311,67313,67315],{"class":281,"line":34005},[152,67312,53754],{"class":483},[152,67314,53150],{"class":52637},[152,67316,52644],{"class":483},[152,67318,67319,67321,67323],{"class":281,"line":34011},[152,67320,53122],{"class":483},[152,67322,53137],{"class":52637},[152,67324,52644],{"class":483},[152,67326,67327],{"class":281,"line":34031},[152,67328,307],{"emptyLinePlaceholder":306},[152,67330,67331,67333,67335],{"class":281,"line":34037},[152,67332,53122],{"class":483},[152,67334,51972],{"class":52637},[152,67336,52644],{"class":483},[19,67338,67339],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67341,67342],{},"用好之间比较得到的布尔值！！！",[19,67344,67345,67346,67349,67350,3322,67353,2392,67355,67358],{},"在 JS 里访问的时候，",[277,67347,67348],{},"checkbox.checked"," 是一个 ",[694,67351,67352],{},"布尔值",[277,67354,3034],{},[277,67356,67357],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67360,67361,67362,67365,67366],{},"HTML 的 ",[277,67363,67364],{},"checked=\"checked\""," 只是 ",[694,67367,67368,67369,67372],{},"初始值；JS 的 ",[277,67370,67371],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67374,67375],{},"：checked是一个伪类选择器",[19,67377,67378],{},[401,67379],{"alt":275,"src":67380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67382,67383,67386],{},[67384,67385],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67388,67389],{},[401,67390],{"alt":275,"src":67391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[1760,67393,67395],{"id":67394},"_33-dom事件进阶","3.3 DOM事件进阶",[14,67397,67399],{"id":67398},"_331-事件流","3.3.1 事件流",[19,67401,67402],{},[401,67403],{"alt":275,"src":67404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[262,67406,67408],{"id":67407},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67410,67411],{},[401,67412],{"alt":275,"src":67413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[270,67415,67417],{"className":51970,"code":67416,"language":51972,"meta":275,"style":275},"\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",[277,67418,67419,67429,67443,67447,67455,67469,67489,67501,67509,67516,67528,67540,67550,67554,67558,67565,67577,67589,67599,67603,67611,67619,67623,67631,67646,67665,67673,67681,67701,67721,67737,67748,67756,67773,67784,67792,67809,67820,67828,67836,67844,67848],{"__ignoreMap":275},[152,67420,67421,67423,67425,67427],{"class":281,"line":282},[152,67422,52634],{"class":483},[152,67424,52638],{"class":52637},[152,67426,52641],{"class":285},[152,67428,52644],{"class":483},[152,67430,67431,67433,67435,67437,67439,67441],{"class":281,"line":303},[152,67432,844],{"class":483},[152,67434,51972],{"class":52637},[152,67436,52653],{"class":285},[152,67438,1864],{"class":483},[152,67440,52658],{"class":289},[152,67442,52644],{"class":483},[152,67444,67445],{"class":281,"line":310},[152,67446,307],{"emptyLinePlaceholder":306},[152,67448,67449,67451,67453],{"class":281,"line":324},[152,67450,844],{"class":483},[152,67452,52671],{"class":52637},[152,67454,52644],{"class":483},[152,67456,67457,67459,67461,67463,67465,67467],{"class":281,"line":329},[152,67458,53481],{"class":483},[152,67460,52681],{"class":52637},[152,67462,52684],{"class":285},[152,67464,1864],{"class":483},[152,67466,52689],{"class":289},[152,67468,52644],{"class":483},[152,67470,67471,67473,67475,67477,67479,67481,67483,67485,67487],{"class":281,"line":343},[152,67472,53481],{"class":483},[152,67474,52681],{"class":52637},[152,67476,16535],{"class":285},[152,67478,1864],{"class":483},[152,67480,52728],{"class":289},[152,67482,52708],{"class":285},[152,67484,1864],{"class":483},[152,67486,52735],{"class":289},[152,67488,52644],{"class":483},[152,67490,67491,67493,67495,67497,67499],{"class":281,"line":348},[152,67492,53481],{"class":483},[152,67494,52744],{"class":52637},[152,67496,52747],{"class":483},[152,67498,52744],{"class":52637},[152,67500,52644],{"class":483},[152,67502,67503,67505,67507],{"class":281,"line":362},[152,67504,53481],{"class":483},[152,67506,1736],{"class":52637},[152,67508,52644],{"class":483},[152,67510,67511,67514],{"class":281,"line":367},[152,67512,67513],{"class":285},"    .father",[152,67515,17187],{"class":483},[152,67517,67518,67520,67522,67524,67526],{"class":281,"line":381},[152,67519,56108],{"class":293},[152,67521,52774],{"class":483},[152,67523,66411],{"class":293},[152,67525,52829],{"class":476},[152,67527,2965],{"class":483},[152,67529,67530,67532,67534,67536,67538],{"class":281,"line":386},[152,67531,56122],{"class":293},[152,67533,52774],{"class":483},[152,67535,66411],{"class":293},[152,67537,52829],{"class":476},[152,67539,2965],{"class":483},[152,67541,67542,67544,67546,67548],{"class":281,"line":932},[152,67543,56221],{"class":293},[152,67545,52774],{"class":483},[152,67547,52982],{"class":293},[152,67549,2965],{"class":483},[152,67551,67552],{"class":281,"line":942},[152,67553,3838],{"class":483},[152,67555,67556],{"class":281,"line":949},[152,67557,307],{"emptyLinePlaceholder":306},[152,67559,67560,67563],{"class":281,"line":954},[152,67561,67562],{"class":285},"    .son",[152,67564,17187],{"class":483},[152,67566,67567,67569,67571,67573,67575],{"class":281,"line":959},[152,67568,56108],{"class":293},[152,67570,52774],{"class":483},[152,67572,3382],{"class":293},[152,67574,52829],{"class":476},[152,67576,2965],{"class":483},[152,67578,67579,67581,67583,67585,67587],{"class":281,"line":970},[152,67580,56122],{"class":293},[152,67582,52774],{"class":483},[152,67584,3382],{"class":293},[152,67586,52829],{"class":476},[152,67588,2965],{"class":483},[152,67590,67591,67593,67595,67597],{"class":281,"line":979},[152,67592,56221],{"class":293},[152,67594,52774],{"class":483},[152,67596,56226],{"class":293},[152,67598,2965],{"class":483},[152,67600,67601],{"class":281,"line":989},[152,67602,3838],{"class":483},[152,67604,67605,67607,67609],{"class":281,"line":996},[152,67606,53754],{"class":483},[152,67608,1736],{"class":52637},[152,67610,52644],{"class":483},[152,67612,67613,67615,67617],{"class":281,"line":1001},[152,67614,53122],{"class":483},[152,67616,52671],{"class":52637},[152,67618,52644],{"class":483},[152,67620,67621],{"class":281,"line":1006},[152,67622,307],{"emptyLinePlaceholder":306},[152,67624,67625,67627,67629],{"class":281,"line":1018},[152,67626,844],{"class":483},[152,67628,53137],{"class":52637},[152,67630,52644],{"class":483},[152,67632,67633,67635,67637,67639,67641,67644],{"class":281,"line":1027},[152,67634,53481],{"class":483},[152,67636,52948],{"class":52637},[152,67638,54823],{"class":285},[152,67640,1864],{"class":483},[152,67642,67643],{"class":289},"\"father\"",[152,67645,52644],{"class":483},[152,67647,67648,67650,67652,67654,67656,67659,67661,67663],{"class":281,"line":1037},[152,67649,52678],{"class":483},[152,67651,52948],{"class":52637},[152,67653,54823],{"class":285},[152,67655,1864],{"class":483},[152,67657,67658],{"class":289},"\"son\"",[152,67660,56651],{"class":483},[152,67662,52948],{"class":52637},[152,67664,52644],{"class":483},[152,67666,67667,67669,67671],{"class":281,"line":1044},[152,67668,53754],{"class":483},[152,67670,52948],{"class":52637},[152,67672,52644],{"class":483},[152,67674,67675,67677,67679],{"class":281,"line":1049},[152,67676,53481],{"class":483},[152,67678,53150],{"class":52637},[152,67680,52644],{"class":483},[152,67682,67683,67685,67688,67690,67692,67694,67696,67699],{"class":281,"line":1054},[152,67684,12837],{"class":476},[152,67686,67687],{"class":293}," fa",[152,67689,15180],{"class":476},[152,67691,55733],{"class":483},[152,67693,55736],{"class":285},[152,67695,1819],{"class":483},[152,67697,67698],{"class":289},"'.father'",[152,67700,1825],{"class":483},[152,67702,67703,67705,67708,67710,67712,67714,67716,67719],{"class":281,"line":1065},[152,67704,12837],{"class":476},[152,67706,67707],{"class":293}," son",[152,67709,15180],{"class":476},[152,67711,55733],{"class":483},[152,67713,55736],{"class":285},[152,67715,1819],{"class":483},[152,67717,67718],{"class":289},"'.son'",[152,67720,1825],{"class":483},[152,67722,67723,67725,67727,67729,67731,67733,67735],{"class":281,"line":1074},[152,67724,53744],{"class":483},[152,67726,59150],{"class":285},[152,67728,1819],{"class":483},[152,67730,59155],{"class":289},[152,67732,14051],{"class":483},[152,67734,55786],{"class":476},[152,67736,55789],{"class":483},[152,67738,67739,67741,67743,67746],{"class":281,"line":1084},[152,67740,60262],{"class":285},[152,67742,1819],{"class":483},[152,67744,67745],{"class":289},"'woshiu1'",[152,67747,1825],{"class":483},[152,67749,67750,67752,67754],{"class":281,"line":1091},[152,67751,55872],{"class":483},[152,67753,3034],{"class":293},[152,67755,1825],{"class":483},[152,67757,67758,67761,67763,67765,67767,67769,67771],{"class":281,"line":1096},[152,67759,67760],{"class":483},"    fa.",[152,67762,59150],{"class":285},[152,67764,1819],{"class":483},[152,67766,59155],{"class":289},[152,67768,14051],{"class":483},[152,67770,55786],{"class":476},[152,67772,55789],{"class":483},[152,67774,67775,67777,67779,67782],{"class":281,"line":1101},[152,67776,60262],{"class":285},[152,67778,1819],{"class":483},[152,67780,67781],{"class":289},"'1'",[152,67783,1825],{"class":483},[152,67785,67786,67788,67790],{"class":281,"line":1112},[152,67787,55872],{"class":483},[152,67789,3034],{"class":293},[152,67791,1825],{"class":483},[152,67793,67794,67797,67799,67801,67803,67805,67807],{"class":281,"line":1121},[152,67795,67796],{"class":483},"    son.",[152,67798,59150],{"class":285},[152,67800,1819],{"class":483},[152,67802,59155],{"class":289},[152,67804,14051],{"class":483},[152,67806,55786],{"class":476},[152,67808,55789],{"class":483},[152,67810,67811,67813,67815,67818],{"class":281,"line":1131},[152,67812,60262],{"class":285},[152,67814,1819],{"class":483},[152,67816,67817],{"class":289},"'2'",[152,67819,1825],{"class":483},[152,67821,67822,67824,67826],{"class":281,"line":1138},[152,67823,55872],{"class":483},[152,67825,3034],{"class":293},[152,67827,1825],{"class":483},[152,67829,67830,67832,67834],{"class":281,"line":1143},[152,67831,53754],{"class":483},[152,67833,53150],{"class":52637},[152,67835,52644],{"class":483},[152,67837,67838,67840,67842],{"class":281,"line":1148},[152,67839,53122],{"class":483},[152,67841,53137],{"class":52637},[152,67843,52644],{"class":483},[152,67845,67846],{"class":281,"line":1159},[152,67847,307],{"emptyLinePlaceholder":306},[152,67849,67850,67852,67854],{"class":281,"line":1168},[152,67851,53122],{"class":483},[152,67853,51972],{"class":52637},[152,67855,52644],{"class":483},[19,67857,67858],{},[401,67859],{"alt":275,"src":67860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67862,67863],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[262,67865,67867],{"id":67866},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67869,67870],{},[401,67871],{"alt":275,"src":67872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67874,67875],{},"反着来",[19,67877,67878],{},"注意是同名事件，比如都是‘click’",[262,67880,67882],{"id":67881},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67884,67885],{},[401,67886],{"alt":275,"src":67887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[262,67889,67891],{"id":67890},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67893,67894],{},[401,67895],{"alt":275,"src":67896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67898,67899],{},[401,67900],{"alt":275,"src":67901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[262,67903,67905],{"id":67904},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[416,67907,67908],{},[419,67909,67910],{},"事件类型的区别",[19,67912,67913],{},[401,67914],{"alt":275,"src":67915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67917,67918],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[416,67920,67921],{"start":303},[419,67922,67923],{},"注册事件的区别",[19,67925,67926],{},[401,67927],{"alt":275,"src":67928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[262,67930,67932],{"id":67931},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67934,67935],{},[401,67936],{"alt":275,"src":67937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67939,67940],{},[401,67941],{"alt":275,"src":67942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[270,67944,67946],{"className":54404,"code":67945,"language":54406,"meta":275,"style":275},"\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",[277,67947,67948,67956,67973,67996,68004,68009,68014,68019,68023,68031,68039],{"__ignoreMap":275},[152,67949,67950,67952,67954],{"class":281,"line":282},[152,67951,844],{"class":483},[152,67953,53137],{"class":52637},[152,67955,52644],{"class":483},[152,67957,67958,67960,67963,67966,67968,67971],{"class":281,"line":303},[152,67959,53481],{"class":483},[152,67961,67962],{"class":52637},"form",[152,67964,67965],{"class":285}," action",[152,67967,1864],{"class":483},[152,67969,67970],{"class":289},"\"http:\u002F\u002Fwww.itcast.cn\"",[152,67972,52644],{"class":483},[152,67974,67975,67977,67979,67981,67983,67986,67989,67991,67994],{"class":281,"line":310},[152,67976,52678],{"class":483},[152,67978,55158],{"class":52637},[152,67980,55161],{"class":285},[152,67982,1864],{"class":483},[152,67984,67985],{"class":289},"\"submit\"",[152,67987,67988],{"class":285}," value",[152,67990,1864],{"class":483},[152,67992,67993],{"class":289},"\"免费注册\"",[152,67995,52644],{"class":483},[152,67997,67998,68000,68002],{"class":281,"line":324},[152,67999,52678],{"class":483},[152,68001,53150],{"class":52637},[152,68003,52644],{"class":483},[152,68005,68006],{"class":281,"line":329},[152,68007,68008],{"class":483},"      const form = document.querySelector('form')\n",[152,68010,68011],{"class":281,"line":343},[152,68012,68013],{"class":483},"      form.addEventListener('submit', function (e) {\n",[152,68015,68016],{"class":281,"line":348},[152,68017,68018],{"class":483},"        e.preventDefault()\n",[152,68020,68021],{"class":281,"line":362},[152,68022,66152],{"class":483},[152,68024,68025,68027,68029],{"class":281,"line":367},[152,68026,53113],{"class":483},[152,68028,53150],{"class":52637},[152,68030,52644],{"class":483},[152,68032,68033,68035,68037],{"class":281,"line":381},[152,68034,53754],{"class":483},[152,68036,67962],{"class":52637},[152,68038,52644],{"class":483},[152,68040,68041,68043,68045],{"class":281,"line":386},[152,68042,53122],{"class":483},[152,68044,53137],{"class":52637},[152,68046,52644],{"class":483},[19,68048,68049],{},"点击不在跳转！！！",[14,68051,68053],{"id":68052},"_332-事件委托","3.3.2 事件委托",[19,68055,68056],{},[401,68057],{"alt":275,"src":68058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[270,68060,68062],{"className":51970,"code":68061,"language":51972,"meta":275,"style":275},"\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",[277,68063,68064,68074,68088,68092,68100,68114,68134,68146,68154,68158,68166,68174,68186,68198,68210,68222,68234,68247,68255,68263,68268,68287,68308,68313,68318,68323,68328,68337,68341,68351,68355,68360,68365,68379,68389,68393,68397,68405,68413,68417],{"__ignoreMap":275},[152,68065,68066,68068,68070,68072],{"class":281,"line":282},[152,68067,52634],{"class":483},[152,68069,52638],{"class":52637},[152,68071,52641],{"class":285},[152,68073,52644],{"class":483},[152,68075,68076,68078,68080,68082,68084,68086],{"class":281,"line":303},[152,68077,844],{"class":483},[152,68079,51972],{"class":52637},[152,68081,52653],{"class":285},[152,68083,1864],{"class":483},[152,68085,52658],{"class":289},[152,68087,52644],{"class":483},[152,68089,68090],{"class":281,"line":310},[152,68091,307],{"emptyLinePlaceholder":306},[152,68093,68094,68096,68098],{"class":281,"line":324},[152,68095,844],{"class":483},[152,68097,52671],{"class":52637},[152,68099,52644],{"class":483},[152,68101,68102,68104,68106,68108,68110,68112],{"class":281,"line":329},[152,68103,53481],{"class":483},[152,68105,52681],{"class":52637},[152,68107,52684],{"class":285},[152,68109,1864],{"class":483},[152,68111,52689],{"class":289},[152,68113,52644],{"class":483},[152,68115,68116,68118,68120,68122,68124,68126,68128,68130,68132],{"class":281,"line":343},[152,68117,53481],{"class":483},[152,68119,52681],{"class":52637},[152,68121,16535],{"class":285},[152,68123,1864],{"class":483},[152,68125,52728],{"class":289},[152,68127,52708],{"class":285},[152,68129,1864],{"class":483},[152,68131,52735],{"class":289},[152,68133,52644],{"class":483},[152,68135,68136,68138,68140,68142,68144],{"class":281,"line":348},[152,68137,53481],{"class":483},[152,68139,52744],{"class":52637},[152,68141,52747],{"class":483},[152,68143,52744],{"class":52637},[152,68145,52644],{"class":483},[152,68147,68148,68150,68152],{"class":281,"line":362},[152,68149,53122],{"class":483},[152,68151,52671],{"class":52637},[152,68153,52644],{"class":483},[152,68155,68156],{"class":281,"line":367},[152,68157,307],{"emptyLinePlaceholder":306},[152,68159,68160,68162,68164],{"class":281,"line":381},[152,68161,844],{"class":483},[152,68163,53137],{"class":52637},[152,68165,52644],{"class":483},[152,68167,68168,68170,68172],{"class":281,"line":386},[152,68169,53481],{"class":483},[152,68171,698],{"class":52637},[152,68173,52644],{"class":483},[152,68175,68176,68178,68180,68182,68184],{"class":281,"line":932},[152,68177,52678],{"class":483},[152,68179,419],{"class":52637},[152,68181,55303],{"class":483},[152,68183,419],{"class":52637},[152,68185,52644],{"class":483},[152,68187,68188,68190,68192,68194,68196],{"class":281,"line":942},[152,68189,52678],{"class":483},[152,68191,419],{"class":52637},[152,68193,55322],{"class":483},[152,68195,419],{"class":52637},[152,68197,52644],{"class":483},[152,68199,68200,68202,68204,68206,68208],{"class":281,"line":949},[152,68201,52678],{"class":483},[152,68203,419],{"class":52637},[152,68205,55341],{"class":483},[152,68207,419],{"class":52637},[152,68209,52644],{"class":483},[152,68211,68212,68214,68216,68218,68220],{"class":281,"line":954},[152,68213,52678],{"class":483},[152,68215,419],{"class":52637},[152,68217,55360],{"class":483},[152,68219,419],{"class":52637},[152,68221,52644],{"class":483},[152,68223,68224,68226,68228,68230,68232],{"class":281,"line":959},[152,68225,52678],{"class":483},[152,68227,419],{"class":52637},[152,68229,55379],{"class":483},[152,68231,419],{"class":52637},[152,68233,52644],{"class":483},[152,68235,68236,68238,68240,68243,68245],{"class":281,"line":970},[152,68237,52678],{"class":483},[152,68239,19],{"class":52637},[152,68241,68242],{"class":483},">我不需要变色\u003C\u002F",[152,68244,19],{"class":52637},[152,68246,52644],{"class":483},[152,68248,68249,68251,68253],{"class":281,"line":979},[152,68250,53754],{"class":483},[152,68252,698],{"class":52637},[152,68254,52644],{"class":483},[152,68256,68257,68259,68261],{"class":281,"line":989},[152,68258,53481],{"class":483},[152,68260,53150],{"class":52637},[152,68262,52644],{"class":483},[152,68264,68265],{"class":281,"line":996},[152,68266,68267],{"class":866},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[152,68269,68270,68272,68274,68276,68278,68280,68282,68285],{"class":281,"line":1001},[152,68271,12837],{"class":476},[152,68273,62629],{"class":293},[152,68275,15180],{"class":476},[152,68277,55733],{"class":483},[152,68279,55736],{"class":285},[152,68281,1819],{"class":483},[152,68283,68284],{"class":289},"'ul'",[152,68286,1825],{"class":483},[152,68288,68289,68292,68294,68296,68298,68300,68302,68304,68306],{"class":281,"line":1006},[152,68290,68291],{"class":483},"    ul.",[152,68293,59150],{"class":285},[152,68295,1819],{"class":483},[152,68297,59155],{"class":289},[152,68299,14051],{"class":483},[152,68301,55786],{"class":476},[152,68303,3322],{"class":483},[152,68305,1891],{"class":6858},[152,68307,14058],{"class":483},[152,68309,68310],{"class":281,"line":1018},[152,68311,68312],{"class":866},"      \u002F\u002F alert(1)\n",[152,68314,68315],{"class":281,"line":1027},[152,68316,68317],{"class":866},"      \u002F\u002F e.target就是我们点击的对象\n",[152,68319,68320],{"class":281,"line":1037},[152,68321,68322],{"class":866},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[152,68324,68325],{"class":281,"line":1044},[152,68326,68327],{"class":866},"      \u002F\u002F e.target.style.color = 'red'\n",[152,68329,68330,68332,68334],{"class":281,"line":1049},[152,68331,59581],{"class":483},[152,68333,59584],{"class":285},[152,68335,68336],{"class":483},"(e)\n",[152,68338,68339],{"class":281,"line":1054},[152,68340,307],{"emptyLinePlaceholder":306},[152,68342,68343,68345,68348],{"class":281,"line":1065},[152,68344,59581],{"class":483},[152,68346,68347],{"class":285},"dir",[152,68349,68350],{"class":483},"(e.target)\n",[152,68352,68353],{"class":281,"line":1074},[152,68354,307],{"emptyLinePlaceholder":306},[152,68356,68357],{"class":281,"line":1084},[152,68358,68359],{"class":866},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[152,68361,68362],{"class":281,"line":1091},[152,68363,68364],{"class":866},"      \u002F\u002F 通过tagName来进行判断\n",[152,68366,68367,68369,68372,68374,68377],{"class":281,"line":1096},[152,68368,55817],{"class":476},[152,68370,68371],{"class":483}," (e.target.tagName ",[152,68373,55823],{"class":476},[152,68375,68376],{"class":289}," 'LI'",[152,68378,14058],{"class":483},[152,68380,68381,68384,68386],{"class":281,"line":1101},[152,68382,68383],{"class":483},"        e.target.style.color ",[152,68385,1864],{"class":476},[152,68387,68388],{"class":289}," 'red'\n",[152,68390,68391],{"class":281,"line":1112},[152,68392,53735],{"class":483},[152,68394,68395],{"class":281,"line":1121},[152,68396,34798],{"class":483},[152,68398,68399,68401,68403],{"class":281,"line":1131},[152,68400,53754],{"class":483},[152,68402,53150],{"class":52637},[152,68404,52644],{"class":483},[152,68406,68407,68409,68411],{"class":281,"line":1138},[152,68408,53122],{"class":483},[152,68410,53137],{"class":52637},[152,68412,52644],{"class":483},[152,68414,68415],{"class":281,"line":1143},[152,68416,307],{"emptyLinePlaceholder":306},[152,68418,68419,68421,68423],{"class":281,"line":1148},[152,68420,53122],{"class":483},[152,68422,51972],{"class":52637},[152,68424,52644],{"class":483},[19,68426,68427],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68429,68430],{},"if(e.target.ragName==='P') {}",[19,68432,68433],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68435,68436],{},"通过事件委托的方式实现tab栏切换改造：",[19,68438,68439],{},"一定要记住自定义属性！！！！！！",[19,68441,68442],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68444,68445],{},"id是自定义的属性名",[19,68447,68448],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[270,68450,68452],{"className":51970,"code":68451,"language":51972,"meta":275,"style":275},"\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",[277,68453,68454,68464,68478,68482,68490,68504,68524,68544,68556,68564,68570,68580,68590,68594,68598,68604,68616,68628,68640,68656,68660,68664,68670,68682,68694,68706,68716,68726,68730,68734,68742,68754,68764,68776,68780,68784,68792,68802,68812,68822,68826,68830,68840,68854,68866,68870,68874,68886,68896,68912,68922,68926,68930,68944,68954,68964,68968,68972,68978,68992,68996,69000,69008,69018,69022,69026,69035,69045,69049,69057,69065,69069,69077,69091,69105,69117,69125,69164,69196,69228,69260,69292,69300,69308,69322,69356,69390,69424,69458,69492,69500,69508,69516,69521,69526,69545,69550,69570,69578,69583,69596,69617,69630,69634,69639,69644,69657,69677,69705,69709,69713,69717,69725,69733,69737],{"__ignoreMap":275},[152,68455,68456,68458,68460,68462],{"class":281,"line":282},[152,68457,52634],{"class":483},[152,68459,52638],{"class":52637},[152,68461,52641],{"class":285},[152,68463,52644],{"class":483},[152,68465,68466,68468,68470,68472,68474,68476],{"class":281,"line":303},[152,68467,844],{"class":483},[152,68469,51972],{"class":52637},[152,68471,52653],{"class":285},[152,68473,1864],{"class":483},[152,68475,52658],{"class":289},[152,68477,52644],{"class":483},[152,68479,68480],{"class":281,"line":310},[152,68481,307],{"emptyLinePlaceholder":306},[152,68483,68484,68486,68488],{"class":281,"line":324},[152,68485,844],{"class":483},[152,68487,52671],{"class":52637},[152,68489,52644],{"class":483},[152,68491,68492,68494,68496,68498,68500,68502],{"class":281,"line":329},[152,68493,53481],{"class":483},[152,68495,52681],{"class":52637},[152,68497,52684],{"class":285},[152,68499,1864],{"class":483},[152,68501,52689],{"class":289},[152,68503,60464],{"class":483},[152,68505,68506,68508,68510,68512,68514,68516,68518,68520,68522],{"class":281,"line":343},[152,68507,53481],{"class":483},[152,68509,52681],{"class":52637},[152,68511,52700],{"class":285},[152,68513,1864],{"class":483},[152,68515,52705],{"class":289},[152,68517,52708],{"class":285},[152,68519,1864],{"class":483},[152,68521,52713],{"class":289},[152,68523,60464],{"class":483},[152,68525,68526,68528,68530,68532,68534,68536,68538,68540,68542],{"class":281,"line":348},[152,68527,53481],{"class":483},[152,68529,52681],{"class":52637},[152,68531,16535],{"class":285},[152,68533,1864],{"class":483},[152,68535,52728],{"class":289},[152,68537,52708],{"class":285},[152,68539,1864],{"class":483},[152,68541,52735],{"class":289},[152,68543,60464],{"class":483},[152,68545,68546,68548,68550,68552,68554],{"class":281,"line":362},[152,68547,53481],{"class":483},[152,68549,52744],{"class":52637},[152,68551,64962],{"class":483},[152,68553,52744],{"class":52637},[152,68555,52644],{"class":483},[152,68557,68558,68560,68562],{"class":281,"line":367},[152,68559,53481],{"class":483},[152,68561,1736],{"class":52637},[152,68563,52644],{"class":483},[152,68565,68566,68568],{"class":281,"line":381},[152,68567,8045],{"class":52637},[152,68569,17187],{"class":483},[152,68571,68572,68574,68576,68578],{"class":281,"line":386},[152,68573,56043],{"class":293},[152,68575,52774],{"class":483},[152,68577,2000],{"class":293},[152,68579,2965],{"class":483},[152,68581,68582,68584,68586,68588],{"class":281,"line":932},[152,68583,56032],{"class":293},[152,68585,52774],{"class":483},[152,68587,2000],{"class":293},[152,68589,2965],{"class":483},[152,68591,68592],{"class":281,"line":942},[152,68593,3838],{"class":483},[152,68595,68596],{"class":281,"line":949},[152,68597,307],{"emptyLinePlaceholder":306},[152,68599,68600,68602],{"class":281,"line":954},[152,68601,65013],{"class":285},[152,68603,17187],{"class":483},[152,68605,68606,68608,68610,68612,68614],{"class":281,"line":959},[152,68607,56108],{"class":293},[152,68609,52774],{"class":483},[152,68611,65024],{"class":293},[152,68613,52829],{"class":476},[152,68615,2965],{"class":483},[152,68617,68618,68620,68622,68624,68626],{"class":281,"line":970},[152,68619,56122],{"class":293},[152,68621,52774],{"class":483},[152,68623,65037],{"class":293},[152,68625,52829],{"class":476},[152,68627,2965],{"class":483},[152,68629,68630,68632,68634,68636,68638],{"class":281,"line":979},[152,68631,56043],{"class":293},[152,68633,52774],{"class":483},[152,68635,2508],{"class":293},[152,68637,52829],{"class":476},[152,68639,2965],{"class":483},[152,68641,68642,68644,68646,68648,68650,68652,68654],{"class":281,"line":989},[152,68643,63314],{"class":293},[152,68645,52774],{"class":483},[152,68647,2026],{"class":293},[152,68649,52829],{"class":476},[152,68651,52858],{"class":293},[152,68653,63581],{"class":293},[152,68655,2965],{"class":483},[152,68657,68658],{"class":281,"line":996},[152,68659,3838],{"class":483},[152,68661,68662],{"class":281,"line":1001},[152,68663,307],{"emptyLinePlaceholder":306},[152,68665,68666,68668],{"class":281,"line":1006},[152,68667,65082],{"class":285},[152,68669,17187],{"class":483},[152,68671,68672,68674,68676,68678,68680],{"class":281,"line":1018},[152,68673,56108],{"class":293},[152,68675,52774],{"class":483},[152,68677,2119],{"class":293},[152,68679,2136],{"class":476},[152,68681,2965],{"class":483},[152,68683,68684,68686,68688,68690,68692],{"class":281,"line":1027},[152,68685,56122],{"class":293},[152,68687,52774],{"class":483},[152,68689,2714],{"class":293},[152,68691,52829],{"class":476},[152,68693,2965],{"class":483},[152,68695,68696,68698,68700,68702,68704],{"class":281,"line":1037},[152,68697,58696],{"class":293},[152,68699,52774],{"class":483},[152,68701,2714],{"class":293},[152,68703,52829],{"class":476},[152,68705,2965],{"class":483},[152,68707,68708,68710,68712,68714],{"class":281,"line":1044},[152,68709,56346],{"class":293},[152,68711,52774],{"class":483},[152,68713,52814],{"class":293},[152,68715,2965],{"class":483},[152,68717,68718,68720,68722,68724],{"class":281,"line":1049},[152,68719,56357],{"class":293},[152,68721,52774],{"class":483},[152,68723,53005],{"class":293},[152,68725,2965],{"class":483},[152,68727,68728],{"class":281,"line":1054},[152,68729,3838],{"class":483},[152,68731,68732],{"class":281,"line":1065},[152,68733,307],{"emptyLinePlaceholder":306},[152,68735,68736,68738,68740],{"class":281,"line":1074},[152,68737,65082],{"class":285},[152,68739,65155],{"class":52637},[152,68741,17187],{"class":483},[152,68743,68744,68746,68748,68750,68752],{"class":281,"line":1084},[152,68745,56259],{"class":293},[152,68747,52774],{"class":483},[152,68749,2608],{"class":293},[152,68751,52829],{"class":476},[152,68753,2965],{"class":483},[152,68755,68756,68758,68760,68762],{"class":281,"line":1091},[152,68757,63671],{"class":293},[152,68759,52774],{"class":483},[152,68761,65178],{"class":293},[152,68763,2965],{"class":483},[152,68765,68766,68768,68770,68772,68774],{"class":281,"line":1096},[152,68767,63337],{"class":293},[152,68769,52774],{"class":483},[152,68771,2508],{"class":293},[152,68773,52829],{"class":476},[152,68775,2965],{"class":483},[152,68777,68778],{"class":281,"line":1101},[152,68779,3838],{"class":483},[152,68781,68782],{"class":281,"line":1112},[152,68783,307],{"emptyLinePlaceholder":306},[152,68785,68786,68788,68790],{"class":281,"line":1121},[152,68787,65082],{"class":285},[152,68789,62629],{"class":52637},[152,68791,17187],{"class":483},[152,68793,68794,68796,68798,68800],{"class":281,"line":1131},[152,68795,56069],{"class":293},[152,68797,52774],{"class":483},[152,68799,56074],{"class":293},[152,68801,2965],{"class":483},[152,68803,68804,68806,68808,68810],{"class":281,"line":1138},[152,68805,56346],{"class":293},[152,68807,52774],{"class":483},[152,68809,52814],{"class":293},[152,68811,2965],{"class":483},[152,68813,68814,68816,68818,68820],{"class":281,"line":1143},[152,68815,56357],{"class":293},[152,68817,52774],{"class":483},[152,68819,52917],{"class":293},[152,68821,2965],{"class":483},[152,68823,68824],{"class":281,"line":1148},[152,68825,3838],{"class":483},[152,68827,68828],{"class":281,"line":1159},[152,68829,307],{"emptyLinePlaceholder":306},[152,68831,68832,68834,68836,68838],{"class":281,"line":1168},[152,68833,65082],{"class":285},[152,68835,62629],{"class":52637},[152,68837,56412],{"class":52637},[152,68839,17187],{"class":483},[152,68841,68842,68844,68846,68848,68850,68852],{"class":281,"line":1178},[152,68843,56043],{"class":293},[152,68845,52774],{"class":483},[152,68847,2000],{"class":293},[152,68849,10582],{"class":293},[152,68851,52829],{"class":476},[152,68853,2965],{"class":483},[152,68855,68856,68858,68860,68862,68864],{"class":281,"line":1185},[152,68857,56259],{"class":293},[152,68859,52774],{"class":483},[152,68861,2357],{"class":293},[152,68863,52829],{"class":476},[152,68865,2965],{"class":483},[152,68867,68868],{"class":281,"line":1190},[152,68869,3838],{"class":483},[152,68871,68872],{"class":281,"line":1195},[152,68873,307],{"emptyLinePlaceholder":306},[152,68875,68876,68878,68880,68882,68884],{"class":281,"line":1206},[152,68877,65082],{"class":285},[152,68879,62629],{"class":52637},[152,68881,56412],{"class":52637},[152,68883,3070],{"class":52637},[152,68885,17187],{"class":483},[152,68887,68888,68890,68892,68894],{"class":281,"line":1215},[152,68889,65307],{"class":293},[152,68891,52774],{"class":483},[152,68893,56074],{"class":293},[152,68895,2965],{"class":483},[152,68897,68898,68900,68902,68904,68906,68908,68910],{"class":281,"line":1225},[152,68899,63569],{"class":293},[152,68901,52774],{"class":483},[152,68903,1894],{"class":293},[152,68905,52829],{"class":476},[152,68907,52858],{"class":293},[152,68909,65328],{"class":293},[152,68911,2965],{"class":483},[152,68913,68914,68916,68918,68920],{"class":281,"line":1232},[152,68915,58753],{"class":293},[152,68917,52774],{"class":483},[152,68919,63706],{"class":293},[152,68921,2965],{"class":483},[152,68923,68924],{"class":281,"line":1237},[152,68925,3838],{"class":483},[152,68927,68928],{"class":281,"line":1242},[152,68929,307],{"emptyLinePlaceholder":306},[152,68931,68932,68934,68936,68938,68940,68942],{"class":281,"line":1253},[152,68933,65082],{"class":285},[152,68935,62629],{"class":52637},[152,68937,56412],{"class":52637},[152,68939,3070],{"class":52637},[152,68941,65361],{"class":285},[152,68943,17187],{"class":483},[152,68945,68946,68948,68950,68952],{"class":281,"line":1262},[152,68947,63128],{"class":293},[152,68949,52774],{"class":483},[152,68951,65372],{"class":293},[152,68953,2965],{"class":483},[152,68955,68956,68958,68960,68962],{"class":281,"line":1272},[152,68957,58753],{"class":293},[152,68959,52774],{"class":483},[152,68961,65372],{"class":293},[152,68963,2965],{"class":483},[152,68965,68966],{"class":281,"line":1279},[152,68967,3838],{"class":483},[152,68969,68970],{"class":281,"line":1284},[152,68971,307],{"emptyLinePlaceholder":306},[152,68973,68974,68976],{"class":281,"line":1289},[152,68975,65397],{"class":285},[152,68977,17187],{"class":483},[152,68979,68980,68982,68984,68986,68988,68990],{"class":281,"line":1301},[152,68981,56032],{"class":293},[152,68983,52774],{"class":483},[152,68985,2000],{"class":293},[152,68987,65410],{"class":293},[152,68989,52829],{"class":476},[152,68991,2965],{"class":483},[152,68993,68994],{"class":281,"line":1310},[152,68995,3838],{"class":483},[152,68997,68998],{"class":281,"line":1320},[152,68999,307],{"emptyLinePlaceholder":306},[152,69001,69002,69004,69006],{"class":281,"line":1327},[152,69003,65397],{"class":285},[152,69005,63511],{"class":285},[152,69007,17187],{"class":483},[152,69009,69010,69012,69014,69016],{"class":281,"line":11528},[152,69011,56346],{"class":293},[152,69013,52774],{"class":483},[152,69015,56074],{"class":293},[152,69017,2965],{"class":483},[152,69019,69020],{"class":281,"line":11536},[152,69021,3838],{"class":483},[152,69023,69024],{"class":281,"line":11541},[152,69025,307],{"emptyLinePlaceholder":306},[152,69027,69028,69030,69033],{"class":281,"line":18219},[152,69029,65397],{"class":285},[152,69031,69032],{"class":285}," .active",[152,69034,17187],{"class":483},[152,69036,69037,69039,69041,69043],{"class":281,"line":18225},[152,69038,56346],{"class":293},[152,69040,52774],{"class":483},[152,69042,62206],{"class":293},[152,69044,2965],{"class":483},[152,69046,69047],{"class":281,"line":18248},[152,69048,3838],{"class":483},[152,69050,69051,69053,69055],{"class":281,"line":18254},[152,69052,53754],{"class":483},[152,69054,1736],{"class":52637},[152,69056,52644],{"class":483},[152,69058,69059,69061,69063],{"class":281,"line":18277},[152,69060,53122],{"class":483},[152,69062,52671],{"class":52637},[152,69064,52644],{"class":483},[152,69066,69067],{"class":281,"line":18291},[152,69068,307],{"emptyLinePlaceholder":306},[152,69070,69071,69073,69075],{"class":281,"line":18311},[152,69072,844],{"class":483},[152,69074,53137],{"class":52637},[152,69076,52644],{"class":483},[152,69078,69079,69081,69083,69085,69087,69089],{"class":281,"line":18317},[152,69080,53481],{"class":483},[152,69082,52948],{"class":52637},[152,69084,54823],{"class":285},[152,69086,1864],{"class":483},[152,69088,65512],{"class":289},[152,69090,52644],{"class":483},[152,69092,69093,69095,69097,69099,69101,69103],{"class":281,"line":18328},[152,69094,52678],{"class":483},[152,69096,52948],{"class":52637},[152,69098,54823],{"class":285},[152,69100,1864],{"class":483},[152,69102,65527],{"class":289},[152,69104,52644],{"class":483},[152,69106,69107,69109,69111,69113,69115],{"class":281,"line":18351},[152,69108,56571],{"class":483},[152,69110,14],{"class":52637},[152,69112,65538],{"class":483},[152,69114,14],{"class":52637},[152,69116,52644],{"class":483},[152,69118,69119,69121,69123],{"class":281,"line":18373},[152,69120,56571],{"class":483},[152,69122,698],{"class":52637},[152,69124,52644],{"class":483},[152,69126,69127,69129,69131,69133,69135,69137,69139,69141,69143,69145,69147,69149,69151,69154,69156,69158,69160,69162],{"class":281,"line":18378},[152,69128,56639],{"class":483},[152,69130,419],{"class":52637},[152,69132,62389],{"class":483},[152,69134,69],{"class":52637},[152,69136,54823],{"class":285},[152,69138,1864],{"class":483},[152,69140,61043],{"class":289},[152,69142,62394],{"class":285},[152,69144,1864],{"class":483},[152,69146,65573],{"class":289},[152,69148,55288],{"class":285},[152,69150,1864],{"class":483},[152,69152,69153],{"class":289},"\"0\"",[152,69155,65576],{"class":483},[152,69157,69],{"class":52637},[152,69159,56651],{"class":483},[152,69161,419],{"class":52637},[152,69163,52644],{"class":483},[152,69165,69166,69168,69170,69172,69174,69176,69178,69180,69182,69184,69186,69188,69190,69192,69194],{"class":281,"line":18384},[152,69167,56639],{"class":483},[152,69169,419],{"class":52637},[152,69171,62389],{"class":483},[152,69173,69],{"class":52637},[152,69175,62394],{"class":285},[152,69177,1864],{"class":483},[152,69179,65573],{"class":289},[152,69181,55288],{"class":285},[152,69183,1864],{"class":483},[152,69185,5321],{"class":289},[152,69187,65603],{"class":483},[152,69189,69],{"class":52637},[152,69191,56651],{"class":483},[152,69193,419],{"class":52637},[152,69195,52644],{"class":483},[152,69197,69198,69200,69202,69204,69206,69208,69210,69212,69214,69216,69218,69220,69222,69224,69226],{"class":281,"line":18398},[152,69199,56639],{"class":483},[152,69201,419],{"class":52637},[152,69203,62389],{"class":483},[152,69205,69],{"class":52637},[152,69207,62394],{"class":285},[152,69209,1864],{"class":483},[152,69211,65573],{"class":289},[152,69213,55288],{"class":285},[152,69215,1864],{"class":483},[152,69217,5344],{"class":289},[152,69219,65630],{"class":483},[152,69221,69],{"class":52637},[152,69223,56651],{"class":483},[152,69225,419],{"class":52637},[152,69227,52644],{"class":483},[152,69229,69230,69232,69234,69236,69238,69240,69242,69244,69246,69248,69250,69252,69254,69256,69258],{"class":281,"line":18411},[152,69231,56639],{"class":483},[152,69233,419],{"class":52637},[152,69235,62389],{"class":483},[152,69237,69],{"class":52637},[152,69239,62394],{"class":285},[152,69241,1864],{"class":483},[152,69243,65573],{"class":289},[152,69245,55288],{"class":285},[152,69247,1864],{"class":483},[152,69249,5357],{"class":289},[152,69251,65657],{"class":483},[152,69253,69],{"class":52637},[152,69255,56651],{"class":483},[152,69257,419],{"class":52637},[152,69259,52644],{"class":483},[152,69261,69262,69264,69266,69268,69270,69272,69274,69276,69278,69280,69282,69284,69286,69288,69290],{"class":281,"line":18416},[152,69263,56639],{"class":483},[152,69265,419],{"class":52637},[152,69267,62389],{"class":483},[152,69269,69],{"class":52637},[152,69271,62394],{"class":285},[152,69273,1864],{"class":483},[152,69275,65573],{"class":289},[152,69277,55288],{"class":285},[152,69279,1864],{"class":483},[152,69281,5370],{"class":289},[152,69283,65684],{"class":483},[152,69285,69],{"class":52637},[152,69287,56651],{"class":483},[152,69289,419],{"class":52637},[152,69291,52644],{"class":483},[152,69293,69294,69296,69298],{"class":281,"line":18430},[152,69295,56744],{"class":483},[152,69297,698],{"class":52637},[152,69299,52644],{"class":483},[152,69301,69302,69304,69306],{"class":281,"line":18435},[152,69303,53113],{"class":483},[152,69305,52948],{"class":52637},[152,69307,52644],{"class":483},[152,69309,69310,69312,69314,69316,69318,69320],{"class":281,"line":18441},[152,69311,52678],{"class":483},[152,69313,52948],{"class":52637},[152,69315,54823],{"class":285},[152,69317,1864],{"class":483},[152,69319,65721],{"class":289},[152,69321,52644],{"class":483},[152,69323,69324,69326,69328,69330,69332,69334,69336,69338,69340,69342,69344,69346,69348,69350,69352,69354],{"class":281,"line":18446},[152,69325,56571],{"class":483},[152,69327,52948],{"class":52637},[152,69329,54823],{"class":285},[152,69331,1864],{"class":483},[152,69333,65736],{"class":289},[152,69335,62389],{"class":483},[152,69337,401],{"class":52637},[152,69339,56576],{"class":285},[152,69341,1864],{"class":483},[152,69343,65747],{"class":289},[152,69345,56584],{"class":285},[152,69347,1864],{"class":483},[152,69349,9294],{"class":289},[152,69351,65756],{"class":483},[152,69353,52948],{"class":52637},[152,69355,52644],{"class":483},[152,69357,69358,69360,69362,69364,69366,69368,69370,69372,69374,69376,69378,69380,69382,69384,69386,69388],{"class":281,"line":18460},[152,69359,56571],{"class":483},[152,69361,52948],{"class":52637},[152,69363,54823],{"class":285},[152,69365,1864],{"class":483},[152,69367,63960],{"class":289},[152,69369,62389],{"class":483},[152,69371,401],{"class":52637},[152,69373,56576],{"class":285},[152,69375,1864],{"class":483},[152,69377,65783],{"class":289},[152,69379,56584],{"class":285},[152,69381,1864],{"class":483},[152,69383,9294],{"class":289},[152,69385,65756],{"class":483},[152,69387,52948],{"class":52637},[152,69389,52644],{"class":483},[152,69391,69392,69394,69396,69398,69400,69402,69404,69406,69408,69410,69412,69414,69416,69418,69420,69422],{"class":281,"line":18465},[152,69393,56571],{"class":483},[152,69395,52948],{"class":52637},[152,69397,54823],{"class":285},[152,69399,1864],{"class":483},[152,69401,63960],{"class":289},[152,69403,62389],{"class":483},[152,69405,401],{"class":52637},[152,69407,56576],{"class":285},[152,69409,1864],{"class":483},[152,69411,65818],{"class":289},[152,69413,56584],{"class":285},[152,69415,1864],{"class":483},[152,69417,9294],{"class":289},[152,69419,65756],{"class":483},[152,69421,52948],{"class":52637},[152,69423,52644],{"class":483},[152,69425,69426,69428,69430,69432,69434,69436,69438,69440,69442,69444,69446,69448,69450,69452,69454,69456],{"class":281,"line":18470},[152,69427,56571],{"class":483},[152,69429,52948],{"class":52637},[152,69431,54823],{"class":285},[152,69433,1864],{"class":483},[152,69435,63960],{"class":289},[152,69437,62389],{"class":483},[152,69439,401],{"class":52637},[152,69441,56576],{"class":285},[152,69443,1864],{"class":483},[152,69445,65853],{"class":289},[152,69447,56584],{"class":285},[152,69449,1864],{"class":483},[152,69451,9294],{"class":289},[152,69453,65756],{"class":483},[152,69455,52948],{"class":52637},[152,69457,52644],{"class":483},[152,69459,69460,69462,69464,69466,69468,69470,69472,69474,69476,69478,69480,69482,69484,69486,69488,69490],{"class":281,"line":18484},[152,69461,56571],{"class":483},[152,69463,52948],{"class":52637},[152,69465,54823],{"class":285},[152,69467,1864],{"class":483},[152,69469,63960],{"class":289},[152,69471,62389],{"class":483},[152,69473,401],{"class":52637},[152,69475,56576],{"class":285},[152,69477,1864],{"class":483},[152,69479,65888],{"class":289},[152,69481,56584],{"class":285},[152,69483,1864],{"class":483},[152,69485,9294],{"class":289},[152,69487,65756],{"class":483},[152,69489,52948],{"class":52637},[152,69491,52644],{"class":483},[152,69493,69494,69496,69498],{"class":281,"line":18496},[152,69495,53113],{"class":483},[152,69497,52948],{"class":52637},[152,69499,52644],{"class":483},[152,69501,69502,69504,69506],{"class":281,"line":18501},[152,69503,53754],{"class":483},[152,69505,52948],{"class":52637},[152,69507,52644],{"class":483},[152,69509,69510,69512,69514],{"class":281,"line":18514},[152,69511,53481],{"class":483},[152,69513,53150],{"class":52637},[152,69515,52644],{"class":483},[152,69517,69518],{"class":281,"line":18519},[152,69519,69520],{"class":866},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[152,69522,69523],{"class":281,"line":18524},[152,69524,69525],{"class":866},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[152,69527,69528,69530,69532,69534,69536,69538,69540,69543],{"class":281,"line":18529},[152,69529,12837],{"class":476},[152,69531,62629],{"class":293},[152,69533,15180],{"class":476},[152,69535,55733],{"class":483},[152,69537,55736],{"class":285},[152,69539,1819],{"class":483},[152,69541,69542],{"class":289},"'.tab-nav ul'",[152,69544,1825],{"class":483},[152,69546,69547],{"class":281,"line":18542},[152,69548,69549],{"class":866},"    \u002F\u002F 2.添加事件\n",[152,69551,69552,69554,69556,69558,69560,69562,69564,69566,69568],{"class":281,"line":18547},[152,69553,68291],{"class":483},[152,69555,59150],{"class":285},[152,69557,1819],{"class":483},[152,69559,59155],{"class":289},[152,69561,14051],{"class":483},[152,69563,55786],{"class":476},[152,69565,3322],{"class":483},[152,69567,1891],{"class":6858},[152,69569,14058],{"class":483},[152,69571,69572,69574,69576],{"class":281,"line":33970},[152,69573,59581],{"class":483},[152,69575,68347],{"class":285},[152,69577,68350],{"class":483},[152,69579,69580],{"class":281,"line":33976},[152,69581,69582],{"class":866},"      \u002F\u002Fe.targer是我们点击的对象\n",[152,69584,69585,69587,69589,69591,69594],{"class":281,"line":33982},[152,69586,55817],{"class":476},[152,69588,68371],{"class":483},[152,69590,55823],{"class":476},[152,69592,69593],{"class":289}," 'A'",[152,69595,14058],{"class":483},[152,69597,69598,69600,69602,69604,69607,69609,69611,69613,69615],{"class":281,"line":33988},[152,69599,53262],{"class":483},[152,69601,55736],{"class":285},[152,69603,1819],{"class":483},[152,69605,69606],{"class":289},"'.active'",[152,69608,58340],{"class":483},[152,69610,58343],{"class":285},[152,69612,1819],{"class":483},[152,69614,66051],{"class":289},[152,69616,1825],{"class":483},[152,69618,69619,69622,69624,69626,69628],{"class":281,"line":33994},[152,69620,69621],{"class":483},"        e.target.classList.",[152,69623,6976],{"class":285},[152,69625,1819],{"class":483},[152,69627,66051],{"class":289},[152,69629,1825],{"class":483},[152,69631,69632],{"class":281,"line":34005},[152,69633,307],{"emptyLinePlaceholder":306},[152,69635,69636],{"class":281,"line":34011},[152,69637,69638],{"class":866},"        \u002F\u002F 下面大盒子模块\n",[152,69640,69641],{"class":281,"line":34031},[152,69642,69643],{"class":866},"        \u002F\u002F console.log(e.target.dataset.id)\n",[152,69645,69646,69648,69650,69652,69654],{"class":281,"line":34037},[152,69647,62607],{"class":476},[152,69649,4675],{"class":293},[152,69651,15180],{"class":476},[152,69653,46903],{"class":476},[152,69655,69656],{"class":483},"e.target.dataset.id\n",[152,69658,69659,69661,69663,69665,69667,69669,69671,69673,69675],{"class":281,"line":34048},[152,69660,53262],{"class":483},[152,69662,55736],{"class":285},[152,69664,1819],{"class":483},[152,69666,66099],{"class":289},[152,69668,58340],{"class":483},[152,69670,58343],{"class":285},[152,69672,1819],{"class":483},[152,69674,66051],{"class":289},[152,69676,1825],{"class":483},[152,69678,69679,69681,69683,69685,69687,69689,69691,69693,69695,69697,69699,69701,69703],{"class":281,"line":34054},[152,69680,53262],{"class":483},[152,69682,55736],{"class":285},[152,69684,1819],{"class":483},[152,69686,66125],{"class":289},[152,69688,2249],{"class":483},[152,69690,46903],{"class":476},[152,69692,26729],{"class":293},[152,69694,58369],{"class":289},[152,69696,58340],{"class":483},[152,69698,6976],{"class":285},[152,69700,1819],{"class":483},[152,69702,66051],{"class":289},[152,69704,1825],{"class":483},[152,69706,69707],{"class":281,"line":34060},[152,69708,307],{"emptyLinePlaceholder":306},[152,69710,69711],{"class":281,"line":34066},[152,69712,53735],{"class":483},[152,69714,69715],{"class":281,"line":34072},[152,69716,34798],{"class":483},[152,69718,69719,69721,69723],{"class":281,"line":34078},[152,69720,53754],{"class":483},[152,69722,53150],{"class":52637},[152,69724,52644],{"class":483},[152,69726,69727,69729,69731],{"class":281,"line":34084},[152,69728,53122],{"class":483},[152,69730,53137],{"class":52637},[152,69732,52644],{"class":483},[152,69734,69735],{"class":281,"line":34090},[152,69736,307],{"emptyLinePlaceholder":306},[152,69738,69739,69741,69743],{"class":281,"line":34110},[152,69740,53122],{"class":483},[152,69742,51972],{"class":52637},[152,69744,52644],{"class":483},[14,69746,69748],{"id":69747},"_333-页面加载事件","3.3.3 页面加载事件",[416,69750,69751],{},[419,69752,69753],{},"load",[19,69755,69756],{},[401,69757],{"alt":275,"src":69758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,69760,69761],{},"window代表整个窗口，比document还要大",[19,69763,69764],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,69766,69767],{},"img.addEventListener('load', function () {",[19,69769,69770],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,69772,53801],{},[416,69774,69775],{"start":303},[419,69776,69777],{},"DOMContentLoaded",[19,69779,69780],{},[401,69781],{"alt":275,"src":69782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,69784,69785],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[14,69787,69789],{"id":69788},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,69791,69792],{},[401,69793],{"alt":275,"src":69794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,69796,69797],{},[401,69798],{"alt":275,"src":69799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,69801,69802],{},[401,69803],{"alt":275,"src":69804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,69806,69807],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,69809,69810],{},"获得的是数字型数据，不带单位",[19,69812,69813],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,69815,69816],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,69818,69819],{},"它是通过document.documentElement来获取",[19,69821,69822],{},[401,69823],{"alt":275,"src":69824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,69826,69827],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[14,69829,69831],{"id":69830},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,69833,69834],{},[401,69835],{"alt":275,"src":69836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,69838,69839],{},[401,69840],{"alt":275,"src":69841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[14,69843,69845],{"id":69844},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,69847,69848],{},[401,69849],{"alt":275,"src":69850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,69852,69853],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,69855,69856],{},[401,69857],{"alt":275,"src":69858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69860,69861],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69863,69864],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69866,69867],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69869,69870],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69872,69873],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69875,69876],{},[401,69877],{"alt":275,"src":69878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69880,69881],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69883,69884],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69886,69887],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69889,69890],{},"e.pageX-box.getBoundingClientRect()",[14,69892,69894],{"id":69893},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69896,69897],{},[401,69898],{"alt":275,"src":69899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69901,69902],{},"这个是相对于视口来说的，它是个方法，不是属性值",[14,69904,69906],{"id":69905},"_338-总结","3.3.8 总结",[19,69908,69909],{},[401,69910],{"alt":275,"src":69911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69913,69914],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69916,69917],{},"修改盒子的宽高只能通过width和height来实现",[14,69919,69921],{"id":69920},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[270,69923,69925],{"className":51970,"code":69924,"language":51972,"meta":275,"style":275},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[277,69926,69927,69932,69937,69942,69947],{"__ignoreMap":275},[152,69928,69929],{"class":281,"line":282},[152,69930,69931],{"class":483},"\u002F* 页面滑动 *\u002F\n",[152,69933,69934],{"class":281,"line":303},[152,69935,69936],{"class":483},"html {\n",[152,69938,69939],{"class":281,"line":310},[152,69940,69941],{"class":483},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[152,69943,69944],{"class":281,"line":324},[152,69945,69946],{"class":483},"  scroll-behavior: smooth;\n",[152,69948,69949],{"class":281,"line":329},[152,69950,3236],{"class":483},[19,69952,69953],{},"默认是auto",[14,69955,69957],{"id":69956},"_3310-日期对象","3.3.10 日期对象",[262,69959,69961],{"id":69960},"_33101-实例化","3.3.10.1 实例化",[19,69963,69964],{},[401,69965],{"alt":275,"src":69966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[262,69968,69970],{"id":69969},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69972,69973],{},[401,69974],{"alt":275,"src":69975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69977,69978],{},"月份+1",[19,69980,69981],{},"老外认为第一天为0，星期天",[19,69983,69984],{},"方法使用的时候必须要跟括号",[19,69986,69987],{},"快速获得日期",[19,69989,69990],{},"\u002F\u002F 得到年月日",[19,69992,69993],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69995,69996],{},"\u002F\u002F 得到当地日期",[19,69998,69999],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70001,70002],{},"\u002F\u002F 得到当地时间",[19,70004,70005],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70007,70008],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70010,70011],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53150,70013,70014],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[19,70016,70017],{},"学会去封装函数！",[262,70019,70021],{"id":70020},"_33103-时间戳","3.3.10.3 时间戳",[19,70023,70024],{},[401,70025],{"alt":275,"src":70026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70028,70029],{},[401,70030],{"alt":275,"src":70031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70033,70034],{},"三种方法记住一个就可以",[14,70036,70038],{"id":70037},"_3311-节点操作","3.3.11 节点操作",[262,70040,70042],{"id":70041},"_33111-dom节点","3.3.11.1 DOM节点",[19,70044,70045],{},[401,70046],{"alt":275,"src":70047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70049,70050],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[262,70052,70054],{"id":70053},"_33112-查找节点","3.3.11.2 查找节点",[19,70056,70057],{},"前边的document.querySelector()是获取的元素",[19,70059,70060],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70062,70063],{},[401,70064],{"alt":275,"src":70065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[416,70067,70068],{},[419,70069,70070],{},"父节点",[19,70072,70073],{},[401,70074],{"alt":275,"src":70075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[416,70077,70078],{"start":303},[419,70079,70080],{},"子节点",[19,70082,70083],{},[401,70084],{"alt":275,"src":70085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70087,70088],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70090,70091],{},"children获得的是伪数组，是亲儿子",[416,70093,70094],{"start":310},[419,70095,70096],{},"兄弟节点",[19,70098,70099],{},[401,70100],{"alt":275,"src":70101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[262,70103,70105],{"id":70104},"_33113-增加节点","3.3.11.3 增加节点",[19,70107,70108],{},[401,70109],{"alt":275,"src":70110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70112,70113],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70115,70116],{},[401,70117],{"alt":275,"src":70118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70120,70121],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70123,70124],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70126,70127],{},"例：",[53150,70129,70130],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[19,70132,70133],{},[401,70134],{"alt":275,"src":70135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70137,70138],{},"false只克隆标签，里边的内容不会克隆过来",[270,70140,70142],{"className":51970,"code":70141,"language":51972,"meta":275,"style":275},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[277,70143,70144],{"__ignoreMap":275},[152,70145,70146],{"class":281,"line":282},[152,70147,70141],{"class":483},[262,70149,70151],{"id":70150},"_33114-删除节点","3.3.11.4 删除节点",[19,70153,70154],{},[401,70155],{"alt":275,"src":70156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70158,70159],{},"父亲删儿子",[19,70161,70162],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[14,70164,70166],{"id":70165},"_3312-m端事件","3.3.12 M端事件",[19,70168,70169],{},"M端就是移动端",[19,70171,70172],{},[401,70173],{"alt":275,"src":70174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[14,70176,70178],{"id":70177},"_3313-插件","3.3.13 插件",[19,70180,70181],{},"要熟悉官网！！！",[19,70183,70184],{},[69,70185,70186],{"href":70186,"rel":70187},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[245],[19,70189,70190],{},[69,70191,70192],{"href":70192,"rel":70193},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[245],[14,70195,70197],{"id":70196},"_3314-学生信息表","3.3.14 学生信息表",[416,70199,70200,70203,70206,70209,70212,70215,70218,70221],{},[419,70201,70202],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[419,70204,70205],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[419,70207,70208],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[419,70210,70211],{},"用好表单元素自带的属性，value,name等",[419,70213,70214],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[419,70216,70217],{},"不要忘记事件对象",[419,70219,70220],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[419,70222,70223],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70225,70226],{},"结构：",[270,70228,70230],{"className":51970,"code":70229,"language":51972,"meta":275,"style":275},"\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",[277,70231,70232,70242,70256,70260,70268,70282,70302,70323,70336,70360,70368,70372,70380,70393,70414,70442,70470,70475,70497,70517,70536,70544,70572,70594,70614,70634,70654,70674,70694,70702,70722,70730,70734,70747,70755,70763,70771,70784,70797,70810,70823,70836,70849,70862,70870,70878,70886,70891,70896,70901,70906,70911,70916,70921,70926,70931,70936,70941,70946,70951,70959,70967,70975,70979,70999,71018,71038,71058,71078,71098,71102,71107,71127,71132,71142,71147,71152,71172,71194,71199,71209,71213,71217,71222,71227,71256,71270,71285,71289,71293,71297,71302,71313,71326,71331,71336,71341,71346,71351,71355,71360,71365,71374,71379,71384,71396,71401,71408,71412,71417,71427,71432,71442,71447,71475,71496,71506,71526,71544,71561,71578,71595,71612,71616,71626,71631,71636,71641,71652,71656,71660,71664,71669,71674,71695,71707,71712,71717,71722,71736,71741,71748,71752,71756,71764,71768,71776,71780],{"__ignoreMap":275},[152,70233,70234,70236,70238,70240],{"class":281,"line":282},[152,70235,52634],{"class":483},[152,70237,52638],{"class":52637},[152,70239,52641],{"class":285},[152,70241,52644],{"class":483},[152,70243,70244,70246,70248,70250,70252,70254],{"class":281,"line":303},[152,70245,844],{"class":483},[152,70247,51972],{"class":52637},[152,70249,52653],{"class":285},[152,70251,1864],{"class":483},[152,70253,52658],{"class":289},[152,70255,52644],{"class":483},[152,70257,70258],{"class":281,"line":310},[152,70259,307],{"emptyLinePlaceholder":306},[152,70261,70262,70264,70266],{"class":281,"line":324},[152,70263,844],{"class":483},[152,70265,52671],{"class":52637},[152,70267,52644],{"class":483},[152,70269,70270,70272,70274,70276,70278,70280],{"class":281,"line":329},[152,70271,53481],{"class":483},[152,70273,52681],{"class":52637},[152,70275,52684],{"class":285},[152,70277,1864],{"class":483},[152,70279,52689],{"class":289},[152,70281,60464],{"class":483},[152,70283,70284,70286,70288,70290,70292,70294,70296,70298,70300],{"class":281,"line":343},[152,70285,53481],{"class":483},[152,70287,52681],{"class":52637},[152,70289,16535],{"class":285},[152,70291,1864],{"class":483},[152,70293,52728],{"class":289},[152,70295,52708],{"class":285},[152,70297,1864],{"class":483},[152,70299,52735],{"class":289},[152,70301,60464],{"class":483},[152,70303,70304,70306,70308,70310,70312,70314,70316,70318,70321],{"class":281,"line":348},[152,70305,53481],{"class":483},[152,70307,52681],{"class":52637},[152,70309,52700],{"class":285},[152,70311,1864],{"class":483},[152,70313,52705],{"class":289},[152,70315,52708],{"class":285},[152,70317,1864],{"class":483},[152,70319,70320],{"class":289},"\"ie=edge\"",[152,70322,60464],{"class":483},[152,70324,70325,70327,70329,70332,70334],{"class":281,"line":362},[152,70326,53481],{"class":483},[152,70328,52744],{"class":52637},[152,70330,70331],{"class":483},">学生信息管理\u003C\u002F",[152,70333,52744],{"class":52637},[152,70335,52644],{"class":483},[152,70337,70338,70340,70343,70346,70348,70351,70353,70355,70358],{"class":281,"line":367},[152,70339,53481],{"class":483},[152,70341,70342],{"class":52637},"link",[152,70344,70345],{"class":285}," rel",[152,70347,1864],{"class":483},[152,70349,70350],{"class":289},"\"stylesheet\"",[152,70352,62394],{"class":285},[152,70354,1864],{"class":483},[152,70356,70357],{"class":289},"\"css\u002Findex.css\"",[152,70359,60464],{"class":483},[152,70361,70362,70364,70366],{"class":281,"line":381},[152,70363,53122],{"class":483},[152,70365,52671],{"class":52637},[152,70367,52644],{"class":483},[152,70369,70370],{"class":281,"line":386},[152,70371,307],{"emptyLinePlaceholder":306},[152,70373,70374,70376,70378],{"class":281,"line":932},[152,70375,844],{"class":483},[152,70377,53137],{"class":52637},[152,70379,52644],{"class":483},[152,70381,70382,70384,70386,70389,70391],{"class":281,"line":942},[152,70383,53481],{"class":483},[152,70385,10],{"class":52637},[152,70387,70388],{"class":483},">新增学员\u003C\u002F",[152,70390,10],{"class":52637},[152,70392,52644],{"class":483},[152,70394,70395,70397,70399,70401,70403,70405,70408,70410,70412],{"class":281,"line":949},[152,70396,53481],{"class":483},[152,70398,67962],{"class":52637},[152,70400,54823],{"class":285},[152,70402,1864],{"class":483},[152,70404,64001],{"class":289},[152,70406,70407],{"class":285}," autocomplete",[152,70409,1864],{"class":483},[152,70411,33113],{"class":289},[152,70413,52644],{"class":483},[152,70415,70416,70419,70421,70423,70425,70427,70429,70431,70434,70436,70438,70440],{"class":281,"line":954},[152,70417,70418],{"class":483},"    姓名：\u003C",[152,70420,55158],{"class":52637},[152,70422,55161],{"class":285},[152,70424,1864],{"class":483},[152,70426,64036],{"class":289},[152,70428,54823],{"class":285},[152,70430,1864],{"class":483},[152,70432,70433],{"class":289},"\"uname\"",[152,70435,16535],{"class":285},[152,70437,1864],{"class":483},[152,70439,70433],{"class":289},[152,70441,60464],{"class":483},[152,70443,70444,70447,70449,70451,70453,70455,70457,70459,70462,70464,70466,70468],{"class":281,"line":959},[152,70445,70446],{"class":483},"    年龄：\u003C",[152,70448,55158],{"class":52637},[152,70450,55161],{"class":285},[152,70452,1864],{"class":483},[152,70454,64036],{"class":289},[152,70456,54823],{"class":285},[152,70458,1864],{"class":483},[152,70460,70461],{"class":289},"\"age\"",[152,70463,16535],{"class":285},[152,70465,1864],{"class":483},[152,70467,70461],{"class":289},[152,70469,60464],{"class":483},[152,70471,70472],{"class":281,"line":970},[152,70473,70474],{"class":483},"    性别:\n",[152,70476,70477,70479,70482,70484,70486,70489,70491,70493,70495],{"class":281,"line":979},[152,70478,52678],{"class":483},[152,70480,70481],{"class":52637},"select",[152,70483,16535],{"class":285},[152,70485,1864],{"class":483},[152,70487,70488],{"class":289},"\"gender\"",[152,70490,54823],{"class":285},[152,70492,1864],{"class":483},[152,70494,70488],{"class":289},[152,70496,52644],{"class":483},[152,70498,70499,70501,70504,70506,70508,70510,70513,70515],{"class":281,"line":989},[152,70500,56571],{"class":483},[152,70502,70503],{"class":52637},"option",[152,70505,67988],{"class":285},[152,70507,1864],{"class":483},[152,70509,11577],{"class":289},[152,70511,70512],{"class":483},">男\u003C\u002F",[152,70514,70503],{"class":52637},[152,70516,52644],{"class":483},[152,70518,70519,70521,70523,70525,70527,70529,70532,70534],{"class":281,"line":996},[152,70520,56571],{"class":483},[152,70522,70503],{"class":52637},[152,70524,67988],{"class":285},[152,70526,1864],{"class":483},[152,70528,11646],{"class":289},[152,70530,70531],{"class":483},">女\u003C\u002F",[152,70533,70503],{"class":52637},[152,70535,52644],{"class":483},[152,70537,70538,70540,70542],{"class":281,"line":1001},[152,70539,53113],{"class":483},[152,70541,70481],{"class":52637},[152,70543,52644],{"class":483},[152,70545,70546,70549,70551,70553,70555,70557,70559,70561,70564,70566,70568,70570],{"class":281,"line":1006},[152,70547,70548],{"class":483},"    薪资：\u003C",[152,70550,55158],{"class":52637},[152,70552,55161],{"class":285},[152,70554,1864],{"class":483},[152,70556,64036],{"class":289},[152,70558,54823],{"class":285},[152,70560,1864],{"class":483},[152,70562,70563],{"class":289},"\"salary\"",[152,70565,16535],{"class":285},[152,70567,1864],{"class":483},[152,70569,70563],{"class":289},[152,70571,60464],{"class":483},[152,70573,70574,70577,70579,70581,70583,70586,70588,70590,70592],{"class":281,"line":1018},[152,70575,70576],{"class":483},"    就业城市：\u003C",[152,70578,70481],{"class":52637},[152,70580,16535],{"class":285},[152,70582,1864],{"class":483},[152,70584,70585],{"class":289},"\"city\"",[152,70587,54823],{"class":285},[152,70589,1864],{"class":483},[152,70591,70585],{"class":289},[152,70593,52644],{"class":483},[152,70595,70596,70598,70600,70602,70604,70607,70610,70612],{"class":281,"line":1027},[152,70597,56571],{"class":483},[152,70599,70503],{"class":52637},[152,70601,67988],{"class":285},[152,70603,1864],{"class":483},[152,70605,70606],{"class":289},"\"北京\"",[152,70608,70609],{"class":483},">北京\u003C\u002F",[152,70611,70503],{"class":52637},[152,70613,52644],{"class":483},[152,70615,70616,70618,70620,70622,70624,70627,70630,70632],{"class":281,"line":1037},[152,70617,56571],{"class":483},[152,70619,70503],{"class":52637},[152,70621,67988],{"class":285},[152,70623,1864],{"class":483},[152,70625,70626],{"class":289},"\"上海\"",[152,70628,70629],{"class":483},">上海\u003C\u002F",[152,70631,70503],{"class":52637},[152,70633,52644],{"class":483},[152,70635,70636,70638,70640,70642,70644,70647,70650,70652],{"class":281,"line":1044},[152,70637,56571],{"class":483},[152,70639,70503],{"class":52637},[152,70641,67988],{"class":285},[152,70643,1864],{"class":483},[152,70645,70646],{"class":289},"\"广州\"",[152,70648,70649],{"class":483},">广州\u003C\u002F",[152,70651,70503],{"class":52637},[152,70653,52644],{"class":483},[152,70655,70656,70658,70660,70662,70664,70667,70670,70672],{"class":281,"line":1049},[152,70657,56571],{"class":483},[152,70659,70503],{"class":52637},[152,70661,67988],{"class":285},[152,70663,1864],{"class":483},[152,70665,70666],{"class":289},"\"深圳\"",[152,70668,70669],{"class":483},">深圳\u003C\u002F",[152,70671,70503],{"class":52637},[152,70673,52644],{"class":483},[152,70675,70676,70678,70680,70682,70684,70687,70690,70692],{"class":281,"line":1054},[152,70677,56571],{"class":483},[152,70679,70503],{"class":52637},[152,70681,67988],{"class":285},[152,70683,1864],{"class":483},[152,70685,70686],{"class":289},"\"曹县\"",[152,70688,70689],{"class":483},">曹县\u003C\u002F",[152,70691,70503],{"class":52637},[152,70693,52644],{"class":483},[152,70695,70696,70698,70700],{"class":281,"line":1065},[152,70697,53113],{"class":483},[152,70699,70481],{"class":52637},[152,70701,52644],{"class":483},[152,70703,70704,70706,70708,70710,70712,70715,70718,70720],{"class":281,"line":1074},[152,70705,52678],{"class":483},[152,70707,55224],{"class":52637},[152,70709,54823],{"class":285},[152,70711,1864],{"class":483},[152,70713,70714],{"class":289},"\"add\"",[152,70716,70717],{"class":483},">录入\u003C\u002F",[152,70719,55224],{"class":52637},[152,70721,52644],{"class":483},[152,70723,70724,70726,70728],{"class":281,"line":1084},[152,70725,53754],{"class":483},[152,70727,67962],{"class":52637},[152,70729,52644],{"class":483},[152,70731,70732],{"class":281,"line":1091},[152,70733,307],{"emptyLinePlaceholder":306},[152,70735,70736,70738,70740,70743,70745],{"class":281,"line":1096},[152,70737,53481],{"class":483},[152,70739,10],{"class":52637},[152,70741,70742],{"class":483},">就业榜\u003C\u002F",[152,70744,10],{"class":52637},[152,70746,52644],{"class":483},[152,70748,70749,70751,70753],{"class":281,"line":1101},[152,70750,53481],{"class":483},[152,70752,23],{"class":52637},[152,70754,52644],{"class":483},[152,70756,70757,70759,70761],{"class":281,"line":1112},[152,70758,52678],{"class":483},[152,70760,26],{"class":52637},[152,70762,52644],{"class":483},[152,70764,70765,70767,70769],{"class":281,"line":1121},[152,70766,56571],{"class":483},[152,70768,29],{"class":52637},[152,70770,52644],{"class":483},[152,70772,70773,70775,70777,70780,70782],{"class":281,"line":1131},[152,70774,56639],{"class":483},[152,70776,32],{"class":52637},[152,70778,70779],{"class":483},">序号\u003C\u002F",[152,70781,32],{"class":52637},[152,70783,52644],{"class":483},[152,70785,70786,70788,70790,70793,70795],{"class":281,"line":1138},[152,70787,56639],{"class":483},[152,70789,32],{"class":52637},[152,70791,70792],{"class":483},">姓名\u003C\u002F",[152,70794,32],{"class":52637},[152,70796,52644],{"class":483},[152,70798,70799,70801,70803,70806,70808],{"class":281,"line":1143},[152,70800,56639],{"class":483},[152,70802,32],{"class":52637},[152,70804,70805],{"class":483},">年龄\u003C\u002F",[152,70807,32],{"class":52637},[152,70809,52644],{"class":483},[152,70811,70812,70814,70816,70819,70821],{"class":281,"line":1148},[152,70813,56639],{"class":483},[152,70815,32],{"class":52637},[152,70817,70818],{"class":483},">性别\u003C\u002F",[152,70820,32],{"class":52637},[152,70822,52644],{"class":483},[152,70824,70825,70827,70829,70832,70834],{"class":281,"line":1159},[152,70826,56639],{"class":483},[152,70828,32],{"class":52637},[152,70830,70831],{"class":483},">薪资\u003C\u002F",[152,70833,32],{"class":52637},[152,70835,52644],{"class":483},[152,70837,70838,70840,70842,70845,70847],{"class":281,"line":1168},[152,70839,56639],{"class":483},[152,70841,32],{"class":52637},[152,70843,70844],{"class":483},">就业城市\u003C\u002F",[152,70846,32],{"class":52637},[152,70848,52644],{"class":483},[152,70850,70851,70853,70855,70858,70860],{"class":281,"line":1178},[152,70852,56639],{"class":483},[152,70854,32],{"class":52637},[152,70856,70857],{"class":483},">操作\u003C\u002F",[152,70859,32],{"class":52637},[152,70861,52644],{"class":483},[152,70863,70864,70866,70868],{"class":281,"line":1185},[152,70865,56744],{"class":483},[152,70867,29],{"class":52637},[152,70869,52644],{"class":483},[152,70871,70872,70874,70876],{"class":281,"line":1190},[152,70873,53113],{"class":483},[152,70875,26],{"class":52637},[152,70877,52644],{"class":483},[152,70879,70880,70882,70884],{"class":281,"line":1195},[152,70881,52678],{"class":483},[152,70883,43],{"class":52637},[152,70885,52644],{"class":483},[152,70887,70888],{"class":281,"line":1206},[152,70889,70890],{"class":866},"      \u003C!-- \n",[152,70892,70893],{"class":281,"line":1215},[152,70894,70895],{"class":866},"        \u003Ctr>\n",[152,70897,70898],{"class":281,"line":1225},[152,70899,70900],{"class":866},"          \u003Ctd>1001\u003C\u002Ftd>\n",[152,70902,70903],{"class":281,"line":1232},[152,70904,70905],{"class":866},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[152,70907,70908],{"class":281,"line":1237},[152,70909,70910],{"class":866},"          \u003Ctd>19\u003C\u002Ftd>\n",[152,70912,70913],{"class":281,"line":1242},[152,70914,70915],{"class":866},"          \u003Ctd>男\u003C\u002Ftd>\n",[152,70917,70918],{"class":281,"line":1253},[152,70919,70920],{"class":866},"          \u003Ctd>15000\u003C\u002Ftd>\n",[152,70922,70923],{"class":281,"line":1262},[152,70924,70925],{"class":866},"          \u003Ctd>上海\u003C\u002Ftd>\n",[152,70927,70928],{"class":281,"line":1272},[152,70929,70930],{"class":866},"          \u003Ctd>\n",[152,70932,70933],{"class":281,"line":1279},[152,70934,70935],{"class":866},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[152,70937,70938],{"class":281,"line":1284},[152,70939,70940],{"class":866},"          \u003C\u002Ftd>\n",[152,70942,70943],{"class":281,"line":1289},[152,70944,70945],{"class":866},"        \u003C\u002Ftr> \n",[152,70947,70948],{"class":281,"line":1301},[152,70949,70950],{"class":866},"        -->\n",[152,70952,70953,70955,70957],{"class":281,"line":1310},[152,70954,53113],{"class":483},[152,70956,43],{"class":52637},[152,70958,52644],{"class":483},[152,70960,70961,70963,70965],{"class":281,"line":1320},[152,70962,53754],{"class":483},[152,70964,23],{"class":52637},[152,70966,52644],{"class":483},[152,70968,70969,70971,70973],{"class":281,"line":1327},[152,70970,53481],{"class":483},[152,70972,53150],{"class":52637},[152,70974,52644],{"class":483},[152,70976,70977],{"class":281,"line":11528},[152,70978,61295],{"class":866},[152,70980,70981,70983,70986,70988,70990,70992,70994,70997],{"class":281,"line":11536},[152,70982,12837],{"class":476},[152,70984,70985],{"class":293}," uname",[152,70987,15180],{"class":476},[152,70989,55733],{"class":483},[152,70991,55736],{"class":285},[152,70993,1819],{"class":483},[152,70995,70996],{"class":289},"'.uname'",[152,70998,1825],{"class":483},[152,71000,71001,71003,71005,71007,71009,71011,71013,71016],{"class":281,"line":11541},[152,71002,12837],{"class":476},[152,71004,17304],{"class":293},[152,71006,15180],{"class":476},[152,71008,55733],{"class":483},[152,71010,55736],{"class":285},[152,71012,1819],{"class":483},[152,71014,71015],{"class":289},"'.age'",[152,71017,1825],{"class":483},[152,71019,71020,71022,71025,71027,71029,71031,71033,71036],{"class":281,"line":18219},[152,71021,12837],{"class":476},[152,71023,71024],{"class":293}," gender",[152,71026,15180],{"class":476},[152,71028,55733],{"class":483},[152,71030,55736],{"class":285},[152,71032,1819],{"class":483},[152,71034,71035],{"class":289},"'.gender'",[152,71037,1825],{"class":483},[152,71039,71040,71042,71045,71047,71049,71051,71053,71056],{"class":281,"line":18225},[152,71041,12837],{"class":476},[152,71043,71044],{"class":293}," salary",[152,71046,15180],{"class":476},[152,71048,55733],{"class":483},[152,71050,55736],{"class":285},[152,71052,1819],{"class":483},[152,71054,71055],{"class":289},"'.salary'",[152,71057,1825],{"class":483},[152,71059,71060,71062,71065,71067,71069,71071,71073,71076],{"class":281,"line":18248},[152,71061,12837],{"class":476},[152,71063,71064],{"class":293}," city",[152,71066,15180],{"class":476},[152,71068,55733],{"class":483},[152,71070,55736],{"class":285},[152,71072,1819],{"class":483},[152,71074,71075],{"class":289},"'.city'",[152,71077,1825],{"class":483},[152,71079,71080,71082,71085,71087,71089,71091,71093,71096],{"class":281,"line":18254},[152,71081,12837],{"class":476},[152,71083,71084],{"class":293}," tbody",[152,71086,15180],{"class":476},[152,71088,55733],{"class":483},[152,71090,55736],{"class":285},[152,71092,1819],{"class":483},[152,71094,71095],{"class":289},"'tbody'",[152,71097,1825],{"class":483},[152,71099,71100],{"class":281,"line":18277},[152,71101,307],{"emptyLinePlaceholder":306},[152,71103,71104],{"class":281,"line":18291},[152,71105,71106],{"class":866},"    \u002F\u002F 获取所有带有name属性的元素\n",[152,71108,71109,71111,71114,71116,71118,71120,71122,71125],{"class":281,"line":18311},[152,71110,12837],{"class":476},[152,71112,71113],{"class":293}," items",[152,71115,15180],{"class":476},[152,71117,55733],{"class":483},[152,71119,57018],{"class":285},[152,71121,1819],{"class":483},[152,71123,71124],{"class":289},"'[name]'",[152,71126,1825],{"class":483},[152,71128,71129],{"class":281,"line":18317},[152,71130,71131],{"class":866},"    \u002F\u002F 声明一个空的数组\n",[152,71133,71134,71136,71138,71140],{"class":281,"line":18328},[152,71135,12837],{"class":476},[152,71137,59032],{"class":293},[152,71139,15180],{"class":476},[152,71141,53175],{"class":483},[152,71143,71144],{"class":281,"line":18351},[152,71145,71146],{"class":866},"    \u002F\u002F 1.录入模块\n",[152,71148,71149],{"class":281,"line":18373},[152,71150,71151],{"class":866},"    \u002F\u002F 1.1这是一个表单提交事件\n",[152,71153,71154,71156,71159,71161,71163,71165,71167,71170],{"class":281,"line":18378},[152,71155,12837],{"class":476},[152,71157,71158],{"class":293}," info",[152,71160,15180],{"class":476},[152,71162,55733],{"class":483},[152,71164,55736],{"class":285},[152,71166,1819],{"class":483},[152,71168,71169],{"class":289},"'.info'",[152,71171,1825],{"class":483},[152,71173,71174,71177,71179,71181,71184,71186,71188,71190,71192],{"class":281,"line":18384},[152,71175,71176],{"class":483},"    info.",[152,71178,59150],{"class":285},[152,71180,1819],{"class":483},[152,71182,71183],{"class":289},"'submit'",[152,71185,14051],{"class":483},[152,71187,55786],{"class":476},[152,71189,3322],{"class":483},[152,71191,1891],{"class":6858},[152,71193,14058],{"class":483},[152,71195,71196],{"class":281,"line":18398},[152,71197,71198],{"class":866},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[152,71200,71201,71204,71207],{"class":281,"line":18411},[152,71202,71203],{"class":483},"      e.",[152,71205,71206],{"class":285},"preventDefault",[152,71208,3627],{"class":483},[152,71210,71211],{"class":281,"line":18416},[152,71212,61349],{"class":866},[152,71214,71215],{"class":281,"line":18430},[152,71216,307],{"emptyLinePlaceholder":306},[152,71218,71219],{"class":281,"line":18435},[152,71220,71221],{"class":866},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[152,71223,71224],{"class":281,"line":18441},[152,71225,71226],{"class":866},"      \u002F\u002F 先遍历循环\n",[152,71228,71229,71231,71233,71235,71237,71239,71241,71243,71245,71248,71250,71252,71254],{"class":281,"line":18446},[152,71230,53621],{"class":476},[152,71232,3322],{"class":483},[152,71234,53184],{"class":476},[152,71236,11070],{"class":483},[152,71238,1864],{"class":476},[152,71240,5735],{"class":293},[152,71242,11077],{"class":483},[152,71244,844],{"class":476},[152,71246,71247],{"class":483}," items.",[152,71249,53305],{"class":293},[152,71251,4857],{"class":483},[152,71253,3943],{"class":476},[152,71255,14058],{"class":483},[152,71257,71258,71260,71263,71265,71268],{"class":281,"line":18460},[152,71259,4147],{"class":476},[152,71261,71262],{"class":483}," (items[i].value ",[152,71264,55823],{"class":476},[152,71266,71267],{"class":289}," ''",[152,71269,14058],{"class":483},[152,71271,71272,71275,71278,71280,71283],{"class":281,"line":18465},[152,71273,71274],{"class":476},"          return",[152,71276,71277],{"class":285}," alert",[152,71279,1819],{"class":483},[152,71281,71282],{"class":289},"'输入内容不能为空'",[152,71284,1825],{"class":483},[152,71286,71287],{"class":281,"line":18470},[152,71288,4179],{"class":483},[152,71290,71291],{"class":281,"line":18484},[152,71292,53735],{"class":483},[152,71294,71295],{"class":281,"line":18496},[152,71296,307],{"emptyLinePlaceholder":306},[152,71298,71299],{"class":281,"line":18501},[152,71300,71301],{"class":866},"      \u002F\u002F 创建新的对象\n",[152,71303,71304,71306,71309,71311],{"class":281,"line":18514},[152,71305,59565],{"class":476},[152,71307,71308],{"class":293}," obj",[152,71310,15180],{"class":476},[152,71312,17187],{"class":483},[152,71314,71315,71318,71320,71322,71324],{"class":281,"line":18519},[152,71316,71317],{"class":483},"        stuID: arr.",[152,71319,53305],{"class":293},[152,71321,46903],{"class":476},[152,71323,26729],{"class":293},[152,71325,32803],{"class":483},[152,71327,71328],{"class":281,"line":18524},[152,71329,71330],{"class":483},"        uname: uname.value,\n",[152,71332,71333],{"class":281,"line":18529},[152,71334,71335],{"class":483},"        age: age.value,\n",[152,71337,71338],{"class":281,"line":18542},[152,71339,71340],{"class":483},"        gender: gender.value,\n",[152,71342,71343],{"class":281,"line":18547},[152,71344,71345],{"class":483},"        salary: salary.value,\n",[152,71347,71348],{"class":281,"line":33970},[152,71349,71350],{"class":483},"        city: city.value\n",[152,71352,71353],{"class":281,"line":33976},[152,71354,53735],{"class":483},[152,71356,71357],{"class":281,"line":33982},[152,71358,71359],{"class":866},"      \u002F\u002F console.log(obj);\n",[152,71361,71362],{"class":281,"line":33988},[152,71363,71364],{"class":866},"      \u002F\u002F 追加到数组里面\n",[152,71366,71367,71369,71371],{"class":281,"line":33994},[152,71368,59344],{"class":483},[152,71370,53221],{"class":285},[152,71372,71373],{"class":483},"(obj)\n",[152,71375,71376],{"class":281,"line":34005},[152,71377,71378],{"class":866},"      \u002F\u002F console.log(arr);\n",[152,71380,71381],{"class":281,"line":34011},[152,71382,71383],{"class":866},"      \u002F\u002F 清空表单  reset重置表单\n",[152,71385,71386,71389,71391,71394],{"class":281,"line":34031},[152,71387,71388],{"class":293},"      this",[152,71390,2366],{"class":483},[152,71392,71393],{"class":285},"reset",[152,71395,3627],{"class":483},[152,71397,71398],{"class":281,"line":34037},[152,71399,71400],{"class":866},"      \u002F\u002F 调用渲染函数\n",[152,71402,71403,71406],{"class":281,"line":34048},[152,71404,71405],{"class":285},"      render",[152,71407,3627],{"class":483},[152,71409,71410],{"class":281,"line":34054},[152,71411,34798],{"class":483},[152,71413,71414],{"class":281,"line":34060},[152,71415,71416],{"class":866},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[152,71418,71419,71422,71425],{"class":281,"line":34066},[152,71420,71421],{"class":476},"    function",[152,71423,71424],{"class":285}," render",[152,71426,12469],{"class":483},[152,71428,71429],{"class":281,"line":34072},[152,71430,71431],{"class":866},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[152,71433,71434,71437,71439],{"class":281,"line":34078},[152,71435,71436],{"class":483},"      tbody.innerHTML ",[152,71438,1864],{"class":476},[152,71440,71441],{"class":289}," ''\n",[152,71443,71444],{"class":281,"line":34084},[152,71445,71446],{"class":866},"      \u002F\u002F 遍历数组\n",[152,71448,71449,71451,71453,71455,71457,71459,71461,71463,71465,71467,71469,71471,71473],{"class":281,"line":34090},[152,71450,53621],{"class":476},[152,71452,3322],{"class":483},[152,71454,53184],{"class":476},[152,71456,11070],{"class":483},[152,71458,1864],{"class":476},[152,71460,5735],{"class":293},[152,71462,11077],{"class":483},[152,71464,844],{"class":476},[152,71466,53302],{"class":483},[152,71468,53305],{"class":293},[152,71470,4857],{"class":483},[152,71472,3943],{"class":476},[152,71474,14058],{"class":483},[152,71476,71477,71479,71482,71484,71486,71489,71491,71494],{"class":281,"line":34110},[152,71478,62607],{"class":476},[152,71480,71481],{"class":293}," tr",[152,71483,15180],{"class":476},[152,71485,55733],{"class":483},[152,71487,71488],{"class":285},"createElement",[152,71490,1819],{"class":483},[152,71492,71493],{"class":289},"'tr'",[152,71495,1825],{"class":483},[152,71497,71498,71501,71503],{"class":281,"line":34116},[152,71499,71500],{"class":483},"        tr.innerHTML ",[152,71502,1864],{"class":476},[152,71504,71505],{"class":289}," `\n",[152,71507,71508,71511,71513,71515,71517,71520,71523],{"class":281,"line":34132},[152,71509,71510],{"class":289},"        \u003Ctd>${",[152,71512,5522],{"class":483},[152,71514,2697],{"class":289},[152,71516,2249],{"class":483},[152,71518,71519],{"class":289},"].",[152,71521,71522],{"class":483},"stuID",[152,71524,71525],{"class":289},"}\u003C\u002Ftd>\n",[152,71527,71528,71531,71533,71535,71537,71539,71542],{"class":281,"line":34138},[152,71529,71530],{"class":289},"          \u003Ctd>${",[152,71532,5522],{"class":483},[152,71534,2697],{"class":289},[152,71536,2249],{"class":483},[152,71538,71519],{"class":289},[152,71540,71541],{"class":483},"uname",[152,71543,71525],{"class":289},[152,71545,71546,71548,71550,71552,71554,71556,71559],{"class":281,"line":34152},[152,71547,71530],{"class":289},[152,71549,5522],{"class":483},[152,71551,2697],{"class":289},[152,71553,2249],{"class":483},[152,71555,71519],{"class":289},[152,71557,71558],{"class":483},"age",[152,71560,71525],{"class":289},[152,71562,71563,71565,71567,71569,71571,71573,71576],{"class":281,"line":34158},[152,71564,71530],{"class":289},[152,71566,5522],{"class":483},[152,71568,2697],{"class":289},[152,71570,2249],{"class":483},[152,71572,71519],{"class":289},[152,71574,71575],{"class":483},"gender",[152,71577,71525],{"class":289},[152,71579,71580,71582,71584,71586,71588,71590,71593],{"class":281,"line":34173},[152,71581,71530],{"class":289},[152,71583,5522],{"class":483},[152,71585,2697],{"class":289},[152,71587,2249],{"class":483},[152,71589,71519],{"class":289},[152,71591,71592],{"class":483},"salary",[152,71594,71525],{"class":289},[152,71596,71597,71599,71601,71603,71605,71607,71610],{"class":281,"line":34179},[152,71598,71530],{"class":289},[152,71600,5522],{"class":483},[152,71602,2697],{"class":289},[152,71604,2249],{"class":483},[152,71606,71519],{"class":289},[152,71608,71609],{"class":483},"city",[152,71611,71525],{"class":289},[152,71613,71614],{"class":281,"line":34188},[152,71615,70930],{"class":289},[152,71617,71618,71621,71623],{"class":281,"line":34194},[152,71619,71620],{"class":289},"            \u003Ca href=\"javascript:\" data-id=${",[152,71622,2249],{"class":483},[152,71624,71625],{"class":289},"}>删除\u003C\u002Fa>\n",[152,71627,71628],{"class":281,"line":34203},[152,71629,71630],{"class":289},"          \u003C\u002Ftd> \n",[152,71632,71633],{"class":281,"line":34209},[152,71634,71635],{"class":289},"          `\n",[152,71637,71638],{"class":281,"line":34215},[152,71639,71640],{"class":866},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[152,71642,71643,71646,71649],{"class":281,"line":34224},[152,71644,71645],{"class":483},"        tbody.",[152,71647,71648],{"class":285},"appendChild",[152,71650,71651],{"class":483},"(tr)\n",[152,71653,71654],{"class":281,"line":34230},[152,71655,53735],{"class":483},[152,71657,71658],{"class":281,"line":34241},[152,71659,3838],{"class":483},[152,71661,71662],{"class":281,"line":34247},[152,71663,307],{"emptyLinePlaceholder":306},[152,71665,71666],{"class":281,"line":34266},[152,71667,71668],{"class":866},"    \u002F\u002F 3.删除委托\n",[152,71670,71671],{"class":281,"line":34272},[152,71672,71673],{"class":866},"    \u002F\u002F 3.1 事件委托 tbody\n",[152,71675,71676,71679,71681,71683,71685,71687,71689,71691,71693],{"class":281,"line":34283},[152,71677,71678],{"class":483},"    tbody.",[152,71680,59150],{"class":285},[152,71682,1819],{"class":483},[152,71684,59155],{"class":289},[152,71686,14051],{"class":483},[152,71688,55786],{"class":476},[152,71690,3322],{"class":483},[152,71692,1891],{"class":6858},[152,71694,14058],{"class":483},[152,71696,71697,71699,71701,71703,71705],{"class":281,"line":34289},[152,71698,55817],{"class":476},[152,71700,68371],{"class":483},[152,71702,55823],{"class":476},[152,71704,69593],{"class":289},[152,71706,14058],{"class":483},[152,71708,71709],{"class":281,"line":34309},[152,71710,71711],{"class":866},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[152,71713,71714],{"class":281,"line":34325},[152,71715,71716],{"class":866},"        \u002F\u002F console.log(e.target.dataset.id);\n",[152,71718,71719],{"class":281,"line":34331},[152,71720,71721],{"class":866},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[152,71723,71724,71727,71729,71732,71734],{"class":281,"line":34345},[152,71725,71726],{"class":483},"        arr.",[152,71728,59347],{"class":285},[152,71730,71731],{"class":483},"(e.target.dataset.id, ",[152,71733,2026],{"class":293},[152,71735,1825],{"class":483},[152,71737,71738],{"class":281,"line":34351},[152,71739,71740],{"class":866},"        \u002F\u002F 重新渲染一次\n",[152,71742,71743,71746],{"class":281,"line":34357},[152,71744,71745],{"class":285},"        render",[152,71747,3627],{"class":483},[152,71749,71750],{"class":281,"line":34368},[152,71751,53735],{"class":483},[152,71753,71754],{"class":281,"line":34374},[152,71755,34798],{"class":483},[152,71757,71758,71760,71762],{"class":281,"line":34380},[152,71759,53754],{"class":483},[152,71761,53150],{"class":52637},[152,71763,52644],{"class":483},[152,71765,71766],{"class":281,"line":34390},[152,71767,307],{"emptyLinePlaceholder":306},[152,71769,71770,71772,71774],{"class":281,"line":34396},[152,71771,53122],{"class":483},[152,71773,53137],{"class":52637},[152,71775,52644],{"class":483},[152,71777,71778],{"class":281,"line":34407},[152,71779,307],{"emptyLinePlaceholder":306},[152,71781,71782,71784,71786],{"class":281,"line":34413},[152,71783,53122],{"class":483},[152,71785,51972],{"class":52637},[152,71787,52644],{"class":483},[19,71789,71790],{},"样式：",[270,71792,71796],{"className":71793,"code":71794,"language":71795,"meta":275,"style":275},"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",[277,71797,71798,71803,71813,71822,71826,71830,71835,71845,71850,71854,71859,71869,71874,71883,71887,71891,71896,71901,71911,71921,71926,71930,71935,71944,71954,71959,71969,71979,71983,71988,71996,72000,72005,72010,72015,72023,72032,72036,72041,72050,72054,72059,72068,72072,72077,72086,72095,72103,72107,72112,72121,72131,72140,72150,72156,72165,72175,72185,72189,72194,72203,72211,72221,72229,72238,72247,72257,72265,72269,72274,72283],{"__ignoreMap":275},[152,71799,71800],{"class":281,"line":282},[152,71801,71802],{"class":483},"* {\n",[152,71804,71805,71808,71810],{"class":281,"line":303},[152,71806,71807],{"class":52637},"  margin",[152,71809,52774],{"class":483},[152,71811,71812],{"class":289},"0;\n",[152,71814,71815,71818,71820],{"class":281,"line":310},[152,71816,71817],{"class":289},"  padding",[152,71819,52774],{"class":483},[152,71821,71812],{"class":289},[152,71823,71824],{"class":281,"line":324},[152,71825,3236],{"class":483},[152,71827,71828],{"class":281,"line":329},[152,71829,307],{"emptyLinePlaceholder":306},[152,71831,71832],{"class":281,"line":343},[152,71833,71834],{"class":289},"a {\n",[152,71836,71837,71840,71842],{"class":281,"line":348},[152,71838,71839],{"class":52637},"  text-decoration",[152,71841,52774],{"class":483},[152,71843,71844],{"class":289},"none;\n",[152,71846,71847],{"class":281,"line":362},[152,71848,71849],{"class":289},"  color:#721c24;\n",[152,71851,71852],{"class":281,"line":367},[152,71853,3236],{"class":483},[152,71855,71856],{"class":281,"line":381},[152,71857,71858],{"class":289},"h1 {\n",[152,71860,71861,71864,71866],{"class":281,"line":386},[152,71862,71863],{"class":52637},"  text-align",[152,71865,52774],{"class":483},[152,71867,71868],{"class":289},"center;\n",[152,71870,71871],{"class":281,"line":932},[152,71872,71873],{"class":289},"  color:#333;\n",[152,71875,71876,71878,71880],{"class":281,"line":942},[152,71877,71807],{"class":52637},[152,71879,52774],{"class":483},[152,71881,71882],{"class":289},"20px 0;\n",[152,71884,71885],{"class":281,"line":949},[152,71886,4317],{"class":483},[152,71888,71889],{"class":281,"line":954},[152,71890,3236],{"class":483},[152,71892,71893],{"class":281,"line":959},[152,71894,71895],{"class":289},"table {\n",[152,71897,71898],{"class":281,"line":970},[152,71899,71900],{"class":289},"  margin:0 auto;\n",[152,71902,71903,71906,71908],{"class":281,"line":979},[152,71904,71905],{"class":52637},"  width",[152,71907,52774],{"class":483},[152,71909,71910],{"class":289},"800px;\n",[152,71912,71913,71916,71918],{"class":281,"line":989},[152,71914,71915],{"class":52637},"  border-collapse",[152,71917,52774],{"class":483},[152,71919,71920],{"class":289},"collapse;\n",[152,71922,71923],{"class":281,"line":996},[152,71924,71925],{"class":289},"  color:#004085;\n",[152,71927,71928],{"class":281,"line":1001},[152,71929,3236],{"class":483},[152,71931,71932],{"class":281,"line":1006},[152,71933,71934],{"class":289},"th {\n",[152,71936,71937,71939,71941],{"class":281,"line":1018},[152,71938,71817],{"class":52637},[152,71940,52774],{"class":483},[152,71942,71943],{"class":289},"10px;\n",[152,71945,71946,71949,71951],{"class":281,"line":1027},[152,71947,71948],{"class":52637},"  background",[152,71950,52774],{"class":483},[152,71952,71953],{"class":866},"#cfe5ff;\n",[152,71955,71956],{"class":281,"line":1037},[152,71957,71958],{"class":483},"  \n",[152,71960,71961,71964,71966],{"class":281,"line":1044},[152,71962,71963],{"class":52637},"  font-size",[152,71965,52774],{"class":483},[152,71967,71968],{"class":289},"20px;\n",[152,71970,71971,71974,71976],{"class":281,"line":1049},[152,71972,71973],{"class":52637},"  font-weight",[152,71975,52774],{"class":483},[152,71977,71978],{"class":289},"400;\n",[152,71980,71981],{"class":281,"line":1054},[152,71982,3236],{"class":483},[152,71984,71985],{"class":281,"line":1065},[152,71986,71987],{"class":289},"td,th {\n",[152,71989,71990,71993],{"class":281,"line":1074},[152,71991,71992],{"class":289},"  border:1px solid",[152,71994,71995],{"class":866}," #b8daff;\n",[152,71997,71998],{"class":281,"line":1084},[152,71999,3236],{"class":483},[152,72001,72002],{"class":281,"line":1091},[152,72003,72004],{"class":289},"td {\n",[152,72006,72007],{"class":281,"line":1096},[152,72008,72009],{"class":289},"  padding:10px;\n",[152,72011,72012],{"class":281,"line":1101},[152,72013,72014],{"class":289},"  color:#666;\n",[152,72016,72017,72019,72021],{"class":281,"line":1112},[152,72018,71863],{"class":52637},[152,72020,52774],{"class":483},[152,72022,71868],{"class":289},[152,72024,72025,72027,72029],{"class":281,"line":1121},[152,72026,71963],{"class":52637},[152,72028,52774],{"class":483},[152,72030,72031],{"class":289},"16px;\n",[152,72033,72034],{"class":281,"line":1131},[152,72035,3236],{"class":483},[152,72037,72038],{"class":281,"line":1138},[152,72039,72040],{"class":289},"tbody tr {\n",[152,72042,72043,72045,72047],{"class":281,"line":1143},[152,72044,71948],{"class":52637},[152,72046,52774],{"class":483},[152,72048,72049],{"class":866},"#fff;\n",[152,72051,72052],{"class":281,"line":1148},[152,72053,3236],{"class":483},[152,72055,72056],{"class":281,"line":1159},[152,72057,72058],{"class":289},"tbody tr:hover {\n",[152,72060,72061,72063,72065],{"class":281,"line":1168},[152,72062,71948],{"class":52637},[152,72064,52774],{"class":483},[152,72066,72067],{"class":866},"#e1ecf8;\n",[152,72069,72070],{"class":281,"line":1178},[152,72071,3236],{"class":483},[152,72073,72074],{"class":281,"line":1185},[152,72075,72076],{"class":289},".info {\n",[152,72078,72079,72081,72083],{"class":281,"line":1190},[152,72080,71905],{"class":52637},[152,72082,52774],{"class":483},[152,72084,72085],{"class":289},"900px;\n",[152,72087,72088,72090,72092],{"class":281,"line":1195},[152,72089,71807],{"class":52637},[152,72091,52774],{"class":483},[152,72093,72094],{"class":289},"50px auto;\n",[152,72096,72097,72099,72101],{"class":281,"line":1206},[152,72098,71863],{"class":52637},[152,72100,52774],{"class":483},[152,72102,71868],{"class":289},[152,72104,72105],{"class":281,"line":1215},[152,72106,3236],{"class":483},[152,72108,72109],{"class":281,"line":1225},[152,72110,72111],{"class":289},".info  input, .info select {\n",[152,72113,72114,72116,72118],{"class":281,"line":1232},[152,72115,71905],{"class":52637},[152,72117,52774],{"class":483},[152,72119,72120],{"class":289},"80px;\n",[152,72122,72123,72126,72128],{"class":281,"line":1237},[152,72124,72125],{"class":52637},"  height",[152,72127,52774],{"class":483},[152,72129,72130],{"class":289},"27px;\n",[152,72132,72133,72136,72138],{"class":281,"line":1242},[152,72134,72135],{"class":52637},"  outline",[152,72137,52774],{"class":483},[152,72139,71844],{"class":289},[152,72141,72142,72145,72147],{"class":281,"line":1253},[152,72143,72144],{"class":52637},"  border-radius",[152,72146,52774],{"class":483},[152,72148,72149],{"class":289},"5px;\n",[152,72151,72152,72154],{"class":281,"line":1262},[152,72153,71992],{"class":289},[152,72155,71995],{"class":866},[152,72157,72158,72161,72163],{"class":281,"line":1272},[152,72159,72160],{"class":52637},"  padding-left",[152,72162,52774],{"class":483},[152,72164,72149],{"class":289},[152,72166,72167,72170,72172],{"class":281,"line":1279},[152,72168,72169],{"class":52637},"  box-sizing",[152,72171,52774],{"class":483},[152,72173,72174],{"class":289},"border-box;\n",[152,72176,72177,72180,72182],{"class":281,"line":1284},[152,72178,72179],{"class":52637},"  margin-right",[152,72181,52774],{"class":483},[152,72183,72184],{"class":289},"15px;\n",[152,72186,72187],{"class":281,"line":1289},[152,72188,3236],{"class":483},[152,72190,72191],{"class":281,"line":1301},[152,72192,72193],{"class":289},".info button {\n",[152,72195,72196,72198,72200],{"class":281,"line":1310},[152,72197,71905],{"class":52637},[152,72199,52774],{"class":483},[152,72201,72202],{"class":289},"60px;\n",[152,72204,72205,72207,72209],{"class":281,"line":1320},[152,72206,72125],{"class":52637},[152,72208,52774],{"class":483},[152,72210,72130],{"class":289},[152,72212,72213,72216,72218],{"class":281,"line":1327},[152,72214,72215],{"class":52637},"  background-color",[152,72217,52774],{"class":483},[152,72219,72220],{"class":866},"#004085;\n",[152,72222,72223,72225,72227],{"class":281,"line":11528},[152,72224,72135],{"class":52637},[152,72226,52774],{"class":483},[152,72228,71844],{"class":289},[152,72230,72231,72234,72236],{"class":281,"line":11536},[152,72232,72233],{"class":52637},"  border",[152,72235,52774],{"class":483},[152,72237,71812],{"class":289},[152,72239,72240,72243,72245],{"class":281,"line":11541},[152,72241,72242],{"class":52637},"  color",[152,72244,52774],{"class":483},[152,72246,72049],{"class":866},[152,72248,72249,72252,72254],{"class":281,"line":18219},[152,72250,72251],{"class":52637},"  cursor",[152,72253,52774],{"class":483},[152,72255,72256],{"class":289},"pointer;\n",[152,72258,72259,72261,72263],{"class":281,"line":18225},[152,72260,72144],{"class":52637},[152,72262,52774],{"class":483},[152,72264,72149],{"class":289},[152,72266,72267],{"class":281,"line":18248},[152,72268,3236],{"class":483},[152,72270,72271],{"class":281,"line":18254},[152,72272,72273],{"class":289},".info .age {\n",[152,72275,72276,72278,72280],{"class":281,"line":18277},[152,72277,71905],{"class":52637},[152,72279,52774],{"class":483},[152,72281,72282],{"class":289},"50px;\n",[152,72284,72285],{"class":281,"line":18291},[152,72286,3236],{"class":483},[19,72288,72289],{},"思路：",[19,72291,72292],{},[401,72293],{"alt":275,"src":72294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72296,72297],{},[401,72298],{"alt":275,"src":72299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72301,72302],{},[401,72303],{"alt":275,"src":72304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[14,72306,72308],{"id":72307},"_3315-重绘回流","3.3.15 重绘回流",[19,72310,72311],{},[401,72312],{"alt":275,"src":72313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72315,72316],{},[401,72317],{"alt":275,"src":72318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72320,72321],{},[401,72322],{"alt":275,"src":72323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[1760,72325,72327],{"id":72326},"_34-bom","3.4 BOM",[19,72329,72330],{},[401,72331],{"alt":275,"src":72332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72334,72335],{},"平时写的document省略了window而已，实际上是window.document",[19,72337,72338],{},"函数也是这样，调用的时候实际为window.fn()",[19,72340,72341],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72343,72344],{},"window大部分情况下可以省略",[14,72346,72348],{"id":72347},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72350,72351],{},"只执行一次",[19,72353,72354],{},[401,72355],{"alt":275,"src":72356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72358,72359],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72361,72362],{},[401,72363],{"alt":275,"src":72364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[14,72366,72368],{"id":72367},"_342-js执行机制","3.4.2 JS执行机制",[19,72370,72371],{},[401,72372],{"alt":275,"src":72373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72375,72376],{},"两个的结果都是1111 3333 2222",[19,72378,72379],{},[401,72380],{"alt":275,"src":72381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72383,72384],{},[401,72385],{"alt":275,"src":72386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72388,72389],{},[401,72390],{"alt":275,"src":72391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72393,72394],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72396,72397],{},"工作流程：",[19,72399,72400],{},[401,72401],{"alt":275,"src":72402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72404,72405],{},[401,72406],{"alt":275,"src":72407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72409,72410],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72412,72413],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[14,72415,72417],{"id":72416},"_343-location对象","3.4.3 location对象",[19,72419,72420],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72422,72423],{},[401,72424],{"alt":275,"src":72425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72427,72428],{},"href可以跳转页面",[416,72430,72431],{},[419,72432,72433],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72435,72436],{},"search得到提交信息之后网站后边的地址",[19,72438,72439],{},[401,72440],{"alt":275,"src":72441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72443,72444],{},[401,72445],{"alt":275,"src":72446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[416,72448,72449],{"start":303},[419,72450,72451],{},"hash:这个获取单页面应用#后边的地址",[19,72453,72454],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72456,72457],{},[401,72458],{"alt":275,"src":72459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[270,72461,72463],{"className":54404,"code":72462,"language":54406,"meta":275,"style":275},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[277,72464,72465,72485,72505],{"__ignoreMap":275},[152,72466,72467,72469,72471,72473,72475,72478,72481,72483],{"class":281,"line":282},[152,72468,53481],{"class":483},[152,72470,69],{"class":52637},[152,72472,62394],{"class":285},[152,72474,1864],{"class":483},[152,72476,72477],{"class":289},"\"#\u002Fmy\"",[152,72479,72480],{"class":483},">我的\u003C\u002F",[152,72482,69],{"class":52637},[152,72484,52644],{"class":483},[152,72486,72487,72489,72491,72493,72495,72498,72501,72503],{"class":281,"line":303},[152,72488,53481],{"class":483},[152,72490,69],{"class":52637},[152,72492,62394],{"class":285},[152,72494,1864],{"class":483},[152,72496,72497],{"class":289},"\"#\u002Ffriend\"",[152,72499,72500],{"class":483},">关注\u003C\u002F",[152,72502,69],{"class":52637},[152,72504,52644],{"class":483},[152,72506,72507,72509,72511,72513,72515,72518,72521,72523],{"class":281,"line":310},[152,72508,53481],{"class":483},[152,72510,69],{"class":52637},[152,72512,62394],{"class":285},[152,72514,1864],{"class":483},[152,72516,72517],{"class":289},"\"#\u002Fdownload\"",[152,72519,72520],{"class":483},">下载\u003C\u002F",[152,72522,69],{"class":52637},[152,72524,52644],{"class":483},[19,72526,72527],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[416,72529,72530],{"start":310},[419,72531,72532,72533,72535,72536,72538],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55053,72534],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55053,72537],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[14,72540,72542],{"id":72541},"_345-navigator对象","3.4.5 navigator对象",[19,72544,72545],{},[401,72546],{"alt":275,"src":72547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[270,72549,72553],{"className":72550,"code":72551,"language":72552,"meta":275,"style":275},"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",[277,72554,72555,72560,72571,72583,72588,72639,72680,72685,72698,72710,72715],{"__ignoreMap":275},[152,72556,72557],{"class":281,"line":282},[152,72558,72559],{"class":866},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[152,72561,72562,72564,72566,72568],{"class":281,"line":303},[152,72563,2035],{"class":476},[152,72565,1819],{"class":483},[152,72567,55786],{"class":476},[152,72569,72570],{"class":483}," () { \n",[152,72572,72573,72575,72578,72580],{"class":281,"line":310},[152,72574,8434],{"class":476},[152,72576,72577],{"class":293}," userAgent",[152,72579,15180],{"class":476},[152,72581,72582],{"class":483}," navigator.userAgent \n",[152,72584,72585],{"class":281,"line":324},[152,72586,72587],{"class":866},"\u002F\u002F 验证是否为Android或iPhone \n",[152,72589,72590,72592,72595,72597,72600,72603,72605,72607,72610,72612,72615,72619,72621,72623,72625,72628,72630,72632,72634,72636],{"class":281,"line":329},[152,72591,8434],{"class":476},[152,72593,72594],{"class":293}," android",[152,72596,15180],{"class":476},[152,72598,72599],{"class":483}," userAgent.",[152,72601,72602],{"class":285},"match",[152,72604,1819],{"class":483},[152,72606,2392],{"class":289},[152,72608,72609],{"class":49314},"(Android);",[152,72611,2791],{"class":476},[152,72613,72614],{"class":293},"[\\s",[152,72616,72618],{"class":72617},"snhLl","\\\u002F",[152,72620,2746],{"class":293},[152,72622,2289],{"class":476},[152,72624,1819],{"class":49314},[152,72626,72627],{"class":293},"[\\d.]",[152,72629,2289],{"class":476},[152,72631,2237],{"class":49314},[152,72633,2791],{"class":476},[152,72635,2392],{"class":289},[152,72637,72638],{"class":483},") \n",[152,72640,72641,72643,72646,72648,72650,72652,72654,72656,72659,72662,72665,72667,72669,72672,72674,72676,72678],{"class":281,"line":343},[152,72642,8434],{"class":476},[152,72644,72645],{"class":293}," iphone",[152,72647,15180],{"class":476},[152,72649,72599],{"class":483},[152,72651,72602],{"class":285},[152,72653,1819],{"class":483},[152,72655,2392],{"class":289},[152,72657,72658],{"class":49314},"(iPhone",[152,72660,72661],{"class":293},"\\s",[152,72663,72664],{"class":49314},"OS)",[152,72666,72661],{"class":293},[152,72668,1819],{"class":49314},[152,72670,72671],{"class":293},"[\\d_]",[152,72673,2289],{"class":476},[152,72675,2237],{"class":49314},[152,72677,2392],{"class":289},[152,72679,72638],{"class":483},[152,72681,72682],{"class":281,"line":348},[152,72683,72684],{"class":866},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[152,72686,72687,72689,72692,72695],{"class":281,"line":362},[152,72688,3202],{"class":476},[152,72690,72691],{"class":483}," (android ",[152,72693,72694],{"class":476},"||",[152,72696,72697],{"class":483}," iphone) { \n",[152,72699,72700,72703,72705,72708],{"class":281,"line":367},[152,72701,72702],{"class":483},"location.href ",[152,72704,1864],{"class":476},[152,72706,72707],{"class":289}," 'http:\u002F\u002Fm.itcast.cn'",[152,72709,4317],{"class":483},[152,72711,72712],{"class":281,"line":381},[152,72713,72714],{"class":483},"} \n",[152,72716,72717],{"class":281,"line":386},[152,72718,72719],{"class":483},"})()\n",[14,72721,72723],{"id":72722},"_346-histroy对象","3.4.6 histroy对象",[19,72725,72726],{},[401,72727],{"alt":275,"src":72728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,72730,72731],{},"浏览器地址的前进与后退!!!",[19,72733,72734],{},"history.back() 等效于 history.go(-1)",[19,72736,72737],{},"history.forward() 等效于 history.go(1)",[1760,72739,72741],{"id":72740},"_35-本地存储","3.5 本地存储",[416,72743,72744,72747,72750],{},[419,72745,72746],{},"数据存储在用户浏览器中",[419,72748,72749],{},"设置、读取方便、甚至页面刷新不丢失数据",[419,72751,72752],{},"容量较大，sessionStorage和localStorage约 5M 左右",[14,72754,72756],{"id":72755},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,72758,72759],{},"只能存储字符串",[19,72761,72762],{},[401,72763],{"alt":275,"src":72764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,72766,72767],{},[401,72768],{"alt":275,"src":72769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,72771,72772],{},"键值对要加引号,不然就会当变量来看了",[19,72774,72775],{},"localStorage.setItem('uname', 'pink')",[19,72777,72778],{},"刷新之后信息不再丢失",[19,72780,72781],{},"操作key,value会跟着变",[19,72783,72784],{},"删除只删除键就可以,即名字",[19,72786,72775],{},[19,72788,72789],{},"改:",[19,72791,72792],{},"localStorage.setItem('uname','red')",[19,72794,72795],{},"有这个键就是改,没有这个键就是改",[19,72797,72798],{},[401,72799],{"alt":275,"src":72800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,72802,72803],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,72805,72806],{},[401,72807],{"alt":275,"src":72808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,72810,72811],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[14,72813,72815],{"id":72814},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,72817,72818],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,72820,72821],{},"特性:",[416,72823,72824,72827,72830,72833],{},[419,72825,72826],{},"生命周期为关闭浏览器窗口",[419,72828,72829],{},"在同一个窗口(页面)下数据可以共享",[419,72831,72832],{},"以键值对的形式存储使用",[419,72834,72835],{},"用法跟localStorage 基本相同",[14,72837,72839],{"id":72838},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,72841,72842],{},"本地只能存储字符串,无法直接存储复杂数据类型",[270,72844,72846],{"className":54404,"code":72845,"language":54406,"meta":275,"style":275},"\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",[277,72847,72848,72856,72861,72866,72871,72876,72880,72885,72890],{"__ignoreMap":275},[152,72849,72850,72852,72854],{"class":281,"line":282},[152,72851,844],{"class":483},[152,72853,53150],{"class":52637},[152,72855,52644],{"class":483},[152,72857,72858],{"class":281,"line":303},[152,72859,72860],{"class":483},"    const obj = {\n",[152,72862,72863],{"class":281,"line":310},[152,72864,72865],{"class":483},"      uname: 'pink老师',\n",[152,72867,72868],{"class":281,"line":324},[152,72869,72870],{"class":483},"      age: 18,\n",[152,72872,72873],{"class":281,"line":329},[152,72874,72875],{"class":483},"      gender: '女'\n",[152,72877,72878],{"class":281,"line":343},[152,72879,3838],{"class":483},[152,72881,72882],{"class":281,"line":348},[152,72883,72884],{"class":483},"    \u002F\u002F 存储复杂数据类型\n",[152,72886,72887],{"class":281,"line":362},[152,72888,72889],{"class":483},"    localStorage.setItem('obj', obj)\n",[152,72891,72892,72894,72896],{"class":281,"line":367},[152,72893,53754],{"class":483},[152,72895,53150],{"class":52637},[152,72897,52644],{"class":483},[19,72899,72900],{},[401,72901],{"alt":275,"src":72902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72904,72905],{},"如果获取一下数据:",[19,72907,72908],{},"log(localStorage.getItem('obj'))",[19,72910,72911],{},[401,72912],{"alt":275,"src":72913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72915,72916],{},"发现直接存对象是使用不了的!!!",[262,72918,72920],{"id":72919},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72922,72923],{},[401,72924],{"alt":275,"src":72925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[270,72927,72929],{"className":51970,"code":72928,"language":51972,"meta":275,"style":275},"\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",[277,72930,72931,72939,72949,72959,72968,72976,72980,72984,73010,73029,73037,73041,73046,73051],{"__ignoreMap":275},[152,72932,72933,72935,72937],{"class":281,"line":282},[152,72934,844],{"class":483},[152,72936,53150],{"class":52637},[152,72938,52644],{"class":483},[152,72940,72941,72943,72945,72947],{"class":281,"line":303},[152,72942,12837],{"class":476},[152,72944,71308],{"class":293},[152,72946,15180],{"class":476},[152,72948,17187],{"class":483},[152,72950,72951,72954,72957],{"class":281,"line":310},[152,72952,72953],{"class":483},"      uname: ",[152,72955,72956],{"class":289},"'pink老师'",[152,72958,32803],{"class":483},[152,72960,72961,72964,72966],{"class":281,"line":324},[152,72962,72963],{"class":483},"      age: ",[152,72965,2458],{"class":293},[152,72967,32803],{"class":483},[152,72969,72970,72973],{"class":281,"line":329},[152,72971,72972],{"class":483},"      gender: ",[152,72974,72975],{"class":289},"'女'\n",[152,72977,72978],{"class":281,"line":343},[152,72979,3838],{"class":483},[152,72981,72982],{"class":281,"line":348},[152,72983,72884],{"class":866},[152,72985,72986,72989,72992,72994,72997,72999,73002,73004,73007],{"class":281,"line":362},[152,72987,72988],{"class":483},"  localStorage.",[152,72990,72991],{"class":285},"setItem",[152,72993,1819],{"class":483},[152,72995,72996],{"class":289},"'obj'",[152,72998,14051],{"class":483},[152,73000,73001],{"class":293},"JSON",[152,73003,2366],{"class":483},[152,73005,73006],{"class":285},"stringify",[152,73008,73009],{"class":483},"(obj))\n",[152,73011,73012,73015,73017,73020,73023,73025,73027],{"class":281,"line":367},[152,73013,73014],{"class":483},"  console.",[152,73016,59584],{"class":285},[152,73018,73019],{"class":483},"(localStorage.",[152,73021,73022],{"class":285},"getItem",[152,73024,1819],{"class":483},[152,73026,72996],{"class":289},[152,73028,31834],{"class":483},[152,73030,73031,73033,73035],{"class":281,"line":381},[152,73032,53754],{"class":483},[152,73034,53150],{"class":52637},[152,73036,52644],{"class":483},[152,73038,73039],{"class":281,"line":386},[152,73040,71958],{"class":483},[152,73042,73043],{"class":281,"line":932},[152,73044,73045],{"class":483},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[152,73047,73048],{"class":281,"line":942},[152,73049,73050],{"class":483},"  类型是字符串的\n",[152,73052,73053],{"class":281,"line":949},[152,73054,73055],{"class":483},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[262,73057,73059],{"id":73058},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73061,73062],{},[401,73063],{"alt":275,"src":73064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73066,73067],{},[401,73068],{"alt":275,"src":73069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[270,73071,73073],{"className":54404,"code":73072,"language":54406,"meta":275,"style":275},"  \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",[277,73074,73075,73083,73087,73091,73095,73099,73103,73108,73113,73118,73123,73128,73133,73138,73143],{"__ignoreMap":275},[152,73076,73077,73079,73081],{"class":281,"line":282},[152,73078,53481],{"class":483},[152,73080,53150],{"class":52637},[152,73082,52644],{"class":483},[152,73084,73085],{"class":281,"line":303},[152,73086,72860],{"class":483},[152,73088,73089],{"class":281,"line":310},[152,73090,72865],{"class":483},[152,73092,73093],{"class":281,"line":324},[152,73094,72870],{"class":483},[152,73096,73097],{"class":281,"line":329},[152,73098,72875],{"class":483},[152,73100,73101],{"class":281,"line":343},[152,73102,3838],{"class":483},[152,73104,73105],{"class":281,"line":348},[152,73106,73107],{"class":483},"    \u002F\u002F 1.存储复杂数据类型\n",[152,73109,73110],{"class":281,"line":362},[152,73111,73112],{"class":483},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[152,73114,73115],{"class":281,"line":367},[152,73116,73117],{"class":483},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[152,73119,73120],{"class":281,"line":381},[152,73121,73122],{"class":483},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[152,73124,73125],{"class":281,"line":386},[152,73126,73127],{"class":483},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[152,73129,73130],{"class":281,"line":932},[152,73131,73132],{"class":483},"    \u002F\u002F 取\n",[152,73134,73135],{"class":281,"line":942},[152,73136,73137],{"class":483},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[152,73139,73140],{"class":281,"line":949},[152,73141,73142],{"class":483},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[152,73144,73145,73147,73149],{"class":281,"line":954},[152,73146,53754],{"class":483},[152,73148,53150],{"class":52637},[152,73150,52644],{"class":483},[19,73152,73153],{},[401,73154],{"alt":275,"src":73155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[14,73157,73159],{"id":73158},"_356-数组map方法","3.5.6 数组map方法",[19,73161,73162],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73164,73165],{},[401,73166],{"alt":275,"src":73167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73169,73170],{},[401,73171],{"alt":275,"src":73172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73174,73175,73178],{},[694,73176,73177],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73180,73181],{},"map有返回值，但是forEach没有返回值",[19,73183,73184],{},"map是个方法。用的时候要加 ()",[19,73186,73187],{},"map返回的是一个数组",[14,73189,73191],{"id":73190},"_357-数组中join方法","3.5.7 数组中join方法",[19,73193,73194],{},[401,73195],{"alt":275,"src":73196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73198,73199],{},"类似于python中拼接字符串一样！",[416,73201,73202,73205,73208],{},[419,73203,73204],{},"小括号为空则逗号分开",[419,73206,73207],{},"小括号为空字符串 ''，则元素之间没有分隔符",[419,73209,73210],{},"小括号用啥符号就用进行分割",[14,73212,73214],{"id":73213},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[416,73216,73217,73220,73223,73226,73229],{},[419,73218,73219],{},"记住本地时间获取快速方式：new Date().toDateString()",[419,73221,73222],{},"尽量减少DOM操作，用好map+join的渲染方式",[419,73224,73225],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[419,73227,73228],{},"return可以实现函数的结束",[419,73230,73231],{},"禁止跳转是 preventDefault() 不要忘记",[270,73233,73235],{"className":51970,"code":73234,"language":51972,"meta":275,"style":275},"\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",[277,73236,73237,73247,73261,73265,73273,73287,73307,73319,73327,73333,73343,73353,73357,73361,73367,73377,73389,73393,73397,73404,73416,73430,73440,73444,73448,73455,73462,73469,73481,73493,73503,73515,73519,73523,73530,73537,73549,73561,73571,73583,73613,73617,73621,73628,73640,73652,73676,73686,73696,73700,73704,73712,73723,73735,73747,73759,73776,73788,73800,73804,73808,73815,73827,73839,73851,73862,73880,73893,73905,73929,73940,73944,73948,73956,73966,73970,73974,73980,73992,74003,74013,74017,74021,74027,74049,74053,74057,74063,74069,74081,74091,74103,74133,74146,74163,74167,74171,74182,74204,74214,74218,74222,74235,74245,74257,74269,74281,74293,74303,74313,74323,74334,74347,74351,74359,74367,74371,74379,74392,74412,74445,74478,74511,74537,74555,74573,74581,74607,74625,74643,74661,74679,74697,74705,74713,74731,74739,74768,74776,74784,74792,74805,74817,74829,74841,74853,74865,74878,74890,74898,74906,74914,74919,74924,74928,74932,74936,74940,74944,74948,74953,74958,74963,74968,74976,74984,74992,74997,75002,75007,75012,75017,75022,75027,75032,75037,75042,75047,75052,75057,75062,75066,75071,75076,75086,75095,75099,75104,75113,75129,75171,75211,75250,75315,75323,75327,75332,75350,75358,75363,75368,75398,75404,75409,75422,75434,75446,75458,75470,75482,75494,75498,75508,75512,75517,75522,75526,75535,75539,75544,75549,75568,75573,75593,75597,75602,75606,75611,75629,75647,75665,75684,75703,75722,75727,75733,75754,75760,75769,75775,75781,75787,75814,75827,75832,75842,75848,75854,75860,75866,75871,75877,75883,75889,75895,75928,75933,75938,75943,75948,75954,75960,75966,75977,75982,75988,75995,76009,76015,76039,76044,76049,76055,76061,76082,76088,76101,76107,76113,76119,76125,76130,76136,76142,76148,76166,76180,76186,76194,76200,76222,76227,76232,76237,76242,76247,76256,76265,76270],{"__ignoreMap":275},[152,73238,73239,73241,73243,73245],{"class":281,"line":282},[152,73240,52634],{"class":483},[152,73242,52638],{"class":52637},[152,73244,52641],{"class":285},[152,73246,52644],{"class":483},[152,73248,73249,73251,73253,73255,73257,73259],{"class":281,"line":303},[152,73250,844],{"class":483},[152,73252,51972],{"class":52637},[152,73254,52653],{"class":285},[152,73256,1864],{"class":483},[152,73258,52658],{"class":289},[152,73260,52644],{"class":483},[152,73262,73263],{"class":281,"line":310},[152,73264,307],{"emptyLinePlaceholder":306},[152,73266,73267,73269,73271],{"class":281,"line":324},[152,73268,844],{"class":483},[152,73270,52671],{"class":52637},[152,73272,52644],{"class":483},[152,73274,73275,73277,73279,73281,73283,73285],{"class":281,"line":329},[152,73276,53481],{"class":483},[152,73278,52681],{"class":52637},[152,73280,52684],{"class":285},[152,73282,1864],{"class":483},[152,73284,52689],{"class":289},[152,73286,52644],{"class":483},[152,73288,73289,73291,73293,73295,73297,73299,73301,73303,73305],{"class":281,"line":343},[152,73290,53481],{"class":483},[152,73292,52681],{"class":52637},[152,73294,16535],{"class":285},[152,73296,1864],{"class":483},[152,73298,52728],{"class":289},[152,73300,52708],{"class":285},[152,73302,1864],{"class":483},[152,73304,52735],{"class":289},[152,73306,52644],{"class":483},[152,73308,73309,73311,73313,73315,73317],{"class":281,"line":348},[152,73310,53481],{"class":483},[152,73312,52744],{"class":52637},[152,73314,52747],{"class":483},[152,73316,52744],{"class":52637},[152,73318,52644],{"class":483},[152,73320,73321,73323,73325],{"class":281,"line":362},[152,73322,53481],{"class":483},[152,73324,1736],{"class":52637},[152,73326,52644],{"class":483},[152,73328,73329,73331],{"class":281,"line":367},[152,73330,8045],{"class":52637},[152,73332,17187],{"class":483},[152,73334,73335,73337,73339,73341],{"class":281,"line":381},[152,73336,56032],{"class":293},[152,73338,52774],{"class":483},[152,73340,2000],{"class":293},[152,73342,2965],{"class":483},[152,73344,73345,73347,73349,73351],{"class":281,"line":386},[152,73346,56043],{"class":293},[152,73348,52774],{"class":483},[152,73350,2000],{"class":293},[152,73352,2965],{"class":483},[152,73354,73355],{"class":281,"line":932},[152,73356,3838],{"class":483},[152,73358,73359],{"class":281,"line":942},[152,73360,307],{"emptyLinePlaceholder":306},[152,73362,73363,73365],{"class":281,"line":949},[152,73364,58616],{"class":52637},[152,73366,17187],{"class":483},[152,73368,73369,73371,73373,73375],{"class":281,"line":954},[152,73370,58623],{"class":293},[152,73372,52774],{"class":483},[152,73374,52929],{"class":293},[152,73376,2965],{"class":483},[152,73378,73379,73381,73383,73385,73387],{"class":281,"line":959},[152,73380,63414],{"class":293},[152,73382,52774],{"class":483},[152,73384,2508],{"class":293},[152,73386,52829],{"class":476},[152,73388,2965],{"class":483},[152,73390,73391],{"class":281,"line":970},[152,73392,3838],{"class":483},[152,73394,73395],{"class":281,"line":979},[152,73396,307],{"emptyLinePlaceholder":306},[152,73398,73399,73402],{"class":281,"line":989},[152,73400,73401],{"class":285},"    .info",[152,73403,17187],{"class":483},[152,73405,73406,73408,73410,73412,73414],{"class":281,"line":996},[152,73407,56108],{"class":293},[152,73409,52774],{"class":483},[152,73411,52826],{"class":293},[152,73413,52829],{"class":476},[152,73415,2965],{"class":483},[152,73417,73418,73420,73422,73424,73426,73428],{"class":281,"line":1001},[152,73419,56043],{"class":293},[152,73421,52774],{"class":483},[152,73423,2254],{"class":293},[152,73425,52829],{"class":476},[152,73427,52893],{"class":293},[152,73429,2965],{"class":483},[152,73431,73432,73434,73436,73438],{"class":281,"line":1006},[152,73433,58623],{"class":293},[152,73435,52774],{"class":483},[152,73437,52929],{"class":293},[152,73439,2965],{"class":483},[152,73441,73442],{"class":281,"line":1018},[152,73443,3838],{"class":483},[152,73445,73446],{"class":281,"line":1027},[152,73447,307],{"emptyLinePlaceholder":306},[152,73449,73450,73453],{"class":281,"line":1037},[152,73451,73452],{"class":285},"    .uname",[152,73454,32803],{"class":483},[152,73456,73457,73460],{"class":281,"line":1044},[152,73458,73459],{"class":285},"    .age",[152,73461,32803],{"class":483},[152,73463,73464,73467],{"class":281,"line":1049},[152,73465,73466],{"class":285},"    .salary",[152,73468,17187],{"class":483},[152,73470,73471,73473,73475,73477,73479],{"class":281,"line":1054},[152,73472,56108],{"class":293},[152,73474,52774],{"class":483},[152,73476,2119],{"class":293},[152,73478,52829],{"class":476},[152,73480,2965],{"class":483},[152,73482,73483,73485,73487,73489,73491],{"class":281,"line":1065},[152,73484,56122],{"class":293},[152,73486,52774],{"class":483},[152,73488,2508],{"class":293},[152,73490,52829],{"class":476},[152,73492,2965],{"class":483},[152,73494,73495,73497,73499,73501],{"class":281,"line":1074},[152,73496,63117],{"class":293},[152,73498,52774],{"class":483},[152,73500,56074],{"class":293},[152,73502,2965],{"class":483},[152,73504,73505,73507,73509,73511,73513],{"class":281,"line":1084},[152,73506,63087],{"class":293},[152,73508,52774],{"class":483},[152,73510,2383],{"class":293},[152,73512,52829],{"class":476},[152,73514,2965],{"class":483},[152,73516,73517],{"class":281,"line":1091},[152,73518,3838],{"class":483},[152,73520,73521],{"class":281,"line":1096},[152,73522,307],{"emptyLinePlaceholder":306},[152,73524,73525,73528],{"class":281,"line":1101},[152,73526,73527],{"class":285},"    .gender",[152,73529,32803],{"class":483},[152,73531,73532,73535],{"class":281,"line":1112},[152,73533,73534],{"class":285},"    .city",[152,73536,17187],{"class":483},[152,73538,73539,73541,73543,73545,73547],{"class":281,"line":1121},[152,73540,56108],{"class":293},[152,73542,52774],{"class":483},[152,73544,2119],{"class":293},[152,73546,52829],{"class":476},[152,73548,2965],{"class":483},[152,73550,73551,73553,73555,73557,73559],{"class":281,"line":1131},[152,73552,56122],{"class":293},[152,73554,52774],{"class":483},[152,73556,2633],{"class":293},[152,73558,52829],{"class":476},[152,73560,2965],{"class":483},[152,73562,73563,73565,73567,73569],{"class":281,"line":1138},[152,73564,63117],{"class":293},[152,73566,52774],{"class":483},[152,73568,56074],{"class":293},[152,73570,2965],{"class":483},[152,73572,73573,73575,73577,73579,73581],{"class":281,"line":1143},[152,73574,63087],{"class":293},[152,73576,52774],{"class":483},[152,73578,2383],{"class":293},[152,73580,52829],{"class":476},[152,73582,2965],{"class":483},[152,73584,73585,73587,73589,73591,73593,73595,73598,73600,73602,73604,73607,73609,73611],{"class":281,"line":1148},[152,73586,63314],{"class":293},[152,73588,52774],{"class":483},[152,73590,2026],{"class":293},[152,73592,52829],{"class":476},[152,73594,52858],{"class":293},[152,73596,73597],{"class":293}," rgb",[152,73599,1819],{"class":483},[152,73601,3382],{"class":293},[152,73603,14051],{"class":483},[152,73605,73606],{"class":293},"197",[152,73608,14051],{"class":483},[152,73610,73606],{"class":293},[152,73612,4362],{"class":483},[152,73614,73615],{"class":281,"line":1159},[152,73616,3838],{"class":483},[152,73618,73619],{"class":281,"line":1168},[152,73620,307],{"emptyLinePlaceholder":306},[152,73622,73623,73626],{"class":281,"line":1178},[152,73624,73625],{"class":52637},"    button",[152,73627,17187],{"class":483},[152,73629,73630,73632,73634,73636,73638],{"class":281,"line":1185},[152,73631,56122],{"class":293},[152,73633,52774],{"class":483},[152,73635,2633],{"class":293},[152,73637,52829],{"class":476},[152,73639,2965],{"class":483},[152,73641,73642,73644,73646,73648,73650],{"class":281,"line":1190},[152,73643,56108],{"class":293},[152,73645,52774],{"class":483},[152,73647,2292],{"class":293},[152,73649,52829],{"class":476},[152,73651,2965],{"class":483},[152,73653,73654,73656,73658,73661,73663,73665,73667,73670,73672,73674],{"class":281,"line":1195},[152,73655,56221],{"class":293},[152,73657,52774],{"class":483},[152,73659,73660],{"class":293},"rgb",[152,73662,1819],{"class":483},[152,73664,2774],{"class":293},[152,73666,14051],{"class":483},[152,73668,73669],{"class":293},"187",[152,73671,14051],{"class":483},[152,73673,2107],{"class":293},[152,73675,4362],{"class":483},[152,73677,73678,73680,73682,73684],{"class":281,"line":1206},[152,73679,58753],{"class":293},[152,73681,52774],{"class":483},[152,73683,62179],{"class":293},[152,73685,2965],{"class":483},[152,73687,73688,73690,73692,73694],{"class":281,"line":1215},[152,73689,63314],{"class":293},[152,73691,52774],{"class":483},[152,73693,2000],{"class":293},[152,73695,2965],{"class":483},[152,73697,73698],{"class":281,"line":1225},[152,73699,3838],{"class":483},[152,73701,73702],{"class":281,"line":1232},[152,73703,307],{"emptyLinePlaceholder":306},[152,73705,73706,73708,73710],{"class":281,"line":1237},[152,73707,73625],{"class":52637},[152,73709,53025],{"class":52637},[152,73711,17187],{"class":483},[152,73713,73714,73716,73718,73721],{"class":281,"line":1242},[152,73715,56346],{"class":293},[152,73717,52774],{"class":483},[152,73719,73720],{"class":293},"inline-block",[152,73722,2965],{"class":483},[152,73724,73725,73727,73729,73731,73733],{"class":281,"line":1253},[152,73726,56108],{"class":293},[152,73728,52774],{"class":483},[152,73730,2254],{"class":293},[152,73732,52829],{"class":476},[152,73734,2965],{"class":483},[152,73736,73737,73739,73741,73743,73745],{"class":281,"line":1262},[152,73738,56122],{"class":293},[152,73740,52774],{"class":483},[152,73742,2254],{"class":293},[152,73744,52829],{"class":476},[152,73746,2965],{"class":483},[152,73748,73749,73751,73753,73755,73757],{"class":281,"line":1272},[152,73750,58696],{"class":293},[152,73752,52774],{"class":483},[152,73754,2280],{"class":293},[152,73756,52829],{"class":476},[152,73758,2965],{"class":483},[152,73760,73761,73763,73765,73767,73769,73771,73774],{"class":281,"line":1279},[152,73762,63314],{"class":293},[152,73764,52774],{"class":483},[152,73766,2026],{"class":293},[152,73768,52829],{"class":476},[152,73770,52858],{"class":293},[152,73772,73773],{"class":293}," #fff",[152,73775,2965],{"class":483},[152,73777,73778,73780,73782,73784,73786],{"class":281,"line":1284},[152,73779,56471],{"class":293},[152,73781,52774],{"class":483},[152,73783,2127],{"class":293},[152,73785,52829],{"class":476},[152,73787,2965],{"class":483},[152,73789,73790,73792,73794,73796,73798],{"class":281,"line":1289},[152,73791,63087],{"class":293},[152,73793,52774],{"class":483},[152,73795,2026],{"class":293},[152,73797,52829],{"class":476},[152,73799,2965],{"class":483},[152,73801,73802],{"class":281,"line":1301},[152,73803,3838],{"class":483},[152,73805,73806],{"class":281,"line":1310},[152,73807,307],{"emptyLinePlaceholder":306},[152,73809,73810,73813],{"class":281,"line":1320},[152,73811,73812],{"class":285},"    .total",[152,73814,17187],{"class":483},[152,73816,73817,73819,73821,73823,73825],{"class":281,"line":1327},[152,73818,56108],{"class":293},[152,73820,52774],{"class":483},[152,73822,62966],{"class":293},[152,73824,52829],{"class":476},[152,73826,2965],{"class":483},[152,73828,73829,73831,73833,73835,73837],{"class":281,"line":11528},[152,73830,56122],{"class":293},[152,73832,52774],{"class":483},[152,73834,2209],{"class":293},[152,73836,52829],{"class":476},[152,73838,2965],{"class":483},[152,73840,73841,73843,73845,73847,73849],{"class":281,"line":11536},[152,73842,58696],{"class":293},[152,73844,52774],{"class":483},[152,73846,2209],{"class":293},[152,73848,52829],{"class":476},[152,73850,2965],{"class":483},[152,73852,73853,73855,73857,73860],{"class":281,"line":11541},[152,73854,58623],{"class":293},[152,73856,52774],{"class":483},[152,73858,73859],{"class":293},"right",[152,73861,2965],{"class":483},[152,73863,73864,73866,73868,73870,73872,73874,73876,73878],{"class":281,"line":18219},[152,73865,56043],{"class":293},[152,73867,52774],{"class":483},[152,73869,2209],{"class":293},[152,73871,52829],{"class":476},[152,73873,52893],{"class":293},[152,73875,3689],{"class":293},[152,73877,52829],{"class":476},[152,73879,2965],{"class":483},[152,73881,73882,73885,73887,73889,73891],{"class":281,"line":18225},[152,73883,73884],{"class":293},"      padding-right",[152,73886,52774],{"class":483},[152,73888,2254],{"class":293},[152,73890,52829],{"class":476},[152,73892,2965],{"class":483},[152,73894,73895,73897,73899,73901,73903],{"class":281,"line":18248},[152,73896,56259],{"class":293},[152,73898,52774],{"class":483},[152,73900,2331],{"class":293},[152,73902,52829],{"class":476},[152,73904,2965],{"class":483},[152,73906,73907,73909,73911,73913,73915,73918,73920,73923,73925,73927],{"class":281,"line":18254},[152,73908,56221],{"class":293},[152,73910,52774],{"class":483},[152,73912,73660],{"class":293},[152,73914,1819],{"class":483},[152,73916,73917],{"class":293},"237",[152,73919,14051],{"class":483},[152,73921,73922],{"class":293},"235",[152,73924,14051],{"class":483},[152,73926,73922],{"class":293},[152,73928,4362],{"class":483},[152,73930,73931,73934,73936,73938],{"class":281,"line":18277},[152,73932,73933],{"class":293},"      box-sizing",[152,73935,52774],{"class":483},[152,73937,61842],{"class":293},[152,73939,2965],{"class":483},[152,73941,73942],{"class":281,"line":18291},[152,73943,3838],{"class":483},[152,73945,73946],{"class":281,"line":18311},[152,73947,307],{"emptyLinePlaceholder":306},[152,73949,73950,73952,73954],{"class":281,"line":18317},[152,73951,73812],{"class":285},[152,73953,53025],{"class":52637},[152,73955,17187],{"class":483},[152,73957,73958,73960,73962,73964],{"class":281,"line":18328},[152,73959,58753],{"class":293},[152,73961,52774],{"class":483},[152,73963,58758],{"class":293},[152,73965,2965],{"class":483},[152,73967,73968],{"class":281,"line":18351},[152,73969,3838],{"class":483},[152,73971,73972],{"class":281,"line":18373},[152,73973,307],{"emptyLinePlaceholder":306},[152,73975,73976,73978],{"class":281,"line":18378},[152,73977,66360],{"class":52637},[152,73979,17187],{"class":483},[152,73981,73982,73984,73986,73988,73990],{"class":281,"line":18384},[152,73983,56108],{"class":293},[152,73985,52774],{"class":483},[152,73987,62966],{"class":293},[152,73989,52829],{"class":476},[152,73991,2965],{"class":483},[152,73993,73994,73996,73998,74001],{"class":281,"line":18398},[152,73995,56043],{"class":293},[152,73997,52774],{"class":483},[152,73999,74000],{"class":293},"auto",[152,74002,2965],{"class":483},[152,74004,74005,74007,74009,74011],{"class":281,"line":18411},[152,74006,66367],{"class":293},[152,74008,52774],{"class":483},[152,74010,66372],{"class":293},[152,74012,2965],{"class":483},[152,74014,74015],{"class":281,"line":18416},[152,74016,3838],{"class":483},[152,74018,74019],{"class":281,"line":18430},[152,74020,307],{"emptyLinePlaceholder":306},[152,74022,74023,74025],{"class":281,"line":18435},[152,74024,66452],{"class":52637},[152,74026,17187],{"class":483},[152,74028,74029,74031,74033,74035,74037,74039,74041,74043,74045,74047],{"class":281,"line":18441},[152,74030,56221],{"class":293},[152,74032,52774],{"class":483},[152,74034,73660],{"class":293},[152,74036,1819],{"class":483},[152,74038,73917],{"class":293},[152,74040,14051],{"class":483},[152,74042,73922],{"class":293},[152,74044,14051],{"class":483},[152,74046,73922],{"class":293},[152,74048,4362],{"class":483},[152,74050,74051],{"class":281,"line":18446},[152,74052,3838],{"class":483},[152,74054,74055],{"class":281,"line":18460},[152,74056,307],{"emptyLinePlaceholder":306},[152,74058,74059,74061],{"class":281,"line":18465},[152,74060,66452],{"class":52637},[152,74062,32803],{"class":483},[152,74064,74065,74067],{"class":281,"line":18470},[152,74066,66518],{"class":52637},[152,74068,17187],{"class":483},[152,74070,74071,74073,74075,74077,74079],{"class":281,"line":18484},[152,74072,56122],{"class":293},[152,74074,52774],{"class":483},[152,74076,2081],{"class":293},[152,74078,52829],{"class":476},[152,74080,2965],{"class":483},[152,74082,74083,74085,74087,74089],{"class":281,"line":18496},[152,74084,58623],{"class":293},[152,74086,52774],{"class":483},[152,74088,34],{"class":293},[152,74090,2965],{"class":483},[152,74092,74093,74095,74097,74099,74101],{"class":281,"line":18501},[152,74094,56259],{"class":293},[152,74096,52774],{"class":483},[152,74098,2357],{"class":293},[152,74100,52829],{"class":476},[152,74102,2965],{"class":483},[152,74104,74105,74107,74109,74111,74113,74115,74117,74119,74122,74124,74127,74129,74131],{"class":281,"line":18514},[152,74106,63314],{"class":293},[152,74108,52774],{"class":483},[152,74110,2026],{"class":293},[152,74112,52829],{"class":476},[152,74114,52858],{"class":293},[152,74116,73597],{"class":293},[152,74118,1819],{"class":483},[152,74120,74121],{"class":293},"228",[152,74123,14051],{"class":483},[152,74125,74126],{"class":293},"225",[152,74128,14051],{"class":483},[152,74130,74126],{"class":293},[152,74132,4362],{"class":483},[152,74134,74135,74138,74140,74142,74144],{"class":281,"line":18519},[152,74136,74137],{"class":293},"      padding-left",[152,74139,52774],{"class":483},[152,74141,2127],{"class":293},[152,74143,52829],{"class":476},[152,74145,2965],{"class":483},[152,74147,74148,74150,74152,74154,74157,74159,74161],{"class":281,"line":18524},[152,74149,63197],{"class":293},[152,74151,52774],{"class":483},[152,74153,29721],{"class":293},[152,74155,74156],{"class":293}," linear",[152,74158,63204],{"class":293},[152,74160,2503],{"class":476},[152,74162,2965],{"class":483},[152,74164,74165],{"class":281,"line":18529},[152,74166,3838],{"class":483},[152,74168,74169],{"class":281,"line":18542},[152,74170,307],{"emptyLinePlaceholder":306},[152,74172,74173,74176,74178,74180],{"class":281,"line":18547},[152,74174,74175],{"class":52637},"    tbody",[152,74177,71481],{"class":52637},[152,74179,62277],{"class":285},[152,74181,17187],{"class":483},[152,74183,74184,74186,74188,74190,74192,74194,74196,74198,74200,74202],{"class":281,"line":33970},[152,74185,56221],{"class":293},[152,74187,52774],{"class":483},[152,74189,73660],{"class":293},[152,74191,1819],{"class":483},[152,74193,73917],{"class":293},[152,74195,14051],{"class":483},[152,74197,73922],{"class":293},[152,74199,14051],{"class":483},[152,74201,73922],{"class":293},[152,74203,4362],{"class":483},[152,74205,74206,74208,74210,74212],{"class":281,"line":33976},[152,74207,63362],{"class":293},[152,74209,52774],{"class":483},[152,74211,63367],{"class":293},[152,74213,2965],{"class":483},[152,74215,74216],{"class":281,"line":33982},[152,74217,3838],{"class":483},[152,74219,74220],{"class":281,"line":33988},[152,74221,307],{"emptyLinePlaceholder":306},[152,74223,74224,74226,74228,74231,74233],{"class":281,"line":33994},[152,74225,74175],{"class":52637},[152,74227,71481],{"class":52637},[152,74229,74230],{"class":52637}," td",[152,74232,3070],{"class":52637},[152,74234,17187],{"class":483},[152,74236,74237,74239,74241,74243],{"class":281,"line":34005},[152,74238,56346],{"class":293},[152,74240,52774],{"class":483},[152,74242,62206],{"class":293},[152,74244,2965],{"class":483},[152,74246,74247,74249,74251,74253,74255],{"class":281,"line":34011},[152,74248,56108],{"class":293},[152,74250,52774],{"class":483},[152,74252,2714],{"class":293},[152,74254,52829],{"class":476},[152,74256,2965],{"class":483},[152,74258,74259,74261,74263,74265,74267],{"class":281,"line":34031},[152,74260,56122],{"class":293},[152,74262,52774],{"class":483},[152,74264,2633],{"class":293},[152,74266,52829],{"class":476},[152,74268,2965],{"class":483},[152,74270,74271,74273,74275,74277,74279],{"class":281,"line":34037},[152,74272,58696],{"class":293},[152,74274,52774],{"class":483},[152,74276,2633],{"class":293},[152,74278,52829],{"class":476},[152,74280,2965],{"class":483},[152,74282,74283,74285,74287,74289,74291],{"class":281,"line":34048},[152,74284,63414],{"class":293},[152,74286,52774],{"class":483},[152,74288,1894],{"class":293},[152,74290,52829],{"class":476},[152,74292,2965],{"class":483},[152,74294,74295,74297,74299,74301],{"class":281,"line":34054},[152,74296,58753],{"class":293},[152,74298,52774],{"class":483},[152,74300,62179],{"class":293},[152,74302,2965],{"class":483},[152,74304,74305,74307,74309,74311],{"class":281,"line":34060},[152,74306,58623],{"class":293},[152,74308,52774],{"class":483},[152,74310,52929],{"class":293},[152,74312,2965],{"class":483},[152,74314,74315,74317,74319,74321],{"class":281,"line":34066},[152,74316,65307],{"class":293},[152,74318,52774],{"class":483},[152,74320,56074],{"class":293},[152,74322,2965],{"class":483},[152,74324,74325,74327,74329,74332],{"class":281,"line":34072},[152,74326,56221],{"class":293},[152,74328,52774],{"class":483},[152,74330,74331],{"class":293},"orange",[152,74333,2965],{"class":483},[152,74335,74336,74338,74340,74343,74345],{"class":281,"line":34078},[152,74337,56471],{"class":293},[152,74339,52774],{"class":483},[152,74341,74342],{"class":293},"12.5",[152,74344,52829],{"class":476},[152,74346,2965],{"class":483},[152,74348,74349],{"class":281,"line":34084},[152,74350,3838],{"class":483},[152,74352,74353,74355,74357],{"class":281,"line":34090},[152,74354,53754],{"class":483},[152,74356,1736],{"class":52637},[152,74358,52644],{"class":483},[152,74360,74361,74363,74365],{"class":281,"line":34110},[152,74362,53122],{"class":483},[152,74364,52671],{"class":52637},[152,74366,52644],{"class":483},[152,74368,74369],{"class":281,"line":34116},[152,74370,307],{"emptyLinePlaceholder":306},[152,74372,74373,74375,74377],{"class":281,"line":34132},[152,74374,844],{"class":483},[152,74376,53137],{"class":52637},[152,74378,52644],{"class":483},[152,74380,74381,74383,74385,74388,74390],{"class":281,"line":34138},[152,74382,53481],{"class":483},[152,74384,1760],{"class":52637},[152,74386,74387],{"class":483},">学生就业统计表\u003C\u002F",[152,74389,1760],{"class":52637},[152,74391,52644],{"class":483},[152,74393,74394,74396,74398,74400,74402,74404,74406,74408,74410],{"class":281,"line":34152},[152,74395,53481],{"class":483},[152,74397,67962],{"class":52637},[152,74399,54823],{"class":285},[152,74401,1864],{"class":483},[152,74403,64001],{"class":289},[152,74405,70407],{"class":285},[152,74407,1864],{"class":483},[152,74409,33113],{"class":289},[152,74411,52644],{"class":483},[152,74413,74414,74416,74418,74420,74422,74424,74426,74428,74430,74432,74434,74437,74439,74441,74443],{"class":281,"line":34158},[152,74415,52678],{"class":483},[152,74417,55158],{"class":52637},[152,74419,55161],{"class":285},[152,74421,1864],{"class":483},[152,74423,64036],{"class":289},[152,74425,16535],{"class":285},[152,74427,1864],{"class":483},[152,74429,70433],{"class":289},[152,74431,62357],{"class":285},[152,74433,1864],{"class":483},[152,74435,74436],{"class":289},"\"姓名\"",[152,74438,54823],{"class":285},[152,74440,1864],{"class":483},[152,74442,70433],{"class":289},[152,74444,52644],{"class":483},[152,74446,74447,74449,74451,74453,74455,74457,74459,74461,74463,74465,74467,74470,74472,74474,74476],{"class":281,"line":34173},[152,74448,52678],{"class":483},[152,74450,55158],{"class":52637},[152,74452,55161],{"class":285},[152,74454,1864],{"class":483},[152,74456,64036],{"class":289},[152,74458,16535],{"class":285},[152,74460,1864],{"class":483},[152,74462,70461],{"class":289},[152,74464,62357],{"class":285},[152,74466,1864],{"class":483},[152,74468,74469],{"class":289},"\"年龄\"",[152,74471,54823],{"class":285},[152,74473,1864],{"class":483},[152,74475,70461],{"class":289},[152,74477,52644],{"class":483},[152,74479,74480,74482,74484,74486,74488,74490,74492,74494,74496,74498,74500,74503,74505,74507,74509],{"class":281,"line":34179},[152,74481,52678],{"class":483},[152,74483,55158],{"class":52637},[152,74485,55161],{"class":285},[152,74487,1864],{"class":483},[152,74489,64036],{"class":289},[152,74491,16535],{"class":285},[152,74493,1864],{"class":483},[152,74495,70563],{"class":289},[152,74497,62357],{"class":285},[152,74499,1864],{"class":483},[152,74501,74502],{"class":289},"\"薪资\"",[152,74504,54823],{"class":285},[152,74506,1864],{"class":483},[152,74508,70563],{"class":289},[152,74510,52644],{"class":483},[152,74512,74513,74515,74517,74519,74521,74523,74525,74527,74529,74531,74533,74535],{"class":281,"line":34188},[152,74514,52678],{"class":483},[152,74516,70481],{"class":52637},[152,74518,16535],{"class":285},[152,74520,1864],{"class":483},[152,74522,70488],{"class":289},[152,74524,16574],{"class":285},[152,74526,1864],{"class":483},[152,74528,9294],{"class":289},[152,74530,54823],{"class":285},[152,74532,1864],{"class":483},[152,74534,70488],{"class":289},[152,74536,52644],{"class":483},[152,74538,74539,74541,74543,74545,74547,74549,74551,74553],{"class":281,"line":34194},[152,74540,56571],{"class":483},[152,74542,70503],{"class":52637},[152,74544,67988],{"class":285},[152,74546,1864],{"class":483},[152,74548,11577],{"class":289},[152,74550,70512],{"class":483},[152,74552,70503],{"class":52637},[152,74554,52644],{"class":483},[152,74556,74557,74559,74561,74563,74565,74567,74569,74571],{"class":281,"line":34203},[152,74558,56571],{"class":483},[152,74560,70503],{"class":52637},[152,74562,67988],{"class":285},[152,74564,1864],{"class":483},[152,74566,11646],{"class":289},[152,74568,70531],{"class":483},[152,74570,70503],{"class":52637},[152,74572,52644],{"class":483},[152,74574,74575,74577,74579],{"class":281,"line":34209},[152,74576,53113],{"class":483},[152,74578,70481],{"class":52637},[152,74580,52644],{"class":483},[152,74582,74583,74585,74587,74589,74591,74593,74595,74597,74599,74601,74603,74605],{"class":281,"line":34215},[152,74584,52678],{"class":483},[152,74586,70481],{"class":52637},[152,74588,16535],{"class":285},[152,74590,1864],{"class":483},[152,74592,70585],{"class":289},[152,74594,16574],{"class":285},[152,74596,1864],{"class":483},[152,74598,9294],{"class":289},[152,74600,54823],{"class":285},[152,74602,1864],{"class":483},[152,74604,70585],{"class":289},[152,74606,52644],{"class":483},[152,74608,74609,74611,74613,74615,74617,74619,74621,74623],{"class":281,"line":34224},[152,74610,56571],{"class":483},[152,74612,70503],{"class":52637},[152,74614,67988],{"class":285},[152,74616,1864],{"class":483},[152,74618,70606],{"class":289},[152,74620,70609],{"class":483},[152,74622,70503],{"class":52637},[152,74624,52644],{"class":483},[152,74626,74627,74629,74631,74633,74635,74637,74639,74641],{"class":281,"line":34230},[152,74628,56571],{"class":483},[152,74630,70503],{"class":52637},[152,74632,67988],{"class":285},[152,74634,1864],{"class":483},[152,74636,70626],{"class":289},[152,74638,70629],{"class":483},[152,74640,70503],{"class":52637},[152,74642,52644],{"class":483},[152,74644,74645,74647,74649,74651,74653,74655,74657,74659],{"class":281,"line":34241},[152,74646,56571],{"class":483},[152,74648,70503],{"class":52637},[152,74650,67988],{"class":285},[152,74652,1864],{"class":483},[152,74654,70646],{"class":289},[152,74656,70649],{"class":483},[152,74658,70503],{"class":52637},[152,74660,52644],{"class":483},[152,74662,74663,74665,74667,74669,74671,74673,74675,74677],{"class":281,"line":34247},[152,74664,56571],{"class":483},[152,74666,70503],{"class":52637},[152,74668,67988],{"class":285},[152,74670,1864],{"class":483},[152,74672,70666],{"class":289},[152,74674,70669],{"class":483},[152,74676,70503],{"class":52637},[152,74678,52644],{"class":483},[152,74680,74681,74683,74685,74687,74689,74691,74693,74695],{"class":281,"line":34266},[152,74682,56571],{"class":483},[152,74684,70503],{"class":52637},[152,74686,67988],{"class":285},[152,74688,1864],{"class":483},[152,74690,70686],{"class":289},[152,74692,70689],{"class":483},[152,74694,70503],{"class":52637},[152,74696,52644],{"class":483},[152,74698,74699,74701,74703],{"class":281,"line":34272},[152,74700,53113],{"class":483},[152,74702,70481],{"class":52637},[152,74704,52644],{"class":483},[152,74706,74707,74709,74711],{"class":281,"line":34283},[152,74708,52678],{"class":483},[152,74710,55224],{"class":52637},[152,74712,52644],{"class":483},[152,74714,74715,74717,74719,74722,74724,74727,74729],{"class":281,"line":34289},[152,74716,56571],{"class":483},[152,74718,152],{"class":52637},[152,74720,74721],{"class":483},">+\u003C\u002F",[152,74723,152],{"class":52637},[152,74725,74726],{"class":483},">添加\u003C\u002F",[152,74728,55224],{"class":52637},[152,74730,52644],{"class":483},[152,74732,74733,74735,74737],{"class":281,"line":34309},[152,74734,53754],{"class":483},[152,74736,67962],{"class":52637},[152,74738,52644],{"class":483},[152,74740,74741,74743,74745,74747,74749,74751,74754,74756,74759,74761,74764,74766],{"class":281,"line":34325},[152,74742,53481],{"class":483},[152,74744,52948],{"class":52637},[152,74746,54823],{"class":285},[152,74748,1864],{"class":483},[152,74750,63917],{"class":289},[152,74752,74753],{"class":483},">共有数据 \u003C",[152,74755,152],{"class":52637},[152,74757,74758],{"class":483},">0\u003C\u002F",[152,74760,152],{"class":52637},[152,74762,74763],{"class":483},"> 条\u003C\u002F",[152,74765,52948],{"class":52637},[152,74767,52644],{"class":483},[152,74769,74770,74772,74774],{"class":281,"line":34331},[152,74771,53481],{"class":483},[152,74773,23],{"class":52637},[152,74775,52644],{"class":483},[152,74777,74778,74780,74782],{"class":281,"line":34345},[152,74779,52678],{"class":483},[152,74781,26],{"class":52637},[152,74783,52644],{"class":483},[152,74785,74786,74788,74790],{"class":281,"line":34351},[152,74787,56571],{"class":483},[152,74789,29],{"class":52637},[152,74791,52644],{"class":483},[152,74793,74794,74796,74798,74801,74803],{"class":281,"line":34357},[152,74795,56639],{"class":483},[152,74797,32],{"class":52637},[152,74799,74800],{"class":483},">ID\u003C\u002F",[152,74802,32],{"class":52637},[152,74804,52644],{"class":483},[152,74806,74807,74809,74811,74813,74815],{"class":281,"line":34368},[152,74808,56639],{"class":483},[152,74810,32],{"class":52637},[152,74812,70792],{"class":483},[152,74814,32],{"class":52637},[152,74816,52644],{"class":483},[152,74818,74819,74821,74823,74825,74827],{"class":281,"line":34374},[152,74820,56639],{"class":483},[152,74822,32],{"class":52637},[152,74824,70805],{"class":483},[152,74826,32],{"class":52637},[152,74828,52644],{"class":483},[152,74830,74831,74833,74835,74837,74839],{"class":281,"line":34380},[152,74832,56639],{"class":483},[152,74834,32],{"class":52637},[152,74836,70818],{"class":483},[152,74838,32],{"class":52637},[152,74840,52644],{"class":483},[152,74842,74843,74845,74847,74849,74851],{"class":281,"line":34390},[152,74844,56639],{"class":483},[152,74846,32],{"class":52637},[152,74848,70831],{"class":483},[152,74850,32],{"class":52637},[152,74852,52644],{"class":483},[152,74854,74855,74857,74859,74861,74863],{"class":281,"line":34396},[152,74856,56639],{"class":483},[152,74858,32],{"class":52637},[152,74860,70844],{"class":483},[152,74862,32],{"class":52637},[152,74864,52644],{"class":483},[152,74866,74867,74869,74871,74874,74876],{"class":281,"line":34407},[152,74868,56639],{"class":483},[152,74870,32],{"class":52637},[152,74872,74873],{"class":483},">录入时间\u003C\u002F",[152,74875,32],{"class":52637},[152,74877,52644],{"class":483},[152,74879,74880,74882,74884,74886,74888],{"class":281,"line":34413},[152,74881,56639],{"class":483},[152,74883,32],{"class":52637},[152,74885,70857],{"class":483},[152,74887,32],{"class":52637},[152,74889,52644],{"class":483},[152,74891,74892,74894,74896],{"class":281,"line":34423},[152,74893,56744],{"class":483},[152,74895,29],{"class":52637},[152,74897,52644],{"class":483},[152,74899,74900,74902,74904],{"class":281,"line":34428},[152,74901,53113],{"class":483},[152,74903,26],{"class":52637},[152,74905,52644],{"class":483},[152,74907,74908,74910,74912],{"class":281,"line":34434},[152,74909,52678],{"class":483},[152,74911,43],{"class":52637},[152,74913,52644],{"class":483},[152,74915,74916],{"class":281,"line":34483},[152,74917,74918],{"class":866},"      \u003C!-- \u003Ctr>\n",[152,74920,74921],{"class":281,"line":34530},[152,74922,74923],{"class":866},"        \u003Ctd>1\u003C\u002Ftd>\n",[152,74925,74926],{"class":281,"line":34535},[152,74927,74923],{"class":866},[152,74929,74930],{"class":281,"line":34541},[152,74931,74923],{"class":866},[152,74933,74934],{"class":281,"line":34560},[152,74935,74923],{"class":866},[152,74937,74938],{"class":281,"line":34566},[152,74939,74923],{"class":866},[152,74941,74942],{"class":281,"line":34586},[152,74943,74923],{"class":866},[152,74945,74946],{"class":281,"line":34592},[152,74947,74923],{"class":866},[152,74949,74950],{"class":281,"line":34598},[152,74951,74952],{"class":866},"        \u003Ctd>\n",[152,74954,74955],{"class":281,"line":34608},[152,74956,74957],{"class":866},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[152,74959,74960],{"class":281,"line":34613},[152,74961,74962],{"class":866},"        \u003C\u002Ftd>\n",[152,74964,74965],{"class":281,"line":34619},[152,74966,74967],{"class":866},"      \u003C\u002Ftr> -->\n",[152,74969,74970,74972,74974],{"class":281,"line":34635},[152,74971,53113],{"class":483},[152,74973,43],{"class":52637},[152,74975,52644],{"class":483},[152,74977,74978,74980,74982],{"class":281,"line":34680},[152,74979,53754],{"class":483},[152,74981,23],{"class":52637},[152,74983,52644],{"class":483},[152,74985,74986,74988,74990],{"class":281,"line":34686},[152,74987,53481],{"class":483},[152,74989,53150],{"class":52637},[152,74991,52644],{"class":483},[152,74993,74994],{"class":281,"line":34692},[152,74995,74996],{"class":866},"    \u002F\u002F const initData = [{\n",[152,74998,74999],{"class":281,"line":34698},[152,75000,75001],{"class":866},"    \u002F\u002F   unameId: 1,\n",[152,75003,75004],{"class":281,"line":34709},[152,75005,75006],{"class":866},"    \u002F\u002F   uname: '华晨宇',\n",[152,75008,75009],{"class":281,"line":34715},[152,75010,75011],{"class":866},"    \u002F\u002F   age: 22,\n",[152,75013,75014],{"class":281,"line":34721},[152,75015,75016],{"class":866},"    \u002F\u002F   salary: 12000,\n",[152,75018,75019],{"class":281,"line":34727},[152,75020,75021],{"class":866},"    \u002F\u002F   gender: '男',\n",[152,75023,75024],{"class":281,"line":34745},[152,75025,75026],{"class":866},"    \u002F\u002F   city: '北京',\n",[152,75028,75029],{"class":281,"line":34759},[152,75030,75031],{"class":866},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[152,75033,75034],{"class":281,"line":34768},[152,75035,75036],{"class":866},"    \u002F\u002F }]\n",[152,75038,75039],{"class":281,"line":34777},[152,75040,75041],{"class":866},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[152,75043,75044],{"class":281,"line":34786},[152,75045,75046],{"class":866},"    \u002F\u002F 1.渲染业务\n",[152,75048,75049],{"class":281,"line":34795},[152,75050,75051],{"class":866},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[152,75053,75054],{"class":281,"line":34801},[152,75055,75056],{"class":866},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[152,75058,75059],{"class":281,"line":34807},[152,75060,75061],{"class":866},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[152,75063,75064],{"class":281,"line":34815},[152,75065,307],{"emptyLinePlaceholder":306},[152,75067,75068],{"class":281,"line":34820},[152,75069,75070],{"class":866},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[152,75072,75073],{"class":281,"line":34826},[152,75074,75075],{"class":866},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[152,75077,75078,75080,75082,75084],{"class":281,"line":34837},[152,75079,12837],{"class":476},[152,75081,59032],{"class":293},[152,75083,15180],{"class":476},[152,75085,53175],{"class":483},[152,75087,75088,75091,75093],{"class":281,"line":34843},[152,75089,75090],{"class":483},"    console.",[152,75092,59584],{"class":285},[152,75094,53749],{"class":483},[152,75096,75097],{"class":281,"line":34863},[152,75098,307],{"emptyLinePlaceholder":306},[152,75100,75101],{"class":281,"line":34869},[152,75102,75103],{"class":866},"    \u002F\u002F 时间函数\n",[152,75105,75106,75108,75111],{"class":281,"line":34875},[152,75107,71421],{"class":476},[152,75109,75110],{"class":285}," getTime",[152,75112,12469],{"class":483},[152,75114,75115,75117,75120,75122,75124,75127],{"class":281,"line":34881},[152,75116,59565],{"class":476},[152,75118,75119],{"class":293}," date",[152,75121,15180],{"class":476},[152,75123,13194],{"class":476},[152,75125,75126],{"class":285}," Date",[152,75128,3627],{"class":483},[152,75130,75131,75133,75135,75137,75140,75143,75145,75147,75149,75152,75155,75157,75159,75161,75163,75165,75167,75169],{"class":281,"line":34898},[152,75132,59565],{"class":476},[152,75134,17706],{"class":293},[152,75136,15180],{"class":476},[152,75138,75139],{"class":483}," date.",[152,75141,75142],{"class":285},"getHours",[152,75144,14666],{"class":483},[152,75146,844],{"class":476},[152,75148,3689],{"class":293},[152,75150,75151],{"class":476}," ?",[152,75153,75154],{"class":289}," '0'",[152,75156,46903],{"class":476},[152,75158,75139],{"class":483},[152,75160,75142],{"class":285},[152,75162,14666],{"class":483},[152,75164,841],{"class":476},[152,75166,75139],{"class":483},[152,75168,75142],{"class":285},[152,75170,3627],{"class":483},[152,75172,75173,75175,75178,75180,75182,75185,75187,75189,75191,75193,75195,75197,75199,75201,75203,75205,75207,75209],{"class":281,"line":34904},[152,75174,59565],{"class":476},[152,75176,75177],{"class":293}," m",[152,75179,15180],{"class":476},[152,75181,75139],{"class":483},[152,75183,75184],{"class":285},"getMinutes",[152,75186,14666],{"class":483},[152,75188,844],{"class":476},[152,75190,3689],{"class":293},[152,75192,75151],{"class":476},[152,75194,75154],{"class":289},[152,75196,46903],{"class":476},[152,75198,75139],{"class":483},[152,75200,75184],{"class":285},[152,75202,14666],{"class":483},[152,75204,841],{"class":476},[152,75206,75139],{"class":483},[152,75208,75184],{"class":285},[152,75210,3627],{"class":483},[152,75212,75213,75215,75217,75219,75221,75224,75226,75228,75230,75232,75234,75236,75238,75240,75242,75244,75246,75248],{"class":281,"line":34910},[152,75214,59565],{"class":476},[152,75216,10060],{"class":293},[152,75218,15180],{"class":476},[152,75220,75139],{"class":483},[152,75222,75223],{"class":285},"getSeconds",[152,75225,14666],{"class":483},[152,75227,844],{"class":476},[152,75229,3689],{"class":293},[152,75231,75151],{"class":476},[152,75233,75154],{"class":289},[152,75235,46903],{"class":476},[152,75237,75139],{"class":483},[152,75239,75223],{"class":285},[152,75241,14666],{"class":483},[152,75243,841],{"class":476},[152,75245,75139],{"class":483},[152,75247,75223],{"class":285},[152,75249,3627],{"class":483},[152,75251,75252,75254,75257,75259,75261,75264,75266,75269,75271,75274,75276,75278,75281,75283,75285,75287,75289,75291,75293,75296,75298,75301,75303,75306,75308,75310,75312],{"class":281,"line":34916},[152,75253,59565],{"class":476},[152,75255,75256],{"class":293}," str",[152,75258,15180],{"class":476},[152,75260,64240],{"class":289},[152,75262,75263],{"class":483},"date",[152,75265,2366],{"class":289},[152,75267,75268],{"class":285},"getFullYear",[152,75270,4077],{"class":289},[152,75272,75273],{"class":289},"}\u002F${",[152,75275,75263],{"class":483},[152,75277,2366],{"class":289},[152,75279,75280],{"class":285},"getMonth",[152,75282,14666],{"class":289},[152,75284,2289],{"class":476},[152,75286,26729],{"class":293},[152,75288,75273],{"class":289},[152,75290,75263],{"class":483},[152,75292,2366],{"class":289},[152,75294,75295],{"class":285},"getDate",[152,75297,4077],{"class":289},[152,75299,75300],{"class":289},"} ${",[152,75302,2223],{"class":483},[152,75304,75305],{"class":289},"}:${",[152,75307,2352],{"class":483},[152,75309,75305],{"class":289},[152,75311,2503],{"class":483},[152,75313,75314],{"class":289},"}`\n",[152,75316,75317,75320],{"class":281,"line":34922},[152,75318,75319],{"class":476},"      return",[152,75321,75322],{"class":483}," str\n",[152,75324,75325],{"class":281,"line":34928},[152,75326,3838],{"class":483},[152,75328,75329],{"class":281,"line":34955},[152,75330,75331],{"class":866},"    \u002F\u002F 渲染函数\n",[152,75333,75334,75336,75338,75340,75342,75344,75346,75348],{"class":281,"line":34979},[152,75335,12837],{"class":476},[152,75337,71084],{"class":293},[152,75339,15180],{"class":476},[152,75341,55733],{"class":483},[152,75343,55736],{"class":285},[152,75345,1819],{"class":483},[152,75347,71095],{"class":289},[152,75349,1825],{"class":483},[152,75351,75352,75354,75356],{"class":281,"line":34985},[152,75353,71421],{"class":476},[152,75355,71424],{"class":285},[152,75357,12469],{"class":483},[152,75359,75360],{"class":281,"line":34991},[152,75361,75362],{"class":866},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[152,75364,75365],{"class":281,"line":34997},[152,75366,75367],{"class":866},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[152,75369,75370,75372,75375,75377,75379,75382,75384,75386,75388,75391,75393,75396],{"class":281,"line":35008},[152,75371,59565],{"class":476},[152,75373,75374],{"class":293}," trArr",[152,75376,15180],{"class":476},[152,75378,53302],{"class":483},[152,75380,75381],{"class":285},"map",[152,75383,1819],{"class":483},[152,75385,55786],{"class":476},[152,75387,3322],{"class":483},[152,75389,75390],{"class":6858},"ele",[152,75392,14051],{"class":483},[152,75394,75395],{"class":6858},"index",[152,75397,14058],{"class":483},[152,75399,75400,75402],{"class":281,"line":35019},[152,75401,16367],{"class":476},[152,75403,71505],{"class":289},[152,75405,75406],{"class":281,"line":35025},[152,75407,75408],{"class":289},"      \u003Ctr>\n",[152,75410,75411,75413,75415,75417,75420],{"class":281,"line":35042},[152,75412,71510],{"class":289},[152,75414,75390],{"class":483},[152,75416,2366],{"class":289},[152,75418,75419],{"class":483},"unameId",[152,75421,71525],{"class":289},[152,75423,75424,75426,75428,75430,75432],{"class":281,"line":35065},[152,75425,71510],{"class":289},[152,75427,75390],{"class":483},[152,75429,2366],{"class":289},[152,75431,71541],{"class":483},[152,75433,71525],{"class":289},[152,75435,75436,75438,75440,75442,75444],{"class":281,"line":35088},[152,75437,71510],{"class":289},[152,75439,75390],{"class":483},[152,75441,2366],{"class":289},[152,75443,71558],{"class":483},[152,75445,71525],{"class":289},[152,75447,75448,75450,75452,75454,75456],{"class":281,"line":35094},[152,75449,71510],{"class":289},[152,75451,75390],{"class":483},[152,75453,2366],{"class":289},[152,75455,71575],{"class":483},[152,75457,71525],{"class":289},[152,75459,75460,75462,75464,75466,75468],{"class":281,"line":35099},[152,75461,71510],{"class":289},[152,75463,75390],{"class":483},[152,75465,2366],{"class":289},[152,75467,71592],{"class":483},[152,75469,71525],{"class":289},[152,75471,75472,75474,75476,75478,75480],{"class":281,"line":35108},[152,75473,71510],{"class":289},[152,75475,75390],{"class":483},[152,75477,2366],{"class":289},[152,75479,71609],{"class":483},[152,75481,71525],{"class":289},[152,75483,75484,75486,75488,75490,75492],{"class":281,"line":35118},[152,75485,71510],{"class":289},[152,75487,75390],{"class":483},[152,75489,2366],{"class":289},[152,75491,4038],{"class":483},[152,75493,71525],{"class":289},[152,75495,75496],{"class":281,"line":35124},[152,75497,74952],{"class":289},[152,75499,75500,75503,75505],{"class":281,"line":35129},[152,75501,75502],{"class":289},"          \u003Ca href=\"#\" data-id=\"${",[152,75504,75395],{"class":483},[152,75506,75507],{"class":289},"}\">删除\u003C\u002Fa>\n",[152,75509,75510],{"class":281,"line":35135},[152,75511,74962],{"class":289},[152,75513,75514],{"class":281,"line":35148},[152,75515,75516],{"class":289},"      \u003C\u002Ftr>\n",[152,75518,75519],{"class":281,"line":35154},[152,75520,75521],{"class":289},"  `\n",[152,75523,75524],{"class":281,"line":35165},[152,75525,66152],{"class":483},[152,75527,75528,75530,75532],{"class":281,"line":35176},[152,75529,59581],{"class":483},[152,75531,59584],{"class":285},[152,75533,75534],{"class":483},"(trArr)\n",[152,75536,75537],{"class":281,"line":35195},[152,75538,307],{"emptyLinePlaceholder":306},[152,75540,75541],{"class":281,"line":50855},[152,75542,75543],{"class":866},"      \u002F\u002F (2) 把数组转换为字符串join\n",[152,75545,75546],{"class":281,"line":50860},[152,75547,75548],{"class":866},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[152,75550,75551,75553,75555,75558,75561,75563,75566],{"class":281,"line":50869},[152,75552,71436],{"class":483},[152,75554,1864],{"class":476},[152,75556,75557],{"class":483}," trArr.",[152,75559,75560],{"class":285},"join",[152,75562,1819],{"class":483},[152,75564,75565],{"class":289},"''",[152,75567,1825],{"class":483},[152,75569,75570],{"class":281,"line":50878},[152,75571,75572],{"class":866},"      \u002F\u002F 显示共有几条\n",[152,75574,75575,75577,75579,75581,75584,75587,75589,75591],{"class":281,"line":50883},[152,75576,57108],{"class":483},[152,75578,55736],{"class":285},[152,75580,1819],{"class":483},[152,75582,75583],{"class":289},"'.total span'",[152,75585,75586],{"class":483},").innerHTML ",[152,75588,1864],{"class":476},[152,75590,53302],{"class":483},[152,75592,57168],{"class":293},[152,75594,75595],{"class":281,"line":50888},[152,75596,3838],{"class":483},[152,75598,75599],{"class":281,"line":50893},[152,75600,75601],{"class":866},"    \u002F\u002F render()\n",[152,75603,75604],{"class":281,"line":50906},[152,75605,307],{"emptyLinePlaceholder":306},[152,75607,75608],{"class":281,"line":50911},[152,75609,75610],{"class":866},"    \u002F\u002F 获取DOM对象\n",[152,75612,75613,75615,75617,75619,75621,75623,75625,75627],{"class":281,"line":50920},[152,75614,12837],{"class":476},[152,75616,71158],{"class":293},[152,75618,15180],{"class":476},[152,75620,55733],{"class":483},[152,75622,55736],{"class":285},[152,75624,1819],{"class":483},[152,75626,71169],{"class":289},[152,75628,1825],{"class":483},[152,75630,75631,75633,75635,75637,75639,75641,75643,75645],{"class":281,"line":50929},[152,75632,12837],{"class":476},[152,75634,70985],{"class":293},[152,75636,15180],{"class":476},[152,75638,55733],{"class":483},[152,75640,55736],{"class":285},[152,75642,1819],{"class":483},[152,75644,70996],{"class":289},[152,75646,1825],{"class":483},[152,75648,75649,75651,75653,75655,75657,75659,75661,75663],{"class":281,"line":50946},[152,75650,12837],{"class":476},[152,75652,17304],{"class":293},[152,75654,15180],{"class":476},[152,75656,55733],{"class":483},[152,75658,55736],{"class":285},[152,75660,1819],{"class":483},[152,75662,71015],{"class":289},[152,75664,1825],{"class":483},[152,75666,75668,75670,75672,75674,75676,75678,75680,75682],{"class":281,"line":75667},231,[152,75669,12837],{"class":476},[152,75671,71044],{"class":293},[152,75673,15180],{"class":476},[152,75675,55733],{"class":483},[152,75677,55736],{"class":285},[152,75679,1819],{"class":483},[152,75681,71055],{"class":289},[152,75683,1825],{"class":483},[152,75685,75687,75689,75691,75693,75695,75697,75699,75701],{"class":281,"line":75686},232,[152,75688,12837],{"class":476},[152,75690,71024],{"class":293},[152,75692,15180],{"class":476},[152,75694,55733],{"class":483},[152,75696,55736],{"class":285},[152,75698,1819],{"class":483},[152,75700,71035],{"class":289},[152,75702,1825],{"class":483},[152,75704,75706,75708,75710,75712,75714,75716,75718,75720],{"class":281,"line":75705},233,[152,75707,12837],{"class":476},[152,75709,71064],{"class":293},[152,75711,15180],{"class":476},[152,75713,55733],{"class":483},[152,75715,55736],{"class":285},[152,75717,1819],{"class":483},[152,75719,71075],{"class":289},[152,75721,1825],{"class":483},[152,75723,75725],{"class":281,"line":75724},234,[152,75726,307],{"emptyLinePlaceholder":306},[152,75728,75730],{"class":281,"line":75729},235,[152,75731,75732],{"class":866},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[152,75734,75736,75738,75740,75742,75744,75746,75748,75750,75752],{"class":281,"line":75735},236,[152,75737,71176],{"class":483},[152,75739,59150],{"class":285},[152,75741,1819],{"class":483},[152,75743,71183],{"class":289},[152,75745,14051],{"class":483},[152,75747,55786],{"class":476},[152,75749,3322],{"class":483},[152,75751,1891],{"class":6858},[152,75753,14058],{"class":483},[152,75755,75757],{"class":281,"line":75756},237,[152,75758,75759],{"class":866},"      \u002F\u002F 禁止浏览器跳转\n",[152,75761,75763,75765,75767],{"class":281,"line":75762},238,[152,75764,71203],{"class":483},[152,75766,71206],{"class":285},[152,75768,3627],{"class":483},[152,75770,75772],{"class":281,"line":75771},239,[152,75773,75774],{"class":866},"      \u002F\u002F 非空判断\n",[152,75776,75778],{"class":281,"line":75777},240,[152,75779,75780],{"class":866},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[152,75782,75784],{"class":281,"line":75783},241,[152,75785,75786],{"class":866},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[152,75788,75790,75792,75794,75796,75799,75801,75804,75807,75809,75811],{"class":281,"line":75789},242,[152,75791,55817],{"class":476},[152,75793,3322],{"class":483},[152,75795,2035],{"class":476},[152,75797,75798],{"class":483},"uname.value ",[152,75800,72694],{"class":476},[152,75802,75803],{"class":476}," !",[152,75805,75806],{"class":483},"age.value ",[152,75808,72694],{"class":476},[152,75810,75803],{"class":476},[152,75812,75813],{"class":483},"salary.value) {\n",[152,75815,75817,75819,75821,75823,75825],{"class":281,"line":75816},243,[152,75818,16367],{"class":476},[152,75820,71277],{"class":285},[152,75822,1819],{"class":483},[152,75824,71282],{"class":289},[152,75826,1825],{"class":483},[152,75828,75830],{"class":281,"line":75829},244,[152,75831,53735],{"class":483},[152,75833,75835,75837,75839],{"class":281,"line":75834},245,[152,75836,59344],{"class":483},[152,75838,53221],{"class":285},[152,75840,75841],{"class":483},"({\n",[152,75843,75845],{"class":281,"line":75844},246,[152,75846,75847],{"class":866},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[152,75849,75851],{"class":281,"line":75850},247,[152,75852,75853],{"class":866},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[152,75855,75857],{"class":281,"line":75856},248,[152,75858,75859],{"class":866},"        \u002F\u002F 对象的序号应为数组长度+1\n",[152,75861,75863],{"class":281,"line":75862},249,[152,75864,75865],{"class":866},"        \u002F\u002F unameId: arr.length + 1,\n",[152,75867,75869],{"class":281,"line":75868},250,[152,75870,307],{"emptyLinePlaceholder":306},[152,75872,75874],{"class":281,"line":75873},251,[152,75875,75876],{"class":866},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[152,75878,75880],{"class":281,"line":75879},252,[152,75881,75882],{"class":866},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[152,75884,75886],{"class":281,"line":75885},253,[152,75887,75888],{"class":866},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[152,75890,75892],{"class":281,"line":75891},254,[152,75893,75894],{"class":866},"        \u002F\u002F 0当假看\n",[152,75896,75898,75901,75903,75905,75908,75910,75912,75914,75917,75919,75921,75924,75926],{"class":281,"line":75897},255,[152,75899,75900],{"class":483},"        unameId: arr.",[152,75902,53305],{"class":293},[152,75904,75151],{"class":476},[152,75906,75907],{"class":483}," arr[arr.",[152,75909,53305],{"class":293},[152,75911,53608],{"class":476},[152,75913,26729],{"class":293},[152,75915,75916],{"class":483},"].unameId ",[152,75918,2289],{"class":476},[152,75920,26729],{"class":293},[152,75922,75923],{"class":476}," :",[152,75925,26729],{"class":293},[152,75927,32803],{"class":483},[152,75929,75931],{"class":281,"line":75930},256,[152,75932,71330],{"class":483},[152,75934,75936],{"class":281,"line":75935},257,[152,75937,71335],{"class":483},[152,75939,75941],{"class":281,"line":75940},258,[152,75942,71345],{"class":483},[152,75944,75946],{"class":281,"line":75945},259,[152,75947,71340],{"class":483},[152,75949,75951],{"class":281,"line":75950},260,[152,75952,75953],{"class":483},"        city: city.value,\n",[152,75955,75957],{"class":281,"line":75956},261,[152,75958,75959],{"class":866},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[152,75961,75963],{"class":281,"line":75962},262,[152,75964,75965],{"class":866},"        \u002F\u002F time: new Date().toDateString()\n",[152,75967,75969,75972,75975],{"class":281,"line":75968},263,[152,75970,75971],{"class":483},"        time: ",[152,75973,75974],{"class":285},"getTime",[152,75976,3627],{"class":483},[152,75978,75980],{"class":281,"line":75979},264,[152,75981,66152],{"class":483},[152,75983,75985],{"class":281,"line":75984},265,[152,75986,75987],{"class":866},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[152,75989,75991,75993],{"class":281,"line":75990},266,[152,75992,71405],{"class":285},[152,75994,3627],{"class":483},[152,75996,75998,76000,76002,76004,76006],{"class":281,"line":75997},267,[152,75999,71388],{"class":293},[152,76001,2366],{"class":483},[152,76003,71393],{"class":285},[152,76005,14666],{"class":483},[152,76007,76008],{"class":866},"\u002F\u002F重置表单\n",[152,76010,76012],{"class":281,"line":76011},268,[152,76013,76014],{"class":866},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[152,76016,76018,76021,76023,76025,76028,76030,76032,76034,76036],{"class":281,"line":76017},269,[152,76019,76020],{"class":483},"      localStorage.",[152,76022,72991],{"class":285},[152,76024,1819],{"class":483},[152,76026,76027],{"class":289},"'data'",[152,76029,14051],{"class":483},[152,76031,73001],{"class":293},[152,76033,2366],{"class":483},[152,76035,73006],{"class":285},[152,76037,76038],{"class":483},"(arr))\n",[152,76040,76042],{"class":281,"line":76041},270,[152,76043,34798],{"class":483},[152,76045,76047],{"class":281,"line":76046},271,[152,76048,307],{"emptyLinePlaceholder":306},[152,76050,76052],{"class":281,"line":76051},272,[152,76053,76054],{"class":866},"    \u002F\u002F 3.删除业务\n",[152,76056,76058],{"class":281,"line":76057},273,[152,76059,76060],{"class":866},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[152,76062,76064,76066,76068,76070,76072,76074,76076,76078,76080],{"class":281,"line":76063},274,[152,76065,71678],{"class":483},[152,76067,59150],{"class":285},[152,76069,1819],{"class":483},[152,76071,59155],{"class":289},[152,76073,14051],{"class":483},[152,76075,55786],{"class":476},[152,76077,3322],{"class":483},[152,76079,1891],{"class":6858},[152,76081,14058],{"class":483},[152,76083,76085],{"class":281,"line":76084},275,[152,76086,76087],{"class":866},"      \u002F\u002F 判断是否点击的是删除按钮\n",[152,76089,76091,76093,76095,76097,76099],{"class":281,"line":76090},276,[152,76092,55817],{"class":476},[152,76094,68371],{"class":483},[152,76096,55823],{"class":476},[152,76098,69593],{"class":289},[152,76100,14058],{"class":483},[152,76102,76104],{"class":281,"line":76103},277,[152,76105,76106],{"class":866},"        \u002F\u002F alert(1)\n",[152,76108,76110],{"class":281,"line":76109},278,[152,76111,76112],{"class":866},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[152,76114,76116],{"class":281,"line":76115},279,[152,76117,76118],{"class":866},"        \u002F\u002F console.log(e.target)\n",[152,76120,76122],{"class":281,"line":76121},280,[152,76123,76124],{"class":866},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[152,76126,76128],{"class":281,"line":76127},281,[152,76129,307],{"emptyLinePlaceholder":306},[152,76131,76133],{"class":281,"line":76132},282,[152,76134,76135],{"class":866},"        \u002F\u002F 确认框，确然是否真的要删除\n",[152,76137,76139],{"class":281,"line":76138},283,[152,76140,76141],{"class":866},"        \u002F\u002F confirm()为确认框\n",[152,76143,76145],{"class":281,"line":76144},284,[152,76146,76147],{"class":866},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[152,76149,76151,76153,76155,76158,76160,76163],{"class":281,"line":76150},285,[152,76152,4147],{"class":476},[152,76154,3322],{"class":483},[152,76156,76157],{"class":285},"confirm",[152,76159,1819],{"class":483},[152,76161,76162],{"class":289},"'您确定要删除这条数据吗？'",[152,76164,76165],{"class":483},")) {\n",[152,76167,76169,76172,76174,76176,76178],{"class":281,"line":76168},286,[152,76170,76171],{"class":483},"          arr.",[152,76173,59347],{"class":285},[152,76175,71731],{"class":483},[152,76177,2026],{"class":293},[152,76179,1825],{"class":483},[152,76181,76183],{"class":281,"line":76182},287,[152,76184,76185],{"class":866},"          \u002F\u002F 3.4 重新渲染页面\n",[152,76187,76189,76192],{"class":281,"line":76188},288,[152,76190,76191],{"class":285},"          render",[152,76193,3627],{"class":483},[152,76195,76197],{"class":281,"line":76196},289,[152,76198,76199],{"class":866},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[152,76201,76203,76206,76208,76210,76212,76214,76216,76218,76220],{"class":281,"line":76202},290,[152,76204,76205],{"class":483},"          localStorage.",[152,76207,72991],{"class":285},[152,76209,1819],{"class":483},[152,76211,76027],{"class":289},[152,76213,14051],{"class":483},[152,76215,73001],{"class":293},[152,76217,2366],{"class":483},[152,76219,73006],{"class":285},[152,76221,76038],{"class":483},[152,76223,76225],{"class":281,"line":76224},291,[152,76226,4179],{"class":483},[152,76228,76230],{"class":281,"line":76229},292,[152,76231,53735],{"class":483},[152,76233,76235],{"class":281,"line":76234},293,[152,76236,307],{"emptyLinePlaceholder":306},[152,76238,76240],{"class":281,"line":76239},294,[152,76241,34798],{"class":483},[152,76243,76245],{"class":281,"line":76244},295,[152,76246,307],{"emptyLinePlaceholder":306},[152,76248,76250,76252,76254],{"class":281,"line":76249},296,[152,76251,53754],{"class":483},[152,76253,53150],{"class":52637},[152,76255,52644],{"class":483},[152,76257,76259,76261,76263],{"class":281,"line":76258},297,[152,76260,53122],{"class":483},[152,76262,53137],{"class":52637},[152,76264,52644],{"class":483},[152,76266,76268],{"class":281,"line":76267},298,[152,76269,307],{"emptyLinePlaceholder":306},[152,76271,76273,76275,76277],{"class":281,"line":76272},299,[152,76274,53122],{"class":483},[152,76276,51972],{"class":52637},[152,76278,52644],{"class":483},[1760,76280,76282],{"id":76281},"_36-正则表达式","3.6 正则表达式",[19,76284,76285],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76287,76288],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76290,76291],{},"正则表达式的作用：",[698,76293,76294,76301,76307],{},[419,76295,76296,76297,76300],{},"表单验证（ ",[694,76298,76299],{},"匹配"," ）",[419,76302,76303,76304,76300],{},"过滤敏感词（ ",[694,76305,76306],{},"替换",[419,76308,76309,76310,76300],{},"字符串中提取我们想要的部分（ ",[694,76311,76312],{},"提取",[14,76314,76316],{"id":76315},"_361-语法","3.6.1 语法",[19,76318,76319],{},"正则表达式使用步骤：",[416,76321,76322,76325],{},[419,76323,76324],{},"定义规则",[419,76326,76327],{},"查找是否匹配",[19,76329,76330],{},"正则表达式里边不需要写引号",[19,76332,76333],{},[401,76334],{"alt":275,"src":76335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76337,76338],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76340,76341],{},"reg.test(str)",[19,76343,76344],{},[401,76345],{"alt":275,"src":76346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76348,76349],{},[401,76350],{"alt":275,"src":76351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[14,76353,76355],{"id":76354},"_362-元字符","3.6.2 元字符",[416,76357,76358,76361,76364,76367,76374],{},[419,76359,76360],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[419,76362,76363],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[419,76365,76366],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[419,76368,76369,76370],{},"正则验证工具：",[69,76371,76372],{"href":76372,"rel":76373},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[245],[419,76375,76376],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[262,76378,76380],{"id":76379},"_3621-边界符","3.6.2.1 边界符",[19,76382,76383],{},[401,76384],{"alt":275,"src":76385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76387,76388],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76390,76391],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76393,76394],{},"只匹配一次",[19,76396,76397],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[262,76399,76401],{"id":76400},"_3622-量词","3.6.2.2 量词",[19,76403,76404],{},[401,76405],{"alt":275,"src":76406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76408,76409],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[262,76411,76413],{"id":76412},"_3623-元字符","3.6.2.3 元字符",[19,76415,76416],{},[401,76417],{"alt":275,"src":76418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76420,76421],{},"匹配的是a或b或c []只选一个",[19,76423,76424],{},[401,76425],{"alt":275,"src":76426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76428,76429],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76431,76432],{},[401,76433],{"alt":275,"src":76434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76436,76437],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76439,76440],{},[401,76441],{"alt":275,"src":76442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[270,76444,76446],{"className":51970,"code":76445,"language":51972,"meta":275,"style":275},"\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",[277,76447,76448,76458,76472,76476,76484,76498,76518,76530,76538,76542,76550,76558,76563,76594,76621,76649,76653,76658,76686,76717,76722,76727,76758,76790,76822,76826,76831,76862,76892,76922,76926,76931,76962,76993,77023,77053,77057,77062,77095,77099,77104,77135,77166,77170,77175,77206,77236,77267,77271,77276,77308,77339,77370,77397,77428,77460,77493,77524,77555,77587,77618,77626,77634,77638],{"__ignoreMap":275},[152,76449,76450,76452,76454,76456],{"class":281,"line":282},[152,76451,52634],{"class":483},[152,76453,52638],{"class":52637},[152,76455,52641],{"class":285},[152,76457,52644],{"class":483},[152,76459,76460,76462,76464,76466,76468,76470],{"class":281,"line":303},[152,76461,844],{"class":483},[152,76463,51972],{"class":52637},[152,76465,52653],{"class":285},[152,76467,1864],{"class":483},[152,76469,52658],{"class":289},[152,76471,52644],{"class":483},[152,76473,76474],{"class":281,"line":310},[152,76475,307],{"emptyLinePlaceholder":306},[152,76477,76478,76480,76482],{"class":281,"line":324},[152,76479,844],{"class":483},[152,76481,52671],{"class":52637},[152,76483,52644],{"class":483},[152,76485,76486,76488,76490,76492,76494,76496],{"class":281,"line":329},[152,76487,53481],{"class":483},[152,76489,52681],{"class":52637},[152,76491,52684],{"class":285},[152,76493,1864],{"class":483},[152,76495,52689],{"class":289},[152,76497,52644],{"class":483},[152,76499,76500,76502,76504,76506,76508,76510,76512,76514,76516],{"class":281,"line":343},[152,76501,53481],{"class":483},[152,76503,52681],{"class":52637},[152,76505,16535],{"class":285},[152,76507,1864],{"class":483},[152,76509,52728],{"class":289},[152,76511,52708],{"class":285},[152,76513,1864],{"class":483},[152,76515,52735],{"class":289},[152,76517,52644],{"class":483},[152,76519,76520,76522,76524,76526,76528],{"class":281,"line":348},[152,76521,53481],{"class":483},[152,76523,52744],{"class":52637},[152,76525,52747],{"class":483},[152,76527,52744],{"class":52637},[152,76529,52644],{"class":483},[152,76531,76532,76534,76536],{"class":281,"line":362},[152,76533,53122],{"class":483},[152,76535,52671],{"class":52637},[152,76537,52644],{"class":483},[152,76539,76540],{"class":281,"line":367},[152,76541,307],{"emptyLinePlaceholder":306},[152,76543,76544,76546,76548],{"class":281,"line":381},[152,76545,844],{"class":483},[152,76547,53137],{"class":52637},[152,76549,52644],{"class":483},[152,76551,76552,76554,76556],{"class":281,"line":386},[152,76553,53481],{"class":483},[152,76555,53150],{"class":52637},[152,76557,52644],{"class":483},[152,76559,76560],{"class":281,"line":932},[152,76561,76562],{"class":866},"    \u002F\u002F 元字符中\n",[152,76564,76565,76567,76569,76571,76573,76576,76578,76580,76583,76585,76588,76591],{"class":281,"line":942},[152,76566,75090],{"class":483},[152,76568,59584],{"class":285},[152,76570,1819],{"class":483},[152,76572,2392],{"class":289},[152,76574,76575],{"class":49314},"哈",[152,76577,2392],{"class":289},[152,76579,2366],{"class":483},[152,76581,76582],{"class":285},"test",[152,76584,1819],{"class":483},[152,76586,76587],{"class":289},"'哈'",[152,76589,76590],{"class":483},"))  ",[152,76592,76593],{"class":866},"\u002F\u002Ftrue\n",[152,76595,76596,76598,76600,76602,76604,76606,76608,76610,76612,76614,76617,76619],{"class":281,"line":949},[152,76597,75090],{"class":483},[152,76599,59584],{"class":285},[152,76601,1819],{"class":483},[152,76603,2392],{"class":289},[152,76605,76575],{"class":49314},[152,76607,2392],{"class":289},[152,76609,2366],{"class":483},[152,76611,76582],{"class":285},[152,76613,1819],{"class":483},[152,76615,76616],{"class":289},"'哈哈'",[152,76618,76590],{"class":483},[152,76620,76593],{"class":866},[152,76622,76623,76625,76627,76629,76631,76633,76635,76637,76639,76641,76644,76647],{"class":281,"line":954},[152,76624,75090],{"class":483},[152,76626,59584],{"class":285},[152,76628,1819],{"class":483},[152,76630,2392],{"class":289},[152,76632,76575],{"class":49314},[152,76634,2392],{"class":289},[152,76636,2366],{"class":483},[152,76638,76582],{"class":285},[152,76640,1819],{"class":483},[152,76642,76643],{"class":289},"'二哈'",[152,76645,76646],{"class":483},"))   ",[152,76648,76593],{"class":866},[152,76650,76651],{"class":281,"line":959},[152,76652,307],{"emptyLinePlaceholder":306},[152,76654,76655],{"class":281,"line":970},[152,76656,76657],{"class":866},"    \u002F\u002F 1.边界符\n",[152,76659,76660,76662,76664,76666,76668,76670,76672,76674,76676,76678,76680,76682,76684],{"class":281,"line":979},[152,76661,75090],{"class":483},[152,76663,59584],{"class":285},[152,76665,1819],{"class":483},[152,76667,2392],{"class":289},[152,76669,2771],{"class":476},[152,76671,76575],{"class":49314},[152,76673,2392],{"class":289},[152,76675,2366],{"class":483},[152,76677,76582],{"class":285},[152,76679,1819],{"class":483},[152,76681,76587],{"class":289},[152,76683,76590],{"class":483},[152,76685,76593],{"class":866},[152,76687,76688,76690,76692,76694,76696,76698,76700,76702,76704,76706,76708,76710,76712,76714],{"class":281,"line":989},[152,76689,75090],{"class":483},[152,76691,59584],{"class":285},[152,76693,1819],{"class":483},[152,76695,2392],{"class":289},[152,76697,2771],{"class":476},[152,76699,76575],{"class":49314},[152,76701,2110],{"class":476},[152,76703,2392],{"class":289},[152,76705,2366],{"class":483},[152,76707,76582],{"class":285},[152,76709,1819],{"class":483},[152,76711,76616],{"class":289},[152,76713,76590],{"class":483},[152,76715,76716],{"class":866},"\u002F\u002Ffalse\n",[152,76718,76719],{"class":281,"line":996},[152,76720,76721],{"class":866},"    \u002F\u002F 2.量词\n",[152,76723,76724],{"class":281,"line":1001},[152,76725,76726],{"class":866},"    \u002F\u002F 量词 * 类似于 >= 0\n",[152,76728,76729,76731,76733,76735,76737,76739,76741,76744,76746,76748,76750,76752,76754,76756],{"class":281,"line":1006},[152,76730,75090],{"class":483},[152,76732,59584],{"class":285},[152,76734,1819],{"class":483},[152,76736,2392],{"class":289},[152,76738,2771],{"class":476},[152,76740,76575],{"class":49314},[152,76742,76743],{"class":476},"*$",[152,76745,2392],{"class":289},[152,76747,2366],{"class":483},[152,76749,76582],{"class":285},[152,76751,1819],{"class":483},[152,76753,76616],{"class":289},[152,76755,76590],{"class":483},[152,76757,76593],{"class":866},[152,76759,76760,76762,76764,76766,76768,76770,76772,76774,76776,76778,76780,76782,76785,76787],{"class":281,"line":1018},[152,76761,75090],{"class":483},[152,76763,59584],{"class":285},[152,76765,1819],{"class":483},[152,76767,2392],{"class":289},[152,76769,2771],{"class":476},[152,76771,76575],{"class":49314},[152,76773,76743],{"class":476},[152,76775,2392],{"class":289},[152,76777,2366],{"class":483},[152,76779,76582],{"class":285},[152,76781,1819],{"class":483},[152,76783,76784],{"class":289},"'二哈好傻'",[152,76786,76590],{"class":483},[152,76788,76789],{"class":866},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[152,76791,76792,76794,76796,76798,76800,76802,76804,76806,76808,76810,76812,76814,76817,76819],{"class":281,"line":1027},[152,76793,75090],{"class":483},[152,76795,59584],{"class":285},[152,76797,1819],{"class":483},[152,76799,2392],{"class":289},[152,76801,2771],{"class":476},[152,76803,76575],{"class":49314},[152,76805,76743],{"class":476},[152,76807,2392],{"class":289},[152,76809,2366],{"class":483},[152,76811,76582],{"class":285},[152,76813,1819],{"class":483},[152,76815,76816],{"class":289},"'哈好哈'",[152,76818,76646],{"class":483},[152,76820,76821],{"class":866},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[152,76823,76824],{"class":281,"line":1037},[152,76825,307],{"emptyLinePlaceholder":306},[152,76827,76828],{"class":281,"line":1044},[152,76829,76830],{"class":866},"    \u002F\u002F +类似于>=1\n",[152,76832,76833,76835,76837,76839,76841,76843,76845,76848,76850,76852,76854,76856,76858,76860],{"class":281,"line":1049},[152,76834,75090],{"class":483},[152,76836,59584],{"class":285},[152,76838,1819],{"class":483},[152,76840,2392],{"class":289},[152,76842,2771],{"class":476},[152,76844,76575],{"class":49314},[152,76846,76847],{"class":476},"+$",[152,76849,2392],{"class":289},[152,76851,2366],{"class":483},[152,76853,76582],{"class":285},[152,76855,1819],{"class":483},[152,76857,76616],{"class":289},[152,76859,76590],{"class":483},[152,76861,76593],{"class":866},[152,76863,76864,76866,76868,76870,76872,76874,76876,76878,76880,76882,76884,76886,76888,76890],{"class":281,"line":1054},[152,76865,75090],{"class":483},[152,76867,59584],{"class":285},[152,76869,1819],{"class":483},[152,76871,2392],{"class":289},[152,76873,2771],{"class":476},[152,76875,76575],{"class":49314},[152,76877,76847],{"class":476},[152,76879,2392],{"class":289},[152,76881,2366],{"class":483},[152,76883,76582],{"class":285},[152,76885,1819],{"class":483},[152,76887,76784],{"class":289},[152,76889,76590],{"class":483},[152,76891,76789],{"class":866},[152,76893,76894,76896,76898,76900,76902,76904,76906,76908,76910,76912,76914,76916,76918,76920],{"class":281,"line":1065},[152,76895,75090],{"class":483},[152,76897,59584],{"class":285},[152,76899,1819],{"class":483},[152,76901,2392],{"class":289},[152,76903,2771],{"class":476},[152,76905,76575],{"class":49314},[152,76907,76847],{"class":476},[152,76909,2392],{"class":289},[152,76911,2366],{"class":483},[152,76913,76582],{"class":285},[152,76915,1819],{"class":483},[152,76917,76816],{"class":289},[152,76919,76646],{"class":483},[152,76921,76716],{"class":866},[152,76923,76924],{"class":281,"line":1074},[152,76925,307],{"emptyLinePlaceholder":306},[152,76927,76928],{"class":281,"line":1084},[152,76929,76930],{"class":866},"    \u002F\u002F ?类似于0次或一次\n",[152,76932,76933,76935,76937,76939,76941,76943,76946,76948,76950,76952,76954,76956,76958,76960],{"class":281,"line":1091},[152,76934,75090],{"class":483},[152,76936,59584],{"class":285},[152,76938,1819],{"class":483},[152,76940,2392],{"class":289},[152,76942,2771],{"class":476},[152,76944,76945],{"class":49314},"哈？",[152,76947,2110],{"class":476},[152,76949,2392],{"class":289},[152,76951,2366],{"class":483},[152,76953,76582],{"class":285},[152,76955,1819],{"class":483},[152,76957,75565],{"class":289},[152,76959,76646],{"class":483},[152,76961,76593],{"class":866},[152,76963,76964,76966,76968,76970,76972,76974,76976,76979,76981,76983,76985,76987,76989,76991],{"class":281,"line":1096},[152,76965,75090],{"class":483},[152,76967,59584],{"class":285},[152,76969,1819],{"class":483},[152,76971,2392],{"class":289},[152,76973,2771],{"class":476},[152,76975,76575],{"class":49314},[152,76977,76978],{"class":476},"?$",[152,76980,2392],{"class":289},[152,76982,2366],{"class":483},[152,76984,76582],{"class":285},[152,76986,1819],{"class":483},[152,76988,76616],{"class":289},[152,76990,76590],{"class":483},[152,76992,76716],{"class":866},[152,76994,76995,76997,76999,77001,77003,77005,77007,77009,77011,77013,77015,77017,77019,77021],{"class":281,"line":1101},[152,76996,75090],{"class":483},[152,76998,59584],{"class":285},[152,77000,1819],{"class":483},[152,77002,2392],{"class":289},[152,77004,2771],{"class":476},[152,77006,76575],{"class":49314},[152,77008,76978],{"class":476},[152,77010,2392],{"class":289},[152,77012,2366],{"class":483},[152,77014,76582],{"class":285},[152,77016,1819],{"class":483},[152,77018,76784],{"class":289},[152,77020,76590],{"class":483},[152,77022,76789],{"class":866},[152,77024,77025,77027,77029,77031,77033,77035,77037,77039,77041,77043,77045,77047,77049,77051],{"class":281,"line":1112},[152,77026,75090],{"class":483},[152,77028,59584],{"class":285},[152,77030,1819],{"class":483},[152,77032,2392],{"class":289},[152,77034,2771],{"class":476},[152,77036,76575],{"class":49314},[152,77038,76978],{"class":476},[152,77040,2392],{"class":289},[152,77042,2366],{"class":483},[152,77044,76582],{"class":285},[152,77046,1819],{"class":483},[152,77048,76816],{"class":289},[152,77050,76590],{"class":483},[152,77052,76716],{"class":866},[152,77054,77055],{"class":281,"line":1121},[152,77056,307],{"emptyLinePlaceholder":306},[152,77058,77059],{"class":281,"line":1131},[152,77060,77061],{"class":866},"    \u002F\u002F {n}写几，就必须出现几次\n",[152,77063,77064,77066,77068,77070,77072,77074,77076,77079,77081,77083,77085,77087,77090,77093],{"class":281,"line":1138},[152,77065,75090],{"class":483},[152,77067,59584],{"class":285},[152,77069,1819],{"class":483},[152,77071,2392],{"class":289},[152,77073,2771],{"class":476},[152,77075,76575],{"class":49314},[152,77077,77078],{"class":476},"{4}$",[152,77080,2392],{"class":289},[152,77082,2366],{"class":483},[152,77084,76582],{"class":285},[152,77086,1819],{"class":483},[152,77088,77089],{"class":289},"'哈哈哈哈'",[152,77091,77092],{"class":483},")) ",[152,77094,76593],{"class":866},[152,77096,77097],{"class":281,"line":1143},[152,77098,307],{"emptyLinePlaceholder":306},[152,77100,77101],{"class":281,"line":1148},[152,77102,77103],{"class":866},"    \u002F\u002F {n,}大于等于n次\n",[152,77105,77106,77108,77110,77112,77114,77116,77118,77121,77123,77125,77127,77129,77131,77133],{"class":281,"line":1159},[152,77107,75090],{"class":483},[152,77109,59584],{"class":285},[152,77111,1819],{"class":483},[152,77113,2392],{"class":289},[152,77115,2771],{"class":476},[152,77117,76575],{"class":49314},[152,77119,77120],{"class":476},"{4,}$",[152,77122,2392],{"class":289},[152,77124,2366],{"class":483},[152,77126,76582],{"class":285},[152,77128,1819],{"class":483},[152,77130,77089],{"class":289},[152,77132,77092],{"class":483},[152,77134,76593],{"class":866},[152,77136,77137,77139,77141,77143,77145,77147,77149,77151,77153,77155,77157,77159,77162,77164],{"class":281,"line":1168},[152,77138,75090],{"class":483},[152,77140,59584],{"class":285},[152,77142,1819],{"class":483},[152,77144,2392],{"class":289},[152,77146,2771],{"class":476},[152,77148,76575],{"class":49314},[152,77150,77120],{"class":476},[152,77152,2392],{"class":289},[152,77154,2366],{"class":483},[152,77156,76582],{"class":285},[152,77158,1819],{"class":483},[152,77160,77161],{"class":289},"'哈哈哈哈哈'",[152,77163,77092],{"class":483},[152,77165,76593],{"class":866},[152,77167,77168],{"class":281,"line":1178},[152,77169,307],{"emptyLinePlaceholder":306},[152,77171,77172],{"class":281,"line":1185},[152,77173,77174],{"class":866},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[152,77176,77177,77179,77181,77183,77185,77187,77189,77192,77194,77196,77198,77200,77202,77204],{"class":281,"line":1190},[152,77178,75090],{"class":483},[152,77180,59584],{"class":285},[152,77182,1819],{"class":483},[152,77184,2392],{"class":289},[152,77186,2771],{"class":476},[152,77188,76575],{"class":49314},[152,77190,77191],{"class":476},"{4,6}$",[152,77193,2392],{"class":289},[152,77195,2366],{"class":483},[152,77197,76582],{"class":285},[152,77199,1819],{"class":483},[152,77201,77089],{"class":289},[152,77203,77092],{"class":483},[152,77205,76593],{"class":866},[152,77207,77208,77210,77212,77214,77216,77218,77220,77222,77224,77226,77228,77230,77232,77234],{"class":281,"line":1195},[152,77209,75090],{"class":483},[152,77211,59584],{"class":285},[152,77213,1819],{"class":483},[152,77215,2392],{"class":289},[152,77217,2771],{"class":476},[152,77219,76575],{"class":49314},[152,77221,77191],{"class":476},[152,77223,2392],{"class":289},[152,77225,2366],{"class":483},[152,77227,76582],{"class":285},[152,77229,1819],{"class":483},[152,77231,77161],{"class":289},[152,77233,77092],{"class":483},[152,77235,76593],{"class":866},[152,77237,77238,77240,77242,77244,77246,77248,77250,77252,77254,77256,77258,77260,77263,77265],{"class":281,"line":1206},[152,77239,75090],{"class":483},[152,77241,59584],{"class":285},[152,77243,1819],{"class":483},[152,77245,2392],{"class":289},[152,77247,2771],{"class":476},[152,77249,76575],{"class":49314},[152,77251,77191],{"class":476},[152,77253,2392],{"class":289},[152,77255,2366],{"class":483},[152,77257,76582],{"class":285},[152,77259,1819],{"class":483},[152,77261,77262],{"class":289},"'哈哈哈哈哈哈哈'",[152,77264,77092],{"class":483},[152,77266,76716],{"class":866},[152,77268,77269],{"class":281,"line":1215},[152,77270,307],{"emptyLinePlaceholder":306},[152,77272,77273],{"class":281,"line":1225},[152,77274,77275],{"class":866},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[152,77277,77278,77280,77282,77284,77286,77288,77291,77293,77295,77297,77299,77301,77304,77306],{"class":281,"line":1232},[152,77279,75090],{"class":483},[152,77281,59584],{"class":285},[152,77283,1819],{"class":483},[152,77285,2392],{"class":289},[152,77287,2771],{"class":476},[152,77289,77290],{"class":293},"[abc]",[152,77292,2110],{"class":476},[152,77294,2392],{"class":289},[152,77296,2366],{"class":483},[152,77298,76582],{"class":285},[152,77300,1819],{"class":483},[152,77302,77303],{"class":289},"'a'",[152,77305,76590],{"class":483},[152,77307,76593],{"class":866},[152,77309,77310,77312,77314,77316,77318,77320,77322,77324,77326,77328,77330,77332,77335,77337],{"class":281,"line":1237},[152,77311,75090],{"class":483},[152,77313,59584],{"class":285},[152,77315,1819],{"class":483},[152,77317,2392],{"class":289},[152,77319,2771],{"class":476},[152,77321,77290],{"class":293},[152,77323,2110],{"class":476},[152,77325,2392],{"class":289},[152,77327,2366],{"class":483},[152,77329,76582],{"class":285},[152,77331,1819],{"class":483},[152,77333,77334],{"class":289},"'b'",[152,77336,76590],{"class":483},[152,77338,76593],{"class":866},[152,77340,77341,77343,77345,77347,77349,77351,77353,77355,77357,77359,77361,77363,77366,77368],{"class":281,"line":1242},[152,77342,75090],{"class":483},[152,77344,59584],{"class":285},[152,77346,1819],{"class":483},[152,77348,2392],{"class":289},[152,77350,2771],{"class":476},[152,77352,77290],{"class":293},[152,77354,2110],{"class":476},[152,77356,2392],{"class":289},[152,77358,2366],{"class":483},[152,77360,76582],{"class":285},[152,77362,1819],{"class":483},[152,77364,77365],{"class":289},"'c'",[152,77367,76590],{"class":483},[152,77369,76593],{"class":866},[152,77371,77372,77374,77376,77378,77380,77382,77384,77386,77388,77390,77393,77395],{"class":281,"line":1253},[152,77373,75090],{"class":483},[152,77375,59584],{"class":285},[152,77377,1819],{"class":483},[152,77379,2392],{"class":289},[152,77381,77290],{"class":293},[152,77383,2392],{"class":289},[152,77385,2366],{"class":483},[152,77387,76582],{"class":285},[152,77389,1819],{"class":483},[152,77391,77392],{"class":289},"'ab'",[152,77394,76590],{"class":483},[152,77396,76593],{"class":866},[152,77398,77399,77401,77403,77405,77407,77409,77411,77413,77415,77417,77419,77421,77423,77425],{"class":281,"line":1262},[152,77400,75090],{"class":483},[152,77402,59584],{"class":285},[152,77404,1819],{"class":483},[152,77406,2392],{"class":289},[152,77408,2771],{"class":476},[152,77410,77290],{"class":293},[152,77412,2110],{"class":476},[152,77414,2392],{"class":289},[152,77416,2366],{"class":483},[152,77418,76582],{"class":285},[152,77420,1819],{"class":483},[152,77422,77392],{"class":289},[152,77424,76590],{"class":483},[152,77426,77427],{"class":866},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[152,77429,77430,77432,77434,77436,77438,77440,77442,77445,77447,77449,77451,77453,77455,77457],{"class":281,"line":1272},[152,77431,75090],{"class":483},[152,77433,59584],{"class":285},[152,77435,1819],{"class":483},[152,77437,2392],{"class":289},[152,77439,2771],{"class":476},[152,77441,77290],{"class":293},[152,77443,77444],{"class":476},"{2}$",[152,77446,2392],{"class":289},[152,77448,2366],{"class":483},[152,77450,76582],{"class":285},[152,77452,1819],{"class":483},[152,77454,77392],{"class":289},[152,77456,76590],{"class":483},[152,77458,77459],{"class":866},"\u002F\u002Ftrue   可以选两个\n",[152,77461,77462,77464,77466,77468,77470,77472,77475,77477,77479,77481,77483,77485,77488,77490],{"class":281,"line":1279},[152,77463,75090],{"class":483},[152,77465,59584],{"class":285},[152,77467,1819],{"class":483},[152,77469,2392],{"class":289},[152,77471,2771],{"class":476},[152,77473,77474],{"class":293},"[a-z]",[152,77476,2110],{"class":476},[152,77478,2392],{"class":289},[152,77480,2366],{"class":483},[152,77482,76582],{"class":285},[152,77484,1819],{"class":483},[152,77486,77487],{"class":289},"'p'",[152,77489,76646],{"class":483},[152,77491,77492],{"class":866},"\u002F\u002Ftrue   依然只能选一个\n",[152,77494,77495,77497,77499,77501,77503,77505,77508,77510,77512,77514,77516,77518,77520,77522],{"class":281,"line":1284},[152,77496,75090],{"class":483},[152,77498,59584],{"class":285},[152,77500,1819],{"class":483},[152,77502,2392],{"class":289},[152,77504,2771],{"class":476},[152,77506,77507],{"class":293},"[A-Z]",[152,77509,2110],{"class":476},[152,77511,2392],{"class":289},[152,77513,2366],{"class":483},[152,77515,76582],{"class":285},[152,77517,1819],{"class":483},[152,77519,77487],{"class":289},[152,77521,76646],{"class":483},[152,77523,76716],{"class":866},[152,77525,77526,77528,77530,77532,77534,77536,77538,77540,77542,77544,77546,77548,77551,77553],{"class":281,"line":1289},[152,77527,75090],{"class":483},[152,77529,59584],{"class":285},[152,77531,1819],{"class":483},[152,77533,2392],{"class":289},[152,77535,2771],{"class":476},[152,77537,77507],{"class":293},[152,77539,2110],{"class":476},[152,77541,2392],{"class":289},[152,77543,2366],{"class":483},[152,77545,76582],{"class":285},[152,77547,1819],{"class":483},[152,77549,77550],{"class":289},"'P'",[152,77552,76646],{"class":483},[152,77554,76593],{"class":866},[152,77556,77557,77559,77561,77563,77565,77567,77570,77572,77574,77576,77578,77580,77583,77585],{"class":281,"line":1301},[152,77558,75090],{"class":483},[152,77560,59584],{"class":285},[152,77562,1819],{"class":483},[152,77564,2392],{"class":289},[152,77566,2771],{"class":476},[152,77568,77569],{"class":293},"[0-9]",[152,77571,2110],{"class":476},[152,77573,2392],{"class":289},[152,77575,2366],{"class":483},[152,77577,76582],{"class":285},[152,77579,1819],{"class":483},[152,77581,77582],{"class":289},"'0'",[152,77584,76646],{"class":483},[152,77586,76593],{"class":866},[152,77588,77589,77591,77593,77595,77597,77599,77602,77604,77606,77608,77610,77612,77614,77616],{"class":281,"line":1310},[152,77590,75090],{"class":483},[152,77592,59584],{"class":285},[152,77594,1819],{"class":483},[152,77596,2392],{"class":289},[152,77598,2771],{"class":476},[152,77600,77601],{"class":293},"[a-zA-Z0-9]",[152,77603,2110],{"class":476},[152,77605,2392],{"class":289},[152,77607,2366],{"class":483},[152,77609,76582],{"class":285},[152,77611,1819],{"class":483},[152,77613,77487],{"class":289},[152,77615,76590],{"class":483},[152,77617,76593],{"class":866},[152,77619,77620,77622,77624],{"class":281,"line":1320},[152,77621,53754],{"class":483},[152,77623,53150],{"class":52637},[152,77625,52644],{"class":483},[152,77627,77628,77630,77632],{"class":281,"line":1327},[152,77629,53122],{"class":483},[152,77631,53137],{"class":52637},[152,77633,52644],{"class":483},[152,77635,77636],{"class":281,"line":11528},[152,77637,307],{"emptyLinePlaceholder":306},[152,77639,77640,77642,77644],{"class":281,"line":11536},[152,77641,53122],{"class":483},[152,77643,51972],{"class":52637},[152,77645,52644],{"class":483},[262,77647,77649],{"id":77648},"_3624-修饰符","3.6.2.4 修饰符",[19,77651,77652],{},[401,77653],{"alt":275,"src":77654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,77656,77657],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,77659,77660],{},[401,77661],{"alt":275,"src":77662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[270,77664,77666],{"className":51970,"code":77665,"language":51972,"meta":275,"style":275},"\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",[277,77667,77668,77678,77692,77700,77714,77734,77746,77754,77762,77770,77802,77833,77838,77870,77881,77914,77923,77931,77939],{"__ignoreMap":275},[152,77669,77670,77672,77674,77676],{"class":281,"line":282},[152,77671,52634],{"class":483},[152,77673,52638],{"class":52637},[152,77675,52641],{"class":285},[152,77677,52644],{"class":483},[152,77679,77680,77682,77684,77686,77688,77690],{"class":281,"line":303},[152,77681,844],{"class":483},[152,77683,51972],{"class":52637},[152,77685,52653],{"class":285},[152,77687,1864],{"class":483},[152,77689,52658],{"class":289},[152,77691,52644],{"class":483},[152,77693,77694,77696,77698],{"class":281,"line":310},[152,77695,844],{"class":483},[152,77697,52671],{"class":52637},[152,77699,52644],{"class":483},[152,77701,77702,77704,77706,77708,77710,77712],{"class":281,"line":324},[152,77703,53481],{"class":483},[152,77705,52681],{"class":52637},[152,77707,52684],{"class":285},[152,77709,1864],{"class":483},[152,77711,52689],{"class":289},[152,77713,52644],{"class":483},[152,77715,77716,77718,77720,77722,77724,77726,77728,77730,77732],{"class":281,"line":329},[152,77717,53481],{"class":483},[152,77719,52681],{"class":52637},[152,77721,16535],{"class":285},[152,77723,1864],{"class":483},[152,77725,52728],{"class":289},[152,77727,52708],{"class":285},[152,77729,1864],{"class":483},[152,77731,52735],{"class":289},[152,77733,52644],{"class":483},[152,77735,77736,77738,77740,77742,77744],{"class":281,"line":343},[152,77737,53481],{"class":483},[152,77739,52744],{"class":52637},[152,77741,52747],{"class":483},[152,77743,52744],{"class":52637},[152,77745,52644],{"class":483},[152,77747,77748,77750,77752],{"class":281,"line":348},[152,77749,53122],{"class":483},[152,77751,52671],{"class":52637},[152,77753,52644],{"class":483},[152,77755,77756,77758,77760],{"class":281,"line":362},[152,77757,844],{"class":483},[152,77759,53137],{"class":52637},[152,77761,52644],{"class":483},[152,77763,77764,77766,77768],{"class":281,"line":367},[152,77765,53481],{"class":483},[152,77767,53150],{"class":52637},[152,77769,52644],{"class":483},[152,77771,77772,77774,77776,77778,77780,77782,77785,77787,77789,77791,77793,77795,77798,77800],{"class":281,"line":381},[152,77773,75090],{"class":483},[152,77775,59584],{"class":285},[152,77777,1819],{"class":483},[152,77779,2392],{"class":289},[152,77781,2771],{"class":476},[152,77783,77784],{"class":49314},"java",[152,77786,2110],{"class":476},[152,77788,2392],{"class":289},[152,77790,2366],{"class":483},[152,77792,76582],{"class":285},[152,77794,1819],{"class":483},[152,77796,77797],{"class":289},"'java'",[152,77799,77092],{"class":483},[152,77801,76593],{"class":866},[152,77803,77804,77806,77808,77810,77812,77814,77816,77818,77820,77822,77824,77826,77829,77831],{"class":281,"line":386},[152,77805,75090],{"class":483},[152,77807,59584],{"class":285},[152,77809,1819],{"class":483},[152,77811,2392],{"class":289},[152,77813,2771],{"class":476},[152,77815,77784],{"class":49314},[152,77817,2110],{"class":476},[152,77819,2392],{"class":289},[152,77821,2366],{"class":483},[152,77823,76582],{"class":285},[152,77825,1819],{"class":483},[152,77827,77828],{"class":289},"'Java'",[152,77830,77092],{"class":483},[152,77832,76716],{"class":866},[152,77834,77835],{"class":281,"line":932},[152,77836,77837],{"class":866},"    \u002F\u002F 不区分大小写、\n",[152,77839,77840,77842,77844,77846,77848,77850,77852,77854,77856,77858,77860,77862,77864,77866,77868],{"class":281,"line":942},[152,77841,75090],{"class":483},[152,77843,59584],{"class":285},[152,77845,1819],{"class":483},[152,77847,2392],{"class":289},[152,77849,2771],{"class":476},[152,77851,77784],{"class":49314},[152,77853,2110],{"class":476},[152,77855,2392],{"class":289},[152,77857,2249],{"class":476},[152,77859,2366],{"class":483},[152,77861,76582],{"class":285},[152,77863,1819],{"class":483},[152,77865,77828],{"class":289},[152,77867,77092],{"class":483},[152,77869,76593],{"class":866},[152,77871,77872,77874,77876,77878],{"class":281,"line":949},[152,77873,12837],{"class":476},[152,77875,75256],{"class":293},[152,77877,15180],{"class":476},[152,77879,77880],{"class":289}," 'java是一门编程语言，学完java工资很高'\n",[152,77882,77883,77885,77888,77890,77893,77896,77898,77900,77902,77904,77907,77909,77912],{"class":281,"line":954},[152,77884,12837],{"class":476},[152,77886,77887],{"class":293}," result",[152,77889,15180],{"class":476},[152,77891,77892],{"class":483}," str.",[152,77894,77895],{"class":285},"replace",[152,77897,1819],{"class":483},[152,77899,2392],{"class":289},[152,77901,77784],{"class":49314},[152,77903,2392],{"class":289},[152,77905,77906],{"class":476},"ig",[152,77908,14051],{"class":483},[152,77910,77911],{"class":289},"'前端'",[152,77913,1825],{"class":483},[152,77915,77916,77918,77920],{"class":281,"line":959},[152,77917,75090],{"class":483},[152,77919,59584],{"class":285},[152,77921,77922],{"class":483},"(result)\n",[152,77924,77925,77927,77929],{"class":281,"line":970},[152,77926,53754],{"class":483},[152,77928,53150],{"class":52637},[152,77930,52644],{"class":483},[152,77932,77933,77935,77937],{"class":281,"line":979},[152,77934,53122],{"class":483},[152,77936,53137],{"class":52637},[152,77938,52644],{"class":483},[152,77940,77941,77943,77945],{"class":281,"line":989},[152,77942,53122],{"class":483},[152,77944,51972],{"class":52637},[152,77946,52644],{"class":483},[1736,77948,77949],{},"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":275,"searchDepth":303,"depth":303,"links":77951},[77952,77962,77974,77991,77998,78006],{"id":54697,"depth":303,"text":54698,"children":77953},[77954,77955,77956,77957,77958,77959,77960,77961],{"id":54701,"depth":310,"text":54702},{"id":54734,"depth":310,"text":54735},{"id":54773,"depth":310,"text":54774},{"id":54931,"depth":310,"text":54932},{"id":54979,"depth":310,"text":54980},{"id":55116,"depth":310,"text":55117},{"id":55438,"depth":310,"text":55439},{"id":58426,"depth":310,"text":58427},{"id":58454,"depth":303,"text":58455,"children":77963},[77964,77965,77966,77967,77968,77969,77970,77971,77972,77973],{"id":58458,"depth":310,"text":58459},{"id":58481,"depth":310,"text":58482},{"id":59396,"depth":310,"text":59397},{"id":60086,"depth":310,"text":60087},{"id":60368,"depth":310,"text":60369},{"id":64529,"depth":310,"text":64530},{"id":64699,"depth":310,"text":64700},{"id":64827,"depth":310,"text":64828},{"id":64852,"depth":310,"text":64853},{"id":66241,"depth":310,"text":66242},{"id":67394,"depth":303,"text":67395,"children":77975},[77976,77977,77978,77979,77980,77981,77982,77983,77984,77985,77986,77987,77988,77989,77990],{"id":67398,"depth":310,"text":67399},{"id":68052,"depth":310,"text":68053},{"id":69747,"depth":310,"text":69748},{"id":69788,"depth":310,"text":69789},{"id":69830,"depth":310,"text":69831},{"id":69844,"depth":310,"text":69845},{"id":69893,"depth":310,"text":69894},{"id":69905,"depth":310,"text":69906},{"id":69920,"depth":310,"text":69921},{"id":69956,"depth":310,"text":69957},{"id":70037,"depth":310,"text":70038},{"id":70165,"depth":310,"text":70166},{"id":70177,"depth":310,"text":70178},{"id":70196,"depth":310,"text":70197},{"id":72307,"depth":310,"text":72308},{"id":72326,"depth":303,"text":72327,"children":77992},[77993,77994,77995,77996,77997],{"id":72347,"depth":310,"text":72348},{"id":72367,"depth":310,"text":72368},{"id":72416,"depth":310,"text":72417},{"id":72541,"depth":310,"text":72542},{"id":72722,"depth":310,"text":72723},{"id":72740,"depth":303,"text":72741,"children":77999},[78000,78001,78002,78003,78004,78005],{"id":72755,"depth":310,"text":72756},{"id":72814,"depth":310,"text":72815},{"id":72838,"depth":310,"text":72839},{"id":73158,"depth":310,"text":73159},{"id":73190,"depth":310,"text":73191},{"id":73213,"depth":310,"text":73214},{"id":76281,"depth":303,"text":76282,"children":78007},[78008,78009],{"id":76315,"depth":310,"text":76316},{"id":76354,"depth":310,"text":76355},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54669,"description":24991},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78016,"title":78017,"body":78018,"description":24991,"extension":1744,"meta":94155,"navigation":306,"path":94156,"seo":94157,"stem":94158,"__hash__":94159},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78019,"toc":94091},[78020,78023,78026,78030,78034,78039,78044,78055,78059,78064,78067,78071,78074,78079,78083,78087,78090,78095,78098,78102,78105,78113,78116,78120,78125,78130,78133,78137,78142,78147,78150,78154,78159,78162,78167,78170,78175,78178,78183,78188,78191,78194,78198,78203,78208,78211,78215,78219,78222,78225,78228,78232,78236,78241,78246,78249,78253,78258,78263,78266,78269,78272,78275,78278,78281,78284,78287,78290,78295,78299,78304,78309,78312,78315,78318,78321,78324,78327,78330,78333,78337,78341,78344,78347,78350,78355,78357,78360,78363,78366,78369,78372,78375,78378,78381,78384,78387,78390,78393,78396,78401,78406,78411,78414,78418,78421,78426,78430,78432,78443,78448,78549,78552,78555,78558,78561,78564,78567,78570,78573,78575,78578,78581,78584,78587,78590,78592,78595,78598,78601,78604,78607,78610,78612,78615,78617,78619,78622,78626,78630,78633,78636,78639,78642,78645,78648,78651,78654,78657,78662,78782,78785,78788,78793,78796,78799,78802,78805,78810,78813,78816,78819,78822,78827,78830,78930,78995,79069,79073,79076,79079,79083,79086,79100,79129,79132,79135,79138,79141,79144,79147,79150,79152,79155,79158,79161,79164,79168,79173,79177,79182,79257,79260,79443,79446,79449,79452,79455,79458,79460,79463,79466,79469,79472,79475,79478,79480,79484,79487,79492,79495,79498,79501,79504,79506,79511,79514,79517,79520,79523,79525,79530,79533,79536,79538,79540,79543,79547,79550,79553,79558,79561,79564,79567,79617,79622,79626,79631,79634,79703,79706,79715,79719,79724,79727,79730,79738,79741,79758,81560,81564,81568,81573,81576,81580,81586,81592,81744,81749,81754,81757,81760,81763,81766,81769,81772,81775,81778,81781,81784,81787,81790,81795,81799,81802,81813,81817,81822,81825,81828,81831,81834,81837,81839,81842,81845,81848,81851,81853,81870,81873,81877,81880,81885,81890,81893,81896,81900,81903,81906,81915,81918,81922,81925,81930,81935,82002,82006,82009,82012,82017,82022,82108,82113,82117,82120,82123,82138,82141,82146,82150,82155,82264,82267,82278,82428,82432,82437,82546,82550,82555,82560,82565,82568,82575,82595,82631,82795,82800,82803,82808,82815,82818,82821,82824,82883,82939,82995,82999,83004,83319,83322,83326,83329,83334,83443,83448,83452,83457,83461,83532,83536,83538,83541,83544,83582,83858,83862,83879,83945,83979,83983,83986,83991,84020,84027,84036,84041,84056,84061,84070,84073,84210,84214,84276,84280,84285,84530,84534,84539,84542,84545,84548,84551,84555,84560,86141,86145,86149,86155,86158,86163,86167,86170,86175,86178,86189,86193,86198,86202,86207,86212,86215,86220,86224,86228,86231,86236,86241,86244,86247,86250,86372,86377,86479,86482,86485,86489,86494,86666,86671,86675,86678,86683,86749,86754,86757,86888,86891,86896,86899,86902,86993,86998,87001,87004,87007,87010,87015,87020,87023,87028,87033,87038,87042,87045,87048,87053,87058,87063,87068,87122,87125,87128,87133,87136,87139,87144,87149,87154,87158,87163,87177,87182,87185,87190,87194,87199,87204,87209,87214,87219,87224,87229,87234,87237,87241,87246,87249,87252,87255,87260,87265,87268,87271,87275,87278,87281,87286,87291,87296,87301,87304,87309,87314,87375,87380,87383,87388,88629,88634,88638,88642,88647,88650,88655,88660,88663,88668,88670,88675,88679,88682,88685,88696,88700,88705,88710,88765,88770,88775,88780,88991,88996,89000,89005,89008,89010,89013,89016,89463,89468,89475,89481,89484,89487,89751,89756,89760,90025,90030,90034,90039,90044,90049,90054,90385,90388,90393,90398,90401,90405,90409,90414,90419,90424,90429,90434,90439,90443,90446,90451,90456,90459,90533,90538,90543,90548,90550,90553,90923,90928,90933,90938,90941,90944,91046,91051,91056,91159,91163,91168,91172,91176,91181,91186,91189,91194,91197,91200,91593,91598,91601,91604,91607,91610,92130,92134,92139,92144,92149,92152,92157,92160,92163,92545,92550,92552,92554,92557,92560,93072,93076,93137,93140,93143,93146,93150,93153,93158,93163,94088],[10,78021,78017],{"id":78022},"_4js进阶",[19,78024,78025],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[1760,78027,78029],{"id":78028},"_41-作用域","4.1 作用域",[14,78031,78033],{"id":78032},"_411-局部作用域","4.1.1 局部作用域",[19,78035,78036],{},[401,78037],{"alt":275,"src":78038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78040,78041],{},[401,78042],{"alt":275,"src":78043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[698,78045,78046,78049,78052],{},[419,78047,78048],{},"函数作用域在函数内部",[419,78050,78051],{},"块级作用域在{}",[419,78053,78054],{},"对象的那个{}不是作用域，不是块作用域",[14,78056,78058],{"id":78057},"_412-全局作用域","4.1.2 全局作用域",[19,78060,78061],{},[401,78062],{"alt":275,"src":78063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78065,78066],{},"window.a=10不要这样写",[14,78068,78070],{"id":78069},"_413-作用域链","4.1.3 作用域链",[19,78072,78073],{},"变量查找机制",[19,78075,78076],{},[401,78077],{"alt":275,"src":78078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[1760,78080,78082],{"id":78081},"_42-垃圾回收机制","4.2 垃圾回收机制",[14,78084,78086],{"id":78085},"_421-大体介绍","4.2.1 大体介绍",[19,78088,78089],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78091,78092],{},[401,78093],{"alt":275,"src":78094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78096,78097],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[14,78099,78101],{"id":78100},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78103,78104],{},"堆栈空间分配区别：",[416,78106,78107,78110],{},[419,78108,78109],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[419,78111,78112],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78114,78115],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[262,78117,78119],{"id":78118},"_4221-引用计数","4.2.2.1 引用计数",[19,78121,78122],{},[401,78123],{"alt":275,"src":78124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78126,78127],{},[401,78128],{"alt":275,"src":78129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78131,78132],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[262,78134,78136],{"id":78135},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78138,78139],{},[401,78140],{"alt":275,"src":78141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78143,78144],{},[401,78145],{"alt":275,"src":78146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78148,78149],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[1760,78151,78153],{"id":78152},"_43-闭包","4.3 闭包",[19,78155,78156],{},[401,78157],{"alt":275,"src":78158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78160,78161],{},"闭包：内层函数+外层函数的变量",[19,78163,78164],{},[401,78165],{"alt":275,"src":78166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78168,78169],{},"closure就是闭包",[19,78171,78172],{},[401,78173],{"alt":275,"src":78174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78176,78177],{},"内层函数必须包含外层函数的变量才是闭包",[19,78179,78180],{},[401,78181],{"alt":275,"src":78182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78184,78185],{},[401,78186],{"alt":275,"src":78187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78189,78190],{},"闭包可能会引起内存泄漏",[19,78192,78193],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[1760,78195,78197],{"id":78196},"_44-变量提升","4.4 变量提升",[19,78199,78200],{},[401,78201],{"alt":275,"src":78202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78204,78205],{},[401,78206],{"alt":275,"src":78207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78209,78210],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[1760,78212,78214],{"id":78213},"_45-函数进阶","4.5 函数进阶",[14,78216,78218],{"id":78217},"_451-函数提升","4.5.1 函数提升",[19,78220,78221],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78223,78224],{},"只提升函数声明，不提升函数调用",[53150,78226,78227],{},"\n\nfn()\n\nfunction fn() {\n\nconsole.log('函数提升')\n\n}\n\n上方程序在执行前将函数的声明进行了提前，但是不提前调用，然后我们去调用，是没有问题的\n\nfun()\n\nvar fun = function () {\n\nconsole.log('我将报错')\n\n}\n\n这个一个用var声明的变量，赋值等于一个匿名函数，var声明的变量会提前，但赋值不提前，所有在前边调用，此时会报错\n\n",[14,78229,78231],{"id":78230},"_452-函数参数","4.5.2 函数参数",[262,78233,78235],{"id":78234},"_4521-动态参数","4.5.2.1 动态参数",[19,78237,78238],{},[401,78239],{"alt":275,"src":78240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78242,78243],{},[401,78244],{"alt":275,"src":78245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78247,78248],{},"箭头函数里边没有arguments",[262,78250,78252],{"id":78251},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78254,78255],{},[401,78256],{"alt":275,"src":78257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78259,78260],{},[401,78261],{"alt":275,"src":78262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78264,78265],{},"剩余参数使用的时候不需要写...",[19,78267,78268],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78270,78271],{},"  function getSum(a,b,...arr) {",[19,78273,78274],{},"  console.log(11)",[19,78276,78277],{},"  }",[19,78279,78280],{},"  getSum(1,2,3,4)",[19,78282,78283],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78285,78286],{},"  getSum(1,2)",[19,78288,78289],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78291,78292],{},[401,78293],{"alt":275,"src":78294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[262,78296,78298],{"id":78297},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78300,78301],{},[401,78302],{"alt":275,"src":78303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78305,78306],{},[401,78307],{"alt":275,"src":78308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78310,78311],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78313,78314],{},"展开运算符可以用于数组之间的合并：",[19,78316,78317],{},"const arr1 = [1, 2, 3]",[19,78319,78320],{},"const arr2 = [3, 4, 5]",[19,78322,78323],{},"const arr = [...arr1, ...arr2]",[19,78325,78326],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78328,78329],{},"剩余参数：函数参数使用，得到真数组",[19,78331,78332],{},"展开运算符：数组中使用，数组展开",[14,78334,78336],{"id":78335},"_453-箭头函数","4.5.3 箭头函数",[262,78338,78340],{"id":78339},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78342,78343],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78345,78346],{},"它不是万能的！！！",[19,78348,78349],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78351,78352],{},[401,78353],{"alt":275,"src":78354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78356,1848],{},[19,78358,78359],{},"① 只有一个形参的时候，可以省略小括号：",[19,78361,78362],{},"const fn=x=>{console.log(x)}",[19,78364,78365],{},"② 只有一行代码时可以省略大括号：",[19,78367,78368],{},"const fn=x=>console.log(11)",[19,78370,78371],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78373,78374],{},"const fn=x=>x+x",[19,78376,78377],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78379,78380],{},"⑤ 阻止表单默认提交：",[19,78382,78383],{},"const form = document.querySelector('form')",[19,78385,78386],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78388,78389],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78391,78392],{},"const fn=uname=>({uname:uname})",[19,78394,78395],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78397,78398],{},[401,78399],{"alt":275,"src":78400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78402,78403],{},[401,78404],{"alt":275,"src":78405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78407,78408],{},[401,78409],{"alt":275,"src":78410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78412,78413],{},"一定不要忘记用()，有()就理解为自带return",[262,78415,78417],{"id":78416},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78419,78420],{},"箭头函数是没有动态参数的arguments",[19,78422,78423],{},[401,78424],{"alt":275,"src":78425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[262,78427,78429],{"id":78428},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78431,12948],{},[416,78433,78434,78437,78440],{},[419,78435,78436],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[419,78438,78439],{},"事件回调函数使用箭头函数时，this 为全局的 window",[419,78441,78442],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78444,78445],{},[401,78446],{"alt":275,"src":78447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[270,78449,78451],{"className":54404,"code":78450,"language":54406,"meta":275,"style":275},"  \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",[277,78452,78453,78461,78466,78471,78476,78481,78486,78490,78495,78499,78503,78508,78513,78518,78522,78526,78531,78536,78541],{"__ignoreMap":275},[152,78454,78455,78457,78459],{"class":281,"line":282},[152,78456,53481],{"class":483},[152,78458,53150],{"class":52637},[152,78460,52644],{"class":483},[152,78462,78463],{"class":281,"line":303},[152,78464,78465],{"class":483},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[152,78467,78468],{"class":281,"line":310},[152,78469,78470],{"class":483},"    console.log(this) \u002F\u002F指向window\n",[152,78472,78473],{"class":281,"line":324},[152,78474,78475],{"class":483},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[152,78477,78478],{"class":281,"line":329},[152,78479,78480],{"class":483},"    function fn() {\n",[152,78482,78483],{"class":281,"line":343},[152,78484,78485],{"class":483},"      console.log(this)  \u002F\u002F指向window\n",[152,78487,78488],{"class":281,"line":348},[152,78489,3838],{"class":483},[152,78491,78492],{"class":281,"line":362},[152,78493,78494],{"class":483},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[152,78496,78497],{"class":281,"line":367},[152,78498,307],{"emptyLinePlaceholder":306},[152,78500,78501],{"class":281,"line":381},[152,78502,72860],{"class":483},[152,78504,78505],{"class":281,"line":386},[152,78506,78507],{"class":483},"      name: 'andy',\n",[152,78509,78510],{"class":281,"line":932},[152,78511,78512],{"class":483},"      sayHai: function () {\n",[152,78514,78515],{"class":281,"line":942},[152,78516,78517],{"class":483},"        console.log(this)\n",[152,78519,78520],{"class":281,"line":949},[152,78521,53735],{"class":483},[152,78523,78524],{"class":281,"line":954},[152,78525,3838],{"class":483},[152,78527,78528],{"class":281,"line":959},[152,78529,78530],{"class":483},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[152,78532,78533],{"class":281,"line":970},[152,78534,78535],{"class":483},"    \u002F\u002F 2.箭头函数的this\n",[152,78537,78538],{"class":281,"line":979},[152,78539,78540],{"class":483},"    const fn = () => console.log(this)\n",[152,78542,78543,78545,78547],{"class":281,"line":989},[152,78544,53754],{"class":483},[152,78546,53150],{"class":52637},[152,78548,52644],{"class":483},[19,78550,78551],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78553,78554],{},"const fn = () => console.log(this)",[19,78556,78557],{},"fn() \u002F\u002F指向window",[19,78559,78560],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,78562,78563],{},"①",[19,78565,78566],{},"const obj = {",[19,78568,78569],{},"uname: 'pink老师',",[19,78571,78572],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,78574,2752],{},[19,78576,78577],{},"调用对象里边的函数",[19,78579,78580],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,78582,78583],{},"obj.sayHai()",[19,78585,78586],{},"②",[19,78588,78589],{},"const obj1 = {",[19,78591,78569],{},[19,78593,78594],{},"sayHai: function () {",[19,78596,78597],{},"let i = 10",[19,78599,78600],{},"const count = () => {",[19,78602,78603],{},"console.log(this)",[19,78605,78606],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,78608,78609],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,78611,2752],{},[19,78613,78614],{},"count()",[19,78616,2752],{},[19,78618,2752],{},[19,78620,78621],{},"obj1.sayHai()",[1760,78623,78625],{"id":78624},"_46-解构赋值","4.6 解构赋值",[14,78627,78629],{"id":78628},"_461-数组解构","4.6.1 数组解构",[19,78631,78632],{},"以前要是使用数组中的值的话：",[19,78634,78635],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,78637,78638],{},"const arr=[100,60,80]",[19,78640,78641],{},"const max=arr[0]",[19,78643,78644],{},"const min=arr[1]",[19,78646,78647],{},"const avg=arr[2]",[19,78649,78650],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,78652,78653],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,78655,78656],{},"这个写法就类似于上边的那种用很多const的方法",[19,78658,78659],{},[401,78660],{"alt":275,"src":78661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[270,78663,78665],{"className":51970,"code":78664,"language":51972,"meta":275,"style":275},"①变量之间交换值:\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",[277,78666,78667,78672,78677,78682,78687,78692,78696,78700,78705,78709,78714,78719,78723,78728,78733,78744,78754,78759,78764,78769,78773,78777],{"__ignoreMap":275},[152,78668,78669],{"class":281,"line":282},[152,78670,78671],{"class":483},"①变量之间交换值:\n",[152,78673,78674],{"class":281,"line":303},[152,78675,78676],{"class":483},"let a=1\n",[152,78678,78679],{"class":281,"line":310},[152,78680,78681],{"class":483},"let b=2;\n",[152,78683,78684],{"class":281,"line":324},[152,78685,78686],{"class":483},"必须加这行代码，不然就会报错\n",[152,78688,78689],{"class":281,"line":329},[152,78690,78691],{"class":483},"[b,a]=[a,b]\n",[152,78693,78694],{"class":281,"line":343},[152,78695,307],{"emptyLinePlaceholder":306},[152,78697,78698],{"class":281,"line":348},[152,78699,307],{"emptyLinePlaceholder":306},[152,78701,78702],{"class":281,"line":362},[152,78703,78704],{"class":483},"可以写成下面的方式：\n",[152,78706,78707],{"class":281,"line":367},[152,78708,78676],{"class":483},[152,78710,78711],{"class":281,"line":381},[152,78712,78713],{"class":483},"let b=2\n",[152,78715,78716],{"class":281,"line":386},[152,78717,78718],{"class":483},";[b,a]=[a,b]\n",[152,78720,78721],{"class":281,"line":932},[152,78722,307],{"emptyLinePlaceholder":306},[152,78724,78725],{"class":281,"line":942},[152,78726,78727],{"class":483},"②排序\n",[152,78729,78730],{"class":281,"line":949},[152,78731,78732],{"class":483},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[152,78734,78735,78738,78741],{"class":281,"line":954},[152,78736,78737],{"class":483},"for (let i = 0; i ",[152,78739,844],{"class":78740},"s7hpK",[152,78742,78743],{"class":483}," arr1.length; i++) {\n",[152,78745,78746,78749,78751],{"class":281,"line":959},[152,78747,78748],{"class":483},"   for (let j = 0; j ",[152,78750,844],{"class":78740},[152,78752,78753],{"class":483}," arr1.length - 1; j++) {\n",[152,78755,78756],{"class":281,"line":970},[152,78757,78758],{"class":483},"      if (arr1[j] > arr1[j + 1]) {\n",[152,78760,78761],{"class":281,"line":979},[152,78762,78763],{"class":483},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[152,78765,78766],{"class":281,"line":989},[152,78767,78768],{"class":483},"       }\n",[152,78770,78771],{"class":281,"line":996},[152,78772,5951],{"class":483},[152,78774,78775],{"class":281,"line":1001},[152,78776,3236],{"class":483},[152,78778,78779],{"class":281,"line":1006},[152,78780,78781],{"class":483},"console.log(arr1)\n",[19,78783,78784],{},"数组解构的细节：",[19,78786,78787],{},"①变量多，单元值少",[19,78789,78790],{},[401,78791],{"alt":275,"src":78792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,78794,78795],{},"防止出现undefined的方法：",[19,78797,78798],{},"const [a=0,b=0] =[1]",[19,78800,78801],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,78803,78804],{},"②变量少，单元值多",[19,78806,78807],{},[401,78808],{"alt":275,"src":78809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,78811,78812],{},"此时可以使用剩余参数来接收多余的值",[19,78814,78815],{},"const [a,b,...c]=[1,2,3,4]",[19,78817,78818],{},"console.log(c) 输出[3,4]",[19,78820,78821],{},"③可以按需导入，忽略某些返回值",[19,78823,78824],{},[401,78825],{"alt":275,"src":78826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,78828,78829],{},"④支持多维数组的结构",[270,78831,78835],{"className":78832,"code":78833,"language":78834,"meta":275,"style":275},"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",[277,78836,78837,78865,78881,78896,78911],{"__ignoreMap":275},[152,78838,78839,78841,78843,78845,78847,78849,78851,78853,78856,78858,78860,78862],{"class":281,"line":282},[152,78840,8434],{"class":476},[152,78842,53170],{"class":483},[152,78844,1864],{"class":476},[152,78846,53563],{"class":483},[152,78848,2026],{"class":293},[152,78850,14051],{"class":483},[152,78852,1894],{"class":293},[152,78854,78855],{"class":483},", [",[152,78857,1888],{"class":293},[152,78859,14051],{"class":483},[152,78861,2101],{"class":293},[152,78863,78864],{"class":483},"]]\n",[152,78866,78867,78870,78872,78874,78876,78878],{"class":281,"line":303},[152,78868,78869],{"class":483},"console.",[152,78871,59584],{"class":285},[152,78873,5493],{"class":483},[152,78875,2000],{"class":293},[152,78877,5858],{"class":483},[152,78879,78880],{"class":866},"  \u002F\u002F1\n",[152,78882,78883,78885,78887,78889,78891,78893],{"class":281,"line":310},[152,78884,78869],{"class":483},[152,78886,59584],{"class":285},[152,78888,5493],{"class":483},[152,78890,2026],{"class":293},[152,78892,5858],{"class":483},[152,78894,78895],{"class":866},"  \u002F\u002F2\n",[152,78897,78898,78900,78902,78904,78906,78908],{"class":281,"line":324},[152,78899,78869],{"class":483},[152,78901,59584],{"class":285},[152,78903,5493],{"class":483},[152,78905,1894],{"class":293},[152,78907,5858],{"class":483},[152,78909,78910],{"class":866},"  \u002F\u002F[3,4]\n",[152,78912,78913,78915,78917,78919,78921,78923,78925,78927],{"class":281,"line":329},[152,78914,78869],{"class":483},[152,78916,59584],{"class":285},[152,78918,5493],{"class":483},[152,78920,1894],{"class":293},[152,78922,6543],{"class":483},[152,78924,2000],{"class":293},[152,78926,5858],{"class":483},[152,78928,78929],{"class":866},"  \u002F\u002F3\n",[270,78931,78933],{"className":78832,"code":78932,"language":78834,"meta":275,"style":275},"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",[277,78934,78935,78962,78973,78984],{"__ignoreMap":275},[152,78936,78937,78939,78942,78944,78946,78948,78950,78952,78954,78956,78958,78960],{"class":281,"line":282},[152,78938,8434],{"class":476},[152,78940,78941],{"class":483}," [a, b, c] ",[152,78943,1864],{"class":476},[152,78945,53563],{"class":483},[152,78947,2026],{"class":293},[152,78949,14051],{"class":483},[152,78951,1894],{"class":293},[152,78953,78855],{"class":483},[152,78955,1888],{"class":293},[152,78957,14051],{"class":483},[152,78959,2101],{"class":293},[152,78961,78864],{"class":483},[152,78963,78964,78966,78968,78971],{"class":281,"line":303},[152,78965,78869],{"class":483},[152,78967,59584],{"class":285},[152,78969,78970],{"class":483},"(a)",[152,78972,78880],{"class":866},[152,78974,78975,78977,78979,78982],{"class":281,"line":310},[152,78976,78869],{"class":483},[152,78978,59584],{"class":285},[152,78980,78981],{"class":483},"(b)",[152,78983,78895],{"class":866},[152,78985,78986,78988,78990,78993],{"class":281,"line":324},[152,78987,78869],{"class":483},[152,78989,59584],{"class":285},[152,78991,78992],{"class":483},"(c)",[152,78994,78910],{"class":866},[270,78996,78998],{"className":78832,"code":78997,"language":78834,"meta":275,"style":275},"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",[277,78999,79000,79027,79037,79047,79057],{"__ignoreMap":275},[152,79001,79002,79004,79007,79009,79011,79013,79015,79017,79019,79021,79023,79025],{"class":281,"line":282},[152,79003,8434],{"class":476},[152,79005,79006],{"class":483}," [a, b, [c, d]] ",[152,79008,1864],{"class":476},[152,79010,53563],{"class":483},[152,79012,2026],{"class":293},[152,79014,14051],{"class":483},[152,79016,1894],{"class":293},[152,79018,78855],{"class":483},[152,79020,1888],{"class":293},[152,79022,14051],{"class":483},[152,79024,2101],{"class":293},[152,79026,78864],{"class":483},[152,79028,79029,79031,79033,79035],{"class":281,"line":303},[152,79030,78869],{"class":483},[152,79032,59584],{"class":285},[152,79034,78970],{"class":483},[152,79036,78880],{"class":866},[152,79038,79039,79041,79043,79045],{"class":281,"line":310},[152,79040,78869],{"class":483},[152,79042,59584],{"class":285},[152,79044,78981],{"class":483},[152,79046,78895],{"class":866},[152,79048,79049,79051,79053,79055],{"class":281,"line":324},[152,79050,78869],{"class":483},[152,79052,59584],{"class":285},[152,79054,78992],{"class":483},[152,79056,78929],{"class":866},[152,79058,79059,79061,79063,79066],{"class":281,"line":329},[152,79060,78869],{"class":483},[152,79062,59584],{"class":285},[152,79064,79065],{"class":483},"(d)",[152,79067,79068],{"class":866},"  \u002F\u002F4\n",[14,79070,79072],{"id":79071},"_462-对象解构","4.6.2 对象解构",[19,79074,79075],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79077,79078],{},"用的非常非常多！！！！！！",[262,79080,79082],{"id":79081},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79084,79085],{},"基本语法：",[416,79087,79088,79091,79094,79097],{},[419,79089,79090],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[419,79092,79093],{},"对象属性的值将被赋值给与属性名相同的变量",[419,79095,79096],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[419,79098,79099],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[270,79101,79103],{"className":51970,"code":79102,"language":51972,"meta":275,"style":275},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[277,79104,79105,79110,79115,79120,79124],{"__ignoreMap":275},[152,79106,79107],{"class":281,"line":282},[152,79108,79109],{"class":483},"const obj = {\n",[152,79111,79112],{"class":281,"line":303},[152,79113,79114],{"class":483},"   uname: 'pink老师',\n",[152,79116,79117],{"class":281,"line":310},[152,79118,79119],{"class":483},"   age: 18,\n",[152,79121,79122],{"class":281,"line":324},[152,79123,3236],{"class":483},[152,79125,79126],{"class":281,"line":329},[152,79127,79128],{"class":483},"const { uname, age } = obj\n",[19,79130,79131],{},"上方代码这样写等价于：",[19,79133,79134],{},"const uname等价于obj.uname",[19,79136,79137],{},"变量名可以重新改名：",[19,79139,79140],{},"const uname='red老师'",[19,79142,79143],{},"const user={",[19,79145,79146],{},"  uname:'pink老师',",[19,79148,79149],{},"  age:18",[19,79151,2752],{},[19,79153,79154],{},"const {uname,age}=user",[19,79156,79157],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79159,79160],{},"const {旧变量名：新变量名}=对象",[19,79162,79163],{},"const {uname:username,age}=user",[262,79165,79167],{"id":79166},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79169,79170],{},[401,79171],{"alt":275,"src":79172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[262,79174,79176],{"id":79175},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79178,79179],{},[401,79180],{"alt":275,"src":79181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[270,79183,79185],{"className":54404,"code":79184,"language":54406,"meta":275,"style":275},"  \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",[277,79186,79187,79195,79200,79205,79210,79215,79220,79225,79230,79235,79239,79244,79249],{"__ignoreMap":275},[152,79188,79189,79191,79193],{"class":281,"line":282},[152,79190,53481],{"class":483},[152,79192,53150],{"class":52637},[152,79194,52644],{"class":483},[152,79196,79197],{"class":281,"line":303},[152,79198,79199],{"class":483},"    const pig = {\n",[152,79201,79202],{"class":281,"line":310},[152,79203,79204],{"class":483},"      name: '佩奇',\n",[152,79206,79207],{"class":281,"line":324},[152,79208,79209],{"class":483},"      family: {\n",[152,79211,79212],{"class":281,"line":329},[152,79213,79214],{"class":483},"        mother: '猪妈妈',\n",[152,79216,79217],{"class":281,"line":343},[152,79218,79219],{"class":483},"        father: '猪爸爸',\n",[152,79221,79222],{"class":281,"line":348},[152,79223,79224],{"class":483},"        sister: '乔治'\n",[152,79226,79227],{"class":281,"line":362},[152,79228,79229],{"class":483},"      },\n",[152,79231,79232],{"class":281,"line":367},[152,79233,79234],{"class":483},"      age: 6\n",[152,79236,79237],{"class":281,"line":381},[152,79238,3838],{"class":483},[152,79240,79241],{"class":281,"line":386},[152,79242,79243],{"class":483},"    \u002F\u002F 多级对象解构\n",[152,79245,79246],{"class":281,"line":932},[152,79247,79248],{"class":483},"    const { name, family: { mother, father, sister }, age } = pig\n",[152,79250,79251,79253,79255],{"class":281,"line":942},[152,79252,53754],{"class":483},[152,79254,53150],{"class":52637},[152,79256,52644],{"class":483},[19,79258,79259],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[270,79261,79264],{"className":79262,"code":79263,"language":77784,"meta":275,"style":275},"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",[277,79265,79266,79271,79282,79294,79306,79315,79319,79330,79342,79352,79357,79361,79371,79382,79391,79395,79399,79410,79421,79430,79434,79439],{"__ignoreMap":275},[152,79267,79268],{"class":281,"line":282},[152,79269,79270],{"class":866},"    \u002F\u002F 这是后台传递过来的数据\n",[152,79272,79273,79275,79278,79280],{"class":281,"line":303},[152,79274,12837],{"class":476},[152,79276,79277],{"class":483}," msg ",[152,79279,1864],{"class":476},[152,79281,17187],{"class":483},[152,79283,79284,79287,79289,79292],{"class":281,"line":310},[152,79285,79286],{"class":289},"      \"code\"",[152,79288,841],{"class":476},[152,79290,79291],{"class":293}," 200",[152,79293,32803],{"class":483},[152,79295,79296,79299,79301,79304],{"class":281,"line":324},[152,79297,79298],{"class":289},"      \"msg\"",[152,79300,841],{"class":476},[152,79302,79303],{"class":289}," \"获取新闻列表成功\"",[152,79305,32803],{"class":483},[152,79307,79308,79311,79313],{"class":281,"line":329},[152,79309,79310],{"class":289},"      \"data\"",[152,79312,841],{"class":476},[152,79314,56784],{"class":483},[152,79316,79317],{"class":281,"line":343},[152,79318,4160],{"class":483},[152,79320,79321,79324,79326,79328],{"class":281,"line":348},[152,79322,79323],{"class":289},"          \"id\"",[152,79325,841],{"class":476},[152,79327,26729],{"class":293},[152,79329,32803],{"class":483},[152,79331,79332,79335,79337,79340],{"class":281,"line":362},[152,79333,79334],{"class":289},"          \"title\"",[152,79336,841],{"class":476},[152,79338,79339],{"class":289}," \"5G商用自己，三大运用商收入下降\"",[152,79341,32803],{"class":483},[152,79343,79344,79347,79349],{"class":281,"line":367},[152,79345,79346],{"class":289},"          \"count\"",[152,79348,841],{"class":476},[152,79350,79351],{"class":293}," 58\n",[152,79353,79354],{"class":281,"line":381},[152,79355,79356],{"class":483},"        },\n",[152,79358,79359],{"class":281,"line":386},[152,79360,4160],{"class":483},[152,79362,79363,79365,79367,79369],{"class":281,"line":932},[152,79364,79323],{"class":289},[152,79366,841],{"class":476},[152,79368,16370],{"class":293},[152,79370,32803],{"class":483},[152,79372,79373,79375,79377,79380],{"class":281,"line":942},[152,79374,79334],{"class":289},[152,79376,841],{"class":476},[152,79378,79379],{"class":289}," \"国际媒体头条速览\"",[152,79381,32803],{"class":483},[152,79383,79384,79386,79388],{"class":281,"line":949},[152,79385,79346],{"class":289},[152,79387,841],{"class":476},[152,79389,79390],{"class":293}," 56\n",[152,79392,79393],{"class":281,"line":954},[152,79394,79356],{"class":483},[152,79396,79397],{"class":281,"line":959},[152,79398,4160],{"class":483},[152,79400,79401,79403,79405,79408],{"class":281,"line":970},[152,79402,79323],{"class":289},[152,79404,841],{"class":476},[152,79406,79407],{"class":293}," 3",[152,79409,32803],{"class":483},[152,79411,79412,79414,79416,79419],{"class":281,"line":979},[152,79413,79334],{"class":289},[152,79415,841],{"class":476},[152,79417,79418],{"class":289}," \"乌克兰和俄罗斯持续冲突\"",[152,79420,32803],{"class":483},[152,79422,79423,79425,79427],{"class":281,"line":989},[152,79424,79346],{"class":289},[152,79426,841],{"class":476},[152,79428,79429],{"class":293}," 1669\n",[152,79431,79432],{"class":281,"line":996},[152,79433,79356],{"class":483},[152,79435,79436],{"class":281,"line":1001},[152,79437,79438],{"class":483},"      ]\n",[152,79440,79441],{"class":281,"line":1006},[152,79442,3838],{"class":483},[19,79444,79445],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79447,79448],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79450,79451],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,79453,79454],{},"function({data}) {",[19,79456,79457],{},"console.log(data)",[19,79459,2752],{},[19,79461,79462],{},"render(msg)",[19,79464,79465],{},"实参传递给形参的时候解构了",[19,79467,79468],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79470,79471],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79473,79474],{},"function render({data:mydata}) {",[19,79476,79477],{},"  console.log(data)",[19,79479,2752],{},[14,79481,79483],{"id":79482},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79485,79486],{},"有两种情况：一个是数组结构，一个是立即执行函数",[416,79488,79489],{},[419,79490,79491],{},"如果对一个数组进行遍历，有两种方式：",[19,79493,79494],{},"①法1",[19,79496,79497],{},"const arr=[1,2,3]",[19,79499,79500],{},"arr.map(function(item,index) {",[19,79502,79503],{},"  console.log(item)",[19,79505,53801],{},[19,79507,79508],{},[401,79509],{"alt":275,"src":79510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79512,79513],{},"②法2",[19,79515,79516],{},"const str='pink'",[19,79518,79519],{},"[1,2,3].map(function(item,index) {",[19,79521,79522],{},"console.log(item)",[19,79524,53801],{},[19,79526,79527],{},[401,79528],{"alt":275,"src":79529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79531,79532],{},"此时会报错",[19,79534,79535],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79537,79522],{},[19,79539,53801],{},[19,79541,79542],{},"内部会当成这样处理，所以我们用分号进行隔开",[1760,79544,79546],{"id":79545},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79548,79549],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79551,79552],{},"可以理解为加强版的for循环",[19,79554,79555],{},[401,79556],{"alt":275,"src":79557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,79559,79560],{},"里边不写return，不返回数组，只遍历不返回",[19,79562,79563],{},"map是返回数组",[19,79565,79566],{},"forEach主要用于遍历数组对象",[270,79568,79570],{"className":54404,"code":79569,"language":54406,"meta":275,"style":275},"  \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",[277,79571,79572,79580,79585,79590,79595,79600,79604,79609],{"__ignoreMap":275},[152,79573,79574,79576,79578],{"class":281,"line":282},[152,79575,53481],{"class":483},[152,79577,53150],{"class":52637},[152,79579,52644],{"class":483},[152,79581,79582],{"class":281,"line":303},[152,79583,79584],{"class":483},"    const arr = ['red', 'green', 'pink']\n",[152,79586,79587],{"class":281,"line":310},[152,79588,79589],{"class":483},"    const result = arr.forEach(function (item, index) {\n",[152,79591,79592],{"class":281,"line":324},[152,79593,79594],{"class":483},"      console.log(item)\n",[152,79596,79597],{"class":281,"line":329},[152,79598,79599],{"class":483},"      console.log(index)\n",[152,79601,79602],{"class":281,"line":343},[152,79603,34798],{"class":483},[152,79605,79606],{"class":281,"line":348},[152,79607,79608],{"class":483},"    console.log(result)\n",[152,79610,79611,79613,79615],{"class":281,"line":362},[152,79612,53754],{"class":483},[152,79614,53150],{"class":52637},[152,79616,52644],{"class":483},[19,79618,79619],{},[401,79620],{"alt":275,"src":79621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[1760,79623,79625],{"id":79624},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,79627,79628],{},[401,79629],{"alt":275,"src":79630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,79632,79633],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[270,79635,79637],{"className":54404,"code":79636,"language":54406,"meta":275,"style":275},"\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",[277,79638,79639,79647,79655,79660,79665,79669,79673,79678,79682,79687,79695],{"__ignoreMap":275},[152,79640,79641,79643,79645],{"class":281,"line":282},[152,79642,844],{"class":483},[152,79644,53137],{"class":52637},[152,79646,52644],{"class":483},[152,79648,79649,79651,79653],{"class":281,"line":303},[152,79650,53481],{"class":483},[152,79652,53150],{"class":52637},[152,79654,52644],{"class":483},[152,79656,79657],{"class":281,"line":310},[152,79658,79659],{"class":483},"    const arr = [10, 20, 30]\n",[152,79661,79662],{"class":281,"line":324},[152,79663,79664],{"class":483},"    const newArr = arr.filter(function (item, index) {\n",[152,79666,79667],{"class":281,"line":329},[152,79668,79594],{"class":483},[152,79670,79671],{"class":281,"line":343},[152,79672,79599],{"class":483},[152,79674,79675],{"class":281,"line":348},[152,79676,79677],{"class":483},"      return item >= 20\n",[152,79679,79680],{"class":281,"line":362},[152,79681,34798],{"class":483},[152,79683,79684],{"class":281,"line":367},[152,79685,79686],{"class":483},"    console.log(newArr)\n",[152,79688,79689,79691,79693],{"class":281,"line":381},[152,79690,53754],{"class":483},[152,79692,53150],{"class":52637},[152,79694,52644],{"class":483},[152,79696,79697,79699,79701],{"class":281,"line":386},[152,79698,53122],{"class":483},[152,79700,53137],{"class":52637},[152,79702,52644],{"class":483},[19,79704,79705],{},"这个也可以写成箭头函数：",[270,79707,79709],{"className":51970,"code":79708,"language":51972,"meta":275,"style":275},"const newArr = arr.filter(item => item >= 20)\n",[277,79710,79711],{"__ignoreMap":275},[152,79712,79713],{"class":281,"line":282},[152,79714,79708],{"class":483},[1760,79716,79718],{"id":79717},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,79720,79721],{},[401,79722],{"alt":275,"src":79723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,79725,79726],{},"步骤：",[19,79728,79729],{},"①：渲染页面模块",[698,79731,79732,79735],{},[419,79733,79734],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[419,79736,79737],{},"用forEach+字符串的形式",[19,79739,79740],{},"②：点击不同需求，显示不同页面内容",[698,79742,79743,79746,79749,79752,79755],{},[419,79744,79745],{},"点击采取事件委托方式 .filter",[419,79747,79748],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[419,79750,79751],{},"筛选条件是根据点击的 data-index 来判断",[419,79753,79754],{},"可以使用对象解构，把事件对象解构",[419,79756,79757],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[270,79759,79761],{"className":51970,"code":79760,"language":51972,"meta":275,"style":275},"\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",[277,79762,79763,79773,79787,79791,79799,79813,79833,79845,79853,79859,79869,79879,79889,79893,79897,79903,79916,79928,79938,79950,79954,79958,79965,79978,79990,80007,80025,80038,80042,80046,80058,80068,80072,80076,80083,80124,80151,80161,80165,80169,80177,80189,80193,80197,80205,80217,80229,80240,80244,80248,80257,80269,80280,80284,80288,80297,80309,80321,80325,80329,80336,80346,80358,80370,80385,80389,80393,80401,80417,80427,80437,80447,80459,80463,80467,80477,80488,80498,80502,80510,80518,80522,80530,80545,80571,80596,80621,80640,80648,80662,80667,80672,80677,80682,80687,80695,80703,80708,80719,80724,80734,80744,80754,80764,80768,80772,80781,80790,80799,80808,80812,80816,80825,80834,80843,80852,80856,80860,80869,80878,80887,80896,80900,80904,80913,80922,80931,80940,80944,80948,80957,80966,80975,80984,80988,80992,81001,81010,81019,81028,81032,81036,81045,81054,81062,81071,81075,81079,81083,81088,81100,81105,81117,81121,81138,81166,81175,81180,81190,81200,81209,81214,81219,81223,81228,81245,81249,81254,81262,81267,81294,81299,81319,81324,81336,81341,81346,81351,81362,81376,81413,81431,81464,81481,81505,81509,81514,81520,81524,81528,81532,81540,81548,81552],{"__ignoreMap":275},[152,79764,79765,79767,79769,79771],{"class":281,"line":282},[152,79766,52634],{"class":483},[152,79768,52638],{"class":52637},[152,79770,52641],{"class":285},[152,79772,52644],{"class":483},[152,79774,79775,79777,79779,79781,79783,79785],{"class":281,"line":303},[152,79776,844],{"class":483},[152,79778,51972],{"class":52637},[152,79780,52653],{"class":285},[152,79782,1864],{"class":483},[152,79784,52658],{"class":289},[152,79786,52644],{"class":483},[152,79788,79789],{"class":281,"line":310},[152,79790,307],{"emptyLinePlaceholder":306},[152,79792,79793,79795,79797],{"class":281,"line":324},[152,79794,844],{"class":483},[152,79796,52671],{"class":52637},[152,79798,52644],{"class":483},[152,79800,79801,79803,79805,79807,79809,79811],{"class":281,"line":329},[152,79802,53481],{"class":483},[152,79804,52681],{"class":52637},[152,79806,52684],{"class":285},[152,79808,1864],{"class":483},[152,79810,52689],{"class":289},[152,79812,52644],{"class":483},[152,79814,79815,79817,79819,79821,79823,79825,79827,79829,79831],{"class":281,"line":343},[152,79816,53481],{"class":483},[152,79818,52681],{"class":52637},[152,79820,16535],{"class":285},[152,79822,1864],{"class":483},[152,79824,52728],{"class":289},[152,79826,52708],{"class":285},[152,79828,1864],{"class":483},[152,79830,52735],{"class":289},[152,79832,52644],{"class":483},[152,79834,79835,79837,79839,79841,79843],{"class":281,"line":348},[152,79836,53481],{"class":483},[152,79838,52744],{"class":52637},[152,79840,52747],{"class":483},[152,79842,52744],{"class":52637},[152,79844,52644],{"class":483},[152,79846,79847,79849,79851],{"class":281,"line":362},[152,79848,53481],{"class":483},[152,79850,1736],{"class":52637},[152,79852,52644],{"class":483},[152,79854,79855,79857],{"class":281,"line":367},[152,79856,8045],{"class":52637},[152,79858,17187],{"class":483},[152,79860,79861,79863,79865,79867],{"class":281,"line":381},[152,79862,56032],{"class":293},[152,79864,52774],{"class":483},[152,79866,2000],{"class":293},[152,79868,2965],{"class":483},[152,79870,79871,79873,79875,79877],{"class":281,"line":386},[152,79872,56043],{"class":293},[152,79874,52774],{"class":483},[152,79876,2000],{"class":293},[152,79878,2965],{"class":483},[152,79880,79881,79883,79885,79887],{"class":281,"line":932},[152,79882,73933],{"class":293},[152,79884,52774],{"class":483},[152,79886,61842],{"class":293},[152,79888,2965],{"class":483},[152,79890,79891],{"class":281,"line":942},[152,79892,3838],{"class":483},[152,79894,79895],{"class":281,"line":949},[152,79896,307],{"emptyLinePlaceholder":306},[152,79898,79899,79901],{"class":281,"line":954},[152,79900,63460],{"class":285},[152,79902,17187],{"class":483},[152,79904,79905,79907,79909,79912,79914],{"class":281,"line":959},[152,79906,56108],{"class":293},[152,79908,52774],{"class":483},[152,79910,79911],{"class":293},"990",[152,79913,52829],{"class":476},[152,79915,2965],{"class":483},[152,79917,79918,79920,79922,79924,79926],{"class":281,"line":970},[152,79919,56043],{"class":293},[152,79921,52774],{"class":483},[152,79923,2000],{"class":293},[152,79925,52893],{"class":293},[152,79927,2965],{"class":483},[152,79929,79930,79932,79934,79936],{"class":281,"line":979},[152,79931,56346],{"class":293},[152,79933,52774],{"class":483},[152,79935,52814],{"class":293},[152,79937,2965],{"class":483},[152,79939,79940,79943,79945,79948],{"class":281,"line":989},[152,79941,79942],{"class":293},"      flex-wrap",[152,79944,52774],{"class":483},[152,79946,79947],{"class":293},"wrap",[152,79949,2965],{"class":483},[152,79951,79952],{"class":281,"line":996},[152,79953,3838],{"class":483},[152,79955,79956],{"class":281,"line":1001},[152,79957,307],{"emptyLinePlaceholder":306},[152,79959,79960,79963],{"class":281,"line":1006},[152,79961,79962],{"class":285},"    .item",[152,79964,17187],{"class":483},[152,79966,79967,79969,79971,79974,79976],{"class":281,"line":1018},[152,79968,56108],{"class":293},[152,79970,52774],{"class":483},[152,79972,79973],{"class":293},"240",[152,79975,52829],{"class":476},[152,79977,2965],{"class":483},[152,79979,79980,79982,79984,79986,79988],{"class":281,"line":1027},[152,79981,63337],{"class":293},[152,79983,52774],{"class":483},[152,79985,2254],{"class":293},[152,79987,52829],{"class":476},[152,79989,2965],{"class":483},[152,79991,79992,79994,79996,79998,80000,80003,80005],{"class":281,"line":1037},[152,79993,56032],{"class":293},[152,79995,52774],{"class":483},[152,79997,2508],{"class":293},[152,79999,52829],{"class":476},[152,80001,80002],{"class":293}," 30",[152,80004,52829],{"class":476},[152,80006,2965],{"class":483},[152,80008,80009,80011,80013,80015,80018,80021,80023],{"class":281,"line":1044},[152,80010,63197],{"class":293},[152,80012,52774],{"class":483},[152,80014,29721],{"class":293},[152,80016,80017],{"class":293}," ease",[152,80019,80020],{"class":293}," .5",[152,80022,2503],{"class":476},[152,80024,2965],{"class":483},[152,80026,80027,80030,80032,80034,80036],{"class":281,"line":1049},[152,80028,80029],{"class":293},"      margin-bottom",[152,80031,52774],{"class":483},[152,80033,2508],{"class":293},[152,80035,52829],{"class":476},[152,80037,2965],{"class":483},[152,80039,80040],{"class":281,"line":1054},[152,80041,3838],{"class":483},[152,80043,80044],{"class":281,"line":1065},[152,80045,307],{"emptyLinePlaceholder":306},[152,80047,80048,80051,80053,80056],{"class":281,"line":1074},[152,80049,80050],{"class":285},"    .item:nth-child",[152,80052,1819],{"class":483},[152,80054,80055],{"class":293},"4n",[152,80057,14058],{"class":483},[152,80059,80060,80062,80064,80066],{"class":281,"line":1084},[152,80061,63337],{"class":293},[152,80063,52774],{"class":483},[152,80065,2000],{"class":293},[152,80067,2965],{"class":483},[152,80069,80070],{"class":281,"line":1091},[152,80071,3838],{"class":483},[152,80073,80074],{"class":281,"line":1096},[152,80075,307],{"emptyLinePlaceholder":306},[152,80077,80078,80081],{"class":281,"line":1101},[152,80079,80080],{"class":285},"    .item:hover",[152,80082,17187],{"class":483},[152,80084,80085,80088,80090,80092,80094,80096,80098,80100,80102,80105,80107,80109,80111,80113,80115,80117,80119,80122],{"class":281,"line":1112},[152,80086,80087],{"class":293},"      box-shadow",[152,80089,52774],{"class":483},[152,80091,2000],{"class":293},[152,80093,52829],{"class":476},[152,80095,5735],{"class":293},[152,80097,52829],{"class":476},[152,80099,3799],{"class":293},[152,80101,52829],{"class":476},[152,80103,80104],{"class":293}," rgba",[152,80106,1819],{"class":483},[152,80108,2000],{"class":293},[152,80110,14051],{"class":483},[152,80112,2000],{"class":293},[152,80114,14051],{"class":483},[152,80116,2000],{"class":293},[152,80118,14051],{"class":483},[152,80120,80121],{"class":293},".2",[152,80123,4362],{"class":483},[152,80125,80126,80129,80131,80134,80136,80138,80140,80143,80145,80147,80149],{"class":281,"line":1121},[152,80127,80128],{"class":293},"      transform",[152,80130,52774],{"class":483},[152,80132,80133],{"class":293},"translate3d",[152,80135,1819],{"class":483},[152,80137,2000],{"class":293},[152,80139,14051],{"class":483},[152,80141,80142],{"class":293},"-4",[152,80144,52829],{"class":476},[152,80146,14051],{"class":483},[152,80148,2000],{"class":293},[152,80150,4362],{"class":483},[152,80152,80153,80155,80157,80159],{"class":281,"line":1131},[152,80154,63362],{"class":293},[152,80156,52774],{"class":483},[152,80158,63367],{"class":293},[152,80160,2965],{"class":483},[152,80162,80163],{"class":281,"line":1138},[152,80164,3838],{"class":483},[152,80166,80167],{"class":281,"line":1143},[152,80168,307],{"emptyLinePlaceholder":306},[152,80170,80171,80173,80175],{"class":281,"line":1148},[152,80172,79962],{"class":285},[152,80174,56952],{"class":52637},[152,80176,17187],{"class":483},[152,80178,80179,80181,80183,80185,80187],{"class":281,"line":1159},[152,80180,56108],{"class":293},[152,80182,52774],{"class":483},[152,80184,2119],{"class":293},[152,80186,2136],{"class":476},[152,80188,2965],{"class":483},[152,80190,80191],{"class":281,"line":1168},[152,80192,3838],{"class":483},[152,80194,80195],{"class":281,"line":1178},[152,80196,307],{"emptyLinePlaceholder":306},[152,80198,80199,80201,80203],{"class":281,"line":1185},[152,80200,79962],{"class":285},[152,80202,63641],{"class":285},[152,80204,17187],{"class":483},[152,80206,80207,80209,80211,80213,80215],{"class":281,"line":1190},[152,80208,56259],{"class":293},[152,80210,52774],{"class":483},[152,80212,2458],{"class":293},[152,80214,52829],{"class":476},[152,80216,2965],{"class":483},[152,80218,80219,80221,80223,80225,80227],{"class":281,"line":1195},[152,80220,80029],{"class":293},[152,80222,52774],{"class":483},[152,80224,2254],{"class":293},[152,80226,52829],{"class":476},[152,80228,2965],{"class":483},[152,80230,80231,80233,80235,80238],{"class":281,"line":1206},[152,80232,58753],{"class":293},[152,80234,52774],{"class":483},[152,80236,80237],{"class":293},"#666",[152,80239,2965],{"class":483},[152,80241,80242],{"class":281,"line":1215},[152,80243,3838],{"class":483},[152,80245,80246],{"class":281,"line":1225},[152,80247,307],{"emptyLinePlaceholder":306},[152,80249,80250,80252,80255],{"class":281,"line":1232},[152,80251,79962],{"class":285},[152,80253,80254],{"class":285}," .price",[152,80256,17187],{"class":483},[152,80258,80259,80261,80263,80265,80267],{"class":281,"line":1237},[152,80260,56259],{"class":293},[152,80262,52774],{"class":483},[152,80264,2558],{"class":293},[152,80266,52829],{"class":476},[152,80268,2965],{"class":483},[152,80270,80271,80273,80275,80278],{"class":281,"line":1242},[152,80272,58753],{"class":293},[152,80274,52774],{"class":483},[152,80276,80277],{"class":293},"firebrick",[152,80279,2965],{"class":483},[152,80281,80282],{"class":281,"line":1253},[152,80283,3838],{"class":483},[152,80285,80286],{"class":281,"line":1262},[152,80287,307],{"emptyLinePlaceholder":306},[152,80289,80290,80292,80295],{"class":281,"line":1272},[152,80291,79962],{"class":285},[152,80293,80294],{"class":285}," .price::before",[152,80296,17187],{"class":483},[152,80298,80299,80302,80304,80307],{"class":281,"line":1279},[152,80300,80301],{"class":293},"      content",[152,80303,52774],{"class":483},[152,80305,80306],{"class":289},"'￥'",[152,80308,2965],{"class":483},[152,80310,80311,80313,80315,80317,80319],{"class":281,"line":1284},[152,80312,56259],{"class":293},[152,80314,52774],{"class":483},[152,80316,2357],{"class":293},[152,80318,52829],{"class":476},[152,80320,2965],{"class":483},[152,80322,80323],{"class":281,"line":1289},[152,80324,3838],{"class":483},[152,80326,80327],{"class":281,"line":1301},[152,80328,307],{"emptyLinePlaceholder":306},[152,80330,80331,80334],{"class":281,"line":1310},[152,80332,80333],{"class":285},"    .filter",[152,80335,17187],{"class":483},[152,80337,80338,80340,80342,80344],{"class":281,"line":1320},[152,80339,56346],{"class":293},[152,80341,52774],{"class":483},[152,80343,52814],{"class":293},[152,80345,2965],{"class":483},[152,80347,80348,80350,80352,80354,80356],{"class":281,"line":1327},[152,80349,56108],{"class":293},[152,80351,52774],{"class":483},[152,80353,79911],{"class":293},[152,80355,52829],{"class":476},[152,80357,2965],{"class":483},[152,80359,80360,80362,80364,80366,80368],{"class":281,"line":11528},[152,80361,56043],{"class":293},[152,80363,52774],{"class":483},[152,80365,2000],{"class":293},[152,80367,52893],{"class":293},[152,80369,2965],{"class":483},[152,80371,80372,80374,80376,80378,80380,80382],{"class":281,"line":11536},[152,80373,56032],{"class":293},[152,80375,52774],{"class":483},[152,80377,2464],{"class":293},[152,80379,52829],{"class":476},[152,80381,80002],{"class":293},[152,80383,80384],{"class":476},"px\n",[152,80386,80387],{"class":281,"line":11541},[152,80388,3838],{"class":483},[152,80390,80391],{"class":281,"line":18219},[152,80392,307],{"emptyLinePlaceholder":306},[152,80394,80395,80397,80399],{"class":281,"line":18225},[152,80396,80333],{"class":285},[152,80398,3070],{"class":52637},[152,80400,17187],{"class":483},[152,80402,80403,80405,80407,80409,80411,80413,80415],{"class":281,"line":18248},[152,80404,56032],{"class":293},[152,80406,52774],{"class":483},[152,80408,2254],{"class":293},[152,80410,52829],{"class":476},[152,80412,10582],{"class":293},[152,80414,52829],{"class":476},[152,80416,2965],{"class":483},[152,80418,80419,80421,80423,80425],{"class":281,"line":18254},[152,80420,63058],{"class":293},[152,80422,52774],{"class":483},[152,80424,63155],{"class":293},[152,80426,2965],{"class":483},[152,80428,80429,80431,80433,80435],{"class":281,"line":18277},[152,80430,58753],{"class":293},[152,80432,52774],{"class":483},[152,80434,80237],{"class":293},[152,80436,2965],{"class":483},[152,80438,80439,80441,80443,80445],{"class":281,"line":18291},[152,80440,65307],{"class":293},[152,80442,52774],{"class":483},[152,80444,56074],{"class":293},[152,80446,2965],{"class":483},[152,80448,80449,80451,80453,80455,80457],{"class":281,"line":18311},[152,80450,63087],{"class":293},[152,80452,52774],{"class":483},[152,80454,2508],{"class":293},[152,80456,52829],{"class":476},[152,80458,2965],{"class":483},[152,80460,80461],{"class":281,"line":18317},[152,80462,3838],{"class":483},[152,80464,80465],{"class":281,"line":18328},[152,80466,307],{"emptyLinePlaceholder":306},[152,80468,80469,80471,80473,80475],{"class":281,"line":18351},[152,80470,80333],{"class":285},[152,80472,3070],{"class":52637},[152,80474,63237],{"class":285},[152,80476,17187],{"class":483},[152,80478,80479,80481,80483,80486],{"class":281,"line":18373},[152,80480,56221],{"class":293},[152,80482,52774],{"class":483},[152,80484,80485],{"class":293},"#05943c",[152,80487,2965],{"class":483},[152,80489,80490,80492,80494,80496],{"class":281,"line":18378},[152,80491,58753],{"class":293},[152,80493,52774],{"class":483},[152,80495,62179],{"class":293},[152,80497,2965],{"class":483},[152,80499,80500],{"class":281,"line":18384},[152,80501,3838],{"class":483},[152,80503,80504,80506,80508],{"class":281,"line":18398},[152,80505,53754],{"class":483},[152,80507,1736],{"class":52637},[152,80509,52644],{"class":483},[152,80511,80512,80514,80516],{"class":281,"line":18411},[152,80513,53122],{"class":483},[152,80515,52671],{"class":52637},[152,80517,52644],{"class":483},[152,80519,80520],{"class":281,"line":18416},[152,80521,307],{"emptyLinePlaceholder":306},[152,80523,80524,80526,80528],{"class":281,"line":18430},[152,80525,844],{"class":483},[152,80527,53137],{"class":52637},[152,80529,52644],{"class":483},[152,80531,80532,80534,80536,80538,80540,80543],{"class":281,"line":18435},[152,80533,53481],{"class":483},[152,80535,52948],{"class":52637},[152,80537,54823],{"class":285},[152,80539,1864],{"class":483},[152,80541,80542],{"class":289},"\"filter\"",[152,80544,52644],{"class":483},[152,80546,80547,80549,80551,80553,80555,80557,80560,80562,80564,80567,80569],{"class":281,"line":18441},[152,80548,52678],{"class":483},[152,80550,69],{"class":52637},[152,80552,62394],{"class":285},[152,80554,1864],{"class":483},[152,80556,62399],{"class":289},[152,80558,80559],{"class":285}," data-index",[152,80561,1864],{"class":483},[152,80563,5321],{"class":289},[152,80565,80566],{"class":483},">0-100元\u003C\u002F",[152,80568,69],{"class":52637},[152,80570,52644],{"class":483},[152,80572,80573,80575,80577,80579,80581,80583,80585,80587,80589,80592,80594],{"class":281,"line":18446},[152,80574,52678],{"class":483},[152,80576,69],{"class":52637},[152,80578,62394],{"class":285},[152,80580,1864],{"class":483},[152,80582,62399],{"class":289},[152,80584,80559],{"class":285},[152,80586,1864],{"class":483},[152,80588,5344],{"class":289},[152,80590,80591],{"class":483},">100-300元\u003C\u002F",[152,80593,69],{"class":52637},[152,80595,52644],{"class":483},[152,80597,80598,80600,80602,80604,80606,80608,80610,80612,80614,80617,80619],{"class":281,"line":18460},[152,80599,52678],{"class":483},[152,80601,69],{"class":52637},[152,80603,62394],{"class":285},[152,80605,1864],{"class":483},[152,80607,62399],{"class":289},[152,80609,80559],{"class":285},[152,80611,1864],{"class":483},[152,80613,5357],{"class":289},[152,80615,80616],{"class":483},">300元以上\u003C\u002F",[152,80618,69],{"class":52637},[152,80620,52644],{"class":483},[152,80622,80623,80625,80627,80629,80631,80633,80636,80638],{"class":281,"line":18465},[152,80624,52678],{"class":483},[152,80626,69],{"class":52637},[152,80628,62394],{"class":285},[152,80630,1864],{"class":483},[152,80632,62399],{"class":289},[152,80634,80635],{"class":483},">全部区间\u003C\u002F",[152,80637,69],{"class":52637},[152,80639,52644],{"class":483},[152,80641,80642,80644,80646],{"class":281,"line":18470},[152,80643,53754],{"class":483},[152,80645,52948],{"class":52637},[152,80647,52644],{"class":483},[152,80649,80650,80652,80654,80656,80658,80660],{"class":281,"line":18484},[152,80651,53481],{"class":483},[152,80653,52948],{"class":52637},[152,80655,54823],{"class":285},[152,80657,1864],{"class":483},[152,80659,63945],{"class":289},[152,80661,52644],{"class":483},[152,80663,80664],{"class":281,"line":18496},[152,80665,80666],{"class":866},"    \u003C!-- \u003Cdiv class=\"item\">\n",[152,80668,80669],{"class":281,"line":18501},[152,80670,80671],{"class":866},"      \u003Cimg src=\"\" alt=\"\">\n",[152,80673,80674],{"class":281,"line":18514},[152,80675,80676],{"class":866},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[152,80678,80679],{"class":281,"line":18519},[152,80680,80681],{"class":866},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[152,80683,80684],{"class":281,"line":18524},[152,80685,80686],{"class":866},"    \u003C\u002Fdiv> -->\n",[152,80688,80689,80691,80693],{"class":281,"line":18529},[152,80690,53754],{"class":483},[152,80692,52948],{"class":52637},[152,80694,52644],{"class":483},[152,80696,80697,80699,80701],{"class":281,"line":18542},[152,80698,53481],{"class":483},[152,80700,53150],{"class":52637},[152,80702,52644],{"class":483},[152,80704,80705],{"class":281,"line":18547},[152,80706,80707],{"class":866},"    \u002F\u002F 2. 初始化数据\n",[152,80709,80710,80712,80715,80717],{"class":281,"line":33970},[152,80711,12837],{"class":476},[152,80713,80714],{"class":293}," goodsList",[152,80716,15180],{"class":476},[152,80718,56784],{"class":483},[152,80720,80721],{"class":281,"line":33976},[152,80722,80723],{"class":483},"      {\n",[152,80725,80726,80729,80732],{"class":281,"line":33982},[152,80727,80728],{"class":483},"        id: ",[152,80730,80731],{"class":289},"'4001172'",[152,80733,32803],{"class":483},[152,80735,80736,80739,80742],{"class":281,"line":33988},[152,80737,80738],{"class":483},"        name: ",[152,80740,80741],{"class":289},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[152,80743,32803],{"class":483},[152,80745,80746,80749,80752],{"class":281,"line":33994},[152,80747,80748],{"class":483},"        price: ",[152,80750,80751],{"class":289},"'289.00'",[152,80753,32803],{"class":483},[152,80755,80756,80759,80762],{"class":281,"line":34005},[152,80757,80758],{"class":483},"        picture: ",[152,80760,80761],{"class":289},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[152,80763,32803],{"class":483},[152,80765,80766],{"class":281,"line":34011},[152,80767,79229],{"class":483},[152,80769,80770],{"class":281,"line":34031},[152,80771,80723],{"class":483},[152,80773,80774,80776,80779],{"class":281,"line":34037},[152,80775,80728],{"class":483},[152,80777,80778],{"class":289},"'4001594'",[152,80780,32803],{"class":483},[152,80782,80783,80785,80788],{"class":281,"line":34048},[152,80784,80738],{"class":483},[152,80786,80787],{"class":289},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[152,80789,32803],{"class":483},[152,80791,80792,80794,80797],{"class":281,"line":34054},[152,80793,80748],{"class":483},[152,80795,80796],{"class":289},"'288.00'",[152,80798,32803],{"class":483},[152,80800,80801,80803,80806],{"class":281,"line":34060},[152,80802,80758],{"class":483},[152,80804,80805],{"class":289},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[152,80807,32803],{"class":483},[152,80809,80810],{"class":281,"line":34066},[152,80811,79229],{"class":483},[152,80813,80814],{"class":281,"line":34072},[152,80815,80723],{"class":483},[152,80817,80818,80820,80823],{"class":281,"line":34078},[152,80819,80728],{"class":483},[152,80821,80822],{"class":289},"'4001009'",[152,80824,32803],{"class":483},[152,80826,80827,80829,80832],{"class":281,"line":34084},[152,80828,80738],{"class":483},[152,80830,80831],{"class":289},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[152,80833,32803],{"class":483},[152,80835,80836,80838,80841],{"class":281,"line":34090},[152,80837,80748],{"class":483},[152,80839,80840],{"class":289},"'109.00'",[152,80842,32803],{"class":483},[152,80844,80845,80847,80850],{"class":281,"line":34110},[152,80846,80758],{"class":483},[152,80848,80849],{"class":289},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[152,80851,32803],{"class":483},[152,80853,80854],{"class":281,"line":34116},[152,80855,79229],{"class":483},[152,80857,80858],{"class":281,"line":34132},[152,80859,80723],{"class":483},[152,80861,80862,80864,80867],{"class":281,"line":34138},[152,80863,80728],{"class":483},[152,80865,80866],{"class":289},"'4001874'",[152,80868,32803],{"class":483},[152,80870,80871,80873,80876],{"class":281,"line":34152},[152,80872,80738],{"class":483},[152,80874,80875],{"class":289},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[152,80877,32803],{"class":483},[152,80879,80880,80882,80885],{"class":281,"line":34158},[152,80881,80748],{"class":483},[152,80883,80884],{"class":289},"'488.00'",[152,80886,32803],{"class":483},[152,80888,80889,80891,80894],{"class":281,"line":34173},[152,80890,80758],{"class":483},[152,80892,80893],{"class":289},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[152,80895,32803],{"class":483},[152,80897,80898],{"class":281,"line":34179},[152,80899,79229],{"class":483},[152,80901,80902],{"class":281,"line":34188},[152,80903,80723],{"class":483},[152,80905,80906,80908,80911],{"class":281,"line":34194},[152,80907,80728],{"class":483},[152,80909,80910],{"class":289},"'4001649'",[152,80912,32803],{"class":483},[152,80914,80915,80917,80920],{"class":281,"line":34203},[152,80916,80738],{"class":483},[152,80918,80919],{"class":289},"'大师监制龙泉青瓷茶叶罐'",[152,80921,32803],{"class":483},[152,80923,80924,80926,80929],{"class":281,"line":34209},[152,80925,80748],{"class":483},[152,80927,80928],{"class":289},"'139.00'",[152,80930,32803],{"class":483},[152,80932,80933,80935,80938],{"class":281,"line":34215},[152,80934,80758],{"class":483},[152,80936,80937],{"class":289},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[152,80939,32803],{"class":483},[152,80941,80942],{"class":281,"line":34224},[152,80943,79229],{"class":483},[152,80945,80946],{"class":281,"line":34230},[152,80947,80723],{"class":483},[152,80949,80950,80952,80955],{"class":281,"line":34241},[152,80951,80728],{"class":483},[152,80953,80954],{"class":289},"'3997185'",[152,80956,32803],{"class":483},[152,80958,80959,80961,80964],{"class":281,"line":34247},[152,80960,80738],{"class":483},[152,80962,80963],{"class":289},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[152,80965,32803],{"class":483},[152,80967,80968,80970,80973],{"class":281,"line":34266},[152,80969,80748],{"class":483},[152,80971,80972],{"class":289},"'108.00'",[152,80974,32803],{"class":483},[152,80976,80977,80979,80982],{"class":281,"line":34272},[152,80978,80758],{"class":483},[152,80980,80981],{"class":289},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[152,80983,32803],{"class":483},[152,80985,80986],{"class":281,"line":34283},[152,80987,79229],{"class":483},[152,80989,80990],{"class":281,"line":34289},[152,80991,80723],{"class":483},[152,80993,80994,80996,80999],{"class":281,"line":34309},[152,80995,80728],{"class":483},[152,80997,80998],{"class":289},"'3997403'",[152,81000,32803],{"class":483},[152,81002,81003,81005,81008],{"class":281,"line":34325},[152,81004,80738],{"class":483},[152,81006,81007],{"class":289},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[152,81009,32803],{"class":483},[152,81011,81012,81014,81017],{"class":281,"line":34331},[152,81013,80748],{"class":483},[152,81015,81016],{"class":289},"'100.00'",[152,81018,32803],{"class":483},[152,81020,81021,81023,81026],{"class":281,"line":34345},[152,81022,80758],{"class":483},[152,81024,81025],{"class":289},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[152,81027,32803],{"class":483},[152,81029,81030],{"class":281,"line":34351},[152,81031,79229],{"class":483},[152,81033,81034],{"class":281,"line":34357},[152,81035,80723],{"class":483},[152,81037,81038,81040,81043],{"class":281,"line":34368},[152,81039,80728],{"class":483},[152,81041,81042],{"class":289},"'3998274'",[152,81044,32803],{"class":483},[152,81046,81047,81049,81052],{"class":281,"line":34374},[152,81048,80738],{"class":483},[152,81050,81051],{"class":289},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[152,81053,32803],{"class":483},[152,81055,81056,81058,81060],{"class":281,"line":34380},[152,81057,80748],{"class":483},[152,81059,80928],{"class":289},[152,81061,32803],{"class":483},[152,81063,81064,81066,81069],{"class":281,"line":34390},[152,81065,80758],{"class":483},[152,81067,81068],{"class":289},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[152,81070,32803],{"class":483},[152,81072,81073],{"class":281,"line":34396},[152,81074,79229],{"class":483},[152,81076,81077],{"class":281,"line":34407},[152,81078,54446],{"class":483},[152,81080,81081],{"class":281,"line":34413},[152,81082,307],{"emptyLinePlaceholder":306},[152,81084,81085],{"class":281,"line":34423},[152,81086,81087],{"class":866},"    \u002F\u002F 1.渲染函数\n",[152,81089,81090,81092,81094,81096,81098],{"class":281,"line":34428},[152,81091,71421],{"class":476},[152,81093,71424],{"class":285},[152,81095,1819],{"class":483},[152,81097,5522],{"class":6858},[152,81099,14058],{"class":483},[152,81101,81102],{"class":281,"line":34434},[152,81103,81104],{"class":866},"      \u002F\u002F 声明空字符串\n",[152,81106,81107,81110,81113,81115],{"class":281,"line":34483},[152,81108,81109],{"class":476},"      let",[152,81111,81112],{"class":483}," str ",[152,81114,1864],{"class":476},[152,81116,71441],{"class":289},[152,81118,81119],{"class":281,"line":34530},[152,81120,71446],{"class":866},[152,81122,81123,81125,81128,81130,81133,81136],{"class":281,"line":34535},[152,81124,59344],{"class":483},[152,81126,81127],{"class":285},"forEach",[152,81129,1819],{"class":483},[152,81131,81132],{"class":6858},"item",[152,81134,81135],{"class":476}," =>",[152,81137,17187],{"class":483},[152,81139,81140,81142,81145,81148,81150,81153,81155,81158,81161,81163],{"class":281,"line":34541},[152,81141,62607],{"class":476},[152,81143,81144],{"class":483}," { ",[152,81146,81147],{"class":293},"name",[152,81149,14051],{"class":483},[152,81151,81152],{"class":293},"price",[152,81154,14051],{"class":483},[152,81156,81157],{"class":293},"picture",[152,81159,81160],{"class":483}," } ",[152,81162,1864],{"class":476},[152,81164,81165],{"class":483}," item\n",[152,81167,81168,81171,81173],{"class":281,"line":34560},[152,81169,81170],{"class":483},"        str ",[152,81172,11109],{"class":476},[152,81174,71505],{"class":289},[152,81176,81177],{"class":281,"line":34566},[152,81178,81179],{"class":289},"          \u003Cdiv class=\"item\">\n",[152,81181,81182,81185,81187],{"class":281,"line":34586},[152,81183,81184],{"class":289},"            \u003Cimg src=\"${",[152,81186,81157],{"class":483},[152,81188,81189],{"class":289},"}\" alt=\"\">\n",[152,81191,81192,81195,81197],{"class":281,"line":34592},[152,81193,81194],{"class":289},"            \u003Cp class=\"name\">${",[152,81196,81147],{"class":483},[152,81198,81199],{"class":289},"}\u003C\u002Fp>\n",[152,81201,81202,81205,81207],{"class":281,"line":34598},[152,81203,81204],{"class":289},"            \u003Cp class=\"price\">${",[152,81206,81152],{"class":483},[152,81208,81199],{"class":289},[152,81210,81211],{"class":281,"line":34608},[152,81212,81213],{"class":289},"          \u003C\u002Fdiv>\n",[152,81215,81216],{"class":281,"line":34613},[152,81217,81218],{"class":289},"        `\n",[152,81220,81221],{"class":281,"line":34619},[152,81222,66152],{"class":483},[152,81224,81225],{"class":281,"line":34635},[152,81226,81227],{"class":866},"      \u002F\u002F 追加给List\n",[152,81229,81230,81232,81234,81236,81239,81241,81243],{"class":281,"line":34680},[152,81231,57108],{"class":483},[152,81233,55736],{"class":285},[152,81235,1819],{"class":483},[152,81237,81238],{"class":289},"'.list'",[152,81240,75586],{"class":483},[152,81242,1864],{"class":476},[152,81244,75322],{"class":483},[152,81246,81247],{"class":281,"line":34686},[152,81248,3838],{"class":483},[152,81250,81251],{"class":281,"line":34692},[152,81252,81253],{"class":866},"    \u002F\u002F 页面一打开就需要渲染\n",[152,81255,81256,81259],{"class":281,"line":34698},[152,81257,81258],{"class":285},"    render",[152,81260,81261],{"class":483},"(goodsList)\n",[152,81263,81264],{"class":281,"line":34709},[152,81265,81266],{"class":866},"    \u002F\u002F 2.过滤筛选\n",[152,81268,81269,81271,81273,81275,81278,81280,81282,81284,81286,81288,81290,81292],{"class":281,"line":34715},[152,81270,53744],{"class":483},[152,81272,55736],{"class":285},[152,81274,1819],{"class":483},[152,81276,81277],{"class":289},"'.filter'",[152,81279,32163],{"class":483},[152,81281,59150],{"class":285},[152,81283,1819],{"class":483},[152,81285,59155],{"class":289},[152,81287,14051],{"class":483},[152,81289,1891],{"class":6858},[152,81291,81135],{"class":476},[152,81293,17187],{"class":483},[152,81295,81296],{"class":281,"line":34721},[152,81297,81298],{"class":866},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[152,81300,81301,81303,81305,81308,81310,81312,81314,81316],{"class":281,"line":34727},[152,81302,59565],{"class":476},[152,81304,81144],{"class":483},[152,81306,81307],{"class":293},"tagName",[152,81309,14051],{"class":483},[152,81311,32874],{"class":293},[152,81313,81160],{"class":483},[152,81315,1864],{"class":476},[152,81317,81318],{"class":483}," e.target\n",[152,81320,81321],{"class":281,"line":34745},[152,81322,81323],{"class":866},"      \u002F\u002F 判断\n",[152,81325,81326,81328,81330,81332,81334],{"class":281,"line":34759},[152,81327,55817],{"class":476},[152,81329,68371],{"class":483},[152,81331,55823],{"class":476},[152,81333,69593],{"class":289},[152,81335,14058],{"class":483},[152,81337,81338],{"class":281,"line":34768},[152,81339,81340],{"class":866},"        \u002F\u002F console.log(11)\n",[152,81342,81343],{"class":281,"line":34777},[152,81344,81345],{"class":866},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[152,81347,81348],{"class":281,"line":34786},[152,81349,81350],{"class":866},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[152,81352,81353,81355,81357,81359],{"class":281,"line":34795},[152,81354,53167],{"class":476},[152,81356,53170],{"class":483},[152,81358,1864],{"class":476},[152,81360,81361],{"class":483}," goodsList\n",[152,81363,81364,81366,81369,81371,81374],{"class":281,"line":34801},[152,81365,4147],{"class":476},[152,81367,81368],{"class":483}," (dataset.index ",[152,81370,55823],{"class":476},[152,81372,81373],{"class":289}," '1'",[152,81375,14058],{"class":483},[152,81377,81378,81381,81383,81386,81389,81391,81393,81395,81398,81400,81402,81405,81407,81409,81411],{"class":281,"line":34807},[152,81379,81380],{"class":483},"          arr ",[152,81382,1864],{"class":476},[152,81384,81385],{"class":483}," goodsList.",[152,81387,81388],{"class":285},"filter",[152,81390,1819],{"class":483},[152,81392,81132],{"class":6858},[152,81394,81135],{"class":476},[152,81396,81397],{"class":483}," item.price ",[152,81399,3370],{"class":476},[152,81401,5735],{"class":293},[152,81403,81404],{"class":476}," &&",[152,81406,81397],{"class":483},[152,81408,3259],{"class":476},[152,81410,7396],{"class":293},[152,81412,1825],{"class":483},[152,81414,81415,81418,81420,81422,81424,81426,81429],{"class":281,"line":34815},[152,81416,81417],{"class":483},"        } ",[152,81419,3361],{"class":476},[152,81421,3364],{"class":476},[152,81423,81368],{"class":483},[152,81425,55823],{"class":476},[152,81427,81428],{"class":289}," '2'",[152,81430,14058],{"class":483},[152,81432,81433,81435,81437,81439,81441,81443,81445,81447,81449,81451,81453,81455,81457,81459,81462],{"class":281,"line":34820},[152,81434,81380],{"class":483},[152,81436,1864],{"class":476},[152,81438,81385],{"class":483},[152,81440,81388],{"class":285},[152,81442,1819],{"class":483},[152,81444,81132],{"class":6858},[152,81446,81135],{"class":476},[152,81448,81397],{"class":483},[152,81450,3370],{"class":476},[152,81452,7396],{"class":293},[152,81454,81404],{"class":476},[152,81456,81397],{"class":483},[152,81458,3259],{"class":476},[152,81460,81461],{"class":293}," 300",[152,81463,1825],{"class":483},[152,81465,81466,81468,81470,81472,81474,81476,81479],{"class":281,"line":34826},[152,81467,81417],{"class":483},[152,81469,3361],{"class":476},[152,81471,3364],{"class":476},[152,81473,81368],{"class":483},[152,81475,55823],{"class":476},[152,81477,81478],{"class":289}," '3'",[152,81480,14058],{"class":483},[152,81482,81483,81485,81487,81489,81491,81493,81495,81497,81499,81501,81503],{"class":281,"line":34837},[152,81484,81380],{"class":483},[152,81486,1864],{"class":476},[152,81488,81385],{"class":483},[152,81490,81388],{"class":285},[152,81492,1819],{"class":483},[152,81494,81132],{"class":6858},[152,81496,81135],{"class":476},[152,81498,81397],{"class":483},[152,81500,3370],{"class":476},[152,81502,81461],{"class":293},[152,81504,1825],{"class":483},[152,81506,81507],{"class":281,"line":34843},[152,81508,4179],{"class":483},[152,81510,81511],{"class":281,"line":34863},[152,81512,81513],{"class":866},"        \u002F\u002F 渲染函数\n",[152,81515,81516,81518],{"class":281,"line":34869},[152,81517,71745],{"class":285},[152,81519,53749],{"class":483},[152,81521,81522],{"class":281,"line":34875},[152,81523,53735],{"class":483},[152,81525,81526],{"class":281,"line":34881},[152,81527,307],{"emptyLinePlaceholder":306},[152,81529,81530],{"class":281,"line":34898},[152,81531,34798],{"class":483},[152,81533,81534,81536,81538],{"class":281,"line":34904},[152,81535,53754],{"class":483},[152,81537,53150],{"class":52637},[152,81539,52644],{"class":483},[152,81541,81542,81544,81546],{"class":281,"line":34910},[152,81543,53122],{"class":483},[152,81545,53137],{"class":52637},[152,81547,52644],{"class":483},[152,81549,81550],{"class":281,"line":34916},[152,81551,307],{"emptyLinePlaceholder":306},[152,81553,81554,81556,81558],{"class":281,"line":34922},[152,81555,53122],{"class":483},[152,81557,51972],{"class":52637},[152,81559,52644],{"class":483},[1760,81561,81563],{"id":81562},"_410-深入了解对象","4.10 深入了解对象",[14,81565,81567],{"id":81566},"_4101-创建对象","4.10.1 创建对象",[19,81569,81570],{},[401,81571],{"alt":275,"src":81572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,81574,81575],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[14,81577,81579],{"id":81578},"_4102-构造函数","4.10.2 构造函数",[19,81581,81582,81585],{},[694,81583,81584],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,81587,81588,81591],{},[694,81589,81590],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[270,81593,81595],{"className":51970,"code":81594,"language":51972,"meta":275,"style":275},"\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",[277,81596,81597,81605,81610,81631,81644,81656,81668,81672,81677,81704,81709,81736],{"__ignoreMap":275},[152,81598,81599,81601,81603],{"class":281,"line":282},[152,81600,844],{"class":483},[152,81602,53150],{"class":52637},[152,81604,52644],{"class":483},[152,81606,81607],{"class":281,"line":303},[152,81608,81609],{"class":866},"\u002F\u002F例：\n",[152,81611,81612,81614,81617,81619,81621,81623,81625,81627,81629],{"class":281,"line":310},[152,81613,55786],{"class":476},[152,81615,81616],{"class":285}," Pig",[152,81618,1819],{"class":483},[152,81620,81147],{"class":6858},[152,81622,2186],{"class":483},[152,81624,71558],{"class":6858},[152,81626,2186],{"class":483},[152,81628,71575],{"class":6858},[152,81630,14058],{"class":483},[152,81632,81633,81636,81639,81641],{"class":281,"line":324},[152,81634,81635],{"class":293},"    this",[152,81637,81638],{"class":483},".name",[152,81640,1864],{"class":476},[152,81642,81643],{"class":483},"name\n",[152,81645,81646,81648,81651,81653],{"class":281,"line":329},[152,81647,81635],{"class":293},[152,81649,81650],{"class":483},".age",[152,81652,1864],{"class":476},[152,81654,81655],{"class":483},"age\n",[152,81657,81658,81660,81663,81665],{"class":281,"line":343},[152,81659,81635],{"class":293},[152,81661,81662],{"class":483},".gender",[152,81664,1864],{"class":476},[152,81666,81667],{"class":483},"gender    \n",[152,81669,81670],{"class":281,"line":348},[152,81671,3236],{"class":483},[152,81673,81674],{"class":281,"line":362},[152,81675,81676],{"class":866},"\u002F\u002F创建佩奇对象\n",[152,81678,81679,81681,81684,81686,81688,81690,81693,81695,81697,81699,81702],{"class":281,"line":367},[152,81680,8434],{"class":476},[152,81682,81683],{"class":293}," Peppa",[152,81685,13333],{"class":476},[152,81687,81616],{"class":285},[152,81689,1819],{"class":483},[152,81691,81692],{"class":289},"'佩奇'",[152,81694,2186],{"class":483},[152,81696,2152],{"class":293},[152,81698,2186],{"class":483},[152,81700,81701],{"class":289},"'女'",[152,81703,1825],{"class":483},[152,81705,81706],{"class":281,"line":381},[152,81707,81708],{"class":866},"\u002F\u002F创建乔治对象\n",[152,81710,81711,81713,81716,81718,81720,81722,81725,81727,81729,81731,81734],{"class":281,"line":386},[152,81712,8434],{"class":476},[152,81714,81715],{"class":293}," George",[152,81717,13333],{"class":476},[152,81719,81616],{"class":285},[152,81721,1819],{"class":483},[152,81723,81724],{"class":289},"'乔治'",[152,81726,2186],{"class":483},[152,81728,1888],{"class":293},[152,81730,2186],{"class":483},[152,81732,81733],{"class":289},"'男'",[152,81735,1825],{"class":483},[152,81737,81738,81740,81742],{"class":281,"line":932},[152,81739,53122],{"class":483},[152,81741,53150],{"class":52637},[152,81743,52644],{"class":483},[19,81745,81746],{},[401,81747],{"alt":275,"src":81748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,81750,81751],{},[401,81752],{"alt":275,"src":81753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,81755,81756],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,81758,81759],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,81761,81762],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,81764,81765],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,81767,81768],{},"这里用等号是因为：对象.属性=值",[19,81770,81771],{},"①利用对象字面量创建对象",[19,81773,81774],{},"const o={",[19,81776,81777],{},"name:'pink'",[19,81779,81780],{},"} ②利用new Object创建对象",[19,81782,81783],{},"const o=new Object({name:'pink'})",[19,81785,81786],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,81788,81789],{},"构造函数创建对象的执行过程：",[19,81791,81792],{},[401,81793],{"alt":275,"src":81794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[14,81796,81798],{"id":81797},"_4103-实例成员","4.10.3 实例成员",[19,81800,81801],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[416,81803,81804,81807,81810],{},[419,81805,81806],{},"实例对象的属性和方法即为实例成员",[419,81808,81809],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[419,81811,81812],{},"构造函数创建的实例对象彼此独立互不影响",[14,81814,81816],{"id":81815},"_4104-静态成员","4.10.4 静态成员",[19,81818,81819],{},[401,81820],{"alt":275,"src":81821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,81823,81824],{},"静态成员有Date.now() Math.PI Math.random()",[19,81826,81827],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,81829,81830],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,81832,81833],{},"function Pig(name) n {",[19,81835,81836],{},"this.name=name",[19,81838,2752],{},[19,81840,81841],{},"Pig.eyes=2",[19,81843,81844],{},"Pig.sayHai=function () { console.log(this) }",[19,81846,81847],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,81849,81850],{},"console.log(Pig.eyes) \u002F\u002F2",[19,81852,12948],{},[416,81854,81855,81858,81861,81864,81867],{},[419,81856,81857],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[419,81859,81860],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[419,81862,81863],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[419,81865,81866],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[419,81868,81869],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81871,81872],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[14,81874,81876],{"id":81875},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81878,81879],{},"内置构造函数包含：",[19,81881,81882],{},[401,81883],{"alt":275,"src":81884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81886,81887],{},[401,81888],{"alt":275,"src":81889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81891,81892],{},"这些基本数据类型，js对他们进行了包装",[53150,81894,81895],{},"\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",[262,81897,81899],{"id":81898},"_41051-object","4.10.5.1 Object",[19,81901,81902],{},"Object 是内置的构造函数，用于创建普通对象",[19,81904,81905],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[270,81907,81909],{"className":51970,"code":81908,"language":51972,"meta":275,"style":275},"const user=new Object({name:'小明',age:15})\n",[277,81910,81911],{"__ignoreMap":275},[152,81912,81913],{"class":281,"line":282},[152,81914,81908],{"class":483},[19,81916,81917],{},"三个常用的静态方法：",[24524,81919,81921],{"id":81920},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81923,81924],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81926,81927],{},[401,81928],{"alt":275,"src":81929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81931,81932],{},[401,81933],{"alt":275,"src":81934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[270,81936,81938],{"className":54404,"code":81937,"language":54406,"meta":275,"style":275},"\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",[277,81939,81940,81948,81956,81961,81966,81971,81976,81981,81986,81994],{"__ignoreMap":275},[152,81941,81942,81944,81946],{"class":281,"line":282},[152,81943,844],{"class":483},[152,81945,53137],{"class":52637},[152,81947,52644],{"class":483},[152,81949,81950,81952,81954],{"class":281,"line":303},[152,81951,53481],{"class":483},[152,81953,53150],{"class":52637},[152,81955,52644],{"class":483},[152,81957,81958],{"class":281,"line":310},[152,81959,81960],{"class":483},"    const o = { name: 'pink', age: 6 }\n",[152,81962,81963],{"class":281,"line":324},[152,81964,81965],{"class":483},"    \u002F\u002F 获得所有属性名\n",[152,81967,81968],{"class":281,"line":329},[152,81969,81970],{"class":483},"    const arr = Object.keys(o)\n",[152,81972,81973],{"class":281,"line":343},[152,81974,81975],{"class":483},"    console.log(arr)\n",[152,81977,81978],{"class":281,"line":348},[152,81979,81980],{"class":483},"    \u002F\u002F 获得所有属性值\n",[152,81982,81983],{"class":281,"line":362},[152,81984,81985],{"class":483},"    console.log(Object.values(o))\n",[152,81987,81988,81990,81992],{"class":281,"line":367},[152,81989,53754],{"class":483},[152,81991,53150],{"class":52637},[152,81993,52644],{"class":483},[152,81995,81996,81998,82000],{"class":281,"line":381},[152,81997,53122],{"class":483},[152,81999,53137],{"class":52637},[152,82001,52644],{"class":483},[24524,82003,82005],{"id":82004},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82007,82008],{},"Object.assign(oo,o)",[19,82010,82011],{},"后的东西添加给前 是追加",[19,82013,82014],{},[401,82015],{"alt":275,"src":82016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82018,82019],{},[401,82020],{"alt":275,"src":82021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[270,82023,82025],{"className":54404,"code":82024,"language":54406,"meta":275,"style":275},"\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",[277,82026,82027,82035,82043,82047,82051,82055,82059,82063,82067,82072,82077,82082,82087,82092,82100],{"__ignoreMap":275},[152,82028,82029,82031,82033],{"class":281,"line":282},[152,82030,844],{"class":483},[152,82032,53137],{"class":52637},[152,82034,52644],{"class":483},[152,82036,82037,82039,82041],{"class":281,"line":303},[152,82038,53481],{"class":483},[152,82040,53150],{"class":52637},[152,82042,52644],{"class":483},[152,82044,82045],{"class":281,"line":310},[152,82046,81960],{"class":483},[152,82048,82049],{"class":281,"line":324},[152,82050,81965],{"class":483},[152,82052,82053],{"class":281,"line":329},[152,82054,81970],{"class":483},[152,82056,82057],{"class":281,"line":343},[152,82058,81975],{"class":483},[152,82060,82061],{"class":281,"line":348},[152,82062,81980],{"class":483},[152,82064,82065],{"class":281,"line":362},[152,82066,81985],{"class":483},[152,82068,82069],{"class":281,"line":367},[152,82070,82071],{"class":483},"    const oo = {}\n",[152,82073,82074],{"class":281,"line":381},[152,82075,82076],{"class":483},"    Object.assign(oo, o)\n",[152,82078,82079],{"class":281,"line":386},[152,82080,82081],{"class":483},"    console.log(oo)\n",[152,82083,82084],{"class":281,"line":932},[152,82085,82086],{"class":483},"    Object.assign(o, { gender: '女' })\n",[152,82088,82089],{"class":281,"line":942},[152,82090,82091],{"class":483},"    console.log(o)\n",[152,82093,82094,82096,82098],{"class":281,"line":949},[152,82095,53754],{"class":483},[152,82097,53150],{"class":52637},[152,82099,52644],{"class":483},[152,82101,82102,82104,82106],{"class":281,"line":954},[152,82103,53122],{"class":483},[152,82105,53137],{"class":52637},[152,82107,52644],{"class":483},[19,82109,82110],{},[401,82111],{"alt":275,"src":82112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[262,82114,82116],{"id":82115},"_41052-array","4.10.5.2 Array",[19,82118,82119],{},"Array 是内置的构造函数，用于创建数组",[19,82121,82122],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[270,82124,82126],{"className":51970,"code":82125,"language":51972,"meta":275,"style":275},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[277,82127,82128,82133],{"__ignoreMap":275},[152,82129,82130],{"class":281,"line":282},[152,82131,82132],{"class":483},"const arr=new Array(3,5)\n",[152,82134,82135],{"class":281,"line":303},[152,82136,82137],{"class":483},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82139,82140],{},"Array的实例方法，这个方法是实例成员",[19,82142,82143],{},[401,82144],{"alt":275,"src":82145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24524,82147,82149],{"id":82148},"_410521-reduce","4.10.5.2.1 reduce",[19,82151,82152],{},[401,82153],{"alt":275,"src":82154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[270,82156,82158],{"className":54404,"code":82157,"language":54406,"meta":275,"style":275},"\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",[277,82159,82160,82168,82176,82181,82186,82191,82196,82200,82205,82210,82215,82219,82224,82229,82233,82238,82243,82248,82256],{"__ignoreMap":275},[152,82161,82162,82164,82166],{"class":281,"line":282},[152,82163,844],{"class":483},[152,82165,53137],{"class":52637},[152,82167,52644],{"class":483},[152,82169,82170,82172,82174],{"class":281,"line":303},[152,82171,53481],{"class":483},[152,82173,53150],{"class":52637},[152,82175,52644],{"class":483},[152,82177,82178],{"class":281,"line":310},[152,82179,82180],{"class":483},"    const arr = [1, 5, 8]\n",[152,82182,82183],{"class":281,"line":324},[152,82184,82185],{"class":483},"    \u002F\u002F 1.没有初始值\n",[152,82187,82188],{"class":281,"line":329},[152,82189,82190],{"class":483},"    const total = arr.reduce(function (prev, current) {\n",[152,82192,82193],{"class":281,"line":343},[152,82194,82195],{"class":483},"      return prev + current\n",[152,82197,82198],{"class":281,"line":348},[152,82199,34798],{"class":483},[152,82201,82202],{"class":281,"line":362},[152,82203,82204],{"class":483},"    console.log(total)   \u002F\u002F14\n",[152,82206,82207],{"class":281,"line":367},[152,82208,82209],{"class":483},"    \u002F\u002F 2.有初始值\n",[152,82211,82212],{"class":281,"line":381},[152,82213,82214],{"class":483},"    const total1 = arr.reduce(function (prev, current) {\n",[152,82216,82217],{"class":281,"line":386},[152,82218,82195],{"class":483},[152,82220,82221],{"class":281,"line":932},[152,82222,82223],{"class":483},"    }, 10)\n",[152,82225,82226],{"class":281,"line":942},[152,82227,82228],{"class":483},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[152,82230,82231],{"class":281,"line":949},[152,82232,307],{"emptyLinePlaceholder":306},[152,82234,82235],{"class":281,"line":954},[152,82236,82237],{"class":483},"    \u002F\u002F 3.箭头函数写法\n",[152,82239,82240],{"class":281,"line":959},[152,82241,82242],{"class":483},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[152,82244,82245],{"class":281,"line":970},[152,82246,82247],{"class":483},"    console.log(total2)   \u002F\u002F24\n",[152,82249,82250,82252,82254],{"class":281,"line":979},[152,82251,53754],{"class":483},[152,82253,53150],{"class":52637},[152,82255,52644],{"class":483},[152,82257,82258,82260,82262],{"class":281,"line":989},[152,82259,53122],{"class":483},[152,82261,53137],{"class":52637},[152,82263,52644],{"class":483},[19,82265,82266],{},"执行过程：",[416,82268,82269,82272,82275],{},[419,82270,82271],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[419,82273,82274],{},"每一次循环，把返回值给作为下一次循环的上一次值",[419,82276,82277],{},"如果有起始值，则起始值作为上一次值",[270,82279,82281],{"className":54404,"code":82280,"language":54406,"meta":275,"style":275},"\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",[277,82282,82283,82291,82299,82303,82307,82311,82315,82319,82323,82328,82333,82338,82343,82348,82352,82356,82360,82364,82368,82372,82377,82381,82386,82390,82395,82400,82404,82408,82412,82420],{"__ignoreMap":275},[152,82284,82285,82287,82289],{"class":281,"line":282},[152,82286,844],{"class":483},[152,82288,53137],{"class":52637},[152,82290,52644],{"class":483},[152,82292,82293,82295,82297],{"class":281,"line":303},[152,82294,53481],{"class":483},[152,82296,53150],{"class":52637},[152,82298,52644],{"class":483},[152,82300,82301],{"class":281,"line":310},[152,82302,82180],{"class":483},[152,82304,82305],{"class":281,"line":324},[152,82306,82185],{"class":483},[152,82308,82309],{"class":281,"line":329},[152,82310,82190],{"class":483},[152,82312,82313],{"class":281,"line":343},[152,82314,82195],{"class":483},[152,82316,82317],{"class":281,"line":348},[152,82318,34798],{"class":483},[152,82320,82321],{"class":281,"line":362},[152,82322,82204],{"class":483},[152,82324,82325],{"class":281,"line":367},[152,82326,82327],{"class":483},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[152,82329,82330],{"class":281,"line":381},[152,82331,82332],{"class":483},"    \u002F\u002F     1              5                    6\n",[152,82334,82335],{"class":281,"line":386},[152,82336,82337],{"class":483},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[152,82339,82340],{"class":281,"line":932},[152,82341,82342],{"class":483},"    \u002F\u002F     6              8                    14\n",[152,82344,82345],{"class":281,"line":942},[152,82346,82347],{"class":483},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[152,82349,82350],{"class":281,"line":949},[152,82351,82209],{"class":483},[152,82353,82354],{"class":281,"line":954},[152,82355,82214],{"class":483},[152,82357,82358],{"class":281,"line":959},[152,82359,82195],{"class":483},[152,82361,82362],{"class":281,"line":970},[152,82363,82223],{"class":483},[152,82365,82366],{"class":281,"line":979},[152,82367,82228],{"class":483},[152,82369,82370],{"class":281,"line":989},[152,82371,82327],{"class":483},[152,82373,82374],{"class":281,"line":996},[152,82375,82376],{"class":483},"    \u002F\u002F     10             1                     11\n",[152,82378,82379],{"class":281,"line":1001},[152,82380,82337],{"class":483},[152,82382,82383],{"class":281,"line":1006},[152,82384,82385],{"class":483},"    \u002F\u002F     11             5                    16\n",[152,82387,82388],{"class":281,"line":1018},[152,82389,82337],{"class":483},[152,82391,82392],{"class":281,"line":1027},[152,82393,82394],{"class":483},"    \u002F\u002F     16             8                    24\n",[152,82396,82397],{"class":281,"line":1037},[152,82398,82399],{"class":483},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[152,82401,82402],{"class":281,"line":1044},[152,82403,82237],{"class":483},[152,82405,82406],{"class":281,"line":1049},[152,82407,82242],{"class":483},[152,82409,82410],{"class":281,"line":1054},[152,82411,82247],{"class":483},[152,82413,82414,82416,82418],{"class":281,"line":1065},[152,82415,53754],{"class":483},[152,82417,53150],{"class":52637},[152,82419,52644],{"class":483},[152,82421,82422,82424,82426],{"class":281,"line":1074},[152,82423,53122],{"class":483},[152,82425,53137],{"class":52637},[152,82427,52644],{"class":483},[24524,82429,82431],{"id":82430},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82433,82434],{},[401,82435],{"alt":275,"src":82436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[270,82438,82440],{"className":54404,"code":82439,"language":54406,"meta":275,"style":275},"\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",[277,82441,82442,82450,82458,82463,82468,82473,82478,82482,82487,82492,82497,82502,82507,82512,82516,82521,82525,82530,82538],{"__ignoreMap":275},[152,82443,82444,82446,82448],{"class":281,"line":282},[152,82445,844],{"class":483},[152,82447,53137],{"class":52637},[152,82449,52644],{"class":483},[152,82451,82452,82454,82456],{"class":281,"line":303},[152,82453,53481],{"class":483},[152,82455,53150],{"class":52637},[152,82457,52644],{"class":483},[152,82459,82460],{"class":281,"line":310},[152,82461,82462],{"class":483},"    const arr = [\n",[152,82464,82465],{"class":281,"line":324},[152,82466,82467],{"class":483},"      { name: '张三', salary: 10000 },\n",[152,82469,82470],{"class":281,"line":329},[152,82471,82472],{"class":483},"      { name: '李四', salary: 10000 },\n",[152,82474,82475],{"class":281,"line":343},[152,82476,82477],{"class":483},"      { name: '王五', salary: 10000 }\n",[152,82479,82480],{"class":281,"line":348},[152,82481,54446],{"class":483},[152,82483,82484],{"class":281,"line":362},[152,82485,82486],{"class":483},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[152,82488,82489],{"class":281,"line":367},[152,82490,82491],{"class":483},"    \u002F\u002F prev是累计值\n",[152,82493,82494],{"class":281,"line":381},[152,82495,82496],{"class":483},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[152,82498,82499],{"class":281,"line":386},[152,82500,82501],{"class":483},"    console.log(total)\n",[152,82503,82504],{"class":281,"line":932},[152,82505,82506],{"class":483},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[152,82508,82509],{"class":281,"line":942},[152,82510,82511],{"class":483},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[152,82513,82514],{"class":281,"line":949},[152,82515,82506],{"class":483},[152,82517,82518],{"class":281,"line":954},[152,82519,82520],{"class":483},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[152,82522,82523],{"class":281,"line":959},[152,82524,82506],{"class":483},[152,82526,82527],{"class":281,"line":970},[152,82528,82529],{"class":483},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[152,82531,82532,82534,82536],{"class":281,"line":979},[152,82533,53754],{"class":483},[152,82535,53150],{"class":52637},[152,82537,52644],{"class":483},[152,82539,82540,82542,82544],{"class":281,"line":989},[152,82541,53122],{"class":483},[152,82543,53137],{"class":52637},[152,82545,52644],{"class":483},[24524,82547,82549],{"id":82548},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82551,82552],{},[401,82553],{"alt":275,"src":82554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82556,82557],{},[401,82558],{"alt":275,"src":82559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[416,82561,82562],{},[419,82563,82564],{},"find()",[19,82566,82567],{},"循环查找，找到第一个就ok",[19,82569,82570],{},[69,82571,82574],{"href":82572,"rel":82573},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[245],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[270,82576,82578],{"className":51970,"code":82577,"language":51972,"meta":275,"style":275},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[277,82579,82580,82585,82590],{"__ignoreMap":275},[152,82581,82582],{"class":281,"line":282},[152,82583,82584],{"class":483},"const array1 = [5, 12, 8, 130, 44]\n",[152,82586,82587],{"class":281,"line":303},[152,82588,82589],{"class":483},"const found = array1.find((element) => element > 10)\n",[152,82591,82592],{"class":281,"line":310},[152,82593,82594],{"class":483},"console.log(found)  \u002F\u002F12\n",[19,82596,82597,82599,82600,82605,82606,82609,82610,82612,82613,82618,82619,82621,82622,82624,82625,82627,82628],{},[277,82598,82564],{}," 方法是一个",[69,82601,82604],{"href":82602,"rel":82603},"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",[245],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[277,82607,82608],{},"callbackFn"," 函数，直到 ",[277,82611,82608],{}," 返回一个",[69,82614,82617],{"href":82615,"rel":82616},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[245],"真值","。然后 ",[277,82620,82564],{}," 返回该元素并停止迭代数组。如果 ",[277,82623,82608],{}," 从未返回真值，则 ",[277,82626,82564],{}," 返回 ",[277,82629,82630],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[270,82632,82634],{"className":54404,"code":82633,"language":54406,"meta":275,"style":275},"\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",[277,82635,82636,82644,82652,82657,82662,82667,82671,82676,82681,82685,82690,82695,82699,82703,82708,82713,82717,82721,82726,82731,82736,82741,82746,82750,82755,82760,82765,82770,82774,82779,82787],{"__ignoreMap":275},[152,82637,82638,82640,82642],{"class":281,"line":282},[152,82639,844],{"class":483},[152,82641,53137],{"class":52637},[152,82643,52644],{"class":483},[152,82645,82646,82648,82650],{"class":281,"line":303},[152,82647,53481],{"class":483},[152,82649,53150],{"class":52637},[152,82651,52644],{"class":483},[152,82653,82654],{"class":281,"line":310},[152,82655,82656],{"class":483},"    const arr = ['red', 'blue', 'green']\n",[152,82658,82659],{"class":281,"line":324},[152,82660,82661],{"class":483},"    const found = arr.find(item => item === 'pink')\n",[152,82663,82664],{"class":281,"line":329},[152,82665,82666],{"class":483},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[152,82668,82669],{"class":281,"line":343},[152,82670,307],{"emptyLinePlaceholder":306},[152,82672,82673],{"class":281,"line":348},[152,82674,82675],{"class":483},"    \u002F\u002F 使用场景，用于查找数据\n",[152,82677,82678],{"class":281,"line":362},[152,82679,82680],{"class":483},"    const arr1 = [\n",[152,82682,82683],{"class":281,"line":367},[152,82684,80723],{"class":483},[152,82686,82687],{"class":281,"line":381},[152,82688,82689],{"class":483},"        name: '小米',\n",[152,82691,82692],{"class":281,"line":386},[152,82693,82694],{"class":483},"        price: 1999\n",[152,82696,82697],{"class":281,"line":932},[152,82698,79229],{"class":483},[152,82700,82701],{"class":281,"line":942},[152,82702,80723],{"class":483},[152,82704,82705],{"class":281,"line":949},[152,82706,82707],{"class":483},"        name: '华为',\n",[152,82709,82710],{"class":281,"line":954},[152,82711,82712],{"class":483},"        price: 3999\n",[152,82714,82715],{"class":281,"line":959},[152,82716,53735],{"class":483},[152,82718,82719],{"class":281,"line":970},[152,82720,54446],{"class":483},[152,82722,82723],{"class":281,"line":979},[152,82724,82725],{"class":483},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[152,82727,82728],{"class":281,"line":989},[152,82729,82730],{"class":483},"    \u002F\u002F const found1 = arr1.find(item => {\n",[152,82732,82733],{"class":281,"line":996},[152,82734,82735],{"class":483},"    \u002F\u002F   if (item.name === '小米') {\n",[152,82737,82738],{"class":281,"line":1001},[152,82739,82740],{"class":483},"    \u002F\u002F     return item\n",[152,82742,82743],{"class":281,"line":1006},[152,82744,82745],{"class":483},"    \u002F\u002F   }\n",[152,82747,82748],{"class":281,"line":1018},[152,82749,64627],{"class":483},[152,82751,82752],{"class":281,"line":1027},[152,82753,82754],{"class":483},"    \u002F\u002F 另一种写法\n",[152,82756,82757],{"class":281,"line":1037},[152,82758,82759],{"class":483},"    const found1 = arr1.find(item => {\n",[152,82761,82762],{"class":281,"line":1044},[152,82763,82764],{"class":483},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[152,82766,82767],{"class":281,"line":1049},[152,82768,82769],{"class":483},"      return item.name = '小米'\n",[152,82771,82772],{"class":281,"line":1054},[152,82773,34798],{"class":483},[152,82775,82776],{"class":281,"line":1065},[152,82777,82778],{"class":483},"    console.log(found1)\n",[152,82780,82781,82783,82785],{"class":281,"line":1074},[152,82782,53754],{"class":483},[152,82784,53150],{"class":52637},[152,82786,52644],{"class":483},[152,82788,82789,82791,82793],{"class":281,"line":1084},[152,82790,53122],{"class":483},[152,82792,53137],{"class":52637},[152,82794,52644],{"class":483},[19,82796,82797],{},[401,82798],{"alt":275,"src":82799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,82801,82802],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[416,82804,82805],{"start":303},[419,82806,82807],{},"every()返回的是布尔值",[19,82809,82810],{},[69,82811,82814],{"href":82812,"rel":82813},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[245],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,82816,82817],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,82819,82820],{},"some是只有有一个就没问题",[19,82822,82823],{},"every是必须全是才行",[270,82825,82829],{"className":82826,"code":82827,"language":82828,"meta":275,"style":275},"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",[277,82830,82831,82847,82861,82865,82874],{"__ignoreMap":275},[152,82832,82833,82835,82838,82840,82842,82845],{"class":281,"line":282},[152,82834,55786],{"class":476},[152,82836,82837],{"class":483}," isBigEnough(element, ",[152,82839,75395],{"class":476},[152,82841,14051],{"class":483},[152,82843,82844],{"class":476},"array",[152,82846,14058],{"class":483},[152,82848,82849,82852,82855,82857,82859],{"class":281,"line":303},[152,82850,82851],{"class":476},"  return",[152,82853,82854],{"class":483}," element ",[152,82856,3370],{"class":476},[152,82858,3689],{"class":293},[152,82860,2965],{"class":483},[152,82862,82863],{"class":281,"line":310},[152,82864,3236],{"class":483},[152,82866,82867,82870,82872],{"class":281,"line":324},[152,82868,82869],{"class":483},"[12, 5, 8, 130, 44].every(isBigEnough); ",[152,82871,34666],{"class":476},[152,82873,55853],{"class":483},[152,82875,82876,82879,82881],{"class":281,"line":329},[152,82877,82878],{"class":483},"[12, 54, 18, 130, 44].every(isBigEnough); ",[152,82880,34666],{"class":476},[152,82882,59277],{"class":483},[270,82884,82886],{"className":54404,"code":82885,"language":54406,"meta":275,"style":275},"\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",[277,82887,82888,82896,82904,82909,82913,82918,82923,82931],{"__ignoreMap":275},[152,82889,82890,82892,82894],{"class":281,"line":282},[152,82891,844],{"class":483},[152,82893,53137],{"class":52637},[152,82895,52644],{"class":483},[152,82897,82898,82900,82902],{"class":281,"line":303},[152,82899,53481],{"class":483},[152,82901,53150],{"class":52637},[152,82903,52644],{"class":483},[152,82905,82906],{"class":281,"line":310},[152,82907,82908],{"class":483},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[152,82910,82911],{"class":281,"line":324},[152,82912,79659],{"class":483},[152,82914,82915],{"class":281,"line":329},[152,82916,82917],{"class":483},"    const flag = arr.every(item => item >= 10)\n",[152,82919,82920],{"class":281,"line":343},[152,82921,82922],{"class":483},"    console.log(flag)    \u002F\u002Ftrue\n",[152,82924,82925,82927,82929],{"class":281,"line":348},[152,82926,53754],{"class":483},[152,82928,53150],{"class":52637},[152,82930,52644],{"class":483},[152,82932,82933,82935,82937],{"class":281,"line":362},[152,82934,53122],{"class":483},[152,82936,53137],{"class":52637},[152,82938,52644],{"class":483},[270,82940,82942],{"className":54404,"code":82941,"language":54406,"meta":275,"style":275},"\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",[277,82943,82944,82952,82960,82964,82969,82974,82979,82987],{"__ignoreMap":275},[152,82945,82946,82948,82950],{"class":281,"line":282},[152,82947,844],{"class":483},[152,82949,53137],{"class":52637},[152,82951,52644],{"class":483},[152,82953,82954,82956,82958],{"class":281,"line":303},[152,82955,53481],{"class":483},[152,82957,53150],{"class":52637},[152,82959,52644],{"class":483},[152,82961,82962],{"class":281,"line":310},[152,82963,82908],{"class":483},[152,82965,82966],{"class":281,"line":324},[152,82967,82968],{"class":483},"    const arr = [10, 0, 5]\n",[152,82970,82971],{"class":281,"line":329},[152,82972,82973],{"class":483},"    const flag = arr.some(item => item >= 10)\n",[152,82975,82976],{"class":281,"line":343},[152,82977,82978],{"class":483},"    console.log(flag)   \u002F\u002Ftrue\n",[152,82980,82981,82983,82985],{"class":281,"line":348},[152,82982,53754],{"class":483},[152,82984,53150],{"class":52637},[152,82986,52644],{"class":483},[152,82988,82989,82991,82993],{"class":281,"line":362},[152,82990,53122],{"class":483},[152,82992,53137],{"class":52637},[152,82994,52644],{"class":483},[24524,82996,82998],{"id":82997},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83000,83001],{},[401,83002],{"alt":275,"src":83003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[270,83005,83007],{"className":51970,"code":83006,"language":51972,"meta":275,"style":275},"\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",[277,83008,83009,83019,83033,83037,83045,83059,83079,83091,83099,83106,83118,83130,83142,83154,83164,83174,83178,83186,83194,83198,83206,83218,83226,83248,83253,83258,83291,83299,83307,83311],{"__ignoreMap":275},[152,83010,83011,83013,83015,83017],{"class":281,"line":282},[152,83012,52634],{"class":483},[152,83014,52638],{"class":52637},[152,83016,52641],{"class":285},[152,83018,52644],{"class":483},[152,83020,83021,83023,83025,83027,83029,83031],{"class":281,"line":303},[152,83022,844],{"class":483},[152,83024,51972],{"class":52637},[152,83026,52653],{"class":285},[152,83028,1864],{"class":483},[152,83030,52658],{"class":289},[152,83032,52644],{"class":483},[152,83034,83035],{"class":281,"line":310},[152,83036,307],{"emptyLinePlaceholder":306},[152,83038,83039,83041,83043],{"class":281,"line":324},[152,83040,844],{"class":483},[152,83042,52671],{"class":52637},[152,83044,52644],{"class":483},[152,83046,83047,83049,83051,83053,83055,83057],{"class":281,"line":329},[152,83048,53481],{"class":483},[152,83050,52681],{"class":52637},[152,83052,52684],{"class":285},[152,83054,1864],{"class":483},[152,83056,52689],{"class":289},[152,83058,52644],{"class":483},[152,83060,83061,83063,83065,83067,83069,83071,83073,83075,83077],{"class":281,"line":343},[152,83062,53481],{"class":483},[152,83064,52681],{"class":52637},[152,83066,16535],{"class":285},[152,83068,1864],{"class":483},[152,83070,52728],{"class":289},[152,83072,52708],{"class":285},[152,83074,1864],{"class":483},[152,83076,52735],{"class":289},[152,83078,52644],{"class":483},[152,83080,83081,83083,83085,83087,83089],{"class":281,"line":348},[152,83082,53481],{"class":483},[152,83084,52744],{"class":52637},[152,83086,52747],{"class":483},[152,83088,52744],{"class":52637},[152,83090,52644],{"class":483},[152,83092,83093,83095,83097],{"class":281,"line":362},[152,83094,53481],{"class":483},[152,83096,1736],{"class":52637},[152,83098,52644],{"class":483},[152,83100,83101,83104],{"class":281,"line":367},[152,83102,83103],{"class":52637},"    div",[152,83105,17187],{"class":483},[152,83107,83108,83110,83112,83114,83116],{"class":281,"line":381},[152,83109,56108],{"class":293},[152,83111,52774],{"class":483},[152,83113,3382],{"class":293},[152,83115,52829],{"class":476},[152,83117,2965],{"class":483},[152,83119,83120,83122,83124,83126,83128],{"class":281,"line":386},[152,83121,56122],{"class":293},[152,83123,52774],{"class":483},[152,83125,2209],{"class":293},[152,83127,52829],{"class":476},[152,83129,2965],{"class":483},[152,83131,83132,83134,83136,83138,83140],{"class":281,"line":932},[152,83133,58696],{"class":293},[152,83135,52774],{"class":483},[152,83137,2209],{"class":293},[152,83139,52829],{"class":476},[152,83141,2965],{"class":483},[152,83143,83144,83146,83148,83150,83152],{"class":281,"line":942},[152,83145,66470],{"class":293},[152,83147,52774],{"class":483},[152,83149,2306],{"class":293},[152,83151,52829],{"class":476},[152,83153,2965],{"class":483},[152,83155,83156,83158,83160,83162],{"class":281,"line":949},[152,83157,58623],{"class":293},[152,83159,52774],{"class":483},[152,83161,52929],{"class":293},[152,83163,2965],{"class":483},[152,83165,83166,83168,83170,83172],{"class":281,"line":954},[152,83167,56221],{"class":293},[152,83169,52774],{"class":483},[152,83171,52982],{"class":293},[152,83173,2965],{"class":483},[152,83175,83176],{"class":281,"line":959},[152,83177,3838],{"class":483},[152,83179,83180,83182,83184],{"class":281,"line":970},[152,83181,53754],{"class":483},[152,83183,1736],{"class":52637},[152,83185,52644],{"class":483},[152,83187,83188,83190,83192],{"class":281,"line":979},[152,83189,53122],{"class":483},[152,83191,52671],{"class":52637},[152,83193,52644],{"class":483},[152,83195,83196],{"class":281,"line":989},[152,83197,307],{"emptyLinePlaceholder":306},[152,83199,83200,83202,83204],{"class":281,"line":996},[152,83201,844],{"class":483},[152,83203,53137],{"class":52637},[152,83205,52644],{"class":483},[152,83207,83208,83210,83212,83214,83216],{"class":281,"line":1001},[152,83209,53481],{"class":483},[152,83211,52948],{"class":52637},[152,83213,56651],{"class":483},[152,83215,52948],{"class":52637},[152,83217,52644],{"class":483},[152,83219,83220,83222,83224],{"class":281,"line":1006},[152,83221,53481],{"class":483},[152,83223,53150],{"class":52637},[152,83225,52644],{"class":483},[152,83227,83228,83230,83233,83235,83238,83241,83243,83246],{"class":281,"line":1018},[152,83229,12837],{"class":476},[152,83231,83232],{"class":293}," spec",[152,83234,15180],{"class":476},[152,83236,83237],{"class":483}," { size: ",[152,83239,83240],{"class":289},"'40cm*40cm'",[152,83242,56801],{"class":483},[152,83244,83245],{"class":289},"'黑色'",[152,83247,56941],{"class":483},[152,83249,83250],{"class":281,"line":1027},[152,83251,83252],{"class":866},"    \u002F\u002F const arr = Object.values(spec)\n",[152,83254,83255],{"class":281,"line":1037},[152,83256,83257],{"class":866},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[152,83259,83260,83262,83264,83266,83269,83271,83273,83276,83279,83282,83284,83286,83289],{"class":281,"line":1044},[152,83261,53744],{"class":483},[152,83263,55736],{"class":285},[152,83265,1819],{"class":483},[152,83267,83268],{"class":289},"'div'",[152,83270,75586],{"class":483},[152,83272,1864],{"class":476},[152,83274,83275],{"class":483}," Object.",[152,83277,83278],{"class":285},"values",[152,83280,83281],{"class":483},"(spec).",[152,83283,75560],{"class":285},[152,83285,1819],{"class":483},[152,83287,83288],{"class":289},"'\u002F'",[152,83290,1825],{"class":483},[152,83292,83293,83295,83297],{"class":281,"line":1049},[152,83294,53754],{"class":483},[152,83296,53150],{"class":52637},[152,83298,52644],{"class":483},[152,83300,83301,83303,83305],{"class":281,"line":1054},[152,83302,53122],{"class":483},[152,83304,53137],{"class":52637},[152,83306,52644],{"class":483},[152,83308,83309],{"class":281,"line":1065},[152,83310,307],{"emptyLinePlaceholder":306},[152,83312,83313,83315,83317],{"class":281,"line":1074},[152,83314,53122],{"class":483},[152,83316,51972],{"class":52637},[152,83318,52644],{"class":483},[19,83320,83321],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24524,83323,83325],{"id":83324},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83327,83328],{},"静态方法，将伪数组转换为真数组",[19,83330,83331],{},[401,83332],{"alt":275,"src":83333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[270,83335,83337],{"className":54404,"code":83336,"language":54406,"meta":275,"style":275},"\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",[277,83338,83339,83347,83355,83367,83379,83391,83399,83407,83412,83417,83422,83427,83435],{"__ignoreMap":275},[152,83340,83341,83343,83345],{"class":281,"line":282},[152,83342,844],{"class":483},[152,83344,53137],{"class":52637},[152,83346,52644],{"class":483},[152,83348,83349,83351,83353],{"class":281,"line":303},[152,83350,53481],{"class":483},[152,83352,698],{"class":52637},[152,83354,52644],{"class":483},[152,83356,83357,83359,83361,83363,83365],{"class":281,"line":310},[152,83358,52678],{"class":483},[152,83360,419],{"class":52637},[152,83362,56651],{"class":483},[152,83364,419],{"class":52637},[152,83366,52644],{"class":483},[152,83368,83369,83371,83373,83375,83377],{"class":281,"line":324},[152,83370,52678],{"class":483},[152,83372,419],{"class":52637},[152,83374,56651],{"class":483},[152,83376,419],{"class":52637},[152,83378,52644],{"class":483},[152,83380,83381,83383,83385,83387,83389],{"class":281,"line":329},[152,83382,52678],{"class":483},[152,83384,419],{"class":52637},[152,83386,56651],{"class":483},[152,83388,419],{"class":52637},[152,83390,52644],{"class":483},[152,83392,83393,83395,83397],{"class":281,"line":343},[152,83394,53754],{"class":483},[152,83396,698],{"class":52637},[152,83398,52644],{"class":483},[152,83400,83401,83403,83405],{"class":281,"line":348},[152,83402,53481],{"class":483},[152,83404,53150],{"class":52637},[152,83406,52644],{"class":483},[152,83408,83409],{"class":281,"line":362},[152,83410,83411],{"class":483},"    const lis = document.querySelectorAll('li')\n",[152,83413,83414],{"class":281,"line":367},[152,83415,83416],{"class":483},"    const liss = Array.from(lis)\n",[152,83418,83419],{"class":281,"line":381},[152,83420,83421],{"class":483},"    liss.pop()\n",[152,83423,83424],{"class":281,"line":386},[152,83425,83426],{"class":483},"    console.log(liss)\n",[152,83428,83429,83431,83433],{"class":281,"line":932},[152,83430,53754],{"class":483},[152,83432,53150],{"class":52637},[152,83434,52644],{"class":483},[152,83436,83437,83439,83441],{"class":281,"line":942},[152,83438,53122],{"class":483},[152,83440,53137],{"class":52637},[152,83442,52644],{"class":483},[19,83444,83445],{},[401,83446],{"alt":275,"src":83447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[262,83449,83451],{"id":83450},"_41053-string","4.10.5.3 String",[19,83453,83454],{},[401,83455],{"alt":275,"src":83456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24524,83458,83460],{"id":83459},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[270,83462,83464],{"className":54404,"code":83463,"language":54406,"meta":275,"style":275},"\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",[277,83465,83466,83474,83482,83487,83492,83497,83501,83506,83511,83516,83524],{"__ignoreMap":275},[152,83467,83468,83470,83472],{"class":281,"line":282},[152,83469,844],{"class":483},[152,83471,53137],{"class":52637},[152,83473,52644],{"class":483},[152,83475,83476,83478,83480],{"class":281,"line":303},[152,83477,53481],{"class":483},[152,83479,53150],{"class":52637},[152,83481,52644],{"class":483},[152,83483,83484],{"class":281,"line":310},[152,83485,83486],{"class":483},"    \u002F\u002F 把字符串转化为数组\n",[152,83488,83489],{"class":281,"line":324},[152,83490,83491],{"class":483},"    const str = 'pink,red'\n",[152,83493,83494],{"class":281,"line":329},[152,83495,83496],{"class":483},"    const arr = str.split(',')\n",[152,83498,83499],{"class":281,"line":343},[152,83500,81975],{"class":483},[152,83502,83503],{"class":281,"line":348},[152,83504,83505],{"class":483},"    const str1 = '2025-8-25'\n",[152,83507,83508],{"class":281,"line":362},[152,83509,83510],{"class":483},"    const arr1 = str1.split('-')\n",[152,83512,83513],{"class":281,"line":367},[152,83514,83515],{"class":483},"    console.log(arr1)\n",[152,83517,83518,83520,83522],{"class":281,"line":381},[152,83519,53754],{"class":483},[152,83521,53150],{"class":52637},[152,83523,52644],{"class":483},[152,83525,83526,83528,83530],{"class":281,"line":386},[152,83527,53122],{"class":483},[152,83529,53137],{"class":52637},[152,83531,52644],{"class":483},[24524,83533,83535],{"id":83534},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83537,6823],{},[19,83539,83540],{},"substring(indexStart)",[19,83542,83543],{},"substring(indexStart, indexEnd)",[698,83545,83546,83557,83569,83579],{},[419,83547,83548,83549,83552,83553,83556],{},"如果省略了 ",[277,83550,83551],{},"indexEnd","，则 ",[277,83554,83555],{},"substring()"," 提取字符直到字符串的末尾",[419,83558,83559,83560,83563,83564,83552,83566,83568],{},"如果 ",[277,83561,83562],{},"indexStart"," 等于 ",[277,83565,83551],{},[277,83567,83555],{}," 返回一个空字符串",[419,83570,83559,83571,83573,83574,83552,83576,83578],{},[277,83572,83562],{}," 大于 ",[277,83575,83551],{},[277,83577,83555],{}," 的效果就像交换了这两个参数一样",[419,83580,83581],{},"结束的索引号不包含想要截取的部分",[270,83583,83585],{"className":82826,"code":83584,"language":82828,"meta":275,"style":275},"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",[277,83586,83587,83599,83603,83637,83667,83671,83702,83706,83733,83763,83793,83797,83828],{"__ignoreMap":275},[152,83588,83589,83592,83594,83597],{"class":281,"line":282},[152,83590,83591],{"class":483},"const anyString ",[152,83593,1864],{"class":476},[152,83595,83596],{"class":289}," \"Mozilla\"",[152,83598,2965],{"class":483},[152,83600,83601],{"class":281,"line":303},[152,83602,307],{"emptyLinePlaceholder":306},[152,83604,83605,83608,83610,83612,83614,83617,83619,83622,83624,83626,83628,83630,83632,83634],{"class":281,"line":310},[152,83606,83607],{"class":293},"console",[152,83609,2366],{"class":483},[152,83611,59584],{"class":293},[152,83613,1819],{"class":483},[152,83615,83616],{"class":293},"anyString",[152,83618,2366],{"class":483},[152,83620,83621],{"class":293},"substring",[152,83623,1819],{"class":483},[152,83625,2000],{"class":293},[152,83627,14051],{"class":483},[152,83629,2026],{"class":293},[152,83631,76590],{"class":483},[152,83633,34666],{"class":476},[152,83635,83636],{"class":289}," 'M'\n",[152,83638,83639,83641,83643,83645,83647,83649,83651,83653,83655,83657,83659,83661,83663,83665],{"class":281,"line":324},[152,83640,83607],{"class":293},[152,83642,2366],{"class":483},[152,83644,59584],{"class":293},[152,83646,1819],{"class":483},[152,83648,83616],{"class":293},[152,83650,2366],{"class":483},[152,83652,83621],{"class":293},[152,83654,1819],{"class":483},[152,83656,2026],{"class":293},[152,83658,14051],{"class":483},[152,83660,2000],{"class":293},[152,83662,76590],{"class":483},[152,83664,34666],{"class":476},[152,83666,83636],{"class":289},[152,83668,83669],{"class":281,"line":329},[152,83670,307],{"emptyLinePlaceholder":306},[152,83672,83673,83675,83677,83679,83681,83683,83685,83687,83689,83691,83693,83695,83697,83699],{"class":281,"line":343},[152,83674,83607],{"class":293},[152,83676,2366],{"class":483},[152,83678,59584],{"class":293},[152,83680,1819],{"class":483},[152,83682,83616],{"class":293},[152,83684,2366],{"class":483},[152,83686,83621],{"class":293},[152,83688,1819],{"class":483},[152,83690,2000],{"class":293},[152,83692,14051],{"class":483},[152,83694,2152],{"class":293},[152,83696,76590],{"class":483},[152,83698,34666],{"class":476},[152,83700,83701],{"class":289}," 'Mozill'\n",[152,83703,83704],{"class":281,"line":348},[152,83705,307],{"emptyLinePlaceholder":306},[152,83707,83708,83710,83712,83714,83716,83718,83720,83722,83724,83726,83728,83730],{"class":281,"line":362},[152,83709,83607],{"class":293},[152,83711,2366],{"class":483},[152,83713,59584],{"class":293},[152,83715,1819],{"class":483},[152,83717,83616],{"class":293},[152,83719,2366],{"class":483},[152,83721,83621],{"class":293},[152,83723,1819],{"class":483},[152,83725,2101],{"class":293},[152,83727,76590],{"class":483},[152,83729,34666],{"class":476},[152,83731,83732],{"class":289}," 'lla'\n",[152,83734,83735,83737,83739,83741,83743,83745,83747,83749,83751,83753,83755,83757,83759,83761],{"class":281,"line":367},[152,83736,83607],{"class":293},[152,83738,2366],{"class":483},[152,83740,59584],{"class":293},[152,83742,1819],{"class":483},[152,83744,83616],{"class":293},[152,83746,2366],{"class":483},[152,83748,83621],{"class":293},[152,83750,1819],{"class":483},[152,83752,2101],{"class":293},[152,83754,14051],{"class":483},[152,83756,2177],{"class":293},[152,83758,76646],{"class":483},[152,83760,34666],{"class":476},[152,83762,83732],{"class":289},[152,83764,83765,83767,83769,83771,83773,83775,83777,83779,83781,83783,83785,83787,83789,83791],{"class":281,"line":381},[152,83766,83607],{"class":293},[152,83768,2366],{"class":483},[152,83770,59584],{"class":293},[152,83772,1819],{"class":483},[152,83774,83616],{"class":293},[152,83776,2366],{"class":483},[152,83778,83621],{"class":293},[152,83780,1819],{"class":483},[152,83782,2177],{"class":293},[152,83784,14051],{"class":483},[152,83786,2101],{"class":293},[152,83788,76590],{"class":483},[152,83790,34666],{"class":476},[152,83792,83732],{"class":289},[152,83794,83795],{"class":281,"line":386},[152,83796,307],{"emptyLinePlaceholder":306},[152,83798,83799,83801,83803,83805,83807,83809,83811,83813,83815,83817,83819,83821,83823,83825],{"class":281,"line":932},[152,83800,83607],{"class":293},[152,83802,2366],{"class":483},[152,83804,59584],{"class":293},[152,83806,1819],{"class":483},[152,83808,83616],{"class":293},[152,83810,2366],{"class":483},[152,83812,83621],{"class":293},[152,83814,1819],{"class":483},[152,83816,2000],{"class":293},[152,83818,14051],{"class":483},[152,83820,2177],{"class":293},[152,83822,76590],{"class":483},[152,83824,34666],{"class":476},[152,83826,83827],{"class":289}," 'Mozilla'\n",[152,83829,83830,83832,83834,83836,83838,83840,83842,83844,83846,83848,83850,83852,83854,83856],{"class":281,"line":942},[152,83831,83607],{"class":293},[152,83833,2366],{"class":483},[152,83835,59584],{"class":293},[152,83837,1819],{"class":483},[152,83839,83616],{"class":293},[152,83841,2366],{"class":483},[152,83843,83621],{"class":293},[152,83845,1819],{"class":483},[152,83847,2000],{"class":293},[152,83849,14051],{"class":483},[152,83851,2254],{"class":293},[152,83853,76590],{"class":483},[152,83855,34666],{"class":476},[152,83857,83827],{"class":289},[24524,83859,83861],{"id":83860},"_410533-startswith","4.10.5.3.3 startsWith",[19,83863,83864,83867,83868,83873,83874,83876,83877],{},[277,83865,83866],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[694,83869,83870],{},[277,83871,83872],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[277,83875,3034],{}," 或 ",[277,83878,67357],{},[270,83880,83882],{"className":78832,"code":83881,"language":78834,"meta":275,"style":275},"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",[277,83883,83884,83896,83915,83920,83940],{"__ignoreMap":275},[152,83885,83886,83888,83891,83893],{"class":281,"line":282},[152,83887,8434],{"class":476},[152,83889,83890],{"class":483}," str1 ",[152,83892,1864],{"class":476},[152,83894,83895],{"class":289}," \"Saturday night plans\"\n",[152,83897,83898,83900,83902,83905,83908,83910,83913],{"class":281,"line":303},[152,83899,78869],{"class":483},[152,83901,59584],{"class":285},[152,83903,83904],{"class":483},"(str1.",[152,83906,83907],{"class":285},"startsWith",[152,83909,1819],{"class":483},[152,83911,83912],{"class":289},"\"Sat\"",[152,83914,31834],{"class":483},[152,83916,83917],{"class":281,"line":310},[152,83918,83919],{"class":866},"\u002F\u002F Expected output: true\n",[152,83921,83922,83924,83926,83928,83930,83932,83934,83936,83938],{"class":281,"line":324},[152,83923,78869],{"class":483},[152,83925,59584],{"class":285},[152,83927,83904],{"class":483},[152,83929,83907],{"class":285},[152,83931,1819],{"class":483},[152,83933,83912],{"class":289},[152,83935,14051],{"class":483},[152,83937,1888],{"class":293},[152,83939,31834],{"class":483},[152,83941,83942],{"class":281,"line":329},[152,83943,83944],{"class":866},"\u002F\u002F Expected output: false\n",[270,83946,83948],{"className":51970,"code":83947,"language":51972,"meta":275,"style":275},"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",[277,83949,83950,83955,83960,83964,83969,83974],{"__ignoreMap":275},[152,83951,83952],{"class":281,"line":282},[152,83953,83954],{"class":483},"startsWith(searchString)\n",[152,83956,83957],{"class":281,"line":303},[152,83958,83959],{"class":483},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[152,83961,83962],{"class":281,"line":310},[152,83963,307],{"emptyLinePlaceholder":306},[152,83965,83966],{"class":281,"line":324},[152,83967,83968],{"class":483},"const str3 = 'pink老师上课中'\n",[152,83970,83971],{"class":281,"line":329},[152,83972,83973],{"class":483},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[152,83975,83976],{"class":281,"line":343},[152,83977,83978],{"class":483},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24524,83980,83982],{"id":83981},"_410534-includes","4.10.5.3.4 includes",[19,83984,83985],{},"includes(searchString) includes(searchString, position)",[416,83987,83988],{},[419,83989,83990],{},"searchString:",[19,83992,83993,83994,83996,83997,84002,84003,84008,84009,23115,84012,84015,84016,84019],{},"一个要在 ",[277,83995,2974],{}," 中查找的字符串。",[69,83998,84001],{"href":83999,"rel":84000},"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",[245],"不能是正则表达式","。所有非正则表达式的值都会被",[69,84004,84007],{"href":84005,"rel":84006},"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",[245],"强制转换为字符串","，因此如果该参数被省略或传入 ",[277,84010,84011],{},"undefined",[277,84013,84014],{},"includes()"," 方法会在字符串中搜索 ",[277,84017,84018],{},"\"undefined\"","，这通常不是你想要的",[416,84021,84022],{"start":303},[419,84023,84024,841],{},[277,84025,84026],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84028,84029,84030,84033,84034],{},"在字符串中开始搜索 ",[277,84031,84032],{},"searchString"," 的位置。默认值为 ",[277,84035,2000],{},[416,84037,84038],{"start":310},[419,84039,84040],{},"返回值：",[19,84042,84043,84044,84046,84047,84051,84052],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[277,84045,84032],{}," 为空字符串的情况），则返回 ",[694,84048,84049],{},[277,84050,3034],{}," ，否则返回 ",[694,84053,84054],{},[277,84055,67357],{},[416,84057,84058],{"start":324},[419,84059,84060],{},"异常：",[19,84062,83559,84063,15411,84065,84069],{},[277,84064,84032],{},[69,84066,84068],{"href":83999,"rel":84067},[245],"是一个正则表达式","，则会抛出",[19,84071,84072],{},"只要是有就是true，不需要非得以谁开头结尾",[270,84074,84076],{"className":78832,"code":84075,"language":78834,"meta":275,"style":275},"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",[277,84077,84078,84089,84112,84131,84151,84173,84192],{"__ignoreMap":275},[152,84079,84080,84082,84084,84086],{"class":281,"line":282},[152,84081,8434],{"class":476},[152,84083,81112],{"class":483},[152,84085,1864],{"class":476},[152,84087,84088],{"class":289}," \"To be, or not to be, that is the question.\"\n",[152,84090,84091,84093,84095,84098,84101,84103,84106,84109],{"class":281,"line":303},[152,84092,78869],{"class":483},[152,84094,59584],{"class":285},[152,84096,84097],{"class":483},"(str.",[152,84099,84100],{"class":285},"includes",[152,84102,1819],{"class":483},[152,84104,84105],{"class":289},"\"To be\"",[152,84107,84108],{"class":483},"))",[152,84110,84111],{"class":866},"  \u002F\u002F true\n",[152,84113,84114,84116,84118,84120,84122,84124,84127,84129],{"class":281,"line":310},[152,84115,78869],{"class":483},[152,84117,59584],{"class":285},[152,84119,84097],{"class":483},[152,84121,84100],{"class":285},[152,84123,1819],{"class":483},[152,84125,84126],{"class":289},"\"question\"",[152,84128,84108],{"class":483},[152,84130,84111],{"class":866},[152,84132,84133,84135,84137,84139,84141,84143,84146,84148],{"class":281,"line":324},[152,84134,78869],{"class":483},[152,84136,59584],{"class":285},[152,84138,84097],{"class":483},[152,84140,84100],{"class":285},[152,84142,1819],{"class":483},[152,84144,84145],{"class":289},"\"nonexistent\"",[152,84147,84108],{"class":483},[152,84149,84150],{"class":866},"  \u002F\u002F false\n",[152,84152,84153,84155,84157,84159,84161,84163,84165,84167,84169,84171],{"class":281,"line":329},[152,84154,78869],{"class":483},[152,84156,59584],{"class":285},[152,84158,84097],{"class":483},[152,84160,84100],{"class":285},[152,84162,1819],{"class":483},[152,84164,84105],{"class":289},[152,84166,14051],{"class":483},[152,84168,2026],{"class":293},[152,84170,84108],{"class":483},[152,84172,84150],{"class":866},[152,84174,84175,84177,84179,84181,84183,84185,84188,84190],{"class":281,"line":343},[152,84176,78869],{"class":483},[152,84178,59584],{"class":285},[152,84180,84097],{"class":483},[152,84182,84100],{"class":285},[152,84184,1819],{"class":483},[152,84186,84187],{"class":289},"\"TO BE\"",[152,84189,84108],{"class":483},[152,84191,84150],{"class":866},[152,84193,84194,84196,84198,84200,84202,84204,84206,84208],{"class":281,"line":348},[152,84195,78869],{"class":483},[152,84197,59584],{"class":285},[152,84199,84097],{"class":483},[152,84201,84100],{"class":285},[152,84203,1819],{"class":483},[152,84205,9294],{"class":289},[152,84207,84108],{"class":483},[152,84209,84111],{"class":866},[24524,84211,84213],{"id":84212},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[270,84215,84217],{"className":54404,"code":84216,"language":54406,"meta":275,"style":275},"\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",[277,84218,84219,84227,84235,84240,84245,84250,84255,84260,84268],{"__ignoreMap":275},[152,84220,84221,84223,84225],{"class":281,"line":282},[152,84222,844],{"class":483},[152,84224,53137],{"class":52637},[152,84226,52644],{"class":483},[152,84228,84229,84231,84233],{"class":281,"line":303},[152,84230,53481],{"class":483},[152,84232,53150],{"class":52637},[152,84234,52644],{"class":483},[152,84236,84237],{"class":281,"line":310},[152,84238,84239],{"class":483},"    const num = 10\n",[152,84241,84242],{"class":281,"line":324},[152,84243,84244],{"class":483},"    \u002F\u002F 强制转换\n",[152,84246,84247],{"class":281,"line":329},[152,84248,84249],{"class":483},"    console.log(String(num))\n",[152,84251,84252],{"class":281,"line":343},[152,84253,84254],{"class":483},"    \u002F\u002F toString()方法转换\n",[152,84256,84257],{"class":281,"line":348},[152,84258,84259],{"class":483},"    console.log(num.toString())\n",[152,84261,84262,84264,84266],{"class":281,"line":362},[152,84263,53754],{"class":483},[152,84265,53150],{"class":52637},[152,84267,52644],{"class":483},[152,84269,84270,84272,84274],{"class":281,"line":367},[152,84271,53122],{"class":483},[152,84273,53137],{"class":52637},[152,84275,52644],{"class":483},[24524,84277,84279],{"id":84278},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84281,84282],{},[401,84283],{"alt":275,"src":84284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[270,84286,84288],{"className":51970,"code":84287,"language":51972,"meta":275,"style":275},"\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",[277,84289,84290,84300,84314,84318,84326,84340,84360,84372,84380,84384,84392,84404,84412,84424,84429,84434,84439,84486,84502,84510,84518,84522],{"__ignoreMap":275},[152,84291,84292,84294,84296,84298],{"class":281,"line":282},[152,84293,52634],{"class":483},[152,84295,52638],{"class":52637},[152,84297,52641],{"class":285},[152,84299,52644],{"class":483},[152,84301,84302,84304,84306,84308,84310,84312],{"class":281,"line":303},[152,84303,844],{"class":483},[152,84305,51972],{"class":52637},[152,84307,52653],{"class":285},[152,84309,1864],{"class":483},[152,84311,52658],{"class":289},[152,84313,52644],{"class":483},[152,84315,84316],{"class":281,"line":310},[152,84317,307],{"emptyLinePlaceholder":306},[152,84319,84320,84322,84324],{"class":281,"line":324},[152,84321,844],{"class":483},[152,84323,52671],{"class":52637},[152,84325,52644],{"class":483},[152,84327,84328,84330,84332,84334,84336,84338],{"class":281,"line":329},[152,84329,53481],{"class":483},[152,84331,52681],{"class":52637},[152,84333,52684],{"class":285},[152,84335,1864],{"class":483},[152,84337,52689],{"class":289},[152,84339,52644],{"class":483},[152,84341,84342,84344,84346,84348,84350,84352,84354,84356,84358],{"class":281,"line":343},[152,84343,53481],{"class":483},[152,84345,52681],{"class":52637},[152,84347,16535],{"class":285},[152,84349,1864],{"class":483},[152,84351,52728],{"class":289},[152,84353,52708],{"class":285},[152,84355,1864],{"class":483},[152,84357,52735],{"class":289},[152,84359,52644],{"class":483},[152,84361,84362,84364,84366,84368,84370],{"class":281,"line":348},[152,84363,53481],{"class":483},[152,84365,52744],{"class":52637},[152,84367,52747],{"class":483},[152,84369,52744],{"class":52637},[152,84371,52644],{"class":483},[152,84373,84374,84376,84378],{"class":281,"line":362},[152,84375,53122],{"class":483},[152,84377,52671],{"class":52637},[152,84379,52644],{"class":483},[152,84381,84382],{"class":281,"line":367},[152,84383,307],{"emptyLinePlaceholder":306},[152,84385,84386,84388,84390],{"class":281,"line":381},[152,84387,844],{"class":483},[152,84389,53137],{"class":52637},[152,84391,52644],{"class":483},[152,84393,84394,84396,84398,84400,84402],{"class":281,"line":386},[152,84395,53481],{"class":483},[152,84397,52948],{"class":52637},[152,84399,56651],{"class":483},[152,84401,52948],{"class":52637},[152,84403,52644],{"class":483},[152,84405,84406,84408,84410],{"class":281,"line":932},[152,84407,53481],{"class":483},[152,84409,53150],{"class":52637},[152,84411,52644],{"class":483},[152,84413,84414,84416,84419,84421],{"class":281,"line":942},[152,84415,12837],{"class":476},[152,84417,84418],{"class":293}," gift",[152,84420,15180],{"class":476},[152,84422,84423],{"class":289}," '50g的茶叶，清洗球'\n",[152,84425,84426],{"class":281,"line":949},[152,84427,84428],{"class":866},"    \u002F\u002F 1.把字符串拆分为数组\n",[152,84430,84431],{"class":281,"line":954},[152,84432,84433],{"class":866},"    \u002F\u002F console.log(gift.split(','))\n",[152,84435,84436],{"class":281,"line":959},[152,84437,84438],{"class":866},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[152,84440,84441,84443,84445,84447,84450,84453,84455,84458,84460,84462,84464,84466,84468,84471,84473,84476,84478,84480,84482,84484],{"class":281,"line":970},[152,84442,12837],{"class":476},[152,84444,75256],{"class":293},[152,84446,15180],{"class":476},[152,84448,84449],{"class":483}," gift.",[152,84451,84452],{"class":285},"split",[152,84454,1819],{"class":483},[152,84456,84457],{"class":289},"'，'",[152,84459,32163],{"class":483},[152,84461,75381],{"class":285},[152,84463,1819],{"class":483},[152,84465,81132],{"class":6858},[152,84467,81135],{"class":476},[152,84469,84470],{"class":289}," `\u003Cspan>【赠品】${",[152,84472,81132],{"class":483},[152,84474,84475],{"class":289},"}\u003C\u002Fspan>\u003Cbr>`",[152,84477,32163],{"class":483},[152,84479,75560],{"class":285},[152,84481,1819],{"class":483},[152,84483,75565],{"class":289},[152,84485,1825],{"class":483},[152,84487,84488,84490,84492,84494,84496,84498,84500],{"class":281,"line":979},[152,84489,53744],{"class":483},[152,84491,55736],{"class":285},[152,84493,1819],{"class":483},[152,84495,83268],{"class":289},[152,84497,75586],{"class":483},[152,84499,1864],{"class":476},[152,84501,75322],{"class":483},[152,84503,84504,84506,84508],{"class":281,"line":989},[152,84505,53754],{"class":483},[152,84507,53150],{"class":52637},[152,84509,52644],{"class":483},[152,84511,84512,84514,84516],{"class":281,"line":996},[152,84513,53122],{"class":483},[152,84515,53137],{"class":52637},[152,84517,52644],{"class":483},[152,84519,84520],{"class":281,"line":1001},[152,84521,307],{"emptyLinePlaceholder":306},[152,84523,84524,84526,84528],{"class":281,"line":1006},[152,84525,53122],{"class":483},[152,84527,51972],{"class":52637},[152,84529,52644],{"class":483},[262,84531,84533],{"id":84532},"_41054-number","4.10.5.4 Number",[19,84535,84536],{},[401,84537],{"alt":275,"src":84538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84540,84541],{},"整数也可以进行toFixed来保留小数",[19,84543,84544],{},"比如：",[19,84546,84547],{},"const price=10",[19,84549,84550],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[262,84552,84554],{"id":84553},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84556,84557],{},[401,84558],{"alt":275,"src":84559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[270,84561,84563],{"className":51970,"code":84562,"language":51972,"meta":275,"style":275},"\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",[277,84564,84565,84575,84589,84593,84601,84615,84635,84647,84655,84661,84671,84681,84691,84695,84699,84705,84717,84731,84735,84739,84745,84757,84773,84783,84799,84803,84807,84813,84823,84833,84837,84841,84849,84861,84873,84885,84889,84893,84901,84913,84917,84921,84932,84942,84954,84966,84976,84980,84984,84992,85001,85013,85023,85033,85037,85041,85049,85058,85065,85075,85087,85091,85095,85104,85114,85125,85137,85149,85153,85157,85166,85176,85187,85191,85195,85201,85213,85225,85235,85245,85263,85275,85279,85283,85292,85304,85314,85324,85336,85340,85348,85356,85360,85368,85382,85390,85404,85432,85440,85448,85458,85462,85470,85478,85487,85495,85504,85514,85518,85522,85530,85538,85547,85555,85563,85576,85580,85584,85592,85600,85609,85617,85625,85640,85644,85648,85656,85664,85673,85681,85689,85703,85711,85715,85719,85724,85750,85755,85792,85797,85820,85825,85879,85884,85920,85924,85930,85935,85944,85958,85967,85986,85995,86005,86010,86015,86028,86033,86087,86113,86121,86129,86133],{"__ignoreMap":275},[152,84566,84567,84569,84571,84573],{"class":281,"line":282},[152,84568,52634],{"class":483},[152,84570,52638],{"class":52637},[152,84572,52641],{"class":285},[152,84574,52644],{"class":483},[152,84576,84577,84579,84581,84583,84585,84587],{"class":281,"line":303},[152,84578,844],{"class":483},[152,84580,51972],{"class":52637},[152,84582,52653],{"class":285},[152,84584,1864],{"class":483},[152,84586,52658],{"class":289},[152,84588,52644],{"class":483},[152,84590,84591],{"class":281,"line":310},[152,84592,307],{"emptyLinePlaceholder":306},[152,84594,84595,84597,84599],{"class":281,"line":324},[152,84596,844],{"class":483},[152,84598,52671],{"class":52637},[152,84600,52644],{"class":483},[152,84602,84603,84605,84607,84609,84611,84613],{"class":281,"line":329},[152,84604,53481],{"class":483},[152,84606,52681],{"class":52637},[152,84608,52684],{"class":285},[152,84610,1864],{"class":483},[152,84612,52689],{"class":289},[152,84614,52644],{"class":483},[152,84616,84617,84619,84621,84623,84625,84627,84629,84631,84633],{"class":281,"line":343},[152,84618,53481],{"class":483},[152,84620,52681],{"class":52637},[152,84622,16535],{"class":285},[152,84624,1864],{"class":483},[152,84626,52728],{"class":289},[152,84628,52708],{"class":285},[152,84630,1864],{"class":483},[152,84632,52735],{"class":289},[152,84634,52644],{"class":483},[152,84636,84637,84639,84641,84643,84645],{"class":281,"line":348},[152,84638,53481],{"class":483},[152,84640,52744],{"class":52637},[152,84642,52747],{"class":483},[152,84644,52744],{"class":52637},[152,84646,52644],{"class":483},[152,84648,84649,84651,84653],{"class":281,"line":362},[152,84650,53481],{"class":483},[152,84652,1736],{"class":52637},[152,84654,52644],{"class":483},[152,84656,84657,84659],{"class":281,"line":367},[152,84658,8045],{"class":52637},[152,84660,17187],{"class":483},[152,84662,84663,84665,84667,84669],{"class":281,"line":381},[152,84664,56032],{"class":293},[152,84666,52774],{"class":483},[152,84668,2000],{"class":293},[152,84670,2965],{"class":483},[152,84672,84673,84675,84677,84679],{"class":281,"line":386},[152,84674,56043],{"class":293},[152,84676,52774],{"class":483},[152,84678,2000],{"class":293},[152,84680,2965],{"class":483},[152,84682,84683,84685,84687,84689],{"class":281,"line":932},[152,84684,73933],{"class":293},[152,84686,52774],{"class":483},[152,84688,61842],{"class":293},[152,84690,2965],{"class":483},[152,84692,84693],{"class":281,"line":942},[152,84694,3838],{"class":483},[152,84696,84697],{"class":281,"line":949},[152,84698,307],{"emptyLinePlaceholder":306},[152,84700,84701,84703],{"class":281,"line":954},[152,84702,63460],{"class":285},[152,84704,17187],{"class":483},[152,84706,84707,84709,84711,84713,84715],{"class":281,"line":959},[152,84708,56108],{"class":293},[152,84710,52774],{"class":483},[152,84712,79911],{"class":293},[152,84714,52829],{"class":476},[152,84716,2965],{"class":483},[152,84718,84719,84721,84723,84725,84727,84729],{"class":281,"line":970},[152,84720,56043],{"class":293},[152,84722,52774],{"class":483},[152,84724,2119],{"class":293},[152,84726,52829],{"class":476},[152,84728,52893],{"class":293},[152,84730,2965],{"class":483},[152,84732,84733],{"class":281,"line":979},[152,84734,3838],{"class":483},[152,84736,84737],{"class":281,"line":989},[152,84738,307],{"emptyLinePlaceholder":306},[152,84740,84741,84743],{"class":281,"line":996},[152,84742,79962],{"class":285},[152,84744,17187],{"class":483},[152,84746,84747,84749,84751,84753,84755],{"class":281,"line":1001},[152,84748,56032],{"class":293},[152,84750,52774],{"class":483},[152,84752,2383],{"class":293},[152,84754,52829],{"class":476},[152,84756,2965],{"class":483},[152,84758,84759,84761,84763,84765,84767,84769,84771],{"class":281,"line":1006},[152,84760,63197],{"class":293},[152,84762,52774],{"class":483},[152,84764,29721],{"class":293},[152,84766,80017],{"class":293},[152,84768,80020],{"class":293},[152,84770,2503],{"class":476},[152,84772,2965],{"class":483},[152,84774,84775,84777,84779,84781],{"class":281,"line":1018},[152,84776,56346],{"class":293},[152,84778,52774],{"class":483},[152,84780,52814],{"class":293},[152,84782,2965],{"class":483},[152,84784,84785,84787,84789,84791,84793,84795,84797],{"class":281,"line":1027},[152,84786,63314],{"class":293},[152,84788,52774],{"class":483},[152,84790,2026],{"class":293},[152,84792,52829],{"class":476},[152,84794,52858],{"class":293},[152,84796,63581],{"class":293},[152,84798,2965],{"class":483},[152,84800,84801],{"class":281,"line":1037},[152,84802,3838],{"class":483},[152,84804,84805],{"class":281,"line":1044},[152,84806,307],{"emptyLinePlaceholder":306},[152,84808,84809,84811],{"class":281,"line":1049},[152,84810,80080],{"class":285},[152,84812,17187],{"class":483},[152,84814,84815,84817,84819,84821],{"class":281,"line":1054},[152,84816,63362],{"class":293},[152,84818,52774],{"class":483},[152,84820,63367],{"class":293},[152,84822,2965],{"class":483},[152,84824,84825,84827,84829,84831],{"class":281,"line":1065},[152,84826,56221],{"class":293},[152,84828,52774],{"class":483},[152,84830,63155],{"class":293},[152,84832,2965],{"class":483},[152,84834,84835],{"class":281,"line":1074},[152,84836,3838],{"class":483},[152,84838,84839],{"class":281,"line":1084},[152,84840,307],{"emptyLinePlaceholder":306},[152,84842,84843,84845,84847],{"class":281,"line":1091},[152,84844,79962],{"class":285},[152,84846,56952],{"class":52637},[152,84848,17187],{"class":483},[152,84850,84851,84853,84855,84857,84859],{"class":281,"line":1096},[152,84852,56108],{"class":293},[152,84854,52774],{"class":483},[152,84856,2420],{"class":293},[152,84858,52829],{"class":476},[152,84860,2965],{"class":483},[152,84862,84863,84865,84867,84869,84871],{"class":281,"line":1101},[152,84864,56122],{"class":293},[152,84866,52774],{"class":483},[152,84868,2420],{"class":293},[152,84870,52829],{"class":476},[152,84872,2965],{"class":483},[152,84874,84875,84877,84879,84881,84883],{"class":281,"line":1112},[152,84876,63087],{"class":293},[152,84878,52774],{"class":483},[152,84880,2127],{"class":293},[152,84882,52829],{"class":476},[152,84884,2965],{"class":483},[152,84886,84887],{"class":281,"line":1121},[152,84888,3838],{"class":483},[152,84890,84891],{"class":281,"line":1131},[152,84892,307],{"emptyLinePlaceholder":306},[152,84894,84895,84897,84899],{"class":281,"line":1138},[152,84896,79962],{"class":285},[152,84898,63641],{"class":285},[152,84900,17187],{"class":483},[152,84902,84903,84905,84907,84909,84911],{"class":281,"line":1143},[152,84904,56108],{"class":293},[152,84906,52774],{"class":483},[152,84908,3382],{"class":293},[152,84910,52829],{"class":476},[152,84912,2965],{"class":483},[152,84914,84915],{"class":281,"line":1148},[152,84916,3838],{"class":483},[152,84918,84919],{"class":281,"line":1159},[152,84920,307],{"emptyLinePlaceholder":306},[152,84922,84923,84925,84927,84930],{"class":281,"line":1168},[152,84924,79962],{"class":285},[152,84926,63641],{"class":285},[152,84928,84929],{"class":285}," .tag",[152,84931,17187],{"class":483},[152,84933,84934,84936,84938,84940],{"class":281,"line":1178},[152,84935,56346],{"class":293},[152,84937,52774],{"class":483},[152,84939,62206],{"class":293},[152,84941,2965],{"class":483},[152,84943,84944,84946,84948,84950,84952],{"class":281,"line":1185},[152,84945,56032],{"class":293},[152,84947,52774],{"class":483},[152,84949,1894],{"class":293},[152,84951,52829],{"class":476},[152,84953,2965],{"class":483},[152,84955,84956,84958,84960,84962,84964],{"class":281,"line":1190},[152,84957,56259],{"class":293},[152,84959,52774],{"class":483},[152,84961,2306],{"class":293},[152,84963,52829],{"class":476},[152,84965,2965],{"class":483},[152,84967,84968,84970,84972,84974],{"class":281,"line":1195},[152,84969,58753],{"class":293},[152,84971,52774],{"class":483},[152,84973,63407],{"class":293},[152,84975,2965],{"class":483},[152,84977,84978],{"class":281,"line":1206},[152,84979,3838],{"class":483},[152,84981,84982],{"class":281,"line":1215},[152,84983,307],{"emptyLinePlaceholder":306},[152,84985,84986,84988,84990],{"class":281,"line":1225},[152,84987,79962],{"class":285},[152,84989,80254],{"class":285},[152,84991,32803],{"class":483},[152,84993,84994,84996,84999],{"class":281,"line":1232},[152,84995,79962],{"class":285},[152,84997,84998],{"class":285}," .sub-total",[152,85000,17187],{"class":483},[152,85002,85003,85005,85007,85009,85011],{"class":281,"line":1237},[152,85004,56259],{"class":293},[152,85006,52774],{"class":483},[152,85008,2458],{"class":293},[152,85010,52829],{"class":476},[152,85012,2965],{"class":483},[152,85014,85015,85017,85019,85021],{"class":281,"line":1242},[152,85016,58753],{"class":293},[152,85018,52774],{"class":483},[152,85020,80277],{"class":293},[152,85022,2965],{"class":483},[152,85024,85025,85027,85029,85031],{"class":281,"line":1253},[152,85026,63174],{"class":293},[152,85028,52774],{"class":483},[152,85030,2026],{"class":293},[152,85032,2965],{"class":483},[152,85034,85035],{"class":281,"line":1262},[152,85036,3838],{"class":483},[152,85038,85039],{"class":281,"line":1272},[152,85040,307],{"emptyLinePlaceholder":306},[152,85042,85043,85045,85047],{"class":281,"line":1279},[152,85044,79962],{"class":285},[152,85046,80294],{"class":285},[152,85048,32803],{"class":483},[152,85050,85051,85053,85056],{"class":281,"line":1284},[152,85052,79962],{"class":285},[152,85054,85055],{"class":285}," .sub-total::before",[152,85057,32803],{"class":483},[152,85059,85060,85063],{"class":281,"line":1289},[152,85061,85062],{"class":285},"    .amount::before",[152,85064,17187],{"class":483},[152,85066,85067,85069,85071,85073],{"class":281,"line":1301},[152,85068,80301],{"class":293},[152,85070,52774],{"class":483},[152,85072,80306],{"class":289},[152,85074,2965],{"class":483},[152,85076,85077,85079,85081,85083,85085],{"class":281,"line":1310},[152,85078,56259],{"class":293},[152,85080,52774],{"class":483},[152,85082,2306],{"class":293},[152,85084,52829],{"class":476},[152,85086,2965],{"class":483},[152,85088,85089],{"class":281,"line":1320},[152,85090,3838],{"class":483},[152,85092,85093],{"class":281,"line":1327},[152,85094,307],{"emptyLinePlaceholder":306},[152,85096,85097,85099,85102],{"class":281,"line":11528},[152,85098,79962],{"class":285},[152,85100,85101],{"class":285}," .spec",[152,85103,17187],{"class":483},[152,85105,85106,85108,85110,85112],{"class":281,"line":11536},[152,85107,63174],{"class":293},[152,85109,52774],{"class":483},[152,85111,1894],{"class":293},[152,85113,2965],{"class":483},[152,85115,85116,85118,85120,85123],{"class":281,"line":11541},[152,85117,58753],{"class":293},[152,85119,52774],{"class":483},[152,85121,85122],{"class":293},"#888",[152,85124,2965],{"class":483},[152,85126,85127,85129,85131,85133,85135],{"class":281,"line":18219},[152,85128,56259],{"class":293},[152,85130,52774],{"class":483},[152,85132,2357],{"class":293},[152,85134,52829],{"class":476},[152,85136,2965],{"class":483},[152,85138,85139,85141,85143,85145,85147],{"class":281,"line":18225},[152,85140,63337],{"class":293},[152,85142,52774],{"class":483},[152,85144,2508],{"class":293},[152,85146,52829],{"class":476},[152,85148,2965],{"class":483},[152,85150,85151],{"class":281,"line":18248},[152,85152,3838],{"class":483},[152,85154,85155],{"class":281,"line":18254},[152,85156,307],{"emptyLinePlaceholder":306},[152,85158,85159,85161,85164],{"class":281,"line":18277},[152,85160,79962],{"class":285},[152,85162,85163],{"class":285}," .count",[152,85165,17187],{"class":483},[152,85167,85168,85170,85172,85174],{"class":281,"line":18291},[152,85169,63174],{"class":293},[152,85171,52774],{"class":483},[152,85173,2026],{"class":293},[152,85175,2965],{"class":483},[152,85177,85178,85180,85182,85185],{"class":281,"line":18311},[152,85179,58753],{"class":293},[152,85181,52774],{"class":483},[152,85183,85184],{"class":293},"#aaa",[152,85186,2965],{"class":483},[152,85188,85189],{"class":281,"line":18317},[152,85190,3838],{"class":483},[152,85192,85193],{"class":281,"line":18328},[152,85194,307],{"emptyLinePlaceholder":306},[152,85196,85197,85199],{"class":281,"line":18351},[152,85198,73812],{"class":285},[152,85200,17187],{"class":483},[152,85202,85203,85205,85207,85209,85211],{"class":281,"line":18373},[152,85204,56108],{"class":293},[152,85206,52774],{"class":483},[152,85208,79911],{"class":293},[152,85210,52829],{"class":476},[152,85212,2965],{"class":483},[152,85214,85215,85217,85219,85221,85223],{"class":281,"line":18378},[152,85216,56043],{"class":293},[152,85218,52774],{"class":483},[152,85220,2000],{"class":293},[152,85222,52893],{"class":293},[152,85224,2965],{"class":483},[152,85226,85227,85229,85231,85233],{"class":281,"line":18384},[152,85228,56346],{"class":293},[152,85230,52774],{"class":483},[152,85232,52814],{"class":293},[152,85234,2965],{"class":483},[152,85236,85237,85239,85241,85243],{"class":281,"line":18398},[152,85238,56357],{"class":293},[152,85240,52774],{"class":483},[152,85242,52917],{"class":293},[152,85244,2965],{"class":483},[152,85246,85247,85250,85252,85254,85256,85258,85261],{"class":281,"line":18411},[152,85248,85249],{"class":293},"      border-top",[152,85251,52774],{"class":483},[152,85253,2026],{"class":293},[152,85255,52829],{"class":476},[152,85257,52858],{"class":293},[152,85259,85260],{"class":293}," #4e4e4e",[152,85262,2965],{"class":483},[152,85264,85265,85267,85269,85271,85273],{"class":281,"line":18416},[152,85266,56032],{"class":293},[152,85268,52774],{"class":483},[152,85270,2508],{"class":293},[152,85272,52829],{"class":476},[152,85274,2965],{"class":483},[152,85276,85277],{"class":281,"line":18430},[152,85278,3838],{"class":483},[152,85280,85281],{"class":281,"line":18435},[152,85282,307],{"emptyLinePlaceholder":306},[152,85284,85285,85287,85290],{"class":281,"line":18441},[152,85286,73812],{"class":285},[152,85288,85289],{"class":285}," .amount",[152,85291,17187],{"class":483},[152,85293,85294,85296,85298,85300,85302],{"class":281,"line":18446},[152,85295,56259],{"class":293},[152,85297,52774],{"class":483},[152,85299,2458],{"class":293},[152,85301,52829],{"class":476},[152,85303,2965],{"class":483},[152,85305,85306,85308,85310,85312],{"class":281,"line":18460},[152,85307,58753],{"class":293},[152,85309,52774],{"class":483},[152,85311,80277],{"class":293},[152,85313,2965],{"class":483},[152,85315,85316,85318,85320,85322],{"class":281,"line":18465},[152,85317,63671],{"class":293},[152,85319,52774],{"class":483},[152,85321,52826],{"class":293},[152,85323,2965],{"class":483},[152,85325,85326,85328,85330,85332,85334],{"class":281,"line":18470},[152,85327,63087],{"class":293},[152,85329,52774],{"class":483},[152,85331,2464],{"class":293},[152,85333,52829],{"class":476},[152,85335,2965],{"class":483},[152,85337,85338],{"class":281,"line":18484},[152,85339,3838],{"class":483},[152,85341,85342,85344,85346],{"class":281,"line":18496},[152,85343,53754],{"class":483},[152,85345,1736],{"class":52637},[152,85347,52644],{"class":483},[152,85349,85350,85352,85354],{"class":281,"line":18501},[152,85351,53122],{"class":483},[152,85353,52671],{"class":52637},[152,85355,52644],{"class":483},[152,85357,85358],{"class":281,"line":18514},[152,85359,307],{"emptyLinePlaceholder":306},[152,85361,85362,85364,85366],{"class":281,"line":18519},[152,85363,844],{"class":483},[152,85365,53137],{"class":52637},[152,85367,52644],{"class":483},[152,85369,85370,85372,85374,85376,85378,85380],{"class":281,"line":18524},[152,85371,53481],{"class":483},[152,85373,52948],{"class":52637},[152,85375,54823],{"class":285},[152,85377,1864],{"class":483},[152,85379,63945],{"class":289},[152,85381,52644],{"class":483},[152,85383,85384,85386,85388],{"class":281,"line":18529},[152,85385,53754],{"class":483},[152,85387,52948],{"class":52637},[152,85389,52644],{"class":483},[152,85391,85392,85394,85396,85398,85400,85402],{"class":281,"line":18542},[152,85393,53481],{"class":483},[152,85395,52948],{"class":52637},[152,85397,54823],{"class":285},[152,85399,1864],{"class":483},[152,85401,63917],{"class":289},[152,85403,52644],{"class":483},[152,85405,85406,85408,85410,85413,85415,85417,85419,85422,85424,85426,85428,85430],{"class":281,"line":18547},[152,85407,52678],{"class":483},[152,85409,52948],{"class":52637},[152,85411,85412],{"class":483},">合计：\u003C",[152,85414,152],{"class":52637},[152,85416,54823],{"class":285},[152,85418,1864],{"class":483},[152,85420,85421],{"class":289},"\"amount\"",[152,85423,56651],{"class":483},[152,85425,152],{"class":52637},[152,85427,56651],{"class":483},[152,85429,52948],{"class":52637},[152,85431,52644],{"class":483},[152,85433,85434,85436,85438],{"class":281,"line":33970},[152,85435,53754],{"class":483},[152,85437,52948],{"class":52637},[152,85439,52644],{"class":483},[152,85441,85442,85444,85446],{"class":281,"line":33976},[152,85443,53481],{"class":483},[152,85445,53150],{"class":52637},[152,85447,52644],{"class":483},[152,85449,85450,85452,85454,85456],{"class":281,"line":33982},[152,85451,12837],{"class":476},[152,85453,80714],{"class":293},[152,85455,15180],{"class":476},[152,85457,56784],{"class":483},[152,85459,85460],{"class":281,"line":33988},[152,85461,80723],{"class":483},[152,85463,85464,85466,85468],{"class":281,"line":33994},[152,85465,80728],{"class":483},[152,85467,80731],{"class":289},[152,85469,32803],{"class":483},[152,85471,85472,85474,85476],{"class":281,"line":34005},[152,85473,80738],{"class":483},[152,85475,80741],{"class":289},[152,85477,32803],{"class":483},[152,85479,85480,85482,85485],{"class":281,"line":34011},[152,85481,80748],{"class":483},[152,85483,85484],{"class":293},"289.9",[152,85486,32803],{"class":483},[152,85488,85489,85491,85493],{"class":281,"line":34031},[152,85490,80758],{"class":483},[152,85492,80761],{"class":289},[152,85494,32803],{"class":483},[152,85496,85497,85500,85502],{"class":281,"line":34037},[152,85498,85499],{"class":483},"        count: ",[152,85501,1894],{"class":293},[152,85503,32803],{"class":483},[152,85505,85506,85509,85512],{"class":281,"line":34048},[152,85507,85508],{"class":483},"        spec: { color: ",[152,85510,85511],{"class":289},"'白色'",[152,85513,56941],{"class":483},[152,85515,85516],{"class":281,"line":34054},[152,85517,79229],{"class":483},[152,85519,85520],{"class":281,"line":34060},[152,85521,80723],{"class":483},[152,85523,85524,85526,85528],{"class":281,"line":34066},[152,85525,80728],{"class":483},[152,85527,80822],{"class":289},[152,85529,32803],{"class":483},[152,85531,85532,85534,85536],{"class":281,"line":34072},[152,85533,80738],{"class":483},[152,85535,80831],{"class":289},[152,85537,32803],{"class":483},[152,85539,85540,85542,85545],{"class":281,"line":34078},[152,85541,80748],{"class":483},[152,85543,85544],{"class":293},"109.8",[152,85546,32803],{"class":483},[152,85548,85549,85551,85553],{"class":281,"line":34084},[152,85550,80758],{"class":483},[152,85552,80849],{"class":289},[152,85554,32803],{"class":483},[152,85556,85557,85559,85561],{"class":281,"line":34090},[152,85558,85499],{"class":483},[152,85560,1888],{"class":293},[152,85562,32803],{"class":483},[152,85564,85565,85568,85570,85572,85574],{"class":281,"line":34110},[152,85566,85567],{"class":483},"        spec: { size: ",[152,85569,83240],{"class":289},[152,85571,56801],{"class":483},[152,85573,83245],{"class":289},[152,85575,56941],{"class":483},[152,85577,85578],{"class":281,"line":34116},[152,85579,79229],{"class":483},[152,85581,85582],{"class":281,"line":34132},[152,85583,80723],{"class":483},[152,85585,85586,85588,85590],{"class":281,"line":34138},[152,85587,80728],{"class":483},[152,85589,80866],{"class":289},[152,85591,32803],{"class":483},[152,85593,85594,85596,85598],{"class":281,"line":34152},[152,85595,80738],{"class":483},[152,85597,80875],{"class":289},[152,85599,32803],{"class":483},[152,85601,85602,85604,85607],{"class":281,"line":34158},[152,85603,80748],{"class":483},[152,85605,85606],{"class":293},"488",[152,85608,32803],{"class":483},[152,85610,85611,85613,85615],{"class":281,"line":34173},[152,85612,80758],{"class":483},[152,85614,80893],{"class":289},[152,85616,32803],{"class":483},[152,85618,85619,85621,85623],{"class":281,"line":34179},[152,85620,85499],{"class":483},[152,85622,2026],{"class":293},[152,85624,32803],{"class":483},[152,85626,85627,85629,85632,85635,85638],{"class":281,"line":34188},[152,85628,85508],{"class":483},[152,85630,85631],{"class":289},"'青色'",[152,85633,85634],{"class":483},", sum: ",[152,85636,85637],{"class":289},"'一大四小'",[152,85639,56941],{"class":483},[152,85641,85642],{"class":281,"line":34194},[152,85643,79229],{"class":483},[152,85645,85646],{"class":281,"line":34203},[152,85647,80723],{"class":483},[152,85649,85650,85652,85654],{"class":281,"line":34209},[152,85651,80728],{"class":483},[152,85653,80910],{"class":289},[152,85655,32803],{"class":483},[152,85657,85658,85660,85662],{"class":281,"line":34215},[152,85659,80738],{"class":483},[152,85661,80919],{"class":289},[152,85663,32803],{"class":483},[152,85665,85666,85668,85671],{"class":281,"line":34224},[152,85667,80748],{"class":483},[152,85669,85670],{"class":293},"139",[152,85672,32803],{"class":483},[152,85674,85675,85677,85679],{"class":281,"line":34230},[152,85676,80758],{"class":483},[152,85678,80937],{"class":289},[152,85680,32803],{"class":483},[152,85682,85683,85685,85687],{"class":281,"line":34241},[152,85684,85499],{"class":483},[152,85686,2026],{"class":293},[152,85688,32803],{"class":483},[152,85690,85691,85693,85696,85698,85701],{"class":281,"line":34247},[152,85692,85567],{"class":483},[152,85694,85695],{"class":289},"'小号'",[152,85697,56801],{"class":483},[152,85699,85700],{"class":289},"'紫色'",[152,85702,56807],{"class":483},[152,85704,85705,85708],{"class":281,"line":34266},[152,85706,85707],{"class":483},"        gift: ",[152,85709,85710],{"class":289},"'50g茶叶,清洗球'\n",[152,85712,85713],{"class":281,"line":34272},[152,85714,53735],{"class":483},[152,85716,85717],{"class":281,"line":34283},[152,85718,54446],{"class":483},[152,85720,85721],{"class":281,"line":34289},[152,85722,85723],{"class":866},"    \u002F\u002F  1.根据数据渲染页面\n",[152,85725,85726,85728,85730,85732,85734,85736,85738,85740,85742,85744,85746,85748],{"class":281,"line":34309},[152,85727,53744],{"class":483},[152,85729,55736],{"class":285},[152,85731,1819],{"class":483},[152,85733,81238],{"class":289},[152,85735,75586],{"class":483},[152,85737,1864],{"class":476},[152,85739,81385],{"class":483},[152,85741,75381],{"class":285},[152,85743,1819],{"class":483},[152,85745,81132],{"class":6858},[152,85747,81135],{"class":476},[152,85749,17187],{"class":483},[152,85751,85752],{"class":281,"line":34325},[152,85753,85754],{"class":866},"      \u002F\u002F 对象解构\n",[152,85756,85757,85759,85761,85763,85765,85767,85769,85772,85774,85776,85778,85781,85783,85786,85788,85790],{"class":281,"line":34331},[152,85758,59565],{"class":476},[152,85760,81144],{"class":483},[152,85762,81157],{"class":293},[152,85764,14051],{"class":483},[152,85766,81147],{"class":293},[152,85768,14051],{"class":483},[152,85770,85771],{"class":293},"count",[152,85773,14051],{"class":483},[152,85775,81152],{"class":293},[152,85777,14051],{"class":483},[152,85779,85780],{"class":293},"spec",[152,85782,14051],{"class":483},[152,85784,85785],{"class":293},"gift",[152,85787,81160],{"class":483},[152,85789,1864],{"class":476},[152,85791,81165],{"class":483},[152,85793,85794],{"class":281,"line":34345},[152,85795,85796],{"class":866},"      \u002F\u002F 规格文字模块处理\n",[152,85798,85799,85801,85804,85806,85808,85810,85812,85814,85816,85818],{"class":281,"line":34351},[152,85800,59565],{"class":476},[152,85802,85803],{"class":293}," text",[152,85805,15180],{"class":476},[152,85807,83275],{"class":483},[152,85809,83278],{"class":285},[152,85811,83281],{"class":483},[152,85813,75560],{"class":285},[152,85815,1819],{"class":483},[152,85817,83288],{"class":289},[152,85819,1825],{"class":483},[152,85821,85822],{"class":281,"line":34357},[152,85823,85824],{"class":866},"      \u002F\u002F 处理赠品模块\n",[152,85826,85827,85829,85831,85833,85836,85838,85840,85842,85844,85847,85849,85851,85853,85855,85857,85860,85862,85865,85867,85869,85871,85873,85875,85877],{"class":281,"line":34368},[152,85828,59565],{"class":476},[152,85830,75256],{"class":293},[152,85832,15180],{"class":476},[152,85834,85835],{"class":483}," gift ",[152,85837,2791],{"class":476},[152,85839,84449],{"class":483},[152,85841,84452],{"class":285},[152,85843,1819],{"class":483},[152,85845,85846],{"class":289},"','",[152,85848,32163],{"class":483},[152,85850,75381],{"class":285},[152,85852,1819],{"class":483},[152,85854,81132],{"class":6858},[152,85856,81135],{"class":476},[152,85858,85859],{"class":289}," `\u003Cspan class=\"tag\">【赠品】${",[152,85861,81132],{"class":483},[152,85863,85864],{"class":289},"}\u003C\u002Fspan>`",[152,85866,32163],{"class":483},[152,85868,75560],{"class":285},[152,85870,1819],{"class":483},[152,85872,75565],{"class":289},[152,85874,15330],{"class":483},[152,85876,841],{"class":476},[152,85878,71441],{"class":289},[152,85880,85881],{"class":281,"line":34374},[152,85882,85883],{"class":866},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[152,85885,85886,85888,85891,85893,85896,85898,85900,85902,85905,85907,85909,85911,85914,85916,85918],{"class":281,"line":34380},[152,85887,59565],{"class":476},[152,85889,85890],{"class":293}," subtotal",[152,85892,15180],{"class":476},[152,85894,85895],{"class":483}," ((price ",[152,85897,2263],{"class":476},[152,85899,7396],{"class":293},[152,85901,8160],{"class":476},[152,85903,85904],{"class":483}," count) ",[152,85906,2392],{"class":476},[152,85908,7396],{"class":293},[152,85910,32163],{"class":483},[152,85912,85913],{"class":285},"toFixed",[152,85915,1819],{"class":483},[152,85917,1894],{"class":293},[152,85919,1825],{"class":483},[152,85921,85922],{"class":281,"line":34390},[152,85923,307],{"emptyLinePlaceholder":306},[152,85925,85926,85928],{"class":281,"line":34396},[152,85927,75319],{"class":476},[152,85929,71505],{"class":289},[152,85931,85932],{"class":281,"line":34407},[152,85933,85934],{"class":289},"        \u003Cdiv class=\"item\">\n",[152,85936,85937,85940,85942],{"class":281,"line":34413},[152,85938,85939],{"class":289},"          \u003Cimg src=\"${",[152,85941,81157],{"class":483},[152,85943,81189],{"class":289},[152,85945,85946,85949,85951,85954,85956],{"class":281,"line":34423},[152,85947,85948],{"class":289},"          \u003Cp class=\"name\">${",[152,85950,81147],{"class":483},[152,85952,85953],{"class":289},"}${",[152,85955,2974],{"class":483},[152,85957,81199],{"class":289},[152,85959,85960,85963,85965],{"class":281,"line":34428},[152,85961,85962],{"class":289},"          \u003Cp class=\"spec\">${",[152,85964,6829],{"class":483},[152,85966,81199],{"class":289},[152,85968,85969,85972,85974,85976,85978,85980,85982,85984],{"class":281,"line":34434},[152,85970,85971],{"class":289},"          \u003Cp class=\"price\">${",[152,85973,81152],{"class":483},[152,85975,2366],{"class":289},[152,85977,85913],{"class":285},[152,85979,1819],{"class":289},[152,85981,1894],{"class":293},[152,85983,2237],{"class":289},[152,85985,81199],{"class":289},[152,85987,85988,85991,85993],{"class":281,"line":34483},[152,85989,85990],{"class":289},"          \u003Cp class=\"count\">x${",[152,85992,85771],{"class":483},[152,85994,81199],{"class":289},[152,85996,85997,86000,86003],{"class":281,"line":34530},[152,85998,85999],{"class":289},"          \u003Cp class=\"sub-total\">${",[152,86001,86002],{"class":483},"subtotal",[152,86004,81199],{"class":289},[152,86006,86007],{"class":281,"line":34535},[152,86008,86009],{"class":289},"        \u003C\u002Fdiv> \n",[152,86011,86012],{"class":281,"line":34541},[152,86013,86014],{"class":289},"             `\n",[152,86016,86017,86020,86022,86024,86026],{"class":281,"line":34560},[152,86018,86019],{"class":483},"    }).",[152,86021,75560],{"class":285},[152,86023,1819],{"class":483},[152,86025,75565],{"class":289},[152,86027,1825],{"class":483},[152,86029,86030],{"class":281,"line":34566},[152,86031,86032],{"class":866},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[152,86034,86035,86037,86039,86041,86043,86046,86048,86051,86053,86055,86057,86060,86063,86065,86068,86070,86072,86074,86077,86079,86081,86083,86085],{"class":281,"line":34586},[152,86036,12837],{"class":476},[152,86038,64122],{"class":293},[152,86040,15180],{"class":476},[152,86042,81385],{"class":483},[152,86044,86045],{"class":285},"reduce",[152,86047,4027],{"class":483},[152,86049,86050],{"class":6858},"prev",[152,86052,14051],{"class":483},[152,86054,81132],{"class":6858},[152,86056,15330],{"class":483},[152,86058,86059],{"class":476},"=>",[152,86061,86062],{"class":483}," prev ",[152,86064,2289],{"class":476},[152,86066,86067],{"class":483}," (item.price ",[152,86069,2263],{"class":476},[152,86071,7396],{"class":293},[152,86073,8160],{"class":476},[152,86075,86076],{"class":483}," item.count) ",[152,86078,2392],{"class":476},[152,86080,7396],{"class":293},[152,86082,14051],{"class":483},[152,86084,2000],{"class":293},[152,86086,1825],{"class":483},[152,86088,86089,86091,86093,86095,86098,86100,86102,86105,86107,86109,86111],{"class":281,"line":34592},[152,86090,53744],{"class":483},[152,86092,55736],{"class":285},[152,86094,1819],{"class":483},[152,86096,86097],{"class":289},"'.amount'",[152,86099,75586],{"class":483},[152,86101,1864],{"class":476},[152,86103,86104],{"class":483}," total.",[152,86106,85913],{"class":285},[152,86108,1819],{"class":483},[152,86110,1894],{"class":293},[152,86112,1825],{"class":483},[152,86114,86115,86117,86119],{"class":281,"line":34598},[152,86116,53754],{"class":483},[152,86118,53150],{"class":52637},[152,86120,52644],{"class":483},[152,86122,86123,86125,86127],{"class":281,"line":34608},[152,86124,53122],{"class":483},[152,86126,53137],{"class":52637},[152,86128,52644],{"class":483},[152,86130,86131],{"class":281,"line":34613},[152,86132,307],{"emptyLinePlaceholder":306},[152,86134,86135,86137,86139],{"class":281,"line":34619},[152,86136,53122],{"class":483},[152,86138,51972],{"class":52637},[152,86140,52644],{"class":483},[1760,86142,86144],{"id":86143},"_411-编程思想","4.11 编程思想",[14,86146,86148],{"id":86147},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86150,86151,86154],{},[694,86152,86153],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86156,86157],{},"调用就可以了",[19,86159,86160],{},[401,86161],{"alt":275,"src":86162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[14,86164,86166],{"id":86165},"_4112-面向对象","4.11.2 面向对象",[19,86168,86169],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86171,86172],{},[401,86173],{"alt":275,"src":86174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86176,86177],{},"面向对象的特性：",[698,86179,86180,86183,86186],{},[419,86181,86182],{},"封装性",[419,86184,86185],{},"继承性",[419,86187,86188],{},"多态性",[14,86190,86192],{"id":86191},"_4113-两者比较","4.11.3 两者比较",[19,86194,86195],{},[401,86196],{"alt":275,"src":86197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[1760,86199,86201],{"id":86200},"_412-构造函数回顾","4.12 构造函数回顾",[19,86203,86204],{},[401,86205],{"alt":275,"src":86206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86208,86209],{},[401,86210],{"alt":275,"src":86211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86213,86214],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86216,86217],{},[401,86218],{"alt":275,"src":86219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[1760,86221,86223],{"id":86222},"_413-原型","4.13 原型",[14,86225,86227],{"id":86226},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86229,86230],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86232,86233],{},[401,86234],{"alt":275,"src":86235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86237,86238],{},[401,86239],{"alt":275,"src":86240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86242,86243],{},"原型是构造函数的属性，它也是一个对象",[19,86245,86246],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86248,86249],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[270,86251,86253],{"className":54404,"code":86252,"language":54406,"meta":275,"style":275},"\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",[277,86254,86255,86263,86268,86276,86281,86286,86291,86296,86301,86305,86309,86313,86318,86323,86327,86332,86337,86342,86347,86352,86356,86364],{"__ignoreMap":275},[152,86256,86257,86259,86261],{"class":281,"line":282},[152,86258,844],{"class":483},[152,86260,53137],{"class":52637},[152,86262,52644],{"class":483},[152,86264,86265],{"class":281,"line":303},[152,86266,86267],{"class":866},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[152,86269,86270,86272,86274],{"class":281,"line":310},[152,86271,53481],{"class":483},[152,86273,53150],{"class":52637},[152,86275,52644],{"class":483},[152,86277,86278],{"class":281,"line":324},[152,86279,86280],{"class":483},"    function Star(uname, age) {\n",[152,86282,86283],{"class":281,"line":329},[152,86284,86285],{"class":483},"      this.uname = uname,\n",[152,86287,86288],{"class":281,"line":343},[152,86289,86290],{"class":483},"        this.age = age\n",[152,86292,86293],{"class":281,"line":348},[152,86294,86295],{"class":483},"      \u002F\u002F this.sing = function () {\n",[152,86297,86298],{"class":281,"line":362},[152,86299,86300],{"class":483},"      \u002F\u002F   console.log('唱歌')\n",[152,86302,86303],{"class":281,"line":367},[152,86304,307],{"emptyLinePlaceholder":306},[152,86306,86307],{"class":281,"line":381},[152,86308,61374],{"class":483},[152,86310,86311],{"class":281,"line":386},[152,86312,3838],{"class":483},[152,86314,86315],{"class":281,"line":932},[152,86316,86317],{"class":483},"    Star.prototype.sing = function () {\n",[152,86319,86320],{"class":281,"line":942},[152,86321,86322],{"class":483},"      console.log('唱歌')\n",[152,86324,86325],{"class":281,"line":949},[152,86326,3838],{"class":483},[152,86328,86329],{"class":281,"line":954},[152,86330,86331],{"class":483},"    \u002F\u002F console.dir(Star.prototype)\n",[152,86333,86334],{"class":281,"line":959},[152,86335,86336],{"class":483},"    const pink = new Star('pink', 18)\n",[152,86338,86339],{"class":281,"line":970},[152,86340,86341],{"class":483},"    const red = new Star('red', 20)\n",[152,86343,86344],{"class":281,"line":979},[152,86345,86346],{"class":483},"    pink.sing()\n",[152,86348,86349],{"class":281,"line":989},[152,86350,86351],{"class":483},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[152,86353,86354],{"class":281,"line":996},[152,86355,307],{"emptyLinePlaceholder":306},[152,86357,86358,86360,86362],{"class":281,"line":1001},[152,86359,53754],{"class":483},[152,86361,53150],{"class":52637},[152,86363,52644],{"class":483},[152,86365,86366,86368,86370],{"class":281,"line":1006},[152,86367,53122],{"class":483},[152,86369,53137],{"class":52637},[152,86371,52644],{"class":483},[19,86373,86374],{},[401,86375],{"alt":275,"src":86376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[270,86378,86380],{"className":54404,"code":86379,"language":54406,"meta":275,"style":275},"\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",[277,86381,86382,86390,86398,86403,86408,86413,86418,86422,86427,86432,86437,86441,86446,86450,86454,86459,86463,86471],{"__ignoreMap":275},[152,86383,86384,86386,86388],{"class":281,"line":282},[152,86385,844],{"class":483},[152,86387,53137],{"class":52637},[152,86389,52644],{"class":483},[152,86391,86392,86394,86396],{"class":281,"line":303},[152,86393,53481],{"class":483},[152,86395,53150],{"class":52637},[152,86397,52644],{"class":483},[152,86399,86400],{"class":281,"line":310},[152,86401,86402],{"class":483},"    let that\n",[152,86404,86405],{"class":281,"line":324},[152,86406,86407],{"class":483},"    function Star(uname) {\n",[152,86409,86410],{"class":281,"line":329},[152,86411,86412],{"class":483},"      this.uname = uname\n",[152,86414,86415],{"class":281,"line":343},[152,86416,86417],{"class":483},"      that = this\n",[152,86419,86420],{"class":281,"line":348},[152,86421,3838],{"class":483},[152,86423,86424],{"class":281,"line":362},[152,86425,86426],{"class":483},"    \u002F\u002F 实例对象是 ldh\n",[152,86428,86429],{"class":281,"line":367},[152,86430,86431],{"class":483},"    const ldh = new Star('刘德华')\n",[152,86433,86434],{"class":281,"line":381},[152,86435,86436],{"class":483},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[152,86438,86439],{"class":281,"line":386},[152,86440,307],{"emptyLinePlaceholder":306},[152,86442,86443],{"class":281,"line":932},[152,86444,86445],{"class":483},"    Star.sing = function () {\n",[152,86447,86448],{"class":281,"line":942},[152,86449,86322],{"class":483},[152,86451,86452],{"class":281,"line":949},[152,86453,3838],{"class":483},[152,86455,86456],{"class":281,"line":954},[152,86457,86458],{"class":483},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[152,86460,86461],{"class":281,"line":959},[152,86462,307],{"emptyLinePlaceholder":306},[152,86464,86465,86467,86469],{"class":281,"line":970},[152,86466,53754],{"class":483},[152,86468,53150],{"class":52637},[152,86470,52644],{"class":483},[152,86472,86473,86475,86477],{"class":281,"line":979},[152,86474,53122],{"class":483},[152,86476,53137],{"class":52637},[152,86478,52644],{"class":483},[19,86480,86481],{},"构造函数的this指向的是实例对象；",[19,86483,86484],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[14,86486,86488],{"id":86487},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86490,86491],{},[401,86492],{"alt":275,"src":86493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[270,86495,86497],{"className":54404,"code":86496,"language":54406,"meta":275,"style":275},"\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",[277,86498,86499,86507,86515,86520,86525,86530,86535,86540,86545,86550,86555,86560,86565,86569,86574,86579,86584,86589,86593,86598,86603,86608,86613,86617,86622,86627,86632,86637,86641,86646,86650,86658],{"__ignoreMap":275},[152,86500,86501,86503,86505],{"class":281,"line":282},[152,86502,844],{"class":483},[152,86504,53137],{"class":52637},[152,86506,52644],{"class":483},[152,86508,86509,86511,86513],{"class":281,"line":303},[152,86510,53481],{"class":483},[152,86512,53150],{"class":52637},[152,86514,52644],{"class":483},[152,86516,86517],{"class":281,"line":310},[152,86518,86519],{"class":483},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[152,86521,86522],{"class":281,"line":324},[152,86523,86524],{"class":483},"    const arr = [1, 2, 3]\n",[152,86526,86527],{"class":281,"line":329},[152,86528,86529],{"class":483},"    \u002F\u002F 自己定义数组的扩展方法\n",[152,86531,86532],{"class":281,"line":343},[152,86533,86534],{"class":483},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[152,86536,86537],{"class":281,"line":348},[152,86538,86539],{"class":483},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[152,86541,86542],{"class":281,"line":362},[152,86543,86544],{"class":483},"    \u002F\u002F ①.最大值\n",[152,86546,86547],{"class":281,"line":367},[152,86548,86549],{"class":483},"    Array.prototype.max = function () {\n",[152,86551,86552],{"class":281,"line":381},[152,86553,86554],{"class":483},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[152,86556,86557],{"class":281,"line":386},[152,86558,86559],{"class":483},"      return Math.max(...this)\n",[152,86561,86562],{"class":281,"line":932},[152,86563,86564],{"class":483},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[152,86566,86567],{"class":281,"line":942},[152,86568,3838],{"class":483},[152,86570,86571],{"class":281,"line":949},[152,86572,86573],{"class":483},"    console.log(arr.max())\n",[152,86575,86576],{"class":281,"line":954},[152,86577,86578],{"class":483},"    \u002F\u002F ②最小值\n",[152,86580,86581],{"class":281,"line":959},[152,86582,86583],{"class":483},"    Array.prototype.min = function () {\n",[152,86585,86586],{"class":281,"line":970},[152,86587,86588],{"class":483},"      return Math.min(...this)\n",[152,86590,86591],{"class":281,"line":979},[152,86592,3838],{"class":483},[152,86594,86595],{"class":281,"line":989},[152,86596,86597],{"class":483},"    console.log(arr.min())\n",[152,86599,86600],{"class":281,"line":996},[152,86601,86602],{"class":483},"    \u002F\u002F③求和\n",[152,86604,86605],{"class":281,"line":1001},[152,86606,86607],{"class":483},"    Array.prototype.sum = function () {\n",[152,86609,86610],{"class":281,"line":1006},[152,86611,86612],{"class":483},"      return this.reduce((prev, current) => prev + current, 0)\n",[152,86614,86615],{"class":281,"line":1018},[152,86616,3838],{"class":483},[152,86618,86619],{"class":281,"line":1027},[152,86620,86621],{"class":483},"    console.log(arr.sum())\n",[152,86623,86624],{"class":281,"line":1037},[152,86625,86626],{"class":483},"    \u002F\u002F ③排序\n",[152,86628,86629],{"class":281,"line":1044},[152,86630,86631],{"class":483},"    Array.prototype.rever = function () {\n",[152,86633,86634],{"class":281,"line":1049},[152,86635,86636],{"class":483},"      return this.reverse()\n",[152,86638,86639],{"class":281,"line":1054},[152,86640,3838],{"class":483},[152,86642,86643],{"class":281,"line":1065},[152,86644,86645],{"class":483},"    console.log(arr.rever())\n",[152,86647,86648],{"class":281,"line":1074},[152,86649,307],{"emptyLinePlaceholder":306},[152,86651,86652,86654,86656],{"class":281,"line":1084},[152,86653,53754],{"class":483},[152,86655,53150],{"class":52637},[152,86657,52644],{"class":483},[152,86659,86660,86662,86664],{"class":281,"line":1091},[152,86661,53122],{"class":483},[152,86663,53137],{"class":52637},[152,86665,52644],{"class":483},[19,86667,86668],{},[401,86669],{"alt":275,"src":86670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[14,86672,86674],{"id":86673},"_4133-constructor-属性","4.13.3 constructor 属性",[19,86676,86677],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,86679,86680],{},[401,86681],{"alt":275,"src":86682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[270,86684,86686],{"className":54404,"code":86685,"language":54406,"meta":275,"style":275},"\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",[277,86687,86688,86696,86704,86709,86714,86718,86723,86728,86733,86741],{"__ignoreMap":275},[152,86689,86690,86692,86694],{"class":281,"line":282},[152,86691,844],{"class":483},[152,86693,53137],{"class":52637},[152,86695,52644],{"class":483},[152,86697,86698,86700,86702],{"class":281,"line":303},[152,86699,53481],{"class":483},[152,86701,53150],{"class":52637},[152,86703,52644],{"class":483},[152,86705,86706],{"class":281,"line":310},[152,86707,86708],{"class":483},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[152,86710,86711],{"class":281,"line":324},[152,86712,86713],{"class":483},"    function Star() {\n",[152,86715,86716],{"class":281,"line":329},[152,86717,3838],{"class":483},[152,86719,86720],{"class":281,"line":343},[152,86721,86722],{"class":483},"    const ldh = new Star()\n",[152,86724,86725],{"class":281,"line":348},[152,86726,86727],{"class":483},"    console.log(Star.prototype)\n",[152,86729,86730],{"class":281,"line":362},[152,86731,86732],{"class":483},"    console.log(Star.prototype.constructor === Star)\n",[152,86734,86735,86737,86739],{"class":281,"line":367},[152,86736,53754],{"class":483},[152,86738,53150],{"class":52637},[152,86740,52644],{"class":483},[152,86742,86743,86745,86747],{"class":281,"line":381},[152,86744,53122],{"class":483},[152,86746,53137],{"class":52637},[152,86748,52644],{"class":483},[19,86750,86751],{},[401,86752],{"alt":275,"src":86753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,86755,86756],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[270,86758,86760],{"className":54404,"code":86759,"language":54406,"meta":275,"style":275},"  \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",[277,86761,86762,86770,86774,86778,86782,86787,86792,86797,86801,86806,86811,86816,86821,86826,86831,86835,86839,86844,86849,86854,86858,86863,86868,86872,86876,86880],{"__ignoreMap":275},[152,86763,86764,86766,86768],{"class":281,"line":282},[152,86765,53481],{"class":483},[152,86767,53150],{"class":52637},[152,86769,52644],{"class":483},[152,86771,86772],{"class":281,"line":303},[152,86773,86708],{"class":483},[152,86775,86776],{"class":281,"line":310},[152,86777,86713],{"class":483},[152,86779,86780],{"class":281,"line":324},[152,86781,3838],{"class":483},[152,86783,86784],{"class":281,"line":329},[152,86785,86786],{"class":483},"    \u002F\u002F const ldh = new Star()\n",[152,86788,86789],{"class":281,"line":343},[152,86790,86791],{"class":483},"    \u002F\u002F console.log(Star.prototype)\n",[152,86793,86794],{"class":281,"line":348},[152,86795,86796],{"class":483},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[152,86798,86799],{"class":281,"line":362},[152,86800,307],{"emptyLinePlaceholder":306},[152,86802,86803],{"class":281,"line":367},[152,86804,86805],{"class":483},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[152,86807,86808],{"class":281,"line":381},[152,86809,86810],{"class":483},"    \u002F\u002F Star.prototype.sing = function () {\n",[152,86812,86813],{"class":281,"line":386},[152,86814,86815],{"class":483},"    \u002F\u002F   console.log('唱歌')\n",[152,86817,86818],{"class":281,"line":932},[152,86819,86820],{"class":483},"    \u002F\u002F }\n",[152,86822,86823],{"class":281,"line":942},[152,86824,86825],{"class":483},"    \u002F\u002F Star.prototype.dance = function () {\n",[152,86827,86828],{"class":281,"line":949},[152,86829,86830],{"class":483},"    \u002F\u002F   console.log('跳舞')\n",[152,86832,86833],{"class":281,"line":954},[152,86834,86820],{"class":483},[152,86836,86837],{"class":281,"line":959},[152,86838,86727],{"class":483},[152,86840,86841],{"class":281,"line":970},[152,86842,86843],{"class":483},"    Star.prototype = {\n",[152,86845,86846],{"class":281,"line":979},[152,86847,86848],{"class":483},"      sing: function () {\n",[152,86850,86851],{"class":281,"line":989},[152,86852,86853],{"class":483},"        console.log('唱歌')\n",[152,86855,86856],{"class":281,"line":996},[152,86857,79229],{"class":483},[152,86859,86860],{"class":281,"line":1001},[152,86861,86862],{"class":483},"      dance: function () {\n",[152,86864,86865],{"class":281,"line":1006},[152,86866,86867],{"class":483},"        console.log('跳舞')\n",[152,86869,86870],{"class":281,"line":1018},[152,86871,53735],{"class":483},[152,86873,86874],{"class":281,"line":1027},[152,86875,3838],{"class":483},[152,86877,86878],{"class":281,"line":1037},[152,86879,86727],{"class":483},[152,86881,86882,86884,86886],{"class":281,"line":1044},[152,86883,53754],{"class":483},[152,86885,53150],{"class":52637},[152,86887,52644],{"class":483},[19,86889,86890],{},"进行输出结果后会发现：",[19,86892,86893],{},[401,86894],{"alt":275,"src":86895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86897,86898],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86900,86901],{},"所以，要重新指回创造这个原型对象的构造函数",[270,86903,86905],{"className":72550,"code":86904,"language":72552,"meta":275,"style":275},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[277,86906,86907,86921,86926,86931,86942,86955,86960,86971,86985,86989],{"__ignoreMap":275},[152,86908,86909,86912,86914,86917,86919],{"class":281,"line":282},[152,86910,86911],{"class":293},"Star",[152,86913,2366],{"class":483},[152,86915,86916],{"class":293},"prototype",[152,86918,15180],{"class":476},[152,86920,17187],{"class":483},[152,86922,86923],{"class":281,"line":303},[152,86924,86925],{"class":866},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[152,86927,86928],{"class":281,"line":310},[152,86929,86930],{"class":483},"  constructor: Star,\n",[152,86932,86933,86936,86938,86940],{"class":281,"line":324},[152,86934,86935],{"class":285},"  sing",[152,86937,52774],{"class":483},[152,86939,55786],{"class":476},[152,86941,55789],{"class":483},[152,86943,86944,86946,86948,86950,86953],{"class":281,"line":329},[152,86945,75090],{"class":483},[152,86947,59584],{"class":285},[152,86949,1819],{"class":483},[152,86951,86952],{"class":289},"'唱歌'",[152,86954,1825],{"class":483},[152,86956,86957],{"class":281,"line":343},[152,86958,86959],{"class":483},"   },\n",[152,86961,86962,86965,86967,86969],{"class":281,"line":348},[152,86963,86964],{"class":285},"   dance",[152,86966,52774],{"class":483},[152,86968,55786],{"class":476},[152,86970,55789],{"class":483},[152,86972,86973,86976,86978,86980,86983],{"class":281,"line":362},[152,86974,86975],{"class":483},"     console.",[152,86977,59584],{"class":285},[152,86979,1819],{"class":483},[152,86981,86982],{"class":289},"'跳舞'",[152,86984,1825],{"class":483},[152,86986,86987],{"class":281,"line":367},[152,86988,5951],{"class":483},[152,86990,86991],{"class":281,"line":381},[152,86992,3236],{"class":483},[19,86994,86995],{},[401,86996],{"alt":275,"src":86997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86999,87000],{},"总结1：",[19,87002,87003],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87005,87006],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87008,87009],{},"constructor指的是他的来源",[19,87011,87012],{},[401,87013],{"alt":275,"src":87014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87016,87017],{},[401,87018],{"alt":275,"src":87019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87021,87022],{},"总结2：",[19,87024,87025],{},[401,87026],{"alt":275,"src":87027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87029,87030],{},[401,87031],{"alt":275,"src":87032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87034,87035],{},[401,87036],{"alt":275,"src":87037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[14,87039,87041],{"id":87040},"_4134-对象原型","4.13.4 对象原型",[19,87043,87044],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87046,87047],{},"对象原型就是__proto__这个属性",[19,87049,87050],{},[401,87051],{"alt":275,"src":87052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87054,87055],{},[401,87056],{"alt":275,"src":87057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87059,87060],{},[401,87061],{"alt":275,"src":87062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87064,87065],{},[401,87066],{"alt":275,"src":87067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[270,87069,87071],{"className":54404,"code":87070,"language":54406,"meta":275,"style":275},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[277,87072,87073,87081,87089,87093,87097,87101,87106,87114],{"__ignoreMap":275},[152,87074,87075,87077,87079],{"class":281,"line":282},[152,87076,844],{"class":483},[152,87078,53137],{"class":52637},[152,87080,52644],{"class":483},[152,87082,87083,87085,87087],{"class":281,"line":303},[152,87084,53481],{"class":483},[152,87086,53150],{"class":52637},[152,87088,52644],{"class":483},[152,87090,87091],{"class":281,"line":310},[152,87092,86713],{"class":483},[152,87094,87095],{"class":281,"line":324},[152,87096,3838],{"class":483},[152,87098,87099],{"class":281,"line":329},[152,87100,86722],{"class":483},[152,87102,87103],{"class":281,"line":343},[152,87104,87105],{"class":483},"    console.log(ldh)\n",[152,87107,87108,87110,87112],{"class":281,"line":348},[152,87109,53754],{"class":483},[152,87111,53150],{"class":52637},[152,87113,52644],{"class":483},[152,87115,87116,87118,87120],{"class":281,"line":362},[152,87117,53122],{"class":483},[152,87119,53137],{"class":52637},[152,87121,52644],{"class":483},[19,87123,87124],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87126,87127],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87129,87130],{},[401,87131],{"alt":275,"src":87132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87134,87135],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87137,87138],{},"对象原型指向原型对象",[19,87140,87141],{},[401,87142],{"alt":275,"src":87143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87145,87146],{},[401,87147],{"alt":275,"src":87148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87150,87151],{},[401,87152],{"alt":275,"src":87153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[14,87155,87157],{"id":87156},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87159,87160],{},[401,87161],{"alt":275,"src":87162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[416,87164,87165,87168,87171,87174],{},[419,87166,87167],{},"构造函数通过new的形式实例化得到实例对象",[419,87169,87170],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[419,87172,87173],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[419,87175,87176],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87178,87179],{},[401,87180],{"alt":275,"src":87181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87183,87184],{},"题目梳理：",[19,87186,87187],{},[401,87188],{"alt":275,"src":87189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[14,87191,87193],{"id":87192},"_4136-原型继承","4.13.6 原型继承",[19,87195,87196],{},[401,87197],{"alt":275,"src":87198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87200,87201],{},[401,87202],{"alt":275,"src":87203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87205,87206],{},[401,87207],{"alt":275,"src":87208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87210,87211],{},[401,87212],{"alt":275,"src":87213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87215,87216],{},[401,87217],{"alt":275,"src":87218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87220,87221],{},[401,87222],{"alt":275,"src":87223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87225,87226],{},[401,87227],{"alt":275,"src":87228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87230,87231],{},[401,87232],{"alt":275,"src":87233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87235,87236],{},"回顾：构造函数每次new得到对象都是不同的",[14,87238,87240],{"id":87239},"_4137-原型链","4.13.7 原型链",[19,87242,87243],{},[401,87244],{"alt":275,"src":87245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87247,87248],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87250,87251],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87253,87254],{},"大哥是Object",[19,87256,87257],{},[401,87258],{"alt":275,"src":87259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87261,87262],{},[401,87263],{"alt":275,"src":87264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87266,87267],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87269,87270],{},"万物皆对象",[14,87272,87274],{"id":87273},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87276,87277],{},"模态框",[19,87279,87280],{},"以后遇见这个效果直接使用这个就行",[19,87282,87283],{},[401,87284],{"alt":275,"src":87285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87287,87288],{},[401,87289],{"alt":275,"src":87290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87292,87293],{},[401,87294],{"alt":275,"src":87295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87297,87298],{},[401,87299],{"alt":275,"src":87300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87302,87303],{},"补充知识点：",[416,87305,87306],{},[419,87307,87308],{},"append()",[19,87310,87311],{},[401,87312],{"alt":275,"src":87313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[270,87315,87317],{"className":51970,"code":87316,"language":51972,"meta":275,"style":275},"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",[277,87318,87319,87324,87329,87334,87338,87342,87346,87351,87356,87361,87365],{"__ignoreMap":275},[152,87320,87321],{"class":281,"line":282},[152,87322,87323],{"class":483},"append(param1)\n",[152,87325,87326],{"class":281,"line":303},[152,87327,87328],{"class":483},"append(param1, param2)\n",[152,87330,87331],{"class":281,"line":310},[152,87332,87333],{"class":483},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[152,87335,87336],{"class":281,"line":324},[152,87337,307],{"emptyLinePlaceholder":306},[152,87339,87340],{"class":281,"line":329},[152,87341,307],{"emptyLinePlaceholder":306},[152,87343,87344],{"class":281,"line":343},[152,87345,307],{"emptyLinePlaceholder":306},[152,87347,87348],{"class":281,"line":348},[152,87349,87350],{"class":483},"let div = document.createElement(\"div\");\n",[152,87352,87353],{"class":281,"line":362},[152,87354,87355],{"class":483},"let p = document.createElement(\"p\");\n",[152,87357,87358],{"class":281,"line":367},[152,87359,87360],{"class":483},"div.append(p);\n",[152,87362,87363],{"class":281,"line":381},[152,87364,307],{"emptyLinePlaceholder":306},[152,87366,87367,87370,87372],{"class":281,"line":386},[152,87368,87369],{"class":483},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[152,87371,19],{"class":52637},[152,87373,87374],{"class":483},"> ]\n",[416,87376,87377],{"start":303},[419,87378,87379],{},"remove()",[19,87381,87382],{},"自己删自己",[19,87384,87385],{},[401,87386],{"alt":275,"src":87387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[270,87389,87391],{"className":51970,"code":87390,"language":51972,"meta":275,"style":275},"\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",[277,87392,87393,87403,87417,87421,87429,87443,87463,87475,87483,87490,87502,87515,87550,87562,87573,87585,87597,87609,87636,87646,87650,87654,87663,87675,87689,87699,87711,87715,87719,87729,87740,87750,87760,87773,87786,87796,87800,87804,87813,87823,87835,87839,87843,87852,87862,87872,87884,87888,87892,87902,87918,87929,87939,87949,87961,87973,87985,87989,87993,88006,88017,88021,88029,88037,88041,88049,88069,88089,88097,88102,88128,88133,88138,88157,88162,88174,88179,88190,88200,88210,88215,88220,88224,88229,88234,88239,88259,88264,88284,88289,88303,88308,88313,88318,88334,88338,88343,88372,88377,88382,88387,88398,88402,88406,88410,88415,88440,88445,88470,88475,88484,88488,88493,88518,88522,88547,88551,88560,88564,88569,88587,88597,88601,88609,88617,88621],{"__ignoreMap":275},[152,87394,87395,87397,87399,87401],{"class":281,"line":282},[152,87396,52634],{"class":483},[152,87398,52638],{"class":52637},[152,87400,52641],{"class":285},[152,87402,52644],{"class":483},[152,87404,87405,87407,87409,87411,87413,87415],{"class":281,"line":303},[152,87406,844],{"class":483},[152,87408,51972],{"class":52637},[152,87410,52653],{"class":285},[152,87412,1864],{"class":483},[152,87414,52658],{"class":289},[152,87416,52644],{"class":483},[152,87418,87419],{"class":281,"line":310},[152,87420,307],{"emptyLinePlaceholder":306},[152,87422,87423,87425,87427],{"class":281,"line":324},[152,87424,844],{"class":483},[152,87426,52671],{"class":52637},[152,87428,52644],{"class":483},[152,87430,87431,87433,87435,87437,87439,87441],{"class":281,"line":329},[152,87432,53481],{"class":483},[152,87434,52681],{"class":52637},[152,87436,52684],{"class":285},[152,87438,1864],{"class":483},[152,87440,52689],{"class":289},[152,87442,52644],{"class":483},[152,87444,87445,87447,87449,87451,87453,87455,87457,87459,87461],{"class":281,"line":343},[152,87446,53481],{"class":483},[152,87448,52681],{"class":52637},[152,87450,16535],{"class":285},[152,87452,1864],{"class":483},[152,87454,52728],{"class":289},[152,87456,52708],{"class":285},[152,87458,1864],{"class":483},[152,87460,52735],{"class":289},[152,87462,52644],{"class":483},[152,87464,87465,87467,87469,87471,87473],{"class":281,"line":348},[152,87466,53481],{"class":483},[152,87468,52744],{"class":52637},[152,87470,52747],{"class":483},[152,87472,52744],{"class":52637},[152,87474,52644],{"class":483},[152,87476,87477,87479,87481],{"class":281,"line":362},[152,87478,53481],{"class":483},[152,87480,1736],{"class":52637},[152,87482,52644],{"class":483},[152,87484,87485,87488],{"class":281,"line":367},[152,87486,87487],{"class":285},"    .modal",[152,87489,17187],{"class":483},[152,87491,87492,87494,87496,87498,87500],{"class":281,"line":381},[152,87493,56108],{"class":293},[152,87495,52774],{"class":483},[152,87497,5615],{"class":293},[152,87499,52829],{"class":476},[152,87501,2965],{"class":483},[152,87503,87504,87507,87509,87511,87513],{"class":281,"line":386},[152,87505,87506],{"class":293},"      min-height",[152,87508,52774],{"class":483},[152,87510,2119],{"class":293},[152,87512,52829],{"class":476},[152,87514,2965],{"class":483},[152,87516,87517,87519,87521,87523,87525,87527,87529,87531,87533,87535,87537,87539,87541,87543,87545,87548],{"class":281,"line":932},[152,87518,80087],{"class":293},[152,87520,52774],{"class":483},[152,87522,2000],{"class":293},[152,87524,5735],{"class":293},[152,87526,3689],{"class":293},[152,87528,52829],{"class":476},[152,87530,80104],{"class":293},[152,87532,1819],{"class":483},[152,87534,2000],{"class":293},[152,87536,14051],{"class":483},[152,87538,2000],{"class":293},[152,87540,14051],{"class":483},[152,87542,2000],{"class":293},[152,87544,14051],{"class":483},[152,87546,87547],{"class":293},"0.1",[152,87549,4362],{"class":483},[152,87551,87552,87554,87556,87558,87560],{"class":281,"line":942},[152,87553,56471],{"class":293},[152,87555,52774],{"class":483},[152,87557,2101],{"class":293},[152,87559,52829],{"class":476},[152,87561,2965],{"class":483},[152,87563,87564,87566,87568,87571],{"class":281,"line":949},[152,87565,56096],{"class":293},[152,87567,52774],{"class":483},[152,87569,87570],{"class":293},"fixed",[152,87572,2965],{"class":483},[152,87574,87575,87578,87580,87583],{"class":281,"line":954},[152,87576,87577],{"class":293},"      z-index",[152,87579,52774],{"class":483},[152,87581,87582],{"class":293},"999",[152,87584,2965],{"class":483},[152,87586,87587,87589,87591,87593,87595],{"class":281,"line":959},[152,87588,56175],{"class":293},[152,87590,52774],{"class":483},[152,87592,2464],{"class":293},[152,87594,2136],{"class":476},[152,87596,2965],{"class":483},[152,87598,87599,87601,87603,87605,87607],{"class":281,"line":970},[152,87600,56284],{"class":293},[152,87602,52774],{"class":483},[152,87604,2464],{"class":293},[152,87606,2136],{"class":476},[152,87608,2965],{"class":483},[152,87610,87611,87613,87615,87617,87619,87622,87624,87626,87628,87630,87632,87634],{"class":281,"line":979},[152,87612,80128],{"class":293},[152,87614,52774],{"class":483},[152,87616,80133],{"class":293},[152,87618,1819],{"class":483},[152,87620,87621],{"class":293},"-50",[152,87623,2136],{"class":476},[152,87625,14051],{"class":483},[152,87627,87621],{"class":293},[152,87629,2136],{"class":476},[152,87631,14051],{"class":483},[152,87633,2000],{"class":293},[152,87635,4362],{"class":483},[152,87637,87638,87640,87642,87644],{"class":281,"line":989},[152,87639,56221],{"class":293},[152,87641,52774],{"class":483},[152,87643,62179],{"class":293},[152,87645,2965],{"class":483},[152,87647,87648],{"class":281,"line":996},[152,87649,3838],{"class":483},[152,87651,87652],{"class":281,"line":1001},[152,87653,307],{"emptyLinePlaceholder":306},[152,87655,87656,87658,87661],{"class":281,"line":1006},[152,87657,87487],{"class":285},[152,87659,87660],{"class":285}," .header",[152,87662,17187],{"class":483},[152,87664,87665,87667,87669,87671,87673],{"class":281,"line":1018},[152,87666,58696],{"class":293},[152,87668,52774],{"class":483},[152,87670,2209],{"class":293},[152,87672,52829],{"class":476},[152,87674,2965],{"class":483},[152,87676,87677,87679,87681,87683,87685,87687],{"class":281,"line":1027},[152,87678,56032],{"class":293},[152,87680,52774],{"class":483},[152,87682,2000],{"class":293},[152,87684,3689],{"class":293},[152,87686,52829],{"class":476},[152,87688,2965],{"class":483},[152,87690,87691,87693,87695,87697],{"class":281,"line":1037},[152,87692,56096],{"class":293},[152,87694,52774],{"class":483},[152,87696,56101],{"class":293},[152,87698,2965],{"class":483},[152,87700,87701,87703,87705,87707,87709],{"class":281,"line":1044},[152,87702,56259],{"class":293},[152,87704,52774],{"class":483},[152,87706,2508],{"class":293},[152,87708,52829],{"class":476},[152,87710,2965],{"class":483},[152,87712,87713],{"class":281,"line":1049},[152,87714,3838],{"class":483},[152,87716,87717],{"class":281,"line":1054},[152,87718,307],{"emptyLinePlaceholder":306},[152,87720,87721,87723,87725,87727],{"class":281,"line":1065},[152,87722,87487],{"class":285},[152,87724,87660],{"class":285},[152,87726,4675],{"class":52637},[152,87728,17187],{"class":483},[152,87730,87731,87734,87736,87738],{"class":281,"line":1074},[152,87732,87733],{"class":293},"      font-style",[152,87735,52774],{"class":483},[152,87737,65178],{"class":293},[152,87739,2965],{"class":483},[152,87741,87742,87744,87746,87748],{"class":281,"line":1084},[152,87743,58753],{"class":293},[152,87745,52774],{"class":483},[152,87747,63407],{"class":293},[152,87749,2965],{"class":483},[152,87751,87752,87754,87756,87758],{"class":281,"line":1091},[152,87753,56096],{"class":293},[152,87755,52774],{"class":483},[152,87757,56168],{"class":293},[152,87759,2965],{"class":483},[152,87761,87762,87765,87767,87769,87771],{"class":281,"line":1096},[152,87763,87764],{"class":293},"      right",[152,87766,52774],{"class":483},[152,87768,2383],{"class":293},[152,87770,52829],{"class":476},[152,87772,2965],{"class":483},[152,87774,87775,87777,87779,87782,87784],{"class":281,"line":1101},[152,87776,56284],{"class":293},[152,87778,52774],{"class":483},[152,87780,87781],{"class":293},"-2",[152,87783,52829],{"class":476},[152,87785,2965],{"class":483},[152,87787,87788,87790,87792,87794],{"class":281,"line":1112},[152,87789,63362],{"class":293},[152,87791,52774],{"class":483},[152,87793,63367],{"class":293},[152,87795,2965],{"class":483},[152,87797,87798],{"class":281,"line":1121},[152,87799,3838],{"class":483},[152,87801,87802],{"class":281,"line":1131},[152,87803,307],{"emptyLinePlaceholder":306},[152,87805,87806,87808,87811],{"class":281,"line":1138},[152,87807,87487],{"class":285},[152,87809,87810],{"class":285}," .body",[152,87812,17187],{"class":483},[152,87814,87815,87817,87819,87821],{"class":281,"line":1143},[152,87816,58623],{"class":293},[152,87818,52774],{"class":483},[152,87820,52929],{"class":293},[152,87822,2965],{"class":483},[152,87824,87825,87827,87829,87831,87833],{"class":281,"line":1148},[152,87826,56032],{"class":293},[152,87828,52774],{"class":483},[152,87830,2254],{"class":293},[152,87832,52829],{"class":476},[152,87834,2965],{"class":483},[152,87836,87837],{"class":281,"line":1159},[152,87838,3838],{"class":483},[152,87840,87841],{"class":281,"line":1168},[152,87842,307],{"emptyLinePlaceholder":306},[152,87844,87845,87847,87850],{"class":281,"line":1178},[152,87846,87487],{"class":285},[152,87848,87849],{"class":285}," .footer",[152,87851,17187],{"class":483},[152,87853,87854,87856,87858,87860],{"class":281,"line":1185},[152,87855,56346],{"class":293},[152,87857,52774],{"class":483},[152,87859,52814],{"class":293},[152,87861,2965],{"class":483},[152,87863,87864,87866,87868,87870],{"class":281,"line":1190},[152,87865,56357],{"class":293},[152,87867,52774],{"class":483},[152,87869,52917],{"class":293},[152,87871,2965],{"class":483},[152,87873,87874,87876,87878,87880,87882],{"class":281,"line":1195},[152,87875,56032],{"class":293},[152,87877,52774],{"class":483},[152,87879,2254],{"class":293},[152,87881,52829],{"class":476},[152,87883,2965],{"class":483},[152,87885,87886],{"class":281,"line":1206},[152,87887,3838],{"class":483},[152,87889,87890],{"class":281,"line":1215},[152,87891,307],{"emptyLinePlaceholder":306},[152,87893,87894,87896,87898,87900],{"class":281,"line":1225},[152,87895,87487],{"class":285},[152,87897,87849],{"class":285},[152,87899,3070],{"class":52637},[152,87901,17187],{"class":483},[152,87903,87904,87906,87908,87910,87912,87914,87916],{"class":281,"line":1232},[152,87905,56032],{"class":293},[152,87907,52774],{"class":483},[152,87909,1888],{"class":293},[152,87911,52829],{"class":476},[152,87913,3734],{"class":293},[152,87915,52829],{"class":476},[152,87917,2965],{"class":483},[152,87919,87920,87922,87924,87927],{"class":281,"line":1237},[152,87921,63058],{"class":293},[152,87923,52774],{"class":483},[152,87925,87926],{"class":293},"#ccc",[152,87928,2965],{"class":483},[152,87930,87931,87933,87935,87937],{"class":281,"line":1242},[152,87932,65307],{"class":293},[152,87934,52774],{"class":483},[152,87936,56074],{"class":293},[152,87938,2965],{"class":483},[152,87940,87941,87943,87945,87947],{"class":281,"line":1253},[152,87942,58753],{"class":293},[152,87944,52774],{"class":483},[152,87946,62179],{"class":293},[152,87948,2965],{"class":483},[152,87950,87951,87953,87955,87957,87959],{"class":281,"line":1262},[152,87952,56471],{"class":293},[152,87954,52774],{"class":483},[152,87956,1894],{"class":293},[152,87958,52829],{"class":476},[152,87960,2965],{"class":483},[152,87962,87963,87965,87967,87969,87971],{"class":281,"line":1272},[152,87964,63087],{"class":293},[152,87966,52774],{"class":483},[152,87968,2254],{"class":293},[152,87970,52829],{"class":476},[152,87972,2965],{"class":483},[152,87974,87975,87977,87979,87981,87983],{"class":281,"line":1279},[152,87976,56259],{"class":293},[152,87978,52774],{"class":483},[152,87980,2357],{"class":293},[152,87982,52829],{"class":476},[152,87984,2965],{"class":483},[152,87986,87987],{"class":281,"line":1284},[152,87988,3838],{"class":483},[152,87990,87991],{"class":281,"line":1289},[152,87992,307],{"emptyLinePlaceholder":306},[152,87994,87995,87997,87999,88001,88004],{"class":281,"line":1301},[152,87996,87487],{"class":285},[152,87998,87849],{"class":285},[152,88000,3070],{"class":52637},[152,88002,88003],{"class":285},".submit",[152,88005,17187],{"class":483},[152,88007,88008,88010,88012,88015],{"class":281,"line":1310},[152,88009,56221],{"class":293},[152,88011,52774],{"class":483},[152,88013,88014],{"class":293},"#369",[152,88016,2965],{"class":483},[152,88018,88019],{"class":281,"line":1320},[152,88020,3838],{"class":483},[152,88022,88023,88025,88027],{"class":281,"line":1327},[152,88024,53754],{"class":483},[152,88026,1736],{"class":52637},[152,88028,52644],{"class":483},[152,88030,88031,88033,88035],{"class":281,"line":11528},[152,88032,53122],{"class":483},[152,88034,52671],{"class":52637},[152,88036,52644],{"class":483},[152,88038,88039],{"class":281,"line":11536},[152,88040,307],{"emptyLinePlaceholder":306},[152,88042,88043,88045,88047],{"class":281,"line":11541},[152,88044,844],{"class":483},[152,88046,53137],{"class":52637},[152,88048,52644],{"class":483},[152,88050,88051,88053,88055,88057,88059,88062,88065,88067],{"class":281,"line":18219},[152,88052,53481],{"class":483},[152,88054,55224],{"class":52637},[152,88056,16574],{"class":285},[152,88058,1864],{"class":483},[152,88060,88061],{"class":289},"\"delete\"",[152,88063,88064],{"class":483},">删除\u003C\u002F",[152,88066,55224],{"class":52637},[152,88068,52644],{"class":483},[152,88070,88071,88073,88075,88077,88079,88082,88085,88087],{"class":281,"line":18225},[152,88072,53481],{"class":483},[152,88074,55224],{"class":52637},[152,88076,16574],{"class":285},[152,88078,1864],{"class":483},[152,88080,88081],{"class":289},"\"login\"",[152,88083,88084],{"class":483},">登录\u003C\u002F",[152,88086,55224],{"class":52637},[152,88088,52644],{"class":483},[152,88090,88091,88093,88095],{"class":281,"line":18248},[152,88092,53481],{"class":483},[152,88094,53150],{"class":52637},[152,88096,52644],{"class":483},[152,88098,88099],{"class":281,"line":18254},[152,88100,88101],{"class":866},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[152,88103,88104,88106,88109,88111,88113,88115,88117,88119,88122,88124,88126],{"class":281,"line":18277},[152,88105,71421],{"class":476},[152,88107,88108],{"class":285}," Modal",[152,88110,1819],{"class":483},[152,88112,52744],{"class":6858},[152,88114,15180],{"class":476},[152,88116,71267],{"class":289},[152,88118,14051],{"class":483},[152,88120,88121],{"class":6858},"message",[152,88123,15180],{"class":476},[152,88125,71267],{"class":289},[152,88127,14058],{"class":483},[152,88129,88130],{"class":281,"line":18291},[152,88131,88132],{"class":866},"      \u002F\u002F 创建Model 模态框盒子\n",[152,88134,88135],{"class":281,"line":18311},[152,88136,88137],{"class":866},"      \u002F\u002F 1.1 创建div标签\n",[152,88139,88140,88142,88145,88147,88149,88151,88153,88155],{"class":281,"line":18317},[152,88141,71388],{"class":293},[152,88143,88144],{"class":483},".modalBox ",[152,88146,1864],{"class":476},[152,88148,55733],{"class":483},[152,88150,71488],{"class":285},[152,88152,1819],{"class":483},[152,88154,83268],{"class":289},[152,88156,1825],{"class":483},[152,88158,88159],{"class":281,"line":18328},[152,88160,88161],{"class":866},"      \u002F\u002F 1.2 给div 添加类名为model\n",[152,88163,88164,88166,88169,88171],{"class":281,"line":18351},[152,88165,71388],{"class":293},[152,88167,88168],{"class":483},".modalBox.className ",[152,88170,1864],{"class":476},[152,88172,88173],{"class":289}," 'modal'\n",[152,88175,88176],{"class":281,"line":18373},[152,88177,88178],{"class":866},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[152,88180,88181,88183,88186,88188],{"class":281,"line":18378},[152,88182,71388],{"class":293},[152,88184,88185],{"class":483},".modalBox.innerHTML ",[152,88187,1864],{"class":476},[152,88189,71505],{"class":289},[152,88191,88192,88195,88197],{"class":281,"line":18384},[152,88193,88194],{"class":289},"        \u003Cdiv class=\"header\">${",[152,88196,52744],{"class":483},[152,88198,88199],{"class":289},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[152,88201,88202,88205,88207],{"class":281,"line":18398},[152,88203,88204],{"class":289},"        \u003Cdiv class=\"body\">${",[152,88206,88121],{"class":483},[152,88208,88209],{"class":289},"}\u003C\u002Fdiv>\n",[152,88211,88212],{"class":281,"line":18411},[152,88213,88214],{"class":289},"      `\n",[152,88216,88217],{"class":281,"line":18416},[152,88218,88219],{"class":866},"      \u002F\u002F console.log(this.modalBox)\n",[152,88221,88222],{"class":281,"line":18430},[152,88223,3838],{"class":483},[152,88225,88226],{"class":281,"line":18435},[152,88227,88228],{"class":866},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[152,88230,88231],{"class":281,"line":18441},[152,88232,88233],{"class":866},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[152,88235,88236],{"class":281,"line":18446},[152,88237,88238],{"class":866},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[152,88240,88241,88244,88246,88248,88250,88253,88255,88257],{"class":281,"line":18460},[152,88242,88243],{"class":293},"    Modal",[152,88245,2366],{"class":483},[152,88247,86916],{"class":293},[152,88249,2366],{"class":483},[152,88251,88252],{"class":285},"open",[152,88254,15180],{"class":476},[152,88256,60255],{"class":476},[152,88258,55789],{"class":483},[152,88260,88261],{"class":281,"line":18465},[152,88262,88263],{"class":866},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[152,88265,88266,88268,88271,88273,88275,88277,88279,88282],{"class":281,"line":18470},[152,88267,59565],{"class":476},[152,88269,88270],{"class":293}," box",[152,88272,15180],{"class":476},[152,88274,55733],{"class":483},[152,88276,55736],{"class":285},[152,88278,1819],{"class":483},[152,88280,88281],{"class":289},"'.modal'",[152,88283,1825],{"class":483},[152,88285,88286],{"class":281,"line":18484},[152,88287,88288],{"class":866},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[152,88290,88291,88294,88296,88299,88301],{"class":281,"line":18496},[152,88292,88293],{"class":483},"      box ",[152,88295,3375],{"class":476},[152,88297,88298],{"class":483}," box.",[152,88300,58343],{"class":285},[152,88302,3627],{"class":483},[152,88304,88305],{"class":281,"line":18501},[152,88306,88307],{"class":866},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[152,88309,88310],{"class":281,"line":18514},[152,88311,88312],{"class":866},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[152,88314,88315],{"class":281,"line":18519},[152,88316,88317],{"class":866},"      \u002F\u002F append可以增加对象\n",[152,88319,88320,88323,88326,88328,88331],{"class":281,"line":18524},[152,88321,88322],{"class":483},"      document.body.",[152,88324,88325],{"class":285},"append",[152,88327,1819],{"class":483},[152,88329,88330],{"class":293},"this",[152,88332,88333],{"class":483},".modalBox)\n",[152,88335,88336],{"class":281,"line":18529},[152,88337,307],{"emptyLinePlaceholder":306},[152,88339,88340],{"class":281,"line":18542},[152,88341,88342],{"class":866},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[152,88344,88345,88347,88350,88352,88354,88357,88359,88361,88363,88365,88368,88370],{"class":281,"line":18547},[152,88346,71388],{"class":293},[152,88348,88349],{"class":483},".modalBox.",[152,88351,55736],{"class":285},[152,88353,1819],{"class":483},[152,88355,88356],{"class":289},"'i'",[152,88358,32163],{"class":483},[152,88360,59150],{"class":285},[152,88362,1819],{"class":483},[152,88364,59155],{"class":289},[152,88366,88367],{"class":483},", () ",[152,88369,86059],{"class":476},[152,88371,17187],{"class":483},[152,88373,88374],{"class":281,"line":33970},[152,88375,88376],{"class":866},"        \u002F\u002F 这个地方需要用到箭头函数\n",[152,88378,88379],{"class":281,"line":33976},[152,88380,88381],{"class":866},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[152,88383,88384],{"class":281,"line":33982},[152,88385,88386],{"class":866},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[152,88388,88389,88391,88393,88396],{"class":281,"line":33988},[152,88390,66063],{"class":293},[152,88392,2366],{"class":483},[152,88394,88395],{"class":285},"close",[152,88397,3627],{"class":483},[152,88399,88400],{"class":281,"line":33994},[152,88401,66152],{"class":483},[152,88403,88404],{"class":281,"line":34005},[152,88405,3838],{"class":483},[152,88407,88408],{"class":281,"line":34011},[152,88409,307],{"emptyLinePlaceholder":306},[152,88411,88412],{"class":281,"line":34031},[152,88413,88414],{"class":866},"    \u002F\u002F 测试一下 点击 删除按钮\n",[152,88416,88417,88419,88421,88423,88426,88428,88430,88432,88434,88436,88438],{"class":281,"line":34037},[152,88418,53744],{"class":483},[152,88420,55736],{"class":285},[152,88422,1819],{"class":483},[152,88424,88425],{"class":289},"'#delete'",[152,88427,32163],{"class":483},[152,88429,59150],{"class":285},[152,88431,1819],{"class":483},[152,88433,59155],{"class":289},[152,88435,88367],{"class":483},[152,88437,86059],{"class":476},[152,88439,17187],{"class":483},[152,88441,88442],{"class":281,"line":34048},[152,88443,88444],{"class":866},"      \u002F\u002F 先调用Model构造函数\n",[152,88446,88447,88449,88452,88454,88456,88458,88460,88463,88465,88468],{"class":281,"line":34054},[152,88448,59565],{"class":476},[152,88450,88451],{"class":293}," del",[152,88453,15180],{"class":476},[152,88455,13194],{"class":476},[152,88457,88108],{"class":285},[152,88459,1819],{"class":483},[152,88461,88462],{"class":289},"'温馨的提示'",[152,88464,14051],{"class":483},[152,88466,88467],{"class":289},"'您没有删除权限操作'",[152,88469,1825],{"class":483},[152,88471,88472],{"class":281,"line":34060},[152,88473,88474],{"class":866},"      \u002F\u002F 实例对象调用open方法\n",[152,88476,88477,88480,88482],{"class":281,"line":34066},[152,88478,88479],{"class":483},"      del.",[152,88481,88252],{"class":285},[152,88483,3627],{"class":483},[152,88485,88486],{"class":281,"line":34072},[152,88487,34798],{"class":483},[152,88489,88490],{"class":281,"line":34078},[152,88491,88492],{"class":866},"    \u002F\u002F 测试一下 点击 登录按钮\n",[152,88494,88495,88497,88499,88501,88504,88506,88508,88510,88512,88514,88516],{"class":281,"line":34084},[152,88496,53744],{"class":483},[152,88498,55736],{"class":285},[152,88500,1819],{"class":483},[152,88502,88503],{"class":289},"'#login'",[152,88505,32163],{"class":483},[152,88507,59150],{"class":285},[152,88509,1819],{"class":483},[152,88511,59155],{"class":289},[152,88513,88367],{"class":483},[152,88515,86059],{"class":476},[152,88517,17187],{"class":483},[152,88519,88520],{"class":281,"line":34090},[152,88521,88444],{"class":866},[152,88523,88524,88526,88529,88531,88533,88535,88537,88540,88542,88545],{"class":281,"line":34110},[152,88525,59565],{"class":476},[152,88527,88528],{"class":293}," log",[152,88530,15180],{"class":476},[152,88532,13194],{"class":476},[152,88534,88108],{"class":285},[152,88536,1819],{"class":483},[152,88538,88539],{"class":289},"'友情提示'",[152,88541,14051],{"class":483},[152,88543,88544],{"class":289},"'您还没有登录呢'",[152,88546,1825],{"class":483},[152,88548,88549],{"class":281,"line":34116},[152,88550,88474],{"class":866},[152,88552,88553,88556,88558],{"class":281,"line":34132},[152,88554,88555],{"class":483},"      log.",[152,88557,88252],{"class":285},[152,88559,3627],{"class":483},[152,88561,88562],{"class":281,"line":34138},[152,88563,34798],{"class":483},[152,88565,88566],{"class":281,"line":34152},[152,88567,88568],{"class":866},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[152,88570,88571,88573,88575,88577,88579,88581,88583,88585],{"class":281,"line":34158},[152,88572,88243],{"class":293},[152,88574,2366],{"class":483},[152,88576,86916],{"class":293},[152,88578,2366],{"class":483},[152,88580,88395],{"class":285},[152,88582,15180],{"class":476},[152,88584,60255],{"class":476},[152,88586,55789],{"class":483},[152,88588,88589,88591,88593,88595],{"class":281,"line":34173},[152,88590,71388],{"class":293},[152,88592,88349],{"class":483},[152,88594,58343],{"class":285},[152,88596,3627],{"class":483},[152,88598,88599],{"class":281,"line":34179},[152,88600,3838],{"class":483},[152,88602,88603,88605,88607],{"class":281,"line":34188},[152,88604,53754],{"class":483},[152,88606,53150],{"class":52637},[152,88608,52644],{"class":483},[152,88610,88611,88613,88615],{"class":281,"line":34194},[152,88612,53122],{"class":483},[152,88614,53137],{"class":52637},[152,88616,52644],{"class":483},[152,88618,88619],{"class":281,"line":34203},[152,88620,307],{"emptyLinePlaceholder":306},[152,88622,88623,88625,88627],{"class":281,"line":34209},[152,88624,53122],{"class":483},[152,88626,51972],{"class":52637},[152,88628,52644],{"class":483},[19,88630,88631],{},[401,88632],{"alt":275,"src":88633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[1760,88635,88637],{"id":88636},"_414-深浅拷贝","4.14 深浅拷贝",[14,88639,88641],{"id":88640},"_4141-浅拷贝","4.14.1 浅拷贝",[19,88643,88644],{},[401,88645],{"alt":275,"src":88646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,88648,88649],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,88651,88652],{},[401,88653],{"alt":275,"src":88654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,88656,88657],{},[401,88658],{"alt":275,"src":88659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,88661,88662],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,88664,88665],{},[401,88666],{"alt":275,"src":88667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,88669,12948],{},[19,88671,88672],{},[401,88673],{"alt":275,"src":88674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[14,88676,88678],{"id":88677},"_4142-深拷贝","4.14.2 深拷贝",[19,88680,88681],{},"深拷贝：拷贝的是对象，不是地址",[19,88683,88684],{},"常用的三种方法：",[416,88686,88687,88690,88693],{},[419,88688,88689],{},"通过递归实现深拷贝",[419,88691,88692],{},"lodash\u002FcloneDeep",[419,88694,88695],{},"通过JSON.stringify()实现",[262,88697,88699],{"id":88698},"_41421-递归函数","4.14.2.1 递归函数",[19,88701,88702],{},[401,88703],{"alt":275,"src":88704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[416,88706,88707],{},[419,88708,88709],{},"死递归占溢出：",[270,88711,88713],{"className":54404,"code":88712,"language":54406,"meta":275,"style":275},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[277,88714,88715,88723,88731,88735,88740,88744,88749,88757],{"__ignoreMap":275},[152,88716,88717,88719,88721],{"class":281,"line":282},[152,88718,844],{"class":483},[152,88720,53137],{"class":52637},[152,88722,52644],{"class":483},[152,88724,88725,88727,88729],{"class":281,"line":303},[152,88726,53481],{"class":483},[152,88728,53150],{"class":52637},[152,88730,52644],{"class":483},[152,88732,88733],{"class":281,"line":310},[152,88734,78480],{"class":483},[152,88736,88737],{"class":281,"line":324},[152,88738,88739],{"class":483},"      fn()\n",[152,88741,88742],{"class":281,"line":329},[152,88743,3838],{"class":483},[152,88745,88746],{"class":281,"line":343},[152,88747,88748],{"class":483},"    fn()\n",[152,88750,88751,88753,88755],{"class":281,"line":348},[152,88752,53754],{"class":483},[152,88754,53150],{"class":52637},[152,88756,52644],{"class":483},[152,88758,88759,88761,88763],{"class":281,"line":362},[152,88760,53122],{"class":483},[152,88762,53137],{"class":52637},[152,88764,52644],{"class":483},[416,88766,88767],{"start":303},[419,88768,88769],{},"递归函数要加判断条件：",[19,88771,88772],{},[401,88773],{"alt":275,"src":88774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[416,88776,88777],{"start":310},[419,88778,88779],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[270,88781,88783],{"className":51970,"code":88782,"language":51972,"meta":275,"style":275},"\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",[277,88784,88785,88795,88809,88813,88821,88835,88855,88867,88875,88879,88887,88899,88907,88915,88940,88952,88956,88963,88971,88979,88983],{"__ignoreMap":275},[152,88786,88787,88789,88791,88793],{"class":281,"line":282},[152,88788,52634],{"class":483},[152,88790,52638],{"class":52637},[152,88792,52641],{"class":285},[152,88794,52644],{"class":483},[152,88796,88797,88799,88801,88803,88805,88807],{"class":281,"line":303},[152,88798,844],{"class":483},[152,88800,51972],{"class":52637},[152,88802,52653],{"class":285},[152,88804,1864],{"class":483},[152,88806,52658],{"class":289},[152,88808,52644],{"class":483},[152,88810,88811],{"class":281,"line":310},[152,88812,307],{"emptyLinePlaceholder":306},[152,88814,88815,88817,88819],{"class":281,"line":324},[152,88816,844],{"class":483},[152,88818,52671],{"class":52637},[152,88820,52644],{"class":483},[152,88822,88823,88825,88827,88829,88831,88833],{"class":281,"line":329},[152,88824,53481],{"class":483},[152,88826,52681],{"class":52637},[152,88828,52684],{"class":285},[152,88830,1864],{"class":483},[152,88832,52689],{"class":289},[152,88834,52644],{"class":483},[152,88836,88837,88839,88841,88843,88845,88847,88849,88851,88853],{"class":281,"line":343},[152,88838,53481],{"class":483},[152,88840,52681],{"class":52637},[152,88842,16535],{"class":285},[152,88844,1864],{"class":483},[152,88846,52728],{"class":289},[152,88848,52708],{"class":285},[152,88850,1864],{"class":483},[152,88852,52735],{"class":289},[152,88854,52644],{"class":483},[152,88856,88857,88859,88861,88863,88865],{"class":281,"line":348},[152,88858,53481],{"class":483},[152,88860,52744],{"class":52637},[152,88862,52747],{"class":483},[152,88864,52744],{"class":52637},[152,88866,52644],{"class":483},[152,88868,88869,88871,88873],{"class":281,"line":362},[152,88870,53122],{"class":483},[152,88872,52671],{"class":52637},[152,88874,52644],{"class":483},[152,88876,88877],{"class":281,"line":367},[152,88878,307],{"emptyLinePlaceholder":306},[152,88880,88881,88883,88885],{"class":281,"line":381},[152,88882,844],{"class":483},[152,88884,53137],{"class":52637},[152,88886,52644],{"class":483},[152,88888,88889,88891,88893,88895,88897],{"class":281,"line":386},[152,88890,53481],{"class":483},[152,88892,52948],{"class":52637},[152,88894,56651],{"class":483},[152,88896,52948],{"class":52637},[152,88898,52644],{"class":483},[152,88900,88901,88903,88905],{"class":281,"line":932},[152,88902,53481],{"class":483},[152,88904,53150],{"class":52637},[152,88906,52644],{"class":483},[152,88908,88909,88911,88913],{"class":281,"line":942},[152,88910,71421],{"class":476},[152,88912,75110],{"class":285},[152,88914,12469],{"class":483},[152,88916,88917,88919,88921,88923,88925,88927,88929,88931,88933,88935,88938],{"class":281,"line":949},[152,88918,57108],{"class":483},[152,88920,55736],{"class":285},[152,88922,1819],{"class":483},[152,88924,83268],{"class":289},[152,88926,75586],{"class":483},[152,88928,1864],{"class":476},[152,88930,13194],{"class":476},[152,88932,75126],{"class":285},[152,88934,18876],{"class":483},[152,88936,88937],{"class":285},"toLocaleString",[152,88939,3627],{"class":483},[152,88941,88942,88945,88948,88950],{"class":281,"line":954},[152,88943,88944],{"class":285},"      setTimeout",[152,88946,88947],{"class":483},"(getTime, ",[152,88949,8052],{"class":293},[152,88951,1825],{"class":483},[152,88953,88954],{"class":281,"line":959},[152,88955,3838],{"class":483},[152,88957,88958,88961],{"class":281,"line":970},[152,88959,88960],{"class":285},"    getTime",[152,88962,3627],{"class":483},[152,88964,88965,88967,88969],{"class":281,"line":979},[152,88966,53754],{"class":483},[152,88968,53150],{"class":52637},[152,88970,52644],{"class":483},[152,88972,88973,88975,88977],{"class":281,"line":989},[152,88974,53122],{"class":483},[152,88976,53137],{"class":52637},[152,88978,52644],{"class":483},[152,88980,88981],{"class":281,"line":996},[152,88982,307],{"emptyLinePlaceholder":306},[152,88984,88985,88987,88989],{"class":281,"line":1001},[152,88986,53122],{"class":483},[152,88988,51972],{"class":52637},[152,88990,52644],{"class":483},[19,88992,88993],{},[401,88994],{"alt":275,"src":88995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[416,88997,88998],{"start":324},[419,88999,88689],{},[19,89001,89002],{},[401,89003],{"alt":275,"src":89004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89006,89007],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89009,40526],{},[19,89011,89012],{},"这个是简易版的递归函数深拷贝",[19,89014,89015],{},"一定要注意先数组再对象，因为万物皆可对象",[270,89017,89019],{"className":51970,"code":89018,"language":51972,"meta":275,"style":275},"\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",[277,89020,89021,89031,89045,89049,89057,89071,89091,89103,89111,89115,89123,89131,89141,89150,89158,89174,89178,89186,89190,89194,89206,89211,89230,89246,89251,89256,89261,89276,89281,89286,89295,89303,89320,89328,89334,89342,89347,89352,89361,89365,89369,89373,89384,89393,89403,89417,89427,89435,89443,89451,89455],{"__ignoreMap":275},[152,89022,89023,89025,89027,89029],{"class":281,"line":282},[152,89024,52634],{"class":483},[152,89026,52638],{"class":52637},[152,89028,52641],{"class":285},[152,89030,52644],{"class":483},[152,89032,89033,89035,89037,89039,89041,89043],{"class":281,"line":303},[152,89034,844],{"class":483},[152,89036,51972],{"class":52637},[152,89038,52653],{"class":285},[152,89040,1864],{"class":483},[152,89042,52658],{"class":289},[152,89044,52644],{"class":483},[152,89046,89047],{"class":281,"line":310},[152,89048,307],{"emptyLinePlaceholder":306},[152,89050,89051,89053,89055],{"class":281,"line":324},[152,89052,844],{"class":483},[152,89054,52671],{"class":52637},[152,89056,52644],{"class":483},[152,89058,89059,89061,89063,89065,89067,89069],{"class":281,"line":329},[152,89060,53481],{"class":483},[152,89062,52681],{"class":52637},[152,89064,52684],{"class":285},[152,89066,1864],{"class":483},[152,89068,52689],{"class":289},[152,89070,52644],{"class":483},[152,89072,89073,89075,89077,89079,89081,89083,89085,89087,89089],{"class":281,"line":343},[152,89074,53481],{"class":483},[152,89076,52681],{"class":52637},[152,89078,16535],{"class":285},[152,89080,1864],{"class":483},[152,89082,52728],{"class":289},[152,89084,52708],{"class":285},[152,89086,1864],{"class":483},[152,89088,52735],{"class":289},[152,89090,52644],{"class":483},[152,89092,89093,89095,89097,89099,89101],{"class":281,"line":348},[152,89094,53481],{"class":483},[152,89096,52744],{"class":52637},[152,89098,52747],{"class":483},[152,89100,52744],{"class":52637},[152,89102,52644],{"class":483},[152,89104,89105,89107,89109],{"class":281,"line":362},[152,89106,53122],{"class":483},[152,89108,52671],{"class":52637},[152,89110,52644],{"class":483},[152,89112,89113],{"class":281,"line":367},[152,89114,307],{"emptyLinePlaceholder":306},[152,89116,89117,89119,89121],{"class":281,"line":381},[152,89118,844],{"class":483},[152,89120,53137],{"class":52637},[152,89122,52644],{"class":483},[152,89124,89125,89127,89129],{"class":281,"line":386},[152,89126,53481],{"class":483},[152,89128,53150],{"class":52637},[152,89130,52644],{"class":483},[152,89132,89133,89135,89137,89139],{"class":281,"line":932},[152,89134,12837],{"class":476},[152,89136,71308],{"class":293},[152,89138,15180],{"class":476},[152,89140,17187],{"class":483},[152,89142,89143,89145,89148],{"class":281,"line":942},[152,89144,72953],{"class":483},[152,89146,89147],{"class":289},"'pink'",[152,89149,32803],{"class":483},[152,89151,89152,89154,89156],{"class":281,"line":949},[152,89153,72963],{"class":483},[152,89155,2458],{"class":293},[152,89157,32803],{"class":483},[152,89159,89160,89163,89166,89168,89171],{"class":281,"line":954},[152,89161,89162],{"class":483},"      hobby: [",[152,89164,89165],{"class":289},"'乒乓球'",[152,89167,14051],{"class":483},[152,89169,89170],{"class":289},"'足球'",[152,89172,89173],{"class":483},"],\n",[152,89175,89176],{"class":281,"line":959},[152,89177,79209],{"class":483},[152,89179,89180,89183],{"class":281,"line":970},[152,89181,89182],{"class":483},"        baby: ",[152,89184,89185],{"class":289},"'小pink'\n",[152,89187,89188],{"class":281,"line":979},[152,89189,53735],{"class":483},[152,89191,89192],{"class":281,"line":989},[152,89193,3838],{"class":483},[152,89195,89196,89198,89201,89203],{"class":281,"line":996},[152,89197,12837],{"class":476},[152,89199,89200],{"class":293}," o",[152,89202,15180],{"class":476},[152,89204,89205],{"class":483}," {}\n",[152,89207,89208],{"class":281,"line":1001},[152,89209,89210],{"class":866},"    \u002F\u002F 拷贝函数\n",[152,89212,89213,89215,89218,89220,89223,89225,89228],{"class":281,"line":1006},[152,89214,71421],{"class":476},[152,89216,89217],{"class":285}," deepCopy",[152,89219,1819],{"class":483},[152,89221,89222],{"class":6858},"newObj",[152,89224,14051],{"class":483},[152,89226,89227],{"class":6858},"oldObj",[152,89229,14058],{"class":483},[152,89231,89232,89234,89236,89238,89241,89243],{"class":281,"line":1018},[152,89233,53621],{"class":476},[152,89235,3322],{"class":483},[152,89237,53184],{"class":476},[152,89239,89240],{"class":483}," k ",[152,89242,27653],{"class":476},[152,89244,89245],{"class":483}," oldObj) {\n",[152,89247,89248],{"class":281,"line":1027},[152,89249,89250],{"class":866},"        \u002F\u002F 处理数组的问题\n",[152,89252,89253],{"class":281,"line":1037},[152,89254,89255],{"class":866},"        \u002F\u002F 判断是否属于数组\n",[152,89257,89258],{"class":281,"line":1044},[152,89259,89260],{"class":866},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[152,89262,89263,89265,89268,89271,89274],{"class":281,"line":1049},[152,89264,4147],{"class":476},[152,89266,89267],{"class":483}," (oldObj[k] ",[152,89269,89270],{"class":476},"instanceof",[152,89272,89273],{"class":285}," Array",[152,89275,14058],{"class":483},[152,89277,89278],{"class":281,"line":1054},[152,89279,89280],{"class":866},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[152,89282,89283],{"class":281,"line":1065},[152,89284,89285],{"class":866},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[152,89287,89288,89291,89293],{"class":281,"line":1074},[152,89289,89290],{"class":483},"          newObj[k] ",[152,89292,1864],{"class":476},[152,89294,53175],{"class":483},[152,89296,89297,89300],{"class":281,"line":1084},[152,89298,89299],{"class":285},"          deepCopy",[152,89301,89302],{"class":483},"(newObj[k], oldObj[k])\n",[152,89304,89305,89307,89309,89311,89313,89315,89318],{"class":281,"line":1091},[152,89306,81417],{"class":483},[152,89308,3361],{"class":476},[152,89310,3364],{"class":476},[152,89312,89267],{"class":483},[152,89314,89270],{"class":476},[152,89316,89317],{"class":285}," Object",[152,89319,14058],{"class":483},[152,89321,89322,89324,89326],{"class":281,"line":1096},[152,89323,89290],{"class":483},[152,89325,1864],{"class":476},[152,89327,89205],{"class":483},[152,89329,89330,89332],{"class":281,"line":1101},[152,89331,89299],{"class":285},[152,89333,89302],{"class":483},[152,89335,89336,89338,89340],{"class":281,"line":1112},[152,89337,81417],{"class":483},[152,89339,3361],{"class":476},[152,89341,17187],{"class":483},[152,89343,89344],{"class":281,"line":1121},[152,89345,89346],{"class":866},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[152,89348,89349],{"class":281,"line":1131},[152,89350,89351],{"class":866},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[152,89353,89354,89356,89358],{"class":281,"line":1138},[152,89355,89290],{"class":483},[152,89357,1864],{"class":476},[152,89359,89360],{"class":483}," oldObj[k]\n",[152,89362,89363],{"class":281,"line":1143},[152,89364,4179],{"class":483},[152,89366,89367],{"class":281,"line":1148},[152,89368,53735],{"class":483},[152,89370,89371],{"class":281,"line":1159},[152,89372,3838],{"class":483},[152,89374,89375,89378,89381],{"class":281,"line":1168},[152,89376,89377],{"class":285},"    deepCopy",[152,89379,89380],{"class":483},"(o, obj) ",[152,89382,89383],{"class":866},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[152,89385,89386,89388,89390],{"class":281,"line":1178},[152,89387,75090],{"class":483},[152,89389,59584],{"class":285},[152,89391,89392],{"class":483},"(o)\n",[152,89394,89395,89398,89400],{"class":281,"line":1185},[152,89396,89397],{"class":483},"    o.age ",[152,89399,1864],{"class":476},[152,89401,89402],{"class":293}," 20\n",[152,89404,89405,89408,89410,89412,89414],{"class":281,"line":1190},[152,89406,89407],{"class":483},"    o.hobby[",[152,89409,2000],{"class":293},[152,89411,6085],{"class":483},[152,89413,1864],{"class":476},[152,89415,89416],{"class":289}," '篮球'\n",[152,89418,89419,89422,89424],{"class":281,"line":1195},[152,89420,89421],{"class":483},"    o.family ",[152,89423,1864],{"class":476},[152,89425,89426],{"class":289}," '老pink'\n",[152,89428,89429,89431,89433],{"class":281,"line":1206},[152,89430,75090],{"class":483},[152,89432,59584],{"class":285},[152,89434,71373],{"class":483},[152,89436,89437,89439,89441],{"class":281,"line":1215},[152,89438,53754],{"class":483},[152,89440,53150],{"class":52637},[152,89442,52644],{"class":483},[152,89444,89445,89447,89449],{"class":281,"line":1225},[152,89446,53122],{"class":483},[152,89448,53137],{"class":52637},[152,89450,52644],{"class":483},[152,89452,89453],{"class":281,"line":1232},[152,89454,307],{"emptyLinePlaceholder":306},[152,89456,89457,89459,89461],{"class":281,"line":1237},[152,89458,53122],{"class":483},[152,89460,51972],{"class":52637},[152,89462,52644],{"class":483},[19,89464,89465],{},[401,89466],{"alt":275,"src":89467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[262,89469,89471,89472],{"id":89470},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[694,89473,89474],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89476,89477],{},[69,89478,89479],{"href":89479,"rel":89480},"https:\u002F\u002Fwww.lodashjs.com\u002F",[245],[19,89482,89483],{},"lodash里边的方法都要加上一个下划线_",[19,89485,89486],{},"_.cloneDeep()",[270,89488,89490],{"className":51970,"code":89489,"language":51972,"meta":275,"style":275},"\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",[277,89491,89492,89502,89516,89520,89528,89542,89562,89574,89582,89586,89594,89599,89618,89626,89636,89644,89652,89664,89668,89674,89678,89682,89698,89706,89715,89723,89731,89739,89743],{"__ignoreMap":275},[152,89493,89494,89496,89498,89500],{"class":281,"line":282},[152,89495,52634],{"class":483},[152,89497,52638],{"class":52637},[152,89499,52641],{"class":285},[152,89501,52644],{"class":483},[152,89503,89504,89506,89508,89510,89512,89514],{"class":281,"line":303},[152,89505,844],{"class":483},[152,89507,51972],{"class":52637},[152,89509,52653],{"class":285},[152,89511,1864],{"class":483},[152,89513,52658],{"class":289},[152,89515,52644],{"class":483},[152,89517,89518],{"class":281,"line":310},[152,89519,307],{"emptyLinePlaceholder":306},[152,89521,89522,89524,89526],{"class":281,"line":324},[152,89523,844],{"class":483},[152,89525,52671],{"class":52637},[152,89527,52644],{"class":483},[152,89529,89530,89532,89534,89536,89538,89540],{"class":281,"line":329},[152,89531,53481],{"class":483},[152,89533,52681],{"class":52637},[152,89535,52684],{"class":285},[152,89537,1864],{"class":483},[152,89539,52689],{"class":289},[152,89541,52644],{"class":483},[152,89543,89544,89546,89548,89550,89552,89554,89556,89558,89560],{"class":281,"line":343},[152,89545,53481],{"class":483},[152,89547,52681],{"class":52637},[152,89549,16535],{"class":285},[152,89551,1864],{"class":483},[152,89553,52728],{"class":289},[152,89555,52708],{"class":285},[152,89557,1864],{"class":483},[152,89559,52735],{"class":289},[152,89561,52644],{"class":483},[152,89563,89564,89566,89568,89570,89572],{"class":281,"line":348},[152,89565,53481],{"class":483},[152,89567,52744],{"class":52637},[152,89569,52747],{"class":483},[152,89571,52744],{"class":52637},[152,89573,52644],{"class":483},[152,89575,89576,89578,89580],{"class":281,"line":362},[152,89577,53122],{"class":483},[152,89579,52671],{"class":52637},[152,89581,52644],{"class":483},[152,89583,89584],{"class":281,"line":367},[152,89585,307],{"emptyLinePlaceholder":306},[152,89587,89588,89590,89592],{"class":281,"line":381},[152,89589,844],{"class":483},[152,89591,53137],{"class":52637},[152,89593,52644],{"class":483},[152,89595,89596],{"class":281,"line":386},[152,89597,89598],{"class":866},"  \u003C!-- 先引用这个库 -->\n",[152,89600,89601,89603,89605,89607,89609,89612,89614,89616],{"class":281,"line":932},[152,89602,53481],{"class":483},[152,89604,53150],{"class":52637},[152,89606,56576],{"class":285},[152,89608,1864],{"class":483},[152,89610,89611],{"class":289},"\"lodash.min.js\"",[152,89613,56651],{"class":483},[152,89615,53150],{"class":52637},[152,89617,52644],{"class":483},[152,89619,89620,89622,89624],{"class":281,"line":942},[152,89621,53481],{"class":483},[152,89623,53150],{"class":52637},[152,89625,52644],{"class":483},[152,89627,89628,89630,89632,89634],{"class":281,"line":949},[152,89629,12837],{"class":476},[152,89631,71308],{"class":293},[152,89633,15180],{"class":476},[152,89635,17187],{"class":483},[152,89637,89638,89640,89642],{"class":281,"line":954},[152,89639,72953],{"class":483},[152,89641,89147],{"class":289},[152,89643,32803],{"class":483},[152,89645,89646,89648,89650],{"class":281,"line":959},[152,89647,72963],{"class":483},[152,89649,2458],{"class":293},[152,89651,32803],{"class":483},[152,89653,89654,89656,89658,89660,89662],{"class":281,"line":970},[152,89655,89162],{"class":483},[152,89657,89165],{"class":289},[152,89659,14051],{"class":483},[152,89661,89170],{"class":289},[152,89663,89173],{"class":483},[152,89665,89666],{"class":281,"line":979},[152,89667,79209],{"class":483},[152,89669,89670,89672],{"class":281,"line":989},[152,89671,89182],{"class":483},[152,89673,89185],{"class":289},[152,89675,89676],{"class":281,"line":996},[152,89677,53735],{"class":483},[152,89679,89680],{"class":281,"line":1001},[152,89681,3838],{"class":483},[152,89683,89684,89686,89688,89690,89693,89696],{"class":281,"line":1006},[152,89685,12837],{"class":476},[152,89687,89200],{"class":293},[152,89689,15180],{"class":476},[152,89691,89692],{"class":483}," _.",[152,89694,89695],{"class":285},"cloneDeep",[152,89697,71373],{"class":483},[152,89699,89700,89702,89704],{"class":281,"line":1018},[152,89701,75090],{"class":483},[152,89703,59584],{"class":285},[152,89705,89392],{"class":483},[152,89707,89708,89711,89713],{"class":281,"line":1027},[152,89709,89710],{"class":483},"    o.family.baby ",[152,89712,1864],{"class":476},[152,89714,89426],{"class":289},[152,89716,89717,89719,89721],{"class":281,"line":1037},[152,89718,75090],{"class":483},[152,89720,59584],{"class":285},[152,89722,71373],{"class":483},[152,89724,89725,89727,89729],{"class":281,"line":1044},[152,89726,53754],{"class":483},[152,89728,53150],{"class":52637},[152,89730,52644],{"class":483},[152,89732,89733,89735,89737],{"class":281,"line":1049},[152,89734,53122],{"class":483},[152,89736,53137],{"class":52637},[152,89738,52644],{"class":483},[152,89740,89741],{"class":281,"line":1054},[152,89742,307],{"emptyLinePlaceholder":306},[152,89744,89745,89747,89749],{"class":281,"line":1065},[152,89746,53122],{"class":483},[152,89748,51972],{"class":52637},[152,89750,52644],{"class":483},[19,89752,89753],{},[401,89754],{"alt":275,"src":89755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[262,89757,89759],{"id":89758},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[270,89761,89763],{"className":51970,"code":89762,"language":51972,"meta":275,"style":275},"\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",[277,89764,89765,89775,89789,89793,89801,89815,89835,89847,89855,89859,89867,89875,89885,89893,89901,89913,89917,89923,89927,89931,89936,89941,89946,89972,89980,89989,89997,90005,90013,90017],{"__ignoreMap":275},[152,89766,89767,89769,89771,89773],{"class":281,"line":282},[152,89768,52634],{"class":483},[152,89770,52638],{"class":52637},[152,89772,52641],{"class":285},[152,89774,52644],{"class":483},[152,89776,89777,89779,89781,89783,89785,89787],{"class":281,"line":303},[152,89778,844],{"class":483},[152,89780,51972],{"class":52637},[152,89782,52653],{"class":285},[152,89784,1864],{"class":483},[152,89786,52658],{"class":289},[152,89788,52644],{"class":483},[152,89790,89791],{"class":281,"line":310},[152,89792,307],{"emptyLinePlaceholder":306},[152,89794,89795,89797,89799],{"class":281,"line":324},[152,89796,844],{"class":483},[152,89798,52671],{"class":52637},[152,89800,52644],{"class":483},[152,89802,89803,89805,89807,89809,89811,89813],{"class":281,"line":329},[152,89804,53481],{"class":483},[152,89806,52681],{"class":52637},[152,89808,52684],{"class":285},[152,89810,1864],{"class":483},[152,89812,52689],{"class":289},[152,89814,52644],{"class":483},[152,89816,89817,89819,89821,89823,89825,89827,89829,89831,89833],{"class":281,"line":343},[152,89818,53481],{"class":483},[152,89820,52681],{"class":52637},[152,89822,16535],{"class":285},[152,89824,1864],{"class":483},[152,89826,52728],{"class":289},[152,89828,52708],{"class":285},[152,89830,1864],{"class":483},[152,89832,52735],{"class":289},[152,89834,52644],{"class":483},[152,89836,89837,89839,89841,89843,89845],{"class":281,"line":348},[152,89838,53481],{"class":483},[152,89840,52744],{"class":52637},[152,89842,52747],{"class":483},[152,89844,52744],{"class":52637},[152,89846,52644],{"class":483},[152,89848,89849,89851,89853],{"class":281,"line":362},[152,89850,53122],{"class":483},[152,89852,52671],{"class":52637},[152,89854,52644],{"class":483},[152,89856,89857],{"class":281,"line":367},[152,89858,307],{"emptyLinePlaceholder":306},[152,89860,89861,89863,89865],{"class":281,"line":381},[152,89862,844],{"class":483},[152,89864,53137],{"class":52637},[152,89866,52644],{"class":483},[152,89868,89869,89871,89873],{"class":281,"line":386},[152,89870,53481],{"class":483},[152,89872,53150],{"class":52637},[152,89874,52644],{"class":483},[152,89876,89877,89879,89881,89883],{"class":281,"line":932},[152,89878,12837],{"class":476},[152,89880,71308],{"class":293},[152,89882,15180],{"class":476},[152,89884,17187],{"class":483},[152,89886,89887,89889,89891],{"class":281,"line":942},[152,89888,72953],{"class":483},[152,89890,89147],{"class":289},[152,89892,32803],{"class":483},[152,89894,89895,89897,89899],{"class":281,"line":949},[152,89896,72963],{"class":483},[152,89898,2458],{"class":293},[152,89900,32803],{"class":483},[152,89902,89903,89905,89907,89909,89911],{"class":281,"line":954},[152,89904,89162],{"class":483},[152,89906,89165],{"class":289},[152,89908,14051],{"class":483},[152,89910,89170],{"class":289},[152,89912,89173],{"class":483},[152,89914,89915],{"class":281,"line":959},[152,89916,79209],{"class":483},[152,89918,89919,89921],{"class":281,"line":970},[152,89920,89182],{"class":483},[152,89922,89185],{"class":289},[152,89924,89925],{"class":281,"line":979},[152,89926,53735],{"class":483},[152,89928,89929],{"class":281,"line":989},[152,89930,3838],{"class":483},[152,89932,89933],{"class":281,"line":996},[152,89934,89935],{"class":866},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[152,89937,89938],{"class":281,"line":1001},[152,89939,89940],{"class":866},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[152,89942,89943],{"class":281,"line":1006},[152,89944,89945],{"class":866},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[152,89947,89948,89950,89952,89954,89957,89959,89962,89964,89966,89968,89970],{"class":281,"line":1018},[152,89949,12837],{"class":476},[152,89951,89200],{"class":293},[152,89953,15180],{"class":476},[152,89955,89956],{"class":293}," JSON",[152,89958,2366],{"class":483},[152,89960,89961],{"class":285},"parse",[152,89963,1819],{"class":483},[152,89965,73001],{"class":293},[152,89967,2366],{"class":483},[152,89969,73006],{"class":285},[152,89971,73009],{"class":483},[152,89973,89974,89976,89978],{"class":281,"line":1027},[152,89975,75090],{"class":483},[152,89977,59584],{"class":285},[152,89979,89392],{"class":483},[152,89981,89982,89984,89986],{"class":281,"line":1037},[152,89983,89710],{"class":483},[152,89985,1864],{"class":476},[152,89987,89988],{"class":289}," '123'\n",[152,89990,89991,89993,89995],{"class":281,"line":1044},[152,89992,75090],{"class":483},[152,89994,59584],{"class":285},[152,89996,71373],{"class":483},[152,89998,89999,90001,90003],{"class":281,"line":1049},[152,90000,53754],{"class":483},[152,90002,53150],{"class":52637},[152,90004,52644],{"class":483},[152,90006,90007,90009,90011],{"class":281,"line":1054},[152,90008,53122],{"class":483},[152,90010,53137],{"class":52637},[152,90012,52644],{"class":483},[152,90014,90015],{"class":281,"line":1065},[152,90016,307],{"emptyLinePlaceholder":306},[152,90018,90019,90021,90023],{"class":281,"line":1074},[152,90020,53122],{"class":483},[152,90022,51972],{"class":52637},[152,90024,52644],{"class":483},[19,90026,90027],{},[401,90028],{"alt":275,"src":90029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[1760,90031,90033],{"id":90032},"_415-异常处理","4.15 异常处理",[416,90035,90036],{},[419,90037,90038],{},"throw抛异常",[19,90040,90041],{},[401,90042],{"alt":275,"src":90043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[416,90045,90046],{"start":303},[419,90047,90048],{},"try\u002Fcatch 捕获错误信息",[19,90050,90051],{},[401,90052],{"alt":275,"src":90053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[270,90055,90057],{"className":51970,"code":90056,"language":51972,"meta":275,"style":275},"\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",[277,90058,90059,90069,90083,90087,90095,90109,90129,90141,90149,90153,90161,90173,90181,90190,90197,90202,90221,90230,90241,90246,90256,90261,90266,90271,90288,90292,90297,90304,90316,90320,90332,90336,90340,90345,90350,90357,90365,90373,90377],{"__ignoreMap":275},[152,90060,90061,90063,90065,90067],{"class":281,"line":282},[152,90062,52634],{"class":483},[152,90064,52638],{"class":52637},[152,90066,52641],{"class":285},[152,90068,52644],{"class":483},[152,90070,90071,90073,90075,90077,90079,90081],{"class":281,"line":303},[152,90072,844],{"class":483},[152,90074,51972],{"class":52637},[152,90076,52653],{"class":285},[152,90078,1864],{"class":483},[152,90080,52658],{"class":289},[152,90082,52644],{"class":483},[152,90084,90085],{"class":281,"line":310},[152,90086,307],{"emptyLinePlaceholder":306},[152,90088,90089,90091,90093],{"class":281,"line":324},[152,90090,844],{"class":483},[152,90092,52671],{"class":52637},[152,90094,52644],{"class":483},[152,90096,90097,90099,90101,90103,90105,90107],{"class":281,"line":329},[152,90098,53481],{"class":483},[152,90100,52681],{"class":52637},[152,90102,52684],{"class":285},[152,90104,1864],{"class":483},[152,90106,52689],{"class":289},[152,90108,52644],{"class":483},[152,90110,90111,90113,90115,90117,90119,90121,90123,90125,90127],{"class":281,"line":343},[152,90112,53481],{"class":483},[152,90114,52681],{"class":52637},[152,90116,16535],{"class":285},[152,90118,1864],{"class":483},[152,90120,52728],{"class":289},[152,90122,52708],{"class":285},[152,90124,1864],{"class":483},[152,90126,52735],{"class":289},[152,90128,52644],{"class":483},[152,90130,90131,90133,90135,90137,90139],{"class":281,"line":348},[152,90132,53481],{"class":483},[152,90134,52744],{"class":52637},[152,90136,52747],{"class":483},[152,90138,52744],{"class":52637},[152,90140,52644],{"class":483},[152,90142,90143,90145,90147],{"class":281,"line":362},[152,90144,53122],{"class":483},[152,90146,52671],{"class":52637},[152,90148,52644],{"class":483},[152,90150,90151],{"class":281,"line":367},[152,90152,307],{"emptyLinePlaceholder":306},[152,90154,90155,90157,90159],{"class":281,"line":381},[152,90156,844],{"class":483},[152,90158,53137],{"class":52637},[152,90160,52644],{"class":483},[152,90162,90163,90165,90167,90169,90171],{"class":281,"line":386},[152,90164,53481],{"class":483},[152,90166,19],{"class":52637},[152,90168,54831],{"class":483},[152,90170,19],{"class":52637},[152,90172,52644],{"class":483},[152,90174,90175,90177,90179],{"class":281,"line":932},[152,90176,53481],{"class":483},[152,90178,53150],{"class":52637},[152,90180,52644],{"class":483},[152,90182,90183,90185,90188],{"class":281,"line":942},[152,90184,71421],{"class":476},[152,90186,90187],{"class":285}," fn",[152,90189,12469],{"class":483},[152,90191,90192,90195],{"class":281,"line":949},[152,90193,90194],{"class":476},"      try",[152,90196,17187],{"class":483},[152,90198,90199],{"class":281,"line":954},[152,90200,90201],{"class":866},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[152,90203,90204,90206,90208,90210,90212,90214,90216,90219],{"class":281,"line":959},[152,90205,62607],{"class":476},[152,90207,8467],{"class":293},[152,90209,15180],{"class":476},[152,90211,55733],{"class":483},[152,90213,55736],{"class":285},[152,90215,1819],{"class":483},[152,90217,90218],{"class":289},"'.p'",[152,90220,1825],{"class":483},[152,90222,90223,90226,90228],{"class":281,"line":970},[152,90224,90225],{"class":483},"        p.style.color ",[152,90227,1864],{"class":476},[152,90229,68388],{"class":289},[152,90231,90232,90235,90238],{"class":281,"line":979},[152,90233,90234],{"class":483},"      } ",[152,90236,90237],{"class":476},"catch",[152,90239,90240],{"class":483}," (err) {\n",[152,90242,90243],{"class":281,"line":989},[152,90244,90245],{"class":866},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[152,90247,90248,90251,90253],{"class":281,"line":996},[152,90249,90250],{"class":483},"        console.",[152,90252,59584],{"class":285},[152,90254,90255],{"class":483},"(err.message)\n",[152,90257,90258],{"class":281,"line":1001},[152,90259,90260],{"class":866},"        \u002F\u002F 想要中断程序，需要加return\n",[152,90262,90263],{"class":281,"line":1006},[152,90264,90265],{"class":866},"        \u002F\u002F return\n",[152,90267,90268],{"class":281,"line":1018},[152,90269,90270],{"class":866},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[152,90272,90273,90276,90278,90281,90283,90286],{"class":281,"line":1027},[152,90274,90275],{"class":476},"        throw",[152,90277,13194],{"class":476},[152,90279,90280],{"class":285}," Error",[152,90282,1819],{"class":483},[152,90284,90285],{"class":289},"'你看看，选择器错误了吧'",[152,90287,1825],{"class":483},[152,90289,90290],{"class":281,"line":1037},[152,90291,53735],{"class":483},[152,90293,90294],{"class":281,"line":1044},[152,90295,90296],{"class":866},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[152,90298,90299,90302],{"class":281,"line":1049},[152,90300,90301],{"class":476},"      finally",[152,90303,17187],{"class":483},[152,90305,90306,90309,90311,90314],{"class":281,"line":1054},[152,90307,90308],{"class":285},"        alert",[152,90310,1819],{"class":483},[152,90312,90313],{"class":289},"'弹出对话框'",[152,90315,1825],{"class":483},[152,90317,90318],{"class":281,"line":1065},[152,90319,53735],{"class":483},[152,90321,90322,90324,90326,90328,90330],{"class":281,"line":1074},[152,90323,59581],{"class":483},[152,90325,59584],{"class":285},[152,90327,1819],{"class":483},[152,90329,2280],{"class":293},[152,90331,1825],{"class":483},[152,90333,90334],{"class":281,"line":1084},[152,90335,307],{"emptyLinePlaceholder":306},[152,90337,90338],{"class":281,"line":1091},[152,90339,3838],{"class":483},[152,90341,90342],{"class":281,"line":1096},[152,90343,90344],{"class":866},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[152,90346,90347],{"class":281,"line":1101},[152,90348,90349],{"class":866},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[152,90351,90352,90355],{"class":281,"line":1112},[152,90353,90354],{"class":285},"    fn",[152,90356,3627],{"class":483},[152,90358,90359,90361,90363],{"class":281,"line":1121},[152,90360,53754],{"class":483},[152,90362,53150],{"class":52637},[152,90364,52644],{"class":483},[152,90366,90367,90369,90371],{"class":281,"line":1131},[152,90368,53122],{"class":483},[152,90370,53137],{"class":52637},[152,90372,52644],{"class":483},[152,90374,90375],{"class":281,"line":1138},[152,90376,307],{"emptyLinePlaceholder":306},[152,90378,90379,90381,90383],{"class":281,"line":1143},[152,90380,53122],{"class":483},[152,90382,51972],{"class":52637},[152,90384,52644],{"class":483},[19,90386,90387],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[416,90389,90390],{"start":310},[419,90391,90392],{},"debugger",[19,90394,90395],{},[401,90396],{"alt":275,"src":90397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90399,90400],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[1760,90402,90404],{"id":90403},"_416-处理this","4.16 处理this",[14,90406,90408],{"id":90407},"_4161-this的指向","4.16.1 this的指向",[416,90410,90411],{},[419,90412,90413],{},"普通函数的this",[19,90415,90416],{},[401,90417],{"alt":275,"src":90418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[416,90420,90421],{"start":303},[419,90422,90423],{},"箭头函数的this",[19,90425,90426],{},[401,90427],{"alt":275,"src":90428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90430,90431],{},[401,90432],{"alt":275,"src":90433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90435,90436],{},[401,90437],{"alt":275,"src":90438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[14,90440,90442],{"id":90441},"_4162-this的改变","4.16.2 this的改变",[19,90444,90445],{},"call() apply() bind()",[416,90447,90448],{},[419,90449,90450],{},"call()",[19,90452,90453],{},[401,90454],{"alt":275,"src":90455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90457,90458],{},"两个作用：①调用函数；②改变this指向",[270,90460,90462],{"className":54404,"code":90461,"language":54406,"meta":275,"style":275},"\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",[277,90463,90464,90472,90480,90484,90489,90493,90498,90503,90508,90512,90517,90525],{"__ignoreMap":275},[152,90465,90466,90468,90470],{"class":281,"line":282},[152,90467,844],{"class":483},[152,90469,53137],{"class":52637},[152,90471,52644],{"class":483},[152,90473,90474,90476,90478],{"class":281,"line":303},[152,90475,53481],{"class":483},[152,90477,53150],{"class":52637},[152,90479,52644],{"class":483},[152,90481,90482],{"class":281,"line":310},[152,90483,72860],{"class":483},[152,90485,90486],{"class":281,"line":324},[152,90487,90488],{"class":483},"      uname: 'pink'\n",[152,90490,90491],{"class":281,"line":329},[152,90492,3838],{"class":483},[152,90494,90495],{"class":281,"line":343},[152,90496,90497],{"class":483},"    function fn(x, y) {\n",[152,90499,90500],{"class":281,"line":348},[152,90501,90502],{"class":483},"      console.log(this)  \u002F\u002Fwindow\n",[152,90504,90505],{"class":281,"line":362},[152,90506,90507],{"class":483},"      console.log(x + y)\n",[152,90509,90510],{"class":281,"line":367},[152,90511,3838],{"class":483},[152,90513,90514],{"class":281,"line":381},[152,90515,90516],{"class":483},"    fn.call(obj, 1, 2)\n",[152,90518,90519,90521,90523],{"class":281,"line":386},[152,90520,53754],{"class":483},[152,90522,53150],{"class":52637},[152,90524,52644],{"class":483},[152,90526,90527,90529,90531],{"class":281,"line":932},[152,90528,53122],{"class":483},[152,90530,53137],{"class":52637},[152,90532,52644],{"class":483},[19,90534,90535],{},[401,90536],{"alt":275,"src":90537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[416,90539,90540],{"start":303},[419,90541,90542],{},"apply()",[19,90544,90545],{},[401,90546],{"alt":275,"src":90547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90549,90458],{},[19,90551,90552],{},"call传递的是普通参数，而apply必须传递的是数组",[270,90554,90556],{"className":51970,"code":90555,"language":51972,"meta":275,"style":275},"\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",[277,90557,90558,90568,90582,90586,90594,90608,90628,90640,90648,90652,90660,90668,90678,90685,90689,90694,90710,90722,90736,90740,90745,90764,90769,90773,90778,90783,90791,90796,90818,90823,90839,90855,90867,90871,90876,90895,90903,90911,90915],{"__ignoreMap":275},[152,90559,90560,90562,90564,90566],{"class":281,"line":282},[152,90561,52634],{"class":483},[152,90563,52638],{"class":52637},[152,90565,52641],{"class":285},[152,90567,52644],{"class":483},[152,90569,90570,90572,90574,90576,90578,90580],{"class":281,"line":303},[152,90571,844],{"class":483},[152,90573,51972],{"class":52637},[152,90575,52653],{"class":285},[152,90577,1864],{"class":483},[152,90579,52658],{"class":289},[152,90581,52644],{"class":483},[152,90583,90584],{"class":281,"line":310},[152,90585,307],{"emptyLinePlaceholder":306},[152,90587,90588,90590,90592],{"class":281,"line":324},[152,90589,844],{"class":483},[152,90591,52671],{"class":52637},[152,90593,52644],{"class":483},[152,90595,90596,90598,90600,90602,90604,90606],{"class":281,"line":329},[152,90597,53481],{"class":483},[152,90599,52681],{"class":52637},[152,90601,52684],{"class":285},[152,90603,1864],{"class":483},[152,90605,52689],{"class":289},[152,90607,52644],{"class":483},[152,90609,90610,90612,90614,90616,90618,90620,90622,90624,90626],{"class":281,"line":343},[152,90611,53481],{"class":483},[152,90613,52681],{"class":52637},[152,90615,16535],{"class":285},[152,90617,1864],{"class":483},[152,90619,52728],{"class":289},[152,90621,52708],{"class":285},[152,90623,1864],{"class":483},[152,90625,52735],{"class":289},[152,90627,52644],{"class":483},[152,90629,90630,90632,90634,90636,90638],{"class":281,"line":348},[152,90631,53481],{"class":483},[152,90633,52744],{"class":52637},[152,90635,52747],{"class":483},[152,90637,52744],{"class":52637},[152,90639,52644],{"class":483},[152,90641,90642,90644,90646],{"class":281,"line":362},[152,90643,53122],{"class":483},[152,90645,52671],{"class":52637},[152,90647,52644],{"class":483},[152,90649,90650],{"class":281,"line":367},[152,90651,307],{"emptyLinePlaceholder":306},[152,90653,90654,90656,90658],{"class":281,"line":381},[152,90655,844],{"class":483},[152,90657,53137],{"class":52637},[152,90659,52644],{"class":483},[152,90661,90662,90664,90666],{"class":281,"line":386},[152,90663,53481],{"class":483},[152,90665,53150],{"class":52637},[152,90667,52644],{"class":483},[152,90669,90670,90672,90674,90676],{"class":281,"line":932},[152,90671,12837],{"class":476},[152,90673,71308],{"class":293},[152,90675,15180],{"class":476},[152,90677,17187],{"class":483},[152,90679,90680,90682],{"class":281,"line":942},[152,90681,72963],{"class":483},[152,90683,90684],{"class":293},"18\n",[152,90686,90687],{"class":281,"line":949},[152,90688,3838],{"class":483},[152,90690,90691],{"class":281,"line":954},[152,90692,90693],{"class":866},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[152,90695,90696,90698,90700,90702,90704,90706,90708],{"class":281,"line":959},[152,90697,71421],{"class":476},[152,90699,90187],{"class":285},[152,90701,1819],{"class":483},[152,90703,2628],{"class":6858},[152,90705,14051],{"class":483},[152,90707,2653],{"class":6858},[152,90709,14058],{"class":483},[152,90711,90712,90714,90716,90718,90720],{"class":281,"line":970},[152,90713,59581],{"class":483},[152,90715,59584],{"class":285},[152,90717,1819],{"class":483},[152,90719,88330],{"class":293},[152,90721,1825],{"class":483},[152,90723,90724,90726,90728,90731,90733],{"class":281,"line":979},[152,90725,59581],{"class":483},[152,90727,59584],{"class":285},[152,90729,90730],{"class":483},"(x ",[152,90732,2289],{"class":476},[152,90734,90735],{"class":483}," y)\n",[152,90737,90738],{"class":281,"line":989},[152,90739,3838],{"class":483},[152,90741,90742],{"class":281,"line":996},[152,90743,90744],{"class":866},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[152,90746,90747,90750,90753,90756,90758,90760,90762],{"class":281,"line":1001},[152,90748,90749],{"class":483},"    fn.",[152,90751,90752],{"class":285},"apply",[152,90754,90755],{"class":483},"(obj, [",[152,90757,2026],{"class":293},[152,90759,14051],{"class":483},[152,90761,1894],{"class":293},[152,90763,6299],{"class":483},[152,90765,90766],{"class":281,"line":1006},[152,90767,90768],{"class":866},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[152,90770,90771],{"class":281,"line":1018},[152,90772,307],{"emptyLinePlaceholder":306},[152,90774,90775],{"class":281,"line":1027},[152,90776,90777],{"class":866},"    \u002F\u002F 使用场景：求数组最大值\n",[152,90779,90780],{"class":281,"line":1037},[152,90781,90782],{"class":866},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[152,90784,90785,90788],{"class":281,"line":1044},[152,90786,90787],{"class":866},"    \u002F\u002F console.log(max)",[152,90789,90790],{"class":866},"   \u002F\u002F3\n",[152,90792,90793],{"class":281,"line":1049},[152,90794,90795],{"class":866},"    \u002F\u002F 指向空或者Math都是可以的\n",[152,90797,90798,90800,90802,90804,90806,90808,90810,90812,90814,90816],{"class":281,"line":1054},[152,90799,12837],{"class":476},[152,90801,59032],{"class":293},[152,90803,15180],{"class":476},[152,90805,53563],{"class":483},[152,90807,2119],{"class":293},[152,90809,14051],{"class":483},[152,90811,2312],{"class":293},[152,90813,14051],{"class":483},[152,90815,2343],{"class":293},[152,90817,34583],{"class":483},[152,90819,90820],{"class":281,"line":1065},[152,90821,90822],{"class":866},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[152,90824,90825,90827,90829,90831,90834,90836],{"class":281,"line":1074},[152,90826,12837],{"class":476},[152,90828,7593],{"class":293},[152,90830,15180],{"class":476},[152,90832,90833],{"class":483}," Math.max.",[152,90835,90752],{"class":285},[152,90837,90838],{"class":483},"(Math, arr)\n",[152,90840,90841,90843,90846,90848,90851,90853],{"class":281,"line":1084},[152,90842,12837],{"class":476},[152,90844,90845],{"class":293}," min",[152,90847,15180],{"class":476},[152,90849,90850],{"class":483}," Math.min.",[152,90852,90752],{"class":285},[152,90854,90838],{"class":483},[152,90856,90857,90859,90861,90864],{"class":281,"line":1091},[152,90858,75090],{"class":483},[152,90860,59584],{"class":285},[152,90862,90863],{"class":483},"(max, min)     ",[152,90865,90866],{"class":866},"\u002F\u002F100,4\n",[152,90868,90869],{"class":281,"line":1096},[152,90870,307],{"emptyLinePlaceholder":306},[152,90872,90873],{"class":281,"line":1101},[152,90874,90875],{"class":866},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[152,90877,90878,90880,90882,90885,90887,90889,90892],{"class":281,"line":1112},[152,90879,75090],{"class":483},[152,90881,59584],{"class":285},[152,90883,90884],{"class":483},"(Max.",[152,90886,7657],{"class":285},[152,90888,1819],{"class":483},[152,90890,90891],{"class":476},"...",[152,90893,90894],{"class":483},"arr))\n",[152,90896,90897,90899,90901],{"class":281,"line":1121},[152,90898,53754],{"class":483},[152,90900,53150],{"class":52637},[152,90902,52644],{"class":483},[152,90904,90905,90907,90909],{"class":281,"line":1131},[152,90906,53122],{"class":483},[152,90908,53137],{"class":52637},[152,90910,52644],{"class":483},[152,90912,90913],{"class":281,"line":1138},[152,90914,307],{"emptyLinePlaceholder":306},[152,90916,90917,90919,90921],{"class":281,"line":1143},[152,90918,53122],{"class":483},[152,90920,51972],{"class":52637},[152,90922,52644],{"class":483},[19,90924,90925],{},[401,90926],{"alt":275,"src":90927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[416,90929,90930],{"start":310},[419,90931,90932],{},"bind()",[19,90934,90935],{},[401,90936],{"alt":275,"src":90937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90939,90940],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90942,90943],{},"bind的语法跟call很相似",[270,90945,90947],{"className":54404,"code":90946,"language":54406,"meta":275,"style":275},"\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",[277,90948,90949,90957,90965,90969,90974,90978,90982,90987,90991,90996,91001,91006,91011,91016,91021,91026,91030,91038],{"__ignoreMap":275},[152,90950,90951,90953,90955],{"class":281,"line":282},[152,90952,844],{"class":483},[152,90954,53137],{"class":52637},[152,90956,52644],{"class":483},[152,90958,90959,90961,90963],{"class":281,"line":303},[152,90960,53481],{"class":483},[152,90962,53150],{"class":52637},[152,90964,52644],{"class":483},[152,90966,90967],{"class":281,"line":310},[152,90968,72860],{"class":483},[152,90970,90971],{"class":281,"line":324},[152,90972,90973],{"class":483},"      age: 18\n",[152,90975,90976],{"class":281,"line":329},[152,90977,3838],{"class":483},[152,90979,90980],{"class":281,"line":343},[152,90981,78480],{"class":483},[152,90983,90984],{"class":281,"line":348},[152,90985,90986],{"class":483},"      console.log(this)\n",[152,90988,90989],{"class":281,"line":362},[152,90990,3838],{"class":483},[152,90992,90993],{"class":281,"line":367},[152,90994,90995],{"class":483},"    \u002F\u002F 1.bind 不会调用函数\n",[152,90997,90998],{"class":281,"line":381},[152,90999,91000],{"class":483},"    \u002F\u002F 2.bind能改变this的指向\n",[152,91002,91003],{"class":281,"line":386},[152,91004,91005],{"class":483},"    fn.bind()\n",[152,91007,91008],{"class":281,"line":932},[152,91009,91010],{"class":483},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[152,91012,91013],{"class":281,"line":942},[152,91014,91015],{"class":483},"    const fun = fn.bind(obj)\n",[152,91017,91018],{"class":281,"line":949},[152,91019,91020],{"class":483},"    \u002F\u002F console.log(fun)\n",[152,91022,91023],{"class":281,"line":954},[152,91024,91025],{"class":483},"    \u002F\u002F 调用,查看this的指向\n",[152,91027,91028],{"class":281,"line":959},[152,91029,53988],{"class":483},[152,91031,91032,91034,91036],{"class":281,"line":970},[152,91033,53754],{"class":483},[152,91035,53150],{"class":52637},[152,91037,52644],{"class":483},[152,91039,91040,91042,91044],{"class":281,"line":979},[152,91041,53122],{"class":483},[152,91043,53137],{"class":52637},[152,91045,52644],{"class":483},[19,91047,91048],{},[401,91049],{"alt":275,"src":91050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[416,91052,91053],{"start":324},[419,91054,91055],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[270,91057,91059],{"className":54404,"code":91058,"language":54406,"meta":275,"style":275},"\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",[277,91060,91061,91069,91082,91090,91095,91099,91104,91109,91114,91119,91124,91129,91134,91139,91143,91151],{"__ignoreMap":275},[152,91062,91063,91065,91067],{"class":281,"line":282},[152,91064,844],{"class":483},[152,91066,53137],{"class":52637},[152,91068,52644],{"class":483},[152,91070,91071,91073,91075,91078,91080],{"class":281,"line":303},[152,91072,53481],{"class":483},[152,91074,55224],{"class":52637},[152,91076,91077],{"class":483},">禁用\u003C\u002F",[152,91079,55224],{"class":52637},[152,91081,52644],{"class":483},[152,91083,91084,91086,91088],{"class":281,"line":310},[152,91085,53481],{"class":483},[152,91087,53150],{"class":52637},[152,91089,52644],{"class":483},[152,91091,91092],{"class":281,"line":324},[152,91093,91094],{"class":483},"    const btn = document.querySelector('button')\n",[152,91096,91097],{"class":281,"line":329},[152,91098,60353],{"class":483},[152,91100,91101],{"class":281,"line":343},[152,91102,91103],{"class":483},"      this.disabled = true\n",[152,91105,91106],{"class":281,"line":348},[152,91107,91108],{"class":483},"      \u002F\u002F 定时器是window进行调用的\n",[152,91110,91111],{"class":281,"line":362},[152,91112,91113],{"class":483},"      setTimeout(function () {\n",[152,91115,91116],{"class":281,"line":367},[152,91117,91118],{"class":483},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[152,91120,91121],{"class":281,"line":381},[152,91122,91123],{"class":483},"        this.disabled = false\n",[152,91125,91126],{"class":281,"line":386},[152,91127,91128],{"class":483},"      }.bind(this), 2000)\n",[152,91130,91131],{"class":281,"line":932},[152,91132,91133],{"class":483},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[152,91135,91136],{"class":281,"line":942},[152,91137,91138],{"class":483},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[152,91140,91141],{"class":281,"line":949},[152,91142,34798],{"class":483},[152,91144,91145,91147,91149],{"class":281,"line":954},[152,91146,53754],{"class":483},[152,91148,53150],{"class":52637},[152,91150,52644],{"class":483},[152,91152,91153,91155,91157],{"class":281,"line":959},[152,91154,53122],{"class":483},[152,91156,53137],{"class":52637},[152,91158,52644],{"class":483},[416,91160,91161],{"start":329},[419,91162,23568],{},[19,91164,91165],{},[401,91166],{"alt":275,"src":91167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[1760,91169,91171],{"id":91170},"_417-性能优化","4.17 性能优化",[14,91173,91175],{"id":91174},"_4171-防抖","4.17.1 防抖",[19,91177,91178],{},[401,91179],{"alt":275,"src":91180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91182,91183],{},[694,91184,91185],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91187,91188],{},"防抖实现方式：",[698,91190,91191],{},[419,91192,91193],{},"lodash 提供了防抖处理",[19,91195,91196],{},"_.debounce(func,[wait=0],[options={}])",[19,91198,91199],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[270,91201,91203],{"className":51970,"code":91202,"language":51972,"meta":275,"style":275},"\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",[277,91204,91205,91215,91229,91233,91241,91255,91275,91287,91295,91301,91311,91323,91335,91346,91358,91368,91378,91391,91395,91403,91411,91415,91423,91441,91459,91467,91486,91496,91505,91516,91521,91525,91530,91535,91540,91565,91573,91581,91585],{"__ignoreMap":275},[152,91206,91207,91209,91211,91213],{"class":281,"line":282},[152,91208,52634],{"class":483},[152,91210,52638],{"class":52637},[152,91212,52641],{"class":285},[152,91214,52644],{"class":483},[152,91216,91217,91219,91221,91223,91225,91227],{"class":281,"line":303},[152,91218,844],{"class":483},[152,91220,51972],{"class":52637},[152,91222,52653],{"class":285},[152,91224,1864],{"class":483},[152,91226,52658],{"class":289},[152,91228,52644],{"class":483},[152,91230,91231],{"class":281,"line":310},[152,91232,307],{"emptyLinePlaceholder":306},[152,91234,91235,91237,91239],{"class":281,"line":324},[152,91236,844],{"class":483},[152,91238,52671],{"class":52637},[152,91240,52644],{"class":483},[152,91242,91243,91245,91247,91249,91251,91253],{"class":281,"line":329},[152,91244,53481],{"class":483},[152,91246,52681],{"class":52637},[152,91248,52684],{"class":285},[152,91250,1864],{"class":483},[152,91252,52689],{"class":289},[152,91254,52644],{"class":483},[152,91256,91257,91259,91261,91263,91265,91267,91269,91271,91273],{"class":281,"line":343},[152,91258,53481],{"class":483},[152,91260,52681],{"class":52637},[152,91262,16535],{"class":285},[152,91264,1864],{"class":483},[152,91266,52728],{"class":289},[152,91268,52708],{"class":285},[152,91270,1864],{"class":483},[152,91272,52735],{"class":289},[152,91274,52644],{"class":483},[152,91276,91277,91279,91281,91283,91285],{"class":281,"line":348},[152,91278,53481],{"class":483},[152,91280,52744],{"class":52637},[152,91282,52747],{"class":483},[152,91284,52744],{"class":52637},[152,91286,52644],{"class":483},[152,91288,91289,91291,91293],{"class":281,"line":362},[152,91290,53481],{"class":483},[152,91292,1736],{"class":52637},[152,91294,52644],{"class":483},[152,91296,91297,91299],{"class":281,"line":367},[152,91298,56089],{"class":285},[152,91300,17187],{"class":483},[152,91302,91303,91305,91307,91309],{"class":281,"line":381},[152,91304,73933],{"class":293},[152,91306,52774],{"class":483},[152,91308,61842],{"class":293},[152,91310,2965],{"class":483},[152,91312,91313,91315,91317,91319,91321],{"class":281,"line":386},[152,91314,56108],{"class":293},[152,91316,52774],{"class":483},[152,91318,3382],{"class":293},[152,91320,52829],{"class":476},[152,91322,2965],{"class":483},[152,91324,91325,91327,91329,91331,91333],{"class":281,"line":932},[152,91326,56122],{"class":293},[152,91328,52774],{"class":483},[152,91330,3382],{"class":293},[152,91332,52829],{"class":476},[152,91334,2965],{"class":483},[152,91336,91337,91339,91341,91344],{"class":281,"line":942},[152,91338,56221],{"class":293},[152,91340,52774],{"class":483},[152,91342,91343],{"class":293},"gray",[152,91345,2965],{"class":483},[152,91347,91348,91350,91352,91354,91356],{"class":281,"line":949},[152,91349,56259],{"class":293},[152,91351,52774],{"class":483},[152,91353,2633],{"class":293},[152,91355,52829],{"class":476},[152,91357,2965],{"class":483},[152,91359,91360,91362,91364,91366],{"class":281,"line":954},[152,91361,58753],{"class":293},[152,91363,52774],{"class":483},[152,91365,62179],{"class":293},[152,91367,2965],{"class":483},[152,91369,91370,91372,91374,91376],{"class":281,"line":959},[152,91371,58623],{"class":293},[152,91373,52774],{"class":483},[152,91375,52929],{"class":293},[152,91377,2965],{"class":483},[152,91379,91380,91383,91385,91387,91389],{"class":281,"line":970},[152,91381,91382],{"class":293},"      padding-top",[152,91384,52774],{"class":483},[152,91386,2127],{"class":293},[152,91388,52829],{"class":476},[152,91390,2965],{"class":483},[152,91392,91393],{"class":281,"line":979},[152,91394,3838],{"class":483},[152,91396,91397,91399,91401],{"class":281,"line":989},[152,91398,53754],{"class":483},[152,91400,1736],{"class":52637},[152,91402,52644],{"class":483},[152,91404,91405,91407,91409],{"class":281,"line":996},[152,91406,53122],{"class":483},[152,91408,52671],{"class":52637},[152,91410,52644],{"class":483},[152,91412,91413],{"class":281,"line":1001},[152,91414,307],{"emptyLinePlaceholder":306},[152,91416,91417,91419,91421],{"class":281,"line":1006},[152,91418,844],{"class":483},[152,91420,53137],{"class":52637},[152,91422,52644],{"class":483},[152,91424,91425,91427,91429,91431,91433,91435,91437,91439],{"class":281,"line":1018},[152,91426,53481],{"class":483},[152,91428,52948],{"class":52637},[152,91430,54823],{"class":285},[152,91432,1864],{"class":483},[152,91434,54828],{"class":289},[152,91436,56651],{"class":483},[152,91438,52948],{"class":52637},[152,91440,52644],{"class":483},[152,91442,91443,91445,91447,91449,91451,91453,91455,91457],{"class":281,"line":1027},[152,91444,53481],{"class":483},[152,91446,53150],{"class":52637},[152,91448,56576],{"class":285},[152,91450,1864],{"class":483},[152,91452,89611],{"class":289},[152,91454,56651],{"class":483},[152,91456,53150],{"class":52637},[152,91458,52644],{"class":483},[152,91460,91461,91463,91465],{"class":281,"line":1037},[152,91462,53481],{"class":483},[152,91464,53150],{"class":52637},[152,91466,52644],{"class":483},[152,91468,91469,91471,91473,91475,91477,91479,91481,91484],{"class":281,"line":1044},[152,91470,12837],{"class":476},[152,91472,88270],{"class":293},[152,91474,15180],{"class":476},[152,91476,55733],{"class":483},[152,91478,55736],{"class":285},[152,91480,1819],{"class":483},[152,91482,91483],{"class":289},"'.box'",[152,91485,1825],{"class":483},[152,91487,91488,91490,91492,91494],{"class":281,"line":1049},[152,91489,53556],{"class":476},[152,91491,11070],{"class":483},[152,91493,1864],{"class":476},[152,91495,48670],{"class":293},[152,91497,91498,91500,91503],{"class":281,"line":1054},[152,91499,71421],{"class":476},[152,91501,91502],{"class":285}," mouseMove",[152,91504,12469],{"class":483},[152,91506,91507,91510,91512,91514],{"class":281,"line":1065},[152,91508,91509],{"class":483},"      box.innerHTML ",[152,91511,1864],{"class":476},[152,91513,4675],{"class":483},[152,91515,4345],{"class":476},[152,91517,91518],{"class":281,"line":1074},[152,91519,91520],{"class":866},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[152,91522,91523],{"class":281,"line":1084},[152,91524,3838],{"class":483},[152,91526,91527],{"class":281,"line":1091},[152,91528,91529],{"class":866},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[152,91531,91532],{"class":281,"line":1096},[152,91533,91534],{"class":866},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[152,91536,91537],{"class":281,"line":1101},[152,91538,91539],{"class":866},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[152,91541,91542,91545,91547,91549,91552,91555,91558,91561,91563],{"class":281,"line":1112},[152,91543,91544],{"class":483},"    box.",[152,91546,59150],{"class":285},[152,91548,1819],{"class":483},[152,91550,91551],{"class":289},"'mousemove'",[152,91553,91554],{"class":483},", _.",[152,91556,91557],{"class":285},"debounce",[152,91559,91560],{"class":483},"(mouseMove, ",[152,91562,66411],{"class":293},[152,91564,31834],{"class":483},[152,91566,91567,91569,91571],{"class":281,"line":1121},[152,91568,53754],{"class":483},[152,91570,53150],{"class":52637},[152,91572,52644],{"class":483},[152,91574,91575,91577,91579],{"class":281,"line":1131},[152,91576,53122],{"class":483},[152,91578,53137],{"class":52637},[152,91580,52644],{"class":483},[152,91582,91583],{"class":281,"line":1138},[152,91584,307],{"emptyLinePlaceholder":306},[152,91586,91587,91589,91591],{"class":281,"line":1143},[152,91588,53122],{"class":483},[152,91590,51972],{"class":52637},[152,91592,52644],{"class":483},[698,91594,91595],{},[419,91596,91597],{},"手写一个防抖函数来处理",[19,91599,91600],{},"防抖的核心就是利用定时器来实现的：",[19,91602,91603],{},"①声明一个定时器变量",[19,91605,91606],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,91608,91609],{},"③如果没有定时器则开启定时器，记得存到变量里面",[270,91611,91613],{"className":51970,"code":91612,"language":51972,"meta":275,"style":275},"\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",[277,91614,91615,91625,91639,91643,91651,91665,91685,91697,91705,91711,91721,91733,91745,91755,91767,91777,91787,91799,91803,91811,91819,91823,91831,91849,91867,91875,91893,91903,91911,91921,91925,91929,91933,91938,91943,91948,91953,91958,91963,91981,91988,91993,92001,92006,92019,92035,92045,92050,92054,92058,92078,92082,92087,92092,92097,92102,92110,92118,92122],{"__ignoreMap":275},[152,91616,91617,91619,91621,91623],{"class":281,"line":282},[152,91618,52634],{"class":483},[152,91620,52638],{"class":52637},[152,91622,52641],{"class":285},[152,91624,52644],{"class":483},[152,91626,91627,91629,91631,91633,91635,91637],{"class":281,"line":303},[152,91628,844],{"class":483},[152,91630,51972],{"class":52637},[152,91632,52653],{"class":285},[152,91634,1864],{"class":483},[152,91636,52658],{"class":289},[152,91638,52644],{"class":483},[152,91640,91641],{"class":281,"line":310},[152,91642,307],{"emptyLinePlaceholder":306},[152,91644,91645,91647,91649],{"class":281,"line":324},[152,91646,844],{"class":483},[152,91648,52671],{"class":52637},[152,91650,52644],{"class":483},[152,91652,91653,91655,91657,91659,91661,91663],{"class":281,"line":329},[152,91654,53481],{"class":483},[152,91656,52681],{"class":52637},[152,91658,52684],{"class":285},[152,91660,1864],{"class":483},[152,91662,52689],{"class":289},[152,91664,52644],{"class":483},[152,91666,91667,91669,91671,91673,91675,91677,91679,91681,91683],{"class":281,"line":343},[152,91668,53481],{"class":483},[152,91670,52681],{"class":52637},[152,91672,16535],{"class":285},[152,91674,1864],{"class":483},[152,91676,52728],{"class":289},[152,91678,52708],{"class":285},[152,91680,1864],{"class":483},[152,91682,52735],{"class":289},[152,91684,52644],{"class":483},[152,91686,91687,91689,91691,91693,91695],{"class":281,"line":348},[152,91688,53481],{"class":483},[152,91690,52744],{"class":52637},[152,91692,52747],{"class":483},[152,91694,52744],{"class":52637},[152,91696,52644],{"class":483},[152,91698,91699,91701,91703],{"class":281,"line":362},[152,91700,53481],{"class":483},[152,91702,1736],{"class":52637},[152,91704,52644],{"class":483},[152,91706,91707,91709],{"class":281,"line":367},[152,91708,56089],{"class":285},[152,91710,17187],{"class":483},[152,91712,91713,91715,91717,91719],{"class":281,"line":381},[152,91714,73933],{"class":293},[152,91716,52774],{"class":483},[152,91718,61842],{"class":293},[152,91720,2965],{"class":483},[152,91722,91723,91725,91727,91729,91731],{"class":281,"line":386},[152,91724,56108],{"class":293},[152,91726,52774],{"class":483},[152,91728,3382],{"class":293},[152,91730,52829],{"class":476},[152,91732,2965],{"class":483},[152,91734,91735,91737,91739,91741,91743],{"class":281,"line":932},[152,91736,56122],{"class":293},[152,91738,52774],{"class":483},[152,91740,3382],{"class":293},[152,91742,52829],{"class":476},[152,91744,2965],{"class":483},[152,91746,91747,91749,91751,91753],{"class":281,"line":942},[152,91748,56221],{"class":293},[152,91750,52774],{"class":483},[152,91752,91343],{"class":293},[152,91754,2965],{"class":483},[152,91756,91757,91759,91761,91763,91765],{"class":281,"line":949},[152,91758,56259],{"class":293},[152,91760,52774],{"class":483},[152,91762,2633],{"class":293},[152,91764,52829],{"class":476},[152,91766,2965],{"class":483},[152,91768,91769,91771,91773,91775],{"class":281,"line":954},[152,91770,58753],{"class":293},[152,91772,52774],{"class":483},[152,91774,62179],{"class":293},[152,91776,2965],{"class":483},[152,91778,91779,91781,91783,91785],{"class":281,"line":959},[152,91780,58623],{"class":293},[152,91782,52774],{"class":483},[152,91784,52929],{"class":293},[152,91786,2965],{"class":483},[152,91788,91789,91791,91793,91795,91797],{"class":281,"line":970},[152,91790,91382],{"class":293},[152,91792,52774],{"class":483},[152,91794,2127],{"class":293},[152,91796,52829],{"class":476},[152,91798,2965],{"class":483},[152,91800,91801],{"class":281,"line":979},[152,91802,3838],{"class":483},[152,91804,91805,91807,91809],{"class":281,"line":989},[152,91806,53754],{"class":483},[152,91808,1736],{"class":52637},[152,91810,52644],{"class":483},[152,91812,91813,91815,91817],{"class":281,"line":996},[152,91814,53122],{"class":483},[152,91816,52671],{"class":52637},[152,91818,52644],{"class":483},[152,91820,91821],{"class":281,"line":1001},[152,91822,307],{"emptyLinePlaceholder":306},[152,91824,91825,91827,91829],{"class":281,"line":1006},[152,91826,844],{"class":483},[152,91828,53137],{"class":52637},[152,91830,52644],{"class":483},[152,91832,91833,91835,91837,91839,91841,91843,91845,91847],{"class":281,"line":1018},[152,91834,53481],{"class":483},[152,91836,52948],{"class":52637},[152,91838,54823],{"class":285},[152,91840,1864],{"class":483},[152,91842,54828],{"class":289},[152,91844,56651],{"class":483},[152,91846,52948],{"class":52637},[152,91848,52644],{"class":483},[152,91850,91851,91853,91855,91857,91859,91861,91863,91865],{"class":281,"line":1027},[152,91852,53481],{"class":483},[152,91854,53150],{"class":52637},[152,91856,56576],{"class":285},[152,91858,1864],{"class":483},[152,91860,89611],{"class":289},[152,91862,56651],{"class":483},[152,91864,53150],{"class":52637},[152,91866,52644],{"class":483},[152,91868,91869,91871,91873],{"class":281,"line":1037},[152,91870,53481],{"class":483},[152,91872,53150],{"class":52637},[152,91874,52644],{"class":483},[152,91876,91877,91879,91881,91883,91885,91887,91889,91891],{"class":281,"line":1044},[152,91878,12837],{"class":476},[152,91880,88270],{"class":293},[152,91882,15180],{"class":476},[152,91884,55733],{"class":483},[152,91886,55736],{"class":285},[152,91888,1819],{"class":483},[152,91890,91483],{"class":289},[152,91892,1825],{"class":483},[152,91894,91895,91897,91899,91901],{"class":281,"line":1049},[152,91896,53556],{"class":476},[152,91898,11070],{"class":483},[152,91900,1864],{"class":476},[152,91902,48670],{"class":293},[152,91904,91905,91907,91909],{"class":281,"line":1054},[152,91906,71421],{"class":476},[152,91908,91502],{"class":285},[152,91910,12469],{"class":483},[152,91912,91913,91915,91917,91919],{"class":281,"line":1065},[152,91914,91509],{"class":483},[152,91916,1864],{"class":476},[152,91918,4675],{"class":483},[152,91920,4345],{"class":476},[152,91922,91923],{"class":281,"line":1074},[152,91924,91520],{"class":866},[152,91926,91927],{"class":281,"line":1084},[152,91928,3838],{"class":483},[152,91930,91931],{"class":281,"line":1091},[152,91932,91529],{"class":866},[152,91934,91935],{"class":281,"line":1096},[152,91936,91937],{"class":866},"    \u002F\u002F 手写防抖函数\n",[152,91939,91940],{"class":281,"line":1101},[152,91941,91942],{"class":866},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[152,91944,91945],{"class":281,"line":1112},[152,91946,91947],{"class":866},"    \u002F\u002F 1.声明定时器变量\n",[152,91949,91950],{"class":281,"line":1121},[152,91951,91952],{"class":866},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[152,91954,91955],{"class":281,"line":1131},[152,91956,91957],{"class":866},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[152,91959,91960],{"class":281,"line":1138},[152,91961,91962],{"class":866},"    \u002F\u002F 4.定时器里面写函数调用\n",[152,91964,91965,91967,91970,91972,91975,91977,91979],{"class":281,"line":1143},[152,91966,71421],{"class":476},[152,91968,91969],{"class":285}," debounce",[152,91971,1819],{"class":483},[152,91973,91974],{"class":6858},"fn",[152,91976,14051],{"class":483},[152,91978,2528],{"class":6858},[152,91980,14058],{"class":483},[152,91982,91983,91985],{"class":281,"line":1148},[152,91984,81109],{"class":476},[152,91986,91987],{"class":483}," timer\n",[152,91989,91990],{"class":281,"line":1159},[152,91991,91992],{"class":866},"      \u002F\u002F return 返回一个匿名函数\n",[152,91994,91995,91997,91999],{"class":281,"line":1168},[152,91996,75319],{"class":476},[152,91998,60255],{"class":476},[152,92000,55789],{"class":483},[152,92002,92003],{"class":281,"line":1178},[152,92004,92005],{"class":866},"        \u002F\u002F 这里边写第二三四步\n",[152,92007,92008,92010,92013,92016],{"class":281,"line":1185},[152,92009,4147],{"class":476},[152,92011,92012],{"class":483}," (timer) ",[152,92014,92015],{"class":285},"clearTimeout",[152,92017,92018],{"class":483},"(timer)\n",[152,92020,92021,92024,92026,92029,92031,92033],{"class":281,"line":1190},[152,92022,92023],{"class":483},"        timer ",[152,92025,1864],{"class":476},[152,92027,92028],{"class":285}," setTimeout",[152,92030,1819],{"class":483},[152,92032,55786],{"class":476},[152,92034,55789],{"class":483},[152,92036,92037,92040,92042],{"class":281,"line":1195},[152,92038,92039],{"class":285},"          fn",[152,92041,14666],{"class":483},[152,92043,92044],{"class":866},"\u002F\u002F加小括号调用fn }, t)\n",[152,92046,92047],{"class":281,"line":1206},[152,92048,92049],{"class":483},"        }, t)\n",[152,92051,92052],{"class":281,"line":1215},[152,92053,53735],{"class":483},[152,92055,92056],{"class":281,"line":1225},[152,92057,3838],{"class":483},[152,92059,92060,92062,92064,92066,92068,92070,92072,92074,92076],{"class":281,"line":1232},[152,92061,91544],{"class":483},[152,92063,59150],{"class":285},[152,92065,1819],{"class":483},[152,92067,91551],{"class":289},[152,92069,14051],{"class":483},[152,92071,91557],{"class":285},[152,92073,91560],{"class":483},[152,92075,66411],{"class":293},[152,92077,31834],{"class":483},[152,92079,92080],{"class":281,"line":1237},[152,92081,307],{"emptyLinePlaceholder":306},[152,92083,92084],{"class":281,"line":1242},[152,92085,92086],{"class":866},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[152,92088,92089],{"class":281,"line":1253},[152,92090,92091],{"class":866},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[152,92093,92094],{"class":281,"line":1262},[152,92095,92096],{"class":866},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[152,92098,92099],{"class":281,"line":1272},[152,92100,92101],{"class":866},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[152,92103,92104,92106,92108],{"class":281,"line":1279},[152,92105,53754],{"class":483},[152,92107,53150],{"class":52637},[152,92109,52644],{"class":483},[152,92111,92112,92114,92116],{"class":281,"line":1284},[152,92113,53122],{"class":483},[152,92115,53137],{"class":52637},[152,92117,52644],{"class":483},[152,92119,92120],{"class":281,"line":1289},[152,92121,307],{"emptyLinePlaceholder":306},[152,92123,92124,92126,92128],{"class":281,"line":1301},[152,92125,53122],{"class":483},[152,92127,51972],{"class":52637},[152,92129,52644],{"class":483},[14,92131,92133],{"id":92132},"_4172-节流","4.17.2 节流",[19,92135,92136],{},[401,92137],{"alt":275,"src":92138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92140,92141],{},[401,92142],{"alt":275,"src":92143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92145,92146],{},[694,92147,92148],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92150,92151],{},"实现方式：",[698,92153,92154],{},[419,92155,92156],{},"lodash 提供的节流函数来处理",[19,92158,92159],{},"_.throttle(func,[wait=0],[options=])",[19,92161,92162],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[270,92164,92166],{"className":51970,"code":92165,"language":51972,"meta":275,"style":275},"\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",[277,92167,92168,92178,92192,92196,92204,92218,92238,92250,92258,92264,92274,92286,92298,92308,92320,92330,92340,92352,92356,92364,92372,92376,92384,92402,92420,92428,92446,92456,92464,92474,92478,92482,92486,92491,92496,92517,92525,92533,92537],{"__ignoreMap":275},[152,92169,92170,92172,92174,92176],{"class":281,"line":282},[152,92171,52634],{"class":483},[152,92173,52638],{"class":52637},[152,92175,52641],{"class":285},[152,92177,52644],{"class":483},[152,92179,92180,92182,92184,92186,92188,92190],{"class":281,"line":303},[152,92181,844],{"class":483},[152,92183,51972],{"class":52637},[152,92185,52653],{"class":285},[152,92187,1864],{"class":483},[152,92189,52658],{"class":289},[152,92191,52644],{"class":483},[152,92193,92194],{"class":281,"line":310},[152,92195,307],{"emptyLinePlaceholder":306},[152,92197,92198,92200,92202],{"class":281,"line":324},[152,92199,844],{"class":483},[152,92201,52671],{"class":52637},[152,92203,52644],{"class":483},[152,92205,92206,92208,92210,92212,92214,92216],{"class":281,"line":329},[152,92207,53481],{"class":483},[152,92209,52681],{"class":52637},[152,92211,52684],{"class":285},[152,92213,1864],{"class":483},[152,92215,52689],{"class":289},[152,92217,52644],{"class":483},[152,92219,92220,92222,92224,92226,92228,92230,92232,92234,92236],{"class":281,"line":343},[152,92221,53481],{"class":483},[152,92223,52681],{"class":52637},[152,92225,16535],{"class":285},[152,92227,1864],{"class":483},[152,92229,52728],{"class":289},[152,92231,52708],{"class":285},[152,92233,1864],{"class":483},[152,92235,52735],{"class":289},[152,92237,52644],{"class":483},[152,92239,92240,92242,92244,92246,92248],{"class":281,"line":348},[152,92241,53481],{"class":483},[152,92243,52744],{"class":52637},[152,92245,52747],{"class":483},[152,92247,52744],{"class":52637},[152,92249,52644],{"class":483},[152,92251,92252,92254,92256],{"class":281,"line":362},[152,92253,53481],{"class":483},[152,92255,1736],{"class":52637},[152,92257,52644],{"class":483},[152,92259,92260,92262],{"class":281,"line":367},[152,92261,56089],{"class":285},[152,92263,17187],{"class":483},[152,92265,92266,92268,92270,92272],{"class":281,"line":381},[152,92267,73933],{"class":293},[152,92269,52774],{"class":483},[152,92271,61842],{"class":293},[152,92273,2965],{"class":483},[152,92275,92276,92278,92280,92282,92284],{"class":281,"line":386},[152,92277,56108],{"class":293},[152,92279,52774],{"class":483},[152,92281,3382],{"class":293},[152,92283,52829],{"class":476},[152,92285,2965],{"class":483},[152,92287,92288,92290,92292,92294,92296],{"class":281,"line":932},[152,92289,56122],{"class":293},[152,92291,52774],{"class":483},[152,92293,3382],{"class":293},[152,92295,52829],{"class":476},[152,92297,2965],{"class":483},[152,92299,92300,92302,92304,92306],{"class":281,"line":942},[152,92301,56221],{"class":293},[152,92303,52774],{"class":483},[152,92305,91343],{"class":293},[152,92307,2965],{"class":483},[152,92309,92310,92312,92314,92316,92318],{"class":281,"line":949},[152,92311,56259],{"class":293},[152,92313,52774],{"class":483},[152,92315,2633],{"class":293},[152,92317,52829],{"class":476},[152,92319,2965],{"class":483},[152,92321,92322,92324,92326,92328],{"class":281,"line":954},[152,92323,58753],{"class":293},[152,92325,52774],{"class":483},[152,92327,62179],{"class":293},[152,92329,2965],{"class":483},[152,92331,92332,92334,92336,92338],{"class":281,"line":959},[152,92333,58623],{"class":293},[152,92335,52774],{"class":483},[152,92337,52929],{"class":293},[152,92339,2965],{"class":483},[152,92341,92342,92344,92346,92348,92350],{"class":281,"line":970},[152,92343,91382],{"class":293},[152,92345,52774],{"class":483},[152,92347,2127],{"class":293},[152,92349,52829],{"class":476},[152,92351,2965],{"class":483},[152,92353,92354],{"class":281,"line":979},[152,92355,3838],{"class":483},[152,92357,92358,92360,92362],{"class":281,"line":989},[152,92359,53754],{"class":483},[152,92361,1736],{"class":52637},[152,92363,52644],{"class":483},[152,92365,92366,92368,92370],{"class":281,"line":996},[152,92367,53122],{"class":483},[152,92369,52671],{"class":52637},[152,92371,52644],{"class":483},[152,92373,92374],{"class":281,"line":1001},[152,92375,307],{"emptyLinePlaceholder":306},[152,92377,92378,92380,92382],{"class":281,"line":1006},[152,92379,844],{"class":483},[152,92381,53137],{"class":52637},[152,92383,52644],{"class":483},[152,92385,92386,92388,92390,92392,92394,92396,92398,92400],{"class":281,"line":1018},[152,92387,53481],{"class":483},[152,92389,52948],{"class":52637},[152,92391,54823],{"class":285},[152,92393,1864],{"class":483},[152,92395,54828],{"class":289},[152,92397,56651],{"class":483},[152,92399,52948],{"class":52637},[152,92401,52644],{"class":483},[152,92403,92404,92406,92408,92410,92412,92414,92416,92418],{"class":281,"line":1027},[152,92405,53481],{"class":483},[152,92407,53150],{"class":52637},[152,92409,56576],{"class":285},[152,92411,1864],{"class":483},[152,92413,89611],{"class":289},[152,92415,56651],{"class":483},[152,92417,53150],{"class":52637},[152,92419,52644],{"class":483},[152,92421,92422,92424,92426],{"class":281,"line":1037},[152,92423,53481],{"class":483},[152,92425,53150],{"class":52637},[152,92427,52644],{"class":483},[152,92429,92430,92432,92434,92436,92438,92440,92442,92444],{"class":281,"line":1044},[152,92431,12837],{"class":476},[152,92433,88270],{"class":293},[152,92435,15180],{"class":476},[152,92437,55733],{"class":483},[152,92439,55736],{"class":285},[152,92441,1819],{"class":483},[152,92443,91483],{"class":289},[152,92445,1825],{"class":483},[152,92447,92448,92450,92452,92454],{"class":281,"line":1049},[152,92449,53556],{"class":476},[152,92451,11070],{"class":483},[152,92453,1864],{"class":476},[152,92455,48670],{"class":293},[152,92457,92458,92460,92462],{"class":281,"line":1054},[152,92459,71421],{"class":476},[152,92461,91502],{"class":285},[152,92463,12469],{"class":483},[152,92465,92466,92468,92470,92472],{"class":281,"line":1065},[152,92467,91509],{"class":483},[152,92469,1864],{"class":476},[152,92471,4675],{"class":483},[152,92473,4345],{"class":476},[152,92475,92476],{"class":281,"line":1074},[152,92477,91520],{"class":866},[152,92479,92480],{"class":281,"line":1084},[152,92481,3838],{"class":483},[152,92483,92484],{"class":281,"line":1091},[152,92485,91529],{"class":866},[152,92487,92488],{"class":281,"line":1096},[152,92489,92490],{"class":866},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[152,92492,92493],{"class":281,"line":1101},[152,92494,92495],{"class":866},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[152,92497,92498,92500,92502,92504,92506,92508,92511,92513,92515],{"class":281,"line":1112},[152,92499,91544],{"class":483},[152,92501,59150],{"class":285},[152,92503,1819],{"class":483},[152,92505,91551],{"class":289},[152,92507,91554],{"class":483},[152,92509,92510],{"class":285},"throttle",[152,92512,91560],{"class":483},[152,92514,66411],{"class":293},[152,92516,31834],{"class":483},[152,92518,92519,92521,92523],{"class":281,"line":1121},[152,92520,53754],{"class":483},[152,92522,53150],{"class":52637},[152,92524,52644],{"class":483},[152,92526,92527,92529,92531],{"class":281,"line":1131},[152,92528,53122],{"class":483},[152,92530,53137],{"class":52637},[152,92532,52644],{"class":483},[152,92534,92535],{"class":281,"line":1138},[152,92536,307],{"emptyLinePlaceholder":306},[152,92538,92539,92541,92543],{"class":281,"line":1143},[152,92540,53122],{"class":483},[152,92542,51972],{"class":52637},[152,92544,52644],{"class":483},[698,92546,92547],{},[419,92548,92549],{},"手写一个节流函数来处理",[19,92551,72289],{},[19,92553,91603],{},[19,92555,92556],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92558,92559],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[270,92561,92563],{"className":51970,"code":92562,"language":51972,"meta":275,"style":275},"\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",[277,92564,92565,92575,92589,92593,92601,92615,92635,92647,92655,92661,92671,92683,92695,92705,92717,92727,92737,92749,92753,92761,92769,92773,92781,92799,92817,92825,92843,92853,92861,92871,92875,92879,92883,92888,92893,92898,92903,92908,92913,92930,92936,92944,92955,92970,92977,92982,92987,92997,93002,93007,93012,93016,93020,93024,93044,93052,93060,93064],{"__ignoreMap":275},[152,92566,92567,92569,92571,92573],{"class":281,"line":282},[152,92568,52634],{"class":483},[152,92570,52638],{"class":52637},[152,92572,52641],{"class":285},[152,92574,52644],{"class":483},[152,92576,92577,92579,92581,92583,92585,92587],{"class":281,"line":303},[152,92578,844],{"class":483},[152,92580,51972],{"class":52637},[152,92582,52653],{"class":285},[152,92584,1864],{"class":483},[152,92586,52658],{"class":289},[152,92588,52644],{"class":483},[152,92590,92591],{"class":281,"line":310},[152,92592,307],{"emptyLinePlaceholder":306},[152,92594,92595,92597,92599],{"class":281,"line":324},[152,92596,844],{"class":483},[152,92598,52671],{"class":52637},[152,92600,52644],{"class":483},[152,92602,92603,92605,92607,92609,92611,92613],{"class":281,"line":329},[152,92604,53481],{"class":483},[152,92606,52681],{"class":52637},[152,92608,52684],{"class":285},[152,92610,1864],{"class":483},[152,92612,52689],{"class":289},[152,92614,52644],{"class":483},[152,92616,92617,92619,92621,92623,92625,92627,92629,92631,92633],{"class":281,"line":343},[152,92618,53481],{"class":483},[152,92620,52681],{"class":52637},[152,92622,16535],{"class":285},[152,92624,1864],{"class":483},[152,92626,52728],{"class":289},[152,92628,52708],{"class":285},[152,92630,1864],{"class":483},[152,92632,52735],{"class":289},[152,92634,52644],{"class":483},[152,92636,92637,92639,92641,92643,92645],{"class":281,"line":348},[152,92638,53481],{"class":483},[152,92640,52744],{"class":52637},[152,92642,52747],{"class":483},[152,92644,52744],{"class":52637},[152,92646,52644],{"class":483},[152,92648,92649,92651,92653],{"class":281,"line":362},[152,92650,53481],{"class":483},[152,92652,1736],{"class":52637},[152,92654,52644],{"class":483},[152,92656,92657,92659],{"class":281,"line":367},[152,92658,56089],{"class":285},[152,92660,17187],{"class":483},[152,92662,92663,92665,92667,92669],{"class":281,"line":381},[152,92664,73933],{"class":293},[152,92666,52774],{"class":483},[152,92668,61842],{"class":293},[152,92670,2965],{"class":483},[152,92672,92673,92675,92677,92679,92681],{"class":281,"line":386},[152,92674,56108],{"class":293},[152,92676,52774],{"class":483},[152,92678,3382],{"class":293},[152,92680,52829],{"class":476},[152,92682,2965],{"class":483},[152,92684,92685,92687,92689,92691,92693],{"class":281,"line":932},[152,92686,56122],{"class":293},[152,92688,52774],{"class":483},[152,92690,3382],{"class":293},[152,92692,52829],{"class":476},[152,92694,2965],{"class":483},[152,92696,92697,92699,92701,92703],{"class":281,"line":942},[152,92698,56221],{"class":293},[152,92700,52774],{"class":483},[152,92702,91343],{"class":293},[152,92704,2965],{"class":483},[152,92706,92707,92709,92711,92713,92715],{"class":281,"line":949},[152,92708,56259],{"class":293},[152,92710,52774],{"class":483},[152,92712,2633],{"class":293},[152,92714,52829],{"class":476},[152,92716,2965],{"class":483},[152,92718,92719,92721,92723,92725],{"class":281,"line":954},[152,92720,58753],{"class":293},[152,92722,52774],{"class":483},[152,92724,62179],{"class":293},[152,92726,2965],{"class":483},[152,92728,92729,92731,92733,92735],{"class":281,"line":959},[152,92730,58623],{"class":293},[152,92732,52774],{"class":483},[152,92734,52929],{"class":293},[152,92736,2965],{"class":483},[152,92738,92739,92741,92743,92745,92747],{"class":281,"line":970},[152,92740,91382],{"class":293},[152,92742,52774],{"class":483},[152,92744,2127],{"class":293},[152,92746,52829],{"class":476},[152,92748,2965],{"class":483},[152,92750,92751],{"class":281,"line":979},[152,92752,3838],{"class":483},[152,92754,92755,92757,92759],{"class":281,"line":989},[152,92756,53754],{"class":483},[152,92758,1736],{"class":52637},[152,92760,52644],{"class":483},[152,92762,92763,92765,92767],{"class":281,"line":996},[152,92764,53122],{"class":483},[152,92766,52671],{"class":52637},[152,92768,52644],{"class":483},[152,92770,92771],{"class":281,"line":1001},[152,92772,307],{"emptyLinePlaceholder":306},[152,92774,92775,92777,92779],{"class":281,"line":1006},[152,92776,844],{"class":483},[152,92778,53137],{"class":52637},[152,92780,52644],{"class":483},[152,92782,92783,92785,92787,92789,92791,92793,92795,92797],{"class":281,"line":1018},[152,92784,53481],{"class":483},[152,92786,52948],{"class":52637},[152,92788,54823],{"class":285},[152,92790,1864],{"class":483},[152,92792,54828],{"class":289},[152,92794,56651],{"class":483},[152,92796,52948],{"class":52637},[152,92798,52644],{"class":483},[152,92800,92801,92803,92805,92807,92809,92811,92813,92815],{"class":281,"line":1027},[152,92802,53481],{"class":483},[152,92804,53150],{"class":52637},[152,92806,56576],{"class":285},[152,92808,1864],{"class":483},[152,92810,89611],{"class":289},[152,92812,56651],{"class":483},[152,92814,53150],{"class":52637},[152,92816,52644],{"class":483},[152,92818,92819,92821,92823],{"class":281,"line":1037},[152,92820,53481],{"class":483},[152,92822,53150],{"class":52637},[152,92824,52644],{"class":483},[152,92826,92827,92829,92831,92833,92835,92837,92839,92841],{"class":281,"line":1044},[152,92828,12837],{"class":476},[152,92830,88270],{"class":293},[152,92832,15180],{"class":476},[152,92834,55733],{"class":483},[152,92836,55736],{"class":285},[152,92838,1819],{"class":483},[152,92840,91483],{"class":289},[152,92842,1825],{"class":483},[152,92844,92845,92847,92849,92851],{"class":281,"line":1049},[152,92846,53556],{"class":476},[152,92848,11070],{"class":483},[152,92850,1864],{"class":476},[152,92852,48670],{"class":293},[152,92854,92855,92857,92859],{"class":281,"line":1054},[152,92856,71421],{"class":476},[152,92858,91502],{"class":285},[152,92860,12469],{"class":483},[152,92862,92863,92865,92867,92869],{"class":281,"line":1065},[152,92864,91509],{"class":483},[152,92866,1864],{"class":476},[152,92868,4675],{"class":483},[152,92870,4345],{"class":476},[152,92872,92873],{"class":281,"line":1074},[152,92874,91520],{"class":866},[152,92876,92877],{"class":281,"line":1084},[152,92878,3838],{"class":483},[152,92880,92881],{"class":281,"line":1091},[152,92882,91529],{"class":866},[152,92884,92885],{"class":281,"line":1096},[152,92886,92887],{"class":866},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[152,92889,92890],{"class":281,"line":1101},[152,92891,92892],{"class":866},"    \u002F\u002F 1.声明一个定时器变量\n",[152,92894,92895],{"class":281,"line":1112},[152,92896,92897],{"class":866},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[152,92899,92900],{"class":281,"line":1121},[152,92901,92902],{"class":866},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[152,92904,92905],{"class":281,"line":1131},[152,92906,92907],{"class":866},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[152,92909,92910],{"class":281,"line":1138},[152,92911,92912],{"class":866},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[152,92914,92915,92917,92920,92922,92924,92926,92928],{"class":281,"line":1143},[152,92916,71421],{"class":476},[152,92918,92919],{"class":285}," throttle",[152,92921,1819],{"class":483},[152,92923,91974],{"class":6858},[152,92925,14051],{"class":483},[152,92927,2528],{"class":6858},[152,92929,14058],{"class":483},[152,92931,92932,92934],{"class":281,"line":1148},[152,92933,81109],{"class":476},[152,92935,91987],{"class":483},[152,92937,92938,92940,92942],{"class":281,"line":1159},[152,92939,75319],{"class":476},[152,92941,60255],{"class":476},[152,92943,55789],{"class":483},[152,92945,92946,92948,92950,92952],{"class":281,"line":1168},[152,92947,4147],{"class":476},[152,92949,3322],{"class":483},[152,92951,2035],{"class":476},[152,92953,92954],{"class":483},"timer) {\n",[152,92956,92957,92960,92962,92964,92966,92968],{"class":281,"line":1178},[152,92958,92959],{"class":483},"          timer ",[152,92961,1864],{"class":476},[152,92963,92028],{"class":285},[152,92965,1819],{"class":483},[152,92967,55786],{"class":476},[152,92969,55789],{"class":483},[152,92971,92972,92975],{"class":281,"line":1185},[152,92973,92974],{"class":285},"            fn",[152,92976,3627],{"class":483},[152,92978,92979],{"class":281,"line":1190},[152,92980,92981],{"class":866},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[152,92983,92984],{"class":281,"line":1195},[152,92985,92986],{"class":866},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[152,92988,92989,92992,92994],{"class":281,"line":1206},[152,92990,92991],{"class":483},"            timer ",[152,92993,1864],{"class":476},[152,92995,92996],{"class":293}," null\n",[152,92998,92999],{"class":281,"line":1215},[152,93000,93001],{"class":866},"            \u002F\u002F 不能用clearTimeout(timer)\n",[152,93003,93004],{"class":281,"line":1225},[152,93005,93006],{"class":866},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[152,93008,93009],{"class":281,"line":1232},[152,93010,93011],{"class":483},"          }, t)\n",[152,93013,93014],{"class":281,"line":1237},[152,93015,4179],{"class":483},[152,93017,93018],{"class":281,"line":1242},[152,93019,53735],{"class":483},[152,93021,93022],{"class":281,"line":1253},[152,93023,3838],{"class":483},[152,93025,93026,93028,93030,93032,93034,93036,93038,93040,93042],{"class":281,"line":1262},[152,93027,91544],{"class":483},[152,93029,59150],{"class":285},[152,93031,1819],{"class":483},[152,93033,91551],{"class":289},[152,93035,14051],{"class":483},[152,93037,92510],{"class":285},[152,93039,91560],{"class":483},[152,93041,66411],{"class":293},[152,93043,31834],{"class":483},[152,93045,93046,93048,93050],{"class":281,"line":1272},[152,93047,53754],{"class":483},[152,93049,53150],{"class":52637},[152,93051,52644],{"class":483},[152,93053,93054,93056,93058],{"class":281,"line":1279},[152,93055,53122],{"class":483},[152,93057,53137],{"class":52637},[152,93059,52644],{"class":483},[152,93061,93062],{"class":281,"line":1284},[152,93063,307],{"emptyLinePlaceholder":306},[152,93065,93066,93068,93070],{"class":281,"line":1289},[152,93067,53122],{"class":483},[152,93069,51972],{"class":52637},[152,93071,52644],{"class":483},[14,93073,93075],{"id":93074},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[270,93077,93079],{"className":54404,"code":93078,"language":54406,"meta":275,"style":275},"\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",[277,93080,93081,93089,93097,93102,93107,93112,93117,93121,93129],{"__ignoreMap":275},[152,93082,93083,93085,93087],{"class":281,"line":282},[152,93084,844],{"class":483},[152,93086,53137],{"class":52637},[152,93088,52644],{"class":483},[152,93090,93091,93093,93095],{"class":281,"line":303},[152,93092,53481],{"class":483},[152,93094,53150],{"class":52637},[152,93096,52644],{"class":483},[152,93098,93099],{"class":281,"line":310},[152,93100,93101],{"class":483},"    let timer = null\n",[152,93103,93104],{"class":281,"line":324},[152,93105,93106],{"class":483},"    timer = setTimeout(() => {\n",[152,93108,93109],{"class":281,"line":329},[152,93110,93111],{"class":483},"      clearTimeout(timer)\n",[152,93113,93114],{"class":281,"line":343},[152,93115,93116],{"class":483},"      console.log(timer)\n",[152,93118,93119],{"class":281,"line":348},[152,93120,61562],{"class":483},[152,93122,93123,93125,93127],{"class":281,"line":362},[152,93124,53754],{"class":483},[152,93126,53150],{"class":52637},[152,93128,52644],{"class":483},[152,93130,93131,93133,93135],{"class":281,"line":367},[152,93132,53122],{"class":483},[152,93134,53137],{"class":52637},[152,93136,52644],{"class":483},[19,93138,93139],{},"输出为1",[19,93141,93142],{},"在开启的定时器里边写清除定时器",[19,93144,93145],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[14,93147,93149],{"id":93148},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93151,93152],{},"页面打开，可以记录上一次的视频播放位置",[19,93154,93155],{},[401,93156],{"alt":275,"src":93157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93159,93160],{},[401,93161],{"alt":275,"src":93162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[270,93164,93166],{"className":51970,"code":93165,"language":51972,"meta":275,"style":275},"\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",[277,93167,93168,93178,93192,93196,93204,93218,93238,93258,93280,93293,93301,93307,93317,93327,93337,93341,93345,93352,93365,93377,93381,93385,93395,93407,93421,93425,93429,93436,93446,93459,93471,93481,93491,93507,93519,93523,93527,93535,93545,93557,93567,93577,93587,93591,93595,93605,93616,93620,93628,93636,93640,93648,93663,93678,93693,93714,93722,93730,93745,93767,93775,93790,93816,93842,93868,93876,93884,93903,93911,93916,93935,93940,93958,93963,93968,93976,93981,93995,94003,94008,94025,94029,94034,94056,94060,94068,94076,94080],{"__ignoreMap":275},[152,93169,93170,93172,93174,93176],{"class":281,"line":282},[152,93171,52634],{"class":483},[152,93173,52638],{"class":52637},[152,93175,52641],{"class":285},[152,93177,52644],{"class":483},[152,93179,93180,93182,93184,93186,93188,93190],{"class":281,"line":303},[152,93181,844],{"class":483},[152,93183,51972],{"class":52637},[152,93185,52653],{"class":285},[152,93187,1864],{"class":483},[152,93189,52658],{"class":289},[152,93191,52644],{"class":483},[152,93193,93194],{"class":281,"line":310},[152,93195,307],{"emptyLinePlaceholder":306},[152,93197,93198,93200,93202],{"class":281,"line":324},[152,93199,844],{"class":483},[152,93201,52671],{"class":52637},[152,93203,52644],{"class":483},[152,93205,93206,93208,93210,93212,93214,93216],{"class":281,"line":329},[152,93207,53481],{"class":483},[152,93209,52681],{"class":52637},[152,93211,52684],{"class":285},[152,93213,1864],{"class":483},[152,93215,52689],{"class":289},[152,93217,60464],{"class":483},[152,93219,93220,93222,93224,93226,93228,93230,93232,93234,93236],{"class":281,"line":343},[152,93221,53481],{"class":483},[152,93223,52681],{"class":52637},[152,93225,52700],{"class":285},[152,93227,1864],{"class":483},[152,93229,52705],{"class":289},[152,93231,52708],{"class":285},[152,93233,1864],{"class":483},[152,93235,52713],{"class":289},[152,93237,60464],{"class":483},[152,93239,93240,93242,93244,93246,93248,93250,93252,93254,93256],{"class":281,"line":348},[152,93241,53481],{"class":483},[152,93243,52681],{"class":52637},[152,93245,16535],{"class":285},[152,93247,1864],{"class":483},[152,93249,52728],{"class":289},[152,93251,52708],{"class":285},[152,93253,1864],{"class":483},[152,93255,52735],{"class":289},[152,93257,60464],{"class":483},[152,93259,93260,93262,93264,93266,93268,93271,93273,93275,93278],{"class":281,"line":362},[152,93261,53481],{"class":483},[152,93263,52681],{"class":52637},[152,93265,16535],{"class":285},[152,93267,1864],{"class":483},[152,93269,93270],{"class":289},"\"referrer\"",[152,93272,52708],{"class":285},[152,93274,1864],{"class":483},[152,93276,93277],{"class":289},"\"never\"",[152,93279,60464],{"class":483},[152,93281,93282,93284,93286,93289,93291],{"class":281,"line":367},[152,93283,53481],{"class":483},[152,93285,52744],{"class":52637},[152,93287,93288],{"class":483},">综合案例\u003C\u002F",[152,93290,52744],{"class":52637},[152,93292,52644],{"class":483},[152,93294,93295,93297,93299],{"class":281,"line":381},[152,93296,53481],{"class":483},[152,93298,1736],{"class":52637},[152,93300,52644],{"class":483},[152,93302,93303,93305],{"class":281,"line":386},[152,93304,8045],{"class":52637},[152,93306,17187],{"class":483},[152,93308,93309,93311,93313,93315],{"class":281,"line":932},[152,93310,56032],{"class":293},[152,93312,52774],{"class":483},[152,93314,2000],{"class":293},[152,93316,2965],{"class":483},[152,93318,93319,93321,93323,93325],{"class":281,"line":942},[152,93320,56043],{"class":293},[152,93322,52774],{"class":483},[152,93324,2000],{"class":293},[152,93326,2965],{"class":483},[152,93328,93329,93331,93333,93335],{"class":281,"line":949},[152,93330,73933],{"class":293},[152,93332,52774],{"class":483},[152,93334,61842],{"class":293},[152,93336,2965],{"class":483},[152,93338,93339],{"class":281,"line":954},[152,93340,3838],{"class":483},[152,93342,93343],{"class":281,"line":959},[152,93344,307],{"emptyLinePlaceholder":306},[152,93346,93347,93350],{"class":281,"line":970},[152,93348,93349],{"class":285},"    .container",[152,93351,17187],{"class":483},[152,93353,93354,93356,93358,93361,93363],{"class":281,"line":979},[152,93355,56108],{"class":293},[152,93357,52774],{"class":483},[152,93359,93360],{"class":293},"1200",[152,93362,52829],{"class":476},[152,93364,2965],{"class":483},[152,93366,93367,93369,93371,93373,93375],{"class":281,"line":989},[152,93368,56043],{"class":293},[152,93370,52774],{"class":483},[152,93372,2000],{"class":293},[152,93374,52893],{"class":293},[152,93376,2965],{"class":483},[152,93378,93379],{"class":281,"line":996},[152,93380,3838],{"class":483},[152,93382,93383],{"class":281,"line":1001},[152,93384,307],{"emptyLinePlaceholder":306},[152,93386,93387,93390,93393],{"class":281,"line":1006},[152,93388,93389],{"class":285},"    .video",[152,93391,93392],{"class":52637}," video",[152,93394,17187],{"class":483},[152,93396,93397,93399,93401,93403,93405],{"class":281,"line":1018},[152,93398,56108],{"class":293},[152,93400,52774],{"class":483},[152,93402,2119],{"class":293},[152,93404,2136],{"class":476},[152,93406,2965],{"class":483},[152,93408,93409,93411,93413,93415,93417,93419],{"class":281,"line":1027},[152,93410,56032],{"class":293},[152,93412,52774],{"class":483},[152,93414,2508],{"class":293},[152,93416,52829],{"class":476},[152,93418,5735],{"class":293},[152,93420,2965],{"class":483},[152,93422,93423],{"class":281,"line":1037},[152,93424,3838],{"class":483},[152,93426,93427],{"class":281,"line":1044},[152,93428,307],{"emptyLinePlaceholder":306},[152,93430,93431,93434],{"class":281,"line":1049},[152,93432,93433],{"class":285},"    .elevator",[152,93435,17187],{"class":483},[152,93437,93438,93440,93442,93444],{"class":281,"line":1054},[152,93439,56096],{"class":293},[152,93441,52774],{"class":483},[152,93443,87570],{"class":293},[152,93445,2965],{"class":483},[152,93447,93448,93450,93452,93455,93457],{"class":281,"line":1065},[152,93449,56284],{"class":293},[152,93451,52774],{"class":483},[152,93453,93454],{"class":293},"280",[152,93456,52829],{"class":476},[152,93458,2965],{"class":483},[152,93460,93461,93463,93465,93467,93469],{"class":281,"line":1074},[152,93462,87764],{"class":293},[152,93464,52774],{"class":483},[152,93466,2508],{"class":293},[152,93468,52829],{"class":476},[152,93470,2965],{"class":483},[152,93472,93473,93475,93477,93479],{"class":281,"line":1084},[152,93474,87577],{"class":293},[152,93476,52774],{"class":483},[152,93478,87582],{"class":293},[152,93480,2965],{"class":483},[152,93482,93483,93485,93487,93489],{"class":281,"line":1091},[152,93484,63058],{"class":293},[152,93486,52774],{"class":483},[152,93488,62179],{"class":293},[152,93490,2965],{"class":483},[152,93492,93493,93495,93497,93499,93501,93503,93505],{"class":281,"line":1096},[152,93494,63314],{"class":293},[152,93496,52774],{"class":483},[152,93498,2026],{"class":293},[152,93500,52829],{"class":476},[152,93502,52858],{"class":293},[152,93504,63581],{"class":293},[152,93506,2965],{"class":483},[152,93508,93509,93511,93513,93515,93517],{"class":281,"line":1101},[152,93510,56108],{"class":293},[152,93512,52774],{"class":483},[152,93514,2714],{"class":293},[152,93516,52829],{"class":476},[152,93518,2965],{"class":483},[152,93520,93521],{"class":281,"line":1112},[152,93522,3838],{"class":483},[152,93524,93525],{"class":281,"line":1121},[152,93526,307],{"emptyLinePlaceholder":306},[152,93528,93529,93531,93533],{"class":281,"line":1131},[152,93530,93433],{"class":285},[152,93532,3070],{"class":52637},[152,93534,17187],{"class":483},[152,93536,93537,93539,93541,93543],{"class":281,"line":1138},[152,93538,56346],{"class":293},[152,93540,52774],{"class":483},[152,93542,62206],{"class":293},[152,93544,2965],{"class":483},[152,93546,93547,93549,93551,93553,93555],{"class":281,"line":1143},[152,93548,56032],{"class":293},[152,93550,52774],{"class":483},[152,93552,2254],{"class":293},[152,93554,52829],{"class":476},[152,93556,2965],{"class":483},[152,93558,93559,93561,93563,93565],{"class":281,"line":1148},[152,93560,65307],{"class":293},[152,93562,52774],{"class":483},[152,93564,56074],{"class":293},[152,93566,2965],{"class":483},[152,93568,93569,93571,93573,93575],{"class":281,"line":1159},[152,93570,58623],{"class":293},[152,93572,52774],{"class":483},[152,93574,52929],{"class":293},[152,93576,2965],{"class":483},[152,93578,93579,93581,93583,93585],{"class":281,"line":1168},[152,93580,58753],{"class":293},[152,93582,52774],{"class":483},[152,93584,63407],{"class":293},[152,93586,2965],{"class":483},[152,93588,93589],{"class":281,"line":1178},[152,93590,3838],{"class":483},[152,93592,93593],{"class":281,"line":1185},[152,93594,307],{"emptyLinePlaceholder":306},[152,93596,93597,93599,93601,93603],{"class":281,"line":1190},[152,93598,93433],{"class":285},[152,93600,3070],{"class":52637},[152,93602,65361],{"class":285},[152,93604,17187],{"class":483},[152,93606,93607,93609,93611,93614],{"class":281,"line":1195},[152,93608,58753],{"class":293},[152,93610,52774],{"class":483},[152,93612,93613],{"class":293},"#1286ff",[152,93615,2965],{"class":483},[152,93617,93618],{"class":281,"line":1206},[152,93619,3838],{"class":483},[152,93621,93622,93624,93626],{"class":281,"line":1215},[152,93623,53754],{"class":483},[152,93625,1736],{"class":52637},[152,93627,52644],{"class":483},[152,93629,93630,93632,93634],{"class":281,"line":1225},[152,93631,53122],{"class":483},[152,93633,52671],{"class":52637},[152,93635,52644],{"class":483},[152,93637,93638],{"class":281,"line":1232},[152,93639,307],{"emptyLinePlaceholder":306},[152,93641,93642,93644,93646],{"class":281,"line":1237},[152,93643,844],{"class":483},[152,93645,53137],{"class":52637},[152,93647,52644],{"class":483},[152,93649,93650,93652,93654,93656,93658,93661],{"class":281,"line":1242},[152,93651,53481],{"class":483},[152,93653,52948],{"class":52637},[152,93655,54823],{"class":285},[152,93657,1864],{"class":483},[152,93659,93660],{"class":289},"\"container\"",[152,93662,52644],{"class":483},[152,93664,93665,93667,93669,93671,93673,93676],{"class":281,"line":1253},[152,93666,52678],{"class":483},[152,93668,52948],{"class":52637},[152,93670,54823],{"class":285},[152,93672,1864],{"class":483},[152,93674,93675],{"class":289},"\"header\"",[152,93677,52644],{"class":483},[152,93679,93680,93682,93684,93686,93688,93691],{"class":281,"line":1262},[152,93681,56571],{"class":483},[152,93683,69],{"class":52637},[152,93685,62394],{"class":285},[152,93687,1864],{"class":483},[152,93689,93690],{"class":289},"\"http:\u002F\u002Fpip.itcast.cn\"",[152,93692,52644],{"class":483},[152,93694,93695,93697,93699,93701,93703,93706,93708,93710,93712],{"class":281,"line":1272},[152,93696,56639],{"class":483},[152,93698,401],{"class":52637},[152,93700,56576],{"class":285},[152,93702,1864],{"class":483},[152,93704,93705],{"class":289},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[152,93707,56584],{"class":285},[152,93709,1864],{"class":483},[152,93711,9294],{"class":289},[152,93713,60464],{"class":483},[152,93715,93716,93718,93720],{"class":281,"line":1279},[152,93717,56744],{"class":483},[152,93719,69],{"class":52637},[152,93721,52644],{"class":483},[152,93723,93724,93726,93728],{"class":281,"line":1284},[152,93725,53113],{"class":483},[152,93727,52948],{"class":52637},[152,93729,52644],{"class":483},[152,93731,93732,93734,93736,93738,93740,93743],{"class":281,"line":1289},[152,93733,52678],{"class":483},[152,93735,52948],{"class":52637},[152,93737,54823],{"class":285},[152,93739,1864],{"class":483},[152,93741,93742],{"class":289},"\"video\"",[152,93744,52644],{"class":483},[152,93746,93747,93749,93751,93753,93755,93758,93761,93763,93765],{"class":281,"line":1301},[152,93748,56571],{"class":483},[152,93750,29782],{"class":52637},[152,93752,56576],{"class":285},[152,93754,1864],{"class":483},[152,93756,93757],{"class":289},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[152,93759,93760],{"class":285}," controls",[152,93762,56651],{"class":483},[152,93764,29782],{"class":52637},[152,93766,52644],{"class":483},[152,93768,93769,93771,93773],{"class":281,"line":1310},[152,93770,53113],{"class":483},[152,93772,52948],{"class":52637},[152,93774,52644],{"class":483},[152,93776,93777,93779,93781,93783,93785,93788],{"class":281,"line":1320},[152,93778,52678],{"class":483},[152,93780,52948],{"class":52637},[152,93782,54823],{"class":285},[152,93784,1864],{"class":483},[152,93786,93787],{"class":289},"\"elevator\"",[152,93789,52644],{"class":483},[152,93791,93792,93794,93796,93798,93800,93802,93805,93807,93809,93812,93814],{"class":281,"line":1327},[152,93793,56571],{"class":483},[152,93795,69],{"class":52637},[152,93797,62394],{"class":285},[152,93799,1864],{"class":483},[152,93801,65573],{"class":289},[152,93803,93804],{"class":285}," data-ref",[152,93806,1864],{"class":483},[152,93808,93742],{"class":289},[152,93810,93811],{"class":483},">视频介绍\u003C\u002F",[152,93813,69],{"class":52637},[152,93815,52644],{"class":483},[152,93817,93818,93820,93822,93824,93826,93828,93830,93832,93835,93838,93840],{"class":281,"line":11528},[152,93819,56571],{"class":483},[152,93821,69],{"class":52637},[152,93823,62394],{"class":285},[152,93825,1864],{"class":483},[152,93827,65573],{"class":289},[152,93829,93804],{"class":285},[152,93831,1864],{"class":483},[152,93833,93834],{"class":289},"\"intro\"",[152,93836,93837],{"class":483},">课程简介\u003C\u002F",[152,93839,69],{"class":52637},[152,93841,52644],{"class":483},[152,93843,93844,93846,93848,93850,93852,93854,93856,93858,93861,93864,93866],{"class":281,"line":11536},[152,93845,56571],{"class":483},[152,93847,69],{"class":52637},[152,93849,62394],{"class":285},[152,93851,1864],{"class":483},[152,93853,65573],{"class":289},[152,93855,93804],{"class":285},[152,93857,1864],{"class":483},[152,93859,93860],{"class":289},"\"outline\"",[152,93862,93863],{"class":483},">评论列表\u003C\u002F",[152,93865,69],{"class":52637},[152,93867,52644],{"class":483},[152,93869,93870,93872,93874],{"class":281,"line":11541},[152,93871,53113],{"class":483},[152,93873,52948],{"class":52637},[152,93875,52644],{"class":483},[152,93877,93878,93880,93882],{"class":281,"line":18219},[152,93879,53754],{"class":483},[152,93881,52948],{"class":52637},[152,93883,52644],{"class":483},[152,93885,93886,93888,93890,93892,93894,93897,93899,93901],{"class":281,"line":18225},[152,93887,53481],{"class":483},[152,93889,53150],{"class":52637},[152,93891,56576],{"class":285},[152,93893,1864],{"class":483},[152,93895,93896],{"class":289},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[152,93898,56651],{"class":483},[152,93900,53150],{"class":52637},[152,93902,52644],{"class":483},[152,93904,93905,93907,93909],{"class":281,"line":18248},[152,93906,53481],{"class":483},[152,93908,53150],{"class":52637},[152,93910,52644],{"class":483},[152,93912,93913],{"class":281,"line":18254},[152,93914,93915],{"class":866},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[152,93917,93918,93920,93922,93924,93926,93928,93930,93933],{"class":281,"line":18277},[152,93919,12837],{"class":476},[152,93921,93392],{"class":293},[152,93923,15180],{"class":476},[152,93925,55733],{"class":483},[152,93927,55736],{"class":285},[152,93929,1819],{"class":483},[152,93931,93932],{"class":289},"'video'",[152,93934,1825],{"class":483},[152,93936,93937],{"class":281,"line":18291},[152,93938,93939],{"class":866},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[152,93941,93942,93945,93947,93949,93951,93954,93956],{"class":281,"line":18311},[152,93943,93944],{"class":483},"    video.ontimeupdate ",[152,93946,1864],{"class":476},[152,93948,89692],{"class":483},[152,93950,92510],{"class":285},[152,93952,93953],{"class":483},"(() ",[152,93955,86059],{"class":476},[152,93957,17187],{"class":483},[152,93959,93960],{"class":281,"line":18317},[152,93961,93962],{"class":866},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[152,93964,93965],{"class":281,"line":18328},[152,93966,93967],{"class":866},"      \u002F\u002F 控制台输出当前的时间\n",[152,93969,93970,93973],{"class":281,"line":18351},[152,93971,93972],{"class":866},"      \u002F\u002F console.log(video.currentTime)",[152,93974,93975],{"class":866},"  \u002F\u002F获得当前的视频时间\n",[152,93977,93978],{"class":281,"line":18373},[152,93979,93980],{"class":866},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[152,93982,93983,93985,93987,93989,93992],{"class":281,"line":18378},[152,93984,76020],{"class":483},[152,93986,72991],{"class":285},[152,93988,1819],{"class":483},[152,93990,93991],{"class":289},"'currentTime'",[152,93993,93994],{"class":483},", video.currentTime)\n",[152,93996,93997,93999,94001],{"class":281,"line":18384},[152,93998,55872],{"class":483},[152,94000,8052],{"class":293},[152,94002,1825],{"class":483},[152,94004,94005],{"class":281,"line":18398},[152,94006,94007],{"class":866},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[152,94009,94010,94013,94016,94018,94021,94023],{"class":281,"line":18411},[152,94011,94012],{"class":483},"    video.",[152,94014,94015],{"class":285},"onloadeddata",[152,94017,15180],{"class":476},[152,94019,94020],{"class":483}," () ",[152,94022,86059],{"class":476},[152,94024,17187],{"class":483},[152,94026,94027],{"class":281,"line":18416},[152,94028,61349],{"class":866},[152,94030,94031],{"class":281,"line":18430},[152,94032,94033],{"class":866},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[152,94035,94036,94039,94041,94044,94046,94048,94050,94052,94054],{"class":281,"line":18435},[152,94037,94038],{"class":483},"      video.currentTime ",[152,94040,1864],{"class":476},[152,94042,94043],{"class":483}," localStorage.",[152,94045,73022],{"class":285},[152,94047,1819],{"class":483},[152,94049,93991],{"class":289},[152,94051,15330],{"class":483},[152,94053,72694],{"class":476},[152,94055,48670],{"class":293},[152,94057,94058],{"class":281,"line":18441},[152,94059,3838],{"class":483},[152,94061,94062,94064,94066],{"class":281,"line":18446},[152,94063,53754],{"class":483},[152,94065,53150],{"class":52637},[152,94067,52644],{"class":483},[152,94069,94070,94072,94074],{"class":281,"line":18460},[152,94071,53122],{"class":483},[152,94073,53137],{"class":52637},[152,94075,52644],{"class":483},[152,94077,94078],{"class":281,"line":18465},[152,94079,307],{"emptyLinePlaceholder":306},[152,94081,94082,94084,94086],{"class":281,"line":18470},[152,94083,53122],{"class":483},[152,94085,51972],{"class":52637},[152,94087,52644],{"class":483},[1736,94089,94090],{},"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":275,"searchDepth":303,"depth":303,"links":94092},[94093,94098,94102,94103,94104,94109,94114,94115,94116,94117,94124,94129,94130,94140,94144,94145,94149],{"id":78028,"depth":303,"text":78029,"children":94094},[94095,94096,94097],{"id":78032,"depth":310,"text":78033},{"id":78057,"depth":310,"text":78058},{"id":78069,"depth":310,"text":78070},{"id":78081,"depth":303,"text":78082,"children":94099},[94100,94101],{"id":78085,"depth":310,"text":78086},{"id":78100,"depth":310,"text":78101},{"id":78152,"depth":303,"text":78153},{"id":78196,"depth":303,"text":78197},{"id":78213,"depth":303,"text":78214,"children":94105},[94106,94107,94108],{"id":78217,"depth":310,"text":78218},{"id":78230,"depth":310,"text":78231},{"id":78335,"depth":310,"text":78336},{"id":78624,"depth":303,"text":78625,"children":94110},[94111,94112,94113],{"id":78628,"depth":310,"text":78629},{"id":79071,"depth":310,"text":79072},{"id":79482,"depth":310,"text":79483},{"id":79545,"depth":303,"text":79546},{"id":79624,"depth":303,"text":79625},{"id":79717,"depth":303,"text":79718},{"id":81562,"depth":303,"text":81563,"children":94118},[94119,94120,94121,94122,94123],{"id":81566,"depth":310,"text":81567},{"id":81578,"depth":310,"text":81579},{"id":81797,"depth":310,"text":81798},{"id":81815,"depth":310,"text":81816},{"id":81875,"depth":310,"text":81876},{"id":86143,"depth":303,"text":86144,"children":94125},[94126,94127,94128],{"id":86147,"depth":310,"text":86148},{"id":86165,"depth":310,"text":86166},{"id":86191,"depth":310,"text":86192},{"id":86200,"depth":303,"text":86201},{"id":86222,"depth":303,"text":86223,"children":94131},[94132,94133,94134,94135,94136,94137,94138,94139],{"id":86226,"depth":310,"text":86227},{"id":86487,"depth":310,"text":86488},{"id":86673,"depth":310,"text":86674},{"id":87040,"depth":310,"text":87041},{"id":87156,"depth":310,"text":87157},{"id":87192,"depth":310,"text":87193},{"id":87239,"depth":310,"text":87240},{"id":87273,"depth":310,"text":87274},{"id":88636,"depth":303,"text":88637,"children":94141},[94142,94143],{"id":88640,"depth":310,"text":88641},{"id":88677,"depth":310,"text":88678},{"id":90032,"depth":303,"text":90033},{"id":90403,"depth":303,"text":90404,"children":94146},[94147,94148],{"id":90407,"depth":310,"text":90408},{"id":90441,"depth":310,"text":90442},{"id":91170,"depth":303,"text":91171,"children":94150},[94151,94152,94153,94154],{"id":91174,"depth":310,"text":91175},{"id":92132,"depth":310,"text":92133},{"id":93074,"depth":310,"text":93075},{"id":93148,"depth":310,"text":93149},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78017,"description":24991},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94161,"title":94162,"body":94163,"description":94174,"extension":1744,"meta":94175,"navigation":306,"path":94177,"seo":94178,"stem":94179,"__hash__":94180},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94164,"toc":94172},[94165],[19,94166,94167,94168],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[69,94169,94170],{"href":94170,"rel":94171},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[245],{"title":275,"searchDepth":303,"depth":303,"links":94173},[],"三件套第三套学习",{"category":94176},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94162,"description":94174},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94182,"title":94183,"body":94184,"description":24991,"extension":1744,"meta":94289,"navigation":306,"path":94290,"seo":94291,"stem":94292,"__hash__":94293},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94185,"toc":94284},[94186,94193,94196,94199,94202,94206,94215,94218,94221,94225,94234,94237,94241,94244,94264,94267,94281],[19,94187,94188],{},[69,94189,94192],{"href":94190,"rel":94191},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[245],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94194,94183],{"id":94195},"_1安装",[19,94197,94198],{},"numpy是科学计算基础库,底层是C语言",[19,94200,94201],{},"三种方式：",[1760,94203,94205],{"id":94204},"_11-通过pip安装","1.1 通过pip安装",[270,94207,94209],{"className":31715,"code":94208,"language":31717,"meta":275,"style":275},"pip install numpy\n",[277,94210,94211],{"__ignoreMap":275},[152,94212,94213],{"class":281,"line":282},[152,94214,94208],{"class":483},[19,94216,94217],{},"首选方式，自动处理依赖项",[19,94219,94220],{},"在提示系统命令符中使用cmd",[1760,94222,94224],{"id":94223},"_12-通过anaconda安装","1.2 通过Anaconda安装",[270,94226,94228],{"className":31715,"code":94227,"language":31717,"meta":275,"style":275},"conda install numpy\n",[277,94229,94230],{"__ignoreMap":275},[152,94231,94232],{"class":281,"line":282},[152,94233,94227],{"class":483},[19,94235,94236],{},"自动解决环境依赖",[1760,94238,94240],{"id":94239},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94242,94243],{},"对于Debian\u002FUbuntu",[270,94245,94247],{"className":31715,"code":94246,"language":31717,"meta":275,"style":275},"sudo apt-get install python3-numpy\n",[277,94248,94249],{"__ignoreMap":275},[152,94250,94251,94254,94256,94259,94261],{"class":281,"line":282},[152,94252,94253],{"class":483},"sudo apt",[152,94255,2340],{"class":476},[152,94257,94258],{"class":483},"get install python3",[152,94260,2340],{"class":476},[152,94262,94263],{"class":483},"numpy\n",[19,94265,94266],{},"对于Fedora:",[270,94268,94270],{"className":31715,"code":94269,"language":31717,"meta":275,"style":275},"sudo dnf install python3-numpy\n",[277,94271,94272],{"__ignoreMap":275},[152,94273,94274,94277,94279],{"class":281,"line":282},[152,94275,94276],{"class":483},"sudo dnf install python3",[152,94278,2340],{"class":476},[152,94280,94263],{"class":483},[1736,94282,94283],{},"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":275,"searchDepth":303,"depth":303,"links":94285},[94286,94287,94288],{"id":94204,"depth":303,"text":94205},{"id":94223,"depth":303,"text":94224},{"id":94239,"depth":303,"text":94240},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94183,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94295,"title":94296,"body":94297,"description":24991,"extension":1744,"meta":94410,"navigation":306,"path":94411,"seo":94412,"stem":94413,"__hash__":94414},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94298,"toc":94408},[94299,94302,94305,94308,94311,94314,94317,94320,94323,94326,94402,94405],[10,94300,94296],{"id":94301},"_10算数函数",[19,94303,94304],{},"加减乘除运算跟python基础语法没区别",[19,94306,94307],{},"除了python那种方法外还可以使用函数",[19,94309,94310],{},"加：np.add(a,b)",[19,94312,94313],{},"减：np.subtract(a,b)",[19,94315,94316],{},"乘：np.multiply(a,b)",[19,94318,94319],{},"除：np.divide(a,b) == a\u002Fb",[19,94321,94322],{},"取余：np.mod(a,b) == a%b",[19,94324,94325],{},"必须会的用法：",[270,94327,94329],{"className":31715,"code":94328,"language":31717,"meta":275,"style":275},"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",[277,94330,94331,94353,94374,94384,94397],{"__ignoreMap":275},[152,94332,94333,94335,94337,94340,94342,94345,94347,94349,94351],{"class":281,"line":282},[152,94334,69],{"class":483},[152,94336,1864],{"class":476},[152,94338,94339],{"class":483},"np.arange(",[152,94341,2228],{"class":293},[152,94343,94344],{"class":483},").reshape(",[152,94346,1888],{"class":293},[152,94348,2186],{"class":483},[152,94350,1888],{"class":293},[152,94352,1825],{"class":483},[152,94354,94355,94357,94359,94362,94364,94366,94368,94370,94372],{"class":281,"line":303},[152,94356,2071],{"class":483},[152,94358,1864],{"class":476},[152,94360,94361],{"class":483},"np.array([",[152,94363,2254],{"class":293},[152,94365,2186],{"class":483},[152,94367,2254],{"class":293},[152,94369,2186],{"class":483},[152,94371,2254],{"class":293},[152,94373,6299],{"class":483},[152,94375,94376,94379,94381],{"class":281,"line":310},[152,94377,94378],{"class":483},"result",[152,94380,1864],{"class":476},[152,94382,94383],{"class":483},"np.empty_like(a)\n",[152,94385,94386,94389,94392,94394],{"class":281,"line":324},[152,94387,94388],{"class":483},"np.add(a,b,",[152,94390,94391],{"class":6858},"out",[152,94393,1864],{"class":476},[152,94395,94396],{"class":483},"result)\n",[152,94398,94399],{"class":281,"line":329},[152,94400,94401],{"class":483},"result\n",[19,94403,94404],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1736,94406,94407],{},"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":275,"searchDepth":303,"depth":303,"links":94409},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94296,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94416,"title":94417,"body":94418,"description":24991,"extension":1744,"meta":95180,"navigation":306,"path":95181,"seo":95182,"stem":95183,"__hash__":95184},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94419,"toc":95167},[94420,94423,94426,94429,94433,94472,94476,94520,94580,94584,94587,94626,94629,94674,94678,94714,94718,94787,94791,94855,94859,94862,94865,94868,94871,94907,94911,94951,94955,95027,95030,95034,95097,95101,95164],[10,94421,94417],{"id":94422},"_11统计函数",[19,94424,94425],{},"sum max min mean",[19,94427,94428],{},"这些有axis参数，可以指定方向",[1760,94430,94432],{"id":94431},"_111-sum求和函数","11.1 sum()求和函数",[270,94434,94436],{"className":31715,"code":94435,"language":31717,"meta":275,"style":275},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[277,94437,94438,94443,94464],{"__ignoreMap":275},[152,94439,94440],{"class":281,"line":282},[152,94441,94442],{"class":866},"#创建一维数组\n",[152,94444,94445,94447,94449,94452,94454,94456,94458,94460,94462],{"class":281,"line":303},[152,94446,69],{"class":483},[152,94448,1864],{"class":476},[152,94450,94451],{"class":483},"np.random.randint(",[152,94453,2026],{"class":293},[152,94455,2186],{"class":483},[152,94457,2119],{"class":293},[152,94459,2186],{"class":483},[152,94461,2508],{"class":293},[152,94463,1825],{"class":483},[152,94465,94466,94469],{"class":281,"line":310},[152,94467,94468],{"class":483},"np.sum(a)",[152,94470,94471],{"class":866},"#求和\n",[1760,94473,94475],{"id":94474},"_112-max求最大值函数","11.2 max()求最大值函数",[270,94477,94479],{"className":31715,"code":94478,"language":31717,"meta":275,"style":275},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[277,94480,94481,94485,94505,94510,94515],{"__ignoreMap":275},[152,94482,94483],{"class":281,"line":282},[152,94484,94442],{"class":866},[152,94486,94487,94489,94491,94493,94495,94497,94499,94501,94503],{"class":281,"line":303},[152,94488,69],{"class":483},[152,94490,1864],{"class":476},[152,94492,94451],{"class":483},[152,94494,2026],{"class":293},[152,94496,2186],{"class":483},[152,94498,2119],{"class":293},[152,94500,2186],{"class":483},[152,94502,2508],{"class":293},[152,94504,1825],{"class":483},[152,94506,94507],{"class":281,"line":310},[152,94508,94509],{"class":483},"np.max(a)\n",[152,94511,94512],{"class":281,"line":324},[152,94513,94514],{"class":866},"#最大索引(求最大元素的索引)arg\n",[152,94516,94517],{"class":281,"line":329},[152,94518,94519],{"class":483},"np.argmax(a)\n",[270,94521,94523],{"className":31715,"code":94522,"language":31717,"meta":275,"style":275},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[277,94524,94525,94546,94566,94570],{"__ignoreMap":275},[152,94526,94527,94529,94531,94534,94536,94538,94540,94542,94544],{"class":281,"line":282},[152,94528,12535],{"class":483},[152,94530,1864],{"class":476},[152,94532,94533],{"class":483}," np.array([",[152,94535,2026],{"class":293},[152,94537,14051],{"class":483},[152,94539,2127],{"class":293},[152,94541,14051],{"class":483},[152,94543,1888],{"class":293},[152,94545,6299],{"class":483},[152,94547,94548,94550,94552,94554,94556,94558,94560,94562,94564],{"class":281,"line":303},[152,94549,12561],{"class":483},[152,94551,1864],{"class":476},[152,94553,94533],{"class":483},[152,94555,1888],{"class":293},[152,94557,14051],{"class":483},[152,94559,1894],{"class":293},[152,94561,14051],{"class":483},[152,94563,2101],{"class":293},[152,94565,6299],{"class":483},[152,94567,94568],{"class":281,"line":310},[152,94569,307],{"emptyLinePlaceholder":306},[152,94571,94572,94574,94577],{"class":281,"line":324},[152,94573,31752],{"class":293},[152,94575,94576],{"class":483},"(np.maximum(a, b))   ",[152,94578,94579],{"class":866},"# [3 5 4]，每个位置上取较大值\n",[1760,94581,94583],{"id":94582},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,94585,94586],{},"①一维数组：",[270,94588,94590],{"className":31715,"code":94589,"language":31717,"meta":275,"style":275},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[277,94591,94592,94596,94616,94621],{"__ignoreMap":275},[152,94593,94594],{"class":281,"line":282},[152,94595,94442],{"class":866},[152,94597,94598,94600,94602,94604,94606,94608,94610,94612,94614],{"class":281,"line":303},[152,94599,69],{"class":483},[152,94601,1864],{"class":476},[152,94603,94451],{"class":483},[152,94605,2026],{"class":293},[152,94607,2186],{"class":483},[152,94609,2119],{"class":293},[152,94611,2186],{"class":483},[152,94613,2508],{"class":293},[152,94615,1825],{"class":483},[152,94617,94618],{"class":281,"line":310},[152,94619,94620],{"class":866},"#求平均值\n",[152,94622,94623],{"class":281,"line":324},[152,94624,94625],{"class":483},"np.mean(a)\n",[19,94627,94628],{},"②二维数组",[270,94630,94632],{"className":31715,"code":94631,"language":31717,"meta":275,"style":275},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[277,94633,94634,94639,94664,94669],{"__ignoreMap":275},[152,94635,94636],{"class":281,"line":282},[152,94637,94638],{"class":866},"#二维数组\n",[152,94640,94641,94644,94646,94648,94650,94652,94654,94656,94658,94660,94662],{"class":281,"line":303},[152,94642,94643],{"class":483},"aa",[152,94645,1864],{"class":476},[152,94647,94339],{"class":483},[152,94649,2026],{"class":293},[152,94651,2186],{"class":483},[152,94653,2331],{"class":293},[152,94655,94344],{"class":483},[152,94657,1888],{"class":293},[152,94659,2186],{"class":483},[152,94661,2101],{"class":293},[152,94663,1825],{"class":483},[152,94665,94666],{"class":281,"line":310},[152,94667,94668],{"class":866},"#对数组中的所有数求平均\n",[152,94670,94671],{"class":281,"line":324},[152,94672,94673],{"class":483},"np.mean(aa)\n",[1760,94675,94677],{"id":94676},"_114-median求中位数函数","11.4 median()求中位数函数",[270,94679,94681],{"className":31715,"code":94680,"language":31717,"meta":275,"style":275},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[277,94682,94683,94688,94704,94709],{"__ignoreMap":275},[152,94684,94685],{"class":281,"line":282},[152,94686,94687],{"class":866},"#求中位数\n",[152,94689,94690,94692,94694,94696,94698,94700,94702],{"class":281,"line":303},[152,94691,2071],{"class":483},[152,94693,1864],{"class":476},[152,94695,94339],{"class":483},[152,94697,2026],{"class":293},[152,94699,2186],{"class":483},[152,94701,2254],{"class":293},[152,94703,1825],{"class":483},[152,94705,94706],{"class":281,"line":310},[152,94707,94708],{"class":483},"np.median(b)\n",[152,94710,94711],{"class":281,"line":324},[152,94712,94713],{"class":866},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[1760,94715,94717],{"id":94716},"_115-power求幂运算函数","11.5 power()求幂运算函数",[270,94719,94721],{"className":31715,"code":94720,"language":31717,"meta":275,"style":275},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[277,94722,94723,94739,94744,94749,94758,94763,94772],{"__ignoreMap":275},[152,94724,94725,94727,94729,94731,94733,94735,94737],{"class":281,"line":282},[152,94726,2071],{"class":483},[152,94728,1864],{"class":476},[152,94730,94339],{"class":483},[152,94732,2026],{"class":293},[152,94734,2186],{"class":483},[152,94736,2254],{"class":293},[152,94738,1825],{"class":483},[152,94740,94741],{"class":281,"line":303},[152,94742,94743],{"class":866},"#幂运算\n",[152,94745,94746],{"class":281,"line":310},[152,94747,94748],{"class":866},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[152,94750,94751,94754,94756],{"class":281,"line":324},[152,94752,94753],{"class":483},"np.power(b,",[152,94755,1894],{"class":293},[152,94757,1825],{"class":483},[152,94759,94760],{"class":281,"line":329},[152,94761,94762],{"class":866},"#或者以下代码，将数据存储起来\n",[152,94764,94765,94767,94769],{"class":281,"line":343},[152,94766,2653],{"class":483},[152,94768,1864],{"class":476},[152,94770,94771],{"class":483},"np.empty_like(b)\n",[152,94773,94774,94776,94778,94780,94782,94784],{"class":281,"line":348},[152,94775,94753],{"class":483},[152,94777,1894],{"class":293},[152,94779,2186],{"class":483},[152,94781,94391],{"class":6858},[152,94783,1864],{"class":476},[152,94785,94786],{"class":483},"y)\n",[1760,94788,94790],{"id":94789},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[270,94792,94794],{"className":31715,"code":94793,"language":31717,"meta":275,"style":275},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[277,94795,94796,94812,94817,94822,94826,94844],{"__ignoreMap":275},[152,94797,94798,94800,94802,94804,94806,94808,94810],{"class":281,"line":282},[152,94799,2071],{"class":483},[152,94801,1864],{"class":476},[152,94803,94339],{"class":483},[152,94805,2026],{"class":293},[152,94807,2186],{"class":483},[152,94809,2254],{"class":293},[152,94811,1825],{"class":483},[152,94813,94814],{"class":281,"line":303},[152,94815,94816],{"class":866},"#开方\n",[152,94818,94819],{"class":281,"line":310},[152,94820,94821],{"class":483},"np.sqrt(b)\n",[152,94823,94824],{"class":281,"line":324},[152,94825,94762],{"class":866},[152,94827,94828,94830,94832,94835,94838,94840,94842],{"class":281,"line":329},[152,94829,2653],{"class":483},[152,94831,1864],{"class":476},[152,94833,94834],{"class":483},"np.empty_like(b,",[152,94836,94837],{"class":6858},"dtype",[152,94839,1864],{"class":476},[152,94841,1858],{"class":293},[152,94843,1825],{"class":483},[152,94845,94846,94849,94851,94853],{"class":281,"line":343},[152,94847,94848],{"class":483},"np.sqrt(b,",[152,94850,94391],{"class":6858},[152,94852,1864],{"class":476},[152,94854,94786],{"class":483},[1760,94856,94858],{"id":94857},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,94860,94861],{},"对数组中的元素累计求和，可指定轴",[19,94863,94864],{},"#累计求和的意思是：",[19,94866,94867],{},"a = np.array([1, 2, 3, 4])",[19,94869,94870],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[270,94872,94874],{"className":31715,"code":94873,"language":31717,"meta":275,"style":275},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[277,94875,94876,94892,94897,94902],{"__ignoreMap":275},[152,94877,94878,94880,94882,94884,94886,94888,94890],{"class":281,"line":282},[152,94879,2071],{"class":483},[152,94881,1864],{"class":476},[152,94883,94339],{"class":483},[152,94885,2026],{"class":293},[152,94887,2186],{"class":483},[152,94889,2254],{"class":293},[152,94891,1825],{"class":483},[152,94893,94894],{"class":281,"line":303},[152,94895,94896],{"class":483},"np.cumsum(b)\n",[152,94898,94899],{"class":281,"line":310},[152,94900,94901],{"class":866},"#结果：\n",[152,94903,94904],{"class":281,"line":324},[152,94905,94906],{"class":866},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[1760,94908,94910],{"id":94909},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[270,94912,94914],{"className":31715,"code":94913,"language":31717,"meta":275,"style":275},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[277,94915,94916,94932,94937,94942,94946],{"__ignoreMap":275},[152,94917,94918,94920,94922,94924,94926,94928,94930],{"class":281,"line":282},[152,94919,2071],{"class":483},[152,94921,1864],{"class":476},[152,94923,94339],{"class":483},[152,94925,2026],{"class":293},[152,94927,2186],{"class":483},[152,94929,2254],{"class":293},[152,94931,1825],{"class":483},[152,94933,94934],{"class":281,"line":303},[152,94935,94936],{"class":866},"#对数组中的元素累计求积，可指定轴\n",[152,94938,94939],{"class":281,"line":310},[152,94940,94941],{"class":483},"np.cumprod(b)\n",[152,94943,94944],{"class":281,"line":324},[152,94945,94901],{"class":866},[152,94947,94948],{"class":281,"line":329},[152,94949,94950],{"class":866},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[1760,94952,94954],{"id":94953},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[270,94956,94958],{"className":31715,"code":94957,"language":31717,"meta":275,"style":275},"#删除数组中的重复数据，并对数据进行排序\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",[277,94959,94960,94965,95013,95018,95022],{"__ignoreMap":275},[152,94961,94962],{"class":281,"line":282},[152,94963,94964],{"class":866},"#删除数组中的重复数据，并对数据进行排序\n",[152,94966,94967,94969,94971,94973,94975,94977,94979,94981,94983,94985,94987,94989,94991,94993,94995,94997,94999,95001,95003,95005,95007,95009,95011],{"class":281,"line":303},[152,94968,69],{"class":483},[152,94970,1864],{"class":476},[152,94972,94361],{"class":483},[152,94974,2026],{"class":293},[152,94976,2186],{"class":483},[152,94978,1894],{"class":293},[152,94980,2186],{"class":483},[152,94982,1888],{"class":293},[152,94984,2186],{"class":483},[152,94986,2306],{"class":293},[152,94988,2186],{"class":483},[152,94990,1888],{"class":293},[152,94992,2186],{"class":483},[152,94994,2254],{"class":293},[152,94996,2186],{"class":483},[152,94998,2006],{"class":293},[152,95000,2186],{"class":483},[152,95002,2000],{"class":293},[152,95004,2186],{"class":483},[152,95006,2583],{"class":293},[152,95008,2186],{"class":483},[152,95010,2101],{"class":293},[152,95012,6299],{"class":483},[152,95014,95015],{"class":281,"line":310},[152,95016,95017],{"class":483},"np.unique(a)\n",[152,95019,95020],{"class":281,"line":324},[152,95021,94901],{"class":866},[152,95023,95024],{"class":281,"line":329},[152,95025,95026],{"class":866},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95028,95029],{},"升序形式排序",[1760,95031,95033],{"id":95032},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[270,95035,95037],{"className":31715,"code":95036,"language":31717,"meta":275,"style":275},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[277,95038,95039,95087,95092],{"__ignoreMap":275},[152,95040,95041,95043,95045,95047,95049,95051,95053,95055,95057,95059,95061,95063,95065,95067,95069,95071,95073,95075,95077,95079,95081,95083,95085],{"class":281,"line":282},[152,95042,69],{"class":483},[152,95044,1864],{"class":476},[152,95046,94361],{"class":483},[152,95048,2026],{"class":293},[152,95050,2186],{"class":483},[152,95052,1894],{"class":293},[152,95054,2186],{"class":483},[152,95056,1888],{"class":293},[152,95058,2186],{"class":483},[152,95060,2306],{"class":293},[152,95062,2186],{"class":483},[152,95064,1888],{"class":293},[152,95066,2186],{"class":483},[152,95068,2254],{"class":293},[152,95070,2186],{"class":483},[152,95072,2006],{"class":293},[152,95074,2186],{"class":483},[152,95076,2000],{"class":293},[152,95078,2186],{"class":483},[152,95080,2583],{"class":293},[152,95082,2186],{"class":483},[152,95084,2101],{"class":293},[152,95086,6299],{"class":483},[152,95088,95089],{"class":281,"line":303},[152,95090,95091],{"class":866},"#返回数组中非零元素的索引\n",[152,95093,95094],{"class":281,"line":310},[152,95095,95096],{"class":483},"np.nonzero(a)\n",[1760,95098,95100],{"id":95099},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[270,95102,95104],{"className":31715,"code":95103,"language":31717,"meta":275,"style":275},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[277,95105,95106,95154,95159],{"__ignoreMap":275},[152,95107,95108,95110,95112,95114,95116,95118,95120,95122,95124,95126,95128,95130,95132,95134,95136,95138,95140,95142,95144,95146,95148,95150,95152],{"class":281,"line":282},[152,95109,69],{"class":483},[152,95111,1864],{"class":476},[152,95113,94361],{"class":483},[152,95115,2026],{"class":293},[152,95117,2186],{"class":483},[152,95119,1894],{"class":293},[152,95121,2186],{"class":483},[152,95123,1888],{"class":293},[152,95125,2186],{"class":483},[152,95127,2306],{"class":293},[152,95129,2186],{"class":483},[152,95131,1888],{"class":293},[152,95133,2186],{"class":483},[152,95135,2254],{"class":293},[152,95137,2186],{"class":483},[152,95139,2006],{"class":293},[152,95141,2186],{"class":483},[152,95143,2000],{"class":293},[152,95145,2186],{"class":483},[152,95147,2583],{"class":293},[152,95149,2186],{"class":483},[152,95151,2101],{"class":293},[152,95153,6299],{"class":483},[152,95155,95156],{"class":281,"line":303},[152,95157,95158],{"class":866},"#计算一组数中最大值与最小值的差，可指定轴\n",[152,95160,95161],{"class":281,"line":310},[152,95162,95163],{"class":483},"np.ptp(a)\n",[1736,95165,95166],{},"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":275,"searchDepth":303,"depth":303,"links":95168},[95169,95170,95171,95172,95173,95174,95175,95176,95177,95178,95179],{"id":94431,"depth":303,"text":94432},{"id":94474,"depth":303,"text":94475},{"id":94582,"depth":303,"text":94583},{"id":94676,"depth":303,"text":94677},{"id":94716,"depth":303,"text":94717},{"id":94789,"depth":303,"text":94790},{"id":94857,"depth":303,"text":94858},{"id":94909,"depth":303,"text":94910},{"id":94953,"depth":303,"text":94954},{"id":95032,"depth":303,"text":95033},{"id":95099,"depth":303,"text":95100},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94417,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95186,"title":95187,"body":95188,"description":24991,"extension":1744,"meta":95843,"navigation":306,"path":95844,"seo":95845,"stem":95846,"__hash__":95847},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95189,"toc":95831},[95190,95193,95197,95200,95416,95420,95423,95632,95636,95702,95707,95711,95714,95717,95755,95759,95762,95767,95771,95774,95777,95782,95786,95789,95793,95796,95799,95804,95808,95811,95814,95819,95823,95828],[10,95191,95187],{"id":95192},"_12其他常用函数",[1760,95194,95196],{"id":95195},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95198,95199],{},"将数组的数据按照行列复制扩展",[270,95201,95203],{"className":31715,"code":95202,"language":31717,"meta":275,"style":275},"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",[277,95204,95205,95221,95230,95234,95239,95244,95257,95261,95266,95271,95276,95280,95285,95309,95321,95325,95329,95334,95339,95344,95349,95353,95366,95370,95374,95379,95384,95389,95394,95399,95403,95407,95412],{"__ignoreMap":275},[152,95206,95207,95209,95211,95213,95215,95217,95219],{"class":281,"line":282},[152,95208,69],{"class":483},[152,95210,1864],{"class":476},[152,95212,94339],{"class":483},[152,95214,2026],{"class":293},[152,95216,2186],{"class":483},[152,95218,2127],{"class":293},[152,95220,1825],{"class":483},[152,95222,95223,95226,95228],{"class":281,"line":303},[152,95224,95225],{"class":483},"np.tile(a,",[152,95227,1894],{"class":293},[152,95229,1825],{"class":483},[152,95231,95232],{"class":281,"line":310},[152,95233,94901],{"class":866},[152,95235,95236],{"class":281,"line":324},[152,95237,95238],{"class":866},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[152,95240,95241],{"class":281,"line":329},[152,95242,95243],{"class":866},"#行复制两次，列复制三次\n",[152,95245,95246,95249,95251,95253,95255],{"class":281,"line":343},[152,95247,95248],{"class":483},"np.tile(a,(",[152,95250,1894],{"class":293},[152,95252,2186],{"class":483},[152,95254,1888],{"class":293},[152,95256,31834],{"class":483},[152,95258,95259],{"class":281,"line":348},[152,95260,94901],{"class":866},[152,95262,95263],{"class":281,"line":362},[152,95264,95265],{"class":289},"'''\n",[152,95267,95268],{"class":281,"line":367},[152,95269,95270],{"class":289},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[152,95272,95273],{"class":281,"line":381},[152,95274,95275],{"class":289},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[152,95277,95278],{"class":281,"line":386},[152,95279,95265],{"class":289},[152,95281,95282],{"class":281,"line":932},[152,95283,95284],{"class":866},"#创建二维数组\n",[152,95286,95287,95289,95291,95293,95295,95297,95299,95301,95303,95305,95307],{"class":281,"line":942},[152,95288,94643],{"class":483},[152,95290,1864],{"class":476},[152,95292,94339],{"class":483},[152,95294,2026],{"class":293},[152,95296,2186],{"class":483},[152,95298,2331],{"class":293},[152,95300,94344],{"class":483},[152,95302,2101],{"class":293},[152,95304,2186],{"class":483},[152,95306,1888],{"class":293},[152,95308,1825],{"class":483},[152,95310,95311,95314,95316,95318],{"class":281,"line":949},[152,95312,95313],{"class":483},"np.tile(aa,",[152,95315,1894],{"class":293},[152,95317,2237],{"class":483},[152,95319,95320],{"class":866},"#一个数的时候就是行\n",[152,95322,95323],{"class":281,"line":954},[152,95324,94901],{"class":866},[152,95326,95327],{"class":281,"line":959},[152,95328,95265],{"class":289},[152,95330,95331],{"class":281,"line":970},[152,95332,95333],{"class":289},"array([[ 1,  2,  3,  1,  2,  3],\n",[152,95335,95336],{"class":281,"line":979},[152,95337,95338],{"class":289},"       [ 4,  5,  6,  4,  5,  6],\n",[152,95340,95341],{"class":281,"line":989},[152,95342,95343],{"class":289},"       [ 7,  8,  9,  7,  8,  9],\n",[152,95345,95346],{"class":281,"line":996},[152,95347,95348],{"class":289},"       [10, 11, 12, 10, 11, 12]])\n",[152,95350,95351],{"class":281,"line":1001},[152,95352,95265],{"class":289},[152,95354,95355,95358,95360,95362,95364],{"class":281,"line":1006},[152,95356,95357],{"class":483},"np.tile(aa,(",[152,95359,1894],{"class":293},[152,95361,2186],{"class":483},[152,95363,1888],{"class":293},[152,95365,31834],{"class":483},[152,95367,95368],{"class":281,"line":1018},[152,95369,94901],{"class":866},[152,95371,95372],{"class":281,"line":1027},[152,95373,95265],{"class":289},[152,95375,95376],{"class":281,"line":1037},[152,95377,95378],{"class":289},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[152,95380,95381],{"class":281,"line":1044},[152,95382,95383],{"class":289},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[152,95385,95386],{"class":281,"line":1049},[152,95387,95388],{"class":289},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[152,95390,95391],{"class":281,"line":1054},[152,95392,95393],{"class":289},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[152,95395,95396],{"class":281,"line":1065},[152,95397,95398],{"class":289},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[152,95400,95401],{"class":281,"line":1074},[152,95402,95383],{"class":289},[152,95404,95405],{"class":281,"line":1084},[152,95406,95388],{"class":289},[152,95408,95409],{"class":281,"line":1091},[152,95410,95411],{"class":289},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[152,95413,95414],{"class":281,"line":1096},[152,95415,95265],{"class":289},[1760,95417,95419],{"id":95418},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95421,95422],{},"repeat()将数组中的每个元素重复若干次",[270,95424,95426],{"className":31715,"code":95425,"language":31717,"meta":275,"style":275},"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",[277,95427,95428,95444,95453,95457,95462,95486,95491,95500,95504,95509,95513,95518,95534,95538,95542,95547,95552,95557,95561,95566,95570,95575,95580,95584,95600,95604,95608,95613,95618,95623,95628],{"__ignoreMap":275},[152,95429,95430,95432,95434,95436,95438,95440,95442],{"class":281,"line":282},[152,95431,69],{"class":483},[152,95433,1864],{"class":476},[152,95435,94339],{"class":483},[152,95437,2026],{"class":293},[152,95439,2186],{"class":483},[152,95441,2127],{"class":293},[152,95443,1825],{"class":483},[152,95445,95446,95449,95451],{"class":281,"line":303},[152,95447,95448],{"class":483},"np.repeat(a,",[152,95450,1888],{"class":293},[152,95452,1825],{"class":483},[152,95454,95455],{"class":281,"line":310},[152,95456,94901],{"class":866},[152,95458,95459],{"class":281,"line":324},[152,95460,95461],{"class":866},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[152,95463,95464,95466,95468,95470,95472,95474,95476,95478,95480,95482,95484],{"class":281,"line":329},[152,95465,94643],{"class":483},[152,95467,1864],{"class":476},[152,95469,94339],{"class":483},[152,95471,2026],{"class":293},[152,95473,2186],{"class":483},[152,95475,2331],{"class":293},[152,95477,94344],{"class":483},[152,95479,2101],{"class":293},[152,95481,2186],{"class":483},[152,95483,1888],{"class":293},[152,95485,1825],{"class":483},[152,95487,95488],{"class":281,"line":343},[152,95489,95490],{"class":866},"#这个重复之后二维变成一维\n",[152,95492,95493,95496,95498],{"class":281,"line":348},[152,95494,95495],{"class":483},"np.repeat(aa,",[152,95497,1894],{"class":293},[152,95499,1825],{"class":483},[152,95501,95502],{"class":281,"line":362},[152,95503,95265],{"class":289},[152,95505,95506],{"class":281,"line":367},[152,95507,95508],{"class":289},"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",[152,95510,95511],{"class":281,"line":381},[152,95512,95265],{"class":289},[152,95514,95515],{"class":281,"line":386},[152,95516,95517],{"class":866},"#指定axis\n",[152,95519,95520,95522,95524,95526,95528,95530,95532],{"class":281,"line":932},[152,95521,95495],{"class":483},[152,95523,1894],{"class":293},[152,95525,2186],{"class":483},[152,95527,48851],{"class":6858},[152,95529,1864],{"class":476},[152,95531,2000],{"class":293},[152,95533,1825],{"class":483},[152,95535,95536],{"class":281,"line":942},[152,95537,94901],{"class":866},[152,95539,95540],{"class":281,"line":949},[152,95541,95265],{"class":289},[152,95543,95544],{"class":281,"line":954},[152,95545,95546],{"class":289},"array([[ 1,  2,  3],\n",[152,95548,95549],{"class":281,"line":959},[152,95550,95551],{"class":289},"       [ 1,  2,  3],\n",[152,95553,95554],{"class":281,"line":970},[152,95555,95556],{"class":289},"       [ 4,  5,  6],\n",[152,95558,95559],{"class":281,"line":979},[152,95560,95556],{"class":289},[152,95562,95563],{"class":281,"line":989},[152,95564,95565],{"class":289},"       [ 7,  8,  9],\n",[152,95567,95568],{"class":281,"line":996},[152,95569,95565],{"class":289},[152,95571,95572],{"class":281,"line":1001},[152,95573,95574],{"class":289},"       [10, 11, 12],\n",[152,95576,95577],{"class":281,"line":1006},[152,95578,95579],{"class":289},"       [10, 11, 12]])\n",[152,95581,95582],{"class":281,"line":1018},[152,95583,95265],{"class":289},[152,95585,95586,95588,95590,95592,95594,95596,95598],{"class":281,"line":1027},[152,95587,95495],{"class":483},[152,95589,1894],{"class":293},[152,95591,2186],{"class":483},[152,95593,48851],{"class":6858},[152,95595,1864],{"class":476},[152,95597,2026],{"class":293},[152,95599,1825],{"class":483},[152,95601,95602],{"class":281,"line":1037},[152,95603,94901],{"class":866},[152,95605,95606],{"class":281,"line":1044},[152,95607,95265],{"class":289},[152,95609,95610],{"class":281,"line":1049},[152,95611,95612],{"class":289},"array([[ 1,  1,  2,  2,  3,  3],\n",[152,95614,95615],{"class":281,"line":1054},[152,95616,95617],{"class":289},"       [ 4,  4,  5,  5,  6,  6],\n",[152,95619,95620],{"class":281,"line":1065},[152,95621,95622],{"class":289},"       [ 7,  7,  8,  8,  9,  9],\n",[152,95624,95625],{"class":281,"line":1074},[152,95626,95627],{"class":289},"       [10, 10, 11, 11, 12, 12]])\n",[152,95629,95630],{"class":281,"line":1084},[152,95631,95265],{"class":289},[1760,95633,95635],{"id":95634},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[270,95637,95639],{"className":31715,"code":95638,"language":31717,"meta":275,"style":275},"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",[277,95640,95641,95657,95662,95674,95678,95683,95693,95697],{"__ignoreMap":275},[152,95642,95643,95645,95647,95649,95651,95653,95655],{"class":281,"line":282},[152,95644,69],{"class":483},[152,95646,1864],{"class":476},[152,95648,94339],{"class":483},[152,95650,2026],{"class":293},[152,95652,2186],{"class":483},[152,95654,2127],{"class":293},[152,95656,1825],{"class":483},[152,95658,95659],{"class":281,"line":303},[152,95660,95661],{"class":866},"#array([，2，3，4])\n",[152,95663,95664,95667,95669,95671],{"class":281,"line":310},[152,95665,95666],{"class":483},"np.roll(a,",[152,95668,1894],{"class":293},[152,95670,2237],{"class":483},[152,95672,95673],{"class":866},"#传正数向后调多少位，传负数向前调多少位\n",[152,95675,95676],{"class":281,"line":324},[152,95677,94901],{"class":866},[152,95679,95680],{"class":281,"line":329},[152,95681,95682],{"class":866},"#array([3, 4, 1, 2])\n",[152,95684,95685,95687,95689,95691],{"class":281,"line":343},[152,95686,95666],{"class":483},[152,95688,2340],{"class":476},[152,95690,2026],{"class":293},[152,95692,1825],{"class":483},[152,95694,95695],{"class":281,"line":348},[152,95696,94901],{"class":866},[152,95698,95699],{"class":281,"line":362},[152,95700,95701],{"class":866},"#array([2, 3, 4, 1])\n",[19,95703,95704],{},[401,95705],{"alt":275,"src":95706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[1760,95708,95710],{"id":95709},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,95712,95713],{},"resize()重新调整数组的大小",[19,95715,95716],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[270,95718,95720],{"className":31715,"code":95719,"language":31717,"meta":275,"style":275},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[277,95721,95722,95727,95740],{"__ignoreMap":275},[152,95723,95724],{"class":281,"line":282},[152,95725,95726],{"class":866},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[152,95728,95729,95732,95734,95736,95738],{"class":281,"line":303},[152,95730,95731],{"class":483},"np.resize(aa,(",[152,95733,1894],{"class":293},[152,95735,2186],{"class":483},[152,95737,2152],{"class":293},[152,95739,31834],{"class":483},[152,95741,95742,95744,95746,95748,95750,95752],{"class":281,"line":310},[152,95743,95731],{"class":483},[152,95745,1894],{"class":293},[152,95747,2186],{"class":483},[152,95749,2228],{"class":293},[152,95751,84108],{"class":483},[152,95753,95754],{"class":866},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[1760,95756,95758],{"id":95757},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,95760,95761],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,95763,95764],{},[401,95765],{"alt":275,"src":95766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[1760,95768,95770],{"id":95769},"_126-保存加载文件","12.6 保存加载文件",[19,95772,95773],{},"savetxt():将数据保存到txt文件中",[19,95775,95776],{},"loadtxt():从文件加载数据",[19,95778,95779],{},[401,95780],{"alt":275,"src":95781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[1760,95783,95785],{"id":95784},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,95787,95788],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[1760,95790,95792],{"id":95791},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,95794,95795],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,95797,95798],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,95800,95801],{},[401,95802],{"alt":275,"src":95803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[1760,95805,95807],{"id":95806},"_129-where语句","12.9 where语句",[19,95809,95810],{},"np.where(条件,x,y)",[19,95812,95813],{},"如果条件为True,对应值为x,否则对应值为y",[19,95815,95816],{},[401,95817],{"alt":275,"src":95818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[1760,95820,95822],{"id":95821},"_1210-dot矩阵","12.10 dot()矩阵",[19,95824,95825],{},[401,95826],{"alt":275,"src":95827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1736,95829,95830],{},"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":275,"searchDepth":303,"depth":303,"links":95832},[95833,95834,95835,95836,95837,95838,95839,95840,95841,95842],{"id":95195,"depth":303,"text":95196},{"id":95418,"depth":303,"text":95419},{"id":95634,"depth":303,"text":95635},{"id":95709,"depth":303,"text":95710},{"id":95757,"depth":303,"text":95758},{"id":95769,"depth":303,"text":95770},{"id":95784,"depth":303,"text":95785},{"id":95791,"depth":303,"text":95792},{"id":95806,"depth":303,"text":95807},{"id":95821,"depth":303,"text":95822},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95187,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95849,"title":95850,"body":95851,"description":24991,"extension":1744,"meta":96204,"navigation":306,"path":96205,"seo":96206,"stem":96207,"__hash__":96208},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95852,"toc":96202},[95853,95856,95859,95862,95865,95868,95933,95935,96199],[10,95854,95850],{"id":95855},"_13数组排序",[19,95857,95858],{},"排序主要用到的方法是np.sort和np.argsort",[19,95860,95861],{},"其中np.sort()对数组直接排序",[19,95863,95864],{},"而np.argsort()是返回排序后的原始索引",[19,95866,95867],{},"①一维数组",[270,95869,95871],{"className":31715,"code":95870,"language":31717,"meta":275,"style":275},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[277,95872,95873,95877,95917,95925],{"__ignoreMap":275},[152,95874,95875],{"class":281,"line":282},[152,95876,94442],{"class":866},[152,95878,95879,95881,95883,95885,95887,95889,95891,95893,95895,95897,95899,95901,95903,95905,95907,95909,95911,95913,95915],{"class":281,"line":303},[152,95880,69],{"class":483},[152,95882,1864],{"class":476},[152,95884,94361],{"class":483},[152,95886,1888],{"class":293},[152,95888,2186],{"class":483},[152,95890,2306],{"class":293},[152,95892,2186],{"class":483},[152,95894,2203],{"class":293},[152,95896,2186],{"class":483},[152,95898,2583],{"class":293},[152,95900,2186],{"class":483},[152,95902,2087],{"class":293},[152,95904,2186],{"class":483},[152,95906,2700],{"class":293},[152,95908,2186],{"class":483},[152,95910,2152],{"class":293},[152,95912,2186],{"class":483},[152,95914,2254],{"class":293},[152,95916,6299],{"class":483},[152,95918,95919,95922],{"class":281,"line":310},[152,95920,95921],{"class":483},"np.sort(a)",[152,95923,95924],{"class":866},"#升序排序\n",[152,95926,95927,95930],{"class":281,"line":324},[152,95928,95929],{"class":483},"np.argsort(a)",[152,95931,95932],{"class":866},"#按照元素大小来索引排序\n",[19,95934,94628],{},[270,95936,95938],{"className":31715,"code":95937,"language":31717,"meta":275,"style":275},"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",[277,95939,95940,95952,95978,95983,95987,95992,95997,96002,96007,96011,96019,96023,96028,96033,96038,96043,96047,96052,96065,96069,96074,96079,96084,96089,96093,96098,96110,96114,96118,96122,96126,96130,96134,96139,96154,96159,96168,96173,96177,96181,96186,96190,96195],{"__ignoreMap":275},[152,95941,95942,95945,95947,95949],{"class":281,"line":282},[152,95943,95944],{"class":483},"np.random.seed(",[152,95946,2000],{"class":293},[152,95948,2237],{"class":483},[152,95950,95951],{"class":866},"#保证每次值一样\n",[152,95953,95954,95956,95958,95960,95962,95964,95966,95968,95970,95972,95974,95976],{"class":281,"line":303},[152,95955,94643],{"class":483},[152,95957,1864],{"class":476},[152,95959,94451],{"class":483},[152,95961,2119],{"class":293},[152,95963,2186],{"class":483},[152,95965,32833],{"class":6858},[152,95967,1864],{"class":476},[152,95969,1819],{"class":483},[152,95971,2101],{"class":293},[152,95973,2186],{"class":483},[152,95975,2152],{"class":293},[152,95977,31834],{"class":483},[152,95979,95980],{"class":281,"line":310},[152,95981,95982],{"class":866},"#原数组：\n",[152,95984,95985],{"class":281,"line":324},[152,95986,95265],{"class":289},[152,95988,95989],{"class":281,"line":329},[152,95990,95991],{"class":289},"array([[44, 47, 64, 67, 67,  9],\n",[152,95993,95994],{"class":281,"line":343},[152,95995,95996],{"class":289},"       [83, 21, 36, 87, 70, 88],\n",[152,95998,95999],{"class":281,"line":348},[152,96000,96001],{"class":289},"       [88, 12, 58, 65, 39, 87],\n",[152,96003,96004],{"class":281,"line":362},[152,96005,96006],{"class":289},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[152,96008,96009],{"class":281,"line":367},[152,96010,95265],{"class":289},[152,96012,96013,96016],{"class":281,"line":381},[152,96014,96015],{"class":483},"np.sort(aa)",[152,96017,96018],{"class":866},"#每行进行了排序\n",[152,96020,96021],{"class":281,"line":386},[152,96022,95265],{"class":289},[152,96024,96025],{"class":281,"line":932},[152,96026,96027],{"class":289},"array([[ 9, 44, 47, 64, 67, 67],\n",[152,96029,96030],{"class":281,"line":942},[152,96031,96032],{"class":289},"       [21, 36, 70, 83, 87, 88],\n",[152,96034,96035],{"class":281,"line":949},[152,96036,96037],{"class":289},"       [12, 39, 58, 65, 87, 88],\n",[152,96039,96040],{"class":281,"line":954},[152,96041,96042],{"class":289},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[152,96044,96045],{"class":281,"line":959},[152,96046,95265],{"class":289},[152,96048,96049],{"class":281,"line":970},[152,96050,96051],{"class":866},"#axis=0时\n",[152,96053,96054,96057,96059,96061,96063],{"class":281,"line":979},[152,96055,96056],{"class":483},"np.sort(aa,",[152,96058,48851],{"class":6858},[152,96060,1864],{"class":476},[152,96062,2000],{"class":293},[152,96064,1825],{"class":483},[152,96066,96067],{"class":281,"line":989},[152,96068,95265],{"class":289},[152,96070,96071],{"class":281,"line":996},[152,96072,96073],{"class":289},"array([[44, 12, 36, 37, 25,  9],\n",[152,96075,96076],{"class":281,"line":1001},[152,96077,96078],{"class":289},"       [46, 21, 58, 65, 39, 77],\n",[152,96080,96081],{"class":281,"line":1006},[152,96082,96083],{"class":289},"       [83, 47, 64, 67, 67, 87],\n",[152,96085,96086],{"class":281,"line":1018},[152,96087,96088],{"class":289},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[152,96090,96091],{"class":281,"line":1027},[152,96092,95265],{"class":289},[152,96094,96095],{"class":281,"line":1037},[152,96096,96097],{"class":866},"#axis=1时,为默认值\n",[152,96099,96100,96102,96104,96106,96108],{"class":281,"line":1044},[152,96101,96056],{"class":483},[152,96103,48851],{"class":6858},[152,96105,1864],{"class":476},[152,96107,2026],{"class":293},[152,96109,1825],{"class":483},[152,96111,96112],{"class":281,"line":1049},[152,96113,95265],{"class":289},[152,96115,96116],{"class":281,"line":1054},[152,96117,96027],{"class":289},[152,96119,96120],{"class":281,"line":1065},[152,96121,96032],{"class":289},[152,96123,96124],{"class":281,"line":1074},[152,96125,96037],{"class":289},[152,96127,96128],{"class":281,"line":1084},[152,96129,96042],{"class":289},[152,96131,96132],{"class":281,"line":1091},[152,96133,95265],{"class":289},[152,96135,96136],{"class":281,"line":1096},[152,96137,96138],{"class":866},"#按最后一列排序\n",[152,96140,96141,96143,96145,96148,96150,96152],{"class":281,"line":1101},[152,96142,2071],{"class":483},[152,96144,1864],{"class":476},[152,96146,96147],{"class":483},"aa[:,",[152,96149,2340],{"class":476},[152,96151,2026],{"class":293},[152,96153,34583],{"class":483},[152,96155,96156],{"class":281,"line":1112},[152,96157,96158],{"class":866},"#获取最后一列排好序的索引\n",[152,96160,96161,96163,96165],{"class":281,"line":1121},[152,96162,75395],{"class":483},[152,96164,1864],{"class":476},[152,96166,96167],{"class":483},"np.argsort(b)\n",[152,96169,96170],{"class":281,"line":1131},[152,96171,96172],{"class":483},"aa[index]\n",[152,96174,96175],{"class":281,"line":1138},[152,96176,95265],{"class":289},[152,96178,96179],{"class":281,"line":1143},[152,96180,95991],{"class":289},[152,96182,96183],{"class":281,"line":1148},[152,96184,96185],{"class":289},"       [46, 88, 81, 37, 25, 77],\n",[152,96187,96188],{"class":281,"line":1159},[152,96189,96001],{"class":289},[152,96191,96192],{"class":281,"line":1168},[152,96193,96194],{"class":289},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[152,96196,96197],{"class":281,"line":1178},[152,96198,95265],{"class":289},[1736,96200,96201],{},"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":275,"searchDepth":303,"depth":303,"links":96203},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95850,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96210,"title":96211,"body":96212,"description":24991,"extension":1744,"meta":96242,"navigation":306,"path":96243,"seo":96244,"stem":96245,"__hash__":96246},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96213,"toc":96240},[96214,96217,96220,96223,96226,96229,96232,96235],[10,96215,96211],{"id":96216},"_14广播机制",[19,96218,96219],{},"广播的规则：",[19,96221,96222],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96224,96225],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96227,96228],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96230,96231],{},"3.如果没有维度形状为1，则会引发异常",[19,96233,96234],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96236,96237],{},[401,96238],{"alt":275,"src":96239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":275,"searchDepth":303,"depth":303,"links":96241},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96211,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96248,"title":96249,"body":96250,"description":24991,"extension":1744,"meta":96348,"navigation":306,"path":96349,"seo":96350,"stem":96351,"__hash__":96352},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96251,"toc":96346},[96252,96255,96258,96343],[10,96253,96249],{"id":96254},"_15比较掩码",[19,96256,96257],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[270,96259,96261],{"className":31715,"code":96260,"language":31717,"meta":275,"style":275},"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",[277,96262,96263,96309,96320,96334,96338],{"__ignoreMap":275},[152,96264,96265,96267,96269,96272,96274,96276,96278,96280,96282,96284,96286,96288,96290,96292,96294,96296,96298,96300,96302,96304,96306],{"class":281,"line":282},[152,96266,69],{"class":483},[152,96268,1864],{"class":476},[152,96270,96271],{"class":483},"np.array([[",[152,96273,2026],{"class":293},[152,96275,2186],{"class":483},[152,96277,1894],{"class":293},[152,96279,2186],{"class":483},[152,96281,1888],{"class":293},[152,96283,49367],{"class":483},[152,96285,2280],{"class":293},[152,96287,2186],{"class":483},[152,96289,2306],{"class":293},[152,96291,2186],{"class":483},[152,96293,2331],{"class":293},[152,96295,49367],{"class":483},[152,96297,2533],{"class":293},[152,96299,2186],{"class":483},[152,96301,2558],{"class":293},[152,96303,2186],{"class":483},[152,96305,2583],{"class":293},[152,96307,96308],{"class":483},"]])\n",[152,96310,96311,96313,96315,96317],{"class":281,"line":303},[152,96312,69],{"class":483},[152,96314,844],{"class":476},[152,96316,2508],{"class":293},[152,96318,96319],{"class":866},"#结果是一个由True,False组成的数组\n",[152,96321,96322,96325,96327,96329,96331],{"class":281,"line":310},[152,96323,96324],{"class":483},"a[a",[152,96326,844],{"class":476},[152,96328,2508],{"class":293},[152,96330,2746],{"class":483},[152,96332,96333],{"class":866},"#小于20的元素会存到这个数组中\n",[152,96335,96336],{"class":281,"line":324},[152,96337,94901],{"class":866},[152,96339,96340],{"class":281,"line":329},[152,96341,96342],{"class":866},"#array([ 1,  2,  3, 11, 12, 13])\n",[1736,96344,96345],{},"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":275,"searchDepth":303,"depth":303,"links":96347},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96249,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96354,"title":96355,"body":96356,"description":24991,"extension":1744,"meta":96448,"navigation":306,"path":96449,"seo":96450,"stem":96451,"__hash__":96452},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96357,"toc":96446},[96358,96361,96364,96367,96370,96373,96438,96443],[10,96359,96355],{"id":96360},"_16魔法命令time",[19,96362,96363],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96365,96366],{},"%:行模式",[19,96368,96369],{},"%%:单元格模式",[19,96371,96372],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[270,96374,96376],{"className":31715,"code":96375,"language":31717,"meta":275,"style":275},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[277,96377,96378,96383,96390,96395,96404,96417,96421,96429],{"__ignoreMap":275},[152,96379,96380],{"class":281,"line":282},[152,96381,96382],{"class":866},"#程序执行时间\n",[152,96384,96385,96387],{"class":281,"line":303},[152,96386,31729],{"class":476},[152,96388,96389],{"class":483}," time \n",[152,96391,96392],{"class":281,"line":310},[152,96393,96394],{"class":866},"#获取时间\n",[152,96396,96397,96400,96402],{"class":281,"line":324},[152,96398,96399],{"class":483},"start",[152,96401,1864],{"class":476},[152,96403,33755],{"class":483},[152,96405,96406,96409,96412,96414],{"class":281,"line":329},[152,96407,96408],{"class":483},"time.sleep(",[152,96410,96411],{"class":293},"0.4",[152,96413,2237],{"class":483},[152,96415,96416],{"class":866},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[152,96418,96419],{"class":281,"line":343},[152,96420,96394],{"class":866},[152,96422,96423,96425,96427],{"class":281,"line":348},[152,96424,47138],{"class":483},[152,96426,1864],{"class":476},[152,96428,33755],{"class":483},[152,96430,96431,96433,96435],{"class":281,"line":362},[152,96432,47138],{"class":483},[152,96434,2340],{"class":476},[152,96436,96437],{"class":483},"start\n",[19,96439,96440],{},[401,96441],{"alt":275,"src":96442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1736,96444,96445],{},"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":275,"searchDepth":303,"depth":303,"links":96447},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96355,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96454,"title":96455,"body":96456,"description":24991,"extension":1744,"meta":96491,"navigation":306,"path":96492,"seo":96493,"stem":96494,"__hash__":96495},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96457,"toc":96489},[96458,96461,96464,96467,96470,96473,96476,96479,96484],[10,96459,96455],{"id":96460},"_17魔法命令timeit",[19,96462,96463],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96465,96466],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96468,96469],{},"单元格模式：",[19,96471,96472],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96474,96475],{},"初始化语句执行次数由轮数来决定",[19,96477,96478],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96480,96481],{},[401,96482],{"alt":275,"src":96483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96485,96486],{},[401,96487],{"alt":275,"src":96488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":275,"searchDepth":303,"depth":303,"links":96490},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96455,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96497,"title":96498,"body":96499,"description":24991,"extension":1744,"meta":96517,"navigation":306,"path":96518,"seo":96519,"stem":96520,"__hash__":96521},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96500,"toc":96515},[96501,96504,96507,96510],[10,96502,96498],{"id":96503},"_18魔法命令writefile和run",[19,96505,96506],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96508,96509],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96511,96512],{},[401,96513],{"alt":275,"src":96514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":275,"searchDepth":303,"depth":303,"links":96516},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96498,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96523,"title":96524,"body":96525,"description":24991,"extension":1744,"meta":96578,"navigation":306,"path":96579,"seo":96580,"stem":96581,"__hash__":96582},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96526,"toc":96576},[96527,96530,96533,96535,96538,96541,96546,96549,96552,96555,96558,96561,96564,96567,96570,96573],[10,96528,96524],{"id":96529},"_19魔法命令memit",[19,96531,96532],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96534,26211],{},[19,96536,96537],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96539,96540],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96542,96543],{},[401,96544],{"alt":275,"src":96545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96547,96548],{},"补充：",[19,96550,96551],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96553,96554],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96556,96557],{},"解决方法：",[19,96559,96560],{},"1.cmd",[19,96562,96563],{},"2.依次输入以下代码：",[19,96565,96566],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,96568,96569],{},"pip install --upgrade ipython",[19,96571,96572],{},"#升级 memory_profiler 和 setuptools",[19,96574,96575],{},"pip install --upgrade memory_profiler setuptools",{"title":275,"searchDepth":303,"depth":303,"links":96577},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96524,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96584,"title":96585,"body":96586,"description":24991,"extension":1744,"meta":98232,"navigation":306,"path":98233,"seo":98234,"stem":98235,"__hash__":98236},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96587,"toc":98202},[96588,96591,96595,96599,96660,96663,96668,96672,96677,96682,96687,96692,96695,96700,96704,96708,96741,96744,96747,96750,96802,96805,96841,96844,96886,96890,96911,96913,96950,96952,96957,96959,96964,96968,96971,96999,97003,97007,97060,97064,97156,97160,97164,97167,97172,97176,97201,97206,97210,97213,97216,97219,97222,97225,97228,97231,97243,97247,97251,97254,97286,97289,97312,97315,97341,97344,97370,97373,97407,97410,97472,97476,97479,97483,97486,97512,97515,97518,97523,97526,97595,97597,97602,97663,97666,97677,97683,97688,97692,97695,97708,97712,97727,97729,97752,97754,97780,97783,97786,97789,97837,97839,97844,97848,97852,97879,97883,97910,97913,97918,97923,98013,98017,98075,98080,98083,98086,98128,98132,98188,98193,98196,98199],[10,96589,96585],{"id":96590},"_2创建数组",[1760,96592,96594],{"id":96593},"_21-array函数创建数组","2.1 array()函数创建数组",[14,96596,96598],{"id":96597},"_221-函数语句","2.2.1 函数语句",[270,96600,96602],{"className":31715,"code":96601,"language":31717,"meta":275,"style":275},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[277,96603,96604],{"__ignoreMap":275},[152,96605,96606,96609,96612,96614,96616,96618,96620,96622,96625,96627,96630,96632,96635,96637,96639,96641,96644,96646,96649,96651,96654,96656,96658],{"class":281,"line":282},[152,96607,96608],{"class":483},"numpy.array(",[152,96610,96611],{"class":293},"object",[152,96613,14051],{"class":483},[152,96615,94837],{"class":6858},[152,96617,15180],{"class":476},[152,96619,40270],{"class":293},[152,96621,14051],{"class":483},[152,96623,96624],{"class":6858},"copy",[152,96626,15180],{"class":476},[152,96628,96629],{"class":293}," True",[152,96631,14051],{"class":483},[152,96633,96634],{"class":6858},"order",[152,96636,15180],{"class":476},[152,96638,40270],{"class":293},[152,96640,14051],{"class":483},[152,96642,96643],{"class":6858},"subok",[152,96645,15180],{"class":476},[152,96647,96648],{"class":293}," False",[152,96650,14051],{"class":483},[152,96652,96653],{"class":6858},"ndmin",[152,96655,15180],{"class":476},[152,96657,5735],{"class":293},[152,96659,1825],{"class":483},[19,96661,96662],{},"参数：",[19,96664,96665],{},[401,96666],{"alt":275,"src":96667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[14,96669,96671],{"id":96670},"_222-实例","2.2.2 实例",[19,96673,96674],{},[401,96675],{"alt":275,"src":96676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,96678,96679],{},[401,96680],{"alt":275,"src":96681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,96683,96684],{},[401,96685],{"alt":275,"src":96686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,96688,96689],{},[401,96690],{"alt":275,"src":96691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,96693,96694],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,96696,96697],{},[401,96698],{"alt":275,"src":96699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[1760,96701,96703],{"id":96702},"_22-随机数创建数组","2.2 随机数创建数组",[14,96705,96707],{"id":96706},"_221-random语句","2.2.1 random语句",[270,96709,96711],{"className":31715,"code":96710,"language":31717,"meta":275,"style":275},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[277,96712,96713,96718,96723,96731,96736],{"__ignoreMap":275},[152,96714,96715],{"class":281,"line":282},[152,96716,96717],{"class":866},"#random.random()\n",[152,96719,96720],{"class":281,"line":303},[152,96721,96722],{"class":866},"#确定随机种子,就是每次运行结果是相同的\n",[152,96724,96725,96727,96729],{"class":281,"line":310},[152,96726,95944],{"class":483},[152,96728,2000],{"class":293},[152,96730,1825],{"class":483},[152,96732,96733],{"class":281,"line":324},[152,96734,96735],{"class":483},"np.random.random()\n",[152,96737,96738],{"class":281,"line":329},[152,96739,96740],{"class":866},"#生成一个随机的数目\n",[19,96742,96743],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,96745,96746],{},"可以指定数组形状 size",[19,96748,96749],{},"①生成一维数组",[270,96751,96753],{"className":31715,"code":96752,"language":31717,"meta":275,"style":275},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[277,96754,96755,96760,96773,96778,96794],{"__ignoreMap":275},[152,96756,96757],{"class":281,"line":282},[152,96758,96759],{"class":866},"#random.random(size())\n",[152,96761,96762,96765,96767,96769,96771],{"class":281,"line":303},[152,96763,96764],{"class":483},"np.random.random(",[152,96766,32833],{"class":6858},[152,96768,1864],{"class":476},[152,96770,2127],{"class":293},[152,96772,1825],{"class":483},[152,96774,96775],{"class":281,"line":310},[152,96776,96777],{"class":866},"#生成一位的五个元素\n",[152,96779,96780,96782,96784,96786,96788,96790,96792],{"class":281,"line":324},[152,96781,69],{"class":483},[152,96783,1864],{"class":476},[152,96785,96764],{"class":483},[152,96787,32833],{"class":6858},[152,96789,1864],{"class":476},[152,96791,2101],{"class":293},[152,96793,1825],{"class":483},[152,96795,96796,96799],{"class":281,"line":329},[152,96797,96798],{"class":483},"a.shape ",[152,96800,96801],{"class":866},"#输出数组形状\n",[19,96803,96804],{},"②生成二维数组",[270,96806,96808],{"className":31715,"code":96807,"language":31717,"meta":275,"style":275},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[277,96809,96810,96814,96836],{"__ignoreMap":275},[152,96811,96812],{"class":281,"line":282},[152,96813,94638],{"class":866},[152,96815,96816,96818,96820,96822,96824,96826,96828,96830,96832,96834],{"class":281,"line":303},[152,96817,94643],{"class":483},[152,96819,1864],{"class":476},[152,96821,96764],{"class":483},[152,96823,32833],{"class":6858},[152,96825,1864],{"class":476},[152,96827,1819],{"class":483},[152,96829,2101],{"class":293},[152,96831,2186],{"class":483},[152,96833,2127],{"class":293},[152,96835,31834],{"class":483},[152,96837,96838],{"class":281,"line":310},[152,96839,96840],{"class":866},"#生成四行五列的数组\n",[19,96842,96843],{},"③生成三维数组",[270,96845,96847],{"className":31715,"code":96846,"language":31717,"meta":275,"style":275},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[277,96848,96849,96854,96881],{"__ignoreMap":275},[152,96850,96851],{"class":281,"line":282},[152,96852,96853],{"class":866},"#三维数组\n",[152,96855,96856,96859,96861,96863,96865,96867,96869,96871,96873,96875,96877,96879],{"class":281,"line":303},[152,96857,96858],{"class":483},"aaa",[152,96860,1864],{"class":476},[152,96862,96764],{"class":483},[152,96864,32833],{"class":6858},[152,96866,1864],{"class":476},[152,96868,1819],{"class":483},[152,96870,1894],{"class":293},[152,96872,2186],{"class":483},[152,96874,1888],{"class":293},[152,96876,2186],{"class":483},[152,96878,2101],{"class":293},[152,96880,31834],{"class":483},[152,96882,96883],{"class":281,"line":310},[152,96884,96885],{"class":483},"aaa.shape\n",[14,96887,96889],{"id":96888},"_222-randint语句","2.2.2 randint语句",[270,96891,96893],{"className":31715,"code":96892,"language":31717,"meta":275,"style":275},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[277,96894,96895,96900],{"__ignoreMap":275},[152,96896,96897],{"class":281,"line":282},[152,96898,96899],{"class":866},"#生成随机的整数 random.randint(low,high,size)\n",[152,96901,96902,96904,96906,96908],{"class":281,"line":303},[152,96903,94451],{"class":483},[152,96905,2127],{"class":293},[152,96907,15330],{"class":483},[152,96909,96910],{"class":866},"#0~5中的随机一个数\n",[19,96912,96749],{},[270,96914,96916],{"className":31715,"code":96915,"language":31717,"meta":275,"style":275},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[277,96917,96918,96923,96945],{"__ignoreMap":275},[152,96919,96920],{"class":281,"line":282},[152,96921,96922],{"class":866},"#一维\n",[152,96924,96925,96927,96929,96931,96933,96935,96937,96939,96941,96943],{"class":281,"line":303},[152,96926,94451],{"class":483},[152,96928,2026],{"class":293},[152,96930,2186],{"class":483},[152,96932,2280],{"class":293},[152,96934,2186],{"class":483},[152,96936,32833],{"class":6858},[152,96938,1864],{"class":476},[152,96940,1819],{"class":483},[152,96942,2254],{"class":293},[152,96944,31834],{"class":483},[152,96946,96947],{"class":281,"line":310},[152,96948,96949],{"class":866},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96951,96804],{},[19,96953,96954],{},[401,96955],{"alt":275,"src":96956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96958,96843],{},[19,96960,96961],{},[401,96962],{"alt":275,"src":96963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[14,96965,96967],{"id":96966},"_222-rand语句","2.2.2 rand语句",[19,96969,96970],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[270,96972,96974],{"className":31715,"code":96973,"language":31717,"meta":275,"style":275},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[277,96975,96976,96989,96994],{"__ignoreMap":275},[152,96977,96978,96981,96983,96985,96987],{"class":281,"line":282},[152,96979,96980],{"class":483},"np.random.rand(",[152,96982,2119],{"class":293},[152,96984,2186],{"class":483},[152,96986,2254],{"class":293},[152,96988,1825],{"class":483},[152,96990,96991],{"class":281,"line":303},[152,96992,96993],{"class":866},"#第一个参数100：行数，表示有100个样本\n",[152,96995,96996],{"class":281,"line":310},[152,96997,96998],{"class":866},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[1760,97000,97002],{"id":97001},"_23-arange创建数组","2.3 arange()创建数组",[14,97004,97006],{"id":97005},"_231-函数语句","2.3.1 函数语句",[270,97008,97010],{"className":31715,"code":97009,"language":31717,"meta":275,"style":275},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[277,97011,97012,97026,97031,97036,97041,97046,97051,97056],{"__ignoreMap":275},[152,97013,97014,97017,97019,97021,97024],{"class":281,"line":282},[152,97015,97016],{"class":483},"numpy.arange([start,] stop[, step], ",[152,97018,94837],{"class":6858},[152,97020,1864],{"class":476},[152,97022,97023],{"class":293},"None",[152,97025,1825],{"class":483},[152,97027,97028],{"class":281,"line":303},[152,97029,97030],{"class":866},"#参数\n",[152,97032,97033],{"class":281,"line":310},[152,97034,97035],{"class":289},"\"\"\"\n",[152,97037,97038],{"class":281,"line":324},[152,97039,97040],{"class":289},"start:起始值，可选，默认从 0 开始。\n",[152,97042,97043],{"class":281,"line":329},[152,97044,97045],{"class":289},"stop:结束值（不包含该值）。\n",[152,97047,97048],{"class":281,"line":343},[152,97049,97050],{"class":289},"step:步长，可选，默认是 1。可以为浮点数。\n",[152,97052,97053],{"class":281,"line":348},[152,97054,97055],{"class":289},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[152,97057,97058],{"class":281,"line":362},[152,97059,97035],{"class":289},[14,97061,97063],{"id":97062},"_232-实例","2.3.2 实例",[270,97065,97067],{"className":31715,"code":97066,"language":31717,"meta":275,"style":275},"#创建一维数组\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",[277,97068,97069,97073,97097,97102,97107,97111,97134,97138,97142,97147,97152],{"__ignoreMap":275},[152,97070,97071],{"class":281,"line":282},[152,97072,94442],{"class":866},[152,97074,97075,97077,97079,97081,97083,97085,97087,97089,97091,97093,97095],{"class":281,"line":303},[152,97076,94339],{"class":483},[152,97078,2026],{"class":293},[152,97080,2186],{"class":483},[152,97082,2533],{"class":293},[152,97084,2186],{"class":483},[152,97086,2026],{"class":293},[152,97088,2186],{"class":483},[152,97090,94837],{"class":6858},[152,97092,1864],{"class":476},[152,97094,1822],{"class":293},[152,97096,1825],{"class":483},[152,97098,97099],{"class":281,"line":310},[152,97100,97101],{"class":866},"#输出结果：\n",[152,97103,97104],{"class":281,"line":324},[152,97105,97106],{"class":866},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[152,97108,97109],{"class":281,"line":329},[152,97110,95284],{"class":866},[152,97112,97113,97116,97118,97120,97122,97125,97127,97129,97131],{"class":281,"line":343},[152,97114,97115],{"class":483},"np.array([np.arange(",[152,97117,2026],{"class":293},[152,97119,2186],{"class":483},[152,97121,2101],{"class":293},[152,97123,97124],{"class":483},"),np.arange(",[152,97126,2101],{"class":293},[152,97128,2186],{"class":483},[152,97130,2177],{"class":293},[152,97132,97133],{"class":483},")])\n",[152,97135,97136],{"class":281,"line":348},[152,97137,94901],{"class":866},[152,97139,97140],{"class":281,"line":362},[152,97141,97035],{"class":289},[152,97143,97144],{"class":281,"line":367},[152,97145,97146],{"class":289},"array([[1, 2, 3],\n",[152,97148,97149],{"class":281,"line":381},[152,97150,97151],{"class":289},"       [4, 5, 6]])\n",[152,97153,97154],{"class":281,"line":386},[152,97155,97035],{"class":289},[1760,97157,97159],{"id":97158},"_24-生态分布","2.4 生态分布",[14,97161,97163],{"id":97162},"_241-标准正态分布","2.4.1 标准正态分布",[19,97165,97166],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97168,97169],{},[401,97170],{"alt":275,"src":97171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[14,97173,97175],{"id":97174},"_242-常规正态分布","2.4.2 常规正态分布",[270,97177,97179],{"className":31715,"code":97178,"language":31717,"meta":275,"style":275},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[277,97180,97181,97186,97191,97196],{"__ignoreMap":275},[152,97182,97183],{"class":281,"line":282},[152,97184,97185],{"class":483},"random.normal(loc,scale,size)也可以生成正态分布\n",[152,97187,97188],{"class":281,"line":303},[152,97189,97190],{"class":866},"#loc:期望\n",[152,97192,97193],{"class":281,"line":310},[152,97194,97195],{"class":866},"#scale:方差\n",[152,97197,97198],{"class":281,"line":324},[152,97199,97200],{"class":866},"#size:用于确定是几维的数列\n",[19,97202,97203],{},[401,97204],{"alt":275,"src":97205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[1760,97207,97209],{"id":97208},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97211,97212],{},"ndim:秩，维度个数",[19,97214,97215],{},"size:数组元素的个数",[19,97217,97218],{},"shape:数组的形状",[19,97220,97221],{},"dtype:数组元素的类型",[19,97223,97224],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97226,97227],{},"他们都是属性，通过数组.属性的形式来确定",[19,97229,97230],{},"如果需要输出多个可以通过以下方式：",[270,97232,97234],{"className":31715,"code":97233,"language":31717,"meta":275,"style":275},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[277,97235,97236],{"__ignoreMap":275},[152,97237,97238,97240],{"class":281,"line":282},[152,97239,31752],{"class":293},[152,97241,97242],{"class":483},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[1760,97244,97246],{"id":97245},"_26-其他方式创建数组","2.6 其他方式创建数组",[14,97248,97250],{"id":97249},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97252,97253],{},"①创建一维数组",[270,97255,97257],{"className":31715,"code":97256,"language":31717,"meta":275,"style":275},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[277,97258,97259,97268,97272,97277,97282],{"__ignoreMap":275},[152,97260,97261,97264,97266],{"class":281,"line":282},[152,97262,97263],{"class":483},"np.zeros(",[152,97265,2254],{"class":293},[152,97267,1825],{"class":483},[152,97269,97270],{"class":281,"line":303},[152,97271,97035],{"class":289},[152,97273,97274],{"class":281,"line":310},[152,97275,97276],{"class":289},"输出结果：\n",[152,97278,97279],{"class":281,"line":324},[152,97280,97281],{"class":289},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[152,97283,97284],{"class":281,"line":329},[152,97285,97035],{"class":289},[19,97287,97288],{},"上方代码等价于：",[270,97290,97292],{"className":31715,"code":97291,"language":31717,"meta":275,"style":275},"np.zeros(shape=(10))#创建10个元素的0数组\n",[277,97293,97294],{"__ignoreMap":275},[152,97295,97296,97298,97301,97303,97305,97307,97309],{"class":281,"line":282},[152,97297,97263],{"class":483},[152,97299,97300],{"class":6858},"shape",[152,97302,1864],{"class":476},[152,97304,1819],{"class":483},[152,97306,2254],{"class":293},[152,97308,84108],{"class":483},[152,97310,97311],{"class":866},"#创建10个元素的0数组\n",[19,97313,97314],{},"也可以指定类型",[270,97316,97318],{"className":31715,"code":97317,"language":31717,"meta":275,"style":275},"#指定类型\nnp.zeros(5,dtype=int)\n",[277,97319,97320,97325],{"__ignoreMap":275},[152,97321,97322],{"class":281,"line":282},[152,97323,97324],{"class":866},"#指定类型\n",[152,97326,97327,97329,97331,97333,97335,97337,97339],{"class":281,"line":303},[152,97328,97263],{"class":483},[152,97330,2127],{"class":293},[152,97332,2186],{"class":483},[152,97334,94837],{"class":6858},[152,97336,1864],{"class":476},[152,97338,1822],{"class":293},[152,97340,1825],{"class":483},[19,97342,97343],{},"②创建二维数组",[270,97345,97347],{"className":31715,"code":97346,"language":31717,"meta":275,"style":275},"np.zeros((3,4),dtype=int)\n",[277,97348,97349],{"__ignoreMap":275},[152,97350,97351,97354,97356,97358,97360,97362,97364,97366,97368],{"class":281,"line":282},[152,97352,97353],{"class":483},"np.zeros((",[152,97355,1888],{"class":293},[152,97357,2186],{"class":483},[152,97359,2101],{"class":293},[152,97361,43593],{"class":483},[152,97363,94837],{"class":6858},[152,97365,1864],{"class":476},[152,97367,1822],{"class":293},[152,97369,1825],{"class":483},[19,97371,97372],{},"③创建三维数组",[270,97374,97376],{"className":31715,"code":97375,"language":31717,"meta":275,"style":275},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[277,97377,97378,97383],{"__ignoreMap":275},[152,97379,97380],{"class":281,"line":282},[152,97381,97382],{"class":866},"#创建三维数组\n",[152,97384,97385,97387,97389,97391,97393,97395,97397,97399,97401,97403,97405],{"class":281,"line":303},[152,97386,97353],{"class":483},[152,97388,1888],{"class":293},[152,97390,2186],{"class":483},[152,97392,2101],{"class":293},[152,97394,2186],{"class":483},[152,97396,2127],{"class":293},[152,97398,43593],{"class":483},[152,97400,94837],{"class":6858},[152,97402,1864],{"class":476},[152,97404,1822],{"class":293},[152,97406,1825],{"class":483},[19,97408,97409],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[270,97411,97413],{"className":31715,"code":97412,"language":31717,"meta":275,"style":275},"#使用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",[277,97414,97415,97420,97435,97440,97445,97467],{"__ignoreMap":275},[152,97416,97417],{"class":281,"line":282},[152,97418,97419],{"class":866},"#使用zeros_like将创建的一维数组变成全0的数组\n",[152,97421,97422,97424,97426,97428,97430,97432],{"class":281,"line":303},[152,97423,69],{"class":483},[152,97425,1864],{"class":476},[152,97427,94339],{"class":483},[152,97429,2101],{"class":293},[152,97431,2237],{"class":483},[152,97433,97434],{"class":866},"#这个得到的结果：一维数组0，1，2，3\n",[152,97436,97437],{"class":281,"line":310},[152,97438,97439],{"class":483},"np.zeros_like(a)\n",[152,97441,97442],{"class":281,"line":324},[152,97443,97444],{"class":866},"#使用zeros_like将创建的二维数组变成全0的数组\n",[152,97446,97447,97449,97451,97453,97455,97457,97459,97461,97463,97465],{"class":281,"line":329},[152,97448,94643],{"class":483},[152,97450,1864],{"class":476},[152,97452,96764],{"class":483},[152,97454,32833],{"class":6858},[152,97456,1864],{"class":476},[152,97458,1819],{"class":483},[152,97460,2101],{"class":293},[152,97462,2186],{"class":483},[152,97464,2127],{"class":293},[152,97466,31834],{"class":483},[152,97468,97469],{"class":281,"line":343},[152,97470,97471],{"class":483},"np.zeros_like(aa)\n",[14,97473,97475],{"id":97474},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97477,97478],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[14,97480,97482],{"id":97481},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97484,97485],{},"①empty()用法",[270,97487,97489],{"className":31715,"code":97488,"language":31717,"meta":275,"style":275},"numpy.empty(shape,dtype=float,order='c')\n",[277,97490,97491],{"__ignoreMap":275},[152,97492,97493,97496,97498,97500,97502,97504,97506,97508,97510],{"class":281,"line":282},[152,97494,97495],{"class":483},"numpy.empty(shape,",[152,97497,94837],{"class":6858},[152,97499,1864],{"class":476},[152,97501,1858],{"class":293},[152,97503,2186],{"class":483},[152,97505,96634],{"class":6858},[152,97507,1864],{"class":476},[152,97509,77365],{"class":289},[152,97511,1825],{"class":483},[19,97513,97514],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97516,97517],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97519,97520],{},[401,97521],{"alt":275,"src":97522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97524,97525],{},"②empty()用法",[270,97527,97529],{"className":31715,"code":97528,"language":31717,"meta":275,"style":275},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[277,97530,97531,97552,97564,97585,97590],{"__ignoreMap":275},[152,97532,97533,97535,97537,97540,97542,97544,97546,97548,97550],{"class":281,"line":282},[152,97534,2653],{"class":483},[152,97536,1864],{"class":476},[152,97538,97539],{"class":483},"np.empty(",[152,97541,2254],{"class":293},[152,97543,2186],{"class":483},[152,97545,94837],{"class":6858},[152,97547,1864],{"class":476},[152,97549,1822],{"class":293},[152,97551,1825],{"class":483},[152,97553,97554,97556,97558,97560,97562],{"class":281,"line":303},[152,97555,2628],{"class":483},[152,97557,1864],{"class":476},[152,97559,94339],{"class":483},[152,97561,2127],{"class":293},[152,97563,1825],{"class":483},[152,97565,97566,97569,97571,97574,97576,97578,97581,97583],{"class":281,"line":310},[152,97567,97568],{"class":483},"np.add(",[152,97570,1894],{"class":293},[152,97572,97573],{"class":483},",x,",[152,97575,94391],{"class":6858},[152,97577,1864],{"class":476},[152,97579,97580],{"class":483},"y[:",[152,97582,2127],{"class":293},[152,97584,6299],{"class":483},[152,97586,97587],{"class":281,"line":324},[152,97588,97589],{"class":866},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[152,97591,97592],{"class":281,"line":329},[152,97593,97594],{"class":483},"y\n",[19,97596,13130],{},[19,97598,97599],{},[401,97600],{"alt":275,"src":97601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[270,97603,97605],{"className":31715,"code":97604,"language":31717,"meta":275,"style":275},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[277,97606,97607,97623,97643,97658],{"__ignoreMap":275},[152,97608,97609,97611,97613,97615,97617,97619,97621],{"class":281,"line":282},[152,97610,2628],{"class":483},[152,97612,1864],{"class":476},[152,97614,94339],{"class":483},[152,97616,2026],{"class":293},[152,97618,2186],{"class":483},[152,97620,2152],{"class":293},[152,97622,1825],{"class":483},[152,97624,97625,97627,97629,97631,97633,97635,97637,97639,97641],{"class":281,"line":303},[152,97626,2653],{"class":483},[152,97628,1864],{"class":476},[152,97630,97539],{"class":483},[152,97632,2127],{"class":293},[152,97634,2186],{"class":483},[152,97636,94837],{"class":6858},[152,97638,1864],{"class":476},[152,97640,1822],{"class":293},[152,97642,1825],{"class":483},[152,97644,97645,97648,97650,97652,97654,97656],{"class":281,"line":310},[152,97646,97647],{"class":483},"np.add(x,",[152,97649,1894],{"class":293},[152,97651,2186],{"class":483},[152,97653,94391],{"class":6858},[152,97655,1864],{"class":476},[152,97657,94786],{"class":483},[152,97659,97660],{"class":281,"line":324},[152,97661,97662],{"class":866},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,97664,97665],{},"③empty_like()",[19,97667,97668],{},[694,97669,97670,97671,97676],{},"创建一个",[694,97672,97673],{},[694,97674,97675],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,97678,97679,97682],{},[277,97680,97681],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,97684,97685],{},[401,97686],{"alt":275,"src":97687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[14,97689,97691],{"id":97690},"_264-用法","2.6.4 ？？用法",[19,97693,97694],{},"当想查看一个函数的参数时，可以通过？？来实现",[270,97696,97698],{"className":31715,"code":97697,"language":31717,"meta":275,"style":275},"np.full??\n",[277,97699,97700],{"__ignoreMap":275},[152,97701,97702,97705],{"class":281,"line":282},[152,97703,97704],{"class":483},"np.full",[152,97706,97707],{"class":78740},"??\n",[14,97709,97711],{"id":97710},"_265-full创建数组","2.6.5 full()创建数组",[270,97713,97715],{"className":31715,"code":97714,"language":31717,"meta":275,"style":275},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[277,97716,97717,97722],{"__ignoreMap":275},[152,97718,97719],{"class":281,"line":282},[152,97720,97721],{"class":483},"full(shape,fill_value)\n",[152,97723,97724],{"class":281,"line":303},[152,97725,97726],{"class":483},"创建全为某个指定值的数组\n",[19,97728,95867],{},[270,97730,97732],{"className":31715,"code":97731,"language":31717,"meta":275,"style":275},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[277,97733,97734,97739],{"__ignoreMap":275},[152,97735,97736],{"class":281,"line":282},[152,97737,97738],{"class":866},"#创建一个一维数组,以20进行填充\n",[152,97740,97741,97744,97746,97748,97750],{"class":281,"line":303},[152,97742,97743],{"class":483},"np.full(",[152,97745,2254],{"class":293},[152,97747,2186],{"class":483},[152,97749,2508],{"class":293},[152,97751,1825],{"class":483},[19,97753,94628],{},[270,97755,97757],{"className":31715,"code":97756,"language":31717,"meta":275,"style":275},"#创建二维数组\nnp.full((3,5),11)\n",[277,97758,97759,97763],{"__ignoreMap":275},[152,97760,97761],{"class":281,"line":282},[152,97762,95284],{"class":866},[152,97764,97765,97768,97770,97772,97774,97776,97778],{"class":281,"line":303},[152,97766,97767],{"class":483},"np.full((",[152,97769,1888],{"class":293},[152,97771,2186],{"class":483},[152,97773,2127],{"class":293},[152,97775,43593],{"class":483},[152,97777,2280],{"class":293},[152,97779,1825],{"class":483},[19,97781,97782],{},"③full_like用法",[19,97784,97785],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,97787,97788],{},"这里是指定填充而已",[270,97790,97792],{"className":31715,"code":97791,"language":31717,"meta":275,"style":275},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[277,97793,97794,97799,97823,97828],{"__ignoreMap":275},[152,97795,97796],{"class":281,"line":282},[152,97797,97798],{"class":866},"#创建一个指定形状数组\n",[152,97800,97801,97803,97805,97807,97809,97811,97813,97815,97817,97819,97821],{"class":281,"line":303},[152,97802,69],{"class":483},[152,97804,1864],{"class":476},[152,97806,94339],{"class":483},[152,97808,2026],{"class":293},[152,97810,2186],{"class":483},[152,97812,2133],{"class":293},[152,97814,94344],{"class":483},[152,97816,2101],{"class":293},[152,97818,2186],{"class":483},[152,97820,2228],{"class":293},[152,97822,1825],{"class":483},[152,97824,97825],{"class":281,"line":310},[152,97826,97827],{"class":866},"#进行指定填充\n",[152,97829,97830,97833,97835],{"class":281,"line":324},[152,97831,97832],{"class":483},"np.full_like(a,",[152,97834,2254],{"class":293},[152,97836,1825],{"class":483},[19,97838,13130],{},[19,97840,97841],{},[401,97842],{"alt":275,"src":97843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[14,97845,97847],{"id":97846},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[262,97849,97851],{"id":97850},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[270,97853,97855],{"className":31715,"code":97854,"language":31717,"meta":275,"style":275},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[277,97856,97857,97874],{"__ignoreMap":275},[152,97858,97859,97862,97864,97866,97868,97870,97872],{"class":281,"line":282},[152,97860,97861],{"class":483},"np.eye(",[152,97863,2101],{"class":293},[152,97865,2186],{"class":483},[152,97867,94837],{"class":6858},[152,97869,1864],{"class":476},[152,97871,1822],{"class":293},[152,97873,1825],{"class":483},[152,97875,97876],{"class":281,"line":303},[152,97877,97878],{"class":866},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[262,97880,97882],{"id":97881},"_2662-法2identity","2.6.6.2 法2：identity()",[270,97884,97886],{"className":31715,"code":97885,"language":31717,"meta":275,"style":275},"#identity()\nnp.identity(5,dtype=int)\n",[277,97887,97888,97893],{"__ignoreMap":275},[152,97889,97890],{"class":281,"line":282},[152,97891,97892],{"class":866},"#identity()\n",[152,97894,97895,97898,97900,97902,97904,97906,97908],{"class":281,"line":303},[152,97896,97897],{"class":483},"np.identity(",[152,97899,2127],{"class":293},[152,97901,2186],{"class":483},[152,97903,94837],{"class":6858},[152,97905,1864],{"class":476},[152,97907,1822],{"class":293},[152,97909,1825],{"class":483},[19,97911,97912],{},"两个函数是有区别的",[19,97914,97915],{},[401,97916],{"alt":275,"src":97917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97919,97920],{},[401,97921],{"alt":275,"src":97922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[270,97924,97926],{"className":31715,"code":97925,"language":31717,"meta":275,"style":275},"# 创建一个 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",[277,97927,97928,97933,97945,97950,97955,97960,97965,97969,97974,97994,97998,98003,98008],{"__ignoreMap":275},[152,97929,97930],{"class":281,"line":282},[152,97931,97932],{"class":866},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[152,97934,97935,97937,97939,97941,97943],{"class":281,"line":303},[152,97936,97861],{"class":483},[152,97938,1888],{"class":293},[152,97940,14051],{"class":483},[152,97942,2101],{"class":293},[152,97944,1825],{"class":483},[152,97946,97947],{"class":281,"line":310},[152,97948,97949],{"class":866},"# 输出:\n",[152,97951,97952],{"class":281,"line":324},[152,97953,97954],{"class":866},"# [[1. 0. 0. 0.]\n",[152,97956,97957],{"class":281,"line":329},[152,97958,97959],{"class":866},"#  [0. 1. 0. 0.]\n",[152,97961,97962],{"class":281,"line":343},[152,97963,97964],{"class":866},"#  [0. 0. 1. 0.]]\n",[152,97966,97967],{"class":281,"line":348},[152,97968,307],{"emptyLinePlaceholder":306},[152,97970,97971],{"class":281,"line":362},[152,97972,97973],{"class":866},"# 对角线向上偏移1\n",[152,97975,97976,97978,97980,97982,97984,97986,97988,97990,97992],{"class":281,"line":367},[152,97977,97861],{"class":483},[152,97979,1888],{"class":293},[152,97981,14051],{"class":483},[152,97983,2101],{"class":293},[152,97985,14051],{"class":483},[152,97987,2301],{"class":6858},[152,97989,1864],{"class":476},[152,97991,2026],{"class":293},[152,97993,1825],{"class":483},[152,97995,97996],{"class":281,"line":381},[152,97997,97949],{"class":866},[152,97999,98000],{"class":281,"line":386},[152,98001,98002],{"class":866},"# [[0. 1. 0. 0.]\n",[152,98004,98005],{"class":281,"line":932},[152,98006,98007],{"class":866},"#  [0. 0. 1. 0.]\n",[152,98009,98010],{"class":281,"line":942},[152,98011,98012],{"class":866},"#  [0. 0. 0. 1.]]\n",[14,98014,98016],{"id":98015},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[270,98018,98020],{"className":31715,"code":98019,"language":31717,"meta":275,"style":275},"#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",[277,98021,98022,98027,98031,98036,98041,98046,98051,98056,98061,98066,98071],{"__ignoreMap":275},[152,98023,98024],{"class":281,"line":282},[152,98025,98026],{"class":866},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[152,98028,98029],{"class":281,"line":303},[152,98030,97035],{"class":289},[152,98032,98033],{"class":281,"line":310},[152,98034,98035],{"class":289},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[152,98037,98038],{"class":281,"line":324},[152,98039,98040],{"class":289},"参数介绍：\n",[152,98042,98043],{"class":281,"line":329},[152,98044,98045],{"class":289},"start：序列的起始值\n",[152,98047,98048],{"class":281,"line":343},[152,98049,98050],{"class":289},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[152,98052,98053],{"class":281,"line":348},[152,98054,98055],{"class":289},"num：要生长的等步长的样本数量，默认为50\n",[152,98057,98058],{"class":281,"line":362},[152,98059,98060],{"class":289},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[152,98062,98063],{"class":281,"line":367},[152,98064,98065],{"class":289},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[152,98067,98068],{"class":281,"line":381},[152,98069,98070],{"class":289},"dtype：ndarry的数据类型\n",[152,98072,98073],{"class":281,"line":386},[152,98074,97035],{"class":289},[19,98076,98077],{},[401,98078],{"alt":275,"src":98079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98081,98082],{},"这里num=是可以省略的",[19,98084,98085],{},"也就是下方两行代码结果是一模一样的",[270,98087,98089],{"className":31715,"code":98088,"language":31717,"meta":275,"style":275},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[277,98090,98091,98108],{"__ignoreMap":275},[152,98092,98093,98096,98098,98100,98102,98104,98106],{"class":281,"line":282},[152,98094,98095],{"class":483},"np.linspace(",[152,98097,2026],{"class":293},[152,98099,2186],{"class":483},[152,98101,2127],{"class":293},[152,98103,2186],{"class":483},[152,98105,2127],{"class":293},[152,98107,1825],{"class":483},[152,98109,98110,98112,98114,98116,98118,98120,98122,98124,98126],{"class":281,"line":303},[152,98111,98095],{"class":483},[152,98113,2026],{"class":293},[152,98115,2186],{"class":483},[152,98117,2127],{"class":293},[152,98119,2186],{"class":483},[152,98121,3329],{"class":6858},[152,98123,1864],{"class":476},[152,98125,2127],{"class":293},[152,98127,1825],{"class":483},[14,98129,98131],{"id":98130},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[270,98133,98135],{"className":31715,"code":98134,"language":31717,"meta":275,"style":275},"#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",[277,98136,98137,98142,98146,98151,98156,98161,98166,98170,98175,98180,98184],{"__ignoreMap":275},[152,98138,98139],{"class":281,"line":282},[152,98140,98141],{"class":866},"#logspace函数用于创建一个等比数列，格式如下：\n",[152,98143,98144],{"class":281,"line":303},[152,98145,97035],{"class":289},[152,98147,98148],{"class":281,"line":310},[152,98149,98150],{"class":289},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[152,98152,98153],{"class":281,"line":324},[152,98154,98155],{"class":289},"参数为：\n",[152,98157,98158],{"class":281,"line":329},[152,98159,98160],{"class":289},"start:序列的起始位置为：base**start\n",[152,98162,98163],{"class":281,"line":343},[152,98164,98165],{"class":289},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[152,98167,98168],{"class":281,"line":348},[152,98169,98055],{"class":289},[152,98171,98172],{"class":281,"line":362},[152,98173,98174],{"class":289},"endpoint：是否包含 stop 这个值，默认是 True\n",[152,98176,98177],{"class":281,"line":367},[152,98178,98179],{"class":289},"base：对数的底数，默认是 10（常见对数）\n",[152,98181,98182],{"class":281,"line":381},[152,98183,98070],{"class":289},[152,98185,98186],{"class":281,"line":386},[152,98187,97035],{"class":289},[19,98189,98190],{},[401,98191],{"alt":275,"src":98192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98194,98195],{},"logspace()函数中的num参数也是可以不写num=的",[19,98197,98198],{},"endpoint是不可以省略的",[1736,98200,98201],{},"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":275,"searchDepth":303,"depth":303,"links":98203},[98204,98208,98213,98217,98221,98222],{"id":96593,"depth":303,"text":96594,"children":98205},[98206,98207],{"id":96597,"depth":310,"text":96598},{"id":96670,"depth":310,"text":96671},{"id":96702,"depth":303,"text":96703,"children":98209},[98210,98211,98212],{"id":96706,"depth":310,"text":96707},{"id":96888,"depth":310,"text":96889},{"id":96966,"depth":310,"text":96967},{"id":97001,"depth":303,"text":97002,"children":98214},[98215,98216],{"id":97005,"depth":310,"text":97006},{"id":97062,"depth":310,"text":97063},{"id":97158,"depth":303,"text":97159,"children":98218},[98219,98220],{"id":97162,"depth":310,"text":97163},{"id":97174,"depth":310,"text":97175},{"id":97208,"depth":303,"text":97209},{"id":97245,"depth":303,"text":97246,"children":98223},[98224,98225,98226,98227,98228,98229,98230,98231],{"id":97249,"depth":310,"text":97250},{"id":97474,"depth":310,"text":97475},{"id":97481,"depth":310,"text":97482},{"id":97690,"depth":310,"text":97691},{"id":97710,"depth":310,"text":97711},{"id":97846,"depth":310,"text":97847},{"id":98015,"depth":310,"text":98016},{"id":98130,"depth":310,"text":98131},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96585,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98238,"title":98239,"body":98240,"description":24991,"extension":1744,"meta":98333,"navigation":306,"path":98334,"seo":98335,"stem":98336,"__hash__":98337},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98241,"toc":98331},[98242,98245,98248,98251,98254,98257,98260,98263,98266,98269,98272,98275,98277,98280,98283,98288,98291,98294,98328],[10,98243,98239],{"id":98244},"_20魔法命令mprun",[19,98246,98247],{},"逐行分析数据内存的使用情况",[19,98249,98250],{},"语法格式：",[19,98252,98253],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98255,98256],{},"分析结果列如下：",[19,98258,98259],{},"Line行号",[19,98261,98262],{},"Mem usage内存使用大小",[19,98264,98265],{},"increment内存增量",[19,98267,98268],{},"Line content代码内容",[19,98270,98271],{},"补充说明：",[19,98273,98274],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98276,96540],{},[19,98278,98279],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98281,98282],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98284,98285],{},[401,98286],{"alt":275,"src":98287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98289,98290],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98292,98293],{},"这时候需要重新加载模块",[270,98295,98297],{"className":31715,"code":98296,"language":31717,"meta":275,"style":275},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[277,98298,98299,98304,98311,98316],{"__ignoreMap":275},[152,98300,98301],{"class":281,"line":282},[152,98302,98303],{"class":866},"#重新加载模块\n",[152,98305,98306,98308],{"class":281,"line":303},[152,98307,31729],{"class":476},[152,98309,98310],{"class":483}," importlib\n",[152,98312,98313],{"class":281,"line":310},[152,98314,98315],{"class":483},"importlib.reload(mprun_test)\n",[152,98317,98318,98320,98323,98325],{"class":281,"line":324},[152,98319,2136],{"class":476},[152,98321,98322],{"class":483},"mprun ",[152,98324,2340],{"class":476},[152,98326,98327],{"class":483},"f mprun_test.fun_test mprun_test.fun_test()\n",[1736,98329,98330],{},"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":275,"searchDepth":303,"depth":303,"links":98332},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98239,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98339,"title":98340,"body":98341,"description":24991,"extension":1744,"meta":98358,"navigation":306,"path":98359,"seo":98360,"stem":98361,"__hash__":98362},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98342,"toc":98356},[98343,98346,98351],[10,98344,98340],{"id":98345},"_3一维数组的索引和切片",[19,98347,98348],{},[401,98349],{"alt":275,"src":98350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98352,98353],{},[401,98354],{"alt":275,"src":98355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":275,"searchDepth":303,"depth":303,"links":98357},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98340,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98364,"title":98365,"body":98366,"description":24991,"extension":1744,"meta":98849,"navigation":306,"path":98850,"seo":98851,"stem":98852,"__hash__":98853},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98367,"toc":98847},[98368,98371,98374,98379,98412,98415,98453,98456,98490,98493,98598,98601,98638,98641,98742,98745,98796,98799,98841,98844],[10,98369,98365],{"id":98370},"_4二维数组的索引与切片",[19,98372,98373],{},"①获取指定单个元素",[19,98375,98376],{},[401,98377],{"alt":275,"src":98378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[270,98380,98382],{"className":31715,"code":98381,"language":31717,"meta":275,"style":275},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[277,98383,98384,98389,98394,98399],{"__ignoreMap":275},[152,98385,98386],{"class":281,"line":282},[152,98387,98388],{"class":866},"#获取元素9\n",[152,98390,98391],{"class":281,"line":303},[152,98392,98393],{"class":866},"#先获取所在行，再获取所在列\n",[152,98395,98396],{"class":281,"line":310},[152,98397,98398],{"class":866},"#数组[行索引号，列索引号]\n",[152,98400,98401,98404,98406,98408,98410],{"class":281,"line":324},[152,98402,98403],{"class":483},"a[",[152,98405,2026],{"class":293},[152,98407,2186],{"class":483},[152,98409,1894],{"class":293},[152,98411,34583],{"class":483},[19,98413,98414],{},"②获取整行元素",[270,98416,98418],{"className":31715,"code":98417,"language":31717,"meta":275,"style":275},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[277,98419,98420,98425,98430,98438,98443],{"__ignoreMap":275},[152,98421,98422],{"class":281,"line":282},[152,98423,98424],{"class":866},"#获取整行 数组[行索引号]\n",[152,98426,98427],{"class":281,"line":303},[152,98428,98429],{"class":866},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[152,98431,98432,98434,98436],{"class":281,"line":310},[152,98433,98403],{"class":483},[152,98435,1894],{"class":293},[152,98437,34583],{"class":483},[152,98439,98440],{"class":281,"line":324},[152,98441,98442],{"class":866},"#也可以负索引获取一行\n",[152,98444,98445,98447,98449,98451],{"class":281,"line":329},[152,98446,98403],{"class":483},[152,98448,2340],{"class":476},[152,98450,2026],{"class":293},[152,98452,34583],{"class":483},[19,98454,98455],{},"③获取整列元素",[270,98457,98459],{"className":31715,"code":98458,"language":31717,"meta":275,"style":275},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[277,98460,98461,98466,98475,98480],{"__ignoreMap":275},[152,98462,98463],{"class":281,"line":282},[152,98464,98465],{"class":866},"#获取整列 数组名[:,列索引]\n",[152,98467,98468,98471,98473],{"class":281,"line":303},[152,98469,98470],{"class":483},"a[:,",[152,98472,1894],{"class":293},[152,98474,34583],{"class":483},[152,98476,98477],{"class":281,"line":310},[152,98478,98479],{"class":866},"#也可以负索引获取一列\n",[152,98481,98482,98484,98486,98488],{"class":281,"line":324},[152,98483,98470],{"class":483},[152,98485,2340],{"class":476},[152,98487,2026],{"class":293},[152,98489,34583],{"class":483},[19,98491,98492],{},"④部分行部分列的元素",[270,98494,98496],{"className":31715,"code":98495,"language":31717,"meta":275,"style":275},"#部分行部分列 数组名[行切片，列切片]\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",[277,98497,98498,98503,98513,98517,98521,98526,98531,98535,98547,98551,98555,98560,98565,98570,98575,98579,98584],{"__ignoreMap":275},[152,98499,98500],{"class":281,"line":282},[152,98501,98502],{"class":866},"#部分行部分列 数组名[行切片，列切片]\n",[152,98504,98505,98508,98510],{"class":281,"line":303},[152,98506,98507],{"class":483},"a[:",[152,98509,1894],{"class":293},[152,98511,98512],{"class":483},",:]\n",[152,98514,98515],{"class":281,"line":310},[152,98516,94901],{"class":866},[152,98518,98519],{"class":281,"line":324},[152,98520,95265],{"class":289},[152,98522,98523],{"class":281,"line":329},[152,98524,98525],{"class":289},"array([[ 1,  2,  3,  4,  5,  6],\n",[152,98527,98528],{"class":281,"line":343},[152,98529,98530],{"class":289},"       [ 7,  8,  9, 10, 11, 12]])\n",[152,98532,98533],{"class":281,"line":348},[152,98534,95265],{"class":289},[152,98536,98537,98539,98541,98543,98545],{"class":281,"line":362},[152,98538,98470],{"class":483},[152,98540,2026],{"class":293},[152,98542,841],{"class":483},[152,98544,2101],{"class":293},[152,98546,34583],{"class":483},[152,98548,98549],{"class":281,"line":367},[152,98550,94901],{"class":866},[152,98552,98553],{"class":281,"line":381},[152,98554,95265],{"class":289},[152,98556,98557],{"class":281,"line":386},[152,98558,98559],{"class":289},"array([[ 2,  3,  4],\n",[152,98561,98562],{"class":281,"line":932},[152,98563,98564],{"class":289},"       [ 8,  9, 10],\n",[152,98566,98567],{"class":281,"line":942},[152,98568,98569],{"class":289},"       [14, 15, 16],\n",[152,98571,98572],{"class":281,"line":949},[152,98573,98574],{"class":289},"       [20, 21, 22]])\n",[152,98576,98577],{"class":281,"line":954},[152,98578,95265],{"class":289},[152,98580,98581],{"class":281,"line":959},[152,98582,98583],{"class":866},"#对列行同时进行切片，使用了step参数\n",[152,98585,98586,98589,98591,98594,98596],{"class":281,"line":970},[152,98587,98588],{"class":483},"a[::",[152,98590,1894],{"class":293},[152,98592,98593],{"class":483},",::",[152,98595,1894],{"class":293},[152,98597,34583],{"class":483},[19,98599,98600],{},"⑤同时获取两个元素",[270,98602,98604],{"className":31715,"code":98603,"language":31717,"meta":275,"style":275},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[277,98605,98606,98611,98616],{"__ignoreMap":275},[152,98607,98608],{"class":281,"line":282},[152,98609,98610],{"class":866},"#同时获取第三行第二列，第四行第一列\n",[152,98612,98613],{"class":281,"line":303},[152,98614,98615],{"class":866},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[152,98617,98618,98621,98623,98625,98627,98629,98631,98633,98635],{"class":281,"line":310},[152,98619,98620],{"class":483},"a[(",[152,98622,1894],{"class":293},[152,98624,2186],{"class":483},[152,98626,1888],{"class":293},[152,98628,43584],{"class":483},[152,98630,2026],{"class":293},[152,98632,2186],{"class":483},[152,98634,2000],{"class":293},[152,98636,98637],{"class":483},")]\n",[19,98639,98640],{},"⑥切片，对行进行反向获取",[270,98642,98644],{"className":31715,"code":98643,"language":31717,"meta":275,"style":275},"#切片 对所有行进行反向获取\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",[277,98645,98646,98651,98661,98665,98669,98674,98679,98684,98689,98693,98698,98714,98718,98723,98728,98733,98738],{"__ignoreMap":275},[152,98647,98648],{"class":281,"line":282},[152,98649,98650],{"class":866},"#切片 对所有行进行反向获取\n",[152,98652,98653,98655,98657,98659],{"class":281,"line":303},[152,98654,98588],{"class":483},[152,98656,2340],{"class":476},[152,98658,2026],{"class":293},[152,98660,34583],{"class":483},[152,98662,98663],{"class":281,"line":310},[152,98664,94901],{"class":866},[152,98666,98667],{"class":281,"line":324},[152,98668,95265],{"class":289},[152,98670,98671],{"class":281,"line":329},[152,98672,98673],{"class":289},"array([[19, 20, 21, 22, 23, 24],\n",[152,98675,98676],{"class":281,"line":343},[152,98677,98678],{"class":289},"       [13, 14, 15, 16, 17, 18],\n",[152,98680,98681],{"class":281,"line":348},[152,98682,98683],{"class":289},"       [ 7,  8,  9, 10, 11, 12],\n",[152,98685,98686],{"class":281,"line":362},[152,98687,98688],{"class":289},"       [ 1,  2,  3,  4,  5,  6]])\n",[152,98690,98691],{"class":281,"line":367},[152,98692,95265],{"class":289},[152,98694,98695],{"class":281,"line":381},[152,98696,98697],{"class":866},"#对行列都进行反向切片获取\n",[152,98699,98700,98702,98704,98706,98708,98710,98712],{"class":281,"line":386},[152,98701,98588],{"class":483},[152,98703,2340],{"class":476},[152,98705,2026],{"class":293},[152,98707,98593],{"class":483},[152,98709,2340],{"class":476},[152,98711,2026],{"class":293},[152,98713,34583],{"class":483},[152,98715,98716],{"class":281,"line":932},[152,98717,95265],{"class":289},[152,98719,98720],{"class":281,"line":942},[152,98721,98722],{"class":289},"array([[24, 23, 22, 21, 20, 19],\n",[152,98724,98725],{"class":281,"line":949},[152,98726,98727],{"class":289},"       [18, 17, 16, 15, 14, 13],\n",[152,98729,98730],{"class":281,"line":954},[152,98731,98732],{"class":289},"       [12, 11, 10,  9,  8,  7],\n",[152,98734,98735],{"class":281,"line":959},[152,98736,98737],{"class":289},"       [ 6,  5,  4,  3,  2,  1]])\n",[152,98739,98740],{"class":281,"line":970},[152,98741,95265],{"class":289},[19,98743,98744],{},"⑦修改元素",[270,98746,98748],{"className":31715,"code":98747,"language":31717,"meta":275,"style":275},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[277,98749,98750,98755,98773,98778],{"__ignoreMap":275},[152,98751,98752],{"class":281,"line":282},[152,98753,98754],{"class":866},"#获取前两行和前两列\n",[152,98756,98757,98760,98762,98764,98766,98769,98771],{"class":281,"line":303},[152,98758,98759],{"class":483},"sub_a",[152,98761,1864],{"class":476},[152,98763,98507],{"class":483},[152,98765,1894],{"class":293},[152,98767,98768],{"class":483},",:",[152,98770,1894],{"class":293},[152,98772,34583],{"class":483},[152,98774,98775],{"class":281,"line":310},[152,98776,98777],{"class":866},"#修改sub_a第一个元素的值\n",[152,98779,98780,98783,98785,98787,98789,98791,98793],{"class":281,"line":324},[152,98781,98782],{"class":483},"sub_a[",[152,98784,2000],{"class":293},[152,98786,2186],{"class":483},[152,98788,2000],{"class":293},[152,98790,2746],{"class":483},[152,98792,1864],{"class":476},[152,98794,98795],{"class":293},"100\n",[19,98797,98798],{},"⑧数组复制copy()",[270,98800,98802],{"className":31715,"code":98801,"language":31717,"meta":275,"style":275},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[277,98803,98804,98809,98819,98824],{"__ignoreMap":275},[152,98805,98806],{"class":281,"line":282},[152,98807,98808],{"class":866},"#数组复制\n",[152,98810,98811,98814,98816],{"class":281,"line":303},[152,98812,98813],{"class":483},"copy_a",[152,98815,1864],{"class":476},[152,98817,98818],{"class":483},"np.copy(sub_a)\n",[152,98820,98821],{"class":281,"line":310},[152,98822,98823],{"class":866},"#修改copy_a后不影响原数组\n",[152,98825,98826,98829,98831,98833,98835,98837,98839],{"class":281,"line":324},[152,98827,98828],{"class":483},"copy_a[",[152,98830,2000],{"class":293},[152,98832,2186],{"class":483},[152,98834,2000],{"class":293},[152,98836,2746],{"class":483},[152,98838,1864],{"class":476},[152,98840,98795],{"class":293},[19,98842,98843],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1736,98845,98846],{},"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":275,"searchDepth":303,"depth":303,"links":98848},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98365,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98855,"title":98856,"body":98857,"description":24991,"extension":1744,"meta":99349,"navigation":306,"path":99350,"seo":99351,"stem":99352,"__hash__":99353},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98858,"toc":99341},[98859,98862,98866,98869,98872,98925,98928,98953,98956,98975,98995,98998,99014,99018,99064,99068,99110,99114,99117,99120,99123,99126,99129,99191,99251,99255,99258,99315,99319,99324,99333,99338],[10,98860,98856],{"id":98861},"_5改变数组的维度",[1760,98863,98865],{"id":98864},"_51-使用reshape","5.1 使用reshape()",[19,98867,98868],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,98870,98871],{},"①一维数组转换为二维数组",[270,98873,98875],{"className":31715,"code":98874,"language":31717,"meta":275,"style":275},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[277,98876,98877,98893,98898,98903,98908],{"__ignoreMap":275},[152,98878,98879,98881,98883,98885,98887,98889,98891],{"class":281,"line":282},[152,98880,69],{"class":483},[152,98882,1864],{"class":476},[152,98884,94339],{"class":483},[152,98886,2026],{"class":293},[152,98888,2186],{"class":483},[152,98890,2331],{"class":293},[152,98892,1825],{"class":483},[152,98894,98895],{"class":281,"line":303},[152,98896,98897],{"class":866},"#将一维数组进行转换\n",[152,98899,98900],{"class":281,"line":310},[152,98901,98902],{"class":866},"#注意点：元素个数不可以变\n",[152,98904,98905],{"class":281,"line":324},[152,98906,98907],{"class":866},"#转换维度要保持一致，不一致就异常！！！\n",[152,98909,98910,98912,98914,98917,98919,98921,98923],{"class":281,"line":329},[152,98911,94643],{"class":483},[152,98913,1864],{"class":476},[152,98915,98916],{"class":483},"a.reshape(",[152,98918,1894],{"class":293},[152,98920,2186],{"class":483},[152,98922,2152],{"class":293},[152,98924,1825],{"class":483},[19,98926,98927],{},"②一维数组转换为三维数组",[270,98929,98931],{"className":31715,"code":98930,"language":31717,"meta":275,"style":275},"aaa=a.reshape(2,3,2)\n",[277,98932,98933],{"__ignoreMap":275},[152,98934,98935,98937,98939,98941,98943,98945,98947,98949,98951],{"class":281,"line":282},[152,98936,96858],{"class":483},[152,98938,1864],{"class":476},[152,98940,98916],{"class":483},[152,98942,1894],{"class":293},[152,98944,2186],{"class":483},[152,98946,1888],{"class":293},[152,98948,2186],{"class":483},[152,98950,1894],{"class":293},[152,98952,1825],{"class":483},[19,98954,98955],{},"③二维数组转化为一维数组",[270,98957,98959],{"className":31715,"code":98958,"language":31717,"meta":275,"style":275},"#知道元素个数：\naa.reshape(12)\n",[277,98960,98961,98966],{"__ignoreMap":275},[152,98962,98963],{"class":281,"line":282},[152,98964,98965],{"class":866},"#知道元素个数：\n",[152,98967,98968,98971,98973],{"class":281,"line":303},[152,98969,98970],{"class":483},"aa.reshape(",[152,98972,2306],{"class":293},[152,98974,1825],{"class":483},[270,98976,98978],{"className":31715,"code":98977,"language":31717,"meta":275,"style":275},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[277,98979,98980,98985],{"__ignoreMap":275},[152,98981,98982],{"class":281,"line":282},[152,98983,98984],{"class":866},"#不知道元素个数，参数传递-1\n",[152,98986,98987,98989,98991,98993],{"class":281,"line":303},[152,98988,98970],{"class":483},[152,98990,2340],{"class":476},[152,98992,2026],{"class":293},[152,98994,1825],{"class":483},[19,98996,98997],{},"④三维数组转换为一维数组",[270,98999,99001],{"className":31715,"code":99000,"language":31717,"meta":275,"style":275},"aaa.reshape(-1)\n",[277,99002,99003],{"__ignoreMap":275},[152,99004,99005,99008,99010,99012],{"class":281,"line":282},[152,99006,99007],{"class":483},"aaa.reshape(",[152,99009,2340],{"class":476},[152,99011,2026],{"class":293},[152,99013,1825],{"class":483},[1760,99015,99017],{"id":99016},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[270,99019,99021],{"className":31715,"code":99020,"language":31717,"meta":275,"style":275},"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",[277,99022,99023,99050,99055,99059],{"__ignoreMap":275},[152,99024,99025,99027,99029,99031,99033,99035,99037,99039,99041,99043,99045,99047],{"class":281,"line":282},[152,99026,94643],{"class":483},[152,99028,1864],{"class":476},[152,99030,94339],{"class":483},[152,99032,2026],{"class":293},[152,99034,2186],{"class":483},[152,99036,2331],{"class":293},[152,99038,94344],{"class":483},[152,99040,1894],{"class":293},[152,99042,2186],{"class":483},[152,99044,2152],{"class":293},[152,99046,2237],{"class":483},[152,99048,99049],{"class":866},"#转换为2行6列的数组\n",[152,99051,99052],{"class":281,"line":303},[152,99053,99054],{"class":483},"aa.revel()\n",[152,99056,99057],{"class":281,"line":310},[152,99058,94901],{"class":866},[152,99060,99061],{"class":281,"line":324},[152,99062,99063],{"class":866},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[1760,99065,99067],{"id":99066},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[270,99069,99071],{"className":31715,"code":99070,"language":31717,"meta":275,"style":275},"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",[277,99072,99073,99097,99102,99106],{"__ignoreMap":275},[152,99074,99075,99077,99079,99081,99083,99085,99087,99089,99091,99093,99095],{"class":281,"line":282},[152,99076,94643],{"class":483},[152,99078,1864],{"class":476},[152,99080,94339],{"class":483},[152,99082,2026],{"class":293},[152,99084,2186],{"class":483},[152,99086,2331],{"class":293},[152,99088,94344],{"class":483},[152,99090,1894],{"class":293},[152,99092,2186],{"class":483},[152,99094,2152],{"class":293},[152,99096,1825],{"class":483},[152,99098,99099],{"class":281,"line":303},[152,99100,99101],{"class":483},"aa.flatten()\n",[152,99103,99104],{"class":281,"line":310},[152,99105,94901],{"class":866},[152,99107,99108],{"class":281,"line":324},[152,99109,99063],{"class":866},[1760,99111,99113],{"id":99112},"_54-使用resize","5.4 使用resize()",[19,99115,99116],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99118,99119],{},"通过resize方法可以改变数组的维度",[19,99121,99122],{},"#resize修改数组维度",[19,99124,99125],{},"#以元组的形式指定形状",[19,99127,99128],{},"#改变的是原数组",[270,99130,99132],{"className":31715,"code":99131,"language":31717,"meta":275,"style":275},"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",[277,99133,99134,99150,99170,99183,99187],{"__ignoreMap":275},[152,99135,99136,99138,99140,99142,99144,99146,99148],{"class":281,"line":282},[152,99137,69],{"class":483},[152,99139,1864],{"class":476},[152,99141,94339],{"class":483},[152,99143,2026],{"class":293},[152,99145,2186],{"class":483},[152,99147,2331],{"class":293},[152,99149,1825],{"class":483},[152,99151,99152,99155,99157,99159,99161,99163,99165,99167],{"class":281,"line":303},[152,99153,99154],{"class":483},"a.shape",[152,99156,1864],{"class":476},[152,99158,1819],{"class":483},[152,99160,1894],{"class":293},[152,99162,2186],{"class":483},[152,99164,2152],{"class":293},[152,99166,2237],{"class":483},[152,99168,99169],{"class":866},"#改变了原数组\n",[152,99171,99172,99174,99176,99179,99181],{"class":281,"line":310},[152,99173,69],{"class":483},[152,99175,1864],{"class":476},[152,99177,99178],{"class":483},"resize((",[152,99180,2306],{"class":293},[152,99182,31834],{"class":483},[152,99184,99185],{"class":281,"line":324},[152,99186,94901],{"class":866},[152,99188,99189],{"class":281,"line":329},[152,99190,99063],{"class":866},[270,99192,99194],{"className":31715,"code":99193,"language":31717,"meta":275,"style":275},"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",[277,99195,99196,99209,99213,99217,99222,99227,99232,99237,99242,99247],{"__ignoreMap":275},[152,99197,99198,99201,99203,99205,99207],{"class":281,"line":282},[152,99199,99200],{"class":483},"a.resize((",[152,99202,2152],{"class":293},[152,99204,2186],{"class":483},[152,99206,1894],{"class":293},[152,99208,31834],{"class":483},[152,99210,99211],{"class":281,"line":303},[152,99212,94901],{"class":866},[152,99214,99215],{"class":281,"line":310},[152,99216,95265],{"class":289},[152,99218,99219],{"class":281,"line":324},[152,99220,99221],{"class":289},"array([[ 1,  2],\n",[152,99223,99224],{"class":281,"line":329},[152,99225,99226],{"class":289},"       [ 3,  4],\n",[152,99228,99229],{"class":281,"line":343},[152,99230,99231],{"class":289},"       [ 5,  6],\n",[152,99233,99234],{"class":281,"line":348},[152,99235,99236],{"class":289},"       [ 7,  8],\n",[152,99238,99239],{"class":281,"line":362},[152,99240,99241],{"class":289},"       [ 9, 10],\n",[152,99243,99244],{"class":281,"line":367},[152,99245,99246],{"class":289},"       [11, 12]])\n",[152,99248,99249],{"class":281,"line":381},[152,99250,95265],{"class":289},[1760,99252,99254],{"id":99253},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99256,99257],{},"改变了原数组",[270,99259,99261],{"className":31715,"code":99260,"language":31717,"meta":275,"style":275},"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",[277,99262,99263,99279,99295,99299,99303,99307,99311],{"__ignoreMap":275},[152,99264,99265,99267,99269,99271,99273,99275,99277],{"class":281,"line":282},[152,99266,69],{"class":483},[152,99268,1864],{"class":476},[152,99270,94339],{"class":483},[152,99272,2026],{"class":293},[152,99274,2186],{"class":483},[152,99276,2331],{"class":293},[152,99278,1825],{"class":483},[152,99280,99281,99283,99285,99287,99289,99291,99293],{"class":281,"line":303},[152,99282,99154],{"class":483},[152,99284,1864],{"class":476},[152,99286,1819],{"class":483},[152,99288,1894],{"class":293},[152,99290,2186],{"class":483},[152,99292,2152],{"class":293},[152,99294,1825],{"class":483},[152,99296,99297],{"class":281,"line":310},[152,99298,94901],{"class":866},[152,99300,99301],{"class":281,"line":324},[152,99302,95265],{"class":289},[152,99304,99305],{"class":281,"line":329},[152,99306,98525],{"class":289},[152,99308,99309],{"class":281,"line":343},[152,99310,98530],{"class":289},[152,99312,99313],{"class":281,"line":348},[152,99314,95265],{"class":289},[1760,99316,99318],{"id":99317},"_56-重要比较","5.6 重要比较：",[19,99320,99321],{},[401,99322],{"alt":275,"src":99323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99325,99326,99327,99329,99330,99332],{},"口诀：NumPy 函数要么用 ",[277,99328,97300],{},"，要么用 ",[277,99331,32833],{},"，创建结构用 shape，造数据用 size",[19,99334,99335],{},[401,99336],{"alt":275,"src":99337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1736,99339,99340],{},"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":275,"searchDepth":303,"depth":303,"links":99342},[99343,99344,99345,99346,99347,99348],{"id":98864,"depth":303,"text":98865},{"id":99016,"depth":303,"text":99017},{"id":99066,"depth":303,"text":99067},{"id":99112,"depth":303,"text":99113},{"id":99253,"depth":303,"text":99254},{"id":99317,"depth":303,"text":99318},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98856,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99355,"title":99356,"body":99357,"description":24991,"extension":1744,"meta":100429,"navigation":306,"path":100430,"seo":100431,"stem":100432,"__hash__":100433},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99358,"toc":100423},[99359,99362,99366,99369,99372,99375,99440,99443,99483,99486,99568,99571,99576,99598,99600,99605,99610,99613,99616,99771,99774,99976,99980,99983,99986,100054,100056,100061,100064,100067,100147,100151,100154,100156,100229,100231,100236,100238,100318,100322,100325,100328,100331,100334,100337,100340,100420],[10,99360,99356],{"id":99361},"_6数组的拼接",[1760,99363,99365],{"id":99364},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99367,99368],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99370,99371],{},"函数内部传两个数列构成的数列或者元组",[19,99373,99374],{},"①一维数组的拼接",[270,99376,99378],{"className":31715,"code":99377,"language":31717,"meta":275,"style":275},"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",[277,99379,99380,99400,99420,99425,99430,99435],{"__ignoreMap":275},[152,99381,99382,99384,99386,99388,99390,99392,99394,99396,99398],{"class":281,"line":282},[152,99383,69],{"class":483},[152,99385,1864],{"class":476},[152,99387,94361],{"class":483},[152,99389,2026],{"class":293},[152,99391,2186],{"class":483},[152,99393,1894],{"class":293},[152,99395,2186],{"class":483},[152,99397,1888],{"class":293},[152,99399,6299],{"class":483},[152,99401,99402,99404,99406,99408,99410,99412,99414,99416,99418],{"class":281,"line":303},[152,99403,2071],{"class":483},[152,99405,1864],{"class":476},[152,99407,94361],{"class":483},[152,99409,2101],{"class":293},[152,99411,2186],{"class":483},[152,99413,2127],{"class":293},[152,99415,2186],{"class":483},[152,99417,2152],{"class":293},[152,99419,6299],{"class":483},[152,99421,99422],{"class":281,"line":310},[152,99423,99424],{"class":866},"#调用concatenate进行数组拼接\n",[152,99426,99427],{"class":281,"line":324},[152,99428,99429],{"class":483},"np.concatenate((a,b))\n",[152,99431,99432],{"class":281,"line":329},[152,99433,99434],{"class":866},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[152,99436,99437],{"class":281,"line":343},[152,99438,99439],{"class":866},"#np.concatenate([a,b])\n",[19,99441,99442],{},"②一维多个数组拼接",[270,99444,99446],{"className":31715,"code":99445,"language":31717,"meta":275,"style":275},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[277,99447,99448,99453,99473,99478],{"__ignoreMap":275},[152,99449,99450],{"class":281,"line":282},[152,99451,99452],{"class":866},"#也可以多个数组进行拼接\n",[152,99454,99455,99457,99459,99461,99463,99465,99467,99469,99471],{"class":281,"line":303},[152,99456,2096],{"class":483},[152,99458,1864],{"class":476},[152,99460,94361],{"class":483},[152,99462,2254],{"class":293},[152,99464,2186],{"class":483},[152,99466,2280],{"class":293},[152,99468,2186],{"class":483},[152,99470,2331],{"class":293},[152,99472,6299],{"class":483},[152,99474,99475],{"class":281,"line":310},[152,99476,99477],{"class":483},"c\n",[152,99479,99480],{"class":281,"line":324},[152,99481,99482],{"class":483},"np.concatenate((a,b,c))\n",[19,99484,99485],{},"③二维数组拼接",[270,99487,99489],{"className":31715,"code":99488,"language":31717,"meta":275,"style":275},"#二维数组使用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",[277,99490,99491,99496,99520,99545,99550,99555],{"__ignoreMap":275},[152,99492,99493],{"class":281,"line":282},[152,99494,99495],{"class":866},"#二维数组使用concatenate进行拼接\n",[152,99497,99498,99500,99502,99504,99506,99508,99510,99512,99514,99516,99518],{"class":281,"line":303},[152,99499,94643],{"class":483},[152,99501,1864],{"class":476},[152,99503,94339],{"class":483},[152,99505,2026],{"class":293},[152,99507,2186],{"class":483},[152,99509,2331],{"class":293},[152,99511,94344],{"class":483},[152,99513,1888],{"class":293},[152,99515,2186],{"class":483},[152,99517,2101],{"class":293},[152,99519,1825],{"class":483},[152,99521,99522,99525,99527,99529,99531,99533,99535,99537,99539,99541,99543],{"class":281,"line":310},[152,99523,99524],{"class":483},"bb",[152,99526,1864],{"class":476},[152,99528,94339],{"class":483},[152,99530,2145],{"class":293},[152,99532,2186],{"class":483},[152,99534,2450],{"class":293},[152,99536,94344],{"class":483},[152,99538,1888],{"class":293},[152,99540,2186],{"class":483},[152,99542,2101],{"class":293},[152,99544,1825],{"class":483},[152,99546,99547],{"class":281,"line":324},[152,99548,99549],{"class":866},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[152,99551,99552],{"class":281,"line":329},[152,99553,99554],{"class":866},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[152,99556,99557,99560,99562,99564,99566],{"class":281,"line":343},[152,99558,99559],{"class":483},"np.concatenate((aa,bb),",[152,99561,48851],{"class":6858},[152,99563,1864],{"class":476},[152,99565,2000],{"class":293},[152,99567,1825],{"class":483},[19,99569,99570],{},"结果：",[19,99572,99573],{},[401,99574],{"alt":275,"src":99575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[270,99577,99579],{"className":31715,"code":99578,"language":31717,"meta":275,"style":275},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[277,99580,99581,99586],{"__ignoreMap":275},[152,99582,99583],{"class":281,"line":282},[152,99584,99585],{"class":866},"#指定axis为1进行拼接\n",[152,99587,99588,99590,99592,99594,99596],{"class":281,"line":303},[152,99589,99559],{"class":483},[152,99591,48851],{"class":6858},[152,99593,1864],{"class":476},[152,99595,2026],{"class":293},[152,99597,1825],{"class":483},[19,99599,99570],{},[19,99601,99602],{},[401,99603],{"alt":275,"src":99604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,99606,99607],{},[694,99608,99609],{},"二维数组总结：0竖着方向，1横着方向",[19,99611,99612],{},"④三维数组拼接",[19,99614,99615],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[270,99617,99619],{"className":31715,"code":99618,"language":31717,"meta":275,"style":275},"#两个三行六列\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",[277,99620,99621,99626,99654,99684,99689,99706,99711,99716,99721,99738,99743,99748,99753,99766],{"__ignoreMap":275},[152,99622,99623],{"class":281,"line":282},[152,99624,99625],{"class":866},"#两个三行六列\n",[152,99627,99628,99630,99632,99634,99636,99638,99640,99642,99644,99646,99648,99650,99652],{"class":281,"line":303},[152,99629,96858],{"class":483},[152,99631,1864],{"class":476},[152,99633,94339],{"class":483},[152,99635,2026],{"class":293},[152,99637,2186],{"class":483},[152,99639,2133],{"class":293},[152,99641,94344],{"class":483},[152,99643,1894],{"class":293},[152,99645,2186],{"class":483},[152,99647,1888],{"class":293},[152,99649,2186],{"class":483},[152,99651,2152],{"class":293},[152,99653,1825],{"class":483},[152,99655,99656,99659,99661,99663,99665,99667,99670,99672,99674,99676,99678,99680,99682],{"class":281,"line":310},[152,99657,99658],{"class":483},"bbb",[152,99660,1864],{"class":476},[152,99662,94339],{"class":483},[152,99664,2145],{"class":293},[152,99666,2186],{"class":483},[152,99668,99669],{"class":293},"137",[152,99671,94344],{"class":483},[152,99673,1894],{"class":293},[152,99675,2186],{"class":483},[152,99677,1888],{"class":293},[152,99679,2186],{"class":483},[152,99681,2152],{"class":293},[152,99683,1825],{"class":483},[152,99685,99686],{"class":281,"line":324},[152,99687,99688],{"class":866},"#axis=0\n",[152,99690,99691,99693,99695,99698,99700,99702,99704],{"class":281,"line":329},[152,99692,2503],{"class":483},[152,99694,1864],{"class":476},[152,99696,99697],{"class":483},"np.concatenate((aaa,bbb),",[152,99699,48851],{"class":6858},[152,99701,1864],{"class":476},[152,99703,2000],{"class":293},[152,99705,1825],{"class":483},[152,99707,99708],{"class":281,"line":343},[152,99709,99710],{"class":483},"s.shape\n",[152,99712,99713],{"class":281,"line":348},[152,99714,99715],{"class":866},"#输出：(4,3,6)\n",[152,99717,99718],{"class":281,"line":362},[152,99719,99720],{"class":866},"#axis=1\n",[152,99722,99723,99726,99728,99730,99732,99734,99736],{"class":281,"line":367},[152,99724,99725],{"class":483},"ss",[152,99727,1864],{"class":476},[152,99729,99697],{"class":483},[152,99731,48851],{"class":6858},[152,99733,1864],{"class":476},[152,99735,2026],{"class":293},[152,99737,1825],{"class":483},[152,99739,99740],{"class":281,"line":381},[152,99741,99742],{"class":483},"ss.shape\n",[152,99744,99745],{"class":281,"line":386},[152,99746,99747],{"class":866},"#输出：(2,6,6)\n",[152,99749,99750],{"class":281,"line":932},[152,99751,99752],{"class":866},"#axis=2\n",[152,99754,99755,99757,99759,99761,99763],{"class":281,"line":942},[152,99756,99697],{"class":483},[152,99758,48851],{"class":6858},[152,99760,1864],{"class":476},[152,99762,1894],{"class":293},[152,99764,99765],{"class":483},").shape\n",[152,99767,99768],{"class":281,"line":949},[152,99769,99770],{"class":866},"#输出：（2，3，12）\n",[19,99772,99773],{},"⑤四维数组拼接",[270,99775,99777],{"className":31715,"code":99776,"language":31717,"meta":275,"style":275},"#两个三行六列\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",[277,99778,99779,99783,99811,99839,99864,99890,99894,99907,99912,99916,99928,99933,99937,99949,99954,99959,99971],{"__ignoreMap":275},[152,99780,99781],{"class":281,"line":282},[152,99782,99625],{"class":866},[152,99784,99785,99787,99789,99791,99793,99795,99797,99799,99801,99803,99805,99807,99809],{"class":281,"line":303},[152,99786,96858],{"class":483},[152,99788,1864],{"class":476},[152,99790,94339],{"class":483},[152,99792,2026],{"class":293},[152,99794,2186],{"class":483},[152,99796,2133],{"class":293},[152,99798,94344],{"class":483},[152,99800,1894],{"class":293},[152,99802,2186],{"class":483},[152,99804,1888],{"class":293},[152,99806,2186],{"class":483},[152,99808,2152],{"class":293},[152,99810,1825],{"class":483},[152,99812,99813,99815,99817,99819,99821,99823,99825,99827,99829,99831,99833,99835,99837],{"class":281,"line":310},[152,99814,99658],{"class":483},[152,99816,1864],{"class":476},[152,99818,94339],{"class":483},[152,99820,2145],{"class":293},[152,99822,2186],{"class":483},[152,99824,99669],{"class":293},[152,99826,94344],{"class":483},[152,99828,1894],{"class":293},[152,99830,2186],{"class":483},[152,99832,1888],{"class":293},[152,99834,2186],{"class":483},[152,99836,2152],{"class":293},[152,99838,1825],{"class":483},[152,99840,99841,99844,99846,99848,99850,99852,99854,99856,99858,99860,99862],{"class":281,"line":324},[152,99842,99843],{"class":483},"aaaa",[152,99845,1864],{"class":476},[152,99847,99007],{"class":483},[152,99849,1894],{"class":293},[152,99851,2186],{"class":483},[152,99853,1888],{"class":293},[152,99855,2186],{"class":483},[152,99857,1888],{"class":293},[152,99859,2186],{"class":483},[152,99861,1894],{"class":293},[152,99863,1825],{"class":483},[152,99865,99866,99869,99871,99874,99876,99878,99880,99882,99884,99886,99888],{"class":281,"line":329},[152,99867,99868],{"class":483},"bbbb",[152,99870,1864],{"class":476},[152,99872,99873],{"class":483},"bbb.reshape(",[152,99875,1894],{"class":293},[152,99877,2186],{"class":483},[152,99879,1888],{"class":293},[152,99881,2186],{"class":483},[152,99883,1888],{"class":293},[152,99885,2186],{"class":483},[152,99887,1894],{"class":293},[152,99889,1825],{"class":483},[152,99891,99892],{"class":281,"line":343},[152,99893,99688],{"class":866},[152,99895,99896,99899,99901,99903,99905],{"class":281,"line":348},[152,99897,99898],{"class":483},"np.concatenate((aaaa,bbbb),",[152,99900,48851],{"class":6858},[152,99902,1864],{"class":476},[152,99904,2000],{"class":293},[152,99906,99765],{"class":483},[152,99908,99909],{"class":281,"line":362},[152,99910,99911],{"class":866},"#结果：（4，3，3，2）\n",[152,99913,99914],{"class":281,"line":367},[152,99915,99720],{"class":866},[152,99917,99918,99920,99922,99924,99926],{"class":281,"line":381},[152,99919,99898],{"class":483},[152,99921,48851],{"class":6858},[152,99923,1864],{"class":476},[152,99925,2026],{"class":293},[152,99927,99765],{"class":483},[152,99929,99930],{"class":281,"line":386},[152,99931,99932],{"class":866},"#结果：（2，6，3，2）\n",[152,99934,99935],{"class":281,"line":932},[152,99936,99752],{"class":866},[152,99938,99939,99941,99943,99945,99947],{"class":281,"line":942},[152,99940,99898],{"class":483},[152,99942,48851],{"class":6858},[152,99944,1864],{"class":476},[152,99946,1894],{"class":293},[152,99948,99765],{"class":483},[152,99950,99951],{"class":281,"line":949},[152,99952,99953],{"class":866},"#结果：（2，3，6，2）\n",[152,99955,99956],{"class":281,"line":954},[152,99957,99958],{"class":866},"#axis=3\n",[152,99960,99961,99963,99965,99967,99969],{"class":281,"line":959},[152,99962,99898],{"class":483},[152,99964,48851],{"class":6858},[152,99966,1864],{"class":476},[152,99968,1888],{"class":293},[152,99970,99765],{"class":483},[152,99972,99973],{"class":281,"line":970},[152,99974,99975],{"class":866},"#结果：（2，3，3，4）\n",[1760,99977,99979],{"id":99978},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99981,99982],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99984,99985],{},"①二维数组",[270,99987,99989],{"className":31715,"code":99988,"language":31717,"meta":275,"style":275},"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",[277,99990,99991,100015,100039,100044,100049],{"__ignoreMap":275},[152,99992,99993,99995,99997,99999,100001,100003,100005,100007,100009,100011,100013],{"class":281,"line":282},[152,99994,94643],{"class":483},[152,99996,1864],{"class":476},[152,99998,94339],{"class":483},[152,100000,2026],{"class":293},[152,100002,2186],{"class":483},[152,100004,2331],{"class":293},[152,100006,94344],{"class":483},[152,100008,1888],{"class":293},[152,100010,2186],{"class":483},[152,100012,2101],{"class":293},[152,100014,1825],{"class":483},[152,100016,100017,100019,100021,100023,100025,100027,100029,100031,100033,100035,100037],{"class":281,"line":303},[152,100018,99524],{"class":483},[152,100020,1864],{"class":476},[152,100022,94339],{"class":483},[152,100024,2145],{"class":293},[152,100026,2186],{"class":483},[152,100028,2450],{"class":293},[152,100030,94344],{"class":483},[152,100032,1888],{"class":293},[152,100034,2186],{"class":483},[152,100036,2101],{"class":293},[152,100038,1825],{"class":483},[152,100040,100041],{"class":281,"line":310},[152,100042,100043],{"class":483},"np.hstack((aa,bb))\n",[152,100045,100046],{"class":281,"line":324},[152,100047,100048],{"class":866},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[152,100050,100051],{"class":281,"line":329},[152,100052,100053],{"class":866},"#np.hstack([aa,bb])\n",[19,100055,99570],{},[19,100057,100058],{},[401,100059],{"alt":275,"src":100060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100062,100063],{},"等效于concatenate()函数中axis=1时的情况",[19,100065,100066],{},"②三维数组",[270,100068,100070],{"className":31715,"code":100069,"language":31717,"meta":275,"style":275},"#两个三行六列\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",[277,100071,100072,100076,100104,100132,100137,100142],{"__ignoreMap":275},[152,100073,100074],{"class":281,"line":282},[152,100075,99625],{"class":866},[152,100077,100078,100080,100082,100084,100086,100088,100090,100092,100094,100096,100098,100100,100102],{"class":281,"line":303},[152,100079,96858],{"class":483},[152,100081,1864],{"class":476},[152,100083,94339],{"class":483},[152,100085,2026],{"class":293},[152,100087,2186],{"class":483},[152,100089,2133],{"class":293},[152,100091,94344],{"class":483},[152,100093,1894],{"class":293},[152,100095,2186],{"class":483},[152,100097,1888],{"class":293},[152,100099,2186],{"class":483},[152,100101,2152],{"class":293},[152,100103,1825],{"class":483},[152,100105,100106,100108,100110,100112,100114,100116,100118,100120,100122,100124,100126,100128,100130],{"class":281,"line":310},[152,100107,99658],{"class":483},[152,100109,1864],{"class":476},[152,100111,94339],{"class":483},[152,100113,2145],{"class":293},[152,100115,2186],{"class":483},[152,100117,99669],{"class":293},[152,100119,94344],{"class":483},[152,100121,1894],{"class":293},[152,100123,2186],{"class":483},[152,100125,1888],{"class":293},[152,100127,2186],{"class":483},[152,100129,2152],{"class":293},[152,100131,1825],{"class":483},[152,100133,100134],{"class":281,"line":324},[152,100135,100136],{"class":866},"#使用hstack\n",[152,100138,100139],{"class":281,"line":329},[152,100140,100141],{"class":483},"np.hstack((aaa,bbb)).shape\n",[152,100143,100144],{"class":281,"line":343},[152,100145,100146],{"class":866},"#输出：（2，6，6）\n",[1760,100148,100150],{"id":100149},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100152,100153],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100155,99985],{},[270,100157,100159],{"className":31715,"code":100158,"language":31717,"meta":275,"style":275},"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",[277,100160,100161,100185,100209,100214,100219,100224],{"__ignoreMap":275},[152,100162,100163,100165,100167,100169,100171,100173,100175,100177,100179,100181,100183],{"class":281,"line":282},[152,100164,94643],{"class":483},[152,100166,1864],{"class":476},[152,100168,94339],{"class":483},[152,100170,2026],{"class":293},[152,100172,2186],{"class":483},[152,100174,2331],{"class":293},[152,100176,94344],{"class":483},[152,100178,1888],{"class":293},[152,100180,2186],{"class":483},[152,100182,2101],{"class":293},[152,100184,1825],{"class":483},[152,100186,100187,100189,100191,100193,100195,100197,100199,100201,100203,100205,100207],{"class":281,"line":303},[152,100188,99524],{"class":483},[152,100190,1864],{"class":476},[152,100192,94339],{"class":483},[152,100194,2145],{"class":293},[152,100196,2186],{"class":483},[152,100198,2450],{"class":293},[152,100200,94344],{"class":483},[152,100202,1888],{"class":293},[152,100204,2186],{"class":483},[152,100206,2101],{"class":293},[152,100208,1825],{"class":483},[152,100210,100211],{"class":281,"line":310},[152,100212,100213],{"class":866},"#vstack 垂直方向进行堆叠\n",[152,100215,100216],{"class":281,"line":324},[152,100217,100218],{"class":483},"np.vstack((aa,bb))\n",[152,100220,100221],{"class":281,"line":329},[152,100222,100223],{"class":866},"#与hstack传的参数类似，等价于：\n",[152,100225,100226],{"class":281,"line":343},[152,100227,100228],{"class":483},"np.vstack([aa,bb])\n",[19,100230,99570],{},[19,100232,100233],{},[401,100234],{"alt":275,"src":100235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100237,100066],{},[270,100239,100241],{"className":31715,"code":100240,"language":31717,"meta":275,"style":275},"#两个三行六列\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",[277,100242,100243,100247,100275,100303,100308,100313],{"__ignoreMap":275},[152,100244,100245],{"class":281,"line":282},[152,100246,99625],{"class":866},[152,100248,100249,100251,100253,100255,100257,100259,100261,100263,100265,100267,100269,100271,100273],{"class":281,"line":303},[152,100250,96858],{"class":483},[152,100252,1864],{"class":476},[152,100254,94339],{"class":483},[152,100256,2026],{"class":293},[152,100258,2186],{"class":483},[152,100260,2133],{"class":293},[152,100262,94344],{"class":483},[152,100264,1894],{"class":293},[152,100266,2186],{"class":483},[152,100268,1888],{"class":293},[152,100270,2186],{"class":483},[152,100272,2152],{"class":293},[152,100274,1825],{"class":483},[152,100276,100277,100279,100281,100283,100285,100287,100289,100291,100293,100295,100297,100299,100301],{"class":281,"line":310},[152,100278,99658],{"class":483},[152,100280,1864],{"class":476},[152,100282,94339],{"class":483},[152,100284,2145],{"class":293},[152,100286,2186],{"class":483},[152,100288,99669],{"class":293},[152,100290,94344],{"class":483},[152,100292,1894],{"class":293},[152,100294,2186],{"class":483},[152,100296,1888],{"class":293},[152,100298,2186],{"class":483},[152,100300,2152],{"class":293},[152,100302,1825],{"class":483},[152,100304,100305],{"class":281,"line":324},[152,100306,100307],{"class":866},"#使用vstack\n",[152,100309,100310],{"class":281,"line":329},[152,100311,100312],{"class":483},"np.vstack((aaa,bbb)).shape\n",[152,100314,100315],{"class":281,"line":343},[152,100316,100317],{"class":866},"#输出：（4，3，6）\n",[1760,100319,100321],{"id":100320},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100323,100324],{},"该方法是三维数组特有的方法",[19,100326,100327],{},"也就是说",[19,100329,100330],{},"一维数组拼接方法用：concatenate()",[19,100332,100333],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100335,100336],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100338,100339],{},"四维数组及多维数组只能用concatenate进行拼接",[270,100341,100343],{"className":31715,"code":100342,"language":31717,"meta":275,"style":275},"#两个三行六列\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",[277,100344,100345,100349,100377,100405,100410,100415],{"__ignoreMap":275},[152,100346,100347],{"class":281,"line":282},[152,100348,99625],{"class":866},[152,100350,100351,100353,100355,100357,100359,100361,100363,100365,100367,100369,100371,100373,100375],{"class":281,"line":303},[152,100352,96858],{"class":483},[152,100354,1864],{"class":476},[152,100356,94339],{"class":483},[152,100358,2026],{"class":293},[152,100360,2186],{"class":483},[152,100362,2133],{"class":293},[152,100364,94344],{"class":483},[152,100366,1894],{"class":293},[152,100368,2186],{"class":483},[152,100370,1888],{"class":293},[152,100372,2186],{"class":483},[152,100374,2152],{"class":293},[152,100376,1825],{"class":483},[152,100378,100379,100381,100383,100385,100387,100389,100391,100393,100395,100397,100399,100401,100403],{"class":281,"line":310},[152,100380,99658],{"class":483},[152,100382,1864],{"class":476},[152,100384,94339],{"class":483},[152,100386,2145],{"class":293},[152,100388,2186],{"class":483},[152,100390,99669],{"class":293},[152,100392,94344],{"class":483},[152,100394,1894],{"class":293},[152,100396,2186],{"class":483},[152,100398,1888],{"class":293},[152,100400,2186],{"class":483},[152,100402,2152],{"class":293},[152,100404,1825],{"class":483},[152,100406,100407],{"class":281,"line":324},[152,100408,100409],{"class":866},"#使用dstack\n",[152,100411,100412],{"class":281,"line":329},[152,100413,100414],{"class":483},"np.dstack((aaa,bbb)).shape\n",[152,100416,100417],{"class":281,"line":343},[152,100418,100419],{"class":866},"#结果：（2，3，12）\n",[1736,100421,100422],{},"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":275,"searchDepth":303,"depth":303,"links":100424},[100425,100426,100427,100428],{"id":99364,"depth":303,"text":99365},{"id":99978,"depth":303,"text":99979},{"id":100149,"depth":303,"text":100150},{"id":100320,"depth":303,"text":100321},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99356,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100435,"title":100436,"body":100437,"description":24991,"extension":1744,"meta":100712,"navigation":306,"path":100713,"seo":100714,"stem":100715,"__hash__":100716},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100438,"toc":100710},[100439,100442,100445,100539,100542,100545,100548,100551,100554,100557,100560,100563,100707],[10,100440,100436],{"id":100441},"_7数组转置",[19,100443,100444],{},"使用transpose()函数",[270,100446,100448],{"className":31715,"code":100447,"language":31717,"meta":275,"style":275},"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",[277,100449,100450,100460,100484,100489,100494,100499,100504,100512,100516,100520,100525,100530,100535],{"__ignoreMap":275},[152,100451,100452,100454,100456,100458],{"class":281,"line":282},[152,100453,31729],{"class":476},[152,100455,32717],{"class":483},[152,100457,32720],{"class":476},[152,100459,32723],{"class":483},[152,100461,100462,100464,100466,100468,100470,100472,100474,100476,100478,100480,100482],{"class":281,"line":303},[152,100463,69],{"class":483},[152,100465,1864],{"class":476},[152,100467,33054],{"class":483},[152,100469,2026],{"class":293},[152,100471,2186],{"class":483},[152,100473,2331],{"class":293},[152,100475,94344],{"class":483},[152,100477,2101],{"class":293},[152,100479,2186],{"class":483},[152,100481,1888],{"class":293},[152,100483,1825],{"class":483},[152,100485,100486],{"class":281,"line":310},[152,100487,100488],{"class":866},"#二维数组转置\n",[152,100490,100491],{"class":281,"line":324},[152,100492,100493],{"class":866},"#调用transpose()函数\n",[152,100495,100496],{"class":281,"line":329},[152,100497,100498],{"class":483},"a.transpose()\n",[152,100500,100501],{"class":281,"line":343},[152,100502,100503],{"class":866},"#对于二维数组也可以采用.T来实现\n",[152,100505,100506,100509],{"class":281,"line":348},[152,100507,100508],{"class":483},"a.T",[152,100510,100511],{"class":866},"#与上述代码一样\n",[152,100513,100514],{"class":281,"line":362},[152,100515,94901],{"class":866},[152,100517,100518],{"class":281,"line":367},[152,100519,95265],{"class":289},[152,100521,100522],{"class":281,"line":381},[152,100523,100524],{"class":289},"array([[ 1,  4,  7, 10],\n",[152,100526,100527],{"class":281,"line":386},[152,100528,100529],{"class":289},"       [ 2,  5,  8, 11],\n",[152,100531,100532],{"class":281,"line":932},[152,100533,100534],{"class":289},"       [ 3,  6,  9, 12]])\n",[152,100536,100537],{"class":281,"line":942},[152,100538,95265],{"class":289},[19,100540,100541],{},"也可以使用np.transpose()的形式",[19,100543,100544],{},"#多维数组进行转置 np.transpose()",[19,100546,100547],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100549,100550],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100552,100553],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100555,100556],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100558,100559],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100561,100562],{},"四维及以上的数组也是一样的道理",[270,100564,100566],{"className":31715,"code":100565,"language":31717,"meta":275,"style":275},"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",[277,100567,100568,100596,100601,100606,100611,100629,100634,100666,100671,100676,100681,100702],{"__ignoreMap":275},[152,100569,100570,100572,100574,100576,100578,100580,100582,100584,100586,100588,100590,100592,100594],{"class":281,"line":282},[152,100571,2628],{"class":483},[152,100573,1864],{"class":476},[152,100575,94339],{"class":483},[152,100577,2026],{"class":293},[152,100579,2186],{"class":483},[152,100581,2133],{"class":293},[152,100583,94344],{"class":483},[152,100585,1888],{"class":293},[152,100587,2186],{"class":483},[152,100589,2152],{"class":293},[152,100591,2186],{"class":483},[152,100593,1894],{"class":293},[152,100595,1825],{"class":483},[152,100597,100598],{"class":281,"line":303},[152,100599,100600],{"class":483},"x.shape\n",[152,100602,100603],{"class":281,"line":310},[152,100604,100605],{"class":866},"#结果：（3,6,2）\n",[152,100607,100608],{"class":281,"line":324},[152,100609,100610],{"class":866},"#使用np.transpose()进行转置 变为(2,6,3)\n",[152,100612,100613,100616,100618,100620,100622,100624,100626],{"class":281,"line":329},[152,100614,100615],{"class":483},"np.transpose(x,(",[152,100617,1894],{"class":293},[152,100619,2186],{"class":483},[152,100621,2026],{"class":293},[152,100623,2186],{"class":483},[152,100625,2000],{"class":293},[152,100627,100628],{"class":483},")).shape\n",[152,100630,100631],{"class":281,"line":343},[152,100632,100633],{"class":866},"#结果：(2,6,3)\n",[152,100635,100636,100638,100640,100642,100644,100646,100648,100650,100652,100654,100656,100658,100660,100662,100664],{"class":281,"line":348},[152,100637,99843],{"class":483},[152,100639,1864],{"class":476},[152,100641,94339],{"class":483},[152,100643,2026],{"class":293},[152,100645,2186],{"class":483},[152,100647,2133],{"class":293},[152,100649,94344],{"class":483},[152,100651,1888],{"class":293},[152,100653,2186],{"class":483},[152,100655,1894],{"class":293},[152,100657,2186],{"class":483},[152,100659,2026],{"class":293},[152,100661,2186],{"class":483},[152,100663,2152],{"class":293},[152,100665,1825],{"class":483},[152,100667,100668],{"class":281,"line":362},[152,100669,100670],{"class":483},"aaaa.shape\n",[152,100672,100673],{"class":281,"line":367},[152,100674,100675],{"class":866},"#结果：（3，2，1，6）\n",[152,100677,100678],{"class":281,"line":381},[152,100679,100680],{"class":866},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[152,100682,100683,100686,100688,100690,100692,100694,100696,100698,100700],{"class":281,"line":386},[152,100684,100685],{"class":483},"np.transpose(aaaa,(",[152,100687,2026],{"class":293},[152,100689,2186],{"class":483},[152,100691,1894],{"class":293},[152,100693,2186],{"class":483},[152,100695,2000],{"class":293},[152,100697,2186],{"class":483},[152,100699,1888],{"class":293},[152,100701,100628],{"class":483},[152,100703,100704],{"class":281,"line":932},[152,100705,100706],{"class":866},"#结果：(2,1,3,6)\n",[1736,100708,100709],{},"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":275,"searchDepth":303,"depth":303,"links":100711},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100436,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100718,"title":100719,"body":100720,"description":24991,"extension":1744,"meta":101454,"navigation":306,"path":101455,"seo":101456,"stem":101457,"__hash__":101458},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100721,"toc":101452},[100722,100725,100728,100731,100734,100737,100740,100743,100746,100855,100858,100861,101449],[10,100723,100719],{"id":100724},"_8数组分割",[19,100726,100727],{},"split分割",[19,100729,100730],{},"numpy.split(ary,indics_or_sections,axis)",[19,100732,100733],{},"解释：",[19,100735,100736],{},"ary:被分割的数组",[19,100738,100739],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,100741,100742],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,100744,100745],{},"①一维数组的分割",[270,100747,100749],{"className":31715,"code":100748,"language":31717,"meta":275,"style":275},"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",[277,100750,100751,100767,100772,100781,100785,100790,100798,100802,100807,100812,100825,100829,100834,100846,100850],{"__ignoreMap":275},[152,100752,100753,100755,100757,100759,100761,100763,100765],{"class":281,"line":282},[152,100754,69],{"class":483},[152,100756,1864],{"class":476},[152,100758,94339],{"class":483},[152,100760,2026],{"class":293},[152,100762,2186],{"class":483},[152,100764,2228],{"class":293},[152,100766,1825],{"class":483},[152,100768,100769],{"class":281,"line":303},[152,100770,100771],{"class":866},"#如果传入整数，必须能够平分，否则会报错\n",[152,100773,100774,100777,100779],{"class":281,"line":310},[152,100775,100776],{"class":483},"np.split(a,",[152,100778,1894],{"class":293},[152,100780,1825],{"class":483},[152,100782,100783],{"class":281,"line":324},[152,100784,94901],{"class":866},[152,100786,100787],{"class":281,"line":329},[152,100788,100789],{"class":866},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[152,100791,100792,100794,100796],{"class":281,"line":343},[152,100793,100776],{"class":483},[152,100795,2101],{"class":293},[152,100797,1825],{"class":483},[152,100799,100800],{"class":281,"line":348},[152,100801,94901],{"class":866},[152,100803,100804],{"class":281,"line":362},[152,100805,100806],{"class":866},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[152,100808,100809],{"class":281,"line":367},[152,100810,100811],{"class":866},"#传入数组\n",[152,100813,100814,100817,100819,100821,100823],{"class":281,"line":381},[152,100815,100816],{"class":483},"np.split(a,[",[152,100818,1888],{"class":293},[152,100820,2186],{"class":483},[152,100822,2127],{"class":293},[152,100824,6299],{"class":483},[152,100826,100827],{"class":281,"line":386},[152,100828,94901],{"class":866},[152,100830,100831],{"class":281,"line":932},[152,100832,100833],{"class":866},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[152,100835,100836,100838,100840,100842,100844],{"class":281,"line":942},[152,100837,100816],{"class":483},[152,100839,2127],{"class":293},[152,100841,2186],{"class":483},[152,100843,2177],{"class":293},[152,100845,6299],{"class":483},[152,100847,100848],{"class":281,"line":949},[152,100849,94901],{"class":866},[152,100851,100852],{"class":281,"line":954},[152,100853,100854],{"class":866},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,100856,100857],{},"②二维数组的分割",[19,100859,100860],{},"使用split()",[270,100862,100864],{"className":31715,"code":100863,"language":31717,"meta":275,"style":275},"#二维数组分割\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",[277,100865,100866,100871,100895,100900,100909,100913,100917,100922,100927,100932,100937,100942,100947,100952,100956,100969,100973,100977,100981,100985,100989,100994,100999,101004,101008,101013,101029,101033,101037,101042,101047,101052,101057,101062,101067,101072,101077,101082,101087,101092,101097,101102,101107,101112,101117,101122,101127,101131,101135,101155,101159,101163,101168,101173,101178,101183,101188,101193,101198,101203,101208,101213,101218,101223,101228,101233,101238,101243,101248,101253,101257,101262,101271,101275,101279,101283,101287,101291,101295,101299,101303,101307,101316,101320,101324,101328,101332,101336,101340,101344,101348,101352,101356,101360,101364,101368,101372,101376,101380,101384,101388,101392,101396,101400,101413,101417,101421,101425,101429,101433,101437,101441,101445],{"__ignoreMap":275},[152,100867,100868],{"class":281,"line":282},[152,100869,100870],{"class":866},"#二维数组分割\n",[152,100872,100873,100875,100877,100879,100881,100883,100885,100887,100889,100891,100893],{"class":281,"line":303},[152,100874,94643],{"class":483},[152,100876,1864],{"class":476},[152,100878,94339],{"class":483},[152,100880,2026],{"class":293},[152,100882,2186],{"class":483},[152,100884,2133],{"class":293},[152,100886,94344],{"class":483},[152,100888,2152],{"class":293},[152,100890,2186],{"class":483},[152,100892,2152],{"class":293},[152,100894,1825],{"class":483},[152,100896,100897],{"class":281,"line":310},[152,100898,100899],{"class":866},"#默认axis=0  传入整数平均分,按行来的\n",[152,100901,100902,100905,100907],{"class":281,"line":324},[152,100903,100904],{"class":483},"np.split(aa,",[152,100906,1888],{"class":293},[152,100908,1825],{"class":483},[152,100910,100911],{"class":281,"line":329},[152,100912,97101],{"class":866},[152,100914,100915],{"class":281,"line":343},[152,100916,95265],{"class":289},[152,100918,100919],{"class":281,"line":348},[152,100920,100921],{"class":289},"[array([[ 1,  2,  3,  4,  5,  6],\n",[152,100923,100924],{"class":281,"line":362},[152,100925,100926],{"class":289},"        [ 7,  8,  9, 10, 11, 12]]),\n",[152,100928,100929],{"class":281,"line":367},[152,100930,100931],{"class":289}," array([[13, 14, 15, 16, 17, 18],\n",[152,100933,100934],{"class":281,"line":381},[152,100935,100936],{"class":289},"        [19, 20, 21, 22, 23, 24]]),\n",[152,100938,100939],{"class":281,"line":386},[152,100940,100941],{"class":289}," array([[25, 26, 27, 28, 29, 30],\n",[152,100943,100944],{"class":281,"line":932},[152,100945,100946],{"class":289},"        [31, 32, 33, 34, 35, 36]])]\n",[152,100948,100949],{"class":281,"line":942},[152,100950,100951],{"class":289}," '''\n",[152,100953,100954],{"class":281,"line":949},[152,100955,100811],{"class":866},[152,100957,100958,100961,100963,100965,100967],{"class":281,"line":954},[152,100959,100960],{"class":483},"np.split(aa,[",[152,100962,1894],{"class":293},[152,100964,2186],{"class":483},[152,100966,2127],{"class":293},[152,100968,6299],{"class":483},[152,100970,100971],{"class":281,"line":959},[152,100972,97101],{"class":866},[152,100974,100975],{"class":281,"line":970},[152,100976,95265],{"class":289},[152,100978,100979],{"class":281,"line":979},[152,100980,100921],{"class":289},[152,100982,100983],{"class":281,"line":989},[152,100984,100926],{"class":289},[152,100986,100987],{"class":281,"line":996},[152,100988,100931],{"class":289},[152,100990,100991],{"class":281,"line":1001},[152,100992,100993],{"class":289},"        [19, 20, 21, 22, 23, 24],\n",[152,100995,100996],{"class":281,"line":1006},[152,100997,100998],{"class":289},"        [25, 26, 27, 28, 29, 30]]),\n",[152,101000,101001],{"class":281,"line":1018},[152,101002,101003],{"class":289}," array([[31, 32, 33, 34, 35, 36]])]\n",[152,101005,101006],{"class":281,"line":1027},[152,101007,95265],{"class":289},[152,101009,101010],{"class":281,"line":1037},[152,101011,101012],{"class":866},"#axis=1 按照列来分\n",[152,101014,101015,101017,101019,101021,101023,101025,101027],{"class":281,"line":1044},[152,101016,100904],{"class":483},[152,101018,1888],{"class":293},[152,101020,2186],{"class":483},[152,101022,48851],{"class":6858},[152,101024,1864],{"class":476},[152,101026,2026],{"class":293},[152,101028,1825],{"class":483},[152,101030,101031],{"class":281,"line":1049},[152,101032,97101],{"class":866},[152,101034,101035],{"class":281,"line":1054},[152,101036,95265],{"class":289},[152,101038,101039],{"class":281,"line":1065},[152,101040,101041],{"class":289},"[array([[ 1,  2],\n",[152,101043,101044],{"class":281,"line":1074},[152,101045,101046],{"class":289},"        [ 7,  8],\n",[152,101048,101049],{"class":281,"line":1084},[152,101050,101051],{"class":289},"        [13, 14],\n",[152,101053,101054],{"class":281,"line":1091},[152,101055,101056],{"class":289},"        [19, 20],\n",[152,101058,101059],{"class":281,"line":1096},[152,101060,101061],{"class":289},"        [25, 26],\n",[152,101063,101064],{"class":281,"line":1101},[152,101065,101066],{"class":289},"        [31, 32]]),\n",[152,101068,101069],{"class":281,"line":1112},[152,101070,101071],{"class":289}," array([[ 3,  4],\n",[152,101073,101074],{"class":281,"line":1121},[152,101075,101076],{"class":289},"        [ 9, 10],\n",[152,101078,101079],{"class":281,"line":1131},[152,101080,101081],{"class":289},"        [15, 16],\n",[152,101083,101084],{"class":281,"line":1138},[152,101085,101086],{"class":289},"        [21, 22],\n",[152,101088,101089],{"class":281,"line":1143},[152,101090,101091],{"class":289},"        [27, 28],\n",[152,101093,101094],{"class":281,"line":1148},[152,101095,101096],{"class":289},"        [33, 34]]),\n",[152,101098,101099],{"class":281,"line":1159},[152,101100,101101],{"class":289}," array([[ 5,  6],\n",[152,101103,101104],{"class":281,"line":1168},[152,101105,101106],{"class":289},"        [11, 12],\n",[152,101108,101109],{"class":281,"line":1178},[152,101110,101111],{"class":289},"        [17, 18],\n",[152,101113,101114],{"class":281,"line":1185},[152,101115,101116],{"class":289},"        [23, 24],\n",[152,101118,101119],{"class":281,"line":1190},[152,101120,101121],{"class":289},"        [29, 30],\n",[152,101123,101124],{"class":281,"line":1195},[152,101125,101126],{"class":289},"        [35, 36]])]\n",[152,101128,101129],{"class":281,"line":1206},[152,101130,100951],{"class":289},[152,101132,101133],{"class":281,"line":1215},[152,101134,100811],{"class":866},[152,101136,101137,101139,101141,101143,101145,101147,101149,101151,101153],{"class":281,"line":1225},[152,101138,100960],{"class":483},[152,101140,2026],{"class":293},[152,101142,2186],{"class":483},[152,101144,1894],{"class":293},[152,101146,42946],{"class":483},[152,101148,48851],{"class":6858},[152,101150,1864],{"class":476},[152,101152,2026],{"class":293},[152,101154,1825],{"class":483},[152,101156,101157],{"class":281,"line":1232},[152,101158,94901],{"class":866},[152,101160,101161],{"class":281,"line":1237},[152,101162,95265],{"class":289},[152,101164,101165],{"class":281,"line":1242},[152,101166,101167],{"class":289},"[array([[ 1],\n",[152,101169,101170],{"class":281,"line":1253},[152,101171,101172],{"class":289},"        [ 7],\n",[152,101174,101175],{"class":281,"line":1262},[152,101176,101177],{"class":289},"        [13],\n",[152,101179,101180],{"class":281,"line":1272},[152,101181,101182],{"class":289},"        [19],\n",[152,101184,101185],{"class":281,"line":1279},[152,101186,101187],{"class":289},"        [25],\n",[152,101189,101190],{"class":281,"line":1284},[152,101191,101192],{"class":289},"        [31]]),\n",[152,101194,101195],{"class":281,"line":1289},[152,101196,101197],{"class":289}," array([[ 2],\n",[152,101199,101200],{"class":281,"line":1301},[152,101201,101202],{"class":289},"        [ 8],\n",[152,101204,101205],{"class":281,"line":1310},[152,101206,101207],{"class":289},"        [14],\n",[152,101209,101210],{"class":281,"line":1320},[152,101211,101212],{"class":289},"        [20],\n",[152,101214,101215],{"class":281,"line":1327},[152,101216,101217],{"class":289},"        [26],\n",[152,101219,101220],{"class":281,"line":11528},[152,101221,101222],{"class":289},"        [32]]),\n",[152,101224,101225],{"class":281,"line":11536},[152,101226,101227],{"class":289}," array([[ 3,  4,  5,  6],\n",[152,101229,101230],{"class":281,"line":11541},[152,101231,101232],{"class":289},"        [ 9, 10, 11, 12],\n",[152,101234,101235],{"class":281,"line":18219},[152,101236,101237],{"class":289},"        [15, 16, 17, 18],\n",[152,101239,101240],{"class":281,"line":18225},[152,101241,101242],{"class":289},"        [21, 22, 23, 24],\n",[152,101244,101245],{"class":281,"line":18248},[152,101246,101247],{"class":289},"        [27, 28, 29, 30],\n",[152,101249,101250],{"class":281,"line":18254},[152,101251,101252],{"class":289},"        [33, 34, 35, 36]])]\n",[152,101254,101255],{"class":281,"line":18277},[152,101256,95265],{"class":289},[152,101258,101259],{"class":281,"line":18291},[152,101260,101261],{"class":866},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[152,101263,101264,101267,101269],{"class":281,"line":18311},[152,101265,101266],{"class":483},"np.vsplit(aa,",[152,101268,1888],{"class":293},[152,101270,1825],{"class":483},[152,101272,101273],{"class":281,"line":18317},[152,101274,94901],{"class":866},[152,101276,101277],{"class":281,"line":18328},[152,101278,95265],{"class":289},[152,101280,101281],{"class":281,"line":18351},[152,101282,100921],{"class":289},[152,101284,101285],{"class":281,"line":18373},[152,101286,100926],{"class":289},[152,101288,101289],{"class":281,"line":18378},[152,101290,100931],{"class":289},[152,101292,101293],{"class":281,"line":18384},[152,101294,100936],{"class":289},[152,101296,101297],{"class":281,"line":18398},[152,101298,100941],{"class":289},[152,101300,101301],{"class":281,"line":18411},[152,101302,100946],{"class":289},[152,101304,101305],{"class":281,"line":18416},[152,101306,95265],{"class":289},[152,101308,101309,101312,101314],{"class":281,"line":18430},[152,101310,101311],{"class":483},"np.hsplit(aa,",[152,101313,1888],{"class":293},[152,101315,1825],{"class":483},[152,101317,101318],{"class":281,"line":18435},[152,101319,94901],{"class":866},[152,101321,101322],{"class":281,"line":18441},[152,101323,95265],{"class":289},[152,101325,101326],{"class":281,"line":18446},[152,101327,101041],{"class":289},[152,101329,101330],{"class":281,"line":18460},[152,101331,101046],{"class":289},[152,101333,101334],{"class":281,"line":18465},[152,101335,101051],{"class":289},[152,101337,101338],{"class":281,"line":18470},[152,101339,101056],{"class":289},[152,101341,101342],{"class":281,"line":18484},[152,101343,101061],{"class":289},[152,101345,101346],{"class":281,"line":18496},[152,101347,101066],{"class":289},[152,101349,101350],{"class":281,"line":18501},[152,101351,101071],{"class":289},[152,101353,101354],{"class":281,"line":18514},[152,101355,101076],{"class":289},[152,101357,101358],{"class":281,"line":18519},[152,101359,101081],{"class":289},[152,101361,101362],{"class":281,"line":18524},[152,101363,101086],{"class":289},[152,101365,101366],{"class":281,"line":18529},[152,101367,101091],{"class":289},[152,101369,101370],{"class":281,"line":18542},[152,101371,101096],{"class":289},[152,101373,101374],{"class":281,"line":18547},[152,101375,101101],{"class":289},[152,101377,101378],{"class":281,"line":33970},[152,101379,101106],{"class":289},[152,101381,101382],{"class":281,"line":33976},[152,101383,101111],{"class":289},[152,101385,101386],{"class":281,"line":33982},[152,101387,101116],{"class":289},[152,101389,101390],{"class":281,"line":33988},[152,101391,101121],{"class":289},[152,101393,101394],{"class":281,"line":33994},[152,101395,101126],{"class":289},[152,101397,101398],{"class":281,"line":34005},[152,101399,95265],{"class":289},[152,101401,101402,101405,101407,101409,101411],{"class":281,"line":34011},[152,101403,101404],{"class":483},"np.vsplit(aa,[",[152,101406,1894],{"class":293},[152,101408,2186],{"class":483},[152,101410,2127],{"class":293},[152,101412,6299],{"class":483},[152,101414,101415],{"class":281,"line":34031},[152,101416,94901],{"class":866},[152,101418,101419],{"class":281,"line":34037},[152,101420,95265],{"class":289},[152,101422,101423],{"class":281,"line":34048},[152,101424,100921],{"class":289},[152,101426,101427],{"class":281,"line":34054},[152,101428,100926],{"class":289},[152,101430,101431],{"class":281,"line":34060},[152,101432,100931],{"class":289},[152,101434,101435],{"class":281,"line":34066},[152,101436,100993],{"class":289},[152,101438,101439],{"class":281,"line":34072},[152,101440,100998],{"class":289},[152,101442,101443],{"class":281,"line":34078},[152,101444,101003],{"class":289},[152,101446,101447],{"class":281,"line":34084},[152,101448,100951],{"class":289},[1736,101450,101451],{},"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":275,"searchDepth":303,"depth":303,"links":101453},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100719,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101460,"title":101461,"body":101462,"description":24991,"extension":1744,"meta":101956,"navigation":306,"path":101957,"seo":101958,"stem":101959,"__hash__":101960},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101463,"toc":101947},[101464,101467,101470,101495,101499,101558,101610,101614,101616,101652,101706,101708,101746,101817,101821,101826,101830,101833,101866,101869,101873,101876,101879,101882,101885,101890,101894,101897,101900,101903,101906,101911,101915,101920,101923,101944],[10,101465,101461],{"id":101466},"_9数学函数",[19,101468,101469],{},"补充回顾：python的列表推导式",[270,101471,101473],{"className":31715,"code":101472,"language":31717,"meta":275,"style":275},"[1\u002Fi for i in a]\n",[277,101474,101475],{"__ignoreMap":275},[152,101476,101477,101479,101481,101483,101486,101488,101490,101492],{"class":281,"line":282},[152,101478,2697],{"class":483},[152,101480,2026],{"class":293},[152,101482,2392],{"class":476},[152,101484,101485],{"class":483},"i ",[152,101487,4668],{"class":476},[152,101489,11070],{"class":483},[152,101491,27653],{"class":476},[152,101493,101494],{"class":483}," a]\n",[1760,101496,101498],{"id":101497},"_91-求倒数","9.1 求倒数",[270,101500,101502],{"className":31715,"code":101501,"language":31717,"meta":275,"style":275},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[277,101503,101504,101509,101537,101549],{"__ignoreMap":275},[152,101505,101506],{"class":281,"line":282},[152,101507,101508],{"class":866},"#数组求倒数\n",[152,101510,101511,101513,101515,101517,101519,101521,101523,101525,101527,101529,101531,101533,101535],{"class":281,"line":303},[152,101512,69],{"class":483},[152,101514,1864],{"class":476},[152,101516,2697],{"class":483},[152,101518,2026],{"class":293},[152,101520,2186],{"class":483},[152,101522,1894],{"class":293},[152,101524,2186],{"class":483},[152,101526,1888],{"class":293},[152,101528,2186],{"class":483},[152,101530,2101],{"class":293},[152,101532,2186],{"class":483},[152,101534,2127],{"class":293},[152,101536,34583],{"class":483},[152,101538,101539,101541,101543,101546],{"class":281,"line":310},[152,101540,2071],{"class":483},[152,101542,1864],{"class":476},[152,101544,101545],{"class":483},"np.array(a)",[152,101547,101548],{"class":866},"#将列表转换为数组\n",[152,101550,101551,101553,101555],{"class":281,"line":324},[152,101552,2026],{"class":293},[152,101554,2392],{"class":476},[152,101556,101557],{"class":483},"b\n",[270,101559,101561],{"className":31715,"code":101560,"language":31717,"meta":275,"style":275},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[277,101562,101563,101591,101600,101605],{"__ignoreMap":275},[152,101564,101565,101567,101569,101571,101573,101575,101577,101579,101581,101583,101585,101587,101589],{"class":281,"line":282},[152,101566,69],{"class":483},[152,101568,1864],{"class":476},[152,101570,2697],{"class":483},[152,101572,2026],{"class":293},[152,101574,2186],{"class":483},[152,101576,1894],{"class":293},[152,101578,2186],{"class":483},[152,101580,1888],{"class":293},[152,101582,2186],{"class":483},[152,101584,2101],{"class":293},[152,101586,2186],{"class":483},[152,101588,2127],{"class":293},[152,101590,34583],{"class":483},[152,101592,101593,101595,101597],{"class":281,"line":303},[152,101594,2071],{"class":483},[152,101596,1864],{"class":476},[152,101598,101599],{"class":483},"np.array(a)\n",[152,101601,101602],{"class":281,"line":310},[152,101603,101604],{"class":866},"#调用numpy中的函数reciprocal()\n",[152,101606,101607],{"class":281,"line":324},[152,101608,101609],{"class":483},"np.reciprocal(b)\n",[1760,101611,101613],{"id":101612},"_92-求平方","9.2 求平方",[19,101615,95867],{},[270,101617,101619],{"className":31715,"code":101618,"language":31717,"meta":275,"style":275},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[277,101620,101621,101626,101631,101647],{"__ignoreMap":275},[152,101622,101623],{"class":281,"line":282},[152,101624,101625],{"class":866},"#square()，求平方\n",[152,101627,101628],{"class":281,"line":303},[152,101629,101630],{"class":866},"#一维数组\n",[152,101632,101633,101635,101637,101639,101641,101643,101645],{"class":281,"line":310},[152,101634,69],{"class":483},[152,101636,1864],{"class":476},[152,101638,94339],{"class":483},[152,101640,2026],{"class":293},[152,101642,2186],{"class":483},[152,101644,2254],{"class":293},[152,101646,1825],{"class":483},[152,101648,101649],{"class":281,"line":324},[152,101650,101651],{"class":483},"np.square(a)\n",[270,101653,101655],{"className":31715,"code":101654,"language":31717,"meta":275,"style":275},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[277,101656,101657,101662,101667,101688],{"__ignoreMap":275},[152,101658,101659],{"class":281,"line":282},[152,101660,101661],{"class":866},"#或者通过循环遍历的形式来计算\n",[152,101663,101664],{"class":281,"line":303},[152,101665,101666],{"class":866},"#这是一个列表\n",[152,101668,101669,101672,101674,101676,101678,101680,101682,101685],{"class":281,"line":310},[152,101670,101671],{"class":483},"[i",[152,101673,2263],{"class":476},[152,101675,101485],{"class":483},[152,101677,4668],{"class":476},[152,101679,11070],{"class":483},[152,101681,27653],{"class":476},[152,101683,101684],{"class":483}," a]",[152,101686,101687],{"class":866},"#这个求完之后在数列当中\n",[152,101689,101690,101693,101695,101697,101699,101701,101703],{"class":281,"line":324},[152,101691,101692],{"class":483},"np.array([i",[152,101694,2263],{"class":476},[152,101696,101485],{"class":483},[152,101698,4668],{"class":476},[152,101700,11070],{"class":483},[152,101702,27653],{"class":476},[152,101704,101705],{"class":483}," a])\n",[19,101707,94628],{},[270,101709,101711],{"className":31715,"code":101710,"language":31717,"meta":275,"style":275},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[277,101712,101713,101717,101741],{"__ignoreMap":275},[152,101714,101715],{"class":281,"line":282},[152,101716,94638],{"class":866},[152,101718,101719,101721,101723,101725,101727,101729,101731,101733,101735,101737,101739],{"class":281,"line":303},[152,101720,94643],{"class":483},[152,101722,1864],{"class":476},[152,101724,94339],{"class":483},[152,101726,2026],{"class":293},[152,101728,2186],{"class":483},[152,101730,2331],{"class":293},[152,101732,94344],{"class":483},[152,101734,2101],{"class":293},[152,101736,2186],{"class":483},[152,101738,1888],{"class":293},[152,101740,1825],{"class":483},[152,101742,101743],{"class":281,"line":310},[152,101744,101745],{"class":483},"np.square(aa)\n",[270,101747,101749],{"className":31715,"code":101748,"language":31717,"meta":275,"style":275},"#传统的方式\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",[277,101750,101751,101756,101765,101781,101797,101812],{"__ignoreMap":275},[152,101752,101753],{"class":281,"line":282},[152,101754,101755],{"class":866},"#传统的方式\n",[152,101757,101758,101760,101762],{"class":281,"line":303},[152,101759,99524],{"class":483},[152,101761,1864],{"class":476},[152,101763,101764],{"class":483},"np.empty_like(aa)\n",[152,101766,101767,101769,101771,101773,101775,101777,101779],{"class":281,"line":310},[152,101768,4668],{"class":476},[152,101770,11070],{"class":483},[152,101772,27653],{"class":476},[152,101774,33780],{"class":293},[152,101776,1819],{"class":483},[152,101778,2101],{"class":293},[152,101780,32123],{"class":483},[152,101782,101783,101785,101787,101789,101791,101793,101795],{"class":281,"line":324},[152,101784,4844],{"class":476},[152,101786,11132],{"class":483},[152,101788,27653],{"class":476},[152,101790,33780],{"class":293},[152,101792,1819],{"class":483},[152,101794,1888],{"class":293},[152,101796,32123],{"class":483},[152,101798,101799,101802,101804,101807,101809],{"class":281,"line":329},[152,101800,101801],{"class":483},"        bb[i,j]",[152,101803,1864],{"class":476},[152,101805,101806],{"class":483},"aa[i,j]",[152,101808,2263],{"class":476},[152,101810,101811],{"class":483},"aa[i,j]\n",[152,101813,101814],{"class":281,"line":343},[152,101815,101816],{"class":483},"bb\n",[1760,101818,101820],{"id":101819},"_93-求各元素的符号","9.3 求各元素的符号",[19,101822,101823],{},[401,101824],{"alt":275,"src":101825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[1760,101827,101829],{"id":101828},"_94-modf函数","9.4 modf函数",[19,101831,101832],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[270,101834,101836],{"className":31715,"code":101835,"language":31717,"meta":275,"style":275},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[277,101837,101838,101861],{"__ignoreMap":275},[152,101839,101840,101842,101844,101846,101848,101850,101852,101854,101856,101859],{"class":281,"line":282},[152,101841,69],{"class":483},[152,101843,1864],{"class":476},[152,101845,94339],{"class":483},[152,101847,2340],{"class":476},[152,101849,2254],{"class":293},[152,101851,2186],{"class":483},[152,101853,2254],{"class":293},[152,101855,2186],{"class":483},[152,101857,101858],{"class":293},"0.3",[152,101860,1825],{"class":483},[152,101862,101863],{"class":281,"line":303},[152,101864,101865],{"class":483},"np.modf(a)\n",[19,101867,101868],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[1760,101870,101872],{"id":101871},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,101874,101875],{},"np.cell()",[19,101877,101878],{},"np.floor()",[19,101880,101881],{},"np.rint()",[19,101883,101884],{},"对各元素分别向上取整、向下取整、四舍五入",[19,101886,101887],{},[401,101888],{"alt":275,"src":101889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[1760,101891,101893],{"id":101892},"_96-around函数","9.6 around()函数",[19,101895,101896],{},"around()函数也可以实现对数的小数位数进行操作",[19,101898,101899],{},"其中的参数：",[19,101901,101902],{},"1.要传的数组",[19,101904,101905],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,101907,101908],{},[401,101909],{"alt":275,"src":101910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[1760,101912,101914],{"id":101913},"_97-三角函数","9.7 三角函数",[19,101916,101917],{},[401,101918],{"alt":275,"src":101919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,101921,101922],{},"引入图像模块非常重要",[270,101924,101926],{"className":31715,"code":101925,"language":31717,"meta":275,"style":275},"from matplotlib import pyplot as plt\n",[277,101927,101928],{"__ignoreMap":275},[152,101929,101930,101932,101935,101937,101940,101942],{"class":281,"line":282},[152,101931,32074],{"class":476},[152,101933,101934],{"class":483}," matplotlib ",[152,101936,31729],{"class":476},[152,101938,101939],{"class":483}," pyplot ",[152,101941,32720],{"class":476},[152,101943,32774],{"class":483},[1736,101945,101946],{},"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":275,"searchDepth":303,"depth":303,"links":101948},[101949,101950,101951,101952,101953,101954,101955],{"id":101497,"depth":303,"text":101498},{"id":101612,"depth":303,"text":101613},{"id":101819,"depth":303,"text":101820},{"id":101828,"depth":303,"text":101829},{"id":101871,"depth":303,"text":101872},{"id":101892,"depth":303,"text":101893},{"id":101913,"depth":303,"text":101914},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101461,"description":24991},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101962,"title":101963,"body":101964,"description":24991,"extension":1744,"meta":101968,"navigation":306,"path":101969,"seo":101970,"stem":101971,"__hash__":101972},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101965,"toc":101966},[],{"title":275,"searchDepth":303,"depth":303,"links":101967},[],{"category":51757},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101963,"description":24991},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101974,"title":101975,"body":101976,"description":275,"extension":1744,"meta":103984,"navigation":306,"path":103985,"seo":103986,"stem":103987,"__hash__":103988},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101977,"toc":103960},[101978,101981,101985,101988,101991,101997,102000,102023,102026,102060,102063,102104,102108,102111,102204,102207,102251,102254,102271,102274,102288,102291,102294,102339,102342,102379,102383,102386,102392,102397,102417,102421,102424,102490,102493,102511,102515,102518,102547,102557,102563,102567,102570,102576,102587,102591,102594,102624,102627,102907,102910,102913,102924,102927,102930,102952,102959,102962,102980,102983,102986,103000,103008,103011,103037,103043,103046,103049,103059,103071,103091,103100,103120,103130,103154,103167,103181,103186,103227,103244,103269,103281,103301,103307,103352,103371,103388,103401,103417,103424,103436,103445,103480,103501,103526,103539,103563,103578,103603,103606,103627,103636,103639,103650,103654,103657,103663,103675,103682,103686,103689,103701,103704,103718,103721,103731,103741,103744,103784,103787,103791,103797,103800,103814,103818,103821,103854,103858,103861,103884,103892,103895,103901,103907,103910,103913,103941,103945,103948,103954,103957],[10,101979,101975],{"id":101980},"_1环境安装与第一个-mujoco-程序",[1760,101982,101984],{"id":101983},"_1目标说明","1.目标说明",[19,101986,101987],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101989,101990],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[270,101992,101995],{"className":101993,"code":101994,"language":6829,"meta":275},[6827],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[277,101996,101994],{"__ignoreMap":275},[19,101998,101999],{},"需要掌握:",[416,102001,102002,102005,102008,102013,102018],{},[419,102003,102004],{},"Fedora 44 下 MuJoCo 的系统依赖",[419,102006,102007],{},"Python 虚拟环境创建",[419,102009,102010],{},[277,102011,102012],{},"mujoco.MjModel",[419,102014,102015],{},[277,102016,102017],{},"mujoco.MjData",[419,102019,102020],{},[277,102021,102022],{},"mujoco.mj_step(model, data)",[19,102024,102025],{},"MuJoCo 中最重要的两个对象:",[23,102027,102028,102038],{},[26,102029,102030],{},[29,102031,102032,102035],{},[32,102033,102034],{"align":34},"对象",[32,102036,102037],{"align":34},"含义",[43,102039,102040,102050],{},[29,102041,102042,102047],{},[48,102043,102044],{"align":34},[277,102045,102046],{},"MjModel",[48,102048,102049],{"align":34},"模型结构，来自 XML，基本不随时间变化",[29,102051,102052,102057],{},[48,102053,102054],{"align":34},[277,102055,102056],{},"MjData",[48,102058,102059],{"align":34},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102061,102062],{},"可以先用一个类比理解：",[23,102064,102065,102075],{},[26,102066,102067],{},[29,102068,102069,102072],{},[32,102070,102071],{"align":34},"类比",[32,102073,102074],{"align":34},"MuJoCo 对象",[43,102076,102077,102086,102095],{},[29,102078,102079,102082],{},[48,102080,102081],{"align":34},"游戏地图和角色配置",[48,102083,102084],{"align":34},[277,102085,102046],{},[29,102087,102088,102091],{},[48,102089,102090],{"align":34},"游戏运行到当前帧的状态",[48,102092,102093],{"align":34},[277,102094,102056],{},[29,102096,102097,102100],{},[48,102098,102099],{"align":34},"前进一帧",[48,102101,102102],{"align":34},[277,102103,102022],{},[1760,102105,102107],{"id":102106},"_2环境与依赖安装","2.环境与依赖安装",[19,102109,102110],{},"Fedora 44 系统依赖:",[270,102112,102114],{"className":272,"code":102113,"language":274,"meta":275,"style":275},"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",[277,102115,102116,102128,102141,102154,102164,102174,102193],{"__ignoreMap":275},[152,102117,102118,102120,102122,102124,102126],{"class":281,"line":282},[152,102119,26188],{"class":285},[152,102121,27921],{"class":289},[152,102123,25446],{"class":289},[152,102125,28005],{"class":293},[152,102127,878],{"class":293},[152,102129,102130,102133,102136,102139],{"class":281,"line":303},[152,102131,102132],{"class":289},"  python3",[152,102134,102135],{"class":289}," python3-pip",[152,102137,102138],{"class":289}," python3-virtualenv",[152,102140,878],{"class":293},[152,102142,102143,102146,102149,102152],{"class":281,"line":310},[152,102144,102145],{"class":289},"  mesa-libGL",[152,102147,102148],{"class":289}," mesa-libGLU",[152,102150,102151],{"class":289}," mesa-dri-drivers",[152,102153,878],{"class":293},[152,102155,102156,102159,102162],{"class":281,"line":324},[152,102157,102158],{"class":289},"  libglvnd-glx",[152,102160,102161],{"class":289}," libglvnd-opengl",[152,102163,878],{"class":293},[152,102165,102166,102169,102172],{"class":281,"line":329},[152,102167,102168],{"class":289},"  glfw",[152,102170,102171],{"class":289}," glfw-devel",[152,102173,878],{"class":293},[152,102175,102176,102179,102182,102185,102188,102191],{"class":281,"line":343},[152,102177,102178],{"class":289},"  libX11",[152,102180,102181],{"class":289}," libXcursor",[152,102183,102184],{"class":289}," libXi",[152,102186,102187],{"class":289}," libXinerama",[152,102189,102190],{"class":289}," libXrandr",[152,102192,878],{"class":293},[152,102194,102195,102198,102201],{"class":281,"line":348},[152,102196,102197],{"class":289},"  gcc",[152,102199,102200],{"class":289}," gcc-c++",[152,102202,102203],{"class":289}," make\n",[19,102205,102206],{},"创建 Python 环境:",[270,102208,102210],{"className":272,"code":102209,"language":274,"meta":275,"style":275},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[277,102211,102212,102226,102234],{"__ignoreMap":275},[152,102213,102214,102217,102220,102223],{"class":281,"line":282},[152,102215,102216],{"class":285},"python3",[152,102218,102219],{"class":293}," -m",[152,102221,102222],{"class":289}," venv",[152,102224,102225],{"class":289}," .venv\n",[152,102227,102228,102231],{"class":281,"line":303},[152,102229,102230],{"class":293},"source",[152,102232,102233],{"class":289}," .venv\u002Fbin\u002Factivate\n",[152,102235,102236,102238,102240,102243,102245,102248],{"class":281,"line":310},[152,102237,31717],{"class":285},[152,102239,102219],{"class":293},[152,102241,102242],{"class":289}," pip",[152,102244,25446],{"class":289},[152,102246,102247],{"class":293}," --upgrade",[152,102249,102250],{"class":289}," pip\n",[19,102252,102253],{},"pip 安装:",[270,102255,102257],{"className":272,"code":102256,"language":274,"meta":275,"style":275},"pip install \"mujoco>=2.3\" numpy\n",[277,102258,102259],{"__ignoreMap":275},[152,102260,102261,102263,102265,102268],{"class":281,"line":282},[152,102262,25443],{"class":285},[152,102264,25446],{"class":289},[152,102266,102267],{"class":289}," \"mujoco>=2.3\"",[152,102269,102270],{"class":289}," numpy\n",[19,102272,102273],{},"安装完成后，先做最小检查：",[270,102275,102277],{"className":272,"code":102276,"language":274,"meta":275,"style":275},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[277,102278,102279],{"__ignoreMap":275},[152,102280,102281,102283,102285],{"class":281,"line":282},[152,102282,31717],{"class":285},[152,102284,31695],{"class":293},[152,102286,102287],{"class":289}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102289,102290],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102292,102293],{},"conda 安装:",[270,102295,102297],{"className":272,"code":102296,"language":274,"meta":275,"style":275},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[277,102298,102299,102319,102329],{"__ignoreMap":275},[152,102300,102301,102303,102305,102307,102310,102313,102316],{"class":281,"line":282},[152,102302,31667],{"class":285},[152,102304,757],{"class":289},[152,102306,26726],{"class":293},[152,102308,102309],{"class":289}," mujoco-study",[152,102311,102312],{"class":289}," python=",[152,102314,102315],{"class":293},"3.10",[152,102317,102318],{"class":293}," -y\n",[152,102320,102321,102323,102326],{"class":281,"line":303},[152,102322,31667],{"class":285},[152,102324,102325],{"class":289}," activate",[152,102327,102328],{"class":289}," mujoco-study\n",[152,102330,102331,102333,102335,102337],{"class":281,"line":310},[152,102332,25443],{"class":285},[152,102334,25446],{"class":289},[152,102336,102267],{"class":289},[152,102338,102270],{"class":289},[19,102340,102341],{},"版本冲突说明:",[416,102343,102344,102350,102360,102369],{},[419,102345,102346,102347,29984],{},"不要安装 ",[277,102348,102349],{},"mujoco-py",[419,102351,102352,102353,102355,102356,102359],{},"如果旧项目里同时安装了 ",[277,102354,102349],{}," 和 ",[277,102357,102358],{},"mujoco","，建议新建干净虚拟环境。",[419,102361,102362,102365,102366,29984],{},[277,102363,102364],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[277,102367,102368],{},"~\u002F.mujoco\u002Fmujoco210",[419,102370,102371,102372,83876,102375,102378],{},"离屏渲染可能涉及 OpenGL 后端，",[277,102373,102374],{},"MUJOCO_GL=egl",[277,102376,102377],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[1760,102380,102382],{"id":102381},"_3核心概念解释","3.核心概念解释",[19,102384,102385],{},"MuJoCo 的基本执行流程:",[270,102387,102390],{"className":102388,"code":102389,"language":6829,"meta":275},[6827],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[277,102391,102389],{"__ignoreMap":275},[19,102393,102394,102396],{},[277,102395,102046],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102398,102399,102401,102402,2021,102405,2021,102408,2021,102411,2021,102414,29984],{},[277,102400,102056],{}," 存放仿真运行时状态，例如 ",[277,102403,102404],{},"data.time",[277,102406,102407],{},"data.qpos",[277,102409,102410],{},"data.qvel",[277,102412,102413],{},"data.ctrl",[277,102415,102416],{},"data.xpos",[14,102418,102420],{"id":102419},"xml-是什么","XML 是什么",[19,102422,102423],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[270,102425,102427],{"className":54404,"code":102426,"language":54406,"meta":275,"style":275},"\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",[277,102428,102429,102451,102482],{"__ignoreMap":275},[152,102430,102431,102433,102435,102437,102439,102441,102444,102446,102449],{"class":281,"line":282},[152,102432,844],{"class":483},[152,102434,53137],{"class":52637},[152,102436,16535],{"class":285},[152,102438,1864],{"class":483},[152,102440,54828],{"class":289},[152,102442,102443],{"class":285}," pos",[152,102445,1864],{"class":483},[152,102447,102448],{"class":289},"\"0 0 1\"",[152,102450,52644],{"class":483},[152,102452,102453,102455,102458,102460,102462,102465,102467,102469,102471,102474,102476,102479],{"class":281,"line":303},[152,102454,53481],{"class":483},[152,102456,102457],{"class":52637},"geom",[152,102459,16535],{"class":285},[152,102461,1864],{"class":483},[152,102463,102464],{"class":289},"\"box_geom\"",[152,102466,55161],{"class":285},[152,102468,1864],{"class":483},[152,102470,54828],{"class":289},[152,102472,102473],{"class":285}," size",[152,102475,1864],{"class":483},[152,102477,102478],{"class":289},"\"0.1 0.1 0.1\"",[152,102480,102481],{"class":483},"\u002F>\n",[152,102483,102484,102486,102488],{"class":281,"line":310},[152,102485,53122],{"class":483},[152,102487,53137],{"class":52637},[152,102489,52644],{"class":483},[19,102491,102492],{},"这段意思是：",[416,102494,102495,102501,102508],{},[419,102496,102497,102498,102500],{},"创建一个叫 ",[277,102499,55051],{}," 的刚体。",[419,102502,102503,102504,102507],{},"它初始放在 ",[277,102505,102506],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[419,102509,102510],{},"它里面有一个盒子形状的几何体。",[14,102512,102514],{"id":102513},"timestep-是什么","timestep 是什么",[19,102516,102517],{},"XML 里的：",[270,102519,102521],{"className":54404,"code":102520,"language":54406,"meta":275,"style":275},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[277,102522,102523],{"__ignoreMap":275},[152,102524,102525,102527,102529,102532,102534,102537,102540,102542,102545],{"class":281,"line":282},[152,102526,844],{"class":483},[152,102528,70503],{"class":52637},[152,102530,102531],{"class":285}," timestep",[152,102533,1864],{"class":483},[152,102535,102536],{"class":289},"\"0.01\"",[152,102538,102539],{"class":285}," gravity",[152,102541,1864],{"class":483},[152,102543,102544],{"class":289},"\"0 0 -9.81\"",[152,102546,102481],{"class":483},[19,102548,102549,102550,102553,102554,102556],{},"表示每调用一次 ",[277,102551,102552],{},"mj_step","，仿真时间前进 ",[277,102555,40323],{}," 秒。循环 100 次，大约就是 1 秒：",[270,102558,102561],{"className":102559,"code":102560,"language":6829,"meta":275},[6827],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[277,102562,102560],{"__ignoreMap":275},[14,102564,102566],{"id":102565},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,102568,102569],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[270,102571,102574],{"className":102572,"code":102573,"language":6829,"meta":275},[6827],"x y z qw qx qy qz\n",[277,102575,102573],{"__ignoreMap":275},[19,102577,102578,102579,102582,102583,102586],{},"表示一个自由刚体的位置和姿态。其中 ",[277,102580,102581],{},"x y z"," 是位置，",[277,102584,102585],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[1760,102588,102590],{"id":102589},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,102592,102593],{},"新建文件:",[270,102595,102597],{"className":272,"code":102596,"language":274,"meta":275,"style":275},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[277,102598,102599,102609,102616],{"__ignoreMap":275},[152,102600,102601,102604,102606],{"class":281,"line":282},[152,102602,102603],{"class":285},"mkdir",[152,102605,799],{"class":293},[152,102607,102608],{"class":289}," mujoco_tutorial\n",[152,102610,102611,102614],{"class":281,"line":303},[152,102612,102613],{"class":293},"cd",[152,102615,102608],{"class":289},[152,102617,102618,102621],{"class":281,"line":310},[152,102619,102620],{"class":285},"touch",[152,102622,102623],{"class":289}," ch1_first_sim.py\n",[19,102625,102626],{},"写入:",[270,102628,102630],{"className":31715,"code":102629,"language":31717,"meta":275,"style":275},"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",[277,102631,102632,102639,102643,102647,102657,102662,102667,102671,102676,102681,102685,102690,102695,102700,102705,102710,102715,102719,102723,102727,102740,102754,102764,102768,102780,102792,102804,102816,102828,102832,102849,102854,102858,102869,102880,102884,102888,102902],{"__ignoreMap":275},[152,102633,102634,102636],{"class":281,"line":282},[152,102635,31729],{"class":476},[152,102637,102638],{"class":483}," mujoco\n",[152,102640,102641],{"class":281,"line":303},[152,102642,307],{"emptyLinePlaceholder":306},[152,102644,102645],{"class":281,"line":310},[152,102646,307],{"emptyLinePlaceholder":306},[152,102648,102649,102652,102654],{"class":281,"line":324},[152,102650,102651],{"class":293},"XML",[152,102653,15180],{"class":476},[152,102655,102656],{"class":289}," \"\"\"\n",[152,102658,102659],{"class":281,"line":329},[152,102660,102661],{"class":289},"\u003Cmujoco model=\"first_sim\">\n",[152,102663,102664],{"class":281,"line":343},[152,102665,102666],{"class":289},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[152,102668,102669],{"class":281,"line":348},[152,102670,307],{"emptyLinePlaceholder":306},[152,102672,102673],{"class":281,"line":362},[152,102674,102675],{"class":289},"  \u003Cworldbody>\n",[152,102677,102678],{"class":281,"line":367},[152,102679,102680],{"class":289},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[152,102682,102683],{"class":281,"line":381},[152,102684,307],{"emptyLinePlaceholder":306},[152,102686,102687],{"class":281,"line":386},[152,102688,102689],{"class":289},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[152,102691,102692],{"class":281,"line":932},[152,102693,102694],{"class":289},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[152,102696,102697],{"class":281,"line":942},[152,102698,102699],{"class":289},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[152,102701,102702],{"class":281,"line":949},[152,102703,102704],{"class":289},"    \u003C\u002Fbody>\n",[152,102706,102707],{"class":281,"line":954},[152,102708,102709],{"class":289},"  \u003C\u002Fworldbody>\n",[152,102711,102712],{"class":281,"line":959},[152,102713,102714],{"class":289},"\u003C\u002Fmujoco>\n",[152,102716,102717],{"class":281,"line":970},[152,102718,97035],{"class":289},[152,102720,102721],{"class":281,"line":979},[152,102722,307],{"emptyLinePlaceholder":306},[152,102724,102725],{"class":281,"line":989},[152,102726,307],{"emptyLinePlaceholder":306},[152,102728,102729,102731,102733,102736,102738],{"class":281,"line":996},[152,102730,33284],{"class":476},[152,102732,3624],{"class":285},[152,102734,102735],{"class":483},"() -> ",[152,102737,97023],{"class":293},[152,102739,5382],{"class":483},[152,102741,102742,102745,102747,102750,102752],{"class":281,"line":1001},[152,102743,102744],{"class":483},"    model ",[152,102746,1864],{"class":476},[152,102748,102749],{"class":483}," mujoco.MjModel.from_xml_string(",[152,102751,102651],{"class":293},[152,102753,1825],{"class":483},[152,102755,102756,102759,102761],{"class":281,"line":1006},[152,102757,102758],{"class":483},"    data ",[152,102760,1864],{"class":476},[152,102762,102763],{"class":483}," mujoco.MjData(model)\n",[152,102765,102766],{"class":281,"line":1018},[152,102767,307],{"emptyLinePlaceholder":306},[152,102769,102770,102772,102774,102777],{"class":281,"line":1027},[152,102771,32636],{"class":293},[152,102773,1819],{"class":483},[152,102775,102776],{"class":289},"\"nq:\"",[152,102778,102779],{"class":483},", model.nq)\n",[152,102781,102782,102784,102786,102789],{"class":281,"line":1037},[152,102783,32636],{"class":293},[152,102785,1819],{"class":483},[152,102787,102788],{"class":289},"\"nv:\"",[152,102790,102791],{"class":483},", model.nv)\n",[152,102793,102794,102796,102798,102801],{"class":281,"line":1044},[152,102795,32636],{"class":293},[152,102797,1819],{"class":483},[152,102799,102800],{"class":289},"\"nu:\"",[152,102802,102803],{"class":483},", model.nu)\n",[152,102805,102806,102808,102810,102813],{"class":281,"line":1049},[152,102807,32636],{"class":293},[152,102809,1819],{"class":483},[152,102811,102812],{"class":289},"\"initial time:\"",[152,102814,102815],{"class":483},", data.time)\n",[152,102817,102818,102820,102822,102825],{"class":281,"line":1054},[152,102819,32636],{"class":293},[152,102821,1819],{"class":483},[152,102823,102824],{"class":289},"\"initial qpos:\"",[152,102826,102827],{"class":483},", data.qpos.copy())\n",[152,102829,102830],{"class":281,"line":1065},[152,102831,307],{"emptyLinePlaceholder":306},[152,102833,102834,102836,102839,102841,102843,102845,102847],{"class":281,"line":1074},[152,102835,4844],{"class":476},[152,102837,102838],{"class":483}," _ ",[152,102840,27653],{"class":476},[152,102842,33780],{"class":293},[152,102844,1819],{"class":483},[152,102846,2119],{"class":293},[152,102848,32123],{"class":483},[152,102850,102851],{"class":281,"line":1084},[152,102852,102853],{"class":483},"        mujoco.mj_step(model, data)\n",[152,102855,102856],{"class":281,"line":1091},[152,102857,307],{"emptyLinePlaceholder":306},[152,102859,102860,102862,102864,102867],{"class":281,"line":1096},[152,102861,32636],{"class":293},[152,102863,1819],{"class":483},[152,102865,102866],{"class":289},"\"final time:\"",[152,102868,102815],{"class":483},[152,102870,102871,102873,102875,102878],{"class":281,"line":1101},[152,102872,32636],{"class":293},[152,102874,1819],{"class":483},[152,102876,102877],{"class":289},"\"final qpos:\"",[152,102879,102827],{"class":483},[152,102881,102882],{"class":281,"line":1112},[152,102883,307],{"emptyLinePlaceholder":306},[152,102885,102886],{"class":281,"line":1121},[152,102887,307],{"emptyLinePlaceholder":306},[152,102889,102890,102892,102894,102897,102900],{"class":281,"line":1131},[152,102891,3202],{"class":476},[152,102893,32557],{"class":293},[152,102895,102896],{"class":476}," ==",[152,102898,102899],{"class":289}," \"__main__\"",[152,102901,5382],{"class":483},[152,102903,102904],{"class":281,"line":1138},[152,102905,102906],{"class":483},"    main()\n",[14,102908,102909],{"id":102909},"代码逐段解释",[19,102911,102912],{},"导入库：",[270,102914,102916],{"className":31715,"code":102915,"language":31717,"meta":275,"style":275},"import mujoco\n",[277,102917,102918],{"__ignoreMap":275},[152,102919,102920,102922],{"class":281,"line":282},[152,102921,31729],{"class":476},[152,102923,102638],{"class":483},[19,102925,102926],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,102928,102929],{},"定义 XML：",[270,102931,102933],{"className":31715,"code":102932,"language":31717,"meta":275,"style":275},"XML = \"\"\"\n...\n\"\"\"\n",[277,102934,102935,102943,102948],{"__ignoreMap":275},[152,102936,102937,102939,102941],{"class":281,"line":282},[152,102938,102651],{"class":293},[152,102940,15180],{"class":476},[152,102942,102656],{"class":289},[152,102944,102945],{"class":281,"line":303},[152,102946,102947],{"class":289},"...\n",[152,102949,102950],{"class":281,"line":310},[152,102951,97035],{"class":289},[19,102953,102954,102955,102958],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[277,102956,102957],{},"freejoint"," 的方块。",[19,102960,102961],{},"编译模型：",[270,102963,102965],{"className":31715,"code":102964,"language":31717,"meta":275,"style":275},"model = mujoco.MjModel.from_xml_string(XML)\n",[277,102966,102967],{"__ignoreMap":275},[152,102968,102969,102972,102974,102976,102978],{"class":281,"line":282},[152,102970,102971],{"class":483},"model ",[152,102973,1864],{"class":476},[152,102975,102749],{"class":483},[152,102977,102651],{"class":293},[152,102979,1825],{"class":483},[19,102981,102982],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102984,102985],{},"创建数据：",[270,102987,102989],{"className":31715,"code":102988,"language":31717,"meta":275,"style":275},"data = mujoco.MjData(model)\n",[277,102990,102991],{"__ignoreMap":275},[152,102992,102993,102996,102998],{"class":281,"line":282},[152,102994,102995],{"class":483},"data ",[152,102997,1864],{"class":476},[152,102999,102763],{"class":483},[19,103001,103002,103004,103005,103007],{},[277,103003,34738],{}," 会保存仿真当前状态。刚创建时，时间是 ",[277,103006,2000],{},"，方块还在初始位置。",[19,103009,103010],{},"推进仿真：",[270,103012,103014],{"className":31715,"code":103013,"language":31717,"meta":275,"style":275},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[277,103015,103016,103032],{"__ignoreMap":275},[152,103017,103018,103020,103022,103024,103026,103028,103030],{"class":281,"line":282},[152,103019,4668],{"class":476},[152,103021,102838],{"class":483},[152,103023,27653],{"class":476},[152,103025,33780],{"class":293},[152,103027,1819],{"class":483},[152,103029,2119],{"class":293},[152,103031,32123],{"class":483},[152,103033,103034],{"class":281,"line":303},[152,103035,103036],{"class":483},"    mujoco.mj_step(model, data)\n",[19,103038,103039,103040,103042],{},"每次 ",[277,103041,102552],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[14,103044,103045],{"id":103045},"代码逐行细讲",[19,103047,103048],{},"下面把完整代码按新手视角拆开讲。",[270,103050,103051],{"className":31715,"code":102915,"language":31717,"meta":275,"style":275},[277,103052,103053],{"__ignoreMap":275},[152,103054,103055,103057],{"class":281,"line":282},[152,103056,31729],{"class":476},[152,103058,102638],{"class":483},[19,103060,103061,103063,103064,2021,103066,2021,103068,29984],{},[277,103062,31729],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[277,103065,102012],{},[277,103067,102017],{},[277,103069,103070],{},"mujoco.mj_step",[270,103072,103073],{"className":31715,"code":102932,"language":31717,"meta":275,"style":275},[277,103074,103075,103083,103087],{"__ignoreMap":275},[152,103076,103077,103079,103081],{"class":281,"line":282},[152,103078,102651],{"class":293},[152,103080,15180],{"class":476},[152,103082,102656],{"class":289},[152,103084,103085],{"class":281,"line":303},[152,103086,102947],{"class":289},[152,103088,103089],{"class":281,"line":310},[152,103090,97035],{"class":289},[19,103092,103093,103095,103096,103099],{},[277,103094,102651],{}," 是一个变量名。右边的三引号 ",[277,103097,103098],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[270,103101,103102],{"className":54404,"code":102661,"language":54406,"meta":275,"style":275},[277,103103,103104],{"__ignoreMap":275},[152,103105,103106,103108,103110,103113,103115,103118],{"class":281,"line":282},[152,103107,844],{"class":483},[152,103109,102358],{"class":52637},[152,103111,103112],{"class":285}," model",[152,103114,1864],{"class":483},[152,103116,103117],{"class":289},"\"first_sim\"",[152,103119,52644],{"class":483},[19,103121,103122,103123,103126,103127,29984],{},"这是 XML 的根标签。",[277,103124,103125],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[277,103128,103129],{},"first_sim",[270,103131,103132],{"className":54404,"code":102520,"language":54406,"meta":275,"style":275},[277,103133,103134],{"__ignoreMap":275},[152,103135,103136,103138,103140,103142,103144,103146,103148,103150,103152],{"class":281,"line":282},[152,103137,844],{"class":483},[152,103139,70503],{"class":52637},[152,103141,102531],{"class":285},[152,103143,1864],{"class":483},[152,103145,102536],{"class":289},[152,103147,102539],{"class":285},[152,103149,1864],{"class":483},[152,103151,102544],{"class":289},[152,103153,102481],{"class":483},[19,103155,103156,103158,103159,103162,103163,103166],{},[277,103157,70503],{}," 用来设置仿真参数。",[277,103160,103161],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[277,103164,103165],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[270,103168,103170],{"className":54404,"code":103169,"language":54406,"meta":275,"style":275},"\u003Cworldbody>\n",[277,103171,103172],{"__ignoreMap":275},[152,103173,103174,103176,103179],{"class":281,"line":282},[152,103175,844],{"class":483},[152,103177,103178],{"class":52637},"worldbody",[152,103180,52644],{"class":483},[19,103182,103183,103185],{},[277,103184,103178],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[270,103187,103189],{"className":54404,"code":103188,"language":54406,"meta":275,"style":275},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[277,103190,103191],{"__ignoreMap":275},[152,103192,103193,103195,103197,103199,103201,103204,103206,103208,103211,103213,103215,103218,103220,103222,103225],{"class":281,"line":282},[152,103194,844],{"class":483},[152,103196,102457],{"class":52637},[152,103198,16535],{"class":285},[152,103200,1864],{"class":483},[152,103202,103203],{"class":289},"\"floor\"",[152,103205,55161],{"class":285},[152,103207,1864],{"class":483},[152,103209,103210],{"class":289},"\"plane\"",[152,103212,102473],{"class":285},[152,103214,1864],{"class":483},[152,103216,103217],{"class":289},"\"2 2 0.1\"",[152,103219,80104],{"class":285},[152,103221,1864],{"class":483},[152,103223,103224],{"class":289},"\"0.8 0.8 0.8 1\"",[152,103226,102481],{"class":483},[19,103228,103229,103230,103232,103233,103236,103237,103240,103241,103243],{},"这行创建地面。",[277,103231,102457],{}," 是几何体。",[277,103234,103235],{},"name=\"floor\""," 是名字。",[277,103238,103239],{},"type=\"plane\""," 表示平面。",[277,103242,56447],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[270,103245,103247],{"className":54404,"code":103246,"language":54406,"meta":275,"style":275},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[277,103248,103249],{"__ignoreMap":275},[152,103250,103251,103253,103255,103257,103259,103261,103263,103265,103267],{"class":281,"line":282},[152,103252,844],{"class":483},[152,103254,53137],{"class":52637},[152,103256,16535],{"class":285},[152,103258,1864],{"class":483},[152,103260,54828],{"class":289},[152,103262,102443],{"class":285},[152,103264,1864],{"class":483},[152,103266,102448],{"class":289},[152,103268,52644],{"class":483},[19,103270,103271,103272,29984,103274,103277,103278,103280],{},"这行创建一个刚体，名字叫 ",[277,103273,55051],{},[277,103275,103276],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[277,103279,102506],{},"，也就是离地面 1 米高。",[270,103282,103284],{"className":54404,"code":103283,"language":54406,"meta":275,"style":275},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[277,103285,103286],{"__ignoreMap":275},[152,103287,103288,103290,103292,103294,103296,103299],{"class":281,"line":282},[152,103289,844],{"class":483},[152,103291,102957],{"class":52637},[152,103293,16535],{"class":285},[152,103295,1864],{"class":483},[152,103297,103298],{"class":289},"\"box_free\"",[152,103300,102481],{"class":483},[19,103302,103303,103304,103306],{},"这行很重要。",[277,103305,102957],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[270,103308,103310],{"className":54404,"code":103309,"language":54406,"meta":275,"style":275},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[277,103311,103312],{"__ignoreMap":275},[152,103313,103314,103316,103318,103320,103322,103324,103326,103328,103330,103332,103334,103336,103339,103341,103343,103345,103347,103350],{"class":281,"line":282},[152,103315,844],{"class":483},[152,103317,102457],{"class":52637},[152,103319,16535],{"class":285},[152,103321,1864],{"class":483},[152,103323,102464],{"class":289},[152,103325,55161],{"class":285},[152,103327,1864],{"class":483},[152,103329,54828],{"class":289},[152,103331,102473],{"class":285},[152,103333,1864],{"class":483},[152,103335,102478],{"class":289},[152,103337,103338],{"class":285}," mass",[152,103340,1864],{"class":483},[152,103342,5321],{"class":289},[152,103344,80104],{"class":285},[152,103346,1864],{"class":483},[152,103348,103349],{"class":289},"\"1 0 0 1\"",[152,103351,102481],{"class":483},[19,103353,103354,103355,103358,103359,103362,103363,103366,103367,103370],{},"这行给 box body 添加一个盒子形状。",[277,103356,103357],{},"type=\"box\""," 表示形状是盒子。",[277,103360,103361],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[277,103364,103365],{},"mass=\"1\""," 表示质量是 1。",[277,103368,103369],{},"rgba=\"1 0 0 1\""," 表示红色。",[270,103372,103374],{"className":31715,"code":103373,"language":31717,"meta":275,"style":275},"def main() -> None:\n",[277,103375,103376],{"__ignoreMap":275},[152,103377,103378,103380,103382,103384,103386],{"class":281,"line":282},[152,103379,33284],{"class":476},[152,103381,3624],{"class":285},[152,103383,102735],{"class":483},[152,103385,97023],{"class":293},[152,103387,5382],{"class":483},[19,103389,103390,103392,103393,103396,103397,103400],{},[277,103391,33284],{}," 用来定义函数。这里定义了一个叫 ",[277,103394,103395],{},"main"," 的函数。",[277,103398,103399],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[270,103402,103403],{"className":31715,"code":102964,"language":31717,"meta":275,"style":275},[277,103404,103405],{"__ignoreMap":275},[152,103406,103407,103409,103411,103413,103415],{"class":281,"line":282},[152,103408,102971],{"class":483},[152,103410,1864],{"class":476},[152,103412,102749],{"class":483},[152,103414,102651],{"class":293},[152,103416,1825],{"class":483},[19,103418,103419,103420,103423],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[277,103421,103422],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[270,103425,103426],{"className":31715,"code":102988,"language":31717,"meta":275,"style":275},[277,103427,103428],{"__ignoreMap":275},[152,103429,103430,103432,103434],{"class":281,"line":282},[152,103431,102995],{"class":483},[152,103433,1864],{"class":476},[152,103435,102763],{"class":483},[19,103437,103438,103439,103441,103442,103444],{},"这行创建仿真数据。",[277,103440,34738],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[277,103443,34738],{}," 都会变化。",[270,103446,103448],{"className":31715,"code":103447,"language":31717,"meta":275,"style":275},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[277,103449,103450,103460,103470],{"__ignoreMap":275},[152,103451,103452,103454,103456,103458],{"class":281,"line":282},[152,103453,31752],{"class":293},[152,103455,1819],{"class":483},[152,103457,102776],{"class":289},[152,103459,102779],{"class":483},[152,103461,103462,103464,103466,103468],{"class":281,"line":303},[152,103463,31752],{"class":293},[152,103465,1819],{"class":483},[152,103467,102788],{"class":289},[152,103469,102791],{"class":483},[152,103471,103472,103474,103476,103478],{"class":281,"line":310},[152,103473,31752],{"class":293},[152,103475,1819],{"class":483},[152,103477,102800],{"class":289},[152,103479,102803],{"class":483},[19,103481,103482,103484,103485,103488,103489,103492,103493,103496,103497,103500],{},[277,103483,31752],{}," 用来输出信息。",[277,103486,103487],{},"model.nq"," 是位置变量数量，",[277,103490,103491],{},"model.nv"," 是速度变量数量，",[277,103494,103495],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[277,103498,103499],{},"nu"," 是 0。",[270,103502,103504],{"className":31715,"code":103503,"language":31717,"meta":275,"style":275},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[277,103505,103506,103516],{"__ignoreMap":275},[152,103507,103508,103510,103512,103514],{"class":281,"line":282},[152,103509,31752],{"class":293},[152,103511,1819],{"class":483},[152,103513,102812],{"class":289},[152,103515,102815],{"class":483},[152,103517,103518,103520,103522,103524],{"class":281,"line":303},[152,103519,31752],{"class":293},[152,103521,1819],{"class":483},[152,103523,102824],{"class":289},[152,103525,102827],{"class":483},[19,103527,103528,103529,103531,103532,103534,103535,103538],{},"这里打印初始时间和初始位置。",[277,103530,102404],{}," 一开始是 0。",[277,103533,102407],{}," 是位置数组。",[277,103536,103537],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[270,103540,103541],{"className":31715,"code":103013,"language":31717,"meta":275,"style":275},[277,103542,103543,103559],{"__ignoreMap":275},[152,103544,103545,103547,103549,103551,103553,103555,103557],{"class":281,"line":282},[152,103546,4668],{"class":476},[152,103548,102838],{"class":483},[152,103550,27653],{"class":476},[152,103552,33780],{"class":293},[152,103554,1819],{"class":483},[152,103556,2119],{"class":293},[152,103558,32123],{"class":483},[152,103560,103561],{"class":281,"line":303},[152,103562,103036],{"class":483},[19,103564,103565,103567,103568,103571,103572,103574,103575,103577],{},[277,103566,4668],{}," 是循环。",[277,103569,103570],{},"range(100)"," 表示循环 100 次。",[277,103573,2797],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[277,103576,102552],{},"，仿真就前进一步。",[270,103579,103581],{"className":31715,"code":103580,"language":31717,"meta":275,"style":275},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[277,103582,103583,103593],{"__ignoreMap":275},[152,103584,103585,103587,103589,103591],{"class":281,"line":282},[152,103586,31752],{"class":293},[152,103588,1819],{"class":483},[152,103590,102866],{"class":289},[152,103592,102815],{"class":483},[152,103594,103595,103597,103599,103601],{"class":281,"line":303},[152,103596,31752],{"class":293},[152,103598,1819],{"class":483},[152,103600,102877],{"class":289},[152,103602,102827],{"class":483},[19,103604,103605],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[270,103607,103609],{"className":31715,"code":103608,"language":31717,"meta":275,"style":275},"if __name__ == \"__main__\":\n    main()\n",[277,103610,103611,103623],{"__ignoreMap":275},[152,103612,103613,103615,103617,103619,103621],{"class":281,"line":282},[152,103614,3202],{"class":476},[152,103616,32557],{"class":293},[152,103618,102896],{"class":476},[152,103620,102899],{"class":289},[152,103622,5382],{"class":483},[152,103624,103625],{"class":281,"line":303},[152,103626,102906],{"class":483},[19,103628,103629,103630,103633,103634,29984],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[277,103631,103632],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[277,103635,103632],{},[19,103637,103638],{},"运行:",[270,103640,103642],{"className":272,"code":103641,"language":274,"meta":275,"style":275},"python ch1_first_sim.py\n",[277,103643,103644],{"__ignoreMap":275},[152,103645,103646,103648],{"class":281,"line":282},[152,103647,31717],{"class":285},[152,103649,102623],{"class":289},[1760,103651,103653],{"id":103652},"_5运行结果说明","5.运行结果说明",[19,103655,103656],{},"你应该看到类似输出:",[270,103658,103661],{"className":103659,"code":103660,"language":6829,"meta":275},[6827],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[277,103662,103660],{"__ignoreMap":275},[19,103664,103665,103667,103668,103671,103672,29984],{},[277,103666,102957],{}," 有 7 个位置变量: ",[277,103669,103670],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[277,103673,103674],{},"vx vy vz wx wy wz",[19,103676,103677,103678,103681],{},"你还会看到 ",[277,103679,103680],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[1760,103683,103685],{"id":103684},"_6验证步骤","6.验证步骤",[19,103687,103688],{},"确认版本:",[270,103690,103691],{"className":272,"code":102276,"language":274,"meta":275,"style":275},[277,103692,103693],{"__ignoreMap":275},[152,103694,103695,103697,103699],{"class":281,"line":282},[152,103696,31717],{"class":285},[152,103698,31695],{"class":293},[152,103700,102287],{"class":289},[19,103702,103703],{},"确认导入的是官方 bindings:",[270,103705,103707],{"className":272,"code":103706,"language":274,"meta":275,"style":275},"python -c \"import mujoco; print(mujoco)\"\n",[277,103708,103709],{"__ignoreMap":275},[152,103710,103711,103713,103715],{"class":281,"line":282},[152,103712,31717],{"class":285},[152,103714,31695],{"class":293},[152,103716,103717],{"class":289}," \"import mujoco; print(mujoco)\"\n",[19,103719,103720],{},"运行程序:",[270,103722,103723],{"className":272,"code":103641,"language":274,"meta":275,"style":275},[277,103724,103725],{"__ignoreMap":275},[152,103726,103727,103729],{"class":281,"line":282},[152,103728,31717],{"class":285},[152,103730,102623],{"class":289},[19,103732,103733,103734,103737,103738,29984],{},"检查 ",[277,103735,103736],{},"final time"," 是否约等于 ",[277,103739,103740],{},"1.0",[19,103742,103743],{},"再做几个小实验：",[416,103745,103746,103756,103764,103777],{},[419,103747,103748,103749,103751,103752,103755],{},"把 ",[277,103750,103276],{}," 改成 ",[277,103753,103754],{},"pos=\"0 0 2\"","，观察初始高度变化。",[419,103757,103748,103758,103751,103760,103763],{},[277,103759,103165],{},[277,103761,103762],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[419,103765,103748,103766,103751,103768,103771,103772,103774,103775,29984],{},[277,103767,103161],{},[277,103769,103770],{},"timestep=\"0.005\"","，观察 100 步后的 ",[277,103773,103736],{}," 是否变成约 ",[277,103776,36666],{},[419,103778,103779,103780,103783],{},"删除 ",[277,103781,103782],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,103785,103786],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[1760,103788,103790],{"id":103789},"_7常见错误与解决方案","7.常见错误与解决方案",[14,103792,103794],{"id":103793},"modulenotfounderror-no-module-named-mujoco",[277,103795,103796],{},"ModuleNotFoundError: No module named 'mujoco'",[19,103798,103799],{},"解决:",[270,103801,103803],{"className":272,"code":103802,"language":274,"meta":275,"style":275},"pip install \"mujoco>=2.3\"\n",[277,103804,103805],{"__ignoreMap":275},[152,103806,103807,103809,103811],{"class":281,"line":282},[152,103808,25443],{"class":285},[152,103810,25446],{"class":289},[152,103812,103813],{"class":289}," \"mujoco>=2.3\"\n",[14,103815,103817],{"id":103816},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103819,103820],{},"先安装系统依赖:",[270,103822,103824],{"className":272,"code":103823,"language":274,"meta":275,"style":275},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[277,103825,103826],{"__ignoreMap":275},[152,103827,103828,103830,103832,103834,103836,103839,103841,103844,103846,103849,103851],{"class":281,"line":282},[152,103829,26188],{"class":285},[152,103831,27921],{"class":289},[152,103833,25446],{"class":289},[152,103835,28005],{"class":293},[152,103837,103838],{"class":289}," mesa-libGL",[152,103840,102151],{"class":289},[152,103842,103843],{"class":289}," glfw",[152,103845,102171],{"class":289},[152,103847,103848],{"class":289}," libX11",[152,103850,102184],{"class":289},[152,103852,103853],{"class":289}," libXrandr\n",[14,103855,103857],{"id":103856},"xml-解析失败","XML 解析失败",[19,103859,103860],{},"检查:",[416,103862,103863,103866,103869,103875],{},[419,103864,103865],{},"标签是否闭合",[419,103867,103868],{},"属性是否带引号",[419,103870,103871,103872],{},"根节点是否是 ",[277,103873,103874],{},"\u003Cmujoco>",[419,103876,103877,103879,103880,103883],{},[277,103878,53137],{}," 是否放在 ",[277,103881,103882],{},"\u003Cworldbody>"," 内部",[14,103885,103887,103889,103890],{"id":103886},"final-time-不是严格等于-10",[277,103888,103736],{}," 不是严格等于 ",[277,103891,103740],{},[19,103893,103894],{},"这通常不是错误。浮点数计算可能得到：",[270,103896,103899],{"className":103897,"code":103898,"language":6829,"meta":275},[6827],"1.0000000000000007\n",[277,103900,103898],{"__ignoreMap":275},[19,103902,103903,103904,103906],{},"只要接近 ",[277,103905,103740],{}," 就正常。",[14,103908,103909],{"id":103909},"方块没有掉下来",[19,103911,103912],{},"检查：",[416,103914,103915,103921,103927,103932],{},[419,103916,103917,103918],{},"方块 body 里是否有 ",[277,103919,103920],{},"\u003Cfreejoint\u002F>",[419,103922,103923,103924],{},"重力是否是 ",[277,103925,103926],{},"0 0 -9.81",[419,103928,103929,103930],{},"是否真的调用了 ",[277,103931,102022],{},[419,103933,103934,103935,103937,103938],{},"你看的是否是 ",[277,103936,103680],{},"，不是 ",[277,103939,103940],{},"initial qpos",[1760,103942,103944],{"id":103943},"_8本章小结","8.本章小结",[19,103946,103947],{},"本章你已经完成了 MuJoCo 的最小闭环：",[270,103949,103952],{"className":103950,"code":103951,"language":6829,"meta":275},[6827],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[277,103953,103951],{"__ignoreMap":275},[19,103955,103956],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1736,103958,103959],{},"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":275,"searchDepth":303,"depth":303,"links":103961},[103962,103963,103964,103969,103973,103974,103975,103983],{"id":101983,"depth":303,"text":101984},{"id":102106,"depth":303,"text":102107},{"id":102381,"depth":303,"text":102382,"children":103965},[103966,103967,103968],{"id":102419,"depth":310,"text":102420},{"id":102513,"depth":310,"text":102514},{"id":102565,"depth":310,"text":102566},{"id":102589,"depth":303,"text":102590,"children":103970},[103971,103972],{"id":102909,"depth":310,"text":102909},{"id":103045,"depth":310,"text":103045},{"id":103652,"depth":303,"text":103653},{"id":103684,"depth":303,"text":103685},{"id":103789,"depth":303,"text":103790,"children":103976},[103977,103978,103979,103980,103982],{"id":103793,"depth":310,"text":103796},{"id":103816,"depth":310,"text":103817},{"id":103856,"depth":310,"text":103857},{"id":103886,"depth":310,"text":103981},"final time 不是严格等于 1.0",{"id":103909,"depth":310,"text":103909},{"id":103943,"depth":303,"text":103944},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101975,"description":275},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103990,"title":103991,"body":103992,"description":275,"extension":1744,"meta":105648,"navigation":306,"path":105649,"seo":105650,"stem":105651,"__hash__":105652},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103993,"toc":105624},[103994,103997,103999,104002,104005,104022,104117,104120,104126,104128,104130,104154,104157,104171,104174,104215,104217,104230,104232,104235,104283,104295,104298,104301,104307,104320,104387,104390,104409,104412,104415,104421,104423,104432,104435,104439,104448,104530,104539,104543,104549,104563,104573,104575,104905,104908,104920,104922,104933,104935,104938,104956,104959,104962,104980,104991,104994,105009,105019,105021,105042,105059,105079,105085,105125,105141,105157,105163,105166,105190,105206,105211,105241,105258,105283,105286,105301,105310,105325,105334,105349,105356,105358,105368,105381,105388,105391,105430,105437,105439,105491,105493,105499,105502,105509,105516,105519,105521,105539,105542,105545,105579,105591,105593,105596,105618,105621],[10,103995,103991],{"id":103996},"_2xml-与-mjcf-物理建模基础",[1760,103998,101984],{"id":101983},[19,104000,104001],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104003,104004],{},"本章结束后，你应该能看懂一个简单模型里：",[416,104006,104007,104010,104013,104016,104019],{},[419,104008,104009],{},"地面在哪里。",[419,104011,104012],{},"物体初始位置在哪里。",[419,104014,104015],{},"几何体是什么形状。",[419,104017,104018],{},"哪些 body 可以自由运动。",[419,104020,104021],{},"如何用名字在 Python 里找到 XML 中的对象。",[23,104023,104024,104034],{},[26,104025,104026],{},[29,104027,104028,104031],{},[32,104029,104030],{"align":34},"标签",[32,104032,104033],{"align":34},"作用",[43,104035,104036,104045,104055,104064,104074,104084,104097,104107],{},[29,104037,104038,104042],{},[48,104039,104040],{"align":34},[277,104041,103874],{},[48,104043,104044],{"align":34},"根节点",[29,104046,104047,104052],{},[48,104048,104049],{"align":34},[277,104050,104051],{},"\u003Coption>",[48,104053,104054],{"align":34},"仿真参数",[29,104056,104057,104061],{},[48,104058,104059],{"align":34},[277,104060,103882],{},[48,104062,104063],{"align":34},"世界中的物体",[29,104065,104066,104071],{},[48,104067,104068],{"align":34},[277,104069,104070],{},"\u003Cbody>",[48,104072,104073],{"align":34},"刚体",[29,104075,104076,104081],{},[48,104077,104078],{"align":34},[277,104079,104080],{},"\u003Cgeom>",[48,104082,104083],{"align":34},"几何体、碰撞体、可视体",[29,104085,104086,104094],{},[48,104087,104088,26589,104091],{"align":34},[277,104089,104090],{},"\u003Cjoint>",[277,104092,104093],{},"\u003Cfreejoint>",[48,104095,104096],{"align":34},"关节",[29,104098,104099,104104],{},[48,104100,104101],{"align":34},[277,104102,104103],{},"\u003Csite>",[48,104105,104106],{"align":34},"标记点",[29,104108,104109,104114],{},[48,104110,104111],{"align":34},[277,104112,104113],{},"\u003Cactuator>",[48,104115,104116],{"align":34},"控制器",[19,104118,104119],{},"初学时可以先记住：",[270,104121,104124],{"className":104122,"code":104123,"language":6829,"meta":275},[6827],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[277,104125,104123],{"__ignoreMap":275},[1760,104127,102107],{"id":102106},[19,104129,102110],{},[270,104131,104133],{"className":272,"code":104132,"language":274,"meta":275,"style":275},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[277,104134,104135],{"__ignoreMap":275},[152,104136,104137,104139,104141,104143,104145,104147,104149,104151],{"class":281,"line":282},[152,104138,26188],{"class":285},[152,104140,27921],{"class":289},[152,104142,25446],{"class":289},[152,104144,28005],{"class":293},[152,104146,103838],{"class":289},[152,104148,102151],{"class":289},[152,104150,103843],{"class":289},[152,104152,104153],{"class":289}," glfw-devel\n",[19,104155,104156],{},"pip:",[270,104158,104159],{"className":272,"code":102256,"language":274,"meta":275,"style":275},[277,104160,104161],{"__ignoreMap":275},[152,104162,104163,104165,104167,104169],{"class":281,"line":282},[152,104164,25443],{"class":285},[152,104166,25446],{"class":289},[152,104168,102267],{"class":289},[152,104170,102270],{"class":289},[19,104172,104173],{},"conda:",[270,104175,104177],{"className":272,"code":104176,"language":274,"meta":275,"style":275},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[277,104178,104179,104196,104205],{"__ignoreMap":275},[152,104180,104181,104183,104185,104187,104190,104192,104194],{"class":281,"line":282},[152,104182,31667],{"class":285},[152,104184,757],{"class":289},[152,104186,26726],{"class":293},[152,104188,104189],{"class":289}," mujoco-xml",[152,104191,102312],{"class":289},[152,104193,102315],{"class":293},[152,104195,102318],{"class":293},[152,104197,104198,104200,104202],{"class":281,"line":303},[152,104199,31667],{"class":285},[152,104201,102325],{"class":289},[152,104203,104204],{"class":289}," mujoco-xml\n",[152,104206,104207,104209,104211,104213],{"class":281,"line":310},[152,104208,25443],{"class":285},[152,104210,25446],{"class":289},[152,104212,102267],{"class":289},[152,104214,102270],{"class":289},[19,104216,102341],{},[416,104218,104219,104222,104227],{},[419,104220,104221],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[419,104223,104224,104225,29984],{},"本章使用基础标签，适用于 ",[277,104226,102364],{},[419,104228,104229],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[1760,104231,102382],{"id":102381},[19,104233,104234],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[270,104236,104238],{"className":54404,"code":104237,"language":54406,"meta":275,"style":275},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[277,104239,104240,104254,104262,104267,104275],{"__ignoreMap":275},[152,104241,104242,104244,104246,104248,104250,104252],{"class":281,"line":282},[152,104243,844],{"class":483},[152,104245,102358],{"class":52637},[152,104247,103112],{"class":285},[152,104249,1864],{"class":483},[152,104251,64016],{"class":289},[152,104253,52644],{"class":483},[152,104255,104256,104258,104260],{"class":281,"line":303},[152,104257,53481],{"class":483},[152,104259,103178],{"class":52637},[152,104261,52644],{"class":483},[152,104263,104264],{"class":281,"line":310},[152,104265,104266],{"class":483},"    ...\n",[152,104268,104269,104271,104273],{"class":281,"line":324},[152,104270,53754],{"class":483},[152,104272,103178],{"class":52637},[152,104274,52644],{"class":483},[152,104276,104277,104279,104281],{"class":281,"line":329},[152,104278,53122],{"class":483},[152,104280,102358],{"class":52637},[152,104282,52644],{"class":483},[19,104284,104285,104287,104288,104290,104291,104294],{},[277,104286,53137],{}," 表示刚体。",[277,104289,102457],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[277,104292,104293],{},"joint"," 表示刚体相对父刚体如何运动。",[14,104296,104297],{"id":104297},"层级结构非常重要",[19,104299,104300],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[270,104302,104305],{"className":104303,"code":104304,"language":6829,"meta":275},[6827],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[277,104306,104304],{"__ignoreMap":275},[19,104308,104309,102355,104312,104315,104316,104319],{},[277,104310,104311],{},"red_box_geom",[277,104313,104314],{},"box_center"," 都属于 ",[277,104317,104318],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[270,104321,104323],{"className":54404,"code":104322,"language":54406,"meta":275,"style":275},"\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",[277,104324,104325,104345,104359,104379],{"__ignoreMap":275},[152,104326,104327,104329,104331,104333,104335,104337,104339,104341,104343],{"class":281,"line":282},[152,104328,844],{"class":483},[152,104330,53137],{"class":52637},[152,104332,16535],{"class":285},[152,104334,1864],{"class":483},[152,104336,54828],{"class":289},[152,104338,102443],{"class":285},[152,104340,1864],{"class":483},[152,104342,102448],{"class":289},[152,104344,52644],{"class":483},[152,104346,104347,104349,104351,104353,104355,104357],{"class":281,"line":303},[152,104348,53481],{"class":483},[152,104350,102957],{"class":52637},[152,104352,16535],{"class":285},[152,104354,1864],{"class":483},[152,104356,103298],{"class":289},[152,104358,102481],{"class":483},[152,104360,104361,104363,104365,104367,104369,104371,104373,104375,104377],{"class":281,"line":310},[152,104362,53481],{"class":483},[152,104364,102457],{"class":52637},[152,104366,55161],{"class":285},[152,104368,1864],{"class":483},[152,104370,54828],{"class":289},[152,104372,102473],{"class":285},[152,104374,1864],{"class":483},[152,104376,102478],{"class":289},[152,104378,102481],{"class":483},[152,104380,104381,104383,104385],{"class":281,"line":324},[152,104382,53122],{"class":483},[152,104384,53137],{"class":52637},[152,104386,52644],{"class":483},[19,104388,104389],{},"含义:",[416,104391,104392,104398,104403,104406],{},[419,104393,104394,104395,104397],{},"创建名为 ",[277,104396,55051],{}," 的刚体",[419,104399,104400,104401],{},"初始位置在世界坐标 ",[277,104402,102506],{},[419,104404,104405],{},"它有一个自由关节",[419,104407,104408],{},"它有一个盒子几何体",[14,104410,104411],{"id":104411},"坐标怎么理解",[19,104413,104414],{},"MuJoCo 默认使用三维坐标：",[270,104416,104419],{"className":104417,"code":104418,"language":6829,"meta":275},[6827],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[277,104420,104418],{"__ignoreMap":275},[19,104422,607],{},[270,104424,104426],{"className":54404,"code":104425,"language":54406,"meta":275,"style":275},"pos=\"0 0 1\"\n",[277,104427,104428],{"__ignoreMap":275},[152,104429,104430],{"class":281,"line":282},[152,104431,104425],{"class":483},[19,104433,104434],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[14,104436,104438],{"id":104437},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104440,104441,104442,83867,104445,104447],{},"不同 ",[277,104443,104444],{},"type",[277,104446,32833],{}," 含义不同：",[23,104449,104450,104465],{},[26,104451,104452],{},[29,104453,104454,104458,104463],{},[32,104455,104456],{"align":34},[277,104457,104444],{},[32,104459,104460,104462],{"align":34},[277,104461,32833],{}," 示例",[32,104464,102037],{"align":34},[43,104466,104467,104481,104496,104515],{},[29,104468,104469,104473,104478],{},[48,104470,104471],{"align":34},[277,104472,55051],{},[48,104474,104475],{"align":34},[277,104476,104477],{},"size=\"0.1 0.2 0.3\"",[48,104479,104480],{"align":34},"x\u002Fy\u002Fz 半边长，不是完整长度",[29,104482,104483,104488,104493],{},[48,104484,104485],{"align":34},[277,104486,104487],{},"sphere",[48,104489,104490],{"align":34},[277,104491,104492],{},"size=\"0.1\"",[48,104494,104495],{"align":34},"球半径",[29,104497,104498,104503,104508],{},[48,104499,104500],{"align":34},[277,104501,104502],{},"capsule",[48,104504,104505],{"align":34},[277,104506,104507],{},"size=\"0.03\"",[48,104509,104510,104511,104514],{"align":34},"胶囊半径，长度常用 ",[277,104512,104513],{},"fromto"," 指定",[29,104516,104517,104522,104527],{},[48,104518,104519],{"align":34},[277,104520,104521],{},"plane",[48,104523,104524],{"align":34},[277,104525,104526],{},"size=\"3 3 0.1\"",[48,104528,104529],{"align":34},"可视平面大小，通常当地面",[19,104531,104532,104533,104535,104536,104538],{},"最容易踩坑的是 box：",[277,104534,103361],{}," 表示边长大约是 ",[277,104537,33374],{},"，因为 MuJoCo 用的是半边长。",[14,104540,104542],{"id":104541},"site-是什么","site 是什么",[19,104544,104545,104548],{},[277,104546,104547],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[416,104550,104551,104554,104557,104560],{},[419,104552,104553],{},"标记机械臂末端。",[419,104555,104556],{},"标记目标位置。",[419,104558,104559],{},"放传感器或相机参考点。",[419,104561,104562],{},"在 Python 中读取某个关键点的世界坐标。",[19,104564,104565,104566,102355,104569,104572],{},"在后面的 Reacher 任务中，",[277,104567,104568],{},"tip",[277,104570,104571],{},"target"," 就会用 site 表示。",[1760,104574,102590],{"id":102589},[270,104576,104578],{"className":31715,"code":104577,"language":31717,"meta":275,"style":275},"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",[277,104579,104580,104586,104596,104600,104604,104612,104617,104621,104625,104629,104634,104638,104643,104648,104653,104658,104662,104666,104670,104674,104678,104682,104694,104706,104714,104718,104733,104748,104752,104765,104780,104793,104806,104810,104826,104830,104834,104845,104857,104869,104881,104885,104889,104901],{"__ignoreMap":275},[152,104581,104582,104584],{"class":281,"line":282},[152,104583,31729],{"class":476},[152,104585,102638],{"class":483},[152,104587,104588,104590,104592,104594],{"class":281,"line":303},[152,104589,31729],{"class":476},[152,104591,32717],{"class":483},[152,104593,32720],{"class":476},[152,104595,32723],{"class":483},[152,104597,104598],{"class":281,"line":310},[152,104599,307],{"emptyLinePlaceholder":306},[152,104601,104602],{"class":281,"line":324},[152,104603,307],{"emptyLinePlaceholder":306},[152,104605,104606,104608,104610],{"class":281,"line":329},[152,104607,102651],{"class":293},[152,104609,15180],{"class":476},[152,104611,102656],{"class":289},[152,104613,104614],{"class":281,"line":343},[152,104615,104616],{"class":289},"\u003Cmujoco model=\"xml_basic\">\n",[152,104618,104619],{"class":281,"line":348},[152,104620,102666],{"class":289},[152,104622,104623],{"class":281,"line":362},[152,104624,307],{"emptyLinePlaceholder":306},[152,104626,104627],{"class":281,"line":367},[152,104628,102675],{"class":289},[152,104630,104631],{"class":281,"line":381},[152,104632,104633],{"class":289},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[152,104635,104636],{"class":281,"line":386},[152,104637,307],{"emptyLinePlaceholder":306},[152,104639,104640],{"class":281,"line":932},[152,104641,104642],{"class":289},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[152,104644,104645],{"class":281,"line":942},[152,104646,104647],{"class":289},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[152,104649,104650],{"class":281,"line":949},[152,104651,104652],{"class":289},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[152,104654,104655],{"class":281,"line":954},[152,104656,104657],{"class":289},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[152,104659,104660],{"class":281,"line":959},[152,104661,102704],{"class":289},[152,104663,104664],{"class":281,"line":970},[152,104665,102709],{"class":289},[152,104667,104668],{"class":281,"line":979},[152,104669,102714],{"class":289},[152,104671,104672],{"class":281,"line":989},[152,104673,97035],{"class":289},[152,104675,104676],{"class":281,"line":996},[152,104677,307],{"emptyLinePlaceholder":306},[152,104679,104680],{"class":281,"line":1001},[152,104681,307],{"emptyLinePlaceholder":306},[152,104683,104684,104686,104688,104690,104692],{"class":281,"line":1006},[152,104685,33284],{"class":476},[152,104687,3624],{"class":285},[152,104689,102735],{"class":483},[152,104691,97023],{"class":293},[152,104693,5382],{"class":483},[152,104695,104696,104698,104700,104702,104704],{"class":281,"line":1018},[152,104697,102744],{"class":483},[152,104699,1864],{"class":476},[152,104701,102749],{"class":483},[152,104703,102651],{"class":293},[152,104705,1825],{"class":483},[152,104707,104708,104710,104712],{"class":281,"line":1027},[152,104709,102758],{"class":483},[152,104711,1864],{"class":476},[152,104713,102763],{"class":483},[152,104715,104716],{"class":281,"line":1037},[152,104717,307],{"emptyLinePlaceholder":306},[152,104719,104720,104723,104725,104728,104731],{"class":281,"line":1044},[152,104721,104722],{"class":483},"    box_body_id ",[152,104724,1864],{"class":476},[152,104726,104727],{"class":483}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[152,104729,104730],{"class":289},"\"red_box\"",[152,104732,1825],{"class":483},[152,104734,104735,104738,104740,104743,104746],{"class":281,"line":1049},[152,104736,104737],{"class":483},"    site_id ",[152,104739,1864],{"class":476},[152,104741,104742],{"class":483}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[152,104744,104745],{"class":289},"\"box_center\"",[152,104747,1825],{"class":483},[152,104749,104750],{"class":281,"line":1054},[152,104751,307],{"emptyLinePlaceholder":306},[152,104753,104754,104756,104759,104761,104763],{"class":281,"line":1065},[152,104755,4744],{"class":476},[152,104757,104758],{"class":483}," box_body_id ",[152,104760,844],{"class":476},[152,104762,5735],{"class":293},[152,104764,5382],{"class":483},[152,104766,104767,104770,104773,104775,104778],{"class":281,"line":1074},[152,104768,104769],{"class":476},"        raise",[152,104771,104772],{"class":293}," RuntimeError",[152,104774,1819],{"class":483},[152,104776,104777],{"class":289},"\"body red_box not found\"",[152,104779,1825],{"class":483},[152,104781,104782,104784,104787,104789,104791],{"class":281,"line":1084},[152,104783,4744],{"class":476},[152,104785,104786],{"class":483}," site_id ",[152,104788,844],{"class":476},[152,104790,5735],{"class":293},[152,104792,5382],{"class":483},[152,104794,104795,104797,104799,104801,104804],{"class":281,"line":1091},[152,104796,104769],{"class":476},[152,104798,104772],{"class":293},[152,104800,1819],{"class":483},[152,104802,104803],{"class":289},"\"site box_center not found\"",[152,104805,1825],{"class":483},[152,104807,104808],{"class":281,"line":1096},[152,104809,307],{"emptyLinePlaceholder":306},[152,104811,104812,104814,104816,104818,104820,104822,104824],{"class":281,"line":1101},[152,104813,4844],{"class":476},[152,104815,102838],{"class":483},[152,104817,27653],{"class":476},[152,104819,33780],{"class":293},[152,104821,1819],{"class":483},[152,104823,3382],{"class":293},[152,104825,32123],{"class":483},[152,104827,104828],{"class":281,"line":1112},[152,104829,102853],{"class":483},[152,104831,104832],{"class":281,"line":1121},[152,104833,307],{"emptyLinePlaceholder":306},[152,104835,104836,104838,104840,104843],{"class":281,"line":1131},[152,104837,32636],{"class":293},[152,104839,1819],{"class":483},[152,104841,104842],{"class":289},"\"simulation time:\"",[152,104844,102815],{"class":483},[152,104846,104847,104849,104851,104854],{"class":281,"line":1138},[152,104848,32636],{"class":293},[152,104850,1819],{"class":483},[152,104852,104853],{"class":289},"\"box body position:\"",[152,104855,104856],{"class":483},", data.xpos[box_body_id].copy())\n",[152,104858,104859,104861,104863,104866],{"class":281,"line":1143},[152,104860,32636],{"class":293},[152,104862,1819],{"class":483},[152,104864,104865],{"class":289},"\"site position:\"",[152,104867,104868],{"class":483},", data.site_xpos[site_id].copy())\n",[152,104870,104871,104873,104875,104878],{"class":281,"line":1148},[152,104872,32636],{"class":293},[152,104874,1819],{"class":483},[152,104876,104877],{"class":289},"\"box qpos:\"",[152,104879,104880],{"class":483},", np.array(data.qpos))\n",[152,104882,104883],{"class":281,"line":1159},[152,104884,307],{"emptyLinePlaceholder":306},[152,104886,104887],{"class":281,"line":1168},[152,104888,307],{"emptyLinePlaceholder":306},[152,104890,104891,104893,104895,104897,104899],{"class":281,"line":1178},[152,104892,3202],{"class":476},[152,104894,32557],{"class":293},[152,104896,102896],{"class":476},[152,104898,102899],{"class":289},[152,104900,5382],{"class":483},[152,104902,104903],{"class":281,"line":1185},[152,104904,102906],{"class":483},[19,104906,104907],{},"保存为：",[270,104909,104911],{"className":272,"code":104910,"language":274,"meta":275,"style":275},"touch ch2_xml_basic.py\n",[277,104912,104913],{"__ignoreMap":275},[152,104914,104915,104917],{"class":281,"line":282},[152,104916,102620],{"class":285},[152,104918,104919],{"class":289}," ch2_xml_basic.py\n",[19,104921,103638],{},[270,104923,104925],{"className":272,"code":104924,"language":274,"meta":275,"style":275},"python ch2_xml_basic.py\n",[277,104926,104927],{"__ignoreMap":275},[152,104928,104929,104931],{"class":281,"line":282},[152,104930,31717],{"class":285},[152,104932,104919],{"class":289},[14,104934,102909],{"id":102909},[19,104936,104937],{},"用名字查找 body：",[270,104939,104941],{"className":31715,"code":104940,"language":31717,"meta":275,"style":275},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[277,104942,104943],{"__ignoreMap":275},[152,104944,104945,104948,104950,104952,104954],{"class":281,"line":282},[152,104946,104947],{"class":483},"box_body_id ",[152,104949,1864],{"class":476},[152,104951,104727],{"class":483},[152,104953,104730],{"class":289},[152,104955,1825],{"class":483},[19,104957,104958],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104960,104961],{},"用名字查找 site：",[270,104963,104965],{"className":31715,"code":104964,"language":31717,"meta":275,"style":275},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[277,104966,104967],{"__ignoreMap":275},[152,104968,104969,104972,104974,104976,104978],{"class":281,"line":282},[152,104970,104971],{"class":483},"site_id ",[152,104973,1864],{"class":476},[152,104975,104742],{"class":483},[152,104977,104745],{"class":289},[152,104979,1825],{"class":483},[19,104981,104982,104983,104986,104987,104990],{},"注意第二个参数是对象类型。查 body 就用 ",[277,104984,104985],{},"mjOBJ_BODY","，查 site 就用 ",[277,104988,104989],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104992,104993],{},"读取世界坐标：",[270,104995,104997],{"className":31715,"code":104996,"language":31717,"meta":275,"style":275},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[277,104998,104999,105004],{"__ignoreMap":275},[152,105000,105001],{"class":281,"line":282},[152,105002,105003],{"class":483},"data.xpos[box_body_id]\n",[152,105005,105006],{"class":281,"line":303},[152,105007,105008],{"class":483},"data.site_xpos[site_id]\n",[19,105010,105011,105014,105015,105018],{},[277,105012,105013],{},"xpos"," 是 body 的世界坐标，",[277,105016,105017],{},"site_xpos"," 是 site 的世界坐标。",[14,105020,103045],{"id":103045},[270,105022,105024],{"className":31715,"code":105023,"language":31717,"meta":275,"style":275},"import mujoco\nimport numpy as np\n",[277,105025,105026,105032],{"__ignoreMap":275},[152,105027,105028,105030],{"class":281,"line":282},[152,105029,31729],{"class":476},[152,105031,102638],{"class":483},[152,105033,105034,105036,105038,105040],{"class":281,"line":303},[152,105035,31729],{"class":476},[152,105037,32717],{"class":483},[152,105039,32720],{"class":476},[152,105041,32723],{"class":483},[19,105043,105044,105045,105048,105049,105052,105053,2021,105056,29984],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[277,105046,105047],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[277,105050,105051],{},"as np"," 是习惯写法，后面就可以写 ",[277,105054,105055],{},"np.array(...)",[277,105057,105058],{},"np.round(...)",[270,105060,105061],{"className":31715,"code":102932,"language":31717,"meta":275,"style":275},[277,105062,105063,105071,105075],{"__ignoreMap":275},[152,105064,105065,105067,105069],{"class":281,"line":282},[152,105066,102651],{"class":293},[152,105068,15180],{"class":476},[152,105070,102656],{"class":289},[152,105072,105073],{"class":281,"line":303},[152,105074,102947],{"class":289},[152,105076,105077],{"class":281,"line":310},[152,105078,97035],{"class":289},[19,105080,105081,105082,29984],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[277,105083,105084],{},"mujoco.MjModel.from_xml_string(XML)",[270,105086,105088],{"className":54404,"code":105087,"language":54406,"meta":275,"style":275},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[277,105089,105090],{"__ignoreMap":275},[152,105091,105092,105094,105096,105098,105100,105102,105104,105106,105109,105111,105113,105116,105118,105120,105123],{"class":281,"line":282},[152,105093,844],{"class":483},[152,105095,104547],{"class":52637},[152,105097,16535],{"class":285},[152,105099,1864],{"class":483},[152,105101,104745],{"class":289},[152,105103,102443],{"class":285},[152,105105,1864],{"class":483},[152,105107,105108],{"class":289},"\"0 0 0\"",[152,105110,102473],{"class":285},[152,105112,1864],{"class":483},[152,105114,105115],{"class":289},"\"0.03\"",[152,105117,80104],{"class":285},[152,105119,1864],{"class":483},[152,105121,105122],{"class":289},"\"0 1 0 1\"",[152,105124,102481],{"class":483},[19,105126,105127,105129,105130,105133,105134,105136,105137,105140],{},[277,105128,104547],{}," 是标记点。",[277,105131,105132],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[277,105135,104507],{}," 表示显示出来的小球大小。",[277,105138,105139],{},"rgba=\"0 1 0 1\""," 表示绿色。",[270,105142,105143],{"className":31715,"code":104940,"language":31717,"meta":275,"style":275},[277,105144,105145],{"__ignoreMap":275},[152,105146,105147,105149,105151,105153,105155],{"class":281,"line":282},[152,105148,104947],{"class":483},[152,105150,1864],{"class":476},[152,105152,104727],{"class":483},[152,105154,104730],{"class":289},[152,105156,1825],{"class":483},[19,105158,105159,105160,105162],{},"这行的作用是：根据名字 ",[277,105161,104730],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105164,105165],{},"拆开看：",[416,105167,105168,105174,105179,105185],{},[419,105169,105170,105173],{},[277,105171,105172],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[419,105175,105176,105178],{},[277,105177,103422],{}," 是被查询的模型。",[419,105180,105181,105184],{},[277,105182,105183],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[419,105186,105187,105189],{},[277,105188,104730],{}," 是 XML 里写的名字。",[270,105191,105192],{"className":31715,"code":104964,"language":31717,"meta":275,"style":275},[277,105193,105194],{"__ignoreMap":275},[152,105195,105196,105198,105200,105202,105204],{"class":281,"line":282},[152,105197,104971],{"class":483},[152,105199,1864],{"class":476},[152,105201,104742],{"class":483},[152,105203,104745],{"class":289},[152,105205,1825],{"class":483},[19,105207,105208,105209,29984],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[277,105210,104745],{},[270,105212,105214],{"className":31715,"code":105213,"language":31717,"meta":275,"style":275},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[277,105215,105216,105228],{"__ignoreMap":275},[152,105217,105218,105220,105222,105224,105226],{"class":281,"line":282},[152,105219,3202],{"class":476},[152,105221,104758],{"class":483},[152,105223,844],{"class":476},[152,105225,5735],{"class":293},[152,105227,5382],{"class":483},[152,105229,105230,105233,105235,105237,105239],{"class":281,"line":303},[152,105231,105232],{"class":476},"    raise",[152,105234,104772],{"class":293},[152,105236,1819],{"class":483},[152,105238,104777],{"class":289},[152,105240,1825],{"class":483},[19,105242,105243,105245,105246,105249,105250,105253,105254,105257],{},[277,105244,3202],{}," 是条件判断。",[277,105247,105248],{},"mj_name2id"," 找不到对象时会返回 ",[277,105251,105252],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[277,105255,105256],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[270,105259,105261],{"className":31715,"code":105260,"language":31717,"meta":275,"style":275},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[277,105262,105263,105279],{"__ignoreMap":275},[152,105264,105265,105267,105269,105271,105273,105275,105277],{"class":281,"line":282},[152,105266,4668],{"class":476},[152,105268,102838],{"class":483},[152,105270,27653],{"class":476},[152,105272,33780],{"class":293},[152,105274,1819],{"class":483},[152,105276,3382],{"class":293},[152,105278,32123],{"class":483},[152,105280,105281],{"class":281,"line":303},[152,105282,103036],{"class":483},[19,105284,105285],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[270,105287,105289],{"className":31715,"code":105288,"language":31717,"meta":275,"style":275},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[277,105290,105291],{"__ignoreMap":275},[152,105292,105293,105295,105297,105299],{"class":281,"line":282},[152,105294,31752],{"class":293},[152,105296,1819],{"class":483},[152,105298,104853],{"class":289},[152,105300,104856],{"class":483},[19,105302,105303,105305,105306,105309],{},[277,105304,102416],{}," 保存所有 body 的世界坐标。",[277,105307,105308],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[270,105311,105313],{"className":31715,"code":105312,"language":31717,"meta":275,"style":275},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[277,105314,105315],{"__ignoreMap":275},[152,105316,105317,105319,105321,105323],{"class":281,"line":282},[152,105318,31752],{"class":293},[152,105320,1819],{"class":483},[152,105322,104865],{"class":289},[152,105324,104868],{"class":483},[19,105326,105327,105330,105331,105333],{},[277,105328,105329],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[277,105332,104314],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[270,105335,105337],{"className":31715,"code":105336,"language":31717,"meta":275,"style":275},"print(\"box qpos:\", np.array(data.qpos))\n",[277,105338,105339],{"__ignoreMap":275},[152,105340,105341,105343,105345,105347],{"class":281,"line":282},[152,105342,31752],{"class":293},[152,105344,1819],{"class":483},[152,105346,104877],{"class":289},[152,105348,104880],{"class":483},[19,105350,105351,105352,105355],{},"这里打印广义位置数组。",[277,105353,105354],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[1760,105357,103653],{"id":103652},[19,105359,105360,105361,105364,105365,29984],{},"程序会输出 ",[277,105362,105363],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[277,105366,105367],{},"qpos",[19,105369,105370,105372,105373,105376,105377,105380],{},[277,105371,105308],{}," 是 body 的世界坐标位置。",[277,105374,105375],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[277,105378,105379],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105382,83559,105383,83867,105385,105387],{},[277,105384,104314],{},[277,105386,105132],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105389,105390],{},"如果你把 site 改成：",[270,105392,105394],{"className":54404,"code":105393,"language":54406,"meta":275,"style":275},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[277,105395,105396],{"__ignoreMap":275},[152,105397,105398,105400,105402,105404,105406,105409,105411,105413,105416,105418,105420,105422,105424,105426,105428],{"class":281,"line":282},[152,105399,844],{"class":483},[152,105401,104547],{"class":52637},[152,105403,16535],{"class":285},[152,105405,1864],{"class":483},[152,105407,105408],{"class":289},"\"box_top\"",[152,105410,102443],{"class":285},[152,105412,1864],{"class":483},[152,105414,105415],{"class":289},"\"0 0 0.15\"",[152,105417,102473],{"class":285},[152,105419,1864],{"class":483},[152,105421,105115],{"class":289},[152,105423,80104],{"class":285},[152,105425,1864],{"class":483},[152,105427,105122],{"class":289},[152,105429,102481],{"class":483},[19,105431,105432,105433,105436],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[277,105434,105435],{},"site position"," 就会比 body position 的 z 坐标更高。",[1760,105438,103685],{"id":103684},[416,105440,105441,105450,105453,105460,105466,105477],{},[419,105442,103748,105443,105445,105446,103751,105448,29984],{},[277,105444,104318],{}," 的初始高度从 ",[277,105447,2026],{},[277,105449,1894],{},[419,105451,105452],{},"重新运行程序。",[419,105454,105455,105456,105459],{},"观察 ",[277,105457,105458],{},"box qpos"," 和最终位置是否变化。",[419,105461,105462,105463,105465],{},"故意把 ",[277,105464,104547],{}," 名称改错，确认程序能报错。",[419,105467,103748,105468,105470,105471,103751,105473,105476],{},[277,105469,102457],{}," 的颜色 ",[277,105472,103369],{},[277,105474,105475],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[419,105478,103748,105479,83867,105481,103751,105484,105487,105488,105490],{},[277,105480,104314],{},[277,105482,105483],{},"pos",[277,105485,105486],{},"0 0 0.2","，观察 ",[277,105489,105435],{}," 如何变化。",[1760,105492,103790],{"id":103789},[14,105494,105496],{"id":105495},"xml-error-schema-violation",[277,105497,105498],{},"XML Error: Schema violation",[19,105500,105501],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[14,105503,105505,82627,105507],{"id":105504},"mj_name2id-返回-1",[277,105506,105248],{},[277,105508,105252],{},[19,105510,105511,105512,105515],{},"说明名字没有找到。检查 XML 中 ",[277,105513,105514],{},"name=\"...\"","，并确认对象类型正确。",[14,105517,105518],{"id":105518},"物体不下落",[19,105520,103860],{},[416,105522,105523,105528,105533],{},[419,105524,105525,105526],{},"body 是否有 ",[277,105527,102957],{},[419,105529,105530,105531],{},"gravity 是否为 ",[277,105532,103926],{},[419,105534,105535,105536,105538],{},"body 是否被固定在 ",[277,105537,103178],{}," 中",[14,105540,105541],{"id":105541},"坐标看起来不符合预期",[19,105543,105544],{},"先区分两种坐标：",[23,105546,105547,105556],{},[26,105548,105549],{},[29,105550,105551,105554],{},[32,105552,105553],{"align":34},"坐标",[32,105555,102037],{"align":34},[43,105557,105558,105568],{},[29,105559,105560,105565],{},[48,105561,105562,105563],{"align":34},"XML 里的 ",[277,105564,105483],{},[48,105566,105567],{"align":34},"相对父 body 的局部坐标",[29,105569,105570,105576],{},[48,105571,105572,26589,105574],{"align":34},[277,105573,102416],{},[277,105575,105329],{},[48,105577,105578],{"align":34},"仿真更新后的世界坐标",[19,105580,105581,105582,105584,105585,83876,105588,105590],{},"如果你修改了 ",[277,105583,102407],{},"，但还没调用 ",[277,105586,105587],{},"mj_forward",[277,105589,102552],{},"，世界坐标可能还没有更新。",[1760,105592,103944],{"id":103943},[19,105594,105595],{},"MJCF 建模先掌握四件事：",[416,105597,105598,105603,105608,105613],{},[419,105599,105600,105602],{},[277,105601,53137],{}," 表示刚体层级。",[419,105604,105605,105607],{},[277,105606,102457],{}," 表示形状、碰撞和质量。",[419,105609,105610,105612],{},[277,105611,104293],{}," 决定 body 能不能动、怎么动。",[419,105614,105615,105617],{},[277,105616,104547],{}," 用来标记关键点，方便 Python 读取位置。",[19,105619,105620],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1736,105622,105623],{},"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":275,"searchDepth":303,"depth":303,"links":105625},[105626,105627,105628,105634,105638,105639,105640,105647],{"id":101983,"depth":303,"text":101984},{"id":102106,"depth":303,"text":102107},{"id":102381,"depth":303,"text":102382,"children":105629},[105630,105631,105632,105633],{"id":104297,"depth":310,"text":104297},{"id":104411,"depth":310,"text":104411},{"id":104437,"depth":310,"text":104438},{"id":104541,"depth":310,"text":104542},{"id":102589,"depth":303,"text":102590,"children":105635},[105636,105637],{"id":102909,"depth":310,"text":102909},{"id":103045,"depth":310,"text":103045},{"id":103652,"depth":303,"text":103653},{"id":103684,"depth":303,"text":103685},{"id":103789,"depth":303,"text":103790,"children":105641},[105642,105643,105645,105646],{"id":105495,"depth":310,"text":105498},{"id":105504,"depth":310,"text":105644},"mj_name2id 返回 -1",{"id":105518,"depth":310,"text":105518},{"id":105541,"depth":310,"text":105541},{"id":103943,"depth":303,"text":103944},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103991,"description":275},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105654,"title":105655,"body":105656,"description":275,"extension":1744,"meta":107151,"navigation":306,"path":107152,"seo":107153,"stem":107154,"__hash__":107155},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105657,"toc":107123},[105658,105661,105663,105666,105669,105707,105710,105716,105719,105721,105723,105750,105752,105766,105768,105809,105811,105835,105837,105840,105849,105858,105861,105870,105878,105887,105890,105900,105903,105955,105962,105968,105976,106024,106027,106046,106049,106057,106061,106070,106103,106105,106453,106455,106467,106469,106480,106482,106485,106506,106512,106515,106540,106550,106553,106561,106564,106567,106588,106599,106601,106621,106624,106645,106654,106673,106679,106704,106707,106721,106728,106752,106755,106763,106772,106788,106800,106808,106817,106819,106822,106846,106851,106854,106876,106878,106917,106919,106926,106928,106936,106939,106942,106954,106995,107002,107013,107020,107023,107072,107075,107078,107084,107086,107091,107117,107120],[10,105659,105655],{"id":105660},"_3python-控制接口读取状态与推进仿真",[1760,105662,101984],{"id":101983},[19,105664,105665],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105667,105668],{},"你将学习:",[416,105670,105671,105676,105681,105685,105690,105701],{},[419,105672,105673],{},[277,105674,105675],{},"MjModel.from_xml_string",[419,105677,105678],{},[277,105679,105680],{},"MjData(model)",[419,105682,105683],{},[277,105684,102552],{},[419,105686,105687],{},[277,105688,105689],{},"mj_resetData",[419,105691,105692,105693,2021,105695,2021,105698],{},"读取 ",[277,105694,105367],{},[277,105696,105697],{},"qvel",[277,105699,105700],{},"ctrl",[419,105702,105703,105704],{},"使用 ",[277,105705,105706],{},"model.opt.timestep",[19,105708,105709],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[270,105711,105714],{"className":105712,"code":105713,"language":6829,"meta":275},[6827],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[277,105715,105713],{"__ignoreMap":275},[19,105717,105718],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[1760,105720,102107],{"id":102106},[19,105722,102110],{},[270,105724,105726],{"className":272,"code":105725,"language":274,"meta":275,"style":275},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[277,105727,105728],{"__ignoreMap":275},[152,105729,105730,105732,105734,105736,105738,105741,105743,105745,105747],{"class":281,"line":282},[152,105731,26188],{"class":285},[152,105733,27921],{"class":289},[152,105735,25446],{"class":289},[152,105737,28005],{"class":293},[152,105739,105740],{"class":289}," python3",[152,105742,102135],{"class":289},[152,105744,103838],{"class":289},[152,105746,102151],{"class":289},[152,105748,105749],{"class":289}," glfw\n",[19,105751,104156],{},[270,105753,105754],{"className":272,"code":102256,"language":274,"meta":275,"style":275},[277,105755,105756],{"__ignoreMap":275},[152,105757,105758,105760,105762,105764],{"class":281,"line":282},[152,105759,25443],{"class":285},[152,105761,25446],{"class":289},[152,105763,102267],{"class":289},[152,105765,102270],{"class":289},[19,105767,104173],{},[270,105769,105771],{"className":272,"code":105770,"language":274,"meta":275,"style":275},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[277,105772,105773,105790,105799],{"__ignoreMap":275},[152,105774,105775,105777,105779,105781,105784,105786,105788],{"class":281,"line":282},[152,105776,31667],{"class":285},[152,105778,757],{"class":289},[152,105780,26726],{"class":293},[152,105782,105783],{"class":289}," mujoco-python-api",[152,105785,102312],{"class":289},[152,105787,102315],{"class":293},[152,105789,102318],{"class":293},[152,105791,105792,105794,105796],{"class":281,"line":303},[152,105793,31667],{"class":285},[152,105795,102325],{"class":289},[152,105797,105798],{"class":289}," mujoco-python-api\n",[152,105800,105801,105803,105805,105807],{"class":281,"line":310},[152,105802,25443],{"class":285},[152,105804,25446],{"class":289},[152,105806,102267],{"class":289},[152,105808,102270],{"class":289},[19,105810,102341],{},[416,105812,105813,105820,105829],{},[419,105814,105815,102355,105817,105819],{},[277,105816,102012],{},[277,105818,102017],{}," 是官方 Python bindings 的类名。",[419,105821,105822,105823,105826,105827,29984],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[277,105824,105825],{},"mjModel"," 在 Python 中是 ",[277,105828,102046],{},[419,105830,105831,105832,29984],{},"不要使用 ",[277,105833,105834],{},"sim = mujoco_py.MjSim(...)",[1760,105836,102382],{"id":102381},[19,105838,105839],{},"仿真推进核心代码:",[270,105841,105843],{"className":31715,"code":105842,"language":31717,"meta":275,"style":275},"mujoco.mj_step(model, data)\n",[277,105844,105845],{"__ignoreMap":275},[152,105846,105847],{"class":281,"line":282},[152,105848,105842],{"class":483},[19,105850,105851,105852,2021,105854,2021,105856,29984],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[277,105853,102407],{},[277,105855,102410],{},[277,105857,102404],{},[19,105859,105860],{},"重置仿真:",[270,105862,105864],{"className":31715,"code":105863,"language":31717,"meta":275,"style":275},"mujoco.mj_resetData(model, data)\n",[277,105865,105866],{"__ignoreMap":275},[152,105867,105868],{"class":281,"line":282},[152,105869,105863],{"class":483},[19,105871,105872,105873,83876,105875,105877],{},"如果手动修改了 ",[277,105874,102407],{},[277,105876,102410],{},"，通常应调用:",[270,105879,105881],{"className":31715,"code":105880,"language":31717,"meta":275,"style":275},"mujoco.mj_forward(model, data)\n",[277,105882,105883],{"__ignoreMap":275},[152,105884,105885],{"class":281,"line":282},[152,105886,105880],{"class":483},[19,105888,105889],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[14,105891,105893,2021,105895,2021,105897,105899],{"id":105892},"qposqvelctrl-是什么",[277,105894,105367],{},[277,105896,105697],{},[277,105898,105700],{}," 是什么",[19,105901,105902],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[23,105904,105905,105917],{},[26,105906,105907],{},[29,105908,105909,105912,105914],{},[32,105910,105911],{"align":34},"字段",[32,105913,102037],{"align":34},[32,105915,105916],{"align":34},"谁来修改",[43,105918,105919,105931,105943],{},[29,105920,105921,105925,105928],{},[48,105922,105923],{"align":34},[277,105924,102407],{},[48,105926,105927],{"align":34},"广义位置，例如小车位置、关节角、自由物体位置姿态",[48,105929,105930],{"align":34},"MuJoCo 更新，也可以手动设置初始状态",[29,105932,105933,105937,105940],{},[48,105934,105935],{"align":34},[277,105936,102410],{},[48,105938,105939],{"align":34},"广义速度，例如小车速度、关节角速度",[48,105941,105942],{"align":34},"MuJoCo 更新，也可以手动清零",[29,105944,105945,105949,105952],{},[48,105946,105947],{"align":34},[277,105948,102413],{},[48,105950,105951],{"align":34},"actuator 的控制输入",[48,105953,105954],{"align":34},"主要由你的控制代码写入",[19,105956,10657,105957,102355,105959,105961],{},[277,105958,105367],{},[277,105960,105697],{}," 不一定同维。自由刚体就是典型例子：",[270,105963,105966],{"className":105964,"code":105965,"language":6829,"meta":275},[6827],"freejoint: qpos 7 维，qvel 6 维\n",[277,105967,105965],{"__ignoreMap":275},[14,105969,105971,102355,105973,105975],{"id":105970},"mj_step-和-mj_forward-的区别",[277,105972,102552],{},[277,105974,105587],{}," 的区别",[23,105977,105978,105991],{},[26,105979,105980],{},[29,105981,105982,105985,105988],{},[32,105983,105984],{"align":34},"函数",[32,105986,105987],{"align":34},"是否推进时间",[32,105989,105990],{"align":34},"什么时候用",[43,105992,105993,106006],{},[29,105994,105995,106000,106003],{},[48,105996,105997],{"align":34},[277,105998,105999],{},"mj_step(model, data)",[48,106001,106002],{"align":34},"是",[48,106004,106005],{"align":34},"正常仿真循环，每调用一次前进一步",[29,106007,106008,106013,106016],{},[48,106009,106010],{"align":34},[277,106011,106012],{},"mj_forward(model, data)",[48,106014,106015],{"align":34},"否",[48,106017,106018,106019,2021,106021,106023],{"align":34},"手动改了 ",[277,106020,105367],{},[277,106022,105697],{}," 后，刷新派生量",[19,106025,106026],{},"例如你写：",[270,106028,106030],{"className":31715,"code":106029,"language":31717,"meta":275,"style":275},"data.qpos[2] = 2.0\n",[277,106031,106032],{"__ignoreMap":275},[152,106033,106034,106037,106039,106041,106043],{"class":281,"line":282},[152,106035,106036],{"class":483},"data.qpos[",[152,106038,1894],{"class":293},[152,106040,6085],{"class":483},[152,106042,1864],{"class":476},[152,106044,106045],{"class":293}," 2.0\n",[19,106047,106048],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[270,106050,106051],{"className":31715,"code":105880,"language":31717,"meta":275,"style":275},[277,106052,106053],{"__ignoreMap":275},[152,106054,106055],{"class":281,"line":282},[152,106056,105880],{"class":483},[14,106058,106060],{"id":106059},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106062,106063,106066,106067,106069],{},[277,106064,106065],{},"mujoco.mj_resetData(model, data)"," 会把 ",[277,106068,34738],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[270,106071,106073],{"className":31715,"code":106072,"language":31717,"meta":275,"style":275},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[277,106074,106075,106079,106089,106099],{"__ignoreMap":275},[152,106076,106077],{"class":281,"line":282},[152,106078,105863],{"class":483},[152,106080,106081,106084,106086],{"class":281,"line":303},[152,106082,106083],{"class":483},"data.qpos[:] ",[152,106085,1864],{"class":476},[152,106087,106088],{"class":483}," random_qpos\n",[152,106090,106091,106094,106096],{"class":281,"line":310},[152,106092,106093],{"class":483},"data.qvel[:] ",[152,106095,1864],{"class":476},[152,106097,106098],{"class":293}," 0.0\n",[152,106100,106101],{"class":281,"line":324},[152,106102,105880],{"class":483},[1760,106104,102590],{"id":102589},[270,106106,106108],{"className":31715,"code":106107,"language":31717,"meta":275,"style":275},"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",[277,106109,106110,106116,106126,106130,106134,106142,106147,106151,106155,106159,106164,106168,106173,106178,106183,106187,106191,106195,106199,106203,106207,106226,106233,106245,106256,106272,106288,106292,106296,106308,106320,106328,106332,106343,106347,106363,106367,106371,106380,106384,106389,106398,106402,106415,106420,106429,106433,106437,106449],{"__ignoreMap":275},[152,106111,106112,106114],{"class":281,"line":282},[152,106113,31729],{"class":476},[152,106115,102638],{"class":483},[152,106117,106118,106120,106122,106124],{"class":281,"line":303},[152,106119,31729],{"class":476},[152,106121,32717],{"class":483},[152,106123,32720],{"class":476},[152,106125,32723],{"class":483},[152,106127,106128],{"class":281,"line":310},[152,106129,307],{"emptyLinePlaceholder":306},[152,106131,106132],{"class":281,"line":324},[152,106133,307],{"emptyLinePlaceholder":306},[152,106135,106136,106138,106140],{"class":281,"line":329},[152,106137,102651],{"class":293},[152,106139,15180],{"class":476},[152,106141,102656],{"class":289},[152,106143,106144],{"class":281,"line":343},[152,106145,106146],{"class":289},"\u003Cmujoco model=\"state_api\">\n",[152,106148,106149],{"class":281,"line":348},[152,106150,102666],{"class":289},[152,106152,106153],{"class":281,"line":362},[152,106154,307],{"emptyLinePlaceholder":306},[152,106156,106157],{"class":281,"line":367},[152,106158,102675],{"class":289},[152,106160,106161],{"class":281,"line":381},[152,106162,106163],{"class":289},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[152,106165,106166],{"class":281,"line":386},[152,106167,307],{"emptyLinePlaceholder":306},[152,106169,106170],{"class":281,"line":932},[152,106171,106172],{"class":289},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[152,106174,106175],{"class":281,"line":942},[152,106176,106177],{"class":289},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[152,106179,106180],{"class":281,"line":949},[152,106181,106182],{"class":289},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[152,106184,106185],{"class":281,"line":954},[152,106186,102704],{"class":289},[152,106188,106189],{"class":281,"line":959},[152,106190,102709],{"class":289},[152,106192,106193],{"class":281,"line":970},[152,106194,102714],{"class":289},[152,106196,106197],{"class":281,"line":979},[152,106198,97035],{"class":289},[152,106200,106201],{"class":281,"line":989},[152,106202,307],{"emptyLinePlaceholder":306},[152,106204,106205],{"class":281,"line":996},[152,106206,307],{"emptyLinePlaceholder":306},[152,106208,106209,106211,106214,106217,106219,106222,106224],{"class":281,"line":1001},[152,106210,33284],{"class":476},[152,106212,106213],{"class":285}," print_state",[152,106215,106216],{"class":483},"(prefix: ",[152,106218,2974],{"class":293},[152,106220,106221],{"class":483},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[152,106223,97023],{"class":293},[152,106225,5382],{"class":483},[152,106227,106228,106230],{"class":281,"line":1006},[152,106229,32636],{"class":293},[152,106231,106232],{"class":483},"(prefix)\n",[152,106234,106235,106237,106239,106242],{"class":281,"line":1018},[152,106236,32636],{"class":293},[152,106238,1819],{"class":483},[152,106240,106241],{"class":289},"\"  timestep:\"",[152,106243,106244],{"class":483},", model.opt.timestep)\n",[152,106246,106247,106249,106251,106254],{"class":281,"line":1027},[152,106248,32636],{"class":293},[152,106250,1819],{"class":483},[152,106252,106253],{"class":289},"\"  time:\"",[152,106255,102815],{"class":483},[152,106257,106258,106260,106262,106265,106268,106270],{"class":281,"line":1037},[152,106259,32636],{"class":293},[152,106261,1819],{"class":483},[152,106263,106264],{"class":289},"\"  qpos:\"",[152,106266,106267],{"class":483},", np.round(data.qpos.copy(), ",[152,106269,2101],{"class":293},[152,106271,31834],{"class":483},[152,106273,106274,106276,106278,106281,106284,106286],{"class":281,"line":1044},[152,106275,32636],{"class":293},[152,106277,1819],{"class":483},[152,106279,106280],{"class":289},"\"  qvel:\"",[152,106282,106283],{"class":483},", np.round(data.qvel.copy(), ",[152,106285,2101],{"class":293},[152,106287,31834],{"class":483},[152,106289,106290],{"class":281,"line":1049},[152,106291,307],{"emptyLinePlaceholder":306},[152,106293,106294],{"class":281,"line":1054},[152,106295,307],{"emptyLinePlaceholder":306},[152,106297,106298,106300,106302,106304,106306],{"class":281,"line":1065},[152,106299,33284],{"class":476},[152,106301,3624],{"class":285},[152,106303,102735],{"class":483},[152,106305,97023],{"class":293},[152,106307,5382],{"class":483},[152,106309,106310,106312,106314,106316,106318],{"class":281,"line":1074},[152,106311,102744],{"class":483},[152,106313,1864],{"class":476},[152,106315,102749],{"class":483},[152,106317,102651],{"class":293},[152,106319,1825],{"class":483},[152,106321,106322,106324,106326],{"class":281,"line":1084},[152,106323,102758],{"class":483},[152,106325,1864],{"class":476},[152,106327,102763],{"class":483},[152,106329,106330],{"class":281,"line":1091},[152,106331,307],{"emptyLinePlaceholder":306},[152,106333,106334,106337,106340],{"class":281,"line":1096},[152,106335,106336],{"class":483},"    print_state(",[152,106338,106339],{"class":289},"\"initial\"",[152,106341,106342],{"class":483},", model, data)\n",[152,106344,106345],{"class":281,"line":1101},[152,106346,307],{"emptyLinePlaceholder":306},[152,106348,106349,106351,106353,106355,106357,106359,106361],{"class":281,"line":1112},[152,106350,4844],{"class":476},[152,106352,102838],{"class":483},[152,106354,27653],{"class":476},[152,106356,33780],{"class":293},[152,106358,1819],{"class":483},[152,106360,2464],{"class":293},[152,106362,32123],{"class":483},[152,106364,106365],{"class":281,"line":1121},[152,106366,102853],{"class":483},[152,106368,106369],{"class":281,"line":1131},[152,106370,307],{"emptyLinePlaceholder":306},[152,106372,106373,106375,106378],{"class":281,"line":1138},[152,106374,106336],{"class":483},[152,106376,106377],{"class":289},"\"after 50 steps\"",[152,106379,106342],{"class":483},[152,106381,106382],{"class":281,"line":1143},[152,106383,307],{"emptyLinePlaceholder":306},[152,106385,106386],{"class":281,"line":1148},[152,106387,106388],{"class":483},"    mujoco.mj_resetData(model, data)\n",[152,106390,106391,106393,106396],{"class":281,"line":1159},[152,106392,106336],{"class":483},[152,106394,106395],{"class":289},"\"after reset\"",[152,106397,106342],{"class":483},[152,106399,106400],{"class":281,"line":1168},[152,106401,307],{"emptyLinePlaceholder":306},[152,106403,106404,106407,106409,106411,106413],{"class":281,"line":1178},[152,106405,106406],{"class":483},"    data.qpos[",[152,106408,1894],{"class":293},[152,106410,6085],{"class":483},[152,106412,1864],{"class":476},[152,106414,106045],{"class":293},[152,106416,106417],{"class":281,"line":1185},[152,106418,106419],{"class":483},"    mujoco.mj_forward(model, data)\n",[152,106421,106422,106424,106427],{"class":281,"line":1190},[152,106423,106336],{"class":483},[152,106425,106426],{"class":289},"\"after manual qpos edit\"",[152,106428,106342],{"class":483},[152,106430,106431],{"class":281,"line":1195},[152,106432,307],{"emptyLinePlaceholder":306},[152,106434,106435],{"class":281,"line":1206},[152,106436,307],{"emptyLinePlaceholder":306},[152,106438,106439,106441,106443,106445,106447],{"class":281,"line":1215},[152,106440,3202],{"class":476},[152,106442,32557],{"class":293},[152,106444,102896],{"class":476},[152,106446,102899],{"class":289},[152,106448,5382],{"class":483},[152,106450,106451],{"class":281,"line":1225},[152,106452,102906],{"class":483},[19,106454,104907],{},[270,106456,106458],{"className":272,"code":106457,"language":274,"meta":275,"style":275},"touch ch3_python_state.py\n",[277,106459,106460],{"__ignoreMap":275},[152,106461,106462,106464],{"class":281,"line":282},[152,106463,102620],{"class":285},[152,106465,106466],{"class":289}," ch3_python_state.py\n",[19,106468,103638],{},[270,106470,106472],{"className":272,"code":106471,"language":274,"meta":275,"style":275},"python ch3_python_state.py\n",[277,106473,106474],{"__ignoreMap":275},[152,106475,106476,106478],{"class":281,"line":282},[152,106477,31717],{"class":285},[152,106479,106466],{"class":289},[14,106481,102909],{"id":102909},[19,106483,106484],{},"打印状态的函数：",[270,106486,106488],{"className":31715,"code":106487,"language":31717,"meta":275,"style":275},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[277,106489,106490],{"__ignoreMap":275},[152,106491,106492,106494,106496,106498,106500,106502,106504],{"class":281,"line":282},[152,106493,33284],{"class":476},[152,106495,106213],{"class":285},[152,106497,106216],{"class":483},[152,106499,2974],{"class":293},[152,106501,106221],{"class":483},[152,106503,97023],{"class":293},[152,106505,5382],{"class":483},[19,106507,106508,106509,106511],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[277,106510,34738],{}," 里发生了什么。",[19,106513,106514],{},"推进 50 步：",[270,106516,106518],{"className":31715,"code":106517,"language":31717,"meta":275,"style":275},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[277,106519,106520,106536],{"__ignoreMap":275},[152,106521,106522,106524,106526,106528,106530,106532,106534],{"class":281,"line":282},[152,106523,4668],{"class":476},[152,106525,102838],{"class":483},[152,106527,27653],{"class":476},[152,106529,33780],{"class":293},[152,106531,1819],{"class":483},[152,106533,2464],{"class":293},[152,106535,32123],{"class":483},[152,106537,106538],{"class":281,"line":303},[152,106539,103036],{"class":483},[19,106541,106542,106543,106546,106547,106549],{},"由于 ",[277,106544,106545],{},"timestep=0.01","，所以 50 步后时间约为 ",[277,106548,36666],{}," 秒。",[19,106551,106552],{},"重置：",[270,106554,106555],{"className":31715,"code":105863,"language":31717,"meta":275,"style":275},[277,106556,106557],{"__ignoreMap":275},[152,106558,106559],{"class":281,"line":282},[152,106560,105863],{"class":483},[19,106562,106563],{},"这会把时间、位置、速度恢复到初始状态。",[19,106565,106566],{},"手动改高度：",[270,106568,106570],{"className":31715,"code":106569,"language":31717,"meta":275,"style":275},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[277,106571,106572,106584],{"__ignoreMap":275},[152,106573,106574,106576,106578,106580,106582],{"class":281,"line":282},[152,106575,106036],{"class":483},[152,106577,1894],{"class":293},[152,106579,6085],{"class":483},[152,106581,1864],{"class":476},[152,106583,106045],{"class":293},[152,106585,106586],{"class":281,"line":303},[152,106587,105880],{"class":483},[19,106589,106590,106591,106594,106595,106598],{},"这个例子里 ",[277,106592,106593],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[277,106596,106597],{},"2.0"," 表示把小球放到更高的位置。",[14,106600,103045],{"id":103045},[270,106602,106603],{"className":31715,"code":106487,"language":31717,"meta":275,"style":275},[277,106604,106605],{"__ignoreMap":275},[152,106606,106607,106609,106611,106613,106615,106617,106619],{"class":281,"line":282},[152,106608,33284],{"class":476},[152,106610,106213],{"class":285},[152,106612,106216],{"class":483},[152,106614,2974],{"class":293},[152,106616,106221],{"class":483},[152,106618,97023],{"class":293},[152,106620,5382],{"class":483},[19,106622,106623],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[416,106625,106626,106635,106640],{},[419,106627,106628,106631,106632,106634],{},[277,106629,106630],{},"prefix","：一段文字，比如 ",[277,106633,106339],{},"，用来说明现在打印的是哪个阶段。",[419,106636,106637,106639],{},[277,106638,103422],{},"：MuJoCo 模型。",[419,106641,106642,106644],{},[277,106643,34738],{},"：MuJoCo 当前状态。",[19,106646,106647,2021,106650,106653],{},[277,106648,106649],{},"prefix: str",[277,106651,106652],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[270,106655,106657],{"className":31715,"code":106656,"language":31717,"meta":275,"style":275},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[277,106658,106659],{"__ignoreMap":275},[152,106660,106661,106663,106665,106667,106669,106671],{"class":281,"line":282},[152,106662,31752],{"class":293},[152,106664,1819],{"class":483},[152,106666,106264],{"class":289},[152,106668,106267],{"class":483},[152,106670,2101],{"class":293},[152,106672,31834],{"class":483},[19,106674,106675,106678],{},[277,106676,106677],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[270,106680,106682],{"className":31715,"code":106681,"language":31717,"meta":275,"style":275},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[277,106683,106684,106696],{"__ignoreMap":275},[152,106685,106686,106688,106690,106692,106694],{"class":281,"line":282},[152,106687,102971],{"class":483},[152,106689,1864],{"class":476},[152,106691,102749],{"class":483},[152,106693,102651],{"class":293},[152,106695,1825],{"class":483},[152,106697,106698,106700,106702],{"class":281,"line":303},[152,106699,102995],{"class":483},[152,106701,1864],{"class":476},[152,106703,102763],{"class":483},[19,106705,106706],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[270,106708,106710],{"className":31715,"code":106709,"language":31717,"meta":275,"style":275},"print_state(\"initial\", model, data)\n",[277,106711,106712],{"__ignoreMap":275},[152,106713,106714,106717,106719],{"class":281,"line":282},[152,106715,106716],{"class":483},"print_state(",[152,106718,106339],{"class":289},[152,106720,106342],{"class":483},[19,106722,106723,106724,106727],{},"调用刚才定义的 ",[277,106725,106726],{},"print_state"," 函数，打印初始状态。",[270,106729,106730],{"className":31715,"code":106517,"language":31717,"meta":275,"style":275},[277,106731,106732,106748],{"__ignoreMap":275},[152,106733,106734,106736,106738,106740,106742,106744,106746],{"class":281,"line":282},[152,106735,4668],{"class":476},[152,106737,102838],{"class":483},[152,106739,27653],{"class":476},[152,106741,33780],{"class":293},[152,106743,1819],{"class":483},[152,106745,2464],{"class":293},[152,106747,32123],{"class":483},[152,106749,106750],{"class":281,"line":303},[152,106751,103036],{"class":483},[19,106753,106754],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[270,106756,106757],{"className":31715,"code":105863,"language":31717,"meta":275,"style":275},[277,106758,106759],{"__ignoreMap":275},[152,106760,106761],{"class":281,"line":282},[152,106762,105863],{"class":483},[19,106764,106765,106766,106768,106769,106771],{},"重置 ",[277,106767,34738],{},"。注意它不会重新创建 ",[277,106770,103422],{},"，因为模型结构没有变，只是状态回到初始值。",[270,106773,106774],{"className":31715,"code":106029,"language":31717,"meta":275,"style":275},[277,106775,106776],{"__ignoreMap":275},[152,106777,106778,106780,106782,106784,106786],{"class":281,"line":282},[152,106779,106036],{"class":483},[152,106781,1894],{"class":293},[152,106783,6085],{"class":483},[152,106785,1864],{"class":476},[152,106787,106045],{"class":293},[19,106789,106790,106791,2021,106794,2021,106797,106799],{},"这行是“手动改状态”。在 freejoint 中，",[277,106792,106793],{},"qpos[0]",[277,106795,106796],{},"qpos[1]",[277,106798,106593],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[270,106801,106802],{"className":31715,"code":105880,"language":31717,"meta":275,"style":275},[277,106803,106804],{"__ignoreMap":275},[152,106805,106806],{"class":281,"line":282},[152,106807,105880],{"class":483},[19,106809,106810,106811,106813,106814,106816],{},"手动改完 ",[277,106812,105367],{}," 后，调用 ",[277,106815,105587],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[1760,106818,103653],{"id":103652},[19,106820,106821],{},"你会看到:",[416,106823,106824,106829,106834,106837],{},[419,106825,106826,106827],{},"初始时间为 ",[277,106828,2000],{},[419,106830,106831,106832],{},"50 步后时间约为 ",[277,106833,36666],{},[419,106835,106836],{},"reset 后状态恢复",[419,106838,106839,106840,106843,106844],{},"手动修改 ",[277,106841,106842],{},"data.qpos[2]"," 后，小球高度变为 ",[277,106845,106597],{},[19,106847,106848,106850],{},[277,106849,106593],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106852,106853],{},"输出里可以重点看三件事：",[416,106855,106856,106864,106869],{},[419,106857,106858,106860,106861,106863],{},[277,106859,4038],{}," 是否随着 ",[277,106862,102552],{}," 增加。",[419,106865,106866,106868],{},[277,106867,105367],{}," 的 z 坐标是否因为下落而变化。",[419,106870,106871,106873,106874,29984],{},[277,106872,105689],{}," 后时间是否回到 ",[277,106875,2000],{},[1760,106877,103685],{"id":103684},[416,106879,106880,106886,106892,106898,106901,106910],{},[419,106881,106882,106883,29984],{},"修改 timestep 为 ",[277,106884,106885],{},"0.005",[419,106887,106888,106889,29984],{},"重新运行，检查 50 步后时间是否约为 ",[277,106890,106891],{},"0.25",[419,106893,106894,106895,29984],{},"修改重力为 ",[277,106896,106897],{},"0 0 -1.0",[419,106899,106900],{},"观察小球下降速度是否变慢。",[419,106902,103748,106903,103751,106906,106909],{},[277,106904,106905],{},"data.qpos[2] = 2.0",[277,106907,106908],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[419,106911,106912,106913,106916],{},"注释掉 ",[277,106914,106915],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[1760,106918,103790],{"id":103789},[14,106920,106922,106923,106925],{"id":106921},"修改-dataqpos-后位置没有更新","修改 ",[277,106924,102407],{}," 后位置没有更新",[19,106927,103799],{},[270,106929,106930],{"className":31715,"code":105880,"language":31717,"meta":275,"style":275},[277,106931,106932],{"__ignoreMap":275},[152,106933,106934],{"class":281,"line":282},[152,106935,105880],{"class":483},[14,106937,106938],{"id":106938},"数组维度看不懂",[19,106940,106941],{},"打印模型维度:",[270,106943,106945],{"className":31715,"code":106944,"language":31717,"meta":275,"style":275},"print(model.nq, model.nv, model.nu)\n",[277,106946,106947],{"__ignoreMap":275},[152,106948,106949,106951],{"class":281,"line":282},[152,106950,31752],{"class":293},[152,106952,106953],{"class":483},"(model.nq, model.nv, model.nu)\n",[23,106955,106956,106964],{},[26,106957,106958],{},[29,106959,106960,106962],{},[32,106961,105911],{"align":34},[32,106963,102037],{"align":34},[43,106965,106966,106976,106986],{},[29,106967,106968,106973],{},[48,106969,106970],{"align":34},[277,106971,106972],{},"nq",[48,106974,106975],{"align":34},"位置变量数量",[29,106977,106978,106983],{},[48,106979,106980],{"align":34},[277,106981,106982],{},"nv",[48,106984,106985],{"align":34},"速度变量数量",[29,106987,106988,106992],{},[48,106989,106990],{"align":34},[277,106991,103499],{},[48,106993,106994],{"align":34},"控制输入数量",[14,106996,106998,106999,107001],{"id":106997},"误以为-qpos-一定等于关节数","误以为 ",[277,107000,105367],{}," 一定等于关节数",[19,107003,107004,107005,83867,107007,107009,107010,107012],{},"不是。例如 ",[277,107006,102957],{},[277,107008,105367],{}," 是 7 维，但 ",[277,107011,105697],{}," 是 6 维。",[14,107014,107016,107017,107019],{"id":107015},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[277,107018,105367],{}," 的第几位",[19,107021,107022],{},"初学时可以先打印：",[270,107024,107026],{"className":31715,"code":107025,"language":31717,"meta":275,"style":275},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[277,107027,107028,107038,107048,107060],{"__ignoreMap":275},[152,107029,107030,107032,107034,107036],{"class":281,"line":282},[152,107031,31752],{"class":293},[152,107033,1819],{"class":483},[152,107035,102776],{"class":289},[152,107037,102779],{"class":483},[152,107039,107040,107042,107044,107046],{"class":281,"line":303},[152,107041,31752],{"class":293},[152,107043,1819],{"class":483},[152,107045,102788],{"class":289},[152,107047,102791],{"class":483},[152,107049,107050,107052,107054,107057],{"class":281,"line":310},[152,107051,31752],{"class":293},[152,107053,1819],{"class":483},[152,107055,107056],{"class":289},"\"qpos:\"",[152,107058,107059],{"class":483},", data.qpos)\n",[152,107061,107062,107064,107066,107069],{"class":281,"line":324},[152,107063,31752],{"class":293},[152,107065,1819],{"class":483},[152,107067,107068],{"class":289},"\"qvel:\"",[152,107070,107071],{"class":483},", data.qvel)\n",[19,107073,107074],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[14,107076,107077],{"id":107077},"仿真结果每次都一样",[19,107079,107080,107081,107083],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[277,107082,105367],{},"、目标点或控制输入。",[1760,107085,103944],{"id":103943},[19,107087,107088,107089,26230],{},"Python 控制 MuJoCo 的核心就是读写 ",[277,107090,34738],{},[416,107092,107093,107101,107106,107111],{},[419,107094,107095,107096,102355,107098,107100],{},"用 ",[277,107097,102407],{},[277,107099,102410],{}," 读取状态。",[419,107102,107095,107103,107105],{},[277,107104,102413],{}," 写入控制。",[419,107107,107095,107108,107110],{},[277,107109,102552],{}," 推进时间。",[419,107112,107113,107114,107116],{},"手动改状态后用 ",[277,107115,105587],{}," 刷新派生量。",[19,107118,107119],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1736,107121,107122],{},"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":275,"searchDepth":303,"depth":303,"links":107124},[107125,107126,107127,107134,107138,107139,107140,107150],{"id":101983,"depth":303,"text":101984},{"id":102106,"depth":303,"text":102107},{"id":102381,"depth":303,"text":102382,"children":107128},[107129,107131,107133],{"id":105892,"depth":310,"text":107130},"qpos、qvel、ctrl 是什么",{"id":105970,"depth":310,"text":107132},"mj_step 和 mj_forward 的区别",{"id":106059,"depth":310,"text":106060},{"id":102589,"depth":303,"text":102590,"children":107135},[107136,107137],{"id":102909,"depth":310,"text":102909},{"id":103045,"depth":310,"text":103045},{"id":103652,"depth":303,"text":103653},{"id":103684,"depth":303,"text":103685},{"id":103789,"depth":303,"text":103790,"children":107141},[107142,107144,107145,107147,107149],{"id":106921,"depth":310,"text":107143},"修改 data.qpos 后位置没有更新",{"id":106938,"depth":310,"text":106938},{"id":106997,"depth":310,"text":107146},"误以为 qpos 一定等于关节数",{"id":107015,"depth":310,"text":107148},"不知道某个元素在 qpos 的第几位",{"id":107077,"depth":310,"text":107077},{"id":103943,"depth":303,"text":103944},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105655,"description":275},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107157,"title":107158,"body":107159,"description":275,"extension":1744,"meta":108849,"navigation":306,"path":108850,"seo":108851,"stem":108852,"__hash__":108853},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107160,"toc":108825},[107161,107164,107166,107169,107171,107196,107199,107218,107221,107223,107225,107249,107251,107265,107267,107308,107310,107334,107336,107339,107373,107375,107388,107391,107459,107468,107472,107475,107509,107515,107518,107522,107561,107564,107584,107588,107631,107633,107662,107665,107671,107674,107676,108070,108072,108084,108086,108097,108099,108102,108131,108139,108142,108177,108180,108182,108190,108193,108195,108206,108216,108236,108239,108275,108287,108335,108354,108396,108409,108437,108442,108463,108473,108491,108494,108528,108531,108551,108554,108573,108579,108581,108584,108590,108596,108606,108609,108615,108624,108626,108672,108674,108680,108686,108689,108692,108712,108715,108721,108727,108729,108752,108755,108758,108767,108770,108808,108810,108813,108819,108822],[10,107162,107158],{"id":107163},"_4关节actuator-与力控制",[1760,107165,101984],{"id":101983},[19,107167,107168],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107170,105668],{},[416,107172,107173,107179,107184,107188,107193],{},[419,107174,107175,107178],{},[277,107176,107177],{},"hinge"," 关节",[419,107180,107181],{},[277,107182,107183],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[419,107185,107186],{},[277,107187,102413],{},[419,107189,107190],{},[277,107191,107192],{},"ctrlrange",[419,107194,107195],{},"读取关节角和角速度",[19,107197,107198],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[270,107200,107202],{"className":31715,"code":107201,"language":31717,"meta":275,"style":275},"data.ctrl[0] = ...\n",[277,107203,107204],{"__ignoreMap":275},[152,107205,107206,107209,107211,107213,107215],{"class":281,"line":282},[152,107207,107208],{"class":483},"data.ctrl[",[152,107210,2000],{"class":293},[152,107212,6085],{"class":483},[152,107214,1864],{"class":476},[152,107216,107217],{"class":293}," ...\n",[19,107219,107220],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[1760,107222,102107],{"id":102106},[19,107224,102110],{},[270,107226,107227],{"className":272,"code":105725,"language":274,"meta":275,"style":275},[277,107228,107229],{"__ignoreMap":275},[152,107230,107231,107233,107235,107237,107239,107241,107243,107245,107247],{"class":281,"line":282},[152,107232,26188],{"class":285},[152,107234,27921],{"class":289},[152,107236,25446],{"class":289},[152,107238,28005],{"class":293},[152,107240,105740],{"class":289},[152,107242,102135],{"class":289},[152,107244,103838],{"class":289},[152,107246,102151],{"class":289},[152,107248,105749],{"class":289},[19,107250,104156],{},[270,107252,107253],{"className":272,"code":102256,"language":274,"meta":275,"style":275},[277,107254,107255],{"__ignoreMap":275},[152,107256,107257,107259,107261,107263],{"class":281,"line":282},[152,107258,25443],{"class":285},[152,107260,25446],{"class":289},[152,107262,102267],{"class":289},[152,107264,102270],{"class":289},[19,107266,104173],{},[270,107268,107270],{"className":272,"code":107269,"language":274,"meta":275,"style":275},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[277,107271,107272,107289,107298],{"__ignoreMap":275},[152,107273,107274,107276,107278,107280,107283,107285,107287],{"class":281,"line":282},[152,107275,31667],{"class":285},[152,107277,757],{"class":289},[152,107279,26726],{"class":293},[152,107281,107282],{"class":289}," mujoco-control",[152,107284,102312],{"class":289},[152,107286,102315],{"class":293},[152,107288,102318],{"class":293},[152,107290,107291,107293,107295],{"class":281,"line":303},[152,107292,31667],{"class":285},[152,107294,102325],{"class":289},[152,107296,107297],{"class":289}," mujoco-control\n",[152,107299,107300,107302,107304,107306],{"class":281,"line":310},[152,107301,25443],{"class":285},[152,107303,25446],{"class":289},[152,107305,102267],{"class":289},[152,107307,102270],{"class":289},[19,107309,102341],{},[416,107311,107312,107318,107325,107331],{},[419,107313,107314,107317],{},[277,107315,107316],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[419,107319,107320,107322,107323,29984],{},[277,107321,102413],{}," 长度等于 ",[277,107324,103495],{},[419,107326,83559,107327,107330],{},[277,107328,107329],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[419,107332,107333],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[1760,107335,102382],{"id":102381},[19,107337,107338],{},"关节决定 body 如何运动:",[270,107340,107342],{"className":54404,"code":107341,"language":54406,"meta":275,"style":275},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[277,107343,107344],{"__ignoreMap":275},[152,107345,107346,107348,107350,107352,107354,107357,107359,107361,107363,107366,107368,107371],{"class":281,"line":282},[152,107347,844],{"class":483},[152,107349,104293],{"class":52637},[152,107351,16535],{"class":285},[152,107353,1864],{"class":483},[152,107355,107356],{"class":289},"\"hinge\"",[152,107358,55161],{"class":285},[152,107360,1864],{"class":483},[152,107362,107356],{"class":289},[152,107364,107365],{"class":285}," axis",[152,107367,1864],{"class":483},[152,107369,107370],{"class":289},"\"0 1 0\"",[152,107372,102481],{"class":483},[19,107374,104389],{},[416,107376,107377,107382,107385],{},[419,107378,107379,107380],{},"名字是 ",[277,107381,107177],{},[419,107383,107384],{},"类型是旋转关节",[419,107386,107387],{},"绕 y 轴旋转",[19,107389,107390],{},"actuator 决定如何施加控制:",[270,107392,107394],{"className":54404,"code":107393,"language":54406,"meta":275,"style":275},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[277,107395,107396,107405,107451],{"__ignoreMap":275},[152,107397,107398,107400,107403],{"class":281,"line":282},[152,107399,844],{"class":483},[152,107401,107402],{"class":52637},"actuator",[152,107404,52644],{"class":483},[152,107406,107407,107409,107412,107414,107416,107419,107422,107424,107426,107429,107431,107433,107436,107438,107441,107444,107446,107449],{"class":281,"line":303},[152,107408,53481],{"class":483},[152,107410,107411],{"class":52637},"motor",[152,107413,16535],{"class":285},[152,107415,1864],{"class":483},[152,107417,107418],{"class":289},"\"hinge_motor\"",[152,107420,107421],{"class":285}," joint",[152,107423,1864],{"class":483},[152,107425,107356],{"class":289},[152,107427,107428],{"class":285}," gear",[152,107430,1864],{"class":483},[152,107432,5321],{"class":289},[152,107434,107435],{"class":285}," ctrlrange",[152,107437,1864],{"class":483},[152,107439,107440],{"class":289},"\"-2 2\"",[152,107442,107443],{"class":285}," ctrllimited",[152,107445,1864],{"class":483},[152,107447,107448],{"class":289},"\"true\"",[152,107450,102481],{"class":483},[152,107452,107453,107455,107457],{"class":281,"line":310},[152,107454,53122],{"class":483},[152,107456,107402],{"class":52637},[152,107458,52644],{"class":483},[19,107460,107461,107464,107465,29984],{},[277,107462,107463],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[277,107466,107467],{},"[-2, 2]",[14,107469,107471],{"id":107470},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107473,107474],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[23,107476,107477,107487],{},[26,107478,107479],{},[29,107480,107481,107483,107485],{},[32,107482,27364],{"align":34},[32,107484,104033],{"align":34},[32,107486,102071],{"align":34},[43,107488,107489,107499],{},[29,107490,107491,107493,107496],{},[48,107492,104293],{"align":34},[48,107494,107495],{"align":34},"定义能怎么动",[48,107497,107498],{"align":34},"门轴允许门旋转",[29,107500,107501,107503,107506],{},[48,107502,107402],{"align":34},[48,107504,107505],{"align":34},"定义怎么施力或控制",[48,107507,107508],{"align":34},"人推门、马达带动门",[19,107510,107511,107512,107514],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[277,107513,102413],{}," 主动控制它。",[19,107516,107517],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[14,107519,107521],{"id":107520},"hinge-joint","hinge joint",[270,107523,107525],{"className":54404,"code":107524,"language":54406,"meta":275,"style":275},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[277,107526,107527],{"__ignoreMap":275},[152,107528,107529,107531,107533,107535,107537,107539,107541,107543,107545,107547,107549,107551,107554,107556,107559],{"class":281,"line":282},[152,107530,844],{"class":483},[152,107532,104293],{"class":52637},[152,107534,16535],{"class":285},[152,107536,1864],{"class":483},[152,107538,107356],{"class":289},[152,107540,55161],{"class":285},[152,107542,1864],{"class":483},[152,107544,107356],{"class":289},[152,107546,107365],{"class":285},[152,107548,1864],{"class":483},[152,107550,107370],{"class":289},[152,107552,107553],{"class":285}," damping",[152,107555,1864],{"class":483},[152,107557,107558],{"class":289},"\"0.1\"",[152,107560,102481],{"class":483},[19,107562,107563],{},"含义：",[416,107565,107566,107572,107578],{},[419,107567,107568,107571],{},[277,107569,107570],{},"type=\"hinge\"","：只能绕一个轴旋转。",[419,107573,107574,107577],{},[277,107575,107576],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[419,107579,107580,107583],{},[277,107581,107582],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[14,107585,107587],{"id":107586},"motor-actuator","motor actuator",[270,107589,107591],{"className":54404,"code":107590,"language":54406,"meta":275,"style":275},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[277,107592,107593],{"__ignoreMap":275},[152,107594,107595,107597,107599,107601,107603,107605,107607,107609,107611,107613,107615,107617,107619,107621,107623,107625,107627,107629],{"class":281,"line":282},[152,107596,844],{"class":483},[152,107598,107411],{"class":52637},[152,107600,16535],{"class":285},[152,107602,1864],{"class":483},[152,107604,107418],{"class":289},[152,107606,107421],{"class":285},[152,107608,1864],{"class":483},[152,107610,107356],{"class":289},[152,107612,107428],{"class":285},[152,107614,1864],{"class":483},[152,107616,5321],{"class":289},[152,107618,107435],{"class":285},[152,107620,1864],{"class":483},[152,107622,107440],{"class":289},[152,107624,107443],{"class":285},[152,107626,1864],{"class":483},[152,107628,107448],{"class":289},[152,107630,102481],{"class":483},[19,107632,107563],{},[416,107634,107635,107644,107650,107656],{},[419,107636,107637,107640,107641,107643],{},[277,107638,107639],{},"joint=\"hinge\"","：这个电机作用在名为 ",[277,107642,107177],{}," 的关节上。",[419,107645,107646,107649],{},[277,107647,107648],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[419,107651,107652,107655],{},[277,107653,107654],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[419,107657,107658,107661],{},[277,107659,107660],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107663,107664],{},"简单理解：",[270,107666,107669],{"className":107667,"code":107668,"language":6829,"meta":275},[6827],"实际施加效果 ≈ data.ctrl[0] * gear\n",[277,107670,107668],{"__ignoreMap":275},[19,107672,107673],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[1760,107675,102590],{"id":102589},[270,107677,107679],{"className":31715,"code":107678,"language":31717,"meta":275,"style":275},"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",[277,107680,107681,107688,107692,107698,107708,107712,107716,107724,107729,107734,107738,107742,107747,107752,107756,107761,107766,107771,107776,107780,107784,107788,107793,107798,107803,107807,107811,107815,107819,107831,107843,107851,107855,107865,107875,107885,107889,107902,107915,107919,107936,107950,107985,107989,107993,108004,108019,108034,108046,108050,108054,108066],{"__ignoreMap":275},[152,107682,107683,107685],{"class":281,"line":282},[152,107684,31729],{"class":476},[152,107686,107687],{"class":483}," math\n",[152,107689,107690],{"class":281,"line":303},[152,107691,307],{"emptyLinePlaceholder":306},[152,107693,107694,107696],{"class":281,"line":310},[152,107695,31729],{"class":476},[152,107697,102638],{"class":483},[152,107699,107700,107702,107704,107706],{"class":281,"line":324},[152,107701,31729],{"class":476},[152,107703,32717],{"class":483},[152,107705,32720],{"class":476},[152,107707,32723],{"class":483},[152,107709,107710],{"class":281,"line":329},[152,107711,307],{"emptyLinePlaceholder":306},[152,107713,107714],{"class":281,"line":343},[152,107715,307],{"emptyLinePlaceholder":306},[152,107717,107718,107720,107722],{"class":281,"line":348},[152,107719,102651],{"class":293},[152,107721,15180],{"class":476},[152,107723,102656],{"class":289},[152,107725,107726],{"class":281,"line":362},[152,107727,107728],{"class":289},"\u003Cmujoco model=\"one_link_motor\">\n",[152,107730,107731],{"class":281,"line":367},[152,107732,107733],{"class":289},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[152,107735,107736],{"class":281,"line":381},[152,107737,307],{"emptyLinePlaceholder":306},[152,107739,107740],{"class":281,"line":386},[152,107741,102675],{"class":289},[152,107743,107744],{"class":281,"line":932},[152,107745,107746],{"class":289},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[152,107748,107749],{"class":281,"line":942},[152,107750,107751],{"class":289},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[152,107753,107754],{"class":281,"line":949},[152,107755,307],{"emptyLinePlaceholder":306},[152,107757,107758],{"class":281,"line":954},[152,107759,107760],{"class":289},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[152,107762,107763],{"class":281,"line":959},[152,107764,107765],{"class":289},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[152,107767,107768],{"class":281,"line":970},[152,107769,107770],{"class":289},"        \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",[152,107772,107773],{"class":281,"line":979},[152,107774,107775],{"class":289},"      \u003C\u002Fbody>\n",[152,107777,107778],{"class":281,"line":989},[152,107779,102704],{"class":289},[152,107781,107782],{"class":281,"line":996},[152,107783,102709],{"class":289},[152,107785,107786],{"class":281,"line":1001},[152,107787,307],{"emptyLinePlaceholder":306},[152,107789,107790],{"class":281,"line":1006},[152,107791,107792],{"class":289},"  \u003Cactuator>\n",[152,107794,107795],{"class":281,"line":1018},[152,107796,107797],{"class":289},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[152,107799,107800],{"class":281,"line":1027},[152,107801,107802],{"class":289},"  \u003C\u002Factuator>\n",[152,107804,107805],{"class":281,"line":1037},[152,107806,102714],{"class":289},[152,107808,107809],{"class":281,"line":1044},[152,107810,97035],{"class":289},[152,107812,107813],{"class":281,"line":1049},[152,107814,307],{"emptyLinePlaceholder":306},[152,107816,107817],{"class":281,"line":1054},[152,107818,307],{"emptyLinePlaceholder":306},[152,107820,107821,107823,107825,107827,107829],{"class":281,"line":1065},[152,107822,33284],{"class":476},[152,107824,3624],{"class":285},[152,107826,102735],{"class":483},[152,107828,97023],{"class":293},[152,107830,5382],{"class":483},[152,107832,107833,107835,107837,107839,107841],{"class":281,"line":1074},[152,107834,102744],{"class":483},[152,107836,1864],{"class":476},[152,107838,102749],{"class":483},[152,107840,102651],{"class":293},[152,107842,1825],{"class":483},[152,107844,107845,107847,107849],{"class":281,"line":1084},[152,107846,102758],{"class":483},[152,107848,1864],{"class":476},[152,107850,102763],{"class":483},[152,107852,107853],{"class":281,"line":1091},[152,107854,307],{"emptyLinePlaceholder":306},[152,107856,107857,107859,107861,107863],{"class":281,"line":1096},[152,107858,32636],{"class":293},[152,107860,1819],{"class":483},[152,107862,102776],{"class":289},[152,107864,102779],{"class":483},[152,107866,107867,107869,107871,107873],{"class":281,"line":1101},[152,107868,32636],{"class":293},[152,107870,1819],{"class":483},[152,107872,102788],{"class":289},[152,107874,102791],{"class":483},[152,107876,107877,107879,107881,107883],{"class":281,"line":1112},[152,107878,32636],{"class":293},[152,107880,1819],{"class":483},[152,107882,102800],{"class":289},[152,107884,102803],{"class":483},[152,107886,107887],{"class":281,"line":1121},[152,107888,307],{"emptyLinePlaceholder":306},[152,107890,107891,107893,107896,107898,107900],{"class":281,"line":1131},[152,107892,4744],{"class":476},[152,107894,107895],{"class":483}," model.nu ",[152,107897,22563],{"class":476},[152,107899,26729],{"class":293},[152,107901,5382],{"class":483},[152,107903,107904,107906,107908,107910,107913],{"class":281,"line":1138},[152,107905,104769],{"class":476},[152,107907,104772],{"class":293},[152,107909,1819],{"class":483},[152,107911,107912],{"class":289},"\"expected exactly one actuator\"",[152,107914,1825],{"class":483},[152,107916,107917],{"class":281,"line":1143},[152,107918,307],{"emptyLinePlaceholder":306},[152,107920,107921,107923,107925,107927,107929,107931,107934],{"class":281,"line":1148},[152,107922,4844],{"class":476},[152,107924,32953],{"class":483},[152,107926,27653],{"class":476},[152,107928,33780],{"class":293},[152,107930,1819],{"class":483},[152,107932,107933],{"class":293},"2000",[152,107935,32123],{"class":483},[152,107937,107938,107941,107943,107945,107947],{"class":281,"line":1159},[152,107939,107940],{"class":483},"        t ",[152,107942,1864],{"class":476},[152,107944,32953],{"class":483},[152,107946,2263],{"class":476},[152,107948,107949],{"class":483}," model.opt.timestep\n",[152,107951,107952,107955,107957,107959,107961,107964,107966,107969,107971,107973,107976,107978,107980,107982],{"class":281,"line":1168},[152,107953,107954],{"class":483},"        data.ctrl[",[152,107956,2000],{"class":293},[152,107958,6085],{"class":483},[152,107960,1864],{"class":476},[152,107962,107963],{"class":293}," 1.5",[152,107965,8160],{"class":476},[152,107967,107968],{"class":483}," math.sin(",[152,107970,106597],{"class":293},[152,107972,8160],{"class":476},[152,107974,107975],{"class":483}," math.pi ",[152,107977,2263],{"class":476},[152,107979,63204],{"class":293},[152,107981,8160],{"class":476},[152,107983,107984],{"class":483}," t)\n",[152,107986,107987],{"class":281,"line":1178},[152,107988,102853],{"class":483},[152,107990,107991],{"class":281,"line":1185},[152,107992,307],{"emptyLinePlaceholder":306},[152,107994,107995,107997,107999,108002],{"class":281,"line":1190},[152,107996,32636],{"class":293},[152,107998,1819],{"class":483},[152,108000,108001],{"class":289},"\"time:\"",[152,108003,102815],{"class":483},[152,108005,108006,108008,108010,108013,108015,108017],{"class":281,"line":1195},[152,108007,32636],{"class":293},[152,108009,1819],{"class":483},[152,108011,108012],{"class":289},"\"joint qpos:\"",[152,108014,106267],{"class":483},[152,108016,2101],{"class":293},[152,108018,31834],{"class":483},[152,108020,108021,108023,108025,108028,108030,108032],{"class":281,"line":1206},[152,108022,32636],{"class":293},[152,108024,1819],{"class":483},[152,108026,108027],{"class":289},"\"joint qvel:\"",[152,108029,106283],{"class":483},[152,108031,2101],{"class":293},[152,108033,31834],{"class":483},[152,108035,108036,108038,108040,108043],{"class":281,"line":1215},[152,108037,32636],{"class":293},[152,108039,1819],{"class":483},[152,108041,108042],{"class":289},"\"last ctrl:\"",[152,108044,108045],{"class":483},", data.ctrl.copy())\n",[152,108047,108048],{"class":281,"line":1225},[152,108049,307],{"emptyLinePlaceholder":306},[152,108051,108052],{"class":281,"line":1232},[152,108053,307],{"emptyLinePlaceholder":306},[152,108055,108056,108058,108060,108062,108064],{"class":281,"line":1237},[152,108057,3202],{"class":476},[152,108059,32557],{"class":293},[152,108061,102896],{"class":476},[152,108063,102899],{"class":289},[152,108065,5382],{"class":483},[152,108067,108068],{"class":281,"line":1242},[152,108069,102906],{"class":483},[19,108071,104907],{},[270,108073,108075],{"className":272,"code":108074,"language":274,"meta":275,"style":275},"touch ch4_joint_motor.py\n",[277,108076,108077],{"__ignoreMap":275},[152,108078,108079,108081],{"class":281,"line":282},[152,108080,102620],{"class":285},[152,108082,108083],{"class":289}," ch4_joint_motor.py\n",[19,108085,103638],{},[270,108087,108089],{"className":272,"code":108088,"language":274,"meta":275,"style":275},"python ch4_joint_motor.py\n",[277,108090,108091],{"__ignoreMap":275},[152,108092,108093,108095],{"class":281,"line":282},[152,108094,31717],{"class":285},[152,108096,108083],{"class":289},[14,108098,102909],{"id":102909},[19,108100,108101],{},"检查 actuator 数量：",[270,108103,108105],{"className":31715,"code":108104,"language":31717,"meta":275,"style":275},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[277,108106,108107,108119],{"__ignoreMap":275},[152,108108,108109,108111,108113,108115,108117],{"class":281,"line":282},[152,108110,3202],{"class":476},[152,108112,107895],{"class":483},[152,108114,22563],{"class":476},[152,108116,26729],{"class":293},[152,108118,5382],{"class":483},[152,108120,108121,108123,108125,108127,108129],{"class":281,"line":303},[152,108122,105232],{"class":476},[152,108124,104772],{"class":293},[152,108126,1819],{"class":483},[152,108128,107912],{"class":289},[152,108130,1825],{"class":483},[19,108132,108133,108135,108136,108138],{},[277,108134,103495],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[277,108137,102413],{}," 长度应该是 1。",[19,108140,108141],{},"产生正弦控制信号：",[270,108143,108145],{"className":31715,"code":108144,"language":31717,"meta":275,"style":275},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[277,108146,108147],{"__ignoreMap":275},[152,108148,108149,108151,108153,108155,108157,108159,108161,108163,108165,108167,108169,108171,108173,108175],{"class":281,"line":282},[152,108150,107208],{"class":483},[152,108152,2000],{"class":293},[152,108154,6085],{"class":483},[152,108156,1864],{"class":476},[152,108158,107963],{"class":293},[152,108160,8160],{"class":476},[152,108162,107968],{"class":483},[152,108164,106597],{"class":293},[152,108166,8160],{"class":476},[152,108168,107975],{"class":483},[152,108170,2263],{"class":476},[152,108172,63204],{"class":293},[152,108174,8160],{"class":476},[152,108176,107984],{"class":483},[19,108178,108179],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108181,103010],{},[270,108183,108184],{"className":31715,"code":105842,"language":31717,"meta":275,"style":275},[277,108185,108186],{"__ignoreMap":275},[152,108187,108188],{"class":281,"line":282},[152,108189,105842],{"class":483},[19,108191,108192],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[14,108194,103045],{"id":103045},[270,108196,108198],{"className":31715,"code":108197,"language":31717,"meta":275,"style":275},"import math\n",[277,108199,108200],{"__ignoreMap":275},[152,108201,108202,108204],{"class":281,"line":282},[152,108203,31729],{"class":476},[152,108205,107687],{"class":483},[19,108207,108208,108209,102355,108212,108215],{},"导入 Python 标准库里的数学模块。后面要用 ",[277,108210,108211],{},"math.sin",[277,108213,108214],{},"math.pi"," 生成周期变化的控制信号。",[270,108217,108218],{"className":31715,"code":105023,"language":31717,"meta":275,"style":275},[277,108219,108220,108226],{"__ignoreMap":275},[152,108221,108222,108224],{"class":281,"line":282},[152,108223,31729],{"class":476},[152,108225,102638],{"class":483},[152,108227,108228,108230,108232,108234],{"class":281,"line":303},[152,108229,31729],{"class":476},[152,108231,32717],{"class":483},[152,108233,32720],{"class":476},[152,108235,32723],{"class":483},[19,108237,108238],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[270,108240,108241],{"className":54404,"code":107524,"language":54406,"meta":275,"style":275},[277,108242,108243],{"__ignoreMap":275},[152,108244,108245,108247,108249,108251,108253,108255,108257,108259,108261,108263,108265,108267,108269,108271,108273],{"class":281,"line":282},[152,108246,844],{"class":483},[152,108248,104293],{"class":52637},[152,108250,16535],{"class":285},[152,108252,1864],{"class":483},[152,108254,107356],{"class":289},[152,108256,55161],{"class":285},[152,108258,1864],{"class":483},[152,108260,107356],{"class":289},[152,108262,107365],{"class":285},[152,108264,1864],{"class":483},[152,108266,107370],{"class":289},[152,108268,107553],{"class":285},[152,108270,1864],{"class":483},[152,108272,107558],{"class":289},[152,108274,102481],{"class":483},[19,108276,108277,108278,108280,108281,108283,108284,108286],{},"这行定义关节。",[277,108279,107177],{}," 表示旋转关节。",[277,108282,107576],{}," 表示绕 y 轴旋转。",[277,108285,107582],{}," 表示有一点阻尼，运动不会完全无损耗。",[270,108288,108290],{"className":54404,"code":108289,"language":54406,"meta":275,"style":275},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[277,108291,108292],{"__ignoreMap":275},[152,108293,108294,108296,108298,108300,108302,108305,108307,108309,108312,108315,108317,108320,108322,108324,108326,108328,108330,108333],{"class":281,"line":282},[152,108295,844],{"class":483},[152,108297,102457],{"class":52637},[152,108299,16535],{"class":285},[152,108301,1864],{"class":483},[152,108303,108304],{"class":289},"\"link_geom\"",[152,108306,55161],{"class":285},[152,108308,1864],{"class":483},[152,108310,108311],{"class":289},"\"capsule\"",[152,108313,108314],{"class":285}," fromto",[152,108316,1864],{"class":483},[152,108318,108319],{"class":289},"\"0 0 0 0 0 0.5\"",[152,108321,102473],{"class":285},[152,108323,1864],{"class":483},[152,108325,105115],{"class":289},[152,108327,103338],{"class":285},[152,108329,1864],{"class":483},[152,108331,108332],{"class":289},"\"0.5\"",[152,108334,102481],{"class":483},[19,108336,108337,108338,108340,108341,108343,108344,108347,108348,29984,108351,108353],{},"这行定义摆杆的形状。",[277,108339,104502],{}," 是胶囊体，适合表示杆子。",[277,108342,104513],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[277,108345,108346],{},"(0,0,0)"," 延伸到 ",[277,108349,108350],{},"(0,0,0.5)",[277,108352,104507],{}," 是半径。",[270,108355,108356],{"className":54404,"code":107590,"language":54406,"meta":275,"style":275},[277,108357,108358],{"__ignoreMap":275},[152,108359,108360,108362,108364,108366,108368,108370,108372,108374,108376,108378,108380,108382,108384,108386,108388,108390,108392,108394],{"class":281,"line":282},[152,108361,844],{"class":483},[152,108363,107411],{"class":52637},[152,108365,16535],{"class":285},[152,108367,1864],{"class":483},[152,108369,107418],{"class":289},[152,108371,107421],{"class":285},[152,108373,1864],{"class":483},[152,108375,107356],{"class":289},[152,108377,107428],{"class":285},[152,108379,1864],{"class":483},[152,108381,5321],{"class":289},[152,108383,107435],{"class":285},[152,108385,1864],{"class":483},[152,108387,107440],{"class":289},[152,108389,107443],{"class":285},[152,108391,1864],{"class":483},[152,108393,107448],{"class":289},[152,108395,102481],{"class":483},[19,108397,108398,108399,108401,108402,108405,108406,108408],{},"这行定义电机。它作用在 ",[277,108400,107177],{}," 关节上。",[277,108403,108404],{},"gear"," 可以理解成放大倍数。",[277,108407,107192],{}," 限制控制输入范围。",[270,108410,108411],{"className":31715,"code":108104,"language":31717,"meta":275,"style":275},[277,108412,108413,108425],{"__ignoreMap":275},[152,108414,108415,108417,108419,108421,108423],{"class":281,"line":282},[152,108416,3202],{"class":476},[152,108418,107895],{"class":483},[152,108420,22563],{"class":476},[152,108422,26729],{"class":293},[152,108424,5382],{"class":483},[152,108426,108427,108429,108431,108433,108435],{"class":281,"line":303},[152,108428,105232],{"class":476},[152,108430,104772],{"class":293},[152,108432,1819],{"class":483},[152,108434,107912],{"class":289},[152,108436,1825],{"class":483},[19,108438,108439,108441],{},[277,108440,103495],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[270,108443,108445],{"className":31715,"code":108444,"language":31717,"meta":275,"style":275},"for step in range(2000):\n",[277,108446,108447],{"__ignoreMap":275},[152,108448,108449,108451,108453,108455,108457,108459,108461],{"class":281,"line":282},[152,108450,4668],{"class":476},[152,108452,32953],{"class":483},[152,108454,27653],{"class":476},[152,108456,33780],{"class":293},[152,108458,1819],{"class":483},[152,108460,107933],{"class":293},[152,108462,32123],{"class":483},[19,108464,108465,108466,108468,108469,108472],{},"循环 2000 步。这里没有用 ",[277,108467,2797],{},"，而是用 ",[277,108470,108471],{},"step","，因为后面要用当前步数计算时间。",[270,108474,108476],{"className":31715,"code":108475,"language":31717,"meta":275,"style":275},"t = step * model.opt.timestep\n",[277,108477,108478],{"__ignoreMap":275},[152,108479,108480,108483,108485,108487,108489],{"class":281,"line":282},[152,108481,108482],{"class":483},"t ",[152,108484,1864],{"class":476},[152,108486,32953],{"class":483},[152,108488,2263],{"class":476},[152,108490,107949],{"class":483},[19,108492,108493],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[270,108495,108496],{"className":31715,"code":108144,"language":31717,"meta":275,"style":275},[277,108497,108498],{"__ignoreMap":275},[152,108499,108500,108502,108504,108506,108508,108510,108512,108514,108516,108518,108520,108522,108524,108526],{"class":281,"line":282},[152,108501,107208],{"class":483},[152,108503,2000],{"class":293},[152,108505,6085],{"class":483},[152,108507,1864],{"class":476},[152,108509,107963],{"class":293},[152,108511,8160],{"class":476},[152,108513,107968],{"class":483},[152,108515,106597],{"class":293},[152,108517,8160],{"class":476},[152,108519,107975],{"class":483},[152,108521,2263],{"class":476},[152,108523,63204],{"class":293},[152,108525,8160],{"class":476},[152,108527,107984],{"class":483},[19,108529,108530],{},"这行给电机输入一个正弦波。拆开看：",[416,108532,108533,108539,108545],{},[419,108534,108535,108538],{},[277,108536,108537],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[419,108540,108541,108544],{},[277,108542,108543],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[419,108546,108547,108550],{},[277,108548,108549],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108552,108553],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[270,108555,108557],{"className":31715,"code":108556,"language":31717,"meta":275,"style":275},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[277,108558,108559],{"__ignoreMap":275},[152,108560,108561,108563,108565,108567,108569,108571],{"class":281,"line":282},[152,108562,31752],{"class":293},[152,108564,1819],{"class":483},[152,108566,108012],{"class":289},[152,108568,106267],{"class":483},[152,108570,2101],{"class":293},[152,108572,31834],{"class":483},[19,108574,108575,108576,108578],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[277,108577,102407],{}," 只有一个数。",[1760,108580,103653],{"id":103652},[19,108582,108583],{},"输出类似:",[270,108585,108588],{"className":108586,"code":108587,"language":6829,"meta":275},[6827],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[277,108589,108587],{"__ignoreMap":275},[19,108591,108592,108593,108595],{},"这里 ",[277,108594,107463],{}," 是电机输入。",[19,108597,108598,108601,108602,108605],{},[277,108599,108600],{},"joint qpos"," 是关节角度，单位通常是弧度。",[277,108603,108604],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108607,108608],{},"角度单位提示：",[270,108610,108613],{"className":108611,"code":108612,"language":6829,"meta":275},[6827],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[277,108614,108612],{"__ignoreMap":275},[19,108616,108617,108618,108620,108621,108623],{},"如果你看到 ",[277,108619,105367],{}," 是 ",[277,108622,36666],{},"，大约就是 28.6 度。",[1760,108625,103685],{"id":103684},[416,108627,108628,108635,108638,108645,108648,108656,108664],{},[419,108629,103748,108630,103751,108632,29984],{},[277,108631,107648],{},[277,108633,108634],{},"gear=\"5\"",[419,108636,108637],{},"重新运行，观察关节运动是否更剧烈。",[419,108639,103748,108640,103751,108642,29984],{},[277,108641,107192],{},[277,108643,108644],{},"-0.2 0.2",[419,108646,108647],{},"重新运行，观察控制能力是否变弱。",[419,108649,108650,108651,108653,108654,29984],{},"去掉 actuator，确认 ",[277,108652,103495],{}," 变成 ",[277,108655,2000],{},[419,108657,103748,108658,103751,108660,108663],{},[277,108659,107582],{},[277,108661,108662],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[419,108665,103748,108666,103751,108668,108671],{},[277,108667,107576],{},[277,108669,108670],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[1760,108673,103790],{"id":103789},[14,108675,108677],{"id":108676},"indexerror-index-0-is-out-of-bounds",[277,108678,108679],{},"IndexError: index 0 is out of bounds",[19,108681,108682,108683,108685],{},"原因是 ",[277,108684,107329],{},"，没有 actuator。",[14,108687,108688],{"id":108688},"关节几乎不动",[19,108690,108691],{},"可能原因:",[416,108693,108694,108699,108703,108709],{},[419,108695,108696,108698],{},[277,108697,108404],{}," 太小",[419,108700,108701,108698],{},[277,108702,107192],{},[419,108704,108705,108708],{},[277,108706,108707],{},"damping"," 太大",[419,108710,108711],{},"重力方向导致运动不明显",[14,108713,108714],{"id":108714},"模型编译失败",[19,108716,108717,108718,108720],{},"检查 actuator 引用的 ",[277,108719,107639],{}," 是否存在，joint 名称是否拼写一致。",[14,108722,108724,108726],{"id":108723},"datactrl0-写了但没有效果",[277,108725,107463],{}," 写了但没有效果",[19,108728,103912],{},[416,108730,108731,108736,108739,108744,108749],{},[419,108732,108733,108735],{},[277,108734,103495],{}," 是否大于 0。",[419,108737,108738],{},"motor 是否引用了正确 joint。",[419,108740,108741,108743],{},[277,108742,108404],{}," 是否太小。",[419,108745,108746,108748],{},[277,108747,107192],{}," 是否把输入限制得太小。",[419,108750,108751],{},"body 是否真的有可动 joint。",[14,108753,108754],{"id":108754},"控制输入超过范围会怎样",[19,108756,108757],{},"如果设置了：",[270,108759,108761],{"className":54404,"code":108760,"language":54406,"meta":275,"style":275},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[277,108762,108763],{"__ignoreMap":275},[152,108764,108765],{"class":281,"line":282},[152,108766,108760],{"class":483},[19,108768,108769],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[270,108771,108773],{"className":31715,"code":108772,"language":31717,"meta":275,"style":275},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[277,108774,108775,108795],{"__ignoreMap":275},[152,108776,108777,108780,108782,108785,108787,108789,108791,108793],{"class":281,"line":282},[152,108778,108779],{"class":483},"action ",[152,108781,1864],{"class":476},[152,108783,108784],{"class":483}," np.clip(action, ",[152,108786,2340],{"class":476},[152,108788,106597],{"class":293},[152,108790,14051],{"class":483},[152,108792,106597],{"class":293},[152,108794,1825],{"class":483},[152,108796,108797,108799,108801,108803,108805],{"class":281,"line":303},[152,108798,107208],{"class":483},[152,108800,2000],{"class":293},[152,108802,6085],{"class":483},[152,108804,1864],{"class":476},[152,108806,108807],{"class":483}," action\n",[1760,108809,103944],{"id":103943},[19,108811,108812],{},"这一章建立了控制任务的基本形式：",[270,108814,108817],{"className":108815,"code":108816,"language":6829,"meta":275},[6827],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[277,108818,108816],{"__ignoreMap":275},[19,108820,108821],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1736,108823,108824],{},"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":275,"searchDepth":303,"depth":303,"links":108826},[108827,108828,108829,108834,108838,108839,108840,108848],{"id":101983,"depth":303,"text":101984},{"id":102106,"depth":303,"text":102107},{"id":102381,"depth":303,"text":102382,"children":108830},[108831,108832,108833],{"id":107470,"depth":310,"text":107471},{"id":107520,"depth":310,"text":107521},{"id":107586,"depth":310,"text":107587},{"id":102589,"depth":303,"text":102590,"children":108835},[108836,108837],{"id":102909,"depth":310,"text":102909},{"id":103045,"depth":310,"text":103045},{"id":103652,"depth":303,"text":103653},{"id":103684,"depth":303,"text":103685},{"id":103789,"depth":303,"text":103790,"children":108841},[108842,108843,108844,108845,108847],{"id":108676,"depth":310,"text":108679},{"id":108688,"depth":310,"text":108688},{"id":108714,"depth":310,"text":108714},{"id":108723,"depth":310,"text":108846},"data.ctrl[0] 写了但没有效果",{"id":108754,"depth":310,"text":108754},{"id":103943,"depth":303,"text":103944},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107158,"description":275},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108855,"title":108856,"body":108857,"description":275,"extension":1744,"meta":110766,"navigation":306,"path":110767,"seo":110768,"stem":110769,"__hash__":110770},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108858,"toc":110742},[108859,108862,108864,108867,108875,108878,108895,108898,108923,108926,108972,108974,108976,109031,109033,109052,109054,109097,109100,109117,109120,109136,109146,109153,109155,109158,109161,109195,109198,109246,109250,109253,109267,109276,109280,109283,109308,109311,109315,109328,109331,109337,109340,109355,109357,109360,109620,109622,109634,109637,109949,109951,109963,109965,109968,109983,109988,109991,110013,110016,110019,110053,110056,110060,110071,110074,110091,110094,110108,110115,110135,110142,110156,110159,110171,110186,110206,110209,110231,110234,110238,110253,110264,110279,110282,110312,110328,110357,110365,110389,110392,110410,110420,110432,110439,110448,110454,110463,110466,110468,110477,110480,110495,110497,110500,110511,110514,110525,110528,110546,110548,110565,110568,110596,110598,110602,110605,110635,110641,110644,110648,110656,110659,110661,110682,110685,110688,110704,110707,110723,110725,110728,110739],[10,108860,108856],{"id":108861},"_5viewer-可视化与-renderer-离屏渲染",[1760,108863,101984],{"id":101983},[19,108865,108866],{},"本章掌握两类可视化方式:",[416,108868,108869,108872],{},[419,108870,108871],{},"交互式 viewer: 适合人工观察仿真",[419,108873,108874],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108876,108877],{},"使用官方接口:",[270,108879,108881],{"className":31715,"code":108880,"language":31717,"meta":275,"style":275},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[277,108882,108883,108890],{"__ignoreMap":275},[152,108884,108885,108887],{"class":281,"line":282},[152,108886,31729],{"class":476},[152,108888,108889],{"class":483}," mujoco.viewer\n",[152,108891,108892],{"class":281,"line":303},[152,108893,108894],{"class":483},"mujoco.viewer.launch_passive(model, data)\n",[19,108896,108897],{},"以及:",[270,108899,108901],{"className":31715,"code":108900,"language":31717,"meta":275,"style":275},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[277,108902,108903,108913],{"__ignoreMap":275},[152,108904,108905,108908,108910],{"class":281,"line":282},[152,108906,108907],{"class":483},"renderer ",[152,108909,1864],{"class":476},[152,108911,108912],{"class":483}," mujoco.Renderer(model)\n",[152,108914,108915,108918,108920],{"class":281,"line":303},[152,108916,108917],{"class":483},"image ",[152,108919,1864],{"class":476},[152,108921,108922],{"class":483}," renderer.render()\n",[19,108924,108925],{},"新手建议先理解二者区别：",[23,108927,108928,108944],{},[26,108929,108930],{},[29,108931,108932,108935,108938,108941],{},[32,108933,108934],{"align":34},"工具",[32,108936,108937],{"align":34},"用途",[32,108939,108940],{"align":34},"是否打开窗口",[32,108942,108943],{"align":34},"常见场景",[43,108945,108946,108959],{},[29,108947,108948,108951,108954,108956],{},[48,108949,108950],{"align":34},"Viewer",[48,108952,108953],{"align":34},"人眼实时观察仿真",[48,108955,106002],{"align":34},[48,108957,108958],{"align":34},"调试模型、看控制效果",[29,108960,108961,108964,108967,108969],{},[48,108962,108963],{"align":34},"Renderer",[48,108965,108966],{"align":34},"生成图像数组",[48,108968,106015],{"align":34},[48,108970,108971],{"align":34},"保存图片、训练视觉策略、服务器批量采集",[1760,108973,102107],{"id":102106},[19,108975,102110],{},[270,108977,108979],{"className":272,"code":108978,"language":274,"meta":275,"style":275},"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",[277,108980,108981,108993,109003,109011,109019],{"__ignoreMap":275},[152,108982,108983,108985,108987,108989,108991],{"class":281,"line":282},[152,108984,26188],{"class":285},[152,108986,27921],{"class":289},[152,108988,25446],{"class":289},[152,108990,28005],{"class":293},[152,108992,878],{"class":293},[152,108994,108995,108997,108999,109001],{"class":281,"line":303},[152,108996,102145],{"class":289},[152,108998,102148],{"class":289},[152,109000,102151],{"class":289},[152,109002,878],{"class":293},[152,109004,109005,109007,109009],{"class":281,"line":310},[152,109006,102158],{"class":289},[152,109008,102161],{"class":289},[152,109010,878],{"class":293},[152,109012,109013,109015,109017],{"class":281,"line":324},[152,109014,102168],{"class":289},[152,109016,102171],{"class":289},[152,109018,878],{"class":293},[152,109020,109021,109023,109025,109027,109029],{"class":281,"line":329},[152,109022,102178],{"class":289},[152,109024,102181],{"class":289},[152,109026,102184],{"class":289},[152,109028,102187],{"class":289},[152,109030,103853],{"class":289},[19,109032,104156],{},[270,109034,109036],{"className":272,"code":109035,"language":274,"meta":275,"style":275},"pip install \"mujoco>=2.3\" numpy pillow\n",[277,109037,109038],{"__ignoreMap":275},[152,109039,109040,109042,109044,109046,109049],{"class":281,"line":282},[152,109041,25443],{"class":285},[152,109043,25446],{"class":289},[152,109045,102267],{"class":289},[152,109047,109048],{"class":289}," numpy",[152,109050,109051],{"class":289}," pillow\n",[19,109053,104173],{},[270,109055,109057],{"className":272,"code":109056,"language":274,"meta":275,"style":275},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[277,109058,109059,109076,109085],{"__ignoreMap":275},[152,109060,109061,109063,109065,109067,109070,109072,109074],{"class":281,"line":282},[152,109062,31667],{"class":285},[152,109064,757],{"class":289},[152,109066,26726],{"class":293},[152,109068,109069],{"class":289}," mujoco-render",[152,109071,102312],{"class":289},[152,109073,102315],{"class":293},[152,109075,102318],{"class":293},[152,109077,109078,109080,109082],{"class":281,"line":303},[152,109079,31667],{"class":285},[152,109081,102325],{"class":289},[152,109083,109084],{"class":289}," mujoco-render\n",[152,109086,109087,109089,109091,109093,109095],{"class":281,"line":310},[152,109088,25443],{"class":285},[152,109090,25446],{"class":289},[152,109092,102267],{"class":289},[152,109094,109048],{"class":289},[152,109096,109051],{"class":289},[19,109098,109099],{},"离屏渲染后端:",[270,109101,109103],{"className":272,"code":109102,"language":274,"meta":275,"style":275},"export MUJOCO_GL=egl\n",[277,109104,109105],{"__ignoreMap":275},[152,109106,109107,109109,109112,109114],{"class":281,"line":282},[152,109108,26653],{"class":476},[152,109110,109111],{"class":483}," MUJOCO_GL",[152,109113,1864],{"class":476},[152,109115,109116],{"class":483},"egl\n",[19,109118,109119],{},"或:",[270,109121,109123],{"className":272,"code":109122,"language":274,"meta":275,"style":275},"export MUJOCO_GL=osmesa\n",[277,109124,109125],{"__ignoreMap":275},[152,109126,109127,109129,109131,109133],{"class":281,"line":282},[152,109128,26653],{"class":476},[152,109130,109111],{"class":483},[152,109132,1864],{"class":476},[152,109134,109135],{"class":483},"osmesa\n",[19,109137,109138,109139,109142,109143,29984],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[277,109140,109141],{},"egl"," 失败，再尝试 ",[277,109144,109145],{},"osmesa",[19,109147,109148,109149,109152],{},"如果你在本机桌面环境运行，通常先不要设置 ",[277,109150,109151],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[1760,109154,102382],{"id":102381},[19,109156,109157],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109159,109160],{},"典型 viewer 流程:",[270,109162,109164],{"className":31715,"code":109163,"language":31717,"meta":275,"style":275},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[277,109165,109166,109179,109186,109190],{"__ignoreMap":275},[152,109167,109168,109171,109174,109176],{"class":281,"line":282},[152,109169,109170],{"class":476},"with",[152,109172,109173],{"class":483}," mujoco.viewer.launch_passive(model, data) ",[152,109175,32720],{"class":476},[152,109177,109178],{"class":483}," viewer:\n",[152,109180,109181,109183],{"class":281,"line":303},[152,109182,3902],{"class":476},[152,109184,109185],{"class":483}," viewer.is_running():\n",[152,109187,109188],{"class":281,"line":310},[152,109189,102853],{"class":483},[152,109191,109192],{"class":281,"line":324},[152,109193,109194],{"class":483},"        viewer.sync()\n",[19,109196,109197],{},"典型 renderer 流程:",[270,109199,109201],{"className":31715,"code":109200,"language":31717,"meta":275,"style":275},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[277,109202,109203,109229,109233,109238],{"__ignoreMap":275},[152,109204,109205,109207,109209,109212,109214,109216,109218,109220,109222,109224,109227],{"class":281,"line":282},[152,109206,108907],{"class":483},[152,109208,1864],{"class":476},[152,109210,109211],{"class":483}," mujoco.Renderer(model, ",[152,109213,26592],{"class":6858},[152,109215,1864],{"class":476},[152,109217,43679],{"class":293},[152,109219,14051],{"class":483},[152,109221,26588],{"class":6858},[152,109223,1864],{"class":476},[152,109225,109226],{"class":293},"640",[152,109228,1825],{"class":483},[152,109230,109231],{"class":281,"line":303},[152,109232,105842],{"class":483},[152,109234,109235],{"class":281,"line":310},[152,109236,109237],{"class":483},"renderer.update_scene(data)\n",[152,109239,109240,109242,109244],{"class":281,"line":324},[152,109241,108917],{"class":483},[152,109243,1864],{"class":476},[152,109245,108922],{"class":483},[14,109247,109249],{"id":109248},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109251,109252],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[270,109254,109256],{"className":31715,"code":109255,"language":31717,"meta":275,"style":275},"mujoco.mj_step(model, data)\nviewer.sync()\n",[277,109257,109258,109262],{"__ignoreMap":275},[152,109259,109260],{"class":281,"line":282},[152,109261,105842],{"class":483},[152,109263,109264],{"class":281,"line":303},[152,109265,109266],{"class":483},"viewer.sync()\n",[19,109268,109269,109271,109272,109275],{},[277,109270,102552],{}," 负责算物理，",[277,109273,109274],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[14,109277,109279],{"id":109278},"为什么要-sleep","为什么要 sleep",[19,109281,109282],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[270,109284,109286],{"className":31715,"code":109285,"language":31717,"meta":275,"style":275},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[277,109287,109288],{"__ignoreMap":275},[152,109289,109290,109293,109295,109298,109300,109303,109305],{"class":281,"line":282},[152,109291,109292],{"class":483},"sleep_time ",[152,109294,1864],{"class":476},[152,109296,109297],{"class":483}," model.opt.timestep ",[152,109299,2340],{"class":476},[152,109301,109302],{"class":483}," (time.time() ",[152,109304,2340],{"class":476},[152,109306,109307],{"class":483}," step_start)\n",[19,109309,109310],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[14,109312,109314],{"id":109313},"renderer-输出是什么","renderer 输出是什么",[270,109316,109318],{"className":31715,"code":109317,"language":31717,"meta":275,"style":275},"image = renderer.render()\n",[277,109319,109320],{"__ignoreMap":275},[152,109321,109322,109324,109326],{"class":281,"line":282},[152,109323,108917],{"class":483},[152,109325,1864],{"class":476},[152,109327,108922],{"class":483},[19,109329,109330],{},"得到的是 NumPy 数组，形状通常是：",[270,109332,109335],{"className":109333,"code":109334,"language":6829,"meta":275},[6827],"(height, width, 3)\n",[277,109336,109334],{"__ignoreMap":275},[19,109338,109339],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[270,109341,109343],{"className":31715,"code":109342,"language":31717,"meta":275,"style":275},"Image.fromarray(image).save(\"render_output.png\")\n",[277,109344,109345],{"__ignoreMap":275},[152,109346,109347,109350,109353],{"class":281,"line":282},[152,109348,109349],{"class":483},"Image.fromarray(image).save(",[152,109351,109352],{"class":289},"\"render_output.png\"",[152,109354,1825],{"class":483},[1760,109356,102590],{"id":102589},[19,109358,109359],{},"交互式 Viewer:",[270,109361,109363],{"className":31715,"code":109362,"language":31717,"meta":275,"style":275},"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",[277,109364,109365,109371,109375,109381,109387,109391,109395,109403,109408,109412,109416,109420,109425,109430,109434,109438,109442,109447,109451,109455,109459,109463,109467,109471,109483,109495,109503,109507,109517,109537,109547,109552,109557,109561,109578,109591,109596,109600,109604,109616],{"__ignoreMap":275},[152,109366,109367,109369],{"class":281,"line":282},[152,109368,31729],{"class":476},[152,109370,33166],{"class":483},[152,109372,109373],{"class":281,"line":303},[152,109374,307],{"emptyLinePlaceholder":306},[152,109376,109377,109379],{"class":281,"line":310},[152,109378,31729],{"class":476},[152,109380,102638],{"class":483},[152,109382,109383,109385],{"class":281,"line":324},[152,109384,31729],{"class":476},[152,109386,108889],{"class":483},[152,109388,109389],{"class":281,"line":329},[152,109390,307],{"emptyLinePlaceholder":306},[152,109392,109393],{"class":281,"line":343},[152,109394,307],{"emptyLinePlaceholder":306},[152,109396,109397,109399,109401],{"class":281,"line":348},[152,109398,102651],{"class":293},[152,109400,15180],{"class":476},[152,109402,102656],{"class":289},[152,109404,109405],{"class":281,"line":362},[152,109406,109407],{"class":289},"\u003Cmujoco model=\"viewer_demo\">\n",[152,109409,109410],{"class":281,"line":367},[152,109411,102666],{"class":289},[152,109413,109414],{"class":281,"line":381},[152,109415,307],{"emptyLinePlaceholder":306},[152,109417,109418],{"class":281,"line":386},[152,109419,102675],{"class":289},[152,109421,109422],{"class":281,"line":932},[152,109423,109424],{"class":289},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[152,109426,109427],{"class":281,"line":942},[152,109428,109429],{"class":289},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[152,109431,109432],{"class":281,"line":949},[152,109433,307],{"emptyLinePlaceholder":306},[152,109435,109436],{"class":281,"line":954},[152,109437,102689],{"class":289},[152,109439,109440],{"class":281,"line":959},[152,109441,102694],{"class":289},[152,109443,109444],{"class":281,"line":970},[152,109445,109446],{"class":289},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[152,109448,109449],{"class":281,"line":979},[152,109450,102704],{"class":289},[152,109452,109453],{"class":281,"line":989},[152,109454,102709],{"class":289},[152,109456,109457],{"class":281,"line":996},[152,109458,102714],{"class":289},[152,109460,109461],{"class":281,"line":1001},[152,109462,97035],{"class":289},[152,109464,109465],{"class":281,"line":1006},[152,109466,307],{"emptyLinePlaceholder":306},[152,109468,109469],{"class":281,"line":1018},[152,109470,307],{"emptyLinePlaceholder":306},[152,109472,109473,109475,109477,109479,109481],{"class":281,"line":1027},[152,109474,33284],{"class":476},[152,109476,3624],{"class":285},[152,109478,102735],{"class":483},[152,109480,97023],{"class":293},[152,109482,5382],{"class":483},[152,109484,109485,109487,109489,109491,109493],{"class":281,"line":1037},[152,109486,102744],{"class":483},[152,109488,1864],{"class":476},[152,109490,102749],{"class":483},[152,109492,102651],{"class":293},[152,109494,1825],{"class":483},[152,109496,109497,109499,109501],{"class":281,"line":1044},[152,109498,102758],{"class":483},[152,109500,1864],{"class":476},[152,109502,102763],{"class":483},[152,109504,109505],{"class":281,"line":1049},[152,109506,307],{"emptyLinePlaceholder":306},[152,109508,109509,109511,109513,109515],{"class":281,"line":1054},[152,109510,35515],{"class":476},[152,109512,109173],{"class":483},[152,109514,32720],{"class":476},[152,109516,109178],{"class":483},[152,109518,109519,109522,109525,109527,109530,109532,109535],{"class":281,"line":1065},[152,109520,109521],{"class":476},"        while",[152,109523,109524],{"class":483}," viewer.is_running() ",[152,109526,31799],{"class":476},[152,109528,109529],{"class":483}," data.time ",[152,109531,844],{"class":476},[152,109533,109534],{"class":293}," 5.0",[152,109536,5382],{"class":483},[152,109538,109539,109542,109544],{"class":281,"line":1074},[152,109540,109541],{"class":483},"            step_start ",[152,109543,1864],{"class":476},[152,109545,109546],{"class":483}," time.time()\n",[152,109548,109549],{"class":281,"line":1084},[152,109550,109551],{"class":483},"            mujoco.mj_step(model, data)\n",[152,109553,109554],{"class":281,"line":1091},[152,109555,109556],{"class":483},"            viewer.sync()\n",[152,109558,109559],{"class":281,"line":1096},[152,109560,307],{"emptyLinePlaceholder":306},[152,109562,109563,109566,109568,109570,109572,109574,109576],{"class":281,"line":1101},[152,109564,109565],{"class":483},"            sleep_time ",[152,109567,1864],{"class":476},[152,109569,109297],{"class":483},[152,109571,2340],{"class":476},[152,109573,109302],{"class":483},[152,109575,2340],{"class":476},[152,109577,109307],{"class":483},[152,109579,109580,109582,109585,109587,109589],{"class":281,"line":1112},[152,109581,6284],{"class":476},[152,109583,109584],{"class":483}," sleep_time ",[152,109586,487],{"class":476},[152,109588,5735],{"class":293},[152,109590,5382],{"class":483},[152,109592,109593],{"class":281,"line":1121},[152,109594,109595],{"class":483},"                time.sleep(sleep_time)\n",[152,109597,109598],{"class":281,"line":1131},[152,109599,307],{"emptyLinePlaceholder":306},[152,109601,109602],{"class":281,"line":1138},[152,109603,307],{"emptyLinePlaceholder":306},[152,109605,109606,109608,109610,109612,109614],{"class":281,"line":1143},[152,109607,3202],{"class":476},[152,109609,32557],{"class":293},[152,109611,102896],{"class":476},[152,109613,102899],{"class":289},[152,109615,5382],{"class":483},[152,109617,109618],{"class":281,"line":1148},[152,109619,102906],{"class":483},[19,109621,104907],{},[270,109623,109625],{"className":272,"code":109624,"language":274,"meta":275,"style":275},"touch ch5_viewer.py\n",[277,109626,109627],{"__ignoreMap":275},[152,109628,109629,109631],{"class":281,"line":282},[152,109630,102620],{"class":285},[152,109632,109633],{"class":289}," ch5_viewer.py\n",[19,109635,109636],{},"离屏 Renderer 保存图片:",[270,109638,109640],{"className":31715,"code":109639,"language":31717,"meta":275,"style":275},"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",[277,109641,109642,109654,109658,109664,109674,109678,109682,109690,109695,109699,109703,109707,109711,109716,109720,109724,109728,109732,109736,109740,109744,109748,109752,109756,109760,109772,109784,109792,109817,109821,109837,109841,109845,109860,109869,109873,109887,109892,109897,109901,109913,109925,109929,109933,109945],{"__ignoreMap":275},[152,109643,109644,109646,109649,109651],{"class":281,"line":282},[152,109645,32074],{"class":476},[152,109647,109648],{"class":483}," pathlib ",[152,109650,31729],{"class":476},[152,109652,109653],{"class":483}," Path\n",[152,109655,109656],{"class":281,"line":303},[152,109657,307],{"emptyLinePlaceholder":306},[152,109659,109660,109662],{"class":281,"line":310},[152,109661,31729],{"class":476},[152,109663,102638],{"class":483},[152,109665,109666,109668,109670,109672],{"class":281,"line":324},[152,109667,32074],{"class":476},[152,109669,48600],{"class":293},[152,109671,48603],{"class":476},[152,109673,48606],{"class":483},[152,109675,109676],{"class":281,"line":329},[152,109677,307],{"emptyLinePlaceholder":306},[152,109679,109680],{"class":281,"line":343},[152,109681,307],{"emptyLinePlaceholder":306},[152,109683,109684,109686,109688],{"class":281,"line":348},[152,109685,102651],{"class":293},[152,109687,15180],{"class":476},[152,109689,102656],{"class":289},[152,109691,109692],{"class":281,"line":362},[152,109693,109694],{"class":289},"\u003Cmujoco model=\"renderer_demo\">\n",[152,109696,109697],{"class":281,"line":367},[152,109698,102666],{"class":289},[152,109700,109701],{"class":281,"line":381},[152,109702,307],{"emptyLinePlaceholder":306},[152,109704,109705],{"class":281,"line":386},[152,109706,102675],{"class":289},[152,109708,109709],{"class":281,"line":932},[152,109710,109424],{"class":289},[152,109712,109713],{"class":281,"line":942},[152,109714,109715],{"class":289},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[152,109717,109718],{"class":281,"line":949},[152,109719,109429],{"class":289},[152,109721,109722],{"class":281,"line":954},[152,109723,307],{"emptyLinePlaceholder":306},[152,109725,109726],{"class":281,"line":959},[152,109727,102689],{"class":289},[152,109729,109730],{"class":281,"line":970},[152,109731,102694],{"class":289},[152,109733,109734],{"class":281,"line":979},[152,109735,109446],{"class":289},[152,109737,109738],{"class":281,"line":989},[152,109739,102704],{"class":289},[152,109741,109742],{"class":281,"line":996},[152,109743,102709],{"class":289},[152,109745,109746],{"class":281,"line":1001},[152,109747,102714],{"class":289},[152,109749,109750],{"class":281,"line":1006},[152,109751,97035],{"class":289},[152,109753,109754],{"class":281,"line":1018},[152,109755,307],{"emptyLinePlaceholder":306},[152,109757,109758],{"class":281,"line":1027},[152,109759,307],{"emptyLinePlaceholder":306},[152,109761,109762,109764,109766,109768,109770],{"class":281,"line":1037},[152,109763,33284],{"class":476},[152,109765,3624],{"class":285},[152,109767,102735],{"class":483},[152,109769,97023],{"class":293},[152,109771,5382],{"class":483},[152,109773,109774,109776,109778,109780,109782],{"class":281,"line":1044},[152,109775,102744],{"class":483},[152,109777,1864],{"class":476},[152,109779,102749],{"class":483},[152,109781,102651],{"class":293},[152,109783,1825],{"class":483},[152,109785,109786,109788,109790],{"class":281,"line":1049},[152,109787,102758],{"class":483},[152,109789,1864],{"class":476},[152,109791,102763],{"class":483},[152,109793,109794,109797,109799,109801,109803,109805,109807,109809,109811,109813,109815],{"class":281,"line":1054},[152,109795,109796],{"class":483},"    renderer ",[152,109798,1864],{"class":476},[152,109800,109211],{"class":483},[152,109802,26592],{"class":6858},[152,109804,1864],{"class":476},[152,109806,43679],{"class":293},[152,109808,14051],{"class":483},[152,109810,26588],{"class":6858},[152,109812,1864],{"class":476},[152,109814,109226],{"class":293},[152,109816,1825],{"class":483},[152,109818,109819],{"class":281,"line":1065},[152,109820,307],{"emptyLinePlaceholder":306},[152,109822,109823,109825,109827,109829,109831,109833,109835],{"class":281,"line":1074},[152,109824,4844],{"class":476},[152,109826,102838],{"class":483},[152,109828,27653],{"class":476},[152,109830,33780],{"class":293},[152,109832,1819],{"class":483},[152,109834,2119],{"class":293},[152,109836,32123],{"class":483},[152,109838,109839],{"class":281,"line":1084},[152,109840,102853],{"class":483},[152,109842,109843],{"class":281,"line":1091},[152,109844,307],{"emptyLinePlaceholder":306},[152,109846,109847,109850,109853,109855,109858],{"class":281,"line":1096},[152,109848,109849],{"class":483},"    renderer.update_scene(data, ",[152,109851,109852],{"class":6858},"camera",[152,109854,1864],{"class":476},[152,109856,109857],{"class":289},"\"fixed_camera\"",[152,109859,1825],{"class":483},[152,109861,109862,109865,109867],{"class":281,"line":1101},[152,109863,109864],{"class":483},"    image ",[152,109866,1864],{"class":476},[152,109868,108922],{"class":483},[152,109870,109871],{"class":281,"line":1112},[152,109872,307],{"emptyLinePlaceholder":306},[152,109874,109875,109878,109880,109883,109885],{"class":281,"line":1121},[152,109876,109877],{"class":483},"    output_path ",[152,109879,1864],{"class":476},[152,109881,109882],{"class":483}," Path(",[152,109884,109352],{"class":289},[152,109886,1825],{"class":483},[152,109888,109889],{"class":281,"line":1131},[152,109890,109891],{"class":483},"    Image.fromarray(image).save(output_path)\n",[152,109893,109894],{"class":281,"line":1138},[152,109895,109896],{"class":483},"    renderer.close()\n",[152,109898,109899],{"class":281,"line":1143},[152,109900,307],{"emptyLinePlaceholder":306},[152,109902,109903,109905,109907,109910],{"class":281,"line":1148},[152,109904,32636],{"class":293},[152,109906,1819],{"class":483},[152,109908,109909],{"class":289},"\"saved:\"",[152,109911,109912],{"class":483},", output_path.resolve())\n",[152,109914,109915,109917,109919,109922],{"class":281,"line":1159},[152,109916,32636],{"class":293},[152,109918,1819],{"class":483},[152,109920,109921],{"class":289},"\"image shape:\"",[152,109923,109924],{"class":483},", image.shape)\n",[152,109926,109927],{"class":281,"line":1168},[152,109928,307],{"emptyLinePlaceholder":306},[152,109930,109931],{"class":281,"line":1178},[152,109932,307],{"emptyLinePlaceholder":306},[152,109934,109935,109937,109939,109941,109943],{"class":281,"line":1185},[152,109936,3202],{"class":476},[152,109938,32557],{"class":293},[152,109940,102896],{"class":476},[152,109942,102899],{"class":289},[152,109944,5382],{"class":483},[152,109946,109947],{"class":281,"line":1190},[152,109948,102906],{"class":483},[19,109950,104907],{},[270,109952,109954],{"className":272,"code":109953,"language":274,"meta":275,"style":275},"touch ch5_renderer.py\n",[277,109955,109956],{"__ignoreMap":275},[152,109957,109958,109960],{"class":281,"line":282},[152,109959,102620],{"class":285},[152,109961,109962],{"class":289}," ch5_renderer.py\n",[14,109964,102909],{"id":102909},[19,109966,109967],{},"viewer 上下文：",[270,109969,109971],{"className":31715,"code":109970,"language":31717,"meta":275,"style":275},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[277,109972,109973],{"__ignoreMap":275},[152,109974,109975,109977,109979,109981],{"class":281,"line":282},[152,109976,109170],{"class":476},[152,109978,109173],{"class":483},[152,109980,32720],{"class":476},[152,109982,109178],{"class":483},[19,109984,109985,109987],{},[277,109986,109170],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109989,109990],{},"窗口循环：",[270,109992,109994],{"className":31715,"code":109993,"language":31717,"meta":275,"style":275},"while viewer.is_running() and data.time \u003C 5.0:\n",[277,109995,109996],{"__ignoreMap":275},[152,109997,109998,110001,110003,110005,110007,110009,110011],{"class":281,"line":282},[152,109999,110000],{"class":476},"while",[152,110002,109524],{"class":483},[152,110004,31799],{"class":476},[152,110006,109529],{"class":483},[152,110008,844],{"class":476},[152,110010,109534],{"class":293},[152,110012,5382],{"class":483},[19,110014,110015],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110017,110018],{},"固定相机：",[270,110020,110022],{"className":54404,"code":110021,"language":54406,"meta":275,"style":275},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[277,110023,110024],{"__ignoreMap":275},[152,110025,110026,110028,110030,110032,110034,110036,110038,110040,110043,110046,110048,110051],{"class":281,"line":282},[152,110027,844],{"class":483},[152,110029,109852],{"class":52637},[152,110031,16535],{"class":285},[152,110033,1864],{"class":483},[152,110035,109857],{"class":289},[152,110037,102443],{"class":285},[152,110039,1864],{"class":483},[152,110041,110042],{"class":289},"\"1.5 -2.0 1.2\"",[152,110044,110045],{"class":285}," xyaxes",[152,110047,1864],{"class":483},[152,110049,110050],{"class":289},"\"1 0.75 0 0 0 1\"",[152,110052,102481],{"class":483},[19,110054,110055],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[14,110057,110059],{"id":110058},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[270,110061,110063],{"className":31715,"code":110062,"language":31717,"meta":275,"style":275},"import time\n",[277,110064,110065],{"__ignoreMap":275},[152,110066,110067,110069],{"class":281,"line":282},[152,110068,31729],{"class":476},[152,110070,33166],{"class":483},[19,110072,110073],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[270,110075,110077],{"className":31715,"code":110076,"language":31717,"meta":275,"style":275},"import mujoco\nimport mujoco.viewer\n",[277,110078,110079,110085],{"__ignoreMap":275},[152,110080,110081,110083],{"class":281,"line":282},[152,110082,31729],{"class":476},[152,110084,102638],{"class":483},[152,110086,110087,110089],{"class":281,"line":303},[152,110088,31729],{"class":476},[152,110090,108889],{"class":483},[19,110092,110093],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[270,110095,110096],{"className":31715,"code":109970,"language":31717,"meta":275,"style":275},[277,110097,110098],{"__ignoreMap":275},[152,110099,110100,110102,110104,110106],{"class":281,"line":282},[152,110101,109170],{"class":476},[152,110103,109173],{"class":483},[152,110105,32720],{"class":476},[152,110107,109178],{"class":483},[19,110109,110110,110111,110114],{},"打开一个 viewer 窗口。",[277,110112,110113],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[270,110116,110117],{"className":31715,"code":109993,"language":31717,"meta":275,"style":275},[277,110118,110119],{"__ignoreMap":275},[152,110120,110121,110123,110125,110127,110129,110131,110133],{"class":281,"line":282},[152,110122,110000],{"class":476},[152,110124,109524],{"class":483},[152,110126,31799],{"class":476},[152,110128,109529],{"class":483},[152,110130,844],{"class":476},[152,110132,109534],{"class":293},[152,110134,5382],{"class":483},[19,110136,110137,110138,110141],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[277,110139,110140],{},"viewer.is_running()"," 会变成 false，循环结束。",[270,110143,110145],{"className":31715,"code":110144,"language":31717,"meta":275,"style":275},"step_start = time.time()\n",[277,110146,110147],{"__ignoreMap":275},[152,110148,110149,110152,110154],{"class":281,"line":282},[152,110150,110151],{"class":483},"step_start ",[152,110153,1864],{"class":476},[152,110155,109546],{"class":483},[19,110157,110158],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[270,110160,110161],{"className":31715,"code":109255,"language":31717,"meta":275,"style":275},[277,110162,110163,110167],{"__ignoreMap":275},[152,110164,110165],{"class":281,"line":282},[152,110166,105842],{"class":483},[152,110168,110169],{"class":281,"line":303},[152,110170,109266],{"class":483},[19,110172,110173,110175,110176,110178,110179,110181,110182,110185],{},[277,110174,102552],{}," 推进物理仿真。",[277,110177,109274],{}," 把最新的 ",[277,110180,34738],{}," 同步到窗口里显示。没有 ",[277,110183,110184],{},"sync()","，窗口可能看不到最新状态。",[270,110187,110188],{"className":31715,"code":109285,"language":31717,"meta":275,"style":275},[277,110189,110190],{"__ignoreMap":275},[152,110191,110192,110194,110196,110198,110200,110202,110204],{"class":281,"line":282},[152,110193,109292],{"class":483},[152,110195,1864],{"class":476},[152,110197,109297],{"class":483},[152,110199,2340],{"class":476},[152,110201,109302],{"class":483},[152,110203,2340],{"class":476},[152,110205,109307],{"class":483},[19,110207,110208],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[270,110210,110212],{"className":31715,"code":110211,"language":31717,"meta":275,"style":275},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[277,110213,110214,110226],{"__ignoreMap":275},[152,110215,110216,110218,110220,110222,110224],{"class":281,"line":282},[152,110217,3202],{"class":476},[152,110219,109584],{"class":483},[152,110221,487],{"class":476},[152,110223,5735],{"class":293},[152,110225,5382],{"class":483},[152,110227,110228],{"class":281,"line":303},[152,110229,110230],{"class":483},"    time.sleep(sleep_time)\n",[19,110232,110233],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[14,110235,110237],{"id":110236},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[270,110239,110241],{"className":31715,"code":110240,"language":31717,"meta":275,"style":275},"from pathlib import Path\n",[277,110242,110243],{"__ignoreMap":275},[152,110244,110245,110247,110249,110251],{"class":281,"line":282},[152,110246,32074],{"class":476},[152,110248,109648],{"class":483},[152,110250,31729],{"class":476},[152,110252,109653],{"class":483},[19,110254,110255,110256,110259,110260,110263],{},"导入 ",[277,110257,110258],{},"Path","，用来处理文件路径。相比直接写字符串，",[277,110261,110262],{},"Path(\"render_output.png\")"," 更清晰。",[270,110265,110267],{"className":31715,"code":110266,"language":31717,"meta":275,"style":275},"from PIL import Image\n",[277,110268,110269],{"__ignoreMap":275},[152,110270,110271,110273,110275,110277],{"class":281,"line":282},[152,110272,32074],{"class":476},[152,110274,48600],{"class":293},[152,110276,48603],{"class":476},[152,110278,48606],{"class":483},[19,110280,110281],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[270,110283,110284],{"className":54404,"code":110021,"language":54406,"meta":275,"style":275},[277,110285,110286],{"__ignoreMap":275},[152,110287,110288,110290,110292,110294,110296,110298,110300,110302,110304,110306,110308,110310],{"class":281,"line":282},[152,110289,844],{"class":483},[152,110291,109852],{"class":52637},[152,110293,16535],{"class":285},[152,110295,1864],{"class":483},[152,110297,109857],{"class":289},[152,110299,102443],{"class":285},[152,110301,1864],{"class":483},[152,110303,110042],{"class":289},[152,110305,110045],{"class":285},[152,110307,1864],{"class":483},[152,110309,110050],{"class":289},[152,110311,102481],{"class":483},[19,110313,110314,110315,110317,110318,110320,110321,110324,110325,110327],{},"定义一个相机。",[277,110316,81147],{}," 是相机名字。",[277,110319,105483],{}," 是相机在世界里的位置。",[277,110322,110323],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[277,110326,105483],{}," 来调视角。",[270,110329,110331],{"className":31715,"code":110330,"language":31717,"meta":275,"style":275},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[277,110332,110333],{"__ignoreMap":275},[152,110334,110335,110337,110339,110341,110343,110345,110347,110349,110351,110353,110355],{"class":281,"line":282},[152,110336,108907],{"class":483},[152,110338,1864],{"class":476},[152,110340,109211],{"class":483},[152,110342,26592],{"class":6858},[152,110344,1864],{"class":476},[152,110346,43679],{"class":293},[152,110348,14051],{"class":483},[152,110350,26588],{"class":6858},[152,110352,1864],{"class":476},[152,110354,109226],{"class":293},[152,110356,1825],{"class":483},[19,110358,110359,110360,102355,110362,110364],{},"创建离屏渲染器。",[277,110361,26592],{},[277,110363,26588],{}," 决定输出图片大小。",[270,110366,110367],{"className":31715,"code":103013,"language":31717,"meta":275,"style":275},[277,110368,110369,110385],{"__ignoreMap":275},[152,110370,110371,110373,110375,110377,110379,110381,110383],{"class":281,"line":282},[152,110372,4668],{"class":476},[152,110374,102838],{"class":483},[152,110376,27653],{"class":476},[152,110378,33780],{"class":293},[152,110380,1819],{"class":483},[152,110382,2119],{"class":293},[152,110384,32123],{"class":483},[152,110386,110387],{"class":281,"line":303},[152,110388,103036],{"class":483},[19,110390,110391],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[270,110393,110395],{"className":31715,"code":110394,"language":31717,"meta":275,"style":275},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[277,110396,110397],{"__ignoreMap":275},[152,110398,110399,110402,110404,110406,110408],{"class":281,"line":282},[152,110400,110401],{"class":483},"renderer.update_scene(data, ",[152,110403,109852],{"class":6858},[152,110405,1864],{"class":476},[152,110407,109857],{"class":289},[152,110409,1825],{"class":483},[19,110411,110412,110413,110415,110416,110419],{},"告诉 renderer：用当前 ",[277,110414,34738],{}," 的状态更新画面，并使用名为 ",[277,110417,110418],{},"fixed_camera"," 的相机视角。",[270,110421,110422],{"className":31715,"code":109317,"language":31717,"meta":275,"style":275},[277,110423,110424],{"__ignoreMap":275},[152,110425,110426,110428,110430],{"class":281,"line":282},[152,110427,108917],{"class":483},[152,110429,1864],{"class":476},[152,110431,108922],{"class":483},[19,110433,110434,110435,110438],{},"真正渲染出图像。",[277,110436,110437],{},"image"," 是一个 NumPy 数组，不是文件。",[270,110440,110442],{"className":31715,"code":110441,"language":31717,"meta":275,"style":275},"Image.fromarray(image).save(output_path)\n",[277,110443,110444],{"__ignoreMap":275},[152,110445,110446],{"class":281,"line":282},[152,110447,110441],{"class":483},[19,110449,110450,110451,29984],{},"把数组转换成图片，并保存到 ",[277,110452,110453],{},"render_output.png",[270,110455,110457],{"className":31715,"code":110456,"language":31717,"meta":275,"style":275},"renderer.close()\n",[277,110458,110459],{"__ignoreMap":275},[152,110460,110461],{"class":281,"line":282},[152,110462,110456],{"class":483},[19,110464,110465],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[1760,110467,103653],{"id":103652},[19,110469,110470,110471,110473,110474,29984],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[277,110472,110453],{},"，并输出图像数组形状，例如 ",[277,110475,110476],{},"(480, 640, 3)",[19,110478,110479],{},"如果图片里看不到方块，先检查：",[416,110481,110482,110485,110488],{},[419,110483,110484],{},"方块是否掉到相机视野外。",[419,110486,110487],{},"camera 位置是否合理。",[419,110489,110490,110491,110494],{},"是否在 ",[277,110492,110493],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[1760,110496,103685],{"id":103684},[19,110498,110499],{},"运行 viewer:",[270,110501,110503],{"className":272,"code":110502,"language":274,"meta":275,"style":275},"python ch5_viewer.py\n",[277,110504,110505],{"__ignoreMap":275},[152,110506,110507,110509],{"class":281,"line":282},[152,110508,31717],{"class":285},[152,110510,109633],{"class":289},[19,110512,110513],{},"运行 renderer:",[270,110515,110517],{"className":272,"code":110516,"language":274,"meta":275,"style":275},"python ch5_renderer.py\n",[277,110518,110519],{"__ignoreMap":275},[152,110520,110521,110523],{"class":281,"line":282},[152,110522,31717],{"class":285},[152,110524,109962],{"class":289},[19,110526,110527],{},"如果在服务器上运行:",[270,110529,110531],{"className":272,"code":110530,"language":274,"meta":275,"style":275},"MUJOCO_GL=egl python ch5_renderer.py\n",[277,110532,110533],{"__ignoreMap":275},[152,110534,110535,110537,110539,110541,110544],{"class":281,"line":282},[152,110536,109151],{"class":483},[152,110538,1864],{"class":476},[152,110540,109141],{"class":289},[152,110542,110543],{"class":285}," python",[152,110545,109962],{"class":289},[19,110547,109119],{},[270,110549,110551],{"className":272,"code":110550,"language":274,"meta":275,"style":275},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[277,110552,110553],{"__ignoreMap":275},[152,110554,110555,110557,110559,110561,110563],{"class":281,"line":282},[152,110556,109151],{"class":483},[152,110558,1864],{"class":476},[152,110560,109145],{"class":289},[152,110562,110543],{"class":285},[152,110564,109962],{"class":289},[19,110566,110567],{},"再做几个练习：",[416,110569,110570,110577,110580,110586],{},[419,110571,110572,110573,110576],{},"把 renderer 分辨率改成 ",[277,110574,110575],{},"height=240, width=320","，观察输出 shape。",[419,110578,110579],{},"把方块颜色改成蓝色，重新保存图片。",[419,110581,110582,110583,110585],{},"把相机 ",[277,110584,105483],{}," 改远一点，观察画面中物体是否变小。",[419,110587,110588,110589,103751,110592,110595],{},"把 viewer 示例中的 ",[277,110590,110591],{},"data.time \u003C 5.0",[277,110593,110594],{},"data.time \u003C 20.0","，观察更长时间。",[1760,110597,103790],{"id":103789},[14,110599,110601],{"id":110600},"viewer-窗口打不开","viewer 窗口打不开",[19,110603,110604],{},"安装:",[270,110606,110608],{"className":272,"code":110607,"language":274,"meta":275,"style":275},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[277,110609,110610],{"__ignoreMap":275},[152,110611,110612,110614,110616,110618,110620,110622,110624,110626,110628,110630,110632],{"class":281,"line":282},[152,110613,26188],{"class":285},[152,110615,27921],{"class":289},[152,110617,25446],{"class":289},[152,110619,28005],{"class":293},[152,110621,103843],{"class":289},[152,110623,102171],{"class":289},[152,110625,103848],{"class":289},[152,110627,102184],{"class":289},[152,110629,102190],{"class":289},[152,110631,102181],{"class":289},[152,110633,110634],{"class":289}," libXinerama\n",[14,110636,110638],{"id":110637},"glfwerror",[277,110639,110640],{},"GLFWError",[19,110642,110643],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[14,110645,110647],{"id":110646},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110649,110650,110651,83876,110653,110655],{},"尝试 ",[277,110652,102374],{},[277,110654,102377],{},"。可能存在版本差异。",[14,110657,110658],{"id":110658},"保存图片是黑的",[19,110660,103912],{},[416,110662,110663,110666,110669,110679],{},[419,110664,110665],{},"XML 里是否有 light。",[419,110667,110668],{},"相机是否对着模型。",[419,110670,110671,110672,110675,110676,29984],{},"是否先 ",[277,110673,110674],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[277,110677,110678],{},"renderer.render()",[419,110680,110681],{},"物体是否已经掉出视野。",[14,110683,110684],{"id":110684},"远程服务器没有显示器",[19,110686,110687],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[270,110689,110690],{"className":272,"code":110530,"language":274,"meta":275,"style":275},[277,110691,110692],{"__ignoreMap":275},[152,110693,110694,110696,110698,110700,110702],{"class":281,"line":282},[152,110695,109151],{"class":483},[152,110697,1864],{"class":476},[152,110699,109141],{"class":289},[152,110701,110543],{"class":285},[152,110703,109962],{"class":289},[19,110705,110706],{},"如果 EGL 不可用，再尝试：",[270,110708,110709],{"className":272,"code":110550,"language":274,"meta":275,"style":275},[277,110710,110711],{"__ignoreMap":275},[152,110712,110713,110715,110717,110719,110721],{"class":281,"line":282},[152,110714,109151],{"class":483},[152,110716,1864],{"class":476},[152,110718,109145],{"class":289},[152,110720,110543],{"class":285},[152,110722,109962],{"class":289},[1760,110724,103944],{"id":103943},[19,110726,110727],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[416,110729,110730,110733,110736],{},[419,110731,110732],{},"先用 viewer 看模型和控制是否正常。",[419,110734,110735],{},"再用 renderer 保存图片或构造视觉观测。",[419,110737,110738],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1736,110740,110741],{},"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":275,"searchDepth":303,"depth":303,"links":110743},[110744,110745,110746,110751,110756,110757,110758,110765],{"id":101983,"depth":303,"text":101984},{"id":102106,"depth":303,"text":102107},{"id":102381,"depth":303,"text":102382,"children":110747},[110748,110749,110750],{"id":109248,"depth":310,"text":109249},{"id":109278,"depth":310,"text":109279},{"id":109313,"depth":310,"text":109314},{"id":102589,"depth":303,"text":102590,"children":110752},[110753,110754,110755],{"id":102909,"depth":310,"text":102909},{"id":110058,"depth":310,"text":110059},{"id":110236,"depth":310,"text":110237},{"id":103652,"depth":303,"text":103653},{"id":103684,"depth":303,"text":103685},{"id":103789,"depth":303,"text":103790,"children":110759},[110760,110761,110762,110763,110764],{"id":110600,"depth":310,"text":110601},{"id":110637,"depth":310,"text":110640},{"id":110646,"depth":310,"text":110647},{"id":110658,"depth":310,"text":110658},{"id":110684,"depth":310,"text":110684},{"id":103943,"depth":303,"text":103944},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108856,"description":275},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110772,"title":110773,"body":110774,"description":275,"extension":1744,"meta":112685,"navigation":306,"path":112686,"seo":112687,"stem":112688,"__hash__":112689},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110775,"toc":112661},[110776,110779,110781,110784,110786,110805,110808,110814,110817,110819,110821,110845,110847,110861,110863,110904,110906,110917,110919,110922,110928,110931,110965,110968,111000,111003,111035,111039,111042,111082,111085,111091,111094,111100,111104,111107,111113,111116,111120,111123,111163,111165,111178,111181,111183,111765,111767,111779,111782,111793,111795,111798,111817,111829,111832,111853,111856,111859,111902,111905,111908,111928,111935,111937,111955,111970,111973,111979,111982,111988,112005,112012,112043,112054,112088,112099,112116,112125,112133,112138,112152,112155,112176,112182,112196,112201,112231,112241,112266,112274,112297,112300,112316,112319,112327,112333,112355,112368,112389,112398,112437,112448,112450,112453,112459,112462,112465,112471,112474,112494,112497,112499,112538,112540,112543,112551,112554,112557,112584,112587,112597,112603,112606,112612,112614,112620,112624,112627,112629,112632,112656,112659],[10,110777,110773],{"id":110778},"_6控制任务cartpole",[1760,110780,101984],{"id":101983},[19,110782,110783],{},"本章搭建一个最小 Cartpole 控制任务。",[19,110785,105668],{},[416,110787,110788,110791,110793,110796,110799,110802],{},[419,110789,110790],{},"slide joint",[419,110792,107521],{},[419,110794,110795],{},"cart force actuator",[419,110797,110798],{},"状态观测",[419,110800,110801],{},"简单控制循环",[419,110803,110804],{},"reward 设计雏形",[19,110806,110807],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[270,110809,110812],{"className":110810,"code":110811,"language":6829,"meta":275},[6827],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[277,110813,110811],{"__ignoreMap":275},[19,110815,110816],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[1760,110818,102107],{"id":102106},[19,110820,102110],{},[270,110822,110823],{"className":272,"code":105725,"language":274,"meta":275,"style":275},[277,110824,110825],{"__ignoreMap":275},[152,110826,110827,110829,110831,110833,110835,110837,110839,110841,110843],{"class":281,"line":282},[152,110828,26188],{"class":285},[152,110830,27921],{"class":289},[152,110832,25446],{"class":289},[152,110834,28005],{"class":293},[152,110836,105740],{"class":289},[152,110838,102135],{"class":289},[152,110840,103838],{"class":289},[152,110842,102151],{"class":289},[152,110844,105749],{"class":289},[19,110846,104156],{},[270,110848,110849],{"className":272,"code":102256,"language":274,"meta":275,"style":275},[277,110850,110851],{"__ignoreMap":275},[152,110852,110853,110855,110857,110859],{"class":281,"line":282},[152,110854,25443],{"class":285},[152,110856,25446],{"class":289},[152,110858,102267],{"class":289},[152,110860,102270],{"class":289},[19,110862,104173],{},[270,110864,110866],{"className":272,"code":110865,"language":274,"meta":275,"style":275},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[277,110867,110868,110885,110894],{"__ignoreMap":275},[152,110869,110870,110872,110874,110876,110879,110881,110883],{"class":281,"line":282},[152,110871,31667],{"class":285},[152,110873,757],{"class":289},[152,110875,26726],{"class":293},[152,110877,110878],{"class":289}," mujoco-cartpole",[152,110880,102312],{"class":289},[152,110882,102315],{"class":293},[152,110884,102318],{"class":293},[152,110886,110887,110889,110891],{"class":281,"line":303},[152,110888,31667],{"class":285},[152,110890,102325],{"class":289},[152,110892,110893],{"class":289}," mujoco-cartpole\n",[152,110895,110896,110898,110900,110902],{"class":281,"line":310},[152,110897,25443],{"class":285},[152,110899,25446],{"class":289},[152,110901,102267],{"class":289},[152,110903,102270],{"class":289},[19,110905,102341],{},[416,110907,110908,110911,110914],{},[419,110909,110910],{},"本章不依赖 Gymnasium。",[419,110912,110913],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[419,110915,110916],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[1760,110918,102382],{"id":102381},[19,110920,110921],{},"Cartpole 的模型结构:",[270,110923,110926],{"className":110924,"code":110925,"language":6829,"meta":275},[6827],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[277,110927,110925],{"__ignoreMap":275},[19,110929,110930],{},"小车通过 slide joint 左右移动:",[270,110932,110934],{"className":54404,"code":110933,"language":54406,"meta":275,"style":275},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[277,110935,110936],{"__ignoreMap":275},[152,110937,110938,110940,110942,110944,110946,110949,110951,110953,110956,110958,110960,110963],{"class":281,"line":282},[152,110939,844],{"class":483},[152,110941,104293],{"class":52637},[152,110943,16535],{"class":285},[152,110945,1864],{"class":483},[152,110947,110948],{"class":289},"\"cart_x\"",[152,110950,55161],{"class":285},[152,110952,1864],{"class":483},[152,110954,110955],{"class":289},"\"slide\"",[152,110957,107365],{"class":285},[152,110959,1864],{"class":483},[152,110961,110962],{"class":289},"\"1 0 0\"",[152,110964,102481],{"class":483},[19,110966,110967],{},"杆子通过 hinge joint 旋转:",[270,110969,110971],{"className":54404,"code":110970,"language":54406,"meta":275,"style":275},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[277,110972,110973],{"__ignoreMap":275},[152,110974,110975,110977,110979,110981,110983,110986,110988,110990,110992,110994,110996,110998],{"class":281,"line":282},[152,110976,844],{"class":483},[152,110978,104293],{"class":52637},[152,110980,16535],{"class":285},[152,110982,1864],{"class":483},[152,110984,110985],{"class":289},"\"pole_hinge\"",[152,110987,55161],{"class":285},[152,110989,1864],{"class":483},[152,110991,107356],{"class":289},[152,110993,107365],{"class":285},[152,110995,1864],{"class":483},[152,110997,107370],{"class":289},[152,110999,102481],{"class":483},[19,111001,111002],{},"控制力作用在小车 slide joint 上:",[270,111004,111006],{"className":54404,"code":111005,"language":54406,"meta":275,"style":275},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[277,111007,111008],{"__ignoreMap":275},[152,111009,111010,111012,111014,111016,111018,111021,111023,111025,111027,111029,111031,111033],{"class":281,"line":282},[152,111011,844],{"class":483},[152,111013,107411],{"class":52637},[152,111015,16535],{"class":285},[152,111017,1864],{"class":483},[152,111019,111020],{"class":289},"\"cart_motor\"",[152,111022,107421],{"class":285},[152,111024,1864],{"class":483},[152,111026,110948],{"class":289},[152,111028,107428],{"class":285},[152,111030,1864],{"class":483},[152,111032,55653],{"class":289},[152,111034,102481],{"class":483},[14,111036,111038],{"id":111037},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111040,111041],{},"这个简化模型有两个关节：",[23,111043,111044,111055],{},[26,111045,111046],{},[29,111047,111048,111050,111052],{},[32,111049,104096],{"align":34},[32,111051,25351],{"align":34},[32,111053,111054],{"align":34},"对应状态",[43,111056,111057,111070],{},[29,111058,111059,111064,111067],{},[48,111060,111061],{"align":34},[277,111062,111063],{},"cart_x",[48,111065,111066],{"align":34},"slide",[48,111068,111069],{"align":34},"小车 x 位置",[29,111071,111072,111077,111079],{},[48,111073,111074],{"align":34},[277,111075,111076],{},"pole_hinge",[48,111078,107177],{"align":34},[48,111080,111081],{"align":34},"杆子角度",[19,111083,111084],{},"所以：",[270,111086,111089],{"className":111087,"code":111088,"language":6829,"meta":275},[6827],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[277,111090,111088],{"__ignoreMap":275},[19,111092,111093],{},"把它们拼起来就是观测：",[270,111095,111098],{"className":111096,"code":111097,"language":6829,"meta":275},[6827],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[277,111099,111097],{"__ignoreMap":275},[14,111101,111103],{"id":111102},"action-是什么","action 是什么",[19,111105,111106],{},"本章只有一个 actuator：",[270,111108,111111],{"className":111109,"code":111110,"language":6829,"meta":275},[6827],"data.ctrl[0] = action\n",[277,111112,111110],{"__ignoreMap":275},[19,111114,111115],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[14,111117,111119],{"id":111118},"reward-是什么","reward 是什么",[19,111121,111122],{},"奖励函数：",[270,111124,111126],{"className":31715,"code":111125,"language":31717,"meta":275,"style":275},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[277,111127,111128],{"__ignoreMap":275},[152,111129,111130,111132,111135,111137,111139,111141,111144,111146,111149,111151,111153,111155,111158,111160],{"class":281,"line":282},[152,111131,18661],{"class":476},[152,111133,111134],{"class":293}," float",[152,111136,1819],{"class":483},[152,111138,103740],{"class":293},[152,111140,53608],{"class":476},[152,111142,111143],{"class":293}," 0.1",[152,111145,8160],{"class":476},[152,111147,111148],{"class":483}," cart_x ",[152,111150,2263],{"class":476},[152,111152,111148],{"class":483},[152,111154,2340],{"class":476},[152,111156,111157],{"class":483}," pole_angle ",[152,111159,2263],{"class":476},[152,111161,111162],{"class":483}," pole_angle)\n",[19,111164,107563],{},[416,111166,111167,111172,111175],{},[419,111168,111169,111170,29984],{},"基础奖励是 ",[277,111171,103740],{},[419,111173,111174],{},"小车离中心越远，扣分越多。",[419,111176,111177],{},"杆子角度越大，扣分越多。",[19,111179,111180],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[1760,111182,102590],{"id":102589},[270,111184,111186],{"className":31715,"code":111185,"language":31717,"meta":275,"style":275},"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",[277,111187,111188,111194,111204,111208,111212,111220,111225,111229,111233,111237,111242,111246,111251,111256,111261,111265,111270,111275,111280,111284,111288,111292,111296,111300,111305,111309,111313,111317,111321,111325,111335,111342,111346,111350,111364,111378,111391,111421,111425,111429,111441,111453,111461,111465,111478,111482,111486,111495,111499,111515,111525,111538,111551,111555,111578,111596,111600,111612,111616,111620,111630,111640,111644,111660,111701,111705,111725,111741,111745,111749,111761],{"__ignoreMap":275},[152,111189,111190,111192],{"class":281,"line":282},[152,111191,31729],{"class":476},[152,111193,102638],{"class":483},[152,111195,111196,111198,111200,111202],{"class":281,"line":303},[152,111197,31729],{"class":476},[152,111199,32717],{"class":483},[152,111201,32720],{"class":476},[152,111203,32723],{"class":483},[152,111205,111206],{"class":281,"line":310},[152,111207,307],{"emptyLinePlaceholder":306},[152,111209,111210],{"class":281,"line":324},[152,111211,307],{"emptyLinePlaceholder":306},[152,111213,111214,111216,111218],{"class":281,"line":329},[152,111215,102651],{"class":293},[152,111217,15180],{"class":476},[152,111219,102656],{"class":289},[152,111221,111222],{"class":281,"line":343},[152,111223,111224],{"class":289},"\u003Cmujoco model=\"cartpole\">\n",[152,111226,111227],{"class":281,"line":348},[152,111228,102666],{"class":289},[152,111230,111231],{"class":281,"line":362},[152,111232,307],{"emptyLinePlaceholder":306},[152,111234,111235],{"class":281,"line":367},[152,111236,102675],{"class":289},[152,111238,111239],{"class":281,"line":381},[152,111240,111241],{"class":289},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[152,111243,111244],{"class":281,"line":386},[152,111245,307],{"emptyLinePlaceholder":306},[152,111247,111248],{"class":281,"line":932},[152,111249,111250],{"class":289},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[152,111252,111253],{"class":281,"line":942},[152,111254,111255],{"class":289},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[152,111257,111258],{"class":281,"line":949},[152,111259,111260],{"class":289},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[152,111262,111263],{"class":281,"line":954},[152,111264,307],{"emptyLinePlaceholder":306},[152,111266,111267],{"class":281,"line":959},[152,111268,111269],{"class":289},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[152,111271,111272],{"class":281,"line":970},[152,111273,111274],{"class":289},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[152,111276,111277],{"class":281,"line":979},[152,111278,111279],{"class":289},"        \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",[152,111281,111282],{"class":281,"line":989},[152,111283,107775],{"class":289},[152,111285,111286],{"class":281,"line":996},[152,111287,102704],{"class":289},[152,111289,111290],{"class":281,"line":1001},[152,111291,102709],{"class":289},[152,111293,111294],{"class":281,"line":1006},[152,111295,307],{"emptyLinePlaceholder":306},[152,111297,111298],{"class":281,"line":1018},[152,111299,107792],{"class":289},[152,111301,111302],{"class":281,"line":1027},[152,111303,111304],{"class":289},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[152,111306,111307],{"class":281,"line":1037},[152,111308,107802],{"class":289},[152,111310,111311],{"class":281,"line":1044},[152,111312,102714],{"class":289},[152,111314,111315],{"class":281,"line":1049},[152,111316,97035],{"class":289},[152,111318,111319],{"class":281,"line":1054},[152,111320,307],{"emptyLinePlaceholder":306},[152,111322,111323],{"class":281,"line":1065},[152,111324,307],{"emptyLinePlaceholder":306},[152,111326,111327,111329,111332],{"class":281,"line":1074},[152,111328,33284],{"class":476},[152,111330,111331],{"class":285}," get_observation",[152,111333,111334],{"class":483},"(data: mujoco.MjData) -> np.ndarray:\n",[152,111336,111337,111339],{"class":281,"line":1084},[152,111338,5732],{"class":476},[152,111340,111341],{"class":483}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[152,111343,111344],{"class":281,"line":1091},[152,111345,307],{"emptyLinePlaceholder":306},[152,111347,111348],{"class":281,"line":1096},[152,111349,307],{"emptyLinePlaceholder":306},[152,111351,111352,111354,111357,111360,111362],{"class":281,"line":1101},[152,111353,33284],{"class":476},[152,111355,111356],{"class":285}," compute_reward",[152,111358,111359],{"class":483},"(obs: np.ndarray) -> ",[152,111361,1858],{"class":293},[152,111363,5382],{"class":483},[152,111365,111366,111369,111371,111374,111376],{"class":281,"line":1112},[152,111367,111368],{"class":483},"    cart_x ",[152,111370,1864],{"class":476},[152,111372,111373],{"class":483}," obs[",[152,111375,2000],{"class":293},[152,111377,34583],{"class":483},[152,111379,111380,111383,111385,111387,111389],{"class":281,"line":1121},[152,111381,111382],{"class":483},"    pole_angle ",[152,111384,1864],{"class":476},[152,111386,111373],{"class":483},[152,111388,2026],{"class":293},[152,111390,34583],{"class":483},[152,111392,111393,111395,111397,111399,111401,111403,111405,111407,111409,111411,111413,111415,111417,111419],{"class":281,"line":1131},[152,111394,5732],{"class":476},[152,111396,111134],{"class":293},[152,111398,1819],{"class":483},[152,111400,103740],{"class":293},[152,111402,53608],{"class":476},[152,111404,111143],{"class":293},[152,111406,8160],{"class":476},[152,111408,111148],{"class":483},[152,111410,2263],{"class":476},[152,111412,111148],{"class":483},[152,111414,2340],{"class":476},[152,111416,111157],{"class":483},[152,111418,2263],{"class":476},[152,111420,111162],{"class":483},[152,111422,111423],{"class":281,"line":1138},[152,111424,307],{"emptyLinePlaceholder":306},[152,111426,111427],{"class":281,"line":1143},[152,111428,307],{"emptyLinePlaceholder":306},[152,111430,111431,111433,111435,111437,111439],{"class":281,"line":1148},[152,111432,33284],{"class":476},[152,111434,3624],{"class":285},[152,111436,102735],{"class":483},[152,111438,97023],{"class":293},[152,111440,5382],{"class":483},[152,111442,111443,111445,111447,111449,111451],{"class":281,"line":1159},[152,111444,102744],{"class":483},[152,111446,1864],{"class":476},[152,111448,102749],{"class":483},[152,111450,102651],{"class":293},[152,111452,1825],{"class":483},[152,111454,111455,111457,111459],{"class":281,"line":1168},[152,111456,102758],{"class":483},[152,111458,1864],{"class":476},[152,111460,102763],{"class":483},[152,111462,111463],{"class":281,"line":1178},[152,111464,307],{"emptyLinePlaceholder":306},[152,111466,111467,111469,111471,111473,111475],{"class":281,"line":1185},[152,111468,106406],{"class":483},[152,111470,2026],{"class":293},[152,111472,6085],{"class":483},[152,111474,1864],{"class":476},[152,111476,111477],{"class":293}," 0.1\n",[152,111479,111480],{"class":281,"line":1190},[152,111481,106419],{"class":483},[152,111483,111484],{"class":281,"line":1195},[152,111485,307],{"emptyLinePlaceholder":306},[152,111487,111488,111491,111493],{"class":281,"line":1206},[152,111489,111490],{"class":483},"    total_reward ",[152,111492,1864],{"class":476},[152,111494,106098],{"class":293},[152,111496,111497],{"class":281,"line":1215},[152,111498,307],{"emptyLinePlaceholder":306},[152,111500,111501,111503,111505,111507,111509,111511,111513],{"class":281,"line":1225},[152,111502,4844],{"class":476},[152,111504,32953],{"class":483},[152,111506,27653],{"class":476},[152,111508,33780],{"class":293},[152,111510,1819],{"class":483},[152,111512,8052],{"class":293},[152,111514,32123],{"class":483},[152,111516,111517,111520,111522],{"class":281,"line":1232},[152,111518,111519],{"class":483},"        obs ",[152,111521,1864],{"class":476},[152,111523,111524],{"class":483}," get_observation(data)\n",[152,111526,111527,111530,111532,111534,111536],{"class":281,"line":1237},[152,111528,111529],{"class":483},"        pole_angle ",[152,111531,1864],{"class":476},[152,111533,111373],{"class":483},[152,111535,2026],{"class":293},[152,111537,34583],{"class":483},[152,111539,111540,111543,111545,111547,111549],{"class":281,"line":1242},[152,111541,111542],{"class":483},"        pole_angular_velocity ",[152,111544,1864],{"class":476},[152,111546,111373],{"class":483},[152,111548,1888],{"class":293},[152,111550,34583],{"class":483},[152,111552,111553],{"class":281,"line":1253},[152,111554,307],{"emptyLinePlaceholder":306},[152,111556,111557,111560,111562,111565,111567,111569,111571,111573,111575],{"class":281,"line":1262},[152,111558,111559],{"class":483},"        action ",[152,111561,1864],{"class":476},[152,111563,111564],{"class":293}," 2.0",[152,111566,8160],{"class":476},[152,111568,111157],{"class":483},[152,111570,2289],{"class":476},[152,111572,63204],{"class":293},[152,111574,8160],{"class":476},[152,111576,111577],{"class":483}," pole_angular_velocity\n",[152,111579,111580,111582,111584,111586,111588,111590,111592,111594],{"class":281,"line":1272},[152,111581,111559],{"class":483},[152,111583,1864],{"class":476},[152,111585,108784],{"class":483},[152,111587,2340],{"class":476},[152,111589,103740],{"class":293},[152,111591,14051],{"class":483},[152,111593,103740],{"class":293},[152,111595,1825],{"class":483},[152,111597,111598],{"class":281,"line":1279},[152,111599,307],{"emptyLinePlaceholder":306},[152,111601,111602,111604,111606,111608,111610],{"class":281,"line":1284},[152,111603,107954],{"class":483},[152,111605,2000],{"class":293},[152,111607,6085],{"class":483},[152,111609,1864],{"class":476},[152,111611,108807],{"class":483},[152,111613,111614],{"class":281,"line":1289},[152,111615,102853],{"class":483},[152,111617,111618],{"class":281,"line":1301},[152,111619,307],{"emptyLinePlaceholder":306},[152,111621,111622,111625,111627],{"class":281,"line":1310},[152,111623,111624],{"class":483},"        reward ",[152,111626,1864],{"class":476},[152,111628,111629],{"class":483}," compute_reward(get_observation(data))\n",[152,111631,111632,111635,111637],{"class":281,"line":1320},[152,111633,111634],{"class":483},"        total_reward ",[152,111636,11109],{"class":476},[152,111638,111639],{"class":483}," reward\n",[152,111641,111642],{"class":281,"line":1327},[152,111643,307],{"emptyLinePlaceholder":306},[152,111645,111646,111648,111650,111652,111654,111656,111658],{"class":281,"line":11528},[152,111647,4147],{"class":476},[152,111649,32953],{"class":483},[152,111651,2136],{"class":476},[152,111653,7396],{"class":293},[152,111655,102896],{"class":476},[152,111657,5735],{"class":293},[152,111659,5382],{"class":483},[152,111661,111662,111664,111666,111669,111672,111675,111678,111680,111683,111686,111688,111690,111692,111694,111697,111699],{"class":281,"line":11536},[152,111663,35987],{"class":293},[152,111665,1819],{"class":483},[152,111667,111668],{"class":289},"\"step:\"",[152,111670,111671],{"class":483},", step, ",[152,111673,111674],{"class":289},"\"obs:\"",[152,111676,111677],{"class":483},", np.round(obs, ",[152,111679,1888],{"class":293},[152,111681,111682],{"class":483},"), ",[152,111684,111685],{"class":289},"\"action:\"",[152,111687,14051],{"class":483},[152,111689,33355],{"class":293},[152,111691,1819],{"class":483},[152,111693,1858],{"class":293},[152,111695,111696],{"class":483},"(action), ",[152,111698,1888],{"class":293},[152,111700,31834],{"class":483},[152,111702,111703],{"class":281,"line":11541},[152,111704,307],{"emptyLinePlaceholder":306},[152,111706,111707,111709,111711,111714,111716,111718,111721,111723],{"class":281,"line":18219},[152,111708,32636],{"class":293},[152,111710,1819],{"class":483},[152,111712,111713],{"class":289},"\"total_reward:\"",[152,111715,14051],{"class":483},[152,111717,33355],{"class":293},[152,111719,111720],{"class":483},"(total_reward, ",[152,111722,1888],{"class":293},[152,111724,31834],{"class":483},[152,111726,111727,111729,111731,111734,111737,111739],{"class":281,"line":18225},[152,111728,32636],{"class":293},[152,111730,1819],{"class":483},[152,111732,111733],{"class":289},"\"final obs:\"",[152,111735,111736],{"class":483},", np.round(get_observation(data), ",[152,111738,1888],{"class":293},[152,111740,31834],{"class":483},[152,111742,111743],{"class":281,"line":18248},[152,111744,307],{"emptyLinePlaceholder":306},[152,111746,111747],{"class":281,"line":18254},[152,111748,307],{"emptyLinePlaceholder":306},[152,111750,111751,111753,111755,111757,111759],{"class":281,"line":18277},[152,111752,3202],{"class":476},[152,111754,32557],{"class":293},[152,111756,102896],{"class":476},[152,111758,102899],{"class":289},[152,111760,5382],{"class":483},[152,111762,111763],{"class":281,"line":18291},[152,111764,102906],{"class":483},[19,111766,104907],{},[270,111768,111770],{"className":272,"code":111769,"language":274,"meta":275,"style":275},"touch ch6_cartpole.py\n",[277,111771,111772],{"__ignoreMap":275},[152,111773,111774,111776],{"class":281,"line":282},[152,111775,102620],{"class":285},[152,111777,111778],{"class":289}," ch6_cartpole.py\n",[19,111780,111781],{},"运行：",[270,111783,111785],{"className":272,"code":111784,"language":274,"meta":275,"style":275},"python ch6_cartpole.py\n",[277,111786,111787],{"__ignoreMap":275},[152,111788,111789,111791],{"class":281,"line":282},[152,111790,31717],{"class":285},[152,111792,111778],{"class":289},[14,111794,102909],{"id":102909},[19,111796,111797],{},"构造观测：",[270,111799,111801],{"className":31715,"code":111800,"language":31717,"meta":275,"style":275},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[277,111802,111803,111811],{"__ignoreMap":275},[152,111804,111805,111807,111809],{"class":281,"line":282},[152,111806,33284],{"class":476},[152,111808,111331],{"class":285},[152,111810,111334],{"class":483},[152,111812,111813,111815],{"class":281,"line":303},[152,111814,5732],{"class":476},[152,111816,111341],{"class":483},[19,111818,111819,111822,111823,111825,111826,111828],{},[277,111820,111821],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[277,111824,105367],{}," 2 维，",[277,111827,105697],{}," 2 维，所以 obs 是 4 维。",[19,111830,111831],{},"设置初始角度：",[270,111833,111835],{"className":31715,"code":111834,"language":31717,"meta":275,"style":275},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[277,111836,111837,111849],{"__ignoreMap":275},[152,111838,111839,111841,111843,111845,111847],{"class":281,"line":282},[152,111840,106036],{"class":483},[152,111842,2026],{"class":293},[152,111844,6085],{"class":483},[152,111846,1864],{"class":476},[152,111848,111477],{"class":293},[152,111850,111851],{"class":281,"line":303},[152,111852,105880],{"class":483},[19,111854,111855],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111857,111858],{},"简单反馈控制：",[270,111860,111862],{"className":31715,"code":111861,"language":31717,"meta":275,"style":275},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[277,111863,111864,111884],{"__ignoreMap":275},[152,111865,111866,111868,111870,111872,111874,111876,111878,111880,111882],{"class":281,"line":282},[152,111867,108779],{"class":483},[152,111869,1864],{"class":476},[152,111871,111564],{"class":293},[152,111873,8160],{"class":476},[152,111875,111157],{"class":483},[152,111877,2289],{"class":476},[152,111879,63204],{"class":293},[152,111881,8160],{"class":476},[152,111883,111577],{"class":483},[152,111885,111886,111888,111890,111892,111894,111896,111898,111900],{"class":281,"line":303},[152,111887,108779],{"class":483},[152,111889,1864],{"class":476},[152,111891,108784],{"class":483},[152,111893,2340],{"class":476},[152,111895,103740],{"class":293},[152,111897,14051],{"class":483},[152,111899,103740],{"class":293},[152,111901,1825],{"class":483},[19,111903,111904],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111906,111907],{},"限制动作：",[270,111909,111911],{"className":31715,"code":111910,"language":31717,"meta":275,"style":275},"np.clip(action, -1.0, 1.0)\n",[277,111912,111913],{"__ignoreMap":275},[152,111914,111915,111918,111920,111922,111924,111926],{"class":281,"line":282},[152,111916,111917],{"class":483},"np.clip(action, ",[152,111919,2340],{"class":476},[152,111921,103740],{"class":293},[152,111923,14051],{"class":483},[152,111925,103740],{"class":293},[152,111927,1825],{"class":483},[19,111929,111930,111931,111934],{},"因为 XML 里 ",[277,111932,111933],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[14,111936,103045],{"id":103045},[270,111938,111939],{"className":31715,"code":111800,"language":31717,"meta":275,"style":275},[277,111940,111941,111949],{"__ignoreMap":275},[152,111942,111943,111945,111947],{"class":281,"line":282},[152,111944,33284],{"class":476},[152,111946,111331],{"class":285},[152,111948,111334],{"class":483},[152,111950,111951,111953],{"class":281,"line":303},[152,111952,5732],{"class":476},[152,111954,111341],{"class":483},[19,111956,111957,111958,111961,111962,111965,111966,111969],{},"这段定义了一个函数，用来获取当前观测。",[277,111959,111960],{},"data.qpos.copy()"," 是位置数组副本，",[277,111963,111964],{},"data.qvel.copy()"," 是速度数组副本。",[277,111967,111968],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111971,111972],{},"在本章模型里：",[270,111974,111977],{"className":111975,"code":111976,"language":6829,"meta":275},[6827],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[277,111978,111976],{"__ignoreMap":275},[19,111980,111981],{},"所以返回的 obs 是：",[270,111983,111986],{"className":111984,"code":111985,"language":6829,"meta":275},[6827],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[277,111987,111985],{"__ignoreMap":275},[270,111989,111991],{"className":31715,"code":111990,"language":31717,"meta":275,"style":275},"def compute_reward(obs: np.ndarray) -> float:\n",[277,111992,111993],{"__ignoreMap":275},[152,111994,111995,111997,111999,112001,112003],{"class":281,"line":282},[152,111996,33284],{"class":476},[152,111998,111356],{"class":285},[152,112000,111359],{"class":483},[152,112002,1858],{"class":293},[152,112004,5382],{"class":483},[19,112006,112007,112008,112011],{},"这行定义奖励函数。输入是观测 ",[277,112009,112010],{},"obs","，输出是一个浮点数奖励。",[270,112013,112015],{"className":31715,"code":112014,"language":31717,"meta":275,"style":275},"cart_x = obs[0]\npole_angle = obs[1]\n",[277,112016,112017,112030],{"__ignoreMap":275},[152,112018,112019,112022,112024,112026,112028],{"class":281,"line":282},[152,112020,112021],{"class":483},"cart_x ",[152,112023,1864],{"class":476},[152,112025,111373],{"class":483},[152,112027,2000],{"class":293},[152,112029,34583],{"class":483},[152,112031,112032,112035,112037,112039,112041],{"class":281,"line":303},[152,112033,112034],{"class":483},"pole_angle ",[152,112036,1864],{"class":476},[152,112038,111373],{"class":483},[152,112040,2026],{"class":293},[152,112042,34583],{"class":483},[19,112044,112045,112046,112049,112050,112053],{},"数组索引从 0 开始。",[277,112047,112048],{},"obs[0]"," 是第一个元素，也就是小车位置。",[277,112051,112052],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[270,112055,112056],{"className":31715,"code":111125,"language":31717,"meta":275,"style":275},[277,112057,112058],{"__ignoreMap":275},[152,112059,112060,112062,112064,112066,112068,112070,112072,112074,112076,112078,112080,112082,112084,112086],{"class":281,"line":282},[152,112061,18661],{"class":476},[152,112063,111134],{"class":293},[152,112065,1819],{"class":483},[152,112067,103740],{"class":293},[152,112069,53608],{"class":476},[152,112071,111143],{"class":293},[152,112073,8160],{"class":476},[152,112075,111148],{"class":483},[152,112077,2263],{"class":476},[152,112079,111148],{"class":483},[152,112081,2340],{"class":476},[152,112083,111157],{"class":483},[152,112085,2263],{"class":476},[152,112087,111162],{"class":483},[19,112089,112090,112091,112094,112095,112098],{},"这行计算奖励。",[277,112092,112093],{},"cart_x * cart_x"," 是小车位置的平方，",[277,112096,112097],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[270,112100,112102],{"className":31715,"code":112101,"language":31717,"meta":275,"style":275},"data.qpos[1] = 0.1\n",[277,112103,112104],{"__ignoreMap":275},[152,112105,112106,112108,112110,112112,112114],{"class":281,"line":282},[152,112107,106036],{"class":483},[152,112109,2026],{"class":293},[152,112111,6085],{"class":483},[152,112113,1864],{"class":476},[152,112115,111477],{"class":293},[19,112117,112118,112119,112121,112122,112124],{},"手动设置杆子的初始角度。因为 ",[277,112120,106793],{}," 是小车位置，",[277,112123,106796],{}," 是杆子角度，所以这里改的是杆子。",[270,112126,112127],{"className":31715,"code":105880,"language":31717,"meta":275,"style":275},[277,112128,112129],{"__ignoreMap":275},[152,112130,112131],{"class":281,"line":282},[152,112132,105880],{"class":483},[19,112134,106839,112135,112137],{},[277,112136,105367],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[270,112139,112141],{"className":31715,"code":112140,"language":31717,"meta":275,"style":275},"total_reward = 0.0\n",[277,112142,112143],{"__ignoreMap":275},[152,112144,112145,112148,112150],{"class":281,"line":282},[152,112146,112147],{"class":483},"total_reward ",[152,112149,1864],{"class":476},[152,112151,106098],{"class":293},[19,112153,112154],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[270,112156,112158],{"className":31715,"code":112157,"language":31717,"meta":275,"style":275},"for step in range(1000):\n",[277,112159,112160],{"__ignoreMap":275},[152,112161,112162,112164,112166,112168,112170,112172,112174],{"class":281,"line":282},[152,112163,4668],{"class":476},[152,112165,32953],{"class":483},[152,112167,27653],{"class":476},[152,112169,33780],{"class":293},[152,112171,1819],{"class":483},[152,112173,8052],{"class":293},[152,112175,32123],{"class":483},[19,112177,112178,112179,112181],{},"循环 1000 步。",[277,112180,108471],{}," 是当前步数，从 0 到 999。",[270,112183,112185],{"className":31715,"code":112184,"language":31717,"meta":275,"style":275},"obs = get_observation(data)\n",[277,112186,112187],{"__ignoreMap":275},[152,112188,112189,112192,112194],{"class":281,"line":282},[152,112190,112191],{"class":483},"obs ",[152,112193,1864],{"class":476},[152,112195,111524],{"class":483},[19,112197,112198,112199,29984],{},"读取当前状态，保存到 ",[277,112200,112010],{},[270,112202,112204],{"className":31715,"code":112203,"language":31717,"meta":275,"style":275},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[277,112205,112206,112218],{"__ignoreMap":275},[152,112207,112208,112210,112212,112214,112216],{"class":281,"line":282},[152,112209,112034],{"class":483},[152,112211,1864],{"class":476},[152,112213,111373],{"class":483},[152,112215,2026],{"class":293},[152,112217,34583],{"class":483},[152,112219,112220,112223,112225,112227,112229],{"class":281,"line":303},[152,112221,112222],{"class":483},"pole_angular_velocity ",[152,112224,1864],{"class":476},[152,112226,111373],{"class":483},[152,112228,1888],{"class":293},[152,112230,34583],{"class":483},[19,112232,112233,112234,112237,112238,29984],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[277,112235,112236],{},"obs[3]","？因为 obs 的顺序是 ",[277,112239,112240],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[270,112242,112244],{"className":31715,"code":112243,"language":31717,"meta":275,"style":275},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[277,112245,112246],{"__ignoreMap":275},[152,112247,112248,112250,112252,112254,112256,112258,112260,112262,112264],{"class":281,"line":282},[152,112249,108779],{"class":483},[152,112251,1864],{"class":476},[152,112253,111564],{"class":293},[152,112255,8160],{"class":476},[152,112257,111157],{"class":483},[152,112259,2289],{"class":476},[152,112261,63204],{"class":293},[152,112263,8160],{"class":476},[152,112265,111577],{"class":483},[19,112267,112268,112269,102355,112271,112273],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[277,112270,106597],{},[277,112272,36666],{}," 是人为设置的系数，不是固定公式。",[270,112275,112277],{"className":31715,"code":112276,"language":31717,"meta":275,"style":275},"action = np.clip(action, -1.0, 1.0)\n",[277,112278,112279],{"__ignoreMap":275},[152,112280,112281,112283,112285,112287,112289,112291,112293,112295],{"class":281,"line":282},[152,112282,108779],{"class":483},[152,112284,1864],{"class":476},[152,112286,108784],{"class":483},[152,112288,2340],{"class":476},[152,112290,103740],{"class":293},[152,112292,14051],{"class":483},[152,112294,103740],{"class":293},[152,112296,1825],{"class":483},[19,112298,112299],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[270,112301,112302],{"className":31715,"code":111110,"language":31717,"meta":275,"style":275},[277,112303,112304],{"__ignoreMap":275},[152,112305,112306,112308,112310,112312,112314],{"class":281,"line":282},[152,112307,107208],{"class":483},[152,112309,2000],{"class":293},[152,112311,6085],{"class":483},[152,112313,1864],{"class":476},[152,112315,108807],{"class":483},[19,112317,112318],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[270,112320,112321],{"className":31715,"code":105842,"language":31717,"meta":275,"style":275},[277,112322,112323],{"__ignoreMap":275},[152,112324,112325],{"class":281,"line":282},[152,112326,105842],{"class":483},[19,112328,112329,112330,112332],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[277,112331,107463],{}," 计算小车和杆子的下一刻状态。",[270,112334,112336],{"className":31715,"code":112335,"language":31717,"meta":275,"style":275},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[277,112337,112338,112347],{"__ignoreMap":275},[152,112339,112340,112343,112345],{"class":281,"line":282},[152,112341,112342],{"class":483},"reward ",[152,112344,1864],{"class":476},[152,112346,111629],{"class":483},[152,112348,112349,112351,112353],{"class":281,"line":303},[152,112350,112147],{"class":483},[152,112352,11109],{"class":476},[152,112354,111639],{"class":483},[19,112356,112357,112358,112360,112361,112364,112365,29984],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[277,112359,11109],{}," 是简写，",[277,112362,112363],{},"total_reward += reward"," 等价于 ",[277,112366,112367],{},"total_reward = total_reward + reward",[270,112369,112371],{"className":31715,"code":112370,"language":31717,"meta":275,"style":275},"if step % 100 == 0:\n",[277,112372,112373],{"__ignoreMap":275},[152,112374,112375,112377,112379,112381,112383,112385,112387],{"class":281,"line":282},[152,112376,3202],{"class":476},[152,112378,32953],{"class":483},[152,112380,2136],{"class":476},[152,112382,7396],{"class":293},[152,112384,102896],{"class":476},[152,112386,5735],{"class":293},[152,112388,5382],{"class":483},[19,112390,112391,112393,112394,112397],{},[277,112392,2136],{}," 是取余数。",[277,112395,112396],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[270,112399,112401],{"className":31715,"code":112400,"language":31717,"meta":275,"style":275},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[277,112402,112403],{"__ignoreMap":275},[152,112404,112405,112407,112409,112411,112413,112415,112417,112419,112421,112423,112425,112427,112429,112431,112433,112435],{"class":281,"line":282},[152,112406,31752],{"class":293},[152,112408,1819],{"class":483},[152,112410,111668],{"class":289},[152,112412,111671],{"class":483},[152,112414,111674],{"class":289},[152,112416,111677],{"class":483},[152,112418,1888],{"class":293},[152,112420,111682],{"class":483},[152,112422,111685],{"class":289},[152,112424,14051],{"class":483},[152,112426,33355],{"class":293},[152,112428,1819],{"class":483},[152,112430,1858],{"class":293},[152,112432,111696],{"class":483},[152,112434,1888],{"class":293},[152,112436,31834],{"class":483},[19,112438,112439,112440,112443,112444,112447],{},"打印当前步数、观测和动作。",[277,112441,112442],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[277,112445,112446],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[1760,112449,103653],{"id":103652},[19,112451,112452],{},"观测向量:",[270,112454,112457],{"className":112455,"code":112456,"language":6829,"meta":275},[6827],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[277,112458,112456],{"__ignoreMap":275},[19,112460,112461],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112463,112464],{},"每隔 100 步会打印一次：",[270,112466,112469],{"className":112467,"code":112468,"language":6829,"meta":275},[6827],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[277,112470,112468],{"__ignoreMap":275},[19,112472,112473],{},"重点观察：",[416,112475,112476,112482,112487],{},[419,112477,112478,112481],{},[277,112479,112480],{},"pole_angle"," 是否越来越大。",[419,112483,112484,112486],{},[277,112485,111063],{}," 是否跑得太远。",[419,112488,112489,112490,83876,112492,29984],{},"action 是否经常被 clip 到 ",[277,112491,105252],{},[277,112493,2026],{},[19,112495,112496],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[1760,112498,103685],{"id":103684},[416,112500,112501,112507,112510,112516,112526,112532,112535],{},[419,112502,112503,112504,29984],{},"把初始角度改为 ",[277,112505,112506],{},"data.qpos[1] = 0.3",[419,112508,112509],{},"重新运行，观察控制是否变差。",[419,112511,112512,112513,112515],{},"把 actuator ",[277,112514,108404],{}," 改小。",[419,112517,112518,112519,112522,112523,29984],{},"打印 ",[277,112520,112521],{},"model.nq, model.nv, model.nu","，应为 ",[277,112524,112525],{},"2 2 1",[419,112527,112528,112529,112531],{},"把 reward 里的 ",[277,112530,112097],{}," 系数改大，观察总奖励变化。",[419,112533,112534],{},"把控制器改成反号，观察杆子是否更容易倒。",[419,112536,112537],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[1760,112539,103790],{"id":103789},[14,112541,112542],{"id":112542},"杆子方向和预期不一致",[19,112544,103733,112545,112547,112548,112550],{},[277,112546,107576],{}," 和 capsule 的 ",[277,112549,104513],{},"，必要时用 viewer 可视化确认。",[14,112552,112553],{"id":112553},"控制器越控越倒",[19,112555,112556],{},"说明反馈符号可能反了，尝试:",[270,112558,112560],{"className":31715,"code":112559,"language":31717,"meta":275,"style":275},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[277,112561,112562],{"__ignoreMap":275},[152,112563,112564,112566,112568,112570,112572,112574,112576,112578,112580,112582],{"class":281,"line":282},[152,112565,108779],{"class":483},[152,112567,1864],{"class":476},[152,112569,53608],{"class":476},[152,112571,106597],{"class":293},[152,112573,8160],{"class":476},[152,112575,111157],{"class":483},[152,112577,2340],{"class":476},[152,112579,63204],{"class":293},[152,112581,8160],{"class":476},[152,112583,111577],{"class":483},[14,112585,112586],{"id":112586},"小车飞走",[19,112588,112589,112590,112592,112593,112596],{},"降低 ",[277,112591,108404],{}," 或缩小 ",[277,112594,112595],{},"action"," 的 clip 范围。",[14,112598,112600,112602],{"id":112599},"obs3-为什么是杆子角速度",[277,112601,112236],{}," 为什么是杆子角速度",[19,112604,112605],{},"因为这个模型里：",[270,112607,112610],{"className":112608,"code":112609,"language":6829,"meta":275},[6827],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[277,112611,112609],{"__ignoreMap":275},[19,112613,111084],{},[270,112615,112618],{"className":112616,"code":112617,"language":6829,"meta":275},[6827],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[277,112619,112617],{"__ignoreMap":275},[14,112621,112623],{"id":112622},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112625,112626],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[1760,112628,103944],{"id":103943},[19,112630,112631],{},"一个控制任务通常包含：",[416,112633,112634,112637,112645,112650,112653],{},[419,112635,112636],{},"模型：Cartpole 的 body、joint、actuator。",[419,112638,112639,112640,2021,112642,112644],{},"观测：从 ",[277,112641,105367],{},[277,112643,105697],{}," 里取状态。",[419,112646,112647,112648,29984],{},"动作：写入 ",[277,112649,102413],{},[419,112651,112652],{},"奖励：根据任务目标打分。",[419,112654,112655],{},"循环：obs -> action -> step -> reward。",[19,112657,112658],{},"这就是后面 Gymnasium 环境的基本骨架。",[1736,112660,105623],{},{"title":275,"searchDepth":303,"depth":303,"links":112662},[112663,112664,112665,112670,112674,112675,112676,112684],{"id":101983,"depth":303,"text":101984},{"id":102106,"depth":303,"text":102107},{"id":102381,"depth":303,"text":102382,"children":112666},[112667,112668,112669],{"id":111037,"depth":310,"text":111038},{"id":111102,"depth":310,"text":111103},{"id":111118,"depth":310,"text":111119},{"id":102589,"depth":303,"text":102590,"children":112671},[112672,112673],{"id":102909,"depth":310,"text":102909},{"id":103045,"depth":310,"text":103045},{"id":103652,"depth":303,"text":103653},{"id":103684,"depth":303,"text":103685},{"id":103789,"depth":303,"text":103790,"children":112677},[112678,112679,112680,112681,112683],{"id":112542,"depth":310,"text":112542},{"id":112553,"depth":310,"text":112553},{"id":112586,"depth":310,"text":112586},{"id":112599,"depth":310,"text":112682},"obs[3] 为什么是杆子角速度",{"id":112622,"depth":310,"text":112623},{"id":103943,"depth":303,"text":103944},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110773,"description":275},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112691,"title":112692,"body":112693,"description":275,"extension":1744,"meta":114707,"navigation":306,"path":114708,"seo":114709,"stem":114710,"__hash__":114711},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112694,"toc":114683},[112695,112698,112700,112703,112705,112722,112725,112728,112734,112737,112739,112741,112765,112767,112781,112783,112824,112826,112844,112846,112849,112855,112858,112886,112890,112896,112921,112924,112955,112962,112965,112968,112974,112977,112983,112986,112992,112996,112999,113024,113027,113029,113789,113791,113803,113805,113816,113818,113821,113838,113841,113843,113854,113857,113859,113905,113908,113921,113924,114006,114009,114011,114027,114037,114050,114053,114092,114102,114113,114123,114136,114139,114168,114171,114181,114184,114190,114207,114218,114220,114226,114243,114254,114275,114278,114290,114293,114314,114317,114325,114333,114350,114353,114422,114429,114437,114440,114453,114460,114462,114465,114471,114474,114477,114483,114489,114491,114531,114533,114539,114548,114551,114553,114573,114576,114579,114585,114589,114591,114618,114621,114624,114651,114657,114660,114663,114665,114668,114671,114677,114680],[10,112696,112692],{"id":112697},"_7控制任务reacher-机械臂到达目标",[1760,112699,101984],{"id":101983},[19,112701,112702],{},"本章搭建一个二维两关节 reacher 任务。",[19,112704,105668],{},[416,112706,112707,112710,112713,112716,112719],{},[419,112708,112709],{},"两个 hinge joint",[419,112711,112712],{},"两个 motor actuator",[419,112714,112715],{},"site 作为末端点和目标点",[419,112717,112718],{},"根据末端和目标距离设计 reward",[419,112720,112721],{},"构造机械臂任务的基本形式",[19,112723,112724],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112726,112727],{},"Reacher 任务可以理解为：",[270,112729,112732],{"className":112730,"code":112731,"language":6829,"meta":275},[6827],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[277,112733,112731],{"__ignoreMap":275},[19,112735,112736],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[1760,112738,102107],{"id":102106},[19,112740,102110],{},[270,112742,112743],{"className":272,"code":105725,"language":274,"meta":275,"style":275},[277,112744,112745],{"__ignoreMap":275},[152,112746,112747,112749,112751,112753,112755,112757,112759,112761,112763],{"class":281,"line":282},[152,112748,26188],{"class":285},[152,112750,27921],{"class":289},[152,112752,25446],{"class":289},[152,112754,28005],{"class":293},[152,112756,105740],{"class":289},[152,112758,102135],{"class":289},[152,112760,103838],{"class":289},[152,112762,102151],{"class":289},[152,112764,105749],{"class":289},[19,112766,104156],{},[270,112768,112769],{"className":272,"code":102256,"language":274,"meta":275,"style":275},[277,112770,112771],{"__ignoreMap":275},[152,112772,112773,112775,112777,112779],{"class":281,"line":282},[152,112774,25443],{"class":285},[152,112776,25446],{"class":289},[152,112778,102267],{"class":289},[152,112780,102270],{"class":289},[19,112782,104173],{},[270,112784,112786],{"className":272,"code":112785,"language":274,"meta":275,"style":275},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[277,112787,112788,112805,112814],{"__ignoreMap":275},[152,112789,112790,112792,112794,112796,112799,112801,112803],{"class":281,"line":282},[152,112791,31667],{"class":285},[152,112793,757],{"class":289},[152,112795,26726],{"class":293},[152,112797,112798],{"class":289}," mujoco-reacher",[152,112800,102312],{"class":289},[152,112802,102315],{"class":293},[152,112804,102318],{"class":293},[152,112806,112807,112809,112811],{"class":281,"line":303},[152,112808,31667],{"class":285},[152,112810,102325],{"class":289},[152,112812,112813],{"class":289}," mujoco-reacher\n",[152,112815,112816,112818,112820,112822],{"class":281,"line":310},[152,112817,25443],{"class":285},[152,112819,25446],{"class":289},[152,112821,102267],{"class":289},[152,112823,102270],{"class":289},[19,112825,102341],{},[416,112827,112828,112831,112834],{},[419,112829,112830],{},"本章使用低维状态，不使用图像输入。",[419,112832,112833],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[419,112835,112836,112837,2021,112839,2021,112841,112843],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[277,112838,105367],{},[277,112840,105697],{},[277,112842,105017],{}," 的方法一致。",[1760,112845,102382],{"id":102381},[19,112847,112848],{},"Reacher 任务核心:",[270,112850,112853],{"className":112851,"code":112852,"language":6829,"meta":275},[6827],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[277,112854,112852],{"__ignoreMap":275},[19,112856,112857],{},"读取 site 世界坐标:",[270,112859,112861],{"className":31715,"code":112860,"language":31717,"meta":275,"style":275},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[277,112862,112863,112876],{"__ignoreMap":275},[152,112864,112865,112867,112869,112871,112874],{"class":281,"line":282},[152,112866,104971],{"class":483},[152,112868,1864],{"class":476},[152,112870,104742],{"class":483},[152,112872,112873],{"class":289},"\"tip\"",[152,112875,1825],{"class":483},[152,112877,112878,112881,112883],{"class":281,"line":303},[152,112879,112880],{"class":483},"tip_pos ",[152,112882,1864],{"class":476},[152,112884,112885],{"class":483}," data.site_xpos[site_id]\n",[14,112887,112889],{"id":112888},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112891,112892,112893,112895],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[277,112894,105367],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[270,112897,112899],{"className":31715,"code":112898,"language":31717,"meta":275,"style":275},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[277,112900,112901,112911],{"__ignoreMap":275},[152,112902,112903,112906,112908],{"class":281,"line":282},[152,112904,112905],{"class":483},"tip ",[152,112907,1864],{"class":476},[152,112909,112910],{"class":483}," data.site_xpos[tip_site_id]\n",[152,112912,112913,112916,112918],{"class":281,"line":303},[152,112914,112915],{"class":483},"target ",[152,112917,1864],{"class":476},[152,112919,112920],{"class":483}," data.site_xpos[target_site_id]\n",[19,112922,112923],{},"这样 reward 就很容易写：",[270,112925,112927],{"className":31715,"code":112926,"language":31717,"meta":275,"style":275},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[277,112928,112929,112944],{"__ignoreMap":275},[152,112930,112931,112934,112936,112939,112941],{"class":281,"line":282},[152,112932,112933],{"class":483},"dist ",[152,112935,1864],{"class":476},[152,112937,112938],{"class":483}," np.linalg.norm(tip ",[152,112940,2340],{"class":476},[152,112942,112943],{"class":483}," target)\n",[152,112945,112946,112948,112950,112952],{"class":281,"line":303},[152,112947,112342],{"class":483},[152,112949,1864],{"class":476},[152,112951,53608],{"class":476},[152,112953,112954],{"class":483},"dist\n",[19,112956,112957,112958,112961],{},"距离越小，",[277,112959,112960],{},"-dist"," 越接近 0，奖励越高。",[14,112963,112964],{"id":112964},"两关节机械臂的状态",[19,112966,112967],{},"这个模型有两个 hinge joint：",[270,112969,112972],{"className":112970,"code":112971,"language":6829,"meta":275},[6827],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[277,112973,112971],{"__ignoreMap":275},[19,112975,112976],{},"再加上末端和目标位置：",[270,112978,112981],{"className":112979,"code":112980,"language":6829,"meta":275},[6827],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[277,112982,112980],{"__ignoreMap":275},[19,112984,112985],{},"总维度：",[270,112987,112990],{"className":112988,"code":112989,"language":6829,"meta":275},[6827],"2 + 2 + 3 + 3 = 10\n",[277,112991,112989],{"__ignoreMap":275},[14,112993,112995],{"id":112994},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112997,112998],{},"本章把重力设为：",[270,113000,113002],{"className":54404,"code":113001,"language":54406,"meta":275,"style":275},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[277,113003,113004],{"__ignoreMap":275},[152,113005,113006,113008,113010,113012,113014,113016,113018,113020,113022],{"class":281,"line":282},[152,113007,844],{"class":483},[152,113009,70503],{"class":52637},[152,113011,102531],{"class":285},[152,113013,1864],{"class":483},[152,113015,102536],{"class":289},[152,113017,102539],{"class":285},[152,113019,1864],{"class":483},[152,113021,105108],{"class":289},[152,113023,102481],{"class":483},[19,113025,113026],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[1760,113028,102590],{"id":102589},[270,113030,113032],{"className":31715,"code":113031,"language":31717,"meta":275,"style":275},"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",[277,113033,113034,113040,113050,113054,113058,113066,113071,113076,113080,113084,113089,113094,113098,113103,113108,113113,113117,113122,113127,113132,113137,113141,113145,113149,113153,113157,113162,113167,113171,113175,113179,113183,113187,113202,113211,113223,113246,113253,113257,113261,113271,113285,113299,113306,113310,113314,113328,113340,113352,113365,113380,113397,113401,113405,113417,113429,113437,113445,113449,113465,113470,113483,113496,113511,113515,113550,113582,113586,113590,113599,113603,113619,113629,113640,113656,113672,113688,113704,113708,113726,113746,113765,113769,113773,113785],{"__ignoreMap":275},[152,113035,113036,113038],{"class":281,"line":282},[152,113037,31729],{"class":476},[152,113039,102638],{"class":483},[152,113041,113042,113044,113046,113048],{"class":281,"line":303},[152,113043,31729],{"class":476},[152,113045,32717],{"class":483},[152,113047,32720],{"class":476},[152,113049,32723],{"class":483},[152,113051,113052],{"class":281,"line":310},[152,113053,307],{"emptyLinePlaceholder":306},[152,113055,113056],{"class":281,"line":324},[152,113057,307],{"emptyLinePlaceholder":306},[152,113059,113060,113062,113064],{"class":281,"line":329},[152,113061,102651],{"class":293},[152,113063,15180],{"class":476},[152,113065,102656],{"class":289},[152,113067,113068],{"class":281,"line":343},[152,113069,113070],{"class":289},"\u003Cmujoco model=\"two_link_reacher\">\n",[152,113072,113073],{"class":281,"line":348},[152,113074,113075],{"class":289},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[152,113077,113078],{"class":281,"line":362},[152,113079,307],{"emptyLinePlaceholder":306},[152,113081,113082],{"class":281,"line":367},[152,113083,102675],{"class":289},[152,113085,113086],{"class":281,"line":381},[152,113087,113088],{"class":289},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[152,113090,113091],{"class":281,"line":386},[152,113092,113093],{"class":289},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[152,113095,113096],{"class":281,"line":932},[152,113097,307],{"emptyLinePlaceholder":306},[152,113099,113100],{"class":281,"line":942},[152,113101,113102],{"class":289},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[152,113104,113105],{"class":281,"line":949},[152,113106,113107],{"class":289},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[152,113109,113110],{"class":281,"line":954},[152,113111,113112],{"class":289},"      \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",[152,113114,113115],{"class":281,"line":959},[152,113116,307],{"emptyLinePlaceholder":306},[152,113118,113119],{"class":281,"line":970},[152,113120,113121],{"class":289},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[152,113123,113124],{"class":281,"line":979},[152,113125,113126],{"class":289},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[152,113128,113129],{"class":281,"line":989},[152,113130,113131],{"class":289},"        \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",[152,113133,113134],{"class":281,"line":996},[152,113135,113136],{"class":289},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[152,113138,113139],{"class":281,"line":1001},[152,113140,107775],{"class":289},[152,113142,113143],{"class":281,"line":1006},[152,113144,102704],{"class":289},[152,113146,113147],{"class":281,"line":1018},[152,113148,102709],{"class":289},[152,113150,113151],{"class":281,"line":1027},[152,113152,307],{"emptyLinePlaceholder":306},[152,113154,113155],{"class":281,"line":1037},[152,113156,107792],{"class":289},[152,113158,113159],{"class":281,"line":1044},[152,113160,113161],{"class":289},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[152,113163,113164],{"class":281,"line":1049},[152,113165,113166],{"class":289},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[152,113168,113169],{"class":281,"line":1054},[152,113170,107802],{"class":289},[152,113172,113173],{"class":281,"line":1065},[152,113174,102714],{"class":289},[152,113176,113177],{"class":281,"line":1074},[152,113178,97035],{"class":289},[152,113180,113181],{"class":281,"line":1084},[152,113182,307],{"emptyLinePlaceholder":306},[152,113184,113185],{"class":281,"line":1091},[152,113186,307],{"emptyLinePlaceholder":306},[152,113188,113189,113191,113194,113197,113199],{"class":281,"line":1096},[152,113190,33284],{"class":476},[152,113192,113193],{"class":285}," site_position",[152,113195,113196],{"class":483},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[152,113198,2974],{"class":293},[152,113200,113201],{"class":483},") -> np.ndarray:\n",[152,113203,113204,113206,113208],{"class":281,"line":1101},[152,113205,104737],{"class":483},[152,113207,1864],{"class":476},[152,113209,113210],{"class":483}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[152,113212,113213,113215,113217,113219,113221],{"class":281,"line":1112},[152,113214,4744],{"class":476},[152,113216,104786],{"class":483},[152,113218,844],{"class":476},[152,113220,5735],{"class":293},[152,113222,5382],{"class":483},[152,113224,113225,113227,113229,113231,113233,113236,113238,113240,113242,113244],{"class":281,"line":1121},[152,113226,104769],{"class":476},[152,113228,104772],{"class":293},[152,113230,1819],{"class":483},[152,113232,1870],{"class":476},[152,113234,113235],{"class":289},"\"site not found: ",[152,113237,2703],{"class":293},[152,113239,81147],{"class":483},[152,113241,2752],{"class":293},[152,113243,2059],{"class":289},[152,113245,1825],{"class":483},[152,113247,113248,113250],{"class":281,"line":1131},[152,113249,5732],{"class":476},[152,113251,113252],{"class":483}," data.site_xpos[site_id].copy()\n",[152,113254,113255],{"class":281,"line":1138},[152,113256,307],{"emptyLinePlaceholder":306},[152,113258,113259],{"class":281,"line":1143},[152,113260,307],{"emptyLinePlaceholder":306},[152,113262,113263,113265,113268],{"class":281,"line":1148},[152,113264,33284],{"class":476},[152,113266,113267],{"class":285}," get_obs",[152,113269,113270],{"class":483},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[152,113272,113273,113276,113278,113281,113283],{"class":281,"line":1159},[152,113274,113275],{"class":483},"    tip ",[152,113277,1864],{"class":476},[152,113279,113280],{"class":483}," site_position(model, data, ",[152,113282,112873],{"class":289},[152,113284,1825],{"class":483},[152,113286,113287,113290,113292,113294,113297],{"class":281,"line":1168},[152,113288,113289],{"class":483},"    target ",[152,113291,1864],{"class":476},[152,113293,113280],{"class":483},[152,113295,113296],{"class":289},"\"target\"",[152,113298,1825],{"class":483},[152,113300,113301,113303],{"class":281,"line":1178},[152,113302,5732],{"class":476},[152,113304,113305],{"class":483}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[152,113307,113308],{"class":281,"line":1185},[152,113309,307],{"emptyLinePlaceholder":306},[152,113311,113312],{"class":281,"line":1190},[152,113313,307],{"emptyLinePlaceholder":306},[152,113315,113316,113318,113321,113324,113326],{"class":281,"line":1195},[152,113317,33284],{"class":476},[152,113319,113320],{"class":285}," reward",[152,113322,113323],{"class":483},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[152,113325,1858],{"class":293},[152,113327,5382],{"class":483},[152,113329,113330,113332,113334,113336,113338],{"class":281,"line":1206},[152,113331,113275],{"class":483},[152,113333,1864],{"class":476},[152,113335,113280],{"class":483},[152,113337,112873],{"class":289},[152,113339,1825],{"class":483},[152,113341,113342,113344,113346,113348,113350],{"class":281,"line":1215},[152,113343,113289],{"class":483},[152,113345,1864],{"class":476},[152,113347,113280],{"class":483},[152,113349,113296],{"class":289},[152,113351,1825],{"class":483},[152,113353,113354,113357,113359,113361,113363],{"class":281,"line":1225},[152,113355,113356],{"class":483},"    dist ",[152,113358,1864],{"class":476},[152,113360,112938],{"class":483},[152,113362,2340],{"class":476},[152,113364,112943],{"class":483},[152,113366,113367,113370,113372,113375,113377],{"class":281,"line":1232},[152,113368,113369],{"class":483},"    control_cost ",[152,113371,1864],{"class":476},[152,113373,113374],{"class":293}," 0.01",[152,113376,8160],{"class":476},[152,113378,113379],{"class":483}," np.sum(np.square(data.ctrl))\n",[152,113381,113382,113384,113386,113388,113390,113392,113394],{"class":281,"line":1237},[152,113383,5732],{"class":476},[152,113385,111134],{"class":293},[152,113387,1819],{"class":483},[152,113389,2340],{"class":476},[152,113391,112933],{"class":483},[152,113393,2340],{"class":476},[152,113395,113396],{"class":483}," control_cost)\n",[152,113398,113399],{"class":281,"line":1242},[152,113400,307],{"emptyLinePlaceholder":306},[152,113402,113403],{"class":281,"line":1253},[152,113404,307],{"emptyLinePlaceholder":306},[152,113406,113407,113409,113411,113413,113415],{"class":281,"line":1262},[152,113408,33284],{"class":476},[152,113410,3624],{"class":285},[152,113412,102735],{"class":483},[152,113414,97023],{"class":293},[152,113416,5382],{"class":483},[152,113418,113419,113421,113423,113425,113427],{"class":281,"line":1272},[152,113420,102744],{"class":483},[152,113422,1864],{"class":476},[152,113424,102749],{"class":483},[152,113426,102651],{"class":293},[152,113428,1825],{"class":483},[152,113430,113431,113433,113435],{"class":281,"line":1279},[152,113432,102758],{"class":483},[152,113434,1864],{"class":476},[152,113436,102763],{"class":483},[152,113438,113439,113441,113443],{"class":281,"line":1284},[152,113440,111490],{"class":483},[152,113442,1864],{"class":476},[152,113444,106098],{"class":293},[152,113446,113447],{"class":281,"line":1289},[152,113448,307],{"emptyLinePlaceholder":306},[152,113450,113451,113453,113455,113457,113459,113461,113463],{"class":281,"line":1301},[152,113452,4844],{"class":476},[152,113454,32953],{"class":483},[152,113456,27653],{"class":476},[152,113458,33780],{"class":293},[152,113460,1819],{"class":483},[152,113462,66411],{"class":293},[152,113464,32123],{"class":483},[152,113466,113467],{"class":281,"line":1310},[152,113468,113469],{"class":483},"        mujoco.mj_forward(model, data)\n",[152,113471,113472,113475,113477,113479,113481],{"class":281,"line":1320},[152,113473,113474],{"class":483},"        tip ",[152,113476,1864],{"class":476},[152,113478,113280],{"class":483},[152,113480,112873],{"class":289},[152,113482,1825],{"class":483},[152,113484,113485,113488,113490,113492,113494],{"class":281,"line":1327},[152,113486,113487],{"class":483},"        target ",[152,113489,1864],{"class":476},[152,113491,113280],{"class":483},[152,113493,113296],{"class":289},[152,113495,1825],{"class":483},[152,113497,113498,113501,113503,113506,113508],{"class":281,"line":11528},[152,113499,113500],{"class":483},"        error ",[152,113502,1864],{"class":476},[152,113504,113505],{"class":483}," target ",[152,113507,2340],{"class":476},[152,113509,113510],{"class":483}," tip\n",[152,113512,113513],{"class":281,"line":11536},[152,113514,307],{"emptyLinePlaceholder":306},[152,113516,113517,113519,113521,113523,113525,113528,113530,113532,113535,113537,113540,113542,113544,113546,113548],{"class":281,"line":11541},[152,113518,107954],{"class":483},[152,113520,2000],{"class":293},[152,113522,6085],{"class":483},[152,113524,1864],{"class":476},[152,113526,113527],{"class":483}," np.clip(",[152,113529,106597],{"class":293},[152,113531,8160],{"class":476},[152,113533,113534],{"class":483}," error[",[152,113536,1894],{"class":293},[152,113538,113539],{"class":483},"], ",[152,113541,2340],{"class":476},[152,113543,103740],{"class":293},[152,113545,14051],{"class":483},[152,113547,103740],{"class":293},[152,113549,1825],{"class":483},[152,113551,113552,113554,113556,113558,113560,113562,113564,113566,113568,113570,113572,113574,113576,113578,113580],{"class":281,"line":18219},[152,113553,107954],{"class":483},[152,113555,2026],{"class":293},[152,113557,6085],{"class":483},[152,113559,1864],{"class":476},[152,113561,113527],{"class":483},[152,113563,106597],{"class":293},[152,113565,8160],{"class":476},[152,113567,113534],{"class":483},[152,113569,2000],{"class":293},[152,113571,113539],{"class":483},[152,113573,2340],{"class":476},[152,113575,103740],{"class":293},[152,113577,14051],{"class":483},[152,113579,103740],{"class":293},[152,113581,1825],{"class":483},[152,113583,113584],{"class":281,"line":18225},[152,113585,307],{"emptyLinePlaceholder":306},[152,113587,113588],{"class":281,"line":18248},[152,113589,102853],{"class":483},[152,113591,113592,113594,113596],{"class":281,"line":18254},[152,113593,111634],{"class":483},[152,113595,11109],{"class":476},[152,113597,113598],{"class":483}," reward(model, data)\n",[152,113600,113601],{"class":281,"line":18277},[152,113602,307],{"emptyLinePlaceholder":306},[152,113604,113605,113607,113609,113611,113613,113615,113617],{"class":281,"line":18291},[152,113606,4147],{"class":476},[152,113608,32953],{"class":483},[152,113610,2136],{"class":476},[152,113612,7396],{"class":293},[152,113614,102896],{"class":476},[152,113616,5735],{"class":293},[152,113618,5382],{"class":483},[152,113620,113621,113624,113626],{"class":281,"line":18311},[152,113622,113623],{"class":483},"            obs ",[152,113625,1864],{"class":476},[152,113627,113628],{"class":483}," get_obs(model, data)\n",[152,113630,113631,113633,113635,113637],{"class":281,"line":18317},[152,113632,35987],{"class":293},[152,113634,1819],{"class":483},[152,113636,111668],{"class":289},[152,113638,113639],{"class":483},", step)\n",[152,113641,113642,113644,113646,113649,113652,113654],{"class":281,"line":18328},[152,113643,35987],{"class":293},[152,113645,1819],{"class":483},[152,113647,113648],{"class":289},"\"  tip:\"",[152,113650,113651],{"class":483},", np.round(tip, ",[152,113653,1888],{"class":293},[152,113655,31834],{"class":483},[152,113657,113658,113660,113662,113665,113668,113670],{"class":281,"line":18351},[152,113659,35987],{"class":293},[152,113661,1819],{"class":483},[152,113663,113664],{"class":289},"\"  target:\"",[152,113666,113667],{"class":483},", np.round(target, ",[152,113669,1888],{"class":293},[152,113671,31834],{"class":483},[152,113673,113674,113676,113678,113681,113684,113686],{"class":281,"line":18373},[152,113675,35987],{"class":293},[152,113677,1819],{"class":483},[152,113679,113680],{"class":289},"\"  ctrl:\"",[152,113682,113683],{"class":483},", np.round(data.ctrl.copy(), ",[152,113685,1888],{"class":293},[152,113687,31834],{"class":483},[152,113689,113690,113692,113694,113697,113700,113702],{"class":281,"line":18378},[152,113691,35987],{"class":293},[152,113693,1819],{"class":483},[152,113695,113696],{"class":289},"\"  obs_dim:\"",[152,113698,113699],{"class":483},", obs.shape[",[152,113701,2000],{"class":293},[152,113703,6299],{"class":483},[152,113705,113706],{"class":281,"line":18384},[152,113707,307],{"emptyLinePlaceholder":306},[152,113709,113710,113712,113714,113716,113718,113720,113722,113724],{"class":281,"line":18398},[152,113711,32636],{"class":293},[152,113713,1819],{"class":483},[152,113715,111713],{"class":289},[152,113717,14051],{"class":483},[152,113719,33355],{"class":293},[152,113721,111720],{"class":483},[152,113723,1888],{"class":293},[152,113725,31834],{"class":483},[152,113727,113728,113730,113732,113735,113738,113740,113742,113744],{"class":281,"line":18411},[152,113729,32636],{"class":293},[152,113731,1819],{"class":483},[152,113733,113734],{"class":289},"\"final tip:\"",[152,113736,113737],{"class":483},", np.round(site_position(model, data, ",[152,113739,112873],{"class":289},[152,113741,111682],{"class":483},[152,113743,1888],{"class":293},[152,113745,31834],{"class":483},[152,113747,113748,113750,113752,113755,113757,113759,113761,113763],{"class":281,"line":18416},[152,113749,32636],{"class":293},[152,113751,1819],{"class":483},[152,113753,113754],{"class":289},"\"target:\"",[152,113756,113737],{"class":483},[152,113758,113296],{"class":289},[152,113760,111682],{"class":483},[152,113762,1888],{"class":293},[152,113764,31834],{"class":483},[152,113766,113767],{"class":281,"line":18430},[152,113768,307],{"emptyLinePlaceholder":306},[152,113770,113771],{"class":281,"line":18435},[152,113772,307],{"emptyLinePlaceholder":306},[152,113774,113775,113777,113779,113781,113783],{"class":281,"line":18441},[152,113776,3202],{"class":476},[152,113778,32557],{"class":293},[152,113780,102896],{"class":476},[152,113782,102899],{"class":289},[152,113784,5382],{"class":483},[152,113786,113787],{"class":281,"line":18446},[152,113788,102906],{"class":483},[19,113790,104907],{},[270,113792,113794],{"className":272,"code":113793,"language":274,"meta":275,"style":275},"touch ch7_reacher.py\n",[277,113795,113796],{"__ignoreMap":275},[152,113797,113798,113800],{"class":281,"line":282},[152,113799,102620],{"class":285},[152,113801,113802],{"class":289}," ch7_reacher.py\n",[19,113804,111781],{},[270,113806,113808],{"className":272,"code":113807,"language":274,"meta":275,"style":275},"python ch7_reacher.py\n",[277,113809,113810],{"__ignoreMap":275},[152,113811,113812,113814],{"class":281,"line":282},[152,113813,31717],{"class":285},[152,113815,113802],{"class":289},[14,113817,102909],{"id":102909},[19,113819,113820],{},"读取 site 坐标：",[270,113822,113824],{"className":31715,"code":113823,"language":31717,"meta":275,"style":275},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[277,113825,113826],{"__ignoreMap":275},[152,113827,113828,113830,113832,113834,113836],{"class":281,"line":282},[152,113829,33284],{"class":476},[152,113831,113193],{"class":285},[152,113833,113196],{"class":483},[152,113835,2974],{"class":293},[152,113837,113201],{"class":483},[19,113839,113840],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113842,111797],{},[270,113844,113846],{"className":31715,"code":113845,"language":31717,"meta":275,"style":275},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[277,113847,113848],{"__ignoreMap":275},[152,113849,113850,113852],{"class":281,"line":282},[152,113851,18661],{"class":476},[152,113853,113305],{"class":483},[19,113855,113856],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113858,111122],{},[270,113860,113862],{"className":31715,"code":113861,"language":31717,"meta":275,"style":275},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[277,113863,113864,113876,113889],{"__ignoreMap":275},[152,113865,113866,113868,113870,113872,113874],{"class":281,"line":282},[152,113867,112933],{"class":483},[152,113869,1864],{"class":476},[152,113871,112938],{"class":483},[152,113873,2340],{"class":476},[152,113875,112943],{"class":483},[152,113877,113878,113881,113883,113885,113887],{"class":281,"line":303},[152,113879,113880],{"class":483},"control_cost ",[152,113882,1864],{"class":476},[152,113884,113374],{"class":293},[152,113886,8160],{"class":476},[152,113888,113379],{"class":483},[152,113890,113891,113893,113895,113897,113899,113901,113903],{"class":281,"line":310},[152,113892,18661],{"class":476},[152,113894,111134],{"class":293},[152,113896,1819],{"class":483},[152,113898,2340],{"class":476},[152,113900,112933],{"class":483},[152,113902,2340],{"class":476},[152,113904,113396],{"class":483},[19,113906,113907],{},"奖励由两部分组成：",[416,113909,113910,113915],{},[419,113911,113912,113914],{},[277,113913,112960],{},"：末端离目标越远，奖励越低。",[419,113916,113917,113920],{},[277,113918,113919],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113922,113923],{},"简单控制器：",[270,113925,113927],{"className":31715,"code":113926,"language":31717,"meta":275,"style":275},"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",[277,113928,113929,113942,113974],{"__ignoreMap":275},[152,113930,113931,113934,113936,113938,113940],{"class":281,"line":282},[152,113932,113933],{"class":483},"error ",[152,113935,1864],{"class":476},[152,113937,113505],{"class":483},[152,113939,2340],{"class":476},[152,113941,113510],{"class":483},[152,113943,113944,113946,113948,113950,113952,113954,113956,113958,113960,113962,113964,113966,113968,113970,113972],{"class":281,"line":303},[152,113945,107208],{"class":483},[152,113947,2000],{"class":293},[152,113949,6085],{"class":483},[152,113951,1864],{"class":476},[152,113953,113527],{"class":483},[152,113955,106597],{"class":293},[152,113957,8160],{"class":476},[152,113959,113534],{"class":483},[152,113961,1894],{"class":293},[152,113963,113539],{"class":483},[152,113965,2340],{"class":476},[152,113967,103740],{"class":293},[152,113969,14051],{"class":483},[152,113971,103740],{"class":293},[152,113973,1825],{"class":483},[152,113975,113976,113978,113980,113982,113984,113986,113988,113990,113992,113994,113996,113998,114000,114002,114004],{"class":281,"line":310},[152,113977,107208],{"class":483},[152,113979,2026],{"class":293},[152,113981,6085],{"class":483},[152,113983,1864],{"class":476},[152,113985,113527],{"class":483},[152,113987,106597],{"class":293},[152,113989,8160],{"class":476},[152,113991,113534],{"class":483},[152,113993,2000],{"class":293},[152,113995,113539],{"class":483},[152,113997,2340],{"class":476},[152,113999,103740],{"class":293},[152,114001,14051],{"class":483},[152,114003,103740],{"class":293},[152,114005,1825],{"class":483},[19,114007,114008],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[14,114010,103045],{"id":103045},[270,114012,114013],{"className":31715,"code":113823,"language":31717,"meta":275,"style":275},[277,114014,114015],{"__ignoreMap":275},[152,114016,114017,114019,114021,114023,114025],{"class":281,"line":282},[152,114018,33284],{"class":476},[152,114020,113193],{"class":285},[152,114022,113196],{"class":483},[152,114024,2974],{"class":293},[152,114026,113201],{"class":483},[19,114028,114029,114030,114032,114033,83876,114035,29984],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[277,114031,81147],{}," 是 site 的名字，比如 ",[277,114034,112873],{},[277,114036,113296],{},[270,114038,114040],{"className":31715,"code":114039,"language":31717,"meta":275,"style":275},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[277,114041,114042],{"__ignoreMap":275},[152,114043,114044,114046,114048],{"class":281,"line":282},[152,114045,104971],{"class":483},[152,114047,1864],{"class":476},[152,114049,113210],{"class":483},[19,114051,114052],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[270,114054,114056],{"className":31715,"code":114055,"language":31717,"meta":275,"style":275},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[277,114057,114058,114070],{"__ignoreMap":275},[152,114059,114060,114062,114064,114066,114068],{"class":281,"line":282},[152,114061,3202],{"class":476},[152,114063,104786],{"class":483},[152,114065,844],{"class":476},[152,114067,5735],{"class":293},[152,114069,5382],{"class":483},[152,114071,114072,114074,114076,114078,114080,114082,114084,114086,114088,114090],{"class":281,"line":303},[152,114073,105232],{"class":476},[152,114075,104772],{"class":293},[152,114077,1819],{"class":483},[152,114079,1870],{"class":476},[152,114081,113235],{"class":289},[152,114083,2703],{"class":293},[152,114085,81147],{"class":483},[152,114087,2752],{"class":293},[152,114089,2059],{"class":289},[152,114091,1825],{"class":483},[19,114093,114094,114095,114098,114099,114101],{},"如果 site 没找到，就主动报错。",[277,114096,114097],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[277,114100,81147],{}," 的值放进字符串里。",[270,114103,114105],{"className":31715,"code":114104,"language":31717,"meta":275,"style":275},"return data.site_xpos[site_id].copy()\n",[277,114106,114107],{"__ignoreMap":275},[152,114108,114109,114111],{"class":281,"line":282},[152,114110,18661],{"class":476},[152,114112,113252],{"class":483},[19,114114,114115,114116,114118,114119,114122],{},"返回这个 site 的世界坐标。",[277,114117,105017],{}," 里的每一行都是一个 site 的 ",[277,114120,114121],{},"(x, y, z)"," 坐标。",[270,114124,114126],{"className":31715,"code":114125,"language":31717,"meta":275,"style":275},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[277,114127,114128],{"__ignoreMap":275},[152,114129,114130,114132,114134],{"class":281,"line":282},[152,114131,33284],{"class":476},[152,114133,113267],{"class":285},[152,114135,113270],{"class":483},[19,114137,114138],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[270,114140,114142],{"className":31715,"code":114141,"language":31717,"meta":275,"style":275},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[277,114143,114144,114156],{"__ignoreMap":275},[152,114145,114146,114148,114150,114152,114154],{"class":281,"line":282},[152,114147,112905],{"class":483},[152,114149,1864],{"class":476},[152,114151,113280],{"class":483},[152,114153,112873],{"class":289},[152,114155,1825],{"class":483},[152,114157,114158,114160,114162,114164,114166],{"class":281,"line":303},[152,114159,112915],{"class":483},[152,114161,1864],{"class":476},[152,114163,113280],{"class":483},[152,114165,113296],{"class":289},[152,114167,1825],{"class":483},[19,114169,114170],{},"分别读取末端点和目标点的世界坐标。",[270,114172,114173],{"className":31715,"code":113845,"language":31717,"meta":275,"style":275},[277,114174,114175],{"__ignoreMap":275},[152,114176,114177,114179],{"class":281,"line":282},[152,114178,18661],{"class":476},[152,114180,113305],{"class":483},[19,114182,114183],{},"把四部分拼成一个观测数组：",[270,114185,114188],{"className":114186,"code":114187,"language":6829,"meta":275},[6827],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[277,114189,114187],{"__ignoreMap":275},[270,114191,114193],{"className":31715,"code":114192,"language":31717,"meta":275,"style":275},"dist = np.linalg.norm(tip - target)\n",[277,114194,114195],{"__ignoreMap":275},[152,114196,114197,114199,114201,114203,114205],{"class":281,"line":282},[152,114198,112933],{"class":483},[152,114200,1864],{"class":476},[152,114202,112938],{"class":483},[152,114204,2340],{"class":476},[152,114206,112943],{"class":483},[19,114208,114209,114210,114213,114214,114217],{},"计算 tip 到 target 的距离。",[277,114211,114212],{},"tip - target"," 得到一个三维向量，",[277,114215,114216],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114219,607],{},[270,114221,114224],{"className":114222,"code":114223,"language":6829,"meta":275},[6827],"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",[277,114225,114223],{"__ignoreMap":275},[270,114227,114229],{"className":31715,"code":114228,"language":31717,"meta":275,"style":275},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[277,114230,114231],{"__ignoreMap":275},[152,114232,114233,114235,114237,114239,114241],{"class":281,"line":282},[152,114234,113880],{"class":483},[152,114236,1864],{"class":476},[152,114238,113374],{"class":293},[152,114240,8160],{"class":476},[152,114242,113379],{"class":483},[19,114244,114245,114246,114249,114250,114253],{},"计算动作惩罚。",[277,114247,114248],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[277,114251,114252],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[270,114255,114257],{"className":31715,"code":114256,"language":31717,"meta":275,"style":275},"return float(-dist - control_cost)\n",[277,114258,114259],{"__ignoreMap":275},[152,114260,114261,114263,114265,114267,114269,114271,114273],{"class":281,"line":282},[152,114262,18661],{"class":476},[152,114264,111134],{"class":293},[152,114266,1819],{"class":483},[152,114268,2340],{"class":476},[152,114270,112933],{"class":483},[152,114272,2340],{"class":476},[152,114274,113396],{"class":483},[19,114276,114277],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[270,114279,114280],{"className":31715,"code":112140,"language":31717,"meta":275,"style":275},[277,114281,114282],{"__ignoreMap":275},[152,114283,114284,114286,114288],{"class":281,"line":282},[152,114285,112147],{"class":483},[152,114287,1864],{"class":476},[152,114289,106098],{"class":293},[19,114291,114292],{},"累计奖励变量，记录整个运行过程的总分。",[270,114294,114296],{"className":31715,"code":114295,"language":31717,"meta":275,"style":275},"for step in range(500):\n",[277,114297,114298],{"__ignoreMap":275},[152,114299,114300,114302,114304,114306,114308,114310,114312],{"class":281,"line":282},[152,114301,4668],{"class":476},[152,114303,32953],{"class":483},[152,114305,27653],{"class":476},[152,114307,33780],{"class":293},[152,114309,1819],{"class":483},[152,114311,66411],{"class":293},[152,114313,32123],{"class":483},[19,114315,114316],{},"运行 500 个控制步。",[270,114318,114319],{"className":31715,"code":105880,"language":31717,"meta":275,"style":275},[277,114320,114321],{"__ignoreMap":275},[152,114322,114323],{"class":281,"line":282},[152,114324,105880],{"class":483},[19,114326,114327,114328,102355,114330,114332],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[277,114329,104568],{},[277,114331,104571],{}," 是当前状态下的坐标。",[270,114334,114336],{"className":31715,"code":114335,"language":31717,"meta":275,"style":275},"error = target - tip\n",[277,114337,114338],{"__ignoreMap":275},[152,114339,114340,114342,114344,114346,114348],{"class":281,"line":282},[152,114341,113933],{"class":483},[152,114343,1864],{"class":476},[152,114345,113505],{"class":483},[152,114347,2340],{"class":476},[152,114349,113510],{"class":483},[19,114351,114352],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[270,114354,114356],{"className":31715,"code":114355,"language":31717,"meta":275,"style":275},"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",[277,114357,114358,114390],{"__ignoreMap":275},[152,114359,114360,114362,114364,114366,114368,114370,114372,114374,114376,114378,114380,114382,114384,114386,114388],{"class":281,"line":282},[152,114361,107208],{"class":483},[152,114363,2000],{"class":293},[152,114365,6085],{"class":483},[152,114367,1864],{"class":476},[152,114369,113527],{"class":483},[152,114371,106597],{"class":293},[152,114373,8160],{"class":476},[152,114375,113534],{"class":483},[152,114377,1894],{"class":293},[152,114379,113539],{"class":483},[152,114381,2340],{"class":476},[152,114383,103740],{"class":293},[152,114385,14051],{"class":483},[152,114387,103740],{"class":293},[152,114389,1825],{"class":483},[152,114391,114392,114394,114396,114398,114400,114402,114404,114406,114408,114410,114412,114414,114416,114418,114420],{"class":281,"line":303},[152,114393,107208],{"class":483},[152,114395,2026],{"class":293},[152,114397,6085],{"class":483},[152,114399,1864],{"class":476},[152,114401,113527],{"class":483},[152,114403,106597],{"class":293},[152,114405,8160],{"class":476},[152,114407,113534],{"class":483},[152,114409,2000],{"class":293},[152,114411,113539],{"class":483},[152,114413,2340],{"class":476},[152,114415,103740],{"class":293},[152,114417,14051],{"class":483},[152,114419,103740],{"class":293},[152,114421,1825],{"class":483},[19,114423,114424,114425,114428],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[277,114426,114427],{},"error -> ctrl -> step"," 的流程。",[270,114430,114431],{"className":31715,"code":105842,"language":31717,"meta":275,"style":275},[277,114432,114433],{"__ignoreMap":275},[152,114434,114435],{"class":281,"line":282},[152,114436,105842],{"class":483},[19,114438,114439],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[270,114441,114443],{"className":31715,"code":114442,"language":31717,"meta":275,"style":275},"obs = get_obs(model, data)\n",[277,114444,114445],{"__ignoreMap":275},[152,114446,114447,114449,114451],{"class":281,"line":282},[152,114448,112191],{"class":483},[152,114450,1864],{"class":476},[152,114452,113628],{"class":483},[19,114454,114455,114456,114459],{},"读取最新观测。后面打印 ",[277,114457,114458],{},"obs.shape[0]","，用来确认观测维度是 10。",[1760,114461,103653],{"id":103652},[19,114463,114464],{},"观测维度为:",[270,114466,114469],{"className":114467,"code":114468,"language":6829,"meta":275},[6827],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[277,114470,114468],{"__ignoreMap":275},[19,114472,114473],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114475,114476],{},"程序每 100 步打印：",[270,114478,114481],{"className":114479,"code":114480,"language":6829,"meta":275},[6827],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[277,114482,114480],{"__ignoreMap":275},[19,114484,114485,114486,114488],{},"如果控制有效，你应该看到最终 ",[277,114487,104568],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[1760,114490,103685],{"id":103684},[416,114492,114493,114496,114499,114505,114511,114518,114528],{},[419,114494,114495],{},"修改目标点位置。",[419,114497,114498],{},"重新运行，观察最终 tip 是否变化。",[419,114500,114501,114502,114504],{},"把 gravity 改成 ",[277,114503,103926],{},"，观察控制是否变差。",[419,114506,112518,114507,112522,114509,29984],{},[277,114508,103495],{},[277,114510,1894],{},[419,114512,103748,114513,103751,114515,114517],{},[277,114514,111933],{},[277,114516,108644],{},"，观察机械臂是否更难移动。",[419,114519,103748,114520,83867,114522,103751,114524,114527],{},[277,114521,104571],{},[277,114523,105483],{},[277,114525,114526],{},"0.2 0 0.6","，观察 reward 和 final tip。",[419,114529,114530],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[1760,114532,103790],{"id":103789},[14,114534,114536],{"id":114535},"site-not-found",[277,114537,114538],{},"site not found",[19,114540,114541,114542,102355,114545,29984],{},"检查 XML 中是否有 ",[277,114543,114544],{},"site name=\"tip\"",[277,114546,114547],{},"site name=\"target\"",[14,114549,114550],{"id":114550},"机械臂完全不动",[19,114552,103860],{},[416,114554,114555,114560,114563,114568],{},[419,114556,114557,114559],{},[277,114558,103495],{}," 是否为 2",[419,114561,114562],{},"actuator 是否引用正确 joint",[419,114564,114565,114567],{},[277,114566,102413],{}," 是否被赋值",[419,114569,114570,114571],{},"是否执行了 ",[277,114572,102022],{},[14,114574,114575],{"id":114575},"控制效果不好",[19,114577,114578],{},"正常。本章重点不是控制器最优，而是任务结构:",[270,114580,114583],{"className":114581,"code":114582,"language":6829,"meta":275},[6827],"obs → action → mj_step → reward → next_obs\n",[277,114584,114582],{"__ignoreMap":275},[14,114586,114588],{"id":114587},"tip-坐标不变化","tip 坐标不变化",[19,114590,103912],{},[416,114592,114593,114598,114606,114615],{},[419,114594,114595,114596,29984],{},"是否每步调用了 ",[277,114597,102022],{},[419,114599,114600,114601,102355,114603,29984],{},"是否写入了 ",[277,114602,107463],{},[277,114604,114605],{},"data.ctrl[1]",[419,114607,114608,114609,2021,114612,29984],{},"actuator 是否正确引用 ",[277,114610,114611],{},"joint1",[277,114613,114614],{},"joint2",[419,114616,114617],{},"控制输入是否太小。",[14,114619,114620],{"id":114620},"目标点不会动",[19,114622,114623],{},"本章的 target 是固定 site：",[270,114625,114627],{"className":54404,"code":114626,"language":54406,"meta":275,"style":275},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[277,114628,114629],{"__ignoreMap":275},[152,114630,114631,114633,114635,114637,114639,114641,114643,114645,114648],{"class":281,"line":282},[152,114632,844],{"class":483},[152,114634,104547],{"class":52637},[152,114636,16535],{"class":285},[152,114638,1864],{"class":483},[152,114640,113296],{"class":289},[152,114642,102443],{"class":285},[152,114644,1864],{"class":483},[152,114646,114647],{"class":289},"\"0.5 0 0.4\"",[152,114649,114650],{"class":483}," ...\u002F>\n",[19,114652,114653,114654,114656],{},"它直接挂在 ",[277,114655,103178],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[14,114658,114659],{"id":114659},"机械臂不像真实机械臂",[19,114661,114662],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[1760,114664,103944],{"id":103943},[19,114666,114667],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114669,114670],{},"核心公式：",[270,114672,114675],{"className":114673,"code":114674,"language":6829,"meta":275},[6827],"distance = ||tip - target||\nreward = -distance - action_cost\n",[277,114676,114674],{"__ignoreMap":275},[19,114678,114679],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1736,114681,114682],{},"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":275,"searchDepth":303,"depth":303,"links":114684},[114685,114686,114687,114692,114696,114697,114698,114706],{"id":101983,"depth":303,"text":101984},{"id":102106,"depth":303,"text":102107},{"id":102381,"depth":303,"text":102382,"children":114688},[114689,114690,114691],{"id":112888,"depth":310,"text":112889},{"id":112964,"depth":310,"text":112964},{"id":112994,"depth":310,"text":112995},{"id":102589,"depth":303,"text":102590,"children":114693},[114694,114695],{"id":102909,"depth":310,"text":102909},{"id":103045,"depth":310,"text":103045},{"id":103652,"depth":303,"text":103653},{"id":103684,"depth":303,"text":103685},{"id":103789,"depth":303,"text":103790,"children":114699},[114700,114701,114702,114703,114704,114705],{"id":114535,"depth":310,"text":114538},{"id":114550,"depth":310,"text":114550},{"id":114575,"depth":310,"text":114575},{"id":114587,"depth":310,"text":114588},{"id":114620,"depth":310,"text":114620},{"id":114659,"depth":310,"text":114659},{"id":103943,"depth":303,"text":103944},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112692,"description":275},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114713,"title":114714,"body":114715,"description":275,"extension":1744,"meta":118177,"navigation":306,"path":118178,"seo":118179,"stem":118180,"__hash__":118181},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114716,"toc":118148},[114717,114720,114722,114725,114728,114753,114756,114762,114765,114771,114773,114775,114799,114801,114819,114821,114864,114866,114893,114895,114898,114950,114953,114959,114968,114971,115009,115012,115051,115054,115062,115069,115072,115078,115080,115134,115141,115186,115189,115193,115209,115219,115221,116482,116484,116496,116498,116509,116511,116514,116535,116538,116541,116574,116580,116583,116616,116619,116622,116663,116668,116682,116685,116698,116703,116726,116728,116743,116753,116768,116775,116795,116810,116828,116831,116848,116856,116872,116878,116910,116923,116955,116965,117000,117014,117060,117074,117116,117127,117140,117146,117179,117182,117209,117219,117259,117269,117286,117293,117311,117314,117355,117368,117383,117386,117409,117412,117424,117427,117446,117451,117472,117475,117490,117493,117527,117539,117554,117557,117582,117585,117604,117607,117639,117642,117666,117672,117702,117709,117722,117725,117727,117729,117735,117738,117741,117753,117756,117758,117812,117814,117818,117824,117833,117836,117843,117845,117868,117871,117875,117877,117895,117901,117903,117936,117939,117945,117949,117952,117972,117977,117981,117988,118008,118013,118017,118020,118040,118043,118129,118133,118136,118142,118145],[10,114718,114714],{"id":114719},"_8gymnasium-风格强化学习接口基础",[1760,114721,101984],{"id":101983},[19,114723,114724],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114726,114727],{},"你将实现:",[270,114729,114731],{"className":31715,"code":114730,"language":31717,"meta":275,"style":275},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[277,114732,114733,114743],{"__ignoreMap":275},[152,114734,114735,114738,114740],{"class":281,"line":282},[152,114736,114737],{"class":483},"obs, info ",[152,114739,1864],{"class":476},[152,114741,114742],{"class":483}," env.reset()\n",[152,114744,114745,114748,114750],{"class":281,"line":303},[152,114746,114747],{"class":483},"obs, reward, terminated, truncated, info ",[152,114749,1864],{"class":476},[152,114751,114752],{"class":483}," env.step(action)\n",[19,114754,114755],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114757,114758,114759,114761],{},"前面章节的代码都是“脚本式”的：在 ",[277,114760,103632],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114763,114764],{},"可以先记住 Gymnasium 环境的核心交互：",[270,114766,114769],{"className":114767,"code":114768,"language":6829,"meta":275},[6827],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[277,114770,114768],{"__ignoreMap":275},[1760,114772,102107],{"id":102106},[19,114774,102110],{},[270,114776,114777],{"className":272,"code":105725,"language":274,"meta":275,"style":275},[277,114778,114779],{"__ignoreMap":275},[152,114780,114781,114783,114785,114787,114789,114791,114793,114795,114797],{"class":281,"line":282},[152,114782,26188],{"class":285},[152,114784,27921],{"class":289},[152,114786,25446],{"class":289},[152,114788,28005],{"class":293},[152,114790,105740],{"class":289},[152,114792,102135],{"class":289},[152,114794,103838],{"class":289},[152,114796,102151],{"class":289},[152,114798,105749],{"class":289},[19,114800,104156],{},[270,114802,114804],{"className":272,"code":114803,"language":274,"meta":275,"style":275},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[277,114805,114806],{"__ignoreMap":275},[152,114807,114808,114810,114812,114814,114816],{"class":281,"line":282},[152,114809,25443],{"class":285},[152,114811,25446],{"class":289},[152,114813,102267],{"class":289},[152,114815,109048],{"class":289},[152,114817,114818],{"class":289}," gymnasium\n",[19,114820,104173],{},[270,114822,114824],{"className":272,"code":114823,"language":274,"meta":275,"style":275},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[277,114825,114826,114843,114852],{"__ignoreMap":275},[152,114827,114828,114830,114832,114834,114837,114839,114841],{"class":281,"line":282},[152,114829,31667],{"class":285},[152,114831,757],{"class":289},[152,114833,26726],{"class":293},[152,114835,114836],{"class":289}," mujoco-gym-api",[152,114838,102312],{"class":289},[152,114840,102315],{"class":293},[152,114842,102318],{"class":293},[152,114844,114845,114847,114849],{"class":281,"line":303},[152,114846,31667],{"class":285},[152,114848,102325],{"class":289},[152,114850,114851],{"class":289}," mujoco-gym-api\n",[152,114853,114854,114856,114858,114860,114862],{"class":281,"line":310},[152,114855,25443],{"class":285},[152,114857,25446],{"class":289},[152,114859,102267],{"class":289},[152,114861,109048],{"class":289},[152,114863,114818],{"class":289},[19,114865,102341],{},[416,114867,114868,114878,114881,114887],{},[419,114869,114870,114871,114874,114875,29984],{},"本章使用 ",[277,114872,114873],{},"gymnasium","，不是旧版 ",[277,114876,114877],{},"gym",[419,114879,114880],{},"Gymnasium API 与旧 Gym API 有差异。",[419,114882,114883,114884,29984],{},"旧 Gym 常见返回值是 4 个: ",[277,114885,114886],{},"obs, reward, done, info",[419,114888,114889,114890,29984],{},"Gymnasium 返回值是 5 个: ",[277,114891,114892],{},"obs, reward, terminated, truncated, info",[1760,114894,102382],{"id":102381},[19,114896,114897],{},"强化学习环境接口包含:",[23,114899,114900,114909],{},[26,114901,114902],{},[29,114903,114904,114907],{},[32,114905,114906],{"align":34},"方法",[32,114908,104033],{"align":34},[43,114910,114911,114921,114931,114941],{},[29,114912,114913,114918],{},[48,114914,114915],{"align":34},[277,114916,114917],{},"reset()",[48,114919,114920],{"align":34},"重置环境",[29,114922,114923,114928],{},[48,114924,114925],{"align":34},[277,114926,114927],{},"step(action)",[48,114929,114930],{"align":34},"执行动作",[29,114932,114933,114938],{},[48,114934,114935],{"align":34},[277,114936,114937],{},"observation_space",[48,114939,114940],{"align":34},"观测空间",[29,114942,114943,114948],{},[48,114944,114945],{"align":34},[277,114946,114947],{},"action_space",[48,114949,25269],{"align":34},[19,114951,114952],{},"一个最小环境需要完成:",[270,114954,114957],{"className":114955,"code":114956,"language":6829,"meta":275},[6827],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[277,114958,114956],{"__ignoreMap":275},[14,114960,114962,102355,114965,105975],{"id":114961},"terminated-和-truncated-的区别",[277,114963,114964],{},"terminated",[277,114966,114967],{},"truncated",[19,114969,114970],{},"Gymnasium 把“结束”拆成两个概念：",[23,114972,114973,114983],{},[26,114974,114975],{},[29,114976,114977,114979,114981],{},[32,114978,105911],{"align":34},[32,114980,102037],{"align":34},[32,114982,22802],{"align":34},[43,114984,114985,114997],{},[29,114986,114987,114991,114994],{},[48,114988,114989],{"align":34},[277,114990,114964],{},[48,114992,114993],{"align":34},"任务自然结束",[48,114995,114996],{"align":34},"机械臂到达目标、机器人摔倒",[29,114998,114999,115003,115006],{},[48,115000,115001],{"align":34},[277,115002,114967],{},[48,115004,115005],{"align":34},"因外部限制截断",[48,115007,115008],{"align":34},"达到最大步数、时间限制",[19,115010,115011],{},"本章中：",[270,115013,115015],{"className":31715,"code":115014,"language":31717,"meta":275,"style":275},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[277,115016,115017,115032],{"__ignoreMap":275},[152,115018,115019,115022,115024,115027,115029],{"class":281,"line":282},[152,115020,115021],{"class":483},"terminated ",[152,115023,1864],{"class":476},[152,115025,115026],{"class":483}," dist ",[152,115028,844],{"class":476},[152,115030,115031],{"class":293}," 0.05\n",[152,115033,115034,115037,115039,115041,115044,115046,115048],{"class":281,"line":303},[152,115035,115036],{"class":483},"truncated ",[152,115038,1864],{"class":476},[152,115040,40210],{"class":293},[152,115042,115043],{"class":483},".steps ",[152,115045,3370],{"class":476},[152,115047,40210],{"class":293},[152,115049,115050],{"class":483},".max_steps\n",[19,115052,115053],{},"也就是：",[416,115055,115056,115059],{},[419,115057,115058],{},"末端距离目标小于 0.05，任务成功结束。",[419,115060,115061],{},"步数超过上限，episode 被截断。",[14,115063,115065,102355,115067],{"id":115064},"observation_space-和-action_space",[277,115066,114937],{},[277,115068,114947],{},[19,115070,115071],{},"这两个对象告诉算法：",[270,115073,115076],{"className":115074,"code":115075,"language":6829,"meta":275},[6827],"观测长什么样\n动作允许多大\n",[277,115077,115075],{"__ignoreMap":275},[19,115079,607],{},[270,115081,115083],{"className":31715,"code":115082,"language":31717,"meta":275,"style":275},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[277,115084,115085],{"__ignoreMap":275},[152,115086,115087,115089,115092,115094,115097,115100,115103,115105,115107,115110,115112,115114,115116,115118,115120,115122,115124,115127,115129,115131],{"class":281,"line":282},[152,115088,32160],{"class":293},[152,115090,115091],{"class":483},".action_space ",[152,115093,1864],{"class":476},[152,115095,115096],{"class":483}," spaces.Box(",[152,115098,115099],{"class":6858},"low",[152,115101,115102],{"class":476},"=-",[152,115104,103740],{"class":293},[152,115106,14051],{"class":483},[152,115108,115109],{"class":6858},"high",[152,115111,1864],{"class":476},[152,115113,103740],{"class":293},[152,115115,14051],{"class":483},[152,115117,97300],{"class":6858},[152,115119,1864],{"class":476},[152,115121,1819],{"class":483},[152,115123,1894],{"class":293},[152,115125,115126],{"class":483},",), ",[152,115128,94837],{"class":6858},[152,115130,1864],{"class":476},[152,115132,115133],{"class":483},"np.float32)\n",[19,115135,115136,115137,115140],{},"表示动作是 2 维数组，每个值都在 ",[277,115138,115139],{},"[-1, 1]"," 范围内。",[270,115142,115144],{"className":31715,"code":115143,"language":31717,"meta":275,"style":275},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[277,115145,115146],{"__ignoreMap":275},[152,115147,115148,115150,115153,115155,115157,115159,115161,115164,115166,115168,115170,115172,115174,115176,115178,115180,115182,115184],{"class":281,"line":282},[152,115149,32160],{"class":293},[152,115151,115152],{"class":483},".observation_space ",[152,115154,1864],{"class":476},[152,115156,115096],{"class":483},[152,115158,115099],{"class":6858},[152,115160,115102],{"class":476},[152,115162,115163],{"class":483},"np.inf, ",[152,115165,115109],{"class":6858},[152,115167,1864],{"class":476},[152,115169,115163],{"class":483},[152,115171,97300],{"class":6858},[152,115173,1864],{"class":476},[152,115175,1819],{"class":483},[152,115177,2254],{"class":293},[152,115179,115126],{"class":483},[152,115181,94837],{"class":6858},[152,115183,1864],{"class":476},[152,115185,115133],{"class":483},[19,115187,115188],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[14,115190,115192],{"id":115191},"frame_skip-是什么","frame_skip 是什么",[270,115194,115196],{"className":31715,"code":115195,"language":31717,"meta":275,"style":275},"self.frame_skip = 5\n",[277,115197,115198],{"__ignoreMap":275},[152,115199,115200,115202,115205,115207],{"class":281,"line":282},[152,115201,32160],{"class":293},[152,115203,115204],{"class":483},".frame_skip ",[152,115206,1864],{"class":476},[152,115208,55764],{"class":293},[19,115210,115211,115212,115215,115216,115218],{},"表示外部调用一次 ",[277,115213,115214],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[277,115217,102552],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[1760,115220,102590],{"id":102589},[270,115222,115224],{"className":31715,"code":115223,"language":31717,"meta":275,"style":275},"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",[277,115225,115226,115238,115244,115254,115265,115269,115273,115281,115286,115290,115294,115298,115302,115306,115310,115314,115319,115323,115327,115331,115336,115340,115344,115348,115352,115356,115360,115364,115368,115372,115376,115380,115384,115388,115406,115421,115425,115438,115448,115463,115480,115484,115505,115524,115549,115563,115567,115577,115589,115599,115603,115645,115683,115687,115697,115713,115728,115747,115754,115758,115771,115786,115801,115814,115833,115849,115853,115894,115909,115924,115928,115967,115978,115991,115995,116005,116014,116018,116028,116043,116061,116065,116076,116093,116106,116110,116120,116124,116135,116146,116150,116164,116178,116194,116198,116211,116228,116243,116250,116254,116258,116270,116280,116298,116310,116322,116326,116334,116350,116359,116368,116376,116418,116431,116436,116440,116458,116462,116466,116478],{"__ignoreMap":275},[152,115227,115228,115230,115233,115235],{"class":281,"line":282},[152,115229,31729],{"class":476},[152,115231,115232],{"class":483}," gymnasium ",[152,115234,32720],{"class":476},[152,115236,115237],{"class":483}," gym\n",[152,115239,115240,115242],{"class":281,"line":303},[152,115241,31729],{"class":476},[152,115243,102638],{"class":483},[152,115245,115246,115248,115250,115252],{"class":281,"line":310},[152,115247,31729],{"class":476},[152,115249,32717],{"class":483},[152,115251,32720],{"class":476},[152,115253,32723],{"class":483},[152,115255,115256,115258,115260,115262],{"class":281,"line":324},[152,115257,32074],{"class":476},[152,115259,115232],{"class":483},[152,115261,31729],{"class":476},[152,115263,115264],{"class":483}," spaces\n",[152,115266,115267],{"class":281,"line":329},[152,115268,307],{"emptyLinePlaceholder":306},[152,115270,115271],{"class":281,"line":343},[152,115272,307],{"emptyLinePlaceholder":306},[152,115274,115275,115277,115279],{"class":281,"line":348},[152,115276,102651],{"class":293},[152,115278,15180],{"class":476},[152,115280,102656],{"class":289},[152,115282,115283],{"class":281,"line":362},[152,115284,115285],{"class":289},"\u003Cmujoco model=\"gym_reacher\">\n",[152,115287,115288],{"class":281,"line":367},[152,115289,113075],{"class":289},[152,115291,115292],{"class":281,"line":381},[152,115293,307],{"emptyLinePlaceholder":306},[152,115295,115296],{"class":281,"line":386},[152,115297,102675],{"class":289},[152,115299,115300],{"class":281,"line":932},[152,115301,113093],{"class":289},[152,115303,115304],{"class":281,"line":942},[152,115305,307],{"emptyLinePlaceholder":306},[152,115307,115308],{"class":281,"line":949},[152,115309,113102],{"class":289},[152,115311,115312],{"class":281,"line":954},[152,115313,113107],{"class":289},[152,115315,115316],{"class":281,"line":959},[152,115317,115318],{"class":289},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[152,115320,115321],{"class":281,"line":970},[152,115322,307],{"emptyLinePlaceholder":306},[152,115324,115325],{"class":281,"line":979},[152,115326,113121],{"class":289},[152,115328,115329],{"class":281,"line":989},[152,115330,113126],{"class":289},[152,115332,115333],{"class":281,"line":996},[152,115334,115335],{"class":289},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[152,115337,115338],{"class":281,"line":1001},[152,115339,113136],{"class":289},[152,115341,115342],{"class":281,"line":1006},[152,115343,107775],{"class":289},[152,115345,115346],{"class":281,"line":1018},[152,115347,102704],{"class":289},[152,115349,115350],{"class":281,"line":1027},[152,115351,102709],{"class":289},[152,115353,115354],{"class":281,"line":1037},[152,115355,307],{"emptyLinePlaceholder":306},[152,115357,115358],{"class":281,"line":1044},[152,115359,107792],{"class":289},[152,115361,115362],{"class":281,"line":1049},[152,115363,113161],{"class":289},[152,115365,115366],{"class":281,"line":1054},[152,115367,113166],{"class":289},[152,115369,115370],{"class":281,"line":1065},[152,115371,107802],{"class":289},[152,115373,115374],{"class":281,"line":1074},[152,115375,102714],{"class":289},[152,115377,115378],{"class":281,"line":1084},[152,115379,97035],{"class":289},[152,115381,115382],{"class":281,"line":1091},[152,115383,307],{"emptyLinePlaceholder":306},[152,115385,115386],{"class":281,"line":1096},[152,115387,307],{"emptyLinePlaceholder":306},[152,115389,115390,115392,115395,115397,115399,115401,115404],{"class":281,"line":1101},[152,115391,16309],{"class":476},[152,115393,115394],{"class":285}," ReacherEnv",[152,115396,1819],{"class":483},[152,115398,114877],{"class":285},[152,115400,2366],{"class":483},[152,115402,115403],{"class":285},"Env",[152,115405,32123],{"class":483},[152,115407,115408,115411,115413,115415,115418],{"class":281,"line":1112},[152,115409,115410],{"class":483},"    metadata ",[152,115412,1864],{"class":476},[152,115414,6090],{"class":483},[152,115416,115417],{"class":289},"\"render_modes\"",[152,115419,115420],{"class":483},": []}\n",[152,115422,115423],{"class":281,"line":1121},[152,115424,307],{"emptyLinePlaceholder":306},[152,115426,115427,115429,115431,115434,115436],{"class":281,"line":1131},[152,115428,32138],{"class":476},[152,115430,32141],{"class":293},[152,115432,115433],{"class":483},"(self) -> ",[152,115435,97023],{"class":293},[152,115437,5382],{"class":483},[152,115439,115440,115442,115444,115446],{"class":281,"line":1138},[152,115441,32154],{"class":293},[152,115443,18876],{"class":483},[152,115445,32166],{"class":293},[152,115447,3627],{"class":483},[152,115449,115450,115452,115455,115457,115459,115461],{"class":281,"line":1143},[152,115451,32182],{"class":293},[152,115453,115454],{"class":483},".model ",[152,115456,1864],{"class":476},[152,115458,102749],{"class":483},[152,115460,102651],{"class":293},[152,115462,1825],{"class":483},[152,115464,115465,115467,115470,115472,115475,115477],{"class":281,"line":1148},[152,115466,32182],{"class":293},[152,115468,115469],{"class":483},".data ",[152,115471,1864],{"class":476},[152,115473,115474],{"class":483}," mujoco.MjData(",[152,115476,32160],{"class":293},[152,115478,115479],{"class":483},".model)\n",[152,115481,115482],{"class":281,"line":1159},[152,115483,307],{"emptyLinePlaceholder":306},[152,115485,115486,115488,115491,115493,115496,115498,115501,115503],{"class":281,"line":1168},[152,115487,32182],{"class":293},[152,115489,115490],{"class":483},".tip_site_id ",[152,115492,1864],{"class":476},[152,115494,115495],{"class":483}," mujoco.mj_name2id(",[152,115497,32160],{"class":293},[152,115499,115500],{"class":483},".model, mujoco.mjtObj.mjOBJ_SITE, ",[152,115502,112873],{"class":289},[152,115504,1825],{"class":483},[152,115506,115507,115509,115512,115514,115516,115518,115520,115522],{"class":281,"line":1178},[152,115508,32182],{"class":293},[152,115510,115511],{"class":483},".target_site_id ",[152,115513,1864],{"class":476},[152,115515,115495],{"class":483},[152,115517,32160],{"class":293},[152,115519,115500],{"class":483},[152,115521,113296],{"class":289},[152,115523,1825],{"class":483},[152,115525,115526,115528,115530,115532,115534,115536,115539,115541,115543,115545,115547],{"class":281,"line":1185},[152,115527,4147],{"class":476},[152,115529,40210],{"class":293},[152,115531,115490],{"class":483},[152,115533,844],{"class":476},[152,115535,5735],{"class":293},[152,115537,115538],{"class":476}," or",[152,115540,40210],{"class":293},[152,115542,115511],{"class":483},[152,115544,844],{"class":476},[152,115546,5735],{"class":293},[152,115548,5382],{"class":483},[152,115550,115551,115554,115556,115558,115561],{"class":281,"line":1190},[152,115552,115553],{"class":476},"            raise",[152,115555,104772],{"class":293},[152,115557,1819],{"class":483},[152,115559,115560],{"class":289},"\"required sites not found\"",[152,115562,1825],{"class":483},[152,115564,115565],{"class":281,"line":1195},[152,115566,307],{"emptyLinePlaceholder":306},[152,115568,115569,115571,115573,115575],{"class":281,"line":1206},[152,115570,32182],{"class":293},[152,115572,115204],{"class":483},[152,115574,1864],{"class":476},[152,115576,55764],{"class":293},[152,115578,115579,115581,115584,115586],{"class":281,"line":1215},[152,115580,32182],{"class":293},[152,115582,115583],{"class":483},".max_steps ",[152,115585,1864],{"class":476},[152,115587,115588],{"class":293}," 200\n",[152,115590,115591,115593,115595,115597],{"class":281,"line":1225},[152,115592,32182],{"class":293},[152,115594,115043],{"class":483},[152,115596,1864],{"class":476},[152,115598,48670],{"class":293},[152,115600,115601],{"class":281,"line":1232},[152,115602,307],{"emptyLinePlaceholder":306},[152,115604,115605,115607,115609,115611,115613,115615,115617,115619,115621,115623,115625,115627,115629,115631,115633,115635,115637,115639,115641,115643],{"class":281,"line":1237},[152,115606,32182],{"class":293},[152,115608,115091],{"class":483},[152,115610,1864],{"class":476},[152,115612,115096],{"class":483},[152,115614,115099],{"class":6858},[152,115616,115102],{"class":476},[152,115618,103740],{"class":293},[152,115620,14051],{"class":483},[152,115622,115109],{"class":6858},[152,115624,1864],{"class":476},[152,115626,103740],{"class":293},[152,115628,14051],{"class":483},[152,115630,97300],{"class":6858},[152,115632,1864],{"class":476},[152,115634,1819],{"class":483},[152,115636,1894],{"class":293},[152,115638,115126],{"class":483},[152,115640,94837],{"class":6858},[152,115642,1864],{"class":476},[152,115644,115133],{"class":483},[152,115646,115647,115649,115651,115653,115655,115657,115659,115661,115663,115665,115667,115669,115671,115673,115675,115677,115679,115681],{"class":281,"line":1242},[152,115648,32182],{"class":293},[152,115650,115152],{"class":483},[152,115652,1864],{"class":476},[152,115654,115096],{"class":483},[152,115656,115099],{"class":6858},[152,115658,115102],{"class":476},[152,115660,115163],{"class":483},[152,115662,115109],{"class":6858},[152,115664,1864],{"class":476},[152,115666,115163],{"class":483},[152,115668,97300],{"class":6858},[152,115670,1864],{"class":476},[152,115672,1819],{"class":483},[152,115674,2254],{"class":293},[152,115676,115126],{"class":483},[152,115678,94837],{"class":6858},[152,115680,1864],{"class":476},[152,115682,115133],{"class":483},[152,115684,115685],{"class":281,"line":1253},[152,115686,307],{"emptyLinePlaceholder":306},[152,115688,115689,115691,115694],{"class":281,"line":1262},[152,115690,32138],{"class":476},[152,115692,115693],{"class":285}," _get_obs",[152,115695,115696],{"class":483},"(self) -> np.ndarray:\n",[152,115698,115699,115701,115703,115705,115708,115710],{"class":281,"line":1272},[152,115700,113474],{"class":483},[152,115702,1864],{"class":476},[152,115704,40210],{"class":293},[152,115706,115707],{"class":483},".data.site_xpos[",[152,115709,32160],{"class":293},[152,115711,115712],{"class":483},".tip_site_id].copy()\n",[152,115714,115715,115717,115719,115721,115723,115725],{"class":281,"line":1279},[152,115716,113487],{"class":483},[152,115718,1864],{"class":476},[152,115720,40210],{"class":293},[152,115722,115707],{"class":483},[152,115724,32160],{"class":293},[152,115726,115727],{"class":483},".target_site_id].copy()\n",[152,115729,115730,115732,115734,115737,115739,115742,115744],{"class":281,"line":1284},[152,115731,111519],{"class":483},[152,115733,1864],{"class":476},[152,115735,115736],{"class":483}," np.concatenate([",[152,115738,32160],{"class":293},[152,115740,115741],{"class":483},".data.qpos.copy(), ",[152,115743,32160],{"class":293},[152,115745,115746],{"class":483},".data.qvel.copy(), tip, target])\n",[152,115748,115749,115751],{"class":281,"line":1289},[152,115750,16367],{"class":476},[152,115752,115753],{"class":483}," obs.astype(np.float32)\n",[152,115755,115756],{"class":281,"line":1301},[152,115757,307],{"emptyLinePlaceholder":306},[152,115759,115760,115762,115765,115767,115769],{"class":281,"line":1310},[152,115761,32138],{"class":476},[152,115763,115764],{"class":285}," _get_reward",[152,115766,115433],{"class":483},[152,115768,1858],{"class":293},[152,115770,5382],{"class":483},[152,115772,115773,115775,115777,115779,115781,115783],{"class":281,"line":1320},[152,115774,113474],{"class":483},[152,115776,1864],{"class":476},[152,115778,40210],{"class":293},[152,115780,115707],{"class":483},[152,115782,32160],{"class":293},[152,115784,115785],{"class":483},".tip_site_id]\n",[152,115787,115788,115790,115792,115794,115796,115798],{"class":281,"line":1327},[152,115789,113487],{"class":483},[152,115791,1864],{"class":476},[152,115793,40210],{"class":293},[152,115795,115707],{"class":483},[152,115797,32160],{"class":293},[152,115799,115800],{"class":483},".target_site_id]\n",[152,115802,115803,115806,115808,115810,115812],{"class":281,"line":11528},[152,115804,115805],{"class":483},"        dist ",[152,115807,1864],{"class":476},[152,115809,112938],{"class":483},[152,115811,2340],{"class":476},[152,115813,112943],{"class":483},[152,115815,115816,115819,115821,115823,115825,115828,115830],{"class":281,"line":11536},[152,115817,115818],{"class":483},"        control_cost ",[152,115820,1864],{"class":476},[152,115822,113374],{"class":293},[152,115824,8160],{"class":476},[152,115826,115827],{"class":483}," np.sum(np.square(",[152,115829,32160],{"class":293},[152,115831,115832],{"class":483},".data.ctrl))\n",[152,115834,115835,115837,115839,115841,115843,115845,115847],{"class":281,"line":11541},[152,115836,16367],{"class":476},[152,115838,111134],{"class":293},[152,115840,1819],{"class":483},[152,115842,2340],{"class":476},[152,115844,112933],{"class":483},[152,115846,2340],{"class":476},[152,115848,113396],{"class":483},[152,115850,115851],{"class":281,"line":18219},[152,115852,307],{"emptyLinePlaceholder":306},[152,115854,115855,115857,115860,115863,115865,115868,115870,115872,115874,115876,115878,115881,115884,115886,115888,115890,115892],{"class":281,"line":18225},[152,115856,32138],{"class":476},[152,115858,115859],{"class":285}," reset",[152,115861,115862],{"class":483},"(self, ",[152,115864,2263],{"class":476},[152,115866,115867],{"class":483},", seed: ",[152,115869,1822],{"class":293},[152,115871,26720],{"class":476},[152,115873,40270],{"class":293},[152,115875,15180],{"class":476},[152,115877,40270],{"class":293},[152,115879,115880],{"class":483},", options: ",[152,115882,115883],{"class":293},"dict",[152,115885,26720],{"class":476},[152,115887,40270],{"class":293},[152,115889,15180],{"class":476},[152,115891,40270],{"class":293},[152,115893,32123],{"class":483},[152,115895,115896,115898,115901,115904,115906],{"class":281,"line":18248},[152,115897,32154],{"class":293},[152,115899,115900],{"class":483},"().reset(",[152,115902,115903],{"class":6858},"seed",[152,115905,1864],{"class":476},[152,115907,115908],{"class":483},"seed)\n",[152,115910,115911,115914,115916,115919,115921],{"class":281,"line":18254},[152,115912,115913],{"class":483},"        mujoco.mj_resetData(",[152,115915,32160],{"class":293},[152,115917,115918],{"class":483},".model, ",[152,115920,32160],{"class":293},[152,115922,115923],{"class":483},".data)\n",[152,115925,115926],{"class":281,"line":18277},[152,115927,307],{"emptyLinePlaceholder":306},[152,115929,115930,115932,115935,115937,115939,115942,115944,115946,115948,115950,115952,115954,115956,115958,115960,115962,115964],{"class":281,"line":18291},[152,115931,32182],{"class":293},[152,115933,115934],{"class":483},".data.qpos[:] ",[152,115936,1864],{"class":476},[152,115938,40210],{"class":293},[152,115940,115941],{"class":483},".np_random.uniform(",[152,115943,115099],{"class":6858},[152,115945,115102],{"class":476},[152,115947,87547],{"class":293},[152,115949,14051],{"class":483},[152,115951,115109],{"class":6858},[152,115953,1864],{"class":476},[152,115955,87547],{"class":293},[152,115957,14051],{"class":483},[152,115959,32833],{"class":6858},[152,115961,1864],{"class":476},[152,115963,32160],{"class":293},[152,115965,115966],{"class":483},".model.nq)\n",[152,115968,115969,115971,115974,115976],{"class":281,"line":18311},[152,115970,32182],{"class":293},[152,115972,115973],{"class":483},".data.qvel[:] ",[152,115975,1864],{"class":476},[152,115977,106098],{"class":293},[152,115979,115980,115983,115985,115987,115989],{"class":281,"line":18317},[152,115981,115982],{"class":483},"        mujoco.mj_forward(",[152,115984,32160],{"class":293},[152,115986,115918],{"class":483},[152,115988,32160],{"class":293},[152,115990,115923],{"class":483},[152,115992,115993],{"class":281,"line":18328},[152,115994,307],{"emptyLinePlaceholder":306},[152,115996,115997,115999,116001,116003],{"class":281,"line":18351},[152,115998,32182],{"class":293},[152,116000,115043],{"class":483},[152,116002,1864],{"class":476},[152,116004,48670],{"class":293},[152,116006,116007,116009,116011],{"class":281,"line":18373},[152,116008,16367],{"class":476},[152,116010,40210],{"class":293},[152,116012,116013],{"class":483},"._get_obs(), {}\n",[152,116015,116016],{"class":281,"line":18378},[152,116017,307],{"emptyLinePlaceholder":306},[152,116019,116020,116022,116025],{"class":281,"line":18384},[152,116021,32138],{"class":476},[152,116023,116024],{"class":285}," step",[152,116026,116027],{"class":483},"(self, action):\n",[152,116029,116030,116032,116034,116037,116039,116041],{"class":281,"line":18398},[152,116031,111559],{"class":483},[152,116033,1864],{"class":476},[152,116035,116036],{"class":483}," np.asarray(action, ",[152,116038,94837],{"class":6858},[152,116040,1864],{"class":476},[152,116042,115133],{"class":483},[152,116044,116045,116047,116049,116051,116053,116056,116058],{"class":281,"line":18411},[152,116046,111559],{"class":483},[152,116048,1864],{"class":476},[152,116050,108784],{"class":483},[152,116052,32160],{"class":293},[152,116054,116055],{"class":483},".action_space.low, ",[152,116057,32160],{"class":293},[152,116059,116060],{"class":483},".action_space.high)\n",[152,116062,116063],{"class":281,"line":18416},[152,116064,307],{"emptyLinePlaceholder":306},[152,116066,116067,116069,116072,116074],{"class":281,"line":18430},[152,116068,32182],{"class":293},[152,116070,116071],{"class":483},".data.ctrl[:] ",[152,116073,1864],{"class":476},[152,116075,108807],{"class":483},[152,116077,116078,116080,116082,116084,116086,116088,116090],{"class":281,"line":18435},[152,116079,5046],{"class":476},[152,116081,102838],{"class":483},[152,116083,27653],{"class":476},[152,116085,33780],{"class":293},[152,116087,1819],{"class":483},[152,116089,32160],{"class":293},[152,116091,116092],{"class":483},".frame_skip):\n",[152,116094,116095,116098,116100,116102,116104],{"class":281,"line":18441},[152,116096,116097],{"class":483},"            mujoco.mj_step(",[152,116099,32160],{"class":293},[152,116101,115918],{"class":483},[152,116103,32160],{"class":293},[152,116105,115923],{"class":483},[152,116107,116108],{"class":281,"line":18446},[152,116109,307],{"emptyLinePlaceholder":306},[152,116111,116112,116114,116116,116118],{"class":281,"line":18460},[152,116113,32182],{"class":293},[152,116115,115043],{"class":483},[152,116117,11109],{"class":476},[152,116119,57036],{"class":293},[152,116121,116122],{"class":281,"line":18465},[152,116123,307],{"emptyLinePlaceholder":306},[152,116125,116126,116128,116130,116132],{"class":281,"line":18470},[152,116127,111519],{"class":483},[152,116129,1864],{"class":476},[152,116131,40210],{"class":293},[152,116133,116134],{"class":483},"._get_obs()\n",[152,116136,116137,116139,116141,116143],{"class":281,"line":18484},[152,116138,111624],{"class":483},[152,116140,1864],{"class":476},[152,116142,40210],{"class":293},[152,116144,116145],{"class":483},"._get_reward()\n",[152,116147,116148],{"class":281,"line":18496},[152,116149,307],{"emptyLinePlaceholder":306},[152,116151,116152,116154,116156,116158,116160,116162],{"class":281,"line":18501},[152,116153,113474],{"class":483},[152,116155,1864],{"class":476},[152,116157,40210],{"class":293},[152,116159,115707],{"class":483},[152,116161,32160],{"class":293},[152,116163,115785],{"class":483},[152,116165,116166,116168,116170,116172,116174,116176],{"class":281,"line":18514},[152,116167,113487],{"class":483},[152,116169,1864],{"class":476},[152,116171,40210],{"class":293},[152,116173,115707],{"class":483},[152,116175,32160],{"class":293},[152,116177,115800],{"class":483},[152,116179,116180,116182,116184,116186,116189,116191],{"class":281,"line":18519},[152,116181,115805],{"class":483},[152,116183,1864],{"class":476},[152,116185,111134],{"class":293},[152,116187,116188],{"class":483},"(np.linalg.norm(tip ",[152,116190,2340],{"class":476},[152,116192,116193],{"class":483}," target))\n",[152,116195,116196],{"class":281,"line":18524},[152,116197,307],{"emptyLinePlaceholder":306},[152,116199,116200,116203,116205,116207,116209],{"class":281,"line":18529},[152,116201,116202],{"class":483},"        terminated ",[152,116204,1864],{"class":476},[152,116206,115026],{"class":483},[152,116208,844],{"class":476},[152,116210,115031],{"class":293},[152,116212,116213,116216,116218,116220,116222,116224,116226],{"class":281,"line":18542},[152,116214,116215],{"class":483},"        truncated ",[152,116217,1864],{"class":476},[152,116219,40210],{"class":293},[152,116221,115043],{"class":483},[152,116223,3370],{"class":476},[152,116225,40210],{"class":293},[152,116227,115050],{"class":483},[152,116229,116230,116233,116235,116237,116240],{"class":281,"line":18547},[152,116231,116232],{"class":483},"        info ",[152,116234,1864],{"class":476},[152,116236,6090],{"class":483},[152,116238,116239],{"class":289},"\"distance\"",[152,116241,116242],{"class":483},": dist}\n",[152,116244,116245,116247],{"class":281,"line":33970},[152,116246,16367],{"class":476},[152,116248,116249],{"class":483}," obs, reward, terminated, truncated, info\n",[152,116251,116252],{"class":281,"line":33976},[152,116253,307],{"emptyLinePlaceholder":306},[152,116255,116256],{"class":281,"line":33982},[152,116257,307],{"emptyLinePlaceholder":306},[152,116259,116260,116262,116264,116266,116268],{"class":281,"line":33988},[152,116261,33284],{"class":476},[152,116263,3624],{"class":285},[152,116265,102735],{"class":483},[152,116267,97023],{"class":293},[152,116269,5382],{"class":483},[152,116271,116272,116275,116277],{"class":281,"line":33994},[152,116273,116274],{"class":483},"    env ",[152,116276,1864],{"class":476},[152,116278,116279],{"class":483}," ReacherEnv()\n",[152,116281,116282,116285,116287,116290,116292,116294,116296],{"class":281,"line":34005},[152,116283,116284],{"class":483},"    obs, info ",[152,116286,1864],{"class":476},[152,116288,116289],{"class":483}," env.reset(",[152,116291,115903],{"class":6858},[152,116293,1864],{"class":476},[152,116295,2000],{"class":293},[152,116297,1825],{"class":483},[152,116299,116300,116302,116304,116307],{"class":281,"line":34011},[152,116301,32636],{"class":293},[152,116303,1819],{"class":483},[152,116305,116306],{"class":289},"\"initial obs shape:\"",[152,116308,116309],{"class":483},", obs.shape)\n",[152,116311,116312,116314,116316,116319],{"class":281,"line":34031},[152,116313,32636],{"class":293},[152,116315,1819],{"class":483},[152,116317,116318],{"class":289},"\"initial info:\"",[152,116320,116321],{"class":483},", info)\n",[152,116323,116324],{"class":281,"line":34037},[152,116325,307],{"emptyLinePlaceholder":306},[152,116327,116328,116330,116332],{"class":281,"line":34048},[152,116329,111490],{"class":483},[152,116331,1864],{"class":476},[152,116333,106098],{"class":293},[152,116335,116336,116338,116340,116342,116344,116346,116348],{"class":281,"line":34054},[152,116337,4844],{"class":476},[152,116339,32953],{"class":483},[152,116341,27653],{"class":476},[152,116343,33780],{"class":293},[152,116345,1819],{"class":483},[152,116347,2508],{"class":293},[152,116349,32123],{"class":483},[152,116351,116352,116354,116356],{"class":281,"line":34060},[152,116353,111559],{"class":483},[152,116355,1864],{"class":476},[152,116357,116358],{"class":483}," env.action_space.sample()\n",[152,116360,116361,116364,116366],{"class":281,"line":34066},[152,116362,116363],{"class":483},"        obs, reward, terminated, truncated, info ",[152,116365,1864],{"class":476},[152,116367,114752],{"class":483},[152,116369,116370,116372,116374],{"class":281,"line":34072},[152,116371,111634],{"class":483},[152,116373,11109],{"class":476},[152,116375,111639],{"class":483},[152,116377,116378,116380,116382,116384,116386,116389,116391,116393,116396,116398,116400,116403,116405,116407,116410,116412,116414,116416],{"class":281,"line":34078},[152,116379,33788],{"class":293},[152,116381,1819],{"class":483},[152,116383,111668],{"class":289},[152,116385,111671],{"class":483},[152,116387,116388],{"class":289},"\"reward:\"",[152,116390,14051],{"class":483},[152,116392,33355],{"class":293},[152,116394,116395],{"class":483},"(reward, ",[152,116397,1888],{"class":293},[152,116399,111682],{"class":483},[152,116401,116402],{"class":289},"\"distance:\"",[152,116404,14051],{"class":483},[152,116406,33355],{"class":293},[152,116408,116409],{"class":483},"(info[",[152,116411,116239],{"class":289},[152,116413,113539],{"class":483},[152,116415,1888],{"class":293},[152,116417,31834],{"class":483},[152,116419,116420,116422,116425,116428],{"class":281,"line":34084},[152,116421,4147],{"class":476},[152,116423,116424],{"class":483}," terminated ",[152,116426,116427],{"class":476},"or",[152,116429,116430],{"class":483}," truncated:\n",[152,116432,116433],{"class":281,"line":34090},[152,116434,116435],{"class":476},"            break\n",[152,116437,116438],{"class":281,"line":34110},[152,116439,307],{"emptyLinePlaceholder":306},[152,116441,116442,116444,116446,116448,116450,116452,116454,116456],{"class":281,"line":34116},[152,116443,32636],{"class":293},[152,116445,1819],{"class":483},[152,116447,111713],{"class":289},[152,116449,14051],{"class":483},[152,116451,33355],{"class":293},[152,116453,111720],{"class":483},[152,116455,1888],{"class":293},[152,116457,31834],{"class":483},[152,116459,116460],{"class":281,"line":34132},[152,116461,307],{"emptyLinePlaceholder":306},[152,116463,116464],{"class":281,"line":34138},[152,116465,307],{"emptyLinePlaceholder":306},[152,116467,116468,116470,116472,116474,116476],{"class":281,"line":34152},[152,116469,3202],{"class":476},[152,116471,32557],{"class":293},[152,116473,102896],{"class":476},[152,116475,102899],{"class":289},[152,116477,5382],{"class":483},[152,116479,116480],{"class":281,"line":34158},[152,116481,102906],{"class":483},[19,116483,104907],{},[270,116485,116487],{"className":272,"code":116486,"language":274,"meta":275,"style":275},"touch ch8_gym_env.py\n",[277,116488,116489],{"__ignoreMap":275},[152,116490,116491,116493],{"class":281,"line":282},[152,116492,102620],{"class":285},[152,116494,116495],{"class":289}," ch8_gym_env.py\n",[19,116497,111781],{},[270,116499,116501],{"className":272,"code":116500,"language":274,"meta":275,"style":275},"python ch8_gym_env.py\n",[277,116502,116503],{"__ignoreMap":275},[152,116504,116505,116507],{"class":281,"line":282},[152,116506,31717],{"class":285},[152,116508,116495],{"class":289},[14,116510,102909],{"id":102909},[19,116512,116513],{},"继承 Gymnasium 环境：",[270,116515,116517],{"className":31715,"code":116516,"language":31717,"meta":275,"style":275},"class ReacherEnv(gym.Env):\n",[277,116518,116519],{"__ignoreMap":275},[152,116520,116521,116523,116525,116527,116529,116531,116533],{"class":281,"line":282},[152,116522,16309],{"class":476},[152,116524,115394],{"class":285},[152,116526,1819],{"class":483},[152,116528,114877],{"class":285},[152,116530,2366],{"class":483},[152,116532,115403],{"class":285},[152,116534,32123],{"class":483},[19,116536,116537],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116539,116540],{},"初始化模型：",[270,116542,116544],{"className":31715,"code":116543,"language":31717,"meta":275,"style":275},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[277,116545,116546,116560],{"__ignoreMap":275},[152,116547,116548,116550,116552,116554,116556,116558],{"class":281,"line":282},[152,116549,32160],{"class":293},[152,116551,115454],{"class":483},[152,116553,1864],{"class":476},[152,116555,102749],{"class":483},[152,116557,102651],{"class":293},[152,116559,1825],{"class":483},[152,116561,116562,116564,116566,116568,116570,116572],{"class":281,"line":303},[152,116563,32160],{"class":293},[152,116565,115469],{"class":483},[152,116567,1864],{"class":476},[152,116569,115474],{"class":483},[152,116571,32160],{"class":293},[152,116573,115479],{"class":483},[19,116575,116576,116577,116579],{},"这和前面章节一样，只是现在放到了类的 ",[277,116578,32166],{}," 里。",[19,116581,116582],{},"缓存 site ID：",[270,116584,116586],{"className":31715,"code":116585,"language":31717,"meta":275,"style":275},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[277,116587,116588,116602],{"__ignoreMap":275},[152,116589,116590,116592,116594,116596,116598,116600],{"class":281,"line":282},[152,116591,32160],{"class":293},[152,116593,115490],{"class":483},[152,116595,1864],{"class":476},[152,116597,115495],{"class":483},[152,116599,90891],{"class":293},[152,116601,1825],{"class":483},[152,116603,116604,116606,116608,116610,116612,116614],{"class":281,"line":303},[152,116605,32160],{"class":293},[152,116607,115511],{"class":483},[152,116609,1864],{"class":476},[152,116611,115495],{"class":483},[152,116613,90891],{"class":293},[152,116615,1825],{"class":483},[19,116617,116618],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116620,116621],{},"reset：",[270,116623,116625],{"className":31715,"code":116624,"language":31717,"meta":275,"style":275},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[277,116626,116627],{"__ignoreMap":275},[152,116628,116629,116631,116633,116635,116637,116639,116641,116643,116645,116647,116649,116651,116653,116655,116657,116659,116661],{"class":281,"line":282},[152,116630,33284],{"class":476},[152,116632,115859],{"class":285},[152,116634,115862],{"class":483},[152,116636,2263],{"class":476},[152,116638,115867],{"class":483},[152,116640,1822],{"class":293},[152,116642,26720],{"class":476},[152,116644,40270],{"class":293},[152,116646,15180],{"class":476},[152,116648,40270],{"class":293},[152,116650,115880],{"class":483},[152,116652,115883],{"class":293},[152,116654,26720],{"class":476},[152,116656,40270],{"class":293},[152,116658,15180],{"class":476},[152,116660,40270],{"class":293},[152,116662,32123],{"class":483},[19,116664,116665,116667],{},[277,116666,71393],{}," 做四件事：",[416,116669,116670,116673,116676,116679],{},[419,116671,116672],{},"设置随机种子。",[419,116674,116675],{},"重置 MuJoCo data。",[419,116677,116678],{},"随机初始化关节角。",[419,116680,116681],{},"返回初始观测和 info。",[19,116683,116684],{},"step：",[270,116686,116688],{"className":31715,"code":116687,"language":31717,"meta":275,"style":275},"def step(self, action):\n",[277,116689,116690],{"__ignoreMap":275},[152,116691,116692,116694,116696],{"class":281,"line":282},[152,116693,33284],{"class":476},[152,116695,116024],{"class":285},[152,116697,116027],{"class":483},[19,116699,116700,116702],{},[277,116701,108471],{}," 做六件事：",[416,116704,116705,116708,116714,116717,116720,116723],{},[419,116706,116707],{},"检查并裁剪 action。",[419,116709,116710,116711,29984],{},"写入 ",[277,116712,116713],{},"self.data.ctrl",[419,116715,116716],{},"连续推进若干个 MuJoCo 物理步。",[419,116718,116719],{},"计算新观测。",[419,116721,116722],{},"计算奖励和结束条件。",[419,116724,116725],{},"返回 Gymnasium 标准五元组。",[14,116727,103045],{"id":103045},[270,116729,116731],{"className":31715,"code":116730,"language":31717,"meta":275,"style":275},"import gymnasium as gym\n",[277,116732,116733],{"__ignoreMap":275},[152,116734,116735,116737,116739,116741],{"class":281,"line":282},[152,116736,31729],{"class":476},[152,116738,115232],{"class":483},[152,116740,32720],{"class":476},[152,116742,115237],{"class":483},[19,116744,116745,116746,116748,116749,116752],{},"导入 Gymnasium，并起别名 ",[277,116747,114877],{},"。后面写 ",[277,116750,116751],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[270,116754,116756],{"className":31715,"code":116755,"language":31717,"meta":275,"style":275},"from gymnasium import spaces\n",[277,116757,116758],{"__ignoreMap":275},[152,116759,116760,116762,116764,116766],{"class":281,"line":282},[152,116761,32074],{"class":476},[152,116763,115232],{"class":483},[152,116765,31729],{"class":476},[152,116767,115264],{"class":483},[19,116769,116770,116771,116774],{},"导入空间定义工具。",[277,116772,116773],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[270,116776,116777],{"className":31715,"code":116516,"language":31717,"meta":275,"style":275},[277,116778,116779],{"__ignoreMap":275},[152,116780,116781,116783,116785,116787,116789,116791,116793],{"class":281,"line":282},[152,116782,16309],{"class":476},[152,116784,115394],{"class":285},[152,116786,1819],{"class":483},[152,116788,114877],{"class":285},[152,116790,2366],{"class":483},[152,116792,115403],{"class":285},[152,116794,32123],{"class":483},[19,116796,116797,116798,116801,116802,116804,116805,102355,116807,116809],{},"定义一个类，名字叫 ",[277,116799,116800],{},"ReacherEnv","。括号里的 ",[277,116803,116751],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[277,116806,71393],{},[277,116808,108471],{}," 这两个核心方法。",[270,116811,116813],{"className":31715,"code":116812,"language":31717,"meta":275,"style":275},"metadata = {\"render_modes\": []}\n",[277,116814,116815],{"__ignoreMap":275},[152,116816,116817,116820,116822,116824,116826],{"class":281,"line":282},[152,116818,116819],{"class":483},"metadata ",[152,116821,1864],{"class":476},[152,116823,6090],{"class":483},[152,116825,115417],{"class":289},[152,116827,115420],{"class":483},[19,116829,116830],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[270,116832,116834],{"className":31715,"code":116833,"language":31717,"meta":275,"style":275},"def __init__(self) -> None:\n",[277,116835,116836],{"__ignoreMap":275},[152,116837,116838,116840,116842,116844,116846],{"class":281,"line":282},[152,116839,33284],{"class":476},[152,116841,32141],{"class":293},[152,116843,115433],{"class":483},[152,116845,97023],{"class":293},[152,116847,5382],{"class":483},[19,116849,116850,116852,116853,29984],{},[277,116851,32166],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[277,116854,116855],{},"env = ReacherEnv()",[270,116857,116859],{"className":31715,"code":116858,"language":31717,"meta":275,"style":275},"super().__init__()\n",[277,116860,116861],{"__ignoreMap":275},[152,116862,116863,116866,116868,116870],{"class":281,"line":282},[152,116864,116865],{"class":293},"super",[152,116867,18876],{"class":483},[152,116869,32166],{"class":293},[152,116871,3627],{"class":483},[19,116873,116874,116875,116877],{},"调用父类 ",[277,116876,116751],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[270,116879,116880],{"className":31715,"code":116543,"language":31717,"meta":275,"style":275},[277,116881,116882,116896],{"__ignoreMap":275},[152,116883,116884,116886,116888,116890,116892,116894],{"class":281,"line":282},[152,116885,32160],{"class":293},[152,116887,115454],{"class":483},[152,116889,1864],{"class":476},[152,116891,102749],{"class":483},[152,116893,102651],{"class":293},[152,116895,1825],{"class":483},[152,116897,116898,116900,116902,116904,116906,116908],{"class":281,"line":303},[152,116899,32160],{"class":293},[152,116901,115469],{"class":483},[152,116903,1864],{"class":476},[152,116905,115474],{"class":483},[152,116907,32160],{"class":293},[152,116909,115479],{"class":483},[19,116911,116912,116913,116915,116916,102355,116919,116922],{},"把 MuJoCo 模型和状态保存到 ",[277,116914,32160],{}," 上。",[277,116917,116918],{},"self.model",[277,116920,116921],{},"self.data"," 表示这个环境对象自己的模型和状态。",[270,116924,116925],{"className":31715,"code":116585,"language":31717,"meta":275,"style":275},[277,116926,116927,116941],{"__ignoreMap":275},[152,116928,116929,116931,116933,116935,116937,116939],{"class":281,"line":282},[152,116930,32160],{"class":293},[152,116932,115490],{"class":483},[152,116934,1864],{"class":476},[152,116936,115495],{"class":483},[152,116938,90891],{"class":293},[152,116940,1825],{"class":483},[152,116942,116943,116945,116947,116949,116951,116953],{"class":281,"line":303},[152,116944,32160],{"class":293},[152,116946,115511],{"class":483},[152,116948,1864],{"class":476},[152,116950,115495],{"class":483},[152,116952,90891],{"class":293},[152,116954,1825],{"class":483},[19,116956,116957,116958,102355,116961,116964],{},"提前查好 tip 和 target 的 site ID。这样 ",[277,116959,116960],{},"_get_obs",[277,116962,116963],{},"_get_reward"," 里就不用每次按名字查找。",[270,116966,116968],{"className":31715,"code":116967,"language":31717,"meta":275,"style":275},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[277,116969,116970,116980,116990],{"__ignoreMap":275},[152,116971,116972,116974,116976,116978],{"class":281,"line":282},[152,116973,32160],{"class":293},[152,116975,115204],{"class":483},[152,116977,1864],{"class":476},[152,116979,55764],{"class":293},[152,116981,116982,116984,116986,116988],{"class":281,"line":303},[152,116983,32160],{"class":293},[152,116985,115583],{"class":483},[152,116987,1864],{"class":476},[152,116989,115588],{"class":293},[152,116991,116992,116994,116996,116998],{"class":281,"line":310},[152,116993,32160],{"class":293},[152,116995,115043],{"class":483},[152,116997,1864],{"class":476},[152,116999,48670],{"class":293},[19,117001,117002,117005,117006,117009,117010,117013],{},[277,117003,117004],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[277,117007,117008],{},"max_steps"," 是一个 episode 最多运行多少步。",[277,117011,117012],{},"steps"," 记录当前 episode 已经走了多少步。",[270,117015,117016],{"className":31715,"code":115082,"language":31717,"meta":275,"style":275},[277,117017,117018],{"__ignoreMap":275},[152,117019,117020,117022,117024,117026,117028,117030,117032,117034,117036,117038,117040,117042,117044,117046,117048,117050,117052,117054,117056,117058],{"class":281,"line":282},[152,117021,32160],{"class":293},[152,117023,115091],{"class":483},[152,117025,1864],{"class":476},[152,117027,115096],{"class":483},[152,117029,115099],{"class":6858},[152,117031,115102],{"class":476},[152,117033,103740],{"class":293},[152,117035,14051],{"class":483},[152,117037,115109],{"class":6858},[152,117039,1864],{"class":476},[152,117041,103740],{"class":293},[152,117043,14051],{"class":483},[152,117045,97300],{"class":6858},[152,117047,1864],{"class":476},[152,117049,1819],{"class":483},[152,117051,1894],{"class":293},[152,117053,115126],{"class":483},[152,117055,94837],{"class":6858},[152,117057,1864],{"class":476},[152,117059,115133],{"class":483},[19,117061,117062,117063,117066,117067,102355,117070,117073],{},"定义动作空间。",[277,117064,117065],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[277,117068,117069],{},"low=-1.0",[277,117071,117072],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[270,117075,117076],{"className":31715,"code":115143,"language":31717,"meta":275,"style":275},[277,117077,117078],{"__ignoreMap":275},[152,117079,117080,117082,117084,117086,117088,117090,117092,117094,117096,117098,117100,117102,117104,117106,117108,117110,117112,117114],{"class":281,"line":282},[152,117081,32160],{"class":293},[152,117083,115152],{"class":483},[152,117085,1864],{"class":476},[152,117087,115096],{"class":483},[152,117089,115099],{"class":6858},[152,117091,115102],{"class":476},[152,117093,115163],{"class":483},[152,117095,115109],{"class":6858},[152,117097,1864],{"class":476},[152,117099,115163],{"class":483},[152,117101,97300],{"class":6858},[152,117103,1864],{"class":476},[152,117105,1819],{"class":483},[152,117107,2254],{"class":293},[152,117109,115126],{"class":483},[152,117111,94837],{"class":6858},[152,117113,1864],{"class":476},[152,117115,115133],{"class":483},[19,117117,117118,117119,117122,117123,117126],{},"定义观测空间。",[277,117120,117121],{},"shape=(10,)"," 表示观测是 10 个数。",[277,117124,117125],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[270,117128,117130],{"className":31715,"code":117129,"language":31717,"meta":275,"style":275},"def _get_obs(self) -> np.ndarray:\n",[277,117131,117132],{"__ignoreMap":275},[152,117133,117134,117136,117138],{"class":281,"line":282},[152,117135,33284],{"class":476},[152,117137,115693],{"class":285},[152,117139,115696],{"class":483},[19,117141,117142,117143,117145],{},"定义内部函数，用来生成观测。函数名前面的 ",[277,117144,2797],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[270,117147,117149],{"className":31715,"code":117148,"language":31717,"meta":275,"style":275},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[277,117150,117151,117165],{"__ignoreMap":275},[152,117152,117153,117155,117157,117159,117161,117163],{"class":281,"line":282},[152,117154,112905],{"class":483},[152,117156,1864],{"class":476},[152,117158,40210],{"class":293},[152,117160,115707],{"class":483},[152,117162,32160],{"class":293},[152,117164,115712],{"class":483},[152,117166,117167,117169,117171,117173,117175,117177],{"class":281,"line":303},[152,117168,112915],{"class":483},[152,117170,1864],{"class":476},[152,117172,40210],{"class":293},[152,117174,115707],{"class":483},[152,117176,32160],{"class":293},[152,117178,115727],{"class":483},[19,117180,117181],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[270,117183,117185],{"className":31715,"code":117184,"language":31717,"meta":275,"style":275},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[277,117186,117187,117203],{"__ignoreMap":275},[152,117188,117189,117191,117193,117195,117197,117199,117201],{"class":281,"line":282},[152,117190,112191],{"class":483},[152,117192,1864],{"class":476},[152,117194,115736],{"class":483},[152,117196,32160],{"class":293},[152,117198,115741],{"class":483},[152,117200,32160],{"class":293},[152,117202,115746],{"class":483},[152,117204,117205,117207],{"class":281,"line":303},[152,117206,18661],{"class":476},[152,117208,115753],{"class":483},[19,117210,117211,117212,117215,117216,117218],{},"拼接观测，并转换成 ",[277,117213,117214],{},"float32","。很多强化学习库默认使用 ",[277,117217,117214],{},"，所以这里主动转换。",[270,117220,117221],{"className":31715,"code":116624,"language":31717,"meta":275,"style":275},[277,117222,117223],{"__ignoreMap":275},[152,117224,117225,117227,117229,117231,117233,117235,117237,117239,117241,117243,117245,117247,117249,117251,117253,117255,117257],{"class":281,"line":282},[152,117226,33284],{"class":476},[152,117228,115859],{"class":285},[152,117230,115862],{"class":483},[152,117232,2263],{"class":476},[152,117234,115867],{"class":483},[152,117236,1822],{"class":293},[152,117238,26720],{"class":476},[152,117240,40270],{"class":293},[152,117242,15180],{"class":476},[152,117244,40270],{"class":293},[152,117246,115880],{"class":483},[152,117248,115883],{"class":293},[152,117250,26720],{"class":476},[152,117252,40270],{"class":293},[152,117254,15180],{"class":476},[152,117256,40270],{"class":293},[152,117258,32123],{"class":483},[19,117260,117261,117262,117264,117265,117268],{},"定义 reset。",[277,117263,115903],{}," 用来控制随机数，保证实验可以复现。",[277,117266,117267],{},"options"," 用来接收额外配置，本章暂时不用。",[270,117270,117272],{"className":31715,"code":117271,"language":31717,"meta":275,"style":275},"super().reset(seed=seed)\n",[277,117273,117274],{"__ignoreMap":275},[152,117275,117276,117278,117280,117282,117284],{"class":281,"line":282},[152,117277,116865],{"class":293},[152,117279,115900],{"class":483},[152,117281,115903],{"class":6858},[152,117283,1864],{"class":476},[152,117285,115908],{"class":483},[19,117287,117288,117289,117292],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[277,117290,117291],{},"self.np_random"," 生成可复现的随机数。",[270,117294,117296],{"className":31715,"code":117295,"language":31717,"meta":275,"style":275},"mujoco.mj_resetData(self.model, self.data)\n",[277,117297,117298],{"__ignoreMap":275},[152,117299,117300,117303,117305,117307,117309],{"class":281,"line":282},[152,117301,117302],{"class":483},"mujoco.mj_resetData(",[152,117304,32160],{"class":293},[152,117306,115918],{"class":483},[152,117308,32160],{"class":293},[152,117310,115923],{"class":483},[19,117312,117313],{},"把 MuJoCo 状态重置到默认状态。",[270,117315,117317],{"className":31715,"code":117316,"language":31717,"meta":275,"style":275},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[277,117318,117319],{"__ignoreMap":275},[152,117320,117321,117323,117325,117327,117329,117331,117333,117335,117337,117339,117341,117343,117345,117347,117349,117351,117353],{"class":281,"line":282},[152,117322,32160],{"class":293},[152,117324,115934],{"class":483},[152,117326,1864],{"class":476},[152,117328,40210],{"class":293},[152,117330,115941],{"class":483},[152,117332,115099],{"class":6858},[152,117334,115102],{"class":476},[152,117336,87547],{"class":293},[152,117338,14051],{"class":483},[152,117340,115109],{"class":6858},[152,117342,1864],{"class":476},[152,117344,87547],{"class":293},[152,117346,14051],{"class":483},[152,117348,32833],{"class":6858},[152,117350,1864],{"class":476},[152,117352,32160],{"class":293},[152,117354,115966],{"class":483},[19,117356,116678,117357,117360,117361,117364,117365,117367],{},[277,117358,117359],{},"[:]"," 表示修改整个数组。",[277,117362,117363],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[277,117366,103487],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[270,117369,117371],{"className":31715,"code":117370,"language":31717,"meta":275,"style":275},"self.data.qvel[:] = 0.0\n",[277,117372,117373],{"__ignoreMap":275},[152,117374,117375,117377,117379,117381],{"class":281,"line":282},[152,117376,32160],{"class":293},[152,117378,115973],{"class":483},[152,117380,1864],{"class":476},[152,117382,106098],{"class":293},[19,117384,117385],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[270,117387,117389],{"className":31715,"code":117388,"language":31717,"meta":275,"style":275},"self.steps = 0\nreturn self._get_obs(), {}\n",[277,117390,117391,117401],{"__ignoreMap":275},[152,117392,117393,117395,117397,117399],{"class":281,"line":282},[152,117394,32160],{"class":293},[152,117396,115043],{"class":483},[152,117398,1864],{"class":476},[152,117400,48670],{"class":293},[152,117402,117403,117405,117407],{"class":281,"line":303},[152,117404,18661],{"class":476},[152,117406,40210],{"class":293},[152,117408,116013],{"class":483},[19,117410,117411],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[270,117413,117414],{"className":31715,"code":116687,"language":31717,"meta":275,"style":275},[277,117415,117416],{"__ignoreMap":275},[152,117417,117418,117420,117422],{"class":281,"line":282},[152,117419,33284],{"class":476},[152,117421,116024],{"class":285},[152,117423,116027],{"class":483},[19,117425,117426],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[270,117428,117430],{"className":31715,"code":117429,"language":31717,"meta":275,"style":275},"action = np.asarray(action, dtype=np.float32)\n",[277,117431,117432],{"__ignoreMap":275},[152,117433,117434,117436,117438,117440,117442,117444],{"class":281,"line":282},[152,117435,108779],{"class":483},[152,117437,1864],{"class":476},[152,117439,116036],{"class":483},[152,117441,94837],{"class":6858},[152,117443,1864],{"class":476},[152,117445,115133],{"class":483},[19,117447,117448,117449,29984],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[277,117450,117214],{},[270,117452,117454],{"className":31715,"code":117453,"language":31717,"meta":275,"style":275},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[277,117455,117456],{"__ignoreMap":275},[152,117457,117458,117460,117462,117464,117466,117468,117470],{"class":281,"line":282},[152,117459,108779],{"class":483},[152,117461,1864],{"class":476},[152,117463,108784],{"class":483},[152,117465,32160],{"class":293},[152,117467,116055],{"class":483},[152,117469,32160],{"class":293},[152,117471,116060],{"class":483},[19,117473,117474],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[270,117476,117478],{"className":31715,"code":117477,"language":31717,"meta":275,"style":275},"self.data.ctrl[:] = action\n",[277,117479,117480],{"__ignoreMap":275},[152,117481,117482,117484,117486,117488],{"class":281,"line":282},[152,117483,32160],{"class":293},[152,117485,116071],{"class":483},[152,117487,1864],{"class":476},[152,117489,108807],{"class":483},[19,117491,117492],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[270,117494,117496],{"className":31715,"code":117495,"language":31717,"meta":275,"style":275},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[277,117497,117498,117514],{"__ignoreMap":275},[152,117499,117500,117502,117504,117506,117508,117510,117512],{"class":281,"line":282},[152,117501,4668],{"class":476},[152,117503,102838],{"class":483},[152,117505,27653],{"class":476},[152,117507,33780],{"class":293},[152,117509,1819],{"class":483},[152,117511,32160],{"class":293},[152,117513,116092],{"class":483},[152,117515,117516,117519,117521,117523,117525],{"class":281,"line":303},[152,117517,117518],{"class":483},"    mujoco.mj_step(",[152,117520,32160],{"class":293},[152,117522,115918],{"class":483},[152,117524,32160],{"class":293},[152,117526,115923],{"class":483},[19,117528,117529,117530,117533,117534,117536,117537,29984],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[277,117531,117532],{},"frame_skip=5","，所以外部调用一次 ",[277,117535,115214],{},"，内部实际执行 5 次 ",[277,117538,102552],{},[270,117540,117542],{"className":31715,"code":117541,"language":31717,"meta":275,"style":275},"self.steps += 1\n",[277,117543,117544],{"__ignoreMap":275},[152,117545,117546,117548,117550,117552],{"class":281,"line":282},[152,117547,32160],{"class":293},[152,117549,115043],{"class":483},[152,117551,11109],{"class":476},[152,117553,57036],{"class":293},[19,117555,117556],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[270,117558,117560],{"className":31715,"code":117559,"language":31717,"meta":275,"style":275},"obs = self._get_obs()\nreward = self._get_reward()\n",[277,117561,117562,117572],{"__ignoreMap":275},[152,117563,117564,117566,117568,117570],{"class":281,"line":282},[152,117565,112191],{"class":483},[152,117567,1864],{"class":476},[152,117569,40210],{"class":293},[152,117571,116134],{"class":483},[152,117573,117574,117576,117578,117580],{"class":281,"line":303},[152,117575,112342],{"class":483},[152,117577,1864],{"class":476},[152,117579,40210],{"class":293},[152,117581,116145],{"class":483},[19,117583,117584],{},"计算新的观测和奖励。",[270,117586,117588],{"className":31715,"code":117587,"language":31717,"meta":275,"style":275},"dist = float(np.linalg.norm(tip - target))\n",[277,117589,117590],{"__ignoreMap":275},[152,117591,117592,117594,117596,117598,117600,117602],{"class":281,"line":282},[152,117593,112933],{"class":483},[152,117595,1864],{"class":476},[152,117597,111134],{"class":293},[152,117599,116188],{"class":483},[152,117601,2340],{"class":476},[152,117603,116193],{"class":483},[19,117605,117606],{},"计算末端到目标的距离，并转换成 Python float。",[270,117608,117609],{"className":31715,"code":115014,"language":31717,"meta":275,"style":275},[277,117610,117611,117623],{"__ignoreMap":275},[152,117612,117613,117615,117617,117619,117621],{"class":281,"line":282},[152,117614,115021],{"class":483},[152,117616,1864],{"class":476},[152,117618,115026],{"class":483},[152,117620,844],{"class":476},[152,117622,115031],{"class":293},[152,117624,117625,117627,117629,117631,117633,117635,117637],{"class":281,"line":303},[152,117626,115036],{"class":483},[152,117628,1864],{"class":476},[152,117630,40210],{"class":293},[152,117632,115043],{"class":483},[152,117634,3370],{"class":476},[152,117636,40210],{"class":293},[152,117638,115050],{"class":483},[19,117640,117641],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[270,117643,117645],{"className":31715,"code":117644,"language":31717,"meta":275,"style":275},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[277,117646,117647,117660],{"__ignoreMap":275},[152,117648,117649,117652,117654,117656,117658],{"class":281,"line":282},[152,117650,117651],{"class":483},"info ",[152,117653,1864],{"class":476},[152,117655,6090],{"class":483},[152,117657,116239],{"class":289},[152,117659,116242],{"class":483},[152,117661,117662,117664],{"class":281,"line":303},[152,117663,18661],{"class":476},[152,117665,116249],{"class":483},[19,117667,117668,117671],{},[277,117669,117670],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[270,117673,117675],{"className":31715,"code":117674,"language":31717,"meta":275,"style":275},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[277,117676,117677,117686],{"__ignoreMap":275},[152,117678,117679,117682,117684],{"class":281,"line":282},[152,117680,117681],{"class":483},"env ",[152,117683,1864],{"class":476},[152,117685,116279],{"class":483},[152,117687,117688,117690,117692,117694,117696,117698,117700],{"class":281,"line":303},[152,117689,114737],{"class":483},[152,117691,1864],{"class":476},[152,117693,116289],{"class":483},[152,117695,115903],{"class":6858},[152,117697,1864],{"class":476},[152,117699,2000],{"class":293},[152,117701,1825],{"class":483},[19,117703,117704,117705,117708],{},"创建环境并重置。",[277,117706,117707],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[270,117710,117712],{"className":31715,"code":117711,"language":31717,"meta":275,"style":275},"action = env.action_space.sample()\n",[277,117713,117714],{"__ignoreMap":275},[152,117715,117716,117718,117720],{"class":281,"line":282},[152,117717,108779],{"class":483},[152,117719,1864],{"class":476},[152,117721,116358],{"class":483},[19,117723,117724],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[1760,117726,103653],{"id":103652},[19,117728,106821],{},[270,117730,117733],{"className":117731,"code":117732,"language":6829,"meta":275},[6827],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[277,117734,117732],{"__ignoreMap":275},[19,117736,117737],{},"这个环境已经具备强化学习环境的基本结构。",[19,117739,117740],{},"主函数里使用随机动作：",[270,117742,117743],{"className":31715,"code":117711,"language":31717,"meta":275,"style":275},[277,117744,117745],{"__ignoreMap":275},[152,117746,117747,117749,117751],{"class":281,"line":282},[152,117748,108779],{"class":483},[152,117750,1864],{"class":476},[152,117752,116358],{"class":483},[19,117754,117755],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[1760,117757,103685],{"id":103684},[416,117759,117760,117763,117769,117778,117787,117796,117802],{},[419,117761,117762],{},"运行程序。",[419,117764,117765,117766,29984],{},"确认 ",[277,117767,117768],{},"obs.shape == (10,)",[419,117770,112518,117771,117774,117775,29984],{},[277,117772,117773],{},"env.action_space","，应类似 ",[277,117776,117777],{},"Box(-1.0, 1.0, (2,), float32)",[419,117779,106922,117780,117783,117784,29984],{},[277,117781,117782],{},"self.max_steps = 10","，确认环境会更快 ",[277,117785,117786],{},"truncated=True",[419,117788,103748,117789,103751,117792,117795],{},[277,117790,117791],{},"terminated = dist \u003C 0.05",[277,117793,117794],{},"dist \u003C 0.2","，观察是否更容易结束。",[419,117797,103748,117798,117801],{},[277,117799,117800],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[419,117803,117804,117805,117807,117808,117811],{},"在 ",[277,117806,117670],{}," 里加入 ",[277,117809,117810],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[1760,117813,103790],{"id":103789},[14,117815,117817],{"id":117816},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117819,117820,117821,117823],{},"Gymnasium 的 ",[277,117822,108471],{}," 返回 5 个值:",[270,117825,117827],{"className":31715,"code":117826,"language":31717,"meta":275,"style":275},"obs, reward, terminated, truncated, info\n",[277,117828,117829],{"__ignoreMap":275},[152,117830,117831],{"class":281,"line":282},[152,117832,117826],{"class":483},[19,117834,117835],{},"不是旧 Gym 的 4 个值。",[14,117837,117839,117842],{"id":117838},"datactrl-action-维度错误",[277,117840,117841],{},"data.ctrl[:] = action"," 维度错误",[19,117844,103860],{},[270,117846,117848],{"className":31715,"code":117847,"language":31717,"meta":275,"style":275},"print(self.model.nu)\nprint(action.shape)\n",[277,117849,117850,117861],{"__ignoreMap":275},[152,117851,117852,117854,117856,117858],{"class":281,"line":282},[152,117853,31752],{"class":293},[152,117855,1819],{"class":483},[152,117857,32160],{"class":293},[152,117859,117860],{"class":483},".model.nu)\n",[152,117862,117863,117865],{"class":281,"line":303},[152,117864,31752],{"class":293},[152,117866,117867],{"class":483},"(action.shape)\n",[19,117869,117870],{},"两者必须匹配。",[14,117872,117874],{"id":117873},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117876,103799],{},[270,117878,117880],{"className":31715,"code":117879,"language":31717,"meta":275,"style":275},"mujoco.mj_forward(self.model, self.data)\n",[277,117881,117882],{"__ignoreMap":275},[152,117883,117884,117887,117889,117891,117893],{"class":281,"line":282},[152,117885,117886],{"class":483},"mujoco.mj_forward(",[152,117888,32160],{"class":293},[152,117890,115918],{"class":483},[152,117892,32160],{"class":293},[152,117894,115923],{"class":483},[14,117896,117898,117900],{"id":117897},"observation_space-维度和-obs-不一致",[277,117899,114937],{}," 维度和 obs 不一致",[19,117902,103912],{},[270,117904,117906],{"className":31715,"code":117905,"language":31717,"meta":275,"style":275},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[277,117907,117908,117918,117925],{"__ignoreMap":275},[152,117909,117910,117912,117914,117916],{"class":281,"line":282},[152,117911,112191],{"class":483},[152,117913,1864],{"class":476},[152,117915,40210],{"class":293},[152,117917,116134],{"class":483},[152,117919,117920,117922],{"class":281,"line":303},[152,117921,31752],{"class":293},[152,117923,117924],{"class":483},"(obs.shape)\n",[152,117926,117927,117929,117931,117933],{"class":281,"line":310},[152,117928,31752],{"class":293},[152,117930,1819],{"class":483},[152,117932,32160],{"class":293},[152,117934,117935],{"class":483},".observation_space.shape)\n",[19,117937,117938],{},"两者必须一致。本章观测是：",[270,117940,117943],{"className":117941,"code":117942,"language":6829,"meta":275},[6827],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[277,117944,117942],{"__ignoreMap":275},[14,117946,117948],{"id":117947},"action-超过范围","action 超过范围",[19,117950,117951],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[270,117953,117954],{"className":31715,"code":117453,"language":31717,"meta":275,"style":275},[277,117955,117956],{"__ignoreMap":275},[152,117957,117958,117960,117962,117964,117966,117968,117970],{"class":281,"line":282},[152,117959,108779],{"class":483},[152,117961,1864],{"class":476},[152,117963,108784],{"class":483},[152,117965,32160],{"class":293},[152,117967,116055],{"class":483},[152,117969,32160],{"class":293},[152,117971,116060],{"class":483},[19,117973,117974,117975,29984],{},"这能避免无效动作直接写入 ",[277,117976,102413],{},[14,117978,117980],{"id":117979},"忘记返回-info","忘记返回 info",[19,117982,117820,117983,102355,117985,117987],{},[277,117984,71393],{},[277,117986,108471],{}," 都会返回 info：",[270,117989,117990],{"className":31715,"code":114730,"language":31717,"meta":275,"style":275},[277,117991,117992,118000],{"__ignoreMap":275},[152,117993,117994,117996,117998],{"class":281,"line":282},[152,117995,114737],{"class":483},[152,117997,1864],{"class":476},[152,117999,114742],{"class":483},[152,118001,118002,118004,118006],{"class":281,"line":303},[152,118003,114747],{"class":483},[152,118005,1864],{"class":476},[152,118007,114752],{"class":483},[19,118009,118010,118011,29984],{},"即使暂时没有额外信息，也返回 ",[277,118012,33796],{},[1760,118014,118016],{"id":118015},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118018,118019],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[416,118021,118022,118025,118028,118031,118034,118037],{},[419,118023,118024],{},"更稳定的 reward。",[419,118026,118027],{},"合理的 episode 长度。",[419,118029,118030],{},"可重复的随机目标采样。",[419,118032,118033],{},"render 接口。",[419,118035,118036],{},"环境注册代码。",[419,118038,118039],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118041,118042],{},"如果只是自己写训练循环，最小形式是：",[270,118044,118046],{"className":31715,"code":118045,"language":31717,"meta":275,"style":275},"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",[277,118047,118048,118056,118072,118076,118092,118101,118110,118120],{"__ignoreMap":275},[152,118049,118050,118052,118054],{"class":281,"line":282},[152,118051,117681],{"class":483},[152,118053,1864],{"class":476},[152,118055,116279],{"class":483},[152,118057,118058,118060,118062,118064,118066,118068,118070],{"class":281,"line":303},[152,118059,114737],{"class":483},[152,118061,1864],{"class":476},[152,118063,116289],{"class":483},[152,118065,115903],{"class":6858},[152,118067,1864],{"class":476},[152,118069,2000],{"class":293},[152,118071,1825],{"class":483},[152,118073,118074],{"class":281,"line":310},[152,118075,307],{"emptyLinePlaceholder":306},[152,118077,118078,118080,118082,118084,118086,118088,118090],{"class":281,"line":324},[152,118079,4668],{"class":476},[152,118081,102838],{"class":483},[152,118083,27653],{"class":476},[152,118085,33780],{"class":293},[152,118087,1819],{"class":483},[152,118089,8052],{"class":293},[152,118091,32123],{"class":483},[152,118093,118094,118097,118099],{"class":281,"line":329},[152,118095,118096],{"class":483},"    action ",[152,118098,1864],{"class":476},[152,118100,116358],{"class":483},[152,118102,118103,118106,118108],{"class":281,"line":343},[152,118104,118105],{"class":483},"    obs, reward, terminated, truncated, info ",[152,118107,1864],{"class":476},[152,118109,114752],{"class":483},[152,118111,118112,118114,118116,118118],{"class":281,"line":348},[152,118113,4744],{"class":476},[152,118115,116424],{"class":483},[152,118117,116427],{"class":476},[152,118119,116430],{"class":483},[152,118121,118122,118125,118127],{"class":281,"line":362},[152,118123,118124],{"class":483},"        obs, info ",[152,118126,1864],{"class":476},[152,118128,114742],{"class":483},[1760,118130,118132],{"id":118131},"_9本章小结","9.本章小结",[19,118134,118135],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[270,118137,118140],{"className":118138,"code":118139,"language":6829,"meta":275},[6827],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[277,118141,118139],{"__ignoreMap":275},[19,118143,118144],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1736,118146,118147],{},"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":275,"searchDepth":303,"depth":303,"links":118149},[118150,118151,118152,118159,118163,118164,118165,118175,118176],{"id":101983,"depth":303,"text":101984},{"id":102106,"depth":303,"text":102107},{"id":102381,"depth":303,"text":102382,"children":118153},[118154,118156,118158],{"id":114961,"depth":310,"text":118155},"terminated 和 truncated 的区别",{"id":115064,"depth":310,"text":118157},"observation_space 和 action_space",{"id":115191,"depth":310,"text":115192},{"id":102589,"depth":303,"text":102590,"children":118160},[118161,118162],{"id":102909,"depth":310,"text":102909},{"id":103045,"depth":310,"text":103045},{"id":103652,"depth":303,"text":103653},{"id":103684,"depth":303,"text":103685},{"id":103789,"depth":303,"text":103790,"children":118166},[118167,118168,118170,118171,118173,118174],{"id":117816,"depth":310,"text":117817},{"id":117838,"depth":310,"text":118169},"data.ctrl[:] = action 维度错误",{"id":117873,"depth":310,"text":117874},{"id":117897,"depth":310,"text":118172},"observation_space 维度和 obs 不一致",{"id":117947,"depth":310,"text":117948},{"id":117979,"depth":310,"text":117980},{"id":118015,"depth":303,"text":118016},{"id":118131,"depth":303,"text":118132},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114714,"description":275},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118183,"title":118184,"body":118185,"description":118608,"extension":1744,"meta":118609,"navigation":306,"path":118610,"seo":118611,"stem":118612,"__hash__":118613},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118186,"toc":118598},[118187,118191,118194,118197,118217,118223,118229,118239,118242,118245,118265,118268,118272,118275,118281,118284,118298,118301,118304,118378,118381,118387,118390,118413,118416,118466,118469,118475,118478,118481,118484,118503,118506,118512,118515,118518,118521,118541,118544,118547,118550,118595],[10,118188,118190],{"id":118189},"mujoco-学习","MuJoCo 学习",[19,118192,118193],{},"初版",[19,118195,118196],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[416,118198,118199,118202,118205,118214],{},[419,118200,118201],{},"MuJoCo 模型文件在描述什么。",[419,118203,118204],{},"Python 代码怎样读取和推进仿真。",[419,118206,118207,2021,118209,2021,118211,118213],{},[277,118208,105367],{},[277,118210,105697],{},[277,118212,105700],{}," 这些数组为什么重要。",[419,118215,118216],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118218,118219,118220,118222],{},"默认环境为 Fedora 44、Python >= 3.10、",[277,118221,102364],{}," 官方 Python bindings。",[19,118224,118225,118226,118228],{},"注意：本文禁止使用 ",[277,118227,102349],{},"。所有示例均使用：",[270,118230,118231],{"className":31715,"code":102915,"language":31717,"meta":275,"style":275},[277,118232,118233],{"__ignoreMap":275},[152,118234,118235,118237],{"class":281,"line":282},[152,118236,31729],{"class":476},[152,118238,102638],{"class":483},[1760,118240,118241],{"id":118241},"适合谁阅读",[19,118243,118244],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[416,118246,118247,118250,118253,118256],{},[419,118248,118249],{},"没学过 MuJoCo，只会一点 Python。",[419,118251,118252],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[419,118254,118255],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[419,118257,118258,118259,118261,118262,118264],{},"以前接触过 ",[277,118260,102349],{},"，现在想迁移到官方 ",[277,118263,102358],{}," Python bindings。",[19,118266,118267],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[1760,118269,118271],{"id":118270},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118273,118274],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[270,118276,118279],{"className":118277,"code":118278,"language":6829,"meta":275},[6827],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[277,118280,118278],{"__ignoreMap":275},[19,118282,118283],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[416,118285,118286,118289,118292,118295],{},[419,118287,118288],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[419,118290,118291],{},"快速测试控制算法，不必一开始就上真实机器人。",[419,118293,118294],{},"生成强化学习环境。",[419,118296,118297],{},"采集状态、动作、图像、奖励等训练数据。",[1760,118299,118300],{"id":118300},"学习前的心智模型",[19,118302,118303],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[23,118305,118306,118318],{},[26,118307,118308],{},[29,118309,118310,118313,118316],{},[32,118311,118312],{"align":34},"部分",[32,118314,118315],{"align":34},"负责什么",[32,118317,22802],{"align":34},[43,118319,118320,118331,118343,118355,118367],{},[29,118321,118322,118325,118328],{},[48,118323,118324],{"align":34},"MJCF XML",[48,118326,118327],{"align":34},"定义世界和机器人结构",[48,118329,118330],{"align":34},"地面、盒子、关节、电机、摄像头",[29,118332,118333,118337,118340],{},[48,118334,118335],{"align":34},[277,118336,102046],{},[48,118338,118339],{"align":34},"编译后的静态模型",[48,118341,118342],{"align":34},"有几个关节、有几个电机、时间步长是多少",[29,118344,118345,118349,118352],{},[48,118346,118347],{"align":34},[277,118348,102056],{},[48,118350,118351],{"align":34},"运行中的动态状态",[48,118353,118354],{"align":34},"当前时间、位置、速度、电机输入",[29,118356,118357,118361,118364],{},[48,118358,118359],{"align":34},[277,118360,102552],{},[48,118362,118363],{"align":34},"推进一步物理仿真",[48,118365,118366],{"align":34},"根据重力、力、碰撞更新状态",[29,118368,118369,118372,118375],{},[48,118370,118371],{"align":34},"Viewer \u002F Renderer",[48,118373,118374],{"align":34},"把仿真显示出来",[48,118376,118377],{"align":34},"打开窗口或保存图片",[19,118379,118380],{},"一句话总结：",[270,118382,118385],{"className":118383,"code":118384,"language":6829,"meta":275},[6827],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[277,118386,118384],{"__ignoreMap":275},[19,118388,118389],{},"参考来源：",[698,118391,118392,118399,118406],{},[419,118393,118394,118395],{},"MuJoCo Python 官方文档：",[69,118396,118397],{"href":118397,"rel":118398},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[245],[419,118400,118401,118402],{},"MuJoCo XML Reference：",[69,118403,118404],{"href":118404,"rel":118405},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[245],[419,118407,118408,118409],{},"MuJoCo Overview：",[69,118410,118411],{"href":118411,"rel":118412},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[245],[1760,118414,118415],{"id":118415},"章节目录",[416,118417,118418,118424,118430,118436,118442,118448,118454,118460],{},[419,118419,118420],{},[69,118421,118423],{"href":118422},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[419,118425,118426],{},[69,118427,118429],{"href":118428},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[419,118431,118432],{},[69,118433,118435],{"href":118434},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[419,118437,118438],{},[69,118439,118441],{"href":118440},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[419,118443,118444],{},[69,118445,118447],{"href":118446},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[419,118449,118450],{},[69,118451,118453],{"href":118452},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[419,118455,118456],{},[69,118457,118459],{"href":118458},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[419,118461,118462],{},[69,118463,118465],{"href":118464},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[1760,118467,118468],{"id":118468},"推荐学习路线",[270,118470,118473],{"className":118471,"code":118472,"language":6829,"meta":275},[6827],"环境安装\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",[277,118474,118472],{"__ignoreMap":275},[19,118476,118477],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[1760,118479,118480],{"id":118480},"建议的目录结构",[19,118482,118483],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[270,118485,118487],{"className":272,"code":118486,"language":274,"meta":275,"style":275},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[277,118488,118489,118497],{"__ignoreMap":275},[152,118490,118491,118493,118495],{"class":281,"line":282},[152,118492,102603],{"class":285},[152,118494,799],{"class":293},[152,118496,102608],{"class":289},[152,118498,118499,118501],{"class":281,"line":303},[152,118500,102613],{"class":293},[152,118502,102608],{"class":289},[19,118504,118505],{},"每一章的代码都单独保存：",[270,118507,118510],{"className":118508,"code":118509,"language":6829,"meta":275},[6827],"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",[277,118511,118509],{"__ignoreMap":275},[19,118513,118514],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[1760,118516,118517],{"id":118517},"学习方法",[19,118519,118520],{},"每章建议按这个顺序操作：",[416,118522,118523,118526,118529,118532,118535,118538],{},[419,118524,118525],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[419,118527,118528],{},"复制最小可运行代码，保存成指定文件。",[419,118530,118531],{},"运行代码，确认没有报错。",[419,118533,118534],{},"对照“运行结果说明”理解输出。",[419,118536,118537],{},"做“验证步骤”，主动改一两个参数。",[419,118539,118540],{},"遇到报错先看“常见错误与解决方案”。",[19,118542,118543],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[1760,118545,118546],{"id":118546},"全局排错顺序",[19,118548,118549],{},"遇到问题时，按下面顺序查：",[416,118551,118552,118558,118564,118569,118572,118575,118582,118592],{},[419,118553,118554,118555],{},"Python 环境是否激活：",[277,118556,118557],{},"which python",[419,118559,118560,118561],{},"MuJoCo 是否能导入：",[277,118562,118563],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[419,118565,118566,118567],{},"是否误装了 ",[277,118568,102349],{},[419,118570,118571],{},"XML 标签是否闭合、属性是否拼写正确",[419,118573,118574],{},"actuator 引用的 joint 名字是否存在",[419,118576,118577,118579,118580],{},[277,118578,102413],{}," 的长度是否等于 ",[277,118581,103495],{},[419,118583,106922,118584,83876,118586,118588,118589],{},[277,118585,105367],{},[277,118587,105697],{}," 后是否调用了 ",[277,118590,118591],{},"mujoco.mj_forward",[419,118593,118594],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1736,118596,118597],{},"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":275,"searchDepth":303,"depth":303,"links":118599},[118600,118601,118602,118603,118604,118605,118606,118607],{"id":118241,"depth":303,"text":118241},{"id":118270,"depth":303,"text":118271},{"id":118300,"depth":303,"text":118300},{"id":118415,"depth":303,"text":118415},{"id":118468,"depth":303,"text":118468},{"id":118480,"depth":303,"text":118480},{"id":118517,"depth":303,"text":118517},{"id":118546,"depth":303,"text":118546},"仿真搭建。",{"category":24993},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118184,"description":118608},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118615,"title":118616,"body":118617,"description":24991,"extension":1744,"meta":119072,"navigation":306,"path":119073,"seo":119074,"stem":119075,"__hash__":119076},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118618,"toc":119070},[118619,118622,118625,118631,119067],[10,118620,118616],{"id":118621},"_1-最常用的基本操作更新",[19,118623,118624],{},"装linux系统教程：",[19,118626,118627],{},[69,118628,118629],{"href":118629,"rel":118630},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[245],[270,118632,118636],{"className":118633,"code":118634,"language":118635,"meta":275,"style":275},"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",[277,118637,118638,118643,118648,118657,118662,118671,118676,118696,118701,118712,118717,118726,118731,118759,118764,118783,118788,118807,118811,118816,118832,118836,118841,118871,118875,118880,118896,118900,118905,118920,118924,118929,118945,118949,118954,118966,118978,118982,118987,119004,119008,119013,119031,119035,119040,119049,119053,119058],{"__ignoreMap":275},[152,118639,118640],{"class":281,"line":282},[152,118641,118642],{"class":866},"#更新相关的知识\n",[152,118644,118645],{"class":281,"line":303},[152,118646,118647],{"class":866},"# 更新软件包列表（从服务器获取最新软件信息）\n",[152,118649,118650,118652,118655],{"class":281,"line":310},[152,118651,26188],{"class":285},[152,118653,118654],{"class":289}," apt",[152,118656,27848],{"class":289},[152,118658,118659],{"class":281,"line":324},[152,118660,118661],{"class":866},"# 升级所有可更新的软件包（不删除旧包）\n",[152,118663,118664,118666,118668],{"class":281,"line":329},[152,118665,26188],{"class":285},[152,118667,118654],{"class":289},[152,118669,118670],{"class":289}," upgrade\n",[152,118672,118673],{"class":281,"line":343},[152,118674,118675],{"class":866},"#更新和升级软件包\n",[152,118677,118678,118680,118682,118685,118687,118689,118691,118694],{"class":281,"line":348},[152,118679,26188],{"class":285},[152,118681,118654],{"class":289},[152,118683,118684],{"class":289}," update",[152,118686,27797],{"class":483},[152,118688,26188],{"class":285},[152,118690,118654],{"class":289},[152,118692,118693],{"class":289}," upgrade",[152,118695,102318],{"class":293},[152,118697,118698],{"class":281,"line":362},[152,118699,118700],{"class":866},"#列出可更新的软件包及版本信息\n",[152,118702,118703,118706,118709],{"class":281,"line":367},[152,118704,118705],{"class":285},"apt",[152,118707,118708],{"class":289}," list",[152,118710,118711],{"class":293}," --upgradable\n",[152,118713,118714],{"class":281,"line":381},[152,118715,118716],{"class":866},"#彻底升级（处理依赖关系，可能删除旧包）\n",[152,118718,118719,118721,118723],{"class":281,"line":386},[152,118720,26188],{"class":285},[152,118722,118654],{"class":289},[152,118724,118725],{"class":289}," full-upgrade\n",[152,118727,118728],{"class":281,"line":932},[152,118729,118730],{"class":866},"#设置指定版本\n",[152,118732,118733,118735,118737,118739,118741,118744,118746,118748,118750,118752,118755,118757],{"class":281,"line":942},[152,118734,26188],{"class":285},[152,118736,118654],{"class":289},[152,118738,25446],{"class":289},[152,118740,477],{"class":476},[152,118742,118743],{"class":289},"package_nam",[152,118745,1891],{"class":483},[152,118747,487],{"class":476},[152,118749,1864],{"class":289},[152,118751,844],{"class":476},[152,118753,118754],{"class":289},"version_numbe",[152,118756,2478],{"class":483},[152,118758,52644],{"class":476},[152,118760,118761],{"class":281,"line":949},[152,118762,118763],{"class":866},"#只安装软件包不升级\n",[152,118765,118766,118768,118770,118772,118774,118776,118778,118780],{"class":281,"line":954},[152,118767,26188],{"class":285},[152,118769,118654],{"class":289},[152,118771,25446],{"class":289},[152,118773,477],{"class":476},[152,118775,118743],{"class":289},[152,118777,1891],{"class":483},[152,118779,487],{"class":476},[152,118781,118782],{"class":293}," --no-upgrade\n",[152,118784,118785],{"class":281,"line":959},[152,118786,118787],{"class":866},"#只升级，不存在就不安装\n",[152,118789,118790,118792,118794,118796,118798,118800,118802,118804],{"class":281,"line":970},[152,118791,26188],{"class":285},[152,118793,118654],{"class":289},[152,118795,25446],{"class":289},[152,118797,477],{"class":476},[152,118799,118743],{"class":289},[152,118801,1891],{"class":483},[152,118803,487],{"class":476},[152,118805,118806],{"class":293}," --only-upgrade\n",[152,118808,118809],{"class":281,"line":979},[152,118810,307],{"emptyLinePlaceholder":306},[152,118812,118813],{"class":281,"line":989},[152,118814,118815],{"class":866},"#安装指定的软件命令\n",[152,118817,118818,118820,118822,118824,118826,118828,118830],{"class":281,"line":996},[152,118819,26188],{"class":285},[152,118821,118654],{"class":289},[152,118823,25446],{"class":289},[152,118825,477],{"class":476},[152,118827,118743],{"class":289},[152,118829,1891],{"class":483},[152,118831,52644],{"class":476},[152,118833,118834],{"class":281,"line":1001},[152,118835,307],{"emptyLinePlaceholder":306},[152,118837,118838],{"class":281,"line":1006},[152,118839,118840],{"class":866},"#安装多个软件包\n",[152,118842,118843,118845,118847,118849,118851,118854,118857,118859,118861,118864,118866,118868],{"class":281,"line":1018},[152,118844,26188],{"class":285},[152,118846,118654],{"class":289},[152,118848,25446],{"class":289},[152,118850,477],{"class":476},[152,118852,118853],{"class":289},"package_",[152,118855,118856],{"class":476},"1>",[152,118858,477],{"class":476},[152,118860,118853],{"class":289},[152,118862,118863],{"class":476},"2>",[152,118865,477],{"class":476},[152,118867,118853],{"class":289},[152,118869,118870],{"class":476},"3>\n",[152,118872,118873],{"class":281,"line":1027},[152,118874,307],{"emptyLinePlaceholder":306},[152,118876,118877],{"class":281,"line":1037},[152,118878,118879],{"class":866},"#更新指定的软件命令\n",[152,118881,118882,118884,118886,118888,118890,118892,118894],{"class":281,"line":1044},[152,118883,26188],{"class":285},[152,118885,118654],{"class":289},[152,118887,118684],{"class":289},[152,118889,477],{"class":476},[152,118891,118743],{"class":289},[152,118893,1891],{"class":483},[152,118895,52644],{"class":476},[152,118897,118898],{"class":281,"line":1049},[152,118899,307],{"emptyLinePlaceholder":306},[152,118901,118902],{"class":281,"line":1054},[152,118903,118904],{"class":866},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[152,118906,118907,118909,118912,118914,118916,118918],{"class":281,"line":1065},[152,118908,118705],{"class":285},[152,118910,118911],{"class":289}," show",[152,118913,477],{"class":476},[152,118915,118743],{"class":289},[152,118917,1891],{"class":483},[152,118919,52644],{"class":476},[152,118921,118922],{"class":281,"line":1074},[152,118923,307],{"emptyLinePlaceholder":306},[152,118925,118926],{"class":281,"line":1084},[152,118927,118928],{"class":866},"#删除软件包命令\n",[152,118930,118931,118933,118935,118937,118939,118941,118943],{"class":281,"line":1091},[152,118932,26188],{"class":285},[152,118934,118654],{"class":289},[152,118936,27689],{"class":289},[152,118938,477],{"class":476},[152,118940,118743],{"class":289},[152,118942,1891],{"class":483},[152,118944,52644],{"class":476},[152,118946,118947],{"class":281,"line":1096},[152,118948,307],{"emptyLinePlaceholder":306},[152,118950,118951],{"class":281,"line":1101},[152,118952,118953],{"class":866},"# 清理旧版本和缓存（释放磁盘空间）\n",[152,118955,118956,118958,118960,118963],{"class":281,"line":1112},[152,118957,26188],{"class":285},[152,118959,118654],{"class":289},[152,118961,118962],{"class":289}," autoremove",[152,118964,118965],{"class":866},"  # 删除不再需要的依赖和库文件\n",[152,118967,118968,118970,118972,118975],{"class":281,"line":1121},[152,118969,26188],{"class":285},[152,118971,118654],{"class":289},[152,118973,118974],{"class":289}," clean",[152,118976,118977],{"class":866},"       # 清理下载的缓存包\n",[152,118979,118980],{"class":281,"line":1131},[152,118981,307],{"emptyLinePlaceholder":306},[152,118983,118984],{"class":281,"line":1138},[152,118985,118986],{"class":866},"#移除软件包及配置文件\n",[152,118988,118989,118991,118993,118996,118998,119000,119002],{"class":281,"line":1143},[152,118990,26188],{"class":285},[152,118992,118654],{"class":289},[152,118994,118995],{"class":289}," purge",[152,118997,477],{"class":476},[152,118999,118743],{"class":289},[152,119001,1891],{"class":483},[152,119003,52644],{"class":476},[152,119005,119006],{"class":281,"line":1148},[152,119007,307],{"emptyLinePlaceholder":306},[152,119009,119010],{"class":281,"line":1159},[152,119011,119012],{"class":866},"#查找软件包命令\n",[152,119014,119015,119017,119019,119022,119024,119027,119029],{"class":281,"line":1168},[152,119016,26188],{"class":285},[152,119018,118654],{"class":289},[152,119020,119021],{"class":289}," search",[152,119023,477],{"class":476},[152,119025,119026],{"class":289},"keywor",[152,119028,2122],{"class":483},[152,119030,52644],{"class":476},[152,119032,119033],{"class":281,"line":1178},[152,119034,307],{"emptyLinePlaceholder":306},[152,119036,119037],{"class":281,"line":1185},[152,119038,119039],{"class":866},"#列出所有已安装的包\n",[152,119041,119042,119044,119046],{"class":281,"line":1190},[152,119043,118705],{"class":285},[152,119045,118708],{"class":289},[152,119047,119048],{"class":293}," --installed\n",[152,119050,119051],{"class":281,"line":1195},[152,119052,307],{"emptyLinePlaceholder":306},[152,119054,119055],{"class":281,"line":1206},[152,119056,119057],{"class":866},"#列出所有已安装的包的版本信息\n",[152,119059,119060,119062,119064],{"class":281,"line":1215},[152,119061,118705],{"class":285},[152,119063,118708],{"class":289},[152,119065,119066],{"class":293}," --all-versions\n",[1736,119068,119069],{},"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":275,"searchDepth":303,"depth":303,"links":119071},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118616,"description":24991},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119078,"title":119079,"body":119080,"description":24991,"extension":1744,"meta":119821,"navigation":306,"path":119822,"seo":119823,"stem":119824,"__hash__":119825},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119081,"toc":119808},[119082,119085,119089,119092,119098,119102,119106,119112,119117,119122,119127,119132,119137,119140,119143,119146,119149,119153,119156,119161,119164,119169,119172,119177,119184,119187,119190,119193,119196,119199,119210,119214,119218,119223,119228,119232,119237,119241,119246,119250,119254,119259,119262,119307,119312,119316,119320,119325,119331,119336,119346,119351,119361,119366,119371,119398,119402,119405,119410,119413,119438,119442,119447,119450,119455,119460,119480,119485,119488,119503,119507,119560,119563,119568,119572,119575,119590,119593,119596,119601,119605,119609,119612,119616,119620,119623,119628,119633,119637,119644,119652,119655,119662,119667,119672,119675,119680,119687,119692,119699,119703,119705,119710,119714,119717,119720,119725,119728,119733,119736,119741,119746,119751,119755,119760,119764,119805],[10,119083,119079],{"id":119084},"_2-linux装机教程",[1760,119086,119088],{"id":119087},"_21-实体机","2.1 实体机",[19,119090,119091],{},"使用清华源：（Ubuntu24.04）",[19,119093,119094],{},[69,119095,119096],{"href":119096,"rel":119097},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[245],[1760,119099,119101],{"id":119100},"_22-普通虚拟机","2.2 普通虚拟机",[14,119103,119105],{"id":119104},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119107,119108],{},[69,119109,119110],{"href":119110,"rel":119111},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[245],[19,119113,119114],{},[401,119115],{"alt":275,"src":119116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119118,119119],{},[401,119120],{"alt":275,"src":119121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119123,119124],{},[401,119125],{"alt":275,"src":119126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119128,119129],{},[401,119130],{"alt":275,"src":119131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119133,119134],{},[401,119135],{"alt":275,"src":119136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119138,119139],{},"内存4G（4096MB）；",[19,119141,119142],{},"CPU给4个核；",[19,119144,119145],{},"硬盘动态分配60G；",[19,119147,119148],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[14,119150,119152],{"id":119151},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119154,119155],{},"按照1.1的步骤下载Ubuntu",[19,119157,119158],{},[401,119159],{"alt":275,"src":119160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119162,119163],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119165,119166],{},[401,119167],{"alt":275,"src":119168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119170,119171],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119173,119174],{},[401,119175],{"alt":275,"src":119176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119178,119179,119180,119183],{},"选择“正常安装”(找不到都用Alt+F7)， ",[694,119181,119182],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119185,119186],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119188,119189],{},"将改动写入磁盘吗 继续",[19,119191,119192],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119194,119195],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119197,119198],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119200,119201,119202,119205,119206,119209],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[694,119203,119204],{},"除了"," 选不发送系统信息与不升级之外， ",[694,119207,119208],{},"其它"," 都跳过或前进）",[14,119211,119213],{"id":119212},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[262,119215,119217],{"id":119216},"_2231-全屏","2.2.3.1 全屏",[19,119219,119220],{},[401,119221],{"alt":275,"src":119222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119224,119225],{},[401,119226],{"alt":275,"src":119227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[262,119229,119231],{"id":119230},"_2232-文件交换","2.2.3.2 文件交换",[19,119233,119234],{},[401,119235],{"alt":275,"src":119236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[262,119238,119240],{"id":119239},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119242,119243],{},[401,119244],{"alt":275,"src":119245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[1760,119247,119249],{"id":119248},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[14,119251,119253],{"id":119252},"_231-简介与优缺点","2.3.1 简介与优缺点",[416,119255,119256],{},[419,119257,119258],{},"什么情况下推荐？",[19,119260,119261],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[416,119263,119264],{"start":303},[419,119265,119266,119267],{},"优缺点：",[416,119268,119269,119299],{},[419,119270,119271,119272],{},"优点：",[416,119273,119274,119277,119284,119287,119290,119293,119296],{},[419,119275,119276],{},"WSL2是最好的Linux发行版;(bushi)",[419,119278,119279,119280,119283],{},"性能损耗极低。且比在Windows上跑深度性能 ",[694,119281,119282],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[419,119285,119286],{},"非常方便调用USB设备，可以USB直通;",[419,119288,119289],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[419,119291,119292],{},"非常方便Win与WSL2互相传文件等协同操作;",[419,119294,119295],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[419,119297,119298],{},"非常方便使用Windows的VScode远程开发;",[419,119300,119301,119302],{},"缺点：",[416,119303,119304],{},[419,119305,119306],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119308,119309],{},[401,119310],{"alt":275,"src":119311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[14,119313,119315],{"id":119314},"_232-安装教程","2.3.2 安装教程",[262,119317,119319],{"id":119318},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[416,119321,119322],{},[419,119323,119324],{},"方法一(图形界面)",[19,119326,119327,119328,26230],{},"用Win+R输入",[277,119329,119330],{},"appwiz.cpl",[19,119332,119333],{},[401,119334],{"alt":275,"src":119335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119337,119338,119339,119342,119343,28078],{},"点击OK进入 ",[694,119340,119341],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[694,119344,119345],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119347,119348],{},[401,119349],{"alt":275,"src":119350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119352,119353,119354,102355,119357,119360],{},"选择 ",[694,119355,119356],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[694,119358,119359],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119362,119363],{},[401,119364],{"alt":275,"src":119365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[416,119367,119368],{"start":303},[419,119369,119370],{},"方法二(命令行)",[270,119372,119376],{"className":119373,"code":119374,"language":119375,"meta":275,"style":275},"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",[277,119377,119378,119383,119388,119393],{"__ignoreMap":275},[152,119379,119380],{"class":281,"line":282},[152,119381,119382],{},"# 开启 Linux 子系统\n",[152,119384,119385],{"class":281,"line":303},[152,119386,119387],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[152,119389,119390],{"class":281,"line":310},[152,119391,119392],{},"# 开启虚拟机平台\n",[152,119394,119395],{"class":281,"line":324},[152,119396,119397],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[262,119399,119401],{"id":119400},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119403,119404],{},"用管理员权限打开powershell",[19,119406,119407],{},[401,119408],{"alt":275,"src":119409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119411,119412],{},"升级WSL并设置默认版本为WSL2",[270,119414,119416],{"className":119373,"code":119415,"language":119375,"meta":275,"style":275},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[277,119417,119418,119423,119428,119433],{"__ignoreMap":275},[152,119419,119420],{"class":281,"line":282},[152,119421,119422],{},"# 更新 wsl\n",[152,119424,119425],{"class":281,"line":303},[152,119426,119427],{},"wsl --update\n",[152,119429,119430],{"class":281,"line":310},[152,119431,119432],{},"# 将 wsl 版本设置为 wsl2\n",[152,119434,119435],{"class":281,"line":324},[152,119436,119437],{},"wsl --set-default-version 2\n",[262,119439,119441],{"id":119440},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[416,119443,119444],{},[419,119445,119446],{},"方式一(商店下载)",[19,119448,119449],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119451,119452],{},[401,119453],{"alt":275,"src":119454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[416,119456,119457],{"start":303},[419,119458,119459],{},"方式二(命令行安装)",[270,119461,119463],{"className":119373,"code":119462,"language":119375,"meta":275,"style":275},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[277,119464,119465,119470,119475],{"__ignoreMap":275},[152,119466,119467],{"class":281,"line":282},[152,119468,119469],{},"# 列出可安装的 Linux 版本\n",[152,119471,119472],{"class":281,"line":303},[152,119473,119474],{},"#（需要科学手段）\n",[152,119476,119477],{"class":281,"line":310},[152,119478,119479],{},"wsl --list --online\n",[19,119481,119482],{},[401,119483],{"alt":275,"src":119484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119486,119487],{},"选择对应发行版并安装",[270,119489,119491],{"className":119373,"code":119490,"language":119375,"meta":275,"style":275},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[277,119492,119493,119498],{"__ignoreMap":275},[152,119494,119495],{"class":281,"line":282},[152,119496,119497],{},"# Ubuntu安装完毕后需要重启系统\n",[152,119499,119500],{"class":281,"line":303},[152,119501,119502],{},"wsl --install -d Ubuntu-24.04\n",[262,119504,119506],{"id":119505},"_2324-查看系统状态","2.3.2.4 查看系统状态",[270,119508,119510],{"className":119373,"code":119509,"language":119375,"meta":275,"style":275},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[277,119511,119512,119517,119522,119527,119532,119536,119540,119545,119550,119555],{"__ignoreMap":275},[152,119513,119514],{"class":281,"line":282},[152,119515,119516],{},"# 查看 wsl\n",[152,119518,119519],{"class":281,"line":303},[152,119520,119521],{},"wsl -l\n",[152,119523,119524],{"class":281,"line":310},[152,119525,119526],{},"# 查看 wsl 运行版本或模式\n",[152,119528,119529],{"class":281,"line":324},[152,119530,119531],{},"wsl -l -v\n",[152,119533,119534],{"class":281,"line":329},[152,119535,307],{"emptyLinePlaceholder":306},[152,119537,119538],{"class":281,"line":343},[152,119539,307],{"emptyLinePlaceholder":306},[152,119541,119542],{"class":281,"line":348},[152,119543,119544],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[152,119546,119547],{"class":281,"line":362},[152,119548,119549],{},"wsl --set-version \u003Cdistro> 2\n",[152,119551,119552],{"class":281,"line":367},[152,119553,119554],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[152,119556,119557],{"class":281,"line":381},[152,119558,119559],{},"wsl --unregister \u003Cdistro>\n",[19,119561,119562],{},"输出Version为2即正常",[19,119564,119565],{},[401,119566],{"alt":275,"src":119567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[262,119569,119571],{"id":119570},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119573,119574],{},"直接在Powershell里输入wsl命令进入子系统",[270,119576,119578],{"className":119373,"code":119577,"language":119375,"meta":275,"style":275},"# 进入子系统\nwsl\n",[277,119579,119580,119585],{"__ignoreMap":275},[152,119581,119582],{"class":281,"line":282},[152,119583,119584],{},"# 进入子系统\n",[152,119586,119587],{"class":281,"line":303},[152,119588,119589],{},"wsl\n",[19,119591,119592],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119594,119595],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119597,119598],{},[401,119599],{"alt":275,"src":119600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[14,119602,119604],{"id":119603},"_233-配置各种环境","2.3.3 配置各种环境",[262,119606,119608],{"id":119607},"_2331-换源","2.3.3.1 换源",[19,119610,119611],{},"(同实体机LINUX，往下找教程)",[262,119613,119615],{"id":119614},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24524,119617,119619],{"id":119618},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119621,119622],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119624,119625],{},[401,119626],{"alt":275,"src":119627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119629,119630],{},[401,119631],{"alt":275,"src":119632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24524,119634,119636],{"id":119635},"_23322-cuda","2.3.3.2.2 CUDA",[19,119638,119639,119640],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[69,119641,119642],{"href":119642,"rel":119643},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[245],[19,119645,119646,119649],{},[401,119647],{"alt":275,"src":119648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[401,119650],{"alt":275,"src":119651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119653,119654],{},"在下方的网站，选择合适的版本。",[19,119656,119657,119658],{},"WSL2 专属 CUDA 指南：",[69,119659,119660],{"href":119660,"rel":119661},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[245],[19,119663,119664],{},[694,119665,119666],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119668,119669],{},[401,119670],{"alt":275,"src":119671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119673,119674],{},"挨行敲一遍",[19,119676,119677],{},[401,119678],{"alt":275,"src":119679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119681,119682,119683,119686],{},"敲完后，输入",[277,119684,119685],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119688,119689],{},[401,119690],{"alt":275,"src":119691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119693,119694,119695,119698],{},"（请详看下方教程的",[694,119696,119697],{},"安装CUDA的配置环境来看","如何配置环境）",[24524,119700,119702],{"id":119701},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119704,119611],{},[19,119706,119707],{},[401,119708],{"alt":275,"src":119709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[262,119711,119713],{"id":119712},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119715,119716],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119718,119719],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119721,119722],{},[401,119723],{"alt":275,"src":119724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119726,119727],{},"连接WSL2",[19,119729,119730],{},[401,119731],{"alt":275,"src":119732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119734,119735],{},"远程开发成功。",[19,119737,119738],{},[401,119739],{"alt":275,"src":119740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119742,119743],{},[401,119744],{"alt":275,"src":119745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,119747,119748],{},[401,119749],{"alt":275,"src":119750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[262,119752,119754],{"id":119753},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,119756,119757],{},[401,119758],{"alt":275,"src":119759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[262,119761,119763],{"id":119762},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[270,119765,119767],{"className":118633,"code":119766,"language":118635,"meta":275,"style":275},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[277,119768,119769,119777,119785,119796,119800],{"__ignoreMap":275},[152,119770,119771,119773,119775],{"class":281,"line":282},[152,119772,26188],{"class":285},[152,119774,118654],{"class":289},[152,119776,27848],{"class":289},[152,119778,119779,119781,119783],{"class":281,"line":303},[152,119780,26188],{"class":285},[152,119782,118654],{"class":289},[152,119784,118670],{"class":289},[152,119786,119787,119789,119791,119793],{"class":281,"line":310},[152,119788,26188],{"class":285},[152,119790,118654],{"class":289},[152,119792,25446],{"class":289},[152,119794,119795],{"class":289}," mesa-utils\n",[152,119797,119798],{"class":281,"line":324},[152,119799,307],{"emptyLinePlaceholder":306},[152,119801,119802],{"class":281,"line":329},[152,119803,119804],{"class":866},"#然后重启wsl2即可\n",[1736,119806,119807],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":275,"searchDepth":303,"depth":303,"links":119809},[119810,119811,119816],{"id":119087,"depth":303,"text":119088},{"id":119100,"depth":303,"text":119101,"children":119812},[119813,119814,119815],{"id":119104,"depth":310,"text":119105},{"id":119151,"depth":310,"text":119152},{"id":119212,"depth":310,"text":119213},{"id":119248,"depth":303,"text":119249,"children":119817},[119818,119819,119820],{"id":119252,"depth":310,"text":119253},{"id":119314,"depth":310,"text":119315},{"id":119603,"depth":310,"text":119604},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119079,"description":24991},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119827,"title":119828,"body":119829,"description":24991,"extension":1744,"meta":122765,"navigation":306,"path":122766,"seo":122767,"stem":122768,"__hash__":122769},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119830,"toc":122737},[119831,119834,119838,119844,119848,119854,119858,120046,120049,120054,120058,120062,120065,120068,120074,120079,120082,120085,120090,120123,120128,120132,120209,120212,120217,120221,120224,120263,120266,120275,120293,120298,120305,120422,120427,120430,120457,120462,120466,120475,120525,120532,120536,120539,120553,120560,120594,120599,120603,120626,120629,120634,120638,120641,120644,120647,120689,120693,120696,120699,120740,120744,120748,120751,120756,120761,120764,120787,120790,120798,120803,120806,120811,120816,120819,120824,120828,120833,120856,120861,120923,120931,120936,120941,120944,120949,120952,120957,120962,120980,120985,120991,120996,121010,121014,121017,121020,121023,121066,121069,121074,121175,121178,121183,121187,121191,121228,121232,121236,121240,121286,121290,121335,121339,121346,121354,121409,121412,121489,121492,121515,121519,121522,121527,121532,121540,121543,121548,121553,121558,121561,121566,121575,121578,121583,121586,121657,121662,121665,121670,121673,121678,121681,121686,121689,121694,121699,121702,121777,121780,121793,121798,121801,121815,121818,121847,121852,121881,121884,121889,121893,121898,121907,121910,121915,121918,121923,121926,121929,121934,121937,121942,121947,121950,121955,121958,122083,122088,122118,122121,122126,122131,122148,122151,122194,122197,122224,122229,122242,122385,122389,122394,122408,122411,122462,122465,122495,122498,122514,122519,122533,122536,122603,122608,122617,122622,122625,122637,122642,122649,122673,122676,122681,122684,122703,122708,122715,122727,122734],[10,119832,119828],{"id":119833},"_3-安装必备配置",[1760,119835,119837],{"id":119836},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[270,119839,119842],{"className":119840,"code":119841,"language":6829},[6827],"  打开下方网站（注意，该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",[277,119843,119841],{"__ignoreMap":275},[14,119845,119847],{"id":119846},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[270,119849,119852],{"className":119850,"code":119851,"language":6829},[6827],"  输入以下命令\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",[277,119853,119851],{"__ignoreMap":275},[14,119855,119857],{"id":119856},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[270,119859,119863],{"className":119860,"code":119861,"language":119862,"meta":275,"style":275},"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",[277,119864,119865,119873,119884,119896,119910,119914,119924,119929,119933,119937,119942,119946,119958,119962,119967,119971,119982,119986,120002,120006,120017,120021,120026,120030,120038],{"__ignoreMap":275},[152,119866,119867,119869,119871],{"class":281,"line":282},[152,119868,26188],{"class":285},[152,119870,118654],{"class":289},[152,119872,27848],{"class":289},[152,119874,119875,119877,119879,119881],{"class":281,"line":303},[152,119876,26188],{"class":285},[152,119878,118654],{"class":289},[152,119880,25446],{"class":289},[152,119882,119883],{"class":289}," vim\n",[152,119885,119886,119888,119891,119893],{"class":281,"line":310},[152,119887,26188],{"class":285},[152,119889,119890],{"class":289}," rm",[152,119892,26936],{"class":293},[152,119894,119895],{"class":289}," \u002Fetc\u002Fapt\u002Fsources.list\n",[152,119897,119898,119900,119902,119904,119907],{"class":281,"line":324},[152,119899,26188],{"class":285},[152,119901,119890],{"class":289},[152,119903,26936],{"class":293},[152,119905,119906],{"class":289}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[152,119908,119909],{"class":293},"**\n",[152,119911,119912],{"class":281,"line":329},[152,119913,307],{"emptyLinePlaceholder":306},[152,119915,119916,119918,119921],{"class":281,"line":343},[152,119917,26188],{"class":285},[152,119919,119920],{"class":289}," vim",[152,119922,119923],{"class":289}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[152,119925,119926],{"class":281,"line":348},[152,119927,119928],{"class":289},"```\n",[152,119930,119931],{"class":281,"line":362},[152,119932,307],{"emptyLinePlaceholder":306},[152,119934,119935],{"class":281,"line":367},[152,119936,307],{"emptyLinePlaceholder":306},[152,119938,119939],{"class":281,"line":381},[152,119940,119941],{"class":285},"选择好Ubuntu版本后，复制下方的内容。\n",[152,119943,119944],{"class":281,"line":386},[152,119945,307],{"emptyLinePlaceholder":306},[152,119947,119948,119950,119953,119956],{"class":281,"line":932},[152,119949,2035],{"class":476},[152,119951,119952],{"class":289},"[](",[152,119954,119955],{"class":285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[152,119957,1825],{"class":289},[152,119959,119960],{"class":281,"line":942},[152,119961,307],{"emptyLinePlaceholder":306},[152,119963,119964],{"class":281,"line":949},[152,119965,119966],{"class":285},"粘贴进去\n",[152,119968,119969],{"class":281,"line":954},[152,119970,307],{"emptyLinePlaceholder":306},[152,119972,119973,119975,119977,119980],{"class":281,"line":959},[152,119974,2035],{"class":476},[152,119976,119952],{"class":289},[152,119978,119979],{"class":285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[152,119981,1825],{"class":289},[152,119983,119984],{"class":281,"line":970},[152,119985,307],{"emptyLinePlaceholder":306},[152,119987,119988,119991,119994,119997,119999],{"class":281,"line":979},[152,119989,119990],{"class":285},"按一下ESC，然后英文冒号，输入",[152,119992,119993],{"class":289}," `",[152,119995,119996],{"class":285},":wq!",[152,119998,2777],{"class":289},[152,120000,120001],{"class":285},"然后回车\n",[152,120003,120004],{"class":281,"line":989},[152,120005,307],{"emptyLinePlaceholder":306},[152,120007,120008,120010,120012,120015],{"class":281,"line":996},[152,120009,2035],{"class":476},[152,120011,119952],{"class":289},[152,120013,120014],{"class":285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[152,120016,1825],{"class":289},[152,120018,120019],{"class":281,"line":1001},[152,120020,307],{"emptyLinePlaceholder":306},[152,120022,120023],{"class":281,"line":1006},[152,120024,120025],{"class":285},"输入以下命令\n",[152,120027,120028],{"class":281,"line":1018},[152,120029,307],{"emptyLinePlaceholder":306},[152,120031,120032,120035],{"class":281,"line":1027},[152,120033,120034],{"class":289},"```",[152,120036,120037],{"class":285},"Bash\n",[152,120039,120040,120042,120044],{"class":281,"line":1037},[152,120041,26188],{"class":285},[152,120043,118654],{"class":289},[152,120045,27848],{"class":289},[19,120047,120048],{},"这里被替换成对应学校则成功",[19,120050,120051],{},[401,120052],{"alt":275,"src":120053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[1760,120055,120057],{"id":120056},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[14,120059,120061],{"id":120060},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120063,120064],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120066,120067],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120069,120070],{},[69,120071,120072],{"href":120072,"rel":120073},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[245],[19,120075,120076],{},[401,120077],{"alt":275,"src":120078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120080,120081],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120083,120084],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120086,120087],{},[401,120088],{"alt":275,"src":120089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[270,120091,120093],{"className":118633,"code":120092,"language":118635,"meta":275,"style":275},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[277,120094,120095,120100,120107,120112],{"__ignoreMap":275},[152,120096,120097],{"class":281,"line":282},[152,120098,120099],{"class":866},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[152,120101,120102,120104],{"class":281,"line":303},[152,120103,102613],{"class":293},[152,120105,120106],{"class":289}," ~\u002FDownloads\n",[152,120108,120109],{"class":281,"line":310},[152,120110,120111],{"class":866},"#下方chrome安装包名不一定是这个，根据名字来看\n",[152,120113,120114,120116,120118,120120],{"class":281,"line":324},[152,120115,26188],{"class":285},[152,120117,118654],{"class":289},[152,120119,25446],{"class":289},[152,120121,120122],{"class":289}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120124,120125],{},[401,120126],{"alt":275,"src":120127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[14,120129,120131],{"id":120130},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[270,120133,120135],{"className":118633,"code":120134,"language":118635,"meta":275,"style":275},"# 老版\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",[277,120136,120137,120142,120150,120161,120166,120170,120175,120185,120193,120204],{"__ignoreMap":275},[152,120138,120139],{"class":281,"line":282},[152,120140,120141],{"class":866},"# 老版\n",[152,120143,120144,120146,120148],{"class":281,"line":303},[152,120145,26188],{"class":285},[152,120147,118654],{"class":289},[152,120149,27848],{"class":289},[152,120151,120152,120154,120156,120158],{"class":281,"line":310},[152,120153,26188],{"class":285},[152,120155,118654],{"class":289},[152,120157,25446],{"class":289},[152,120159,120160],{"class":289}," neofetch\n",[152,120162,120163],{"class":281,"line":324},[152,120164,120165],{"class":285},"neofetch\n",[152,120167,120168],{"class":281,"line":329},[152,120169,307],{"emptyLinePlaceholder":306},[152,120171,120172],{"class":281,"line":343},[152,120173,120174],{"class":866},"# 新版\n",[152,120176,120177,120179,120182],{"class":281,"line":348},[152,120178,26188],{"class":285},[152,120180,120181],{"class":289}," add-apt-repository",[152,120183,120184],{"class":289}," ppa:zhangsongcui3371\u002Ffastfetch\n",[152,120186,120187,120189,120191],{"class":281,"line":362},[152,120188,26188],{"class":285},[152,120190,118654],{"class":289},[152,120192,27848],{"class":289},[152,120194,120195,120197,120199,120201],{"class":281,"line":367},[152,120196,26188],{"class":285},[152,120198,118654],{"class":289},[152,120200,25446],{"class":289},[152,120202,120203],{"class":289}," fastfetch\n",[152,120205,120206],{"class":281,"line":381},[152,120207,120208],{"class":285},"fastfetch\n",[19,120210,120211],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120213,120214],{},[401,120215],{"alt":275,"src":120216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[14,120218,120220],{"id":120219},"_323-移除snap应用","3.2.3 移除snap应用",[19,120222,120223],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[270,120225,120227],{"className":118633,"code":120226,"language":118635,"meta":275,"style":275},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[277,120228,120229,120241,120252],{"__ignoreMap":275},[152,120230,120231,120233,120235,120238],{"class":281,"line":282},[152,120232,26188],{"class":285},[152,120234,28118],{"class":289},[152,120236,120237],{"class":289}," disable",[152,120239,120240],{"class":289}," snapd.service\n",[152,120242,120243,120245,120247,120249],{"class":281,"line":303},[152,120244,26188],{"class":285},[152,120246,28118],{"class":289},[152,120248,120237],{"class":289},[152,120250,120251],{"class":289}," snapd.socket\n",[152,120253,120254,120256,120258,120260],{"class":281,"line":310},[152,120255,26188],{"class":285},[152,120257,28118],{"class":289},[152,120259,120237],{"class":289},[152,120261,120262],{"class":289}," snapd.seeded.service\n",[19,120264,120265],{},"然后查看snap应用列表",[19,120267,120268,120269,120274],{},"根据你安装的选择不同（最小安装或普通安装），有",[69,120270,120273],{"href":120271,"rel":120272},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[245],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[270,120276,120278],{"className":118633,"code":120277,"language":118635,"meta":275,"style":275},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[277,120279,120280,120285],{"__ignoreMap":275},[152,120281,120282],{"class":281,"line":282},[152,120283,120284],{"class":866},"# 查询当前系统上snap安装了哪些app\n",[152,120286,120287,120290],{"class":281,"line":303},[152,120288,120289],{"class":285},"snap",[152,120291,120292],{"class":289}," list\n",[19,120294,120295],{},[401,120296],{"alt":275,"src":120297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120299,120300,120301,120304],{},"卸载掉图中所有应用，按照 ",[694,120302,120303],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[270,120306,120308],{"className":118633,"code":120307,"language":118635,"meta":275,"style":275},"#移除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",[277,120309,120310,120315,120327,120332,120343,120348,120359,120364,120375,120380,120384,120389,120400,120411],{"__ignoreMap":275},[152,120311,120312],{"class":281,"line":282},[152,120313,120314],{"class":866},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[152,120316,120317,120319,120322,120324],{"class":281,"line":303},[152,120318,26188],{"class":285},[152,120320,120321],{"class":289}," snap",[152,120323,27689],{"class":289},[152,120325,120326],{"class":289}," snap-store\n",[152,120328,120329],{"class":281,"line":310},[152,120330,120331],{"class":866},"#移除firefox浏览器\n",[152,120333,120334,120336,120338,120340],{"class":281,"line":324},[152,120335,26188],{"class":285},[152,120337,120321],{"class":289},[152,120339,27689],{"class":289},[152,120341,120342],{"class":289}," firefox\n",[152,120344,120345],{"class":281,"line":329},[152,120346,120347],{"class":866},"#移除gnome-42-2204\n",[152,120349,120350,120352,120354,120356],{"class":281,"line":343},[152,120351,26188],{"class":285},[152,120353,120321],{"class":289},[152,120355,27689],{"class":289},[152,120357,120358],{"class":289}," gnome-42-2204\n",[152,120360,120361],{"class":281,"line":348},[152,120362,120363],{"class":866},"#移除gtk-common-themes\n",[152,120365,120366,120368,120370,120372],{"class":281,"line":362},[152,120367,26188],{"class":285},[152,120369,120321],{"class":289},[152,120371,27689],{"class":289},[152,120373,120374],{"class":289}," gtk-common-themes\n",[152,120376,120377],{"class":281,"line":367},[152,120378,120379],{"class":866},"#移除其它...\n",[152,120381,120382],{"class":281,"line":381},[152,120383,4317],{"class":483},[152,120385,120386],{"class":281,"line":386},[152,120387,120388],{"class":866},"#移除core22,bare以及snapd\n",[152,120390,120391,120393,120395,120397],{"class":281,"line":932},[152,120392,26188],{"class":285},[152,120394,120321],{"class":289},[152,120396,27689],{"class":289},[152,120398,120399],{"class":289}," core22\n",[152,120401,120402,120404,120406,120408],{"class":281,"line":942},[152,120403,26188],{"class":285},[152,120405,120321],{"class":289},[152,120407,27689],{"class":289},[152,120409,120410],{"class":289}," bare\n",[152,120412,120413,120415,120417,120419],{"class":281,"line":949},[152,120414,26188],{"class":285},[152,120416,120321],{"class":289},[152,120418,27689],{"class":289},[152,120420,120421],{"class":289}," snapd\n",[19,120423,120424],{},[401,120425],{"alt":275,"src":120426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120428,120429],{},"输入以下命令查看是否还有snap包",[270,120431,120433],{"className":118633,"code":120432,"language":118635,"meta":275,"style":275},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[277,120434,120435,120441,120445,120449,120453],{"__ignoreMap":275},[152,120436,120437,120439],{"class":281,"line":282},[152,120438,120289],{"class":285},[152,120440,120292],{"class":289},[152,120442,120443],{"class":281,"line":303},[152,120444,120141],{"class":866},[152,120446,120447],{"class":281,"line":310},[152,120448,120165],{"class":285},[152,120450,120451],{"class":281,"line":324},[152,120452,120174],{"class":866},[152,120454,120455],{"class":281,"line":329},[152,120456,120208],{"class":285},[19,120458,120459],{},[401,120460],{"alt":275,"src":120461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[14,120463,120465],{"id":120464},"_324-移除snap","3.2.4 移除snap",[19,120467,120468,120469,120474],{},"在删除掉",[69,120470,120473],{"href":120471,"rel":120472},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[245],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[270,120476,120478],{"className":118633,"code":120477,"language":118635,"meta":275,"style":275}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[277,120479,120480,120485,120498,120503,120514],{"__ignoreMap":275},[152,120481,120482],{"class":281,"line":282},[152,120483,120484],{"class":866}," #使用apt移除掉snap\n",[152,120486,120487,120489,120491,120493,120496],{"class":281,"line":303},[152,120488,26188],{"class":285},[152,120490,118654],{"class":289},[152,120492,118962],{"class":289},[152,120494,120495],{"class":293}," --purge",[152,120497,120421],{"class":289},[152,120499,120500],{"class":281,"line":310},[152,120501,120502],{"class":866},"#移除snapd的一些目录\n",[152,120504,120505,120507,120509,120511],{"class":281,"line":324},[152,120506,26188],{"class":285},[152,120508,119890],{"class":289},[152,120510,26936],{"class":293},[152,120512,120513],{"class":289}," \u002Fvar\u002Fcache\u002Fsnapd\n",[152,120515,120516,120518,120520,120522],{"class":281,"line":329},[152,120517,26188],{"class":285},[152,120519,119890],{"class":289},[152,120521,26936],{"class":293},[152,120523,120524],{"class":289}," ~\u002Fsnap\n",[19,120526,120527,120528,120531],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[277,120529,120530],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[14,120533,120535],{"id":120534},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120537,120538],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[270,120540,120542],{"className":118633,"code":120541,"language":118635,"meta":275,"style":275},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[277,120543,120544],{"__ignoreMap":275},[152,120545,120546,120548,120550],{"class":281,"line":282},[152,120547,26188],{"class":285},[152,120549,119920],{"class":289},[152,120551,120552],{"class":289}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120554,120555,120556,120559],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[277,120557,120558],{},":wq"," 回车",[270,120561,120563],{"className":118633,"code":120562,"language":118635,"meta":275,"style":275},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[277,120564,120565,120572,120586],{"__ignoreMap":275},[152,120566,120567,120570],{"class":281,"line":282},[152,120568,120569],{"class":285},"Package:",[152,120571,120421],{"class":289},[152,120573,120574,120577,120580,120583],{"class":281,"line":303},[152,120575,120576],{"class":285},"Pin:",[152,120578,120579],{"class":289}," release",[152,120581,120582],{"class":289}," a=",[152,120584,120585],{"class":293},"*\n",[152,120587,120588,120591],{"class":281,"line":310},[152,120589,120590],{"class":285},"Pin-Priority:",[152,120592,120593],{"class":293}," -10\n",[19,120595,120596],{},[401,120597],{"alt":275,"src":120598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[14,120600,120602],{"id":120601},"_326-测试是否成功","3.2.6 测试是否成功",[270,120604,120606],{"className":118633,"code":120605,"language":118635,"meta":275,"style":275},"sudo apt update\nsudo apt install firefox\n",[277,120607,120608,120616],{"__ignoreMap":275},[152,120609,120610,120612,120614],{"class":281,"line":282},[152,120611,26188],{"class":285},[152,120613,118654],{"class":289},[152,120615,27848],{"class":289},[152,120617,120618,120620,120622,120624],{"class":281,"line":303},[152,120619,26188],{"class":285},[152,120621,118654],{"class":289},[152,120623,25446],{"class":289},[152,120625,120342],{"class":289},[19,120627,120628],{},"这里提示snapd无法被安装，就证明成功了",[19,120630,120631],{},[401,120632],{"alt":275,"src":120633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[14,120635,120637],{"id":120636},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120639,120640],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120642,120643],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120645,120646],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[270,120648,120650],{"className":118633,"code":120649,"language":118635,"meta":275,"style":275},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[277,120651,120652,120657,120666,120671,120679],{"__ignoreMap":275},[152,120653,120654],{"class":281,"line":282},[152,120655,120656],{"class":866},"# 添加Mozilla提供的源\n",[152,120658,120659,120661,120663],{"class":281,"line":303},[152,120660,26188],{"class":285},[152,120662,120181],{"class":289},[152,120664,120665],{"class":289}," ppa:mozillateam\u002Fppa\n",[152,120667,120668],{"class":281,"line":310},[152,120669,120670],{"class":866},"# 安装Firefox\n",[152,120672,120673,120675,120677],{"class":281,"line":324},[152,120674,26188],{"class":285},[152,120676,118654],{"class":289},[152,120678,27848],{"class":289},[152,120680,120681,120683,120685,120687],{"class":281,"line":329},[152,120682,26188],{"class":285},[152,120684,118654],{"class":289},[152,120686,25446],{"class":289},[152,120688,120342],{"class":289},[14,120690,120692],{"id":120691},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120694,120695],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120697,120698],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[270,120700,120702],{"className":118633,"code":120701,"language":118635,"meta":275,"style":275},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[277,120703,120704,120709,120719,120727,120731],{"__ignoreMap":275},[152,120705,120706],{"class":281,"line":282},[152,120707,120708],{"class":866},"#删掉禁止安装snap的配置文件\n",[152,120710,120711,120713,120715,120717],{"class":281,"line":303},[152,120712,26188],{"class":285},[152,120714,119890],{"class":289},[152,120716,26936],{"class":293},[152,120718,120552],{"class":289},[152,120720,120721,120723,120725],{"class":281,"line":310},[152,120722,26188],{"class":285},[152,120724,118654],{"class":289},[152,120726,27848],{"class":289},[152,120728,120729],{"class":281,"line":324},[152,120730,307],{"emptyLinePlaceholder":306},[152,120732,120733,120735,120737],{"class":281,"line":329},[152,120734,26188],{"class":285},[152,120736,118654],{"class":289},[152,120738,120739],{"class":289}," dist-update\n",[1760,120741,120743],{"id":120742},"_33-中文输入法","3.3 中文输入法",[14,120745,120747],{"id":120746},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,120749,120750],{},"官网下载搜狗输入法",[19,120752,120753],{},[401,120754],{"alt":275,"src":120755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,120757,120758],{},[401,120759],{"alt":275,"src":120760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,120762,120763],{},"打开终端输入如下",[270,120765,120767],{"className":118633,"code":120766,"language":118635,"meta":275,"style":275},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[277,120768,120769,120776],{"__ignoreMap":275},[152,120770,120771,120773],{"class":281,"line":282},[152,120772,102613],{"class":293},[152,120774,120775],{"class":289}," ~\u002FDownloads\u002F\n",[152,120777,120778,120780,120782,120784],{"class":281,"line":303},[152,120779,26188],{"class":285},[152,120781,118654],{"class":289},[152,120783,25446],{"class":289},[152,120785,120786],{"class":289}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,120788,120789],{},"打开Fcitx",[19,120791,120792,120795],{},[401,120793],{"alt":275,"src":120794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[401,120796],{"alt":275,"src":120797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,120799,120800],{},[401,120801],{"alt":275,"src":120802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120804,120805],{},"添加搜狗输入法",[19,120807,120808],{},[401,120809],{"alt":275,"src":120810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120812,120813],{},[401,120814],{"alt":275,"src":120815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120817,120818],{},"将搜狗输入法设置为唯一输入法",[19,120820,120821],{},[401,120822],{"alt":275,"src":120823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[14,120825,120827],{"id":120826},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[416,120829,120830],{},[419,120831,120832],{},"卸载旧输入法",[270,120834,120836],{"className":119860,"code":120835,"language":119862,"meta":275,"style":275},"sudo apt purge fcitx* ibus*\n",[277,120837,120838],{"__ignoreMap":275},[152,120839,120840,120842,120844,120846,120849,120851,120854],{"class":281,"line":282},[152,120841,26188],{"class":285},[152,120843,118654],{"class":289},[152,120845,118995],{"class":289},[152,120847,120848],{"class":289}," fcitx",[152,120850,2263],{"class":293},[152,120852,120853],{"class":289}," ibus",[152,120855,120585],{"class":293},[416,120857,120858],{"start":303},[419,120859,120860],{},"安装Fcitx5",[270,120862,120864],{"className":118633,"code":120863,"language":118635,"meta":275,"style":275},"# 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",[277,120865,120866,120871,120885,120889,120894,120903,120911],{"__ignoreMap":275},[152,120867,120868],{"class":281,"line":282},[152,120869,120870],{"class":866},"# Ubuntu22.04及以上、Debian12及以上\n",[152,120872,120873,120875,120877,120879,120882],{"class":281,"line":303},[152,120874,26188],{"class":285},[152,120876,118654],{"class":289},[152,120878,25446],{"class":289},[152,120880,120881],{"class":289}," fcitx5",[152,120883,120884],{"class":289}," fcitx5-chinese-addons\n",[152,120886,120887],{"class":281,"line":310},[152,120888,307],{"emptyLinePlaceholder":306},[152,120890,120891],{"class":281,"line":324},[152,120892,120893],{"class":866},"# Ubuntu20.04\n",[152,120895,120896,120898,120900],{"class":281,"line":329},[152,120897,26188],{"class":285},[152,120899,120181],{"class":289},[152,120901,120902],{"class":289}," ppa:zhsj\u002Ffcitx5\n",[152,120904,120905,120907,120909],{"class":281,"line":343},[152,120906,26188],{"class":285},[152,120908,118654],{"class":289},[152,120910,27848],{"class":289},[152,120912,120913,120915,120917,120919,120921],{"class":281,"line":348},[152,120914,26188],{"class":285},[152,120916,118654],{"class":289},[152,120918,25446],{"class":289},[152,120920,120881],{"class":289},[152,120922,120884],{"class":289},[416,120924,120925,120928],{"start":310},[419,120926,120927],{},"Reboot System",[419,120929,120930],{},"启动Fcitx5",[19,120932,120933],{},[401,120934],{"alt":275,"src":120935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[416,120937,120938],{"start":329},[419,120939,120940],{},"修改一些设置",[19,120942,120943],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120945,120946],{},[401,120947],{"alt":275,"src":120948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120950,120951],{},"添加快捷键以便于更好切换中英文",[19,120953,120954],{},[401,120955],{"alt":275,"src":120956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[416,120958,120959],{"start":343},[419,120960,120961],{},"重启",[270,120963,120965],{"className":119860,"code":120964,"language":119862,"meta":275,"style":275},"sudo shutdown -r now\n",[277,120966,120967],{"__ignoreMap":275},[152,120968,120969,120971,120974,120977],{"class":281,"line":282},[152,120970,26188],{"class":285},[152,120972,120973],{"class":289}," shutdown",[152,120975,120976],{"class":293}," -r",[152,120978,120979],{"class":289}," now\n",[416,120981,120982],{"start":348},[419,120983,120984],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120986,120987],{},[69,120988,120989],{"href":120989,"rel":120990},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[245],[416,120992,120993],{"start":362},[419,120994,120995],{},"再重启",[270,120997,120998],{"className":119860,"code":120964,"language":119862,"meta":275,"style":275},[277,120999,121000],{"__ignoreMap":275},[152,121001,121002,121004,121006,121008],{"class":281,"line":282},[152,121003,26188],{"class":285},[152,121005,120973],{"class":289},[152,121007,120976],{"class":293},[152,121009,120979],{"class":289},[1760,121011,121013],{"id":121012},"_34-pip3源替换","3.4 pip3源替换",[19,121015,121016],{},"非Debian系发行版需要做。",[19,121018,121019],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121021,121022],{},"使用dnf的系统也可能不用做。",[270,121024,121026],{"className":118633,"code":121025,"language":118635,"meta":275,"style":275},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[277,121027,121028,121033,121040,121045,121050],{"__ignoreMap":275},[152,121029,121030],{"class":281,"line":282},[152,121031,121032],{"class":866},"# 检查是否已安装 pip\n",[152,121034,121035,121038],{"class":281,"line":303},[152,121036,121037],{"class":285},"pip3",[152,121039,27899],{"class":293},[152,121041,121042],{"class":281,"line":310},[152,121043,121044],{"class":866},"# 如果未安装，先安装 pip3（见下方）\n",[152,121046,121047],{"class":281,"line":324},[152,121048,121049],{"class":866},"# 配置 pip 使用清华源\n",[152,121051,121052,121054,121057,121060,121063],{"class":281,"line":329},[152,121053,121037],{"class":285},[152,121055,121056],{"class":289}," config",[152,121058,121059],{"class":289}," set",[152,121061,121062],{"class":289}," global.index-url",[152,121064,121065],{"class":289}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121067,121068],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121070,121071],{},[401,121072],{"alt":275,"src":121073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[270,121075,121077],{"className":118633,"code":121076,"language":118635,"meta":275,"style":275},"#安装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",[277,121078,121079,121084,121092,121103,121107,121112,121131,121135,121140,121152,121156,121161],{"__ignoreMap":275},[152,121080,121081],{"class":281,"line":282},[152,121082,121083],{"class":866},"#安装pip3\n",[152,121085,121086,121088,121090],{"class":281,"line":303},[152,121087,26188],{"class":285},[152,121089,118654],{"class":289},[152,121091,27848],{"class":289},[152,121093,121094,121096,121098,121100],{"class":281,"line":310},[152,121095,26188],{"class":285},[152,121097,27686],{"class":289},[152,121099,25446],{"class":289},[152,121101,121102],{"class":289}," python3-pip\n",[152,121104,121105],{"class":281,"line":324},[152,121106,307],{"emptyLinePlaceholder":306},[152,121108,121109],{"class":281,"line":329},[152,121110,121111],{"class":866},"#更新pip3\n",[152,121113,121114,121116,121118,121120,121122,121124,121127,121129],{"class":281,"line":343},[152,121115,102216],{"class":285},[152,121117,102219],{"class":293},[152,121119,102242],{"class":289},[152,121121,25446],{"class":289},[152,121123,28035],{"class":293},[152,121125,121126],{"class":289}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[152,121128,102247],{"class":293},[152,121130,102250],{"class":289},[152,121132,121133],{"class":281,"line":348},[152,121134,307],{"emptyLinePlaceholder":306},[152,121136,121137],{"class":281,"line":362},[152,121138,121139],{"class":866},"#设置pip源为清华源\n",[152,121141,121142,121144,121146,121148,121150],{"class":281,"line":367},[152,121143,121037],{"class":285},[152,121145,121056],{"class":289},[152,121147,121059],{"class":289},[152,121149,121062],{"class":289},[152,121151,121065],{"class":289},[152,121153,121154],{"class":281,"line":381},[152,121155,307],{"emptyLinePlaceholder":306},[152,121157,121158],{"class":281,"line":386},[152,121159,121160],{"class":866},"#测试\n",[152,121162,121163,121165,121167,121169,121171,121173],{"class":281,"line":932},[152,121164,102216],{"class":285},[152,121166,102219],{"class":293},[152,121168,102242],{"class":289},[152,121170,25446],{"class":289},[152,121172,102247],{"class":293},[152,121174,102250],{"class":289},[19,121176,121177],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121179,121180],{},[401,121181],{"alt":275,"src":121182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[1760,121184,121186],{"id":121185},"_35-显卡驱动安装","3.5 显卡驱动安装",[14,121188,121190],{"id":121189},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[270,121192,121194],{"className":119860,"code":121193,"language":119862,"meta":275,"style":275},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[277,121195,121196,121201,121216,121221],{"__ignoreMap":275},[152,121197,121198],{"class":281,"line":282},[152,121199,121200],{"class":866},"# 如果是使用apt安装的驱动\n",[152,121202,121203,121205,121207,121209,121211,121214],{"class":281,"line":303},[152,121204,26188],{"class":285},[152,121206,27686],{"class":289},[152,121208,27689],{"class":289},[152,121210,120495],{"class":293},[152,121212,121213],{"class":289}," nvidia",[152,121215,120585],{"class":293},[152,121217,121218],{"class":281,"line":310},[152,121219,121220],{"class":866},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[152,121222,121223,121225],{"class":281,"line":324},[152,121224,26188],{"class":285},[152,121226,121227],{"class":289}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[14,121229,121231],{"id":121230},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[262,121233,121235],{"id":121234},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24524,121237,121239],{"id":121238},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[270,121241,121243],{"className":119860,"code":121242,"language":119862,"meta":275,"style":275},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[277,121244,121245,121250,121261,121266,121276,121281],{"__ignoreMap":275},[152,121246,121247],{"class":281,"line":282},[152,121248,121249],{"class":866},"# 安装英伟达驱动\n",[152,121251,121252,121254,121256,121258],{"class":281,"line":303},[152,121253,26188],{"class":285},[152,121255,118654],{"class":289},[152,121257,25446],{"class":289},[152,121259,121260],{"class":289}," nvidia-driver-版本号\n",[152,121262,121263],{"class":281,"line":310},[152,121264,121265],{"class":866},"# 重启 \n",[152,121267,121268,121270,121272,121274],{"class":281,"line":324},[152,121269,26188],{"class":285},[152,121271,120973],{"class":289},[152,121273,120976],{"class":293},[152,121275,120979],{"class":289},[152,121277,121278],{"class":281,"line":329},[152,121279,121280],{"class":866},"# 检查驱动是否安装成功\n",[152,121282,121283],{"class":281,"line":343},[152,121284,121285],{"class":285},"nvidia-smi\n",[24524,121287,121289],{"id":121288},"_35212-debian","3.5.2.1.2 Debian",[270,121291,121293],{"className":119860,"code":121292,"language":119862,"meta":275,"style":275},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[277,121294,121295,121299,121313,121317,121327,121331],{"__ignoreMap":275},[152,121296,121297],{"class":281,"line":282},[152,121298,121249],{"class":866},[152,121300,121301,121303,121305,121307,121310],{"class":281,"line":303},[152,121302,26188],{"class":285},[152,121304,118654],{"class":289},[152,121306,25446],{"class":289},[152,121308,121309],{"class":289}," nvidia-driver",[152,121311,121312],{"class":289}," nvidia-settings\n",[152,121314,121315],{"class":281,"line":310},[152,121316,121265],{"class":866},[152,121318,121319,121321,121323,121325],{"class":281,"line":324},[152,121320,26188],{"class":285},[152,121322,120973],{"class":289},[152,121324,120976],{"class":293},[152,121326,120979],{"class":289},[152,121328,121329],{"class":281,"line":329},[152,121330,121280],{"class":866},[152,121332,121333],{"class":281,"line":343},[152,121334,121285],{"class":285},[262,121336,121338],{"id":121337},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121340,121341,121342,121345],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[694,121343,121344],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121347,121348,121349],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25168,121350,121351],{},[694,121352,121353],{},"（也可以不禁用桌面环境，直接进行下一步。）",[270,121355,121357],{"className":119860,"code":121356,"language":119862,"meta":275,"style":275},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[277,121358,121359,121364,121374,121379,121392,121397],{"__ignoreMap":275},[152,121360,121361],{"class":281,"line":282},[152,121362,121363],{"class":866},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[152,121365,121366,121368,121371],{"class":281,"line":303},[152,121367,26188],{"class":285},[152,121369,121370],{"class":289}," telinit",[152,121372,121373],{"class":293}," 3\n",[152,121375,121376],{"class":281,"line":310},[152,121377,121378],{"class":866},"# ubuntu 使用下方命令\n",[152,121380,121381,121383,121386,121389],{"class":281,"line":324},[152,121382,26188],{"class":285},[152,121384,121385],{"class":289}," service",[152,121387,121388],{"class":289}," lightdm",[152,121390,121391],{"class":289}," stop\n",[152,121393,121394],{"class":281,"line":329},[152,121395,121396],{"class":866},"# Fedora 使用下方命令\n",[152,121398,121399,121401,121403,121406],{"class":281,"line":343},[152,121400,26188],{"class":285},[152,121402,28118],{"class":289},[152,121404,121405],{"class":289}," isolate",[152,121407,121408],{"class":289}," multi-user.target\n",[19,121410,121411],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[270,121413,121415],{"className":119860,"code":121414,"language":119862,"meta":275,"style":275},"# 编译环境+准备工作\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",[277,121416,121417,121422,121433,121438,121445,121450,121462,121467,121474,121479],{"__ignoreMap":275},[152,121418,121419],{"class":281,"line":282},[152,121420,121421],{"class":866},"# 编译环境+准备工作\n",[152,121423,121424,121426,121428,121430],{"class":281,"line":303},[152,121425,26188],{"class":285},[152,121427,118654],{"class":289},[152,121429,25446],{"class":289},[152,121431,121432],{"class":289}," build-essential\n",[152,121434,121435],{"class":281,"line":310},[152,121436,121437],{"class":866},"# 进入到.run目录中\n",[152,121439,121440,121442],{"class":281,"line":324},[152,121441,102613],{"class":293},[152,121443,121444],{"class":289}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[152,121446,121447],{"class":281,"line":329},[152,121448,121449],{"class":866},"# 给驱动文件增加可执行权限：\n",[152,121451,121452,121454,121456,121459],{"class":281,"line":343},[152,121453,26188],{"class":285},[152,121455,26191],{"class":289},[152,121457,121458],{"class":289}," a+x",[152,121460,121461],{"class":289}," NVIDIA-Linux-x86_64-550.107.02.run\n",[152,121463,121464],{"class":281,"line":348},[152,121465,121466],{"class":866},"# 然后执行安装：\n",[152,121468,121469,121471],{"class":281,"line":362},[152,121470,26188],{"class":285},[152,121472,121473],{"class":289}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[152,121475,121476],{"class":281,"line":367},[152,121477,121478],{"class":866},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[152,121480,121481,121483,121486],{"class":281,"line":381},[152,121482,26188],{"class":285},[152,121484,121485],{"class":289}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[152,121487,121488],{"class":293},"  --no-opengl-files\n",[19,121490,121491],{},"安装完毕重启即可",[270,121493,121495],{"className":119860,"code":121494,"language":119862,"meta":275,"style":275},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[277,121496,121497,121501,121507,121511],{"__ignoreMap":275},[152,121498,121499],{"class":281,"line":282},[152,121500,121265],{"class":866},[152,121502,121503,121505],{"class":281,"line":303},[152,121504,26188],{"class":285},[152,121506,28251],{"class":289},[152,121508,121509],{"class":281,"line":310},[152,121510,121280],{"class":866},[152,121512,121513],{"class":281,"line":324},[152,121514,121285],{"class":285},[14,121516,121518],{"id":121517},"_353-安装cuda","3.5.3 安装CUDA",[19,121520,121521],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121523,121524],{},[401,121525],{"alt":275,"src":121526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[416,121528,121529],{},[419,121530,121531],{},"先查看显卡驱动所支持的最高CUDA版本",[270,121533,121534],{"className":119860,"code":121285,"language":119862,"meta":275,"style":275},[277,121535,121536],{"__ignoreMap":275},[152,121537,121538],{"class":281,"line":282},[152,121539,121285],{"class":285},[19,121541,121542],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121544,121545],{},[401,121546],{"alt":275,"src":121547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[416,121549,121550],{"start":303},[419,121551,121552],{},"下载CUDA并安装CUDA",[19,121554,119639,121555],{},[69,121556,119642],{"href":119642,"rel":121557},[245],[19,121559,121560],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121562,121563],{},[401,121564],{"alt":275,"src":121565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121567,121568,121569,121574],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[69,121570,121573],{"href":121571,"rel":121572},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[245],"Vinci机器人队单片机教程","）",[19,121576,121577],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121579,121580],{},[401,121581],{"alt":275,"src":121582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121584,121585],{},"将最下方框框里的命令敲入终端",[270,121587,121589],{"className":119860,"code":121588,"language":119862,"meta":275,"style":275},"# 在当前文件夹下创建一个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",[277,121590,121591,121596,121605,121610,121617,121622,121630,121635,121646,121651],{"__ignoreMap":275},[152,121592,121593],{"class":281,"line":282},[152,121594,121595],{"class":866},"# 在当前文件夹下创建一个ttt的子文件夹\n",[152,121597,121598,121600,121602],{"class":281,"line":303},[152,121599,102603],{"class":285},[152,121601,799],{"class":293},[152,121603,121604],{"class":289}," .\u002Fttt\n",[152,121606,121607],{"class":281,"line":310},[152,121608,121609],{"class":866},"# 进入ttt文件夹\n",[152,121611,121612,121614],{"class":281,"line":324},[152,121613,102613],{"class":293},[152,121615,121616],{"class":289}," ttt\n",[152,121618,121619],{"class":281,"line":329},[152,121620,121621],{"class":866},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[152,121623,121624,121627],{"class":281,"line":343},[152,121625,121626],{"class":285},"wget",[152,121628,121629],{"class":289}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[152,121631,121632],{"class":281,"line":348},[152,121633,121634],{"class":866},"# 给予权限\n",[152,121636,121637,121639,121641,121643],{"class":281,"line":362},[152,121638,26188],{"class":285},[152,121640,26191],{"class":289},[152,121642,121458],{"class":289},[152,121644,121645],{"class":289}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[152,121647,121648],{"class":281,"line":367},[152,121649,121650],{"class":866},"# 运行脚本\n",[152,121652,121653,121655],{"class":281,"line":381},[152,121654,26188],{"class":285},[152,121656,121645],{"class":289},[19,121658,121659],{},[401,121660],{"alt":275,"src":121661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121663,121664],{},"正在安装中：",[19,121666,121667],{},[401,121668],{"alt":275,"src":121669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121671,121672],{},"输入accept接受即可",[19,121674,121675],{},[401,121676],{"alt":275,"src":121677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121679,121680],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121682,121683],{},[401,121684],{"alt":275,"src":121685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121687,121688],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121690,121691],{},[401,121692],{"alt":275,"src":121693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[416,121695,121696],{"start":310},[419,121697,121698],{},"配置环境",[19,121700,121701],{},"根据上方确认一下路径，比如我上面红色框起来的为",[270,121703,121705],{"className":119860,"code":121704,"language":119862,"meta":275,"style":275},"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",[277,121706,121707,121723,121738],{"__ignoreMap":275},[152,121708,121709,121712,121715,121718,121721],{"class":281,"line":282},[152,121710,121711],{"class":285},"Please",[152,121713,121714],{"class":289}," make",[152,121716,121717],{"class":289}," sure",[152,121719,121720],{"class":289}," that",[152,121722,4317],{"class":483},[152,121724,121725,121727,121730,121733,121736],{"class":281,"line":303},[152,121726,53608],{"class":285},[152,121728,121729],{"class":289},"   PATH",[152,121731,121732],{"class":289}," includes",[152,121734,121735],{"class":289}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[152,121737,4317],{"class":483},[152,121739,121740,121742,121745,121747,121750,121753,121755,121758,121761,121764,121767,121769,121772,121774],{"class":281,"line":310},[152,121741,53608],{"class":285},[152,121743,121744],{"class":289},"   LD_LIBRARY_PATH",[152,121746,121732],{"class":289},[152,121748,121749],{"class":289}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[152,121751,121752],{"class":289}," or,",[152,121754,6851],{"class":289},[152,121756,121757],{"class":289}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[152,121759,121760],{"class":289}," to",[152,121762,121763],{"class":289}," \u002Fetc\u002Fld.so.conf",[152,121765,121766],{"class":289}," and",[152,121768,784],{"class":289},[152,121770,121771],{"class":289}," ldconfig",[152,121773,65941],{"class":289},[152,121775,121776],{"class":289}," root\n",[19,121778,121779],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[270,121781,121783],{"className":119860,"code":121782,"language":119862,"meta":275,"style":275},"which nvcc\n",[277,121784,121785],{"__ignoreMap":275},[152,121786,121787,121790],{"class":281,"line":282},[152,121788,121789],{"class":293},"which",[152,121791,121792],{"class":289}," nvcc\n",[19,121794,121795],{},[401,121796],{"alt":275,"src":121797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,121799,121800],{},"所以我进行以下操作：",[270,121802,121804],{"className":119860,"code":121803,"language":119862,"meta":275,"style":275},"sudo vim ~\u002F.bashrc\n",[277,121805,121806],{"__ignoreMap":275},[152,121807,121808,121810,121812],{"class":281,"line":282},[152,121809,26188],{"class":285},[152,121811,119920],{"class":289},[152,121813,121814],{"class":289}," ~\u002F.bashrc\n",[19,121816,121817],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[270,121819,121821],{"className":119860,"code":121820,"language":119862,"meta":275,"style":275},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[277,121822,121823,121835],{"__ignoreMap":275},[152,121824,121825,121827,121830,121832],{"class":281,"line":282},[152,121826,26653],{"class":476},[152,121828,121829],{"class":483}," PATH",[152,121831,1864],{"class":476},[152,121833,121834],{"class":483},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[152,121836,121837,121839,121842,121844],{"class":281,"line":303},[152,121838,26653],{"class":476},[152,121840,121841],{"class":483}," LD_LIBRARY_PATH",[152,121843,1864],{"class":476},[152,121845,121846],{"class":483},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121848,121849],{},[401,121850],{"alt":275,"src":121851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[270,121853,121855],{"className":119860,"code":121854,"language":119862,"meta":275,"style":275},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[277,121856,121857,121862,121868,121873],{"__ignoreMap":275},[152,121858,121859],{"class":281,"line":282},[152,121860,121861],{"class":866},"# 刷新当前终端的环境变量\n",[152,121863,121864,121866],{"class":281,"line":303},[152,121865,102230],{"class":293},[152,121867,121814],{"class":289},[152,121869,121870],{"class":281,"line":310},[152,121871,121872],{"class":866},"# 验证CUDA是否安装成功\n",[152,121874,121875,121878],{"class":281,"line":324},[152,121876,121877],{"class":285},"nvcc",[152,121879,121880],{"class":293}," -V\n",[19,121882,121883],{},"出现下图这种则安装成功。",[19,121885,121886],{},[401,121887],{"alt":275,"src":121888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[14,121890,121892],{"id":121891},"_354-安装cudnn","3.5.4 安装cuDNN",[416,121894,121895],{},[419,121896,121897],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121899,121900,121901,121906],{},"前往 NVIDIA cuDNN 下载页面：",[69,121902,121905],{"href":121903,"rel":121904},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[245],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121908,121909],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121911,121912],{},[401,121913],{"alt":275,"src":121914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121916,121917],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121919,121920],{},[401,121921],{"alt":275,"src":121922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121924,121925],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121927,121928],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121930,121931],{},[694,121932,121933],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121935,121936],{},"下载好的：",[19,121938,121939],{},[401,121940],{"alt":275,"src":121941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[416,121943,121944],{"start":303},[419,121945,121946],{},"安装cuDNN",[19,121948,121949],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121951,121952],{},[401,121953],{"alt":275,"src":121954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121956,121957],{},"解压文件，并复制到对应位置完成安装",[270,121959,121961],{"className":119860,"code":121960,"language":119862,"meta":275,"style":275},"# 解压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",[277,121962,121963,121968,121979,121984,121991,121996,122012,122026,122031,122042,122051,122055,122071],{"__ignoreMap":275},[152,121964,121965],{"class":281,"line":282},[152,121966,121967],{"class":866},"# 解压cuDNN文件\n",[152,121969,121970,121973,121976],{"class":281,"line":303},[152,121971,121972],{"class":285},"tar",[152,121974,121975],{"class":293}," -xvf",[152,121977,121978],{"class":289}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[152,121980,121981],{"class":281,"line":310},[152,121982,121983],{"class":866},"# cd进文件夹\n",[152,121985,121986,121988],{"class":281,"line":324},[152,121987,102613],{"class":293},[152,121989,121990],{"class":289}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[152,121992,121993],{"class":281,"line":329},[152,121994,121995],{"class":866},"# 复制cuDNN文件到CUDA目录\n",[152,121997,121998,122000,122002,122005,122007,122010],{"class":281,"line":343},[152,121999,26188],{"class":285},[152,122001,29461],{"class":289},[152,122003,122004],{"class":289}," include\u002Fcudnn",[152,122006,2263],{"class":293},[152,122008,122009],{"class":289},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[152,122011,4317],{"class":483},[152,122013,122014,122016,122018,122021,122023],{"class":281,"line":348},[152,122015,26188],{"class":285},[152,122017,29461],{"class":289},[152,122019,122020],{"class":289}," lib\u002Flibcudnn",[152,122022,2263],{"class":293},[152,122024,122025],{"class":289},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[152,122027,122028],{"class":281,"line":362},[152,122029,122030],{"class":866},"# 对比一下有没有缺文件\n",[152,122032,122033,122035,122038,122040],{"class":281,"line":367},[152,122034,28365],{"class":285},[152,122036,122037],{"class":289}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[152,122039,2263],{"class":293},[152,122041,4317],{"class":483},[152,122043,122044,122046,122049],{"class":281,"line":381},[152,122045,28365],{"class":285},[152,122047,122048],{"class":289}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[152,122050,120585],{"class":293},[152,122052,122053],{"class":281,"line":386},[152,122054,121634],{"class":866},[152,122056,122057,122059,122061,122064,122066,122068],{"class":281,"line":932},[152,122058,26188],{"class":285},[152,122060,26191],{"class":289},[152,122062,122063],{"class":289}," a+r",[152,122065,122037],{"class":289},[152,122067,2263],{"class":293},[152,122069,122070],{"class":483},"   \n",[152,122072,122073,122075,122077,122079,122081],{"class":281,"line":942},[152,122074,26188],{"class":285},[152,122076,26191],{"class":289},[152,122078,122063],{"class":289},[152,122080,122048],{"class":289},[152,122082,120585],{"class":293},[416,122084,122085],{"start":310},[419,122086,122087],{},"检查是否安装成功",[270,122089,122091],{"className":119860,"code":122090,"language":119862,"meta":275,"style":275},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[277,122092,122093,122098],{"__ignoreMap":275},[152,122094,122095],{"class":281,"line":282},[152,122096,122097],{"class":866},"# 检查cuDNN版本命令\n",[152,122099,122100,122103,122106,122108,122110,122113,122116],{"class":281,"line":303},[152,122101,122102],{"class":285},"cat",[152,122104,122105],{"class":289}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[152,122107,26720],{"class":476},[152,122109,31573],{"class":285},[152,122111,122112],{"class":289}," CUDNN_MAJOR",[152,122114,122115],{"class":293}," -A",[152,122117,49060],{"class":293},[19,122119,122120],{},"出现下图这样的就是安装成功了",[19,122122,122123],{},[401,122124],{"alt":275,"src":122125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[416,122127,122128],{"start":324},[419,122129,122130],{},"软链接(一般不需要)",[270,122132,122134],{"className":119860,"code":122133,"language":119862,"meta":275,"style":275},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[277,122135,122136,122141],{"__ignoreMap":275},[152,122137,122138],{"class":281,"line":282},[152,122139,122140],{"class":866},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[152,122142,122143,122145],{"class":281,"line":303},[152,122144,26188],{"class":285},[152,122146,122147],{"class":289}," ldconfig\n",[19,122149,122150],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[270,122152,122157],{"className":122153,"code":122154,"language":122155,"meta":122156,"style":275},"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",[277,122158,122159,122164,122169,122174,122179,122184,122189],{"__ignoreMap":275},[152,122160,122161],{"class":281,"line":282},[152,122162,122163],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[152,122165,122166],{"class":281,"line":303},[152,122167,122168],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[152,122170,122171],{"class":281,"line":310},[152,122172,122173],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[152,122175,122176],{"class":281,"line":324},[152,122177,122178],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[152,122180,122181],{"class":281,"line":329},[152,122182,122183],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[152,122185,122186],{"class":281,"line":343},[152,122187,122188],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[152,122190,122191],{"class":281,"line":348},[152,122192,122193],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122195,122196],{},"运行下方的命令",[270,122198,122200],{"className":119860,"code":122199,"language":119862,"meta":275,"style":275},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[277,122201,122202,122207,122214,122219],{"__ignoreMap":275},[152,122203,122204],{"class":281,"line":282},[152,122205,122206],{"class":866},"# cd进入CUDA路径\n",[152,122208,122209,122211],{"class":281,"line":303},[152,122210,102613],{"class":293},[152,122212,122213],{"class":289}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[152,122215,122216],{"class":281,"line":310},[152,122217,122218],{"class":866}," # 查看本路径下的需要软链接的文件名\n",[152,122220,122221],{"class":281,"line":324},[152,122222,122223],{"class":285}," ls\n",[19,122225,122226],{},[401,122227],{"alt":275,"src":122228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122230,122231,122232,20025,122235,20025,122238,122241],{},"如上图，我需要将",[277,122233,122234],{},"libcudnn_xxx_xxxxx.so.8.9.7",[277,122236,122237],{},"libcudnn_xxx_xxxxx.so.8",[277,122239,122240],{},"libcudnn_xxx_xxxxx.so","软链接",[270,122243,122245],{"className":119860,"code":122244,"language":119862,"meta":275,"style":275},"# 创建符号链接。对于每个 .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",[277,122246,122247,122252,122268,122282,122296,122310,122324,122338,122352,122357,122363,122368],{"__ignoreMap":275},[152,122248,122249],{"class":281,"line":282},[152,122250,122251],{"class":866},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[152,122253,122254,122256,122259,122262,122265],{"class":281,"line":303},[152,122255,26188],{"class":285},[152,122257,122258],{"class":289}," ln",[152,122260,122261],{"class":293}," -sf",[152,122263,122264],{"class":289}," libcudnn_cnn_train.so.8.9.7",[152,122266,122267],{"class":289}," libcudnn_cnn_train.so.8\n",[152,122269,122270,122272,122274,122276,122279],{"class":281,"line":310},[152,122271,26188],{"class":285},[152,122273,122258],{"class":289},[152,122275,122261],{"class":293},[152,122277,122278],{"class":289}," libcudnn_adv_infer.so.8.9.7",[152,122280,122281],{"class":289}," libcudnn_adv_infer.so.8\n",[152,122283,122284,122286,122288,122290,122293],{"class":281,"line":324},[152,122285,26188],{"class":285},[152,122287,122258],{"class":289},[152,122289,122261],{"class":293},[152,122291,122292],{"class":289}," libcudnn_adv_train.so.8.9.7",[152,122294,122295],{"class":289}," libcudnn_adv_train.so.8\n",[152,122297,122298,122300,122302,122304,122307],{"class":281,"line":329},[152,122299,26188],{"class":285},[152,122301,122258],{"class":289},[152,122303,122261],{"class":293},[152,122305,122306],{"class":289}," libcudnn_cnn_infer.so.8.9.7",[152,122308,122309],{"class":289}," libcudnn_cnn_infer.so.8\n",[152,122311,122312,122314,122316,122318,122321],{"class":281,"line":343},[152,122313,26188],{"class":285},[152,122315,122258],{"class":289},[152,122317,122261],{"class":293},[152,122319,122320],{"class":289}," libcudnn.so.8.9.7",[152,122322,122323],{"class":289}," libcudnn.so.8\n",[152,122325,122326,122328,122330,122332,122335],{"class":281,"line":348},[152,122327,26188],{"class":285},[152,122329,122258],{"class":289},[152,122331,122261],{"class":293},[152,122333,122334],{"class":289}," libcudnn_ops_infer.so.8.9.7",[152,122336,122337],{"class":289}," libcudnn_ops_infer.so.8\n",[152,122339,122340,122342,122344,122346,122349],{"class":281,"line":362},[152,122341,26188],{"class":285},[152,122343,122258],{"class":289},[152,122345,122261],{"class":293},[152,122347,122348],{"class":289}," libcudnn_ops_train.so.8.9.7",[152,122350,122351],{"class":289}," libcudnn_ops_train.so.8\n",[152,122353,122354],{"class":281,"line":367},[152,122355,122356],{"class":866},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[152,122358,122359,122361],{"class":281,"line":381},[152,122360,26188],{"class":285},[152,122362,122147],{"class":289},[152,122364,122365],{"class":281,"line":386},[152,122366,122367],{"class":866},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[152,122369,122370,122372,122375,122378,122380,122383],{"class":281,"line":932},[152,122371,28365],{"class":285},[152,122373,122374],{"class":293}," -l",[152,122376,122377],{"class":289}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[152,122379,2263],{"class":293},[152,122381,122382],{"class":289},".so",[152,122384,120585],{"class":293},[14,122386,122388],{"id":122387},"_355-常见问题","3.5.5 常见问题",[416,122390,122391],{},[419,122392,122393],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[270,122395,122397],{"className":119860,"code":122396,"language":119862,"meta":275,"style":275},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[277,122398,122399],{"__ignoreMap":275},[152,122400,122401,122403,122405],{"class":281,"line":282},[152,122402,26188],{"class":285},[152,122404,119920],{"class":289},[152,122406,122407],{"class":289}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122409,122410],{},"blacklist-nouveau.conf文件内容如下：",[270,122412,122414],{"className":119860,"code":122413,"language":119862,"meta":275,"style":275},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[277,122415,122416,122424,122431,122443,122453],{"__ignoreMap":275},[152,122417,122418,122421],{"class":281,"line":282},[152,122419,122420],{"class":285},"blacklist",[152,122422,122423],{"class":289}," nouveau\n",[152,122425,122426,122428],{"class":281,"line":303},[152,122427,122420],{"class":285},[152,122429,122430],{"class":289}," lbm-nouveau\n",[152,122432,122433,122435,122438,122441],{"class":281,"line":310},[152,122434,117267],{"class":285},[152,122436,122437],{"class":289}," nouveau",[152,122439,122440],{"class":289}," modeset=",[152,122442,4728],{"class":293},[152,122444,122445,122448,122450],{"class":281,"line":324},[152,122446,122447],{"class":293},"alias",[152,122449,122437],{"class":289},[152,122451,122452],{"class":289}," off\n",[152,122454,122455,122457,122460],{"class":281,"line":329},[152,122456,122447],{"class":293},[152,122458,122459],{"class":289}," lbm-nouveau",[152,122461,122452],{"class":289},[19,122463,122464],{},"接着运行下方命令",[270,122466,122468],{"className":119860,"code":122467,"language":119862,"meta":275,"style":275},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[277,122469,122470,122480,122485],{"__ignoreMap":275},[152,122471,122472,122474,122477],{"class":281,"line":282},[152,122473,26188],{"class":285},[152,122475,122476],{"class":289}," update-initramfs",[152,122478,122479],{"class":293}," -u\n",[152,122481,122482],{"class":281,"line":303},[152,122483,122484],{"class":285},"或者\n",[152,122486,122487,122489,122492],{"class":281,"line":310},[152,122488,26188],{"class":285},[152,122490,122491],{"class":289}," dracut",[152,122493,122494],{"class":293}," --force\n",[19,122496,122497],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[270,122499,122501],{"className":119860,"code":122500,"language":119862,"meta":275,"style":275},"lsmod | grep nouveau\n",[277,122502,122503],{"__ignoreMap":275},[152,122504,122505,122508,122510,122512],{"class":281,"line":282},[152,122506,122507],{"class":285},"lsmod",[152,122509,26720],{"class":476},[152,122511,31573],{"class":285},[152,122513,122423],{"class":289},[416,122515,122516],{"start":303},[419,122517,122518],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[270,122520,122522],{"className":119860,"code":122521,"language":119862,"meta":275,"style":275},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[277,122523,122524],{"__ignoreMap":275},[152,122525,122526,122528,122530],{"class":281,"line":282},[152,122527,26188],{"class":285},[152,122529,119920],{"class":289},[152,122531,122532],{"class":289}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122534,122535],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[270,122537,122539],{"className":119860,"code":122538,"language":119862,"meta":275,"style":275},"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",[277,122540,122541,122549,122557,122565,122572,122580,122590,122598],{"__ignoreMap":275},[152,122542,122543,122546],{"class":281,"line":282},[152,122544,122545],{"class":285},"Section",[152,122547,122548],{"class":289}," \"OutputClass\"\n",[152,122550,122551,122554],{"class":281,"line":303},[152,122552,122553],{"class":285},"   Identifier",[152,122555,122556],{"class":289}," \"nvidia\"\n",[152,122558,122559,122562],{"class":281,"line":310},[152,122560,122561],{"class":285},"   MatchDriver",[152,122563,122564],{"class":289}," \"nvidia-drm\"\n",[152,122566,122567,122570],{"class":281,"line":324},[152,122568,122569],{"class":285},"   Driver",[152,122571,122556],{"class":289},[152,122573,122574,122577],{"class":281,"line":329},[152,122575,122576],{"class":285},"   Option",[152,122578,122579],{"class":289}," \"AllowEmptyInitialConfiguration\"\n",[152,122581,122582,122584,122587],{"class":281,"line":343},[152,122583,122576],{"class":285},[152,122585,122586],{"class":289}," \"PrimaryGPU\"",[152,122588,122589],{"class":289}," \"yes\"\n",[152,122591,122592,122595],{"class":281,"line":348},[152,122593,122594],{"class":285},"   ModulePath",[152,122596,122597],{"class":289}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[152,122599,122600],{"class":281,"line":362},[152,122601,122602],{"class":285},"EndSection\n",[416,122604,122605],{"start":310},[419,122606,122607],{},"安装N卡驱动提示错误",[270,122609,122611],{"className":122153,"code":122610,"language":122155,"meta":122156,"style":275},"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",[277,122612,122613],{"__ignoreMap":275},[152,122614,122615],{"class":281,"line":282},[152,122616,122610],{},[416,122618,122619],{},[419,122620,122621],{},"检查当前运行的内核版本：",[19,122623,122624],{},"运行以下命令以查看你当前正在使用的内核版本：",[270,122626,122628],{"className":118633,"code":122627,"language":118635,"meta":275,"style":275},"uname -r\n",[277,122629,122630],{"__ignoreMap":275},[152,122631,122632,122634],{"class":281,"line":282},[152,122633,71541],{"class":285},[152,122635,122636],{"class":293}," -r\n",[416,122638,122639],{"start":303},[419,122640,122641],{},"安装内核开发文件：",[19,122643,122644,122645,122648],{},"确保你已经安装了与当前内核版本相匹配的 ",[277,122646,122647],{},"kernel-devel"," 包。运行以下命令来安装：",[270,122650,122652],{"className":118633,"code":122651,"language":118635,"meta":275,"style":275},"sudo dnf install kernel-devel-$(uname -r)\n",[277,122653,122654],{"__ignoreMap":275},[152,122655,122656,122658,122660,122662,122665,122667,122669,122671],{"class":281,"line":282},[152,122657,26188],{"class":285},[152,122659,27921],{"class":289},[152,122661,25446],{"class":289},[152,122663,122664],{"class":289}," kernel-devel-",[152,122666,26710],{"class":483},[152,122668,71541],{"class":285},[152,122670,120976],{"class":293},[152,122672,1825],{"class":483},[19,122674,122675],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[416,122677,122678],{"start":310},[419,122679,122680],{},"安装内核源代码（如果需要）：",[19,122682,122683],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[270,122685,122687],{"className":118633,"code":122686,"language":118635,"meta":275,"style":275},"sudo dnf install kernel-headers kernel-source\n",[277,122688,122689],{"__ignoreMap":275},[152,122690,122691,122693,122695,122697,122700],{"class":281,"line":282},[152,122692,26188],{"class":285},[152,122694,27921],{"class":289},[152,122696,25446],{"class":289},[152,122698,122699],{"class":289}," kernel-headers",[152,122701,122702],{"class":289}," kernel-source\n",[416,122704,122705],{"start":324},[419,122706,122707],{},"检查安装：",[19,122709,122710,122711,122714],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[277,122712,122713],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[270,122716,122718],{"className":118633,"code":122717,"language":118635,"meta":275,"style":275},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[277,122719,122720],{"__ignoreMap":275},[152,122721,122722,122724],{"class":281,"line":282},[152,122723,28365],{"class":285},[152,122725,122726],{"class":289}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122728,122729,122730,122733],{},"如果仍然遇到问题，可以通过 ",[277,122731,122732],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1736,122735,122736],{},"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":275,"searchDepth":303,"depth":303,"links":122738},[122739,122743,122753,122757,122758],{"id":119836,"depth":303,"text":119837,"children":122740},[122741,122742],{"id":119846,"depth":310,"text":119847},{"id":119856,"depth":310,"text":119857},{"id":120056,"depth":303,"text":120057,"children":122744},[122745,122746,122747,122748,122749,122750,122751,122752],{"id":120060,"depth":310,"text":120061},{"id":120130,"depth":310,"text":120131},{"id":120219,"depth":310,"text":120220},{"id":120464,"depth":310,"text":120465},{"id":120534,"depth":310,"text":120535},{"id":120601,"depth":310,"text":120602},{"id":120636,"depth":310,"text":120637},{"id":120691,"depth":310,"text":120692},{"id":120742,"depth":303,"text":120743,"children":122754},[122755,122756],{"id":120746,"depth":310,"text":120747},{"id":120826,"depth":310,"text":120827},{"id":121012,"depth":303,"text":121013},{"id":121185,"depth":303,"text":121186,"children":122759},[122760,122761,122762,122763,122764],{"id":121189,"depth":310,"text":121190},{"id":121230,"depth":310,"text":121231},{"id":121517,"depth":310,"text":121518},{"id":121891,"depth":310,"text":121892},{"id":122387,"depth":310,"text":122388},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119828,"description":24991},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122771,"title":122772,"body":122773,"description":24991,"extension":1744,"meta":123113,"navigation":306,"path":123114,"seo":123115,"stem":123116,"__hash__":123117},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122774,"toc":123111},[122775,122778,122783,122786,123032,123037,123040,123076,123079,123108],[10,122776,122772],{"id":122777},"_4-命令教程长期积累",[416,122779,122780],{},[419,122781,122782],{},"大多数命令",[19,122784,122785],{},"常用 Linux 命令速查：",[270,122787,122789],{"className":118633,"code":122788,"language":118635,"meta":275,"style":275},"# 文件与目录\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",[277,122790,122791,122796,122803,122810,122818,122825,122832,122840,122848,122855,122862,122870,122874,122879,122886,122894,122901,122905,122910,122917,122925,122933,122941,122949,122953,122958,122966,122973,122980,122988,122996,123000,123005,123014,123023],{"__ignoreMap":275},[152,122792,122793],{"class":281,"line":282},[152,122794,122795],{"class":866},"# 文件与目录\n",[152,122797,122798,122800],{"class":281,"line":303},[152,122799,28365],{"class":285},[152,122801,122802],{"class":866},"        # 列出目录内容\n",[152,122804,122805,122807],{"class":281,"line":310},[152,122806,102613],{"class":293},[152,122808,122809],{"class":866},"        # 切换目录\n",[152,122811,122812,122815],{"class":281,"line":324},[152,122813,122814],{"class":293},"pwd",[152,122816,122817],{"class":866},"       # 显示当前路径\n",[152,122819,122820,122822],{"class":281,"line":329},[152,122821,102603],{"class":285},[152,122823,122824],{"class":866},"     # 创建目录\n",[152,122826,122827,122829],{"class":281,"line":343},[152,122828,26933],{"class":285},[152,122830,122831],{"class":866},"        # 删除文件或目录\n",[152,122833,122834,122837],{"class":281,"line":348},[152,122835,122836],{"class":285},"cp",[152,122838,122839],{"class":866},"        # 复制文件或目录\n",[152,122841,122842,122845],{"class":281,"line":362},[152,122843,122844],{"class":285},"mv",[152,122846,122847],{"class":866},"        # 移动\u002F重命名文件或目录\n",[152,122849,122850,122852],{"class":281,"line":367},[152,122851,102620],{"class":285},[152,122853,122854],{"class":866},"     # 创建空文件\n",[152,122856,122857,122859],{"class":281,"line":381},[152,122858,122102],{"class":285},[152,122860,122861],{"class":866},"       # 查看文件内容\n",[152,122863,122864,122867],{"class":281,"line":386},[152,122865,122866],{"class":285},"head\u002Ftail",[152,122868,122869],{"class":866}," # 查看文件头部\u002F尾部\n",[152,122871,122872],{"class":281,"line":932},[152,122873,307],{"emptyLinePlaceholder":306},[152,122875,122876],{"class":281,"line":942},[152,122877,122878],{"class":866},"# 权限管理\n",[152,122880,122881,122883],{"class":281,"line":949},[152,122882,26223],{"class":285},[152,122884,122885],{"class":866},"     # 修改文件权限\n",[152,122887,122888,122891],{"class":281,"line":954},[152,122889,122890],{"class":285},"chown",[152,122892,122893],{"class":866},"     # 修改文件所有者\n",[152,122895,122896,122898],{"class":281,"line":959},[152,122897,26188],{"class":285},[152,122899,122900],{"class":866},"      # 以管理员身份执行\n",[152,122902,122903],{"class":281,"line":970},[152,122904,307],{"emptyLinePlaceholder":306},[152,122906,122907],{"class":281,"line":979},[152,122908,122909],{"class":866},"# 系统信息\n",[152,122911,122912,122914],{"class":281,"line":989},[152,122913,71541],{"class":285},[152,122915,122916],{"class":866},"     # 系统信息\n",[152,122918,122919,122922],{"class":281,"line":996},[152,122920,122921],{"class":285},"df",[152,122923,122924],{"class":866},"        # 磁盘使用情况\n",[152,122926,122927,122930],{"class":281,"line":1001},[152,122928,122929],{"class":285},"free",[152,122931,122932],{"class":866},"      # 内存使用情况\n",[152,122934,122935,122938],{"class":281,"line":1006},[152,122936,122937],{"class":285},"top\u002Fhtop",[152,122939,122940],{"class":866},"  # 进程监控\n",[152,122942,122943,122946],{"class":281,"line":1018},[152,122944,122945],{"class":285},"ps",[152,122947,122948],{"class":866},"        # 查看进程\n",[152,122950,122951],{"class":281,"line":1027},[152,122952,307],{"emptyLinePlaceholder":306},[152,122954,122955],{"class":281,"line":1037},[152,122956,122957],{"class":866},"# 网络\n",[152,122959,122960,122963],{"class":281,"line":1044},[152,122961,122962],{"class":285},"ping",[152,122964,122965],{"class":866},"      # 测试网络连通性\n",[152,122967,122968,122970],{"class":281,"line":1049},[152,122969,28453],{"class":285},[152,122971,122972],{"class":866},"      # 发送 HTTP 请求\n",[152,122974,122975,122977],{"class":281,"line":1054},[152,122976,121626],{"class":285},[152,122978,122979],{"class":866},"      # 下载文件\n",[152,122981,122982,122985],{"class":281,"line":1065},[152,122983,122984],{"class":285},"ssh",[152,122986,122987],{"class":866},"       # 远程登录\n",[152,122989,122990,122993],{"class":281,"line":1074},[152,122991,122992],{"class":285},"scp",[152,122994,122995],{"class":866},"       # 远程文件传输\n",[152,122997,122998],{"class":281,"line":1084},[152,122999,307],{"emptyLinePlaceholder":306},[152,123001,123002],{"class":281,"line":1091},[152,123003,123004],{"class":866},"# 包管理（Debian\u002FUbuntu）\n",[152,123006,123007,123009,123011],{"class":281,"line":1096},[152,123008,118705],{"class":285},[152,123010,118684],{"class":289},[152,123012,123013],{"class":866},"   # 更新软件源\n",[152,123015,123016,123018,123020],{"class":281,"line":1101},[152,123017,118705],{"class":285},[152,123019,25446],{"class":289},[152,123021,123022],{"class":866},"  # 安装软件包\n",[152,123024,123025,123027,123029],{"class":281,"line":1112},[152,123026,118705],{"class":285},[152,123028,27689],{"class":289},[152,123030,123031],{"class":866},"   # 卸载软件包\n",[416,123033,123034],{"start":303},[419,123035,123036],{},"KDE Dolphin 以root打开",[19,123038,123039],{},"kde5",[270,123041,123043],{"className":118633,"code":123042,"language":118635,"meta":275,"style":275},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[277,123044,123045],{"__ignoreMap":275},[152,123046,123047,123050,123053,123056,123058,123060,123063,123066,123068,123071,123073],{"class":281,"line":282},[152,123048,123049],{"class":285},"pkexec",[152,123051,123052],{"class":289}," env",[152,123054,123055],{"class":289}," DISPLAY=",[152,123057,29742],{"class":483},[152,123059,29800],{"class":289},[152,123061,123062],{"class":483},"$XAUTHORITY ",[152,123064,123065],{"class":289},"KDE_SESSION_VERSION=",[152,123067,2127],{"class":293},[152,123069,123070],{"class":289}," KDE_FULL_SESSION=",[152,123072,3034],{"class":293},[152,123074,123075],{"class":289}," dolphin\n",[19,123077,123078],{},"kde6",[270,123080,123082],{"className":118633,"code":123081,"language":118635,"meta":275,"style":275},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[277,123083,123084],{"__ignoreMap":275},[152,123085,123086,123088,123090,123092,123094,123096,123098,123100,123102,123104,123106],{"class":281,"line":282},[152,123087,123049],{"class":285},[152,123089,123052],{"class":289},[152,123091,123055],{"class":289},[152,123093,29742],{"class":483},[152,123095,29800],{"class":289},[152,123097,123062],{"class":483},[152,123099,123065],{"class":289},[152,123101,2152],{"class":293},[152,123103,123070],{"class":289},[152,123105,3034],{"class":293},[152,123107,123075],{"class":289},[1736,123109,123110],{},"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":275,"searchDepth":303,"depth":303,"links":123112},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122772,"description":24991},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123119,"title":123120,"body":123121,"description":24991,"extension":1744,"meta":123135,"navigation":306,"path":123136,"seo":123137,"stem":123138,"__hash__":123139},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123122,"toc":123133},[123123,123126],[10,123124,123120],{"id":123125},"_5-各种环境配置",[19,123127,123128],{},[69,123129,123132],{"href":123130,"rel":123131},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[245],"电控组环境搭建大全",{"title":275,"searchDepth":303,"depth":303,"links":123134},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123120,"description":24991},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123141,"title":123142,"body":123143,"description":24991,"extension":1744,"meta":123491,"navigation":306,"path":123492,"seo":123493,"stem":123494,"__hash__":123495},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123144,"toc":123483},[123145,123148,123152,123156,123160,123165,123172,123176,123469,123473,123480],[10,123146,123142],{"id":123147},"_6-拓展功能",[1760,123149,123151],{"id":123150},"_61-wine","6.1 Wine",[1760,123153,123155],{"id":123154},"_62-android","6.2 Android",[14,123157,123159],{"id":123158},"_621-i卡a卡","6.2.1 I卡、A卡",[416,123161,123162],{},[419,123163,123164],{},"Wayland-Waydroid(体验超级好)",[19,123166,123167,123168],{},"Waydroid 官网与安装指南：",[69,123169,123170],{"href":123170,"rel":123171},"https:\u002F\u002Fwaydro.id\u002F",[245],[14,123173,123175],{"id":123174},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[416,123177,123178],{},[419,123179,123180,123181,123183,123184,123188,123190,123193,123198,123395],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55053,123182],{},"BlissOS 官网下载：",[69,123185,123186],{"href":123186,"rel":123187},"https:\u002F\u002Fblissos.org\u002F",[245],[55053,123189],{},[401,123191],{"alt":275,"src":123192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[416,123194,123195],{"start":310},[419,123196,123197],{},"比较推荐的配置",[270,123199,123201],{"className":118633,"code":123200,"language":118635,"meta":275,"style":275},"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",[277,123202,123203,123210,123220,123230,123240,123252,123262,123269,123279,123288,123297,123307,123317,123326,123336,123346,123358,123368,123377,123387],{"__ignoreMap":275},[152,123204,123205,123208],{"class":281,"line":282},[152,123206,123207],{"class":285},"qemu-system-x86_64",[152,123209,878],{"class":293},[152,123211,123212,123215,123218],{"class":281,"line":303},[152,123213,123214],{"class":293},"        -M",[152,123216,123217],{"class":289}," q35,vmport=off",[152,123219,878],{"class":293},[152,123221,123222,123225,123228],{"class":281,"line":310},[152,123223,123224],{"class":293},"        -accel",[152,123226,123227],{"class":289}," kvm",[152,123229,878],{"class":293},[152,123231,123232,123235,123238],{"class":281,"line":324},[152,123233,123234],{"class":293},"        -cpu",[152,123236,123237],{"class":289}," qemu64,+sse3,+sse4.2",[152,123239,878],{"class":293},[152,123241,123242,123245,123248,123250],{"class":281,"line":329},[152,123243,123244],{"class":293},"        -smp",[152,123246,123247],{"class":289}," 8,cores=",[152,123249,2101],{"class":293},[152,123251,878],{"class":293},[152,123253,123254,123257,123260],{"class":281,"line":343},[152,123255,123256],{"class":293},"        -m",[152,123258,123259],{"class":289}," 6G",[152,123261,878],{"class":293},[152,123263,123264,123267],{"class":281,"line":348},[152,123265,123266],{"class":293},"        -usb",[152,123268,878],{"class":293},[152,123270,123271,123274,123277],{"class":281,"line":362},[152,123272,123273],{"class":293},"        -device",[152,123275,123276],{"class":289}," virtio-tablet",[152,123278,878],{"class":293},[152,123280,123281,123283,123286],{"class":281,"line":367},[152,123282,123273],{"class":293},[152,123284,123285],{"class":289}," virtio-keyboard",[152,123287,878],{"class":293},[152,123289,123290,123292,123295],{"class":281,"line":381},[152,123291,123273],{"class":293},[152,123293,123294],{"class":289}," usb-tablet",[152,123296,878],{"class":293},[152,123298,123299,123302,123305],{"class":281,"line":386},[152,123300,123301],{"class":293},"        -bios",[152,123303,123304],{"class":289}," OVMF-pure-efi64.fd",[152,123306,878],{"class":293},[152,123308,123309,123312,123315],{"class":281,"line":932},[152,123310,123311],{"class":293},"        -net",[152,123313,123314],{"class":289}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[152,123316,878],{"class":293},[152,123318,123319,123321,123324],{"class":281,"line":942},[152,123320,123311],{"class":293},[152,123322,123323],{"class":289}," nic,model=virtio",[152,123325,878],{"class":293},[152,123327,123328,123331,123334],{"class":281,"line":949},[152,123329,123330],{"class":293},"        -audio",[152,123332,123333],{"class":289}," sdl,model=hda",[152,123335,878],{"class":293},[152,123337,123338,123341,123344],{"class":281,"line":954},[152,123339,123340],{"class":293},"        -display",[152,123342,123343],{"class":289}," sdl,gl=on,show-cursor=on",[152,123345,878],{"class":293},[152,123347,123348,123350,123353,123356],{"class":281,"line":959},[152,123349,123273],{"class":293},[152,123351,123352],{"class":289}," virtio-vga-gl,xres=1920,yres=",[152,123354,123355],{"class":293},"1080",[152,123357,878],{"class":293},[152,123359,123360,123363,123366],{"class":281,"line":970},[152,123361,123362],{"class":293},"        -drive",[152,123364,123365],{"class":289}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[152,123367,878],{"class":293},[152,123369,123370,123372,123375],{"class":281,"line":979},[152,123371,123362],{"class":293},[152,123373,123374],{"class":289}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[152,123376,878],{"class":293},[152,123378,123379,123382,123385],{"class":281,"line":989},[152,123380,123381],{"class":293},"        -monitor",[152,123383,123384],{"class":289}," stdio",[152,123386,878],{"class":293},[152,123388,123389,123392],{"class":281,"line":996},[152,123390,123391],{"class":293},"        -serial",[152,123393,123394],{"class":289}," none\n",[416,123396,123397],{"start":329},[419,123398,123399,123400],{},"常用操作：",[416,123401,123402,123405,123461],{},[419,123403,123404],{},"全屏：Ctrl+Alt+F",[419,123406,123407,123408,123413],{},"adb调试",[416,123409,123410],{},[419,123411,123412],{},"使Linux与Android用ADB连接。",[270,123414,123416],{"className":118633,"code":123415,"language":118635,"meta":275,"style":275},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[277,123417,123418,123423,123434,123439,123451,123456],{"__ignoreMap":275},[152,123419,123420],{"class":281,"line":282},[152,123421,123422],{"class":866},"# 连接安卓\n",[152,123424,123425,123428,123431],{"class":281,"line":303},[152,123426,123427],{"class":285},"adb",[152,123429,123430],{"class":289}," connect",[152,123432,123433],{"class":293}," 127.0.0.1\n",[152,123435,123436],{"class":281,"line":310},[152,123437,123438],{"class":866},"# 打开shell\n",[152,123440,123441,123443,123445,123448],{"class":281,"line":324},[152,123442,123427],{"class":285},[152,123444,28487],{"class":293},[152,123446,123447],{"class":289}," 127.0.0.1:5555",[152,123449,123450],{"class":289}," shell\n",[152,123452,123453],{"class":281,"line":329},[152,123454,123455],{"class":866},"# 使用root权限\n",[152,123457,123458],{"class":281,"line":343},[152,123459,123460],{"class":285},"su\n",[419,123462,123463,123464],{},"中文输入法",[416,123465,123466],{},[419,123467,123468],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[1760,123470,123472],{"id":123471},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123474,123475,123476],{},"rEFInd 官网与文档：",[69,123477,123478],{"href":123478,"rel":123479},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[245],[1736,123481,123482],{},"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":275,"searchDepth":303,"depth":303,"links":123484},[123485,123486,123490],{"id":123150,"depth":303,"text":123151},{"id":123154,"depth":303,"text":123155,"children":123487},[123488,123489],{"id":123158,"depth":310,"text":123159},{"id":123174,"depth":310,"text":123175},{"id":123471,"depth":303,"text":123472},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123142,"description":24991},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123497,"title":123498,"body":123499,"description":24991,"extension":1744,"meta":126798,"navigation":306,"path":126799,"seo":126800,"stem":126801,"__hash__":126802},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123500,"toc":126772},[123501,123504,123508,123511,123518,123768,123771,123843,123846,123850,123854,123859,123862,123865,123868,123873,123876,123879,123882,123887,123890,123895,123898,123901,123906,123909,123914,123917,123921,123925,123928,123933,123936,123950,123953,123956,123965,123968,123977,123980,123983,123992,123995,124004,124007,124010,124019,124022,124025,124040,124043,124046,124055,124060,124063,124066,124075,124078,124087,124090,124099,124102,124111,124116,124119,124127,124132,124135,124144,124147,124155,124160,124163,124172,124175,124178,124182,124185,124190,124193,124198,124212,124217,124222,124233,124238,124244,124249,124264,124269,124272,124277,124282,124287,124295,124300,124307,124312,124323,124328,124331,124335,124338,124341,124346,124349,124368,124373,124376,124385,124390,124393,124415,124418,124448,124451,124456,124459,124473,124478,124497,124500,124503,124508,124520,124525,124530,124533,124538,124541,124556,124559,124564,124569,124573,124578,124618,124621,124625,124631,124637,124642,124645,124652,124657,124664,124667,124670,124677,124691,124694,124754,124757,124771,124783,124786,124789,124792,124856,124859,124862,124865,124885,124888,124893,124900,124904,124907,124911,124916,124921,124925,124928,124931,124973,124978,124981,125003,125018,125020,125025,125037,125097,125099,125101,125155,125157,125159,125165,125170,125173,125178,125182,125185,125247,125252,125255,125257,125261,125273,125355,125357,125359,125413,125419,125421,125425,125430,125432,125437,125441,125461,125496,125500,125503,125506,125509,125516,125519,125531,125534,125549,125552,125571,125619,125622,125639,125642,125656,125661,125664,125673,125688,125700,125738,125743,125752,125757,125762,125788,125797,125801,125805,125810,125813,125817,125821,125826,125829,125834,125837,125842,125845,125850,125853,125857,125862,125865,125870,125873,125877,125882,125885,125890,125893,125898,125901,125905,125910,125913,125918,125921,125926,125929,125933,125938,125941,125946,125949,125954,125957,125962,125965,125970,125973,125978,125981,125985,125990,125993,125998,126005,126009,126014,126017,126022,126025,126029,126034,126037,126040,126043,126046,126049,126053,126056,126066,126071,126076,126098,126103,126108,126115,126119,126124,126127,126130,126135,126138,126141,126144,126147,126150,126153,126156,126159,126162,126165,126168,126171,126176,126181,126186,126191,126196,126201,126206,126209,126213,126216,126220,126225,126230,126235,126240,126244,126250,126258,126263,126266,126271,126286,126289,126294,126328,126343,126346,126401,126427,126439,126442,126451,126454,126469,126474,126477,126483,126488,126491,126496,126499,126504,126509,126516,126519,126534,126537,126572,126577,126585,126623,126626,126629,126634,126637,126642,126653,126687,126692,126695,126704,126709,126715,126718,126723,126732,126737,126740,126743,126748,126756,126759,126764,126769],[10,123502,123498],{"id":123503},"_7-其他操作",[1760,123505,123507],{"id":123506},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123509,123510],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123512,123513,123514,123517],{},"进入工控机的硬盘目录，进入",[277,123515,123516],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[270,123519,123523],{"className":123520,"code":123521,"language":123522,"meta":275,"style":275},"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",[277,123524,123525,123533,123544,123551,123558,123570,123577,123589,123600,123611,123618,123625,123632,123644,123656,123663,123675,123687,123694,123706,123718,123730,123741,123748,123759],{"__ignoreMap":275},[152,123526,123527,123530],{"class":281,"line":282},[152,123528,123529],{"class":52637},"network",[152,123531,123532],{"class":483},": \n",[152,123534,123535,123538,123540,123542],{"class":281,"line":303},[152,123536,123537],{"class":52637},"  version",[152,123539,52774],{"class":483},[152,123541,1894],{"class":293},[152,123543,4317],{"class":483},[152,123545,123546,123549],{"class":281,"line":310},[152,123547,123548],{"class":52637},"  wifis",[152,123550,123532],{"class":483},[152,123552,123553,123556],{"class":281,"line":324},[152,123554,123555],{"class":52637},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[152,123557,123532],{"class":483},[152,123559,123560,123563,123565,123568],{"class":281,"line":329},[152,123561,123562],{"class":52637},"      renderer",[152,123564,52774],{"class":483},[152,123566,123567],{"class":289},"NetworkManager",[152,123569,4317],{"class":483},[152,123571,123572,123575],{"class":281,"line":343},[152,123573,123574],{"class":52637},"      match",[152,123576,123532],{"class":483},[152,123578,123579,123582,123584,123587],{"class":281,"line":348},[152,123580,123581],{"class":52637},"        name",[152,123583,52774],{"class":483},[152,123585,123586],{"class":289},"\"wlan0\"",[152,123588,4317],{"class":483},[152,123590,123591,123594,123596,123598],{"class":281,"line":362},[152,123592,123593],{"class":52637},"      dhcp4",[152,123595,52774],{"class":483},[152,123597,3034],{"class":293},[152,123599,4317],{"class":483},[152,123601,123602,123605,123607,123609],{"class":281,"line":367},[152,123603,123604],{"class":52637},"      dhcp6",[152,123606,52774],{"class":483},[152,123608,3034],{"class":293},[152,123610,4317],{"class":483},[152,123612,123613,123616],{"class":281,"line":381},[152,123614,123615],{"class":52637},"      access-points",[152,123617,123532],{"class":483},[152,123619,123620,123623],{"class":281,"line":386},[152,123621,123622],{"class":289},"        \"EMIS_Vinci_Robocon_5G\"",[152,123624,123532],{"class":483},[152,123626,123627,123630],{"class":281,"line":932},[152,123628,123629],{"class":52637},"          auth",[152,123631,123532],{"class":483},[152,123633,123634,123637,123639,123642],{"class":281,"line":942},[152,123635,123636],{"class":52637},"            key-management",[152,123638,52774],{"class":483},[152,123640,123641],{"class":289},"\"psk\"",[152,123643,4317],{"class":483},[152,123645,123646,123649,123651,123654],{"class":281,"line":949},[152,123647,123648],{"class":52637},"            password",[152,123650,52774],{"class":483},[152,123652,123653],{"class":289},"\"vinci666\"",[152,123655,4317],{"class":483},[152,123657,123658,123661],{"class":281,"line":954},[152,123659,123660],{"class":52637},"          networkmanager",[152,123662,123532],{"class":483},[152,123664,123665,123668,123670,123673],{"class":281,"line":959},[152,123666,123667],{"class":52637},"            uuid",[152,123669,52774],{"class":483},[152,123671,123672],{"class":289},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[152,123674,4317],{"class":483},[152,123676,123677,123680,123682,123685],{"class":281,"line":970},[152,123678,123679],{"class":52637},"            name",[152,123681,52774],{"class":483},[152,123683,123684],{"class":289},"\"EMIS_Vinci_Robocon_5G\"",[152,123686,4317],{"class":483},[152,123688,123689,123692],{"class":281,"line":979},[152,123690,123691],{"class":52637},"            passthrough",[152,123693,123532],{"class":483},[152,123695,123696,123699,123701,123704],{"class":281,"line":989},[152,123697,123698],{"class":52637},"              wifi-security.auth-alg",[152,123700,52774],{"class":483},[152,123702,123703],{"class":289},"\"open\"",[152,123705,4317],{"class":483},[152,123707,123708,123711,123713,123716],{"class":281,"line":996},[152,123709,123710],{"class":52637},"              ipv6.addr-gen-mode",[152,123712,52774],{"class":483},[152,123714,123715],{"class":289},"\"default\"",[152,123717,4317],{"class":483},[152,123719,123720,123723,123725,123728],{"class":281,"line":1001},[152,123721,123722],{"class":52637},"              ipv6.ip6-privacy",[152,123724,52774],{"class":483},[152,123726,123727],{"class":289},"\"-1\"",[152,123729,4317],{"class":483},[152,123731,123732,123735,123737,123739],{"class":281,"line":1006},[152,123733,123734],{"class":52637},"              proxy._",[152,123736,52774],{"class":483},[152,123738,9294],{"class":289},[152,123740,4317],{"class":483},[152,123742,123743,123746],{"class":281,"line":1018},[152,123744,123745],{"class":52637},"      networkmanager",[152,123747,123532],{"class":483},[152,123749,123750,123753,123755,123757],{"class":281,"line":1027},[152,123751,123752],{"class":52637},"        uuid",[152,123754,52774],{"class":483},[152,123756,123672],{"class":289},[152,123758,4317],{"class":483},[152,123760,123761,123763,123765],{"class":281,"line":1037},[152,123762,123581],{"class":52637},[152,123764,52774],{"class":483},[152,123766,123767],{"class":289},"\"EMIS_Vinci_Robocon_5G\"\n",[19,123769,123770],{},"将其改为新wifi的名和密码：",[270,123772,123774],{"className":123520,"code":123773,"language":123522,"meta":275,"style":275},"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",[277,123775,123776,123782,123791,123797,123804,123813,123821,123827,123833],{"__ignoreMap":275},[152,123777,123778,123780],{"class":281,"line":282},[152,123779,123529],{"class":52637},[152,123781,5382],{"class":483},[152,123783,123784,123786,123788],{"class":281,"line":303},[152,123785,123537],{"class":52637},[152,123787,52774],{"class":483},[152,123789,123790],{"class":293},"2\n",[152,123792,123793,123795],{"class":281,"line":310},[152,123794,123548],{"class":52637},[152,123796,5382],{"class":483},[152,123798,123799,123802],{"class":281,"line":324},[152,123800,123801],{"class":52637},"    wlan0",[152,123803,5382],{"class":483},[152,123805,123806,123808,123810],{"class":281,"line":329},[152,123807,123593],{"class":52637},[152,123809,52774],{"class":483},[152,123811,123812],{"class":293},"true\n",[152,123814,123815,123817,123819],{"class":281,"line":343},[152,123816,123604],{"class":52637},[152,123818,52774],{"class":483},[152,123820,123812],{"class":293},[152,123822,123823,123825],{"class":281,"line":348},[152,123824,123615],{"class":52637},[152,123826,5382],{"class":483},[152,123828,123829,123831],{"class":281,"line":362},[152,123830,123622],{"class":289},[152,123832,5382],{"class":483},[152,123834,123835,123838,123840],{"class":281,"line":367},[152,123836,123837],{"class":52637},"          password",[152,123839,52774],{"class":483},[152,123841,123842],{"class":289},"\"vinci666\"\n",[19,123844,123845],{},"工控机开机即可连上网。",[1760,123847,123849],{"id":123848},"_72-ssh远程开发","7.2 SSH远程开发",[14,123851,123853],{"id":123852},"_721-环境准备","7.2.1 环境准备",[19,123855,123856],{},[694,123857,123858],{},"1.硬件准备",[19,123860,123861],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123863,123864],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123866,123867],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123869,123870],{},[694,123871,123872],{},"2.设置固定IP",[19,123874,123875],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123877,123878],{},"1.进入设置界面",[19,123880,123881],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123883,123884],{},[401,123885],{"alt":275,"src":123886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123888,123889],{},"2.配置所连接的网络",[19,123891,123892],{},[401,123893],{"alt":275,"src":123894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123896,123897],{},"3.设置固定IP",[19,123899,123900],{},"查看当前IP地址。",[19,123902,123903],{},[401,123904],{"alt":275,"src":123905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123907,123908],{},"设置固定IP。",[19,123910,123911],{},[401,123912],{"alt":275,"src":123913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123915,123916],{},"至此，IP配置完毕。",[14,123918,123920],{"id":123919},"_722-环境搭建","7.2.2 环境搭建",[19,123922,123923],{},[694,123924,27364],{},[19,123926,123927],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123929,123930],{},[694,123931,123932],{},"实现",[19,123934,123935],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[416,123937,123938,123941,123944,123947],{},[419,123939,123940],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[419,123942,123943],{},"远程主机启动SSH服务；",[419,123945,123946],{},"本地主机登陆远程主机；",[419,123948,123949],{},"实现数据传输。",[19,123951,123952],{},"1.安装SSH客户端与服务端",[19,123954,123955],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[270,123957,123959],{"className":122153,"code":123958,"language":122155,"meta":122156,"style":275}," sudo apt install openssh-server\n",[277,123960,123961],{"__ignoreMap":275},[152,123962,123963],{"class":281,"line":282},[152,123964,123958],{},[19,123966,123967],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[270,123969,123971],{"className":122153,"code":123970,"language":122155,"meta":122156,"style":275},"sudo apt install openssh-client\n",[277,123972,123973],{"__ignoreMap":275},[152,123974,123975],{"class":281,"line":282},[152,123976,123970],{},[19,123978,123979],{},"2.远程主机启动SSH服务",[19,123981,123982],{},"远程主机启动 ssh 服务命令如下：",[270,123984,123986],{"className":122153,"code":123985,"language":122155,"meta":122156,"style":275},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[277,123987,123988],{"__ignoreMap":275},[152,123989,123990],{"class":281,"line":282},[152,123991,123985],{},[19,123993,123994],{},"启动后可使用如下命令查看服务是否正常运行：",[270,123996,123998],{"className":122153,"code":123997,"language":122155,"meta":122156,"style":275},"ps -e | grep ssh\n",[277,123999,124000],{"__ignoreMap":275},[152,124001,124002],{"class":281,"line":282},[152,124003,123997],{},[19,124005,124006],{},"如果启动成功，会包含 sshd 程序。",[19,124008,124009],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[270,124011,124013],{"className":122153,"code":124012,"language":122155,"meta":122156,"style":275},"sudo systemctl enable ssh\n",[277,124014,124015],{"__ignoreMap":275},[152,124016,124017],{"class":281,"line":282},[152,124018,124012],{},[19,124020,124021],{},"3.本地远程登录",[19,124023,124024],{},"登录远程主机可以调用如下命令:",[270,124026,124028],{"className":118633,"code":124027,"language":118635,"meta":275,"style":275},"ssh -X 用户名@ip地址\n",[277,124029,124030],{"__ignoreMap":275},[152,124031,124032,124034,124037],{"class":281,"line":282},[152,124033,122984],{"class":285},[152,124035,124036],{"class":293}," -X",[152,124038,124039],{"class":289}," 用户名@ip地址\n",[19,124041,124042],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124044,124045],{},"如果退出，可以调用exit命令：",[270,124047,124049],{"className":122153,"code":124048,"language":122155,"meta":122156,"style":275},"exit\n",[277,124050,124051],{"__ignoreMap":275},[152,124052,124053],{"class":281,"line":282},[152,124054,124048],{},[19,124056,124057],{},[694,124058,124059],{},"4.实现数据传输",[19,124061,124062],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124064,124065],{},"上传文件指令格式如下：",[270,124067,124069],{"className":122153,"code":124068,"language":122155,"meta":122156,"style":275},"scp 本地文件路径 账号@ip:路径\n",[277,124070,124071],{"__ignoreMap":275},[152,124072,124073],{"class":281,"line":282},[152,124074,124068],{},[19,124076,124077],{},"上传文件夹指令格式如下：",[270,124079,124081],{"className":122153,"code":124080,"language":122155,"meta":122156,"style":275},"scp -r 本地文件夹路径 账号@ip:路径\n",[277,124082,124083],{"__ignoreMap":275},[152,124084,124085],{"class":281,"line":282},[152,124086,124080],{},[19,124088,124089],{},"下载文件指令格式如下：",[270,124091,124093],{"className":122153,"code":124092,"language":122155,"meta":122156,"style":275},"scp 账号@ip:路径 本地文件夹路径\n",[277,124094,124095],{"__ignoreMap":275},[152,124096,124097],{"class":281,"line":282},[152,124098,124092],{},[19,124100,124101],{},"下载文件夹指令格式如下：",[270,124103,124105],{"className":122153,"code":124104,"language":122155,"meta":122156,"style":275},"scp -r 账号@ip:路径 本地文件夹路径\n",[277,124106,124107],{"__ignoreMap":275},[152,124108,124109],{"class":281,"line":282},[152,124110,124104],{},[19,124112,124113],{},[694,124114,124115],{},"优化",[19,124117,124118],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[416,124120,124121,124124],{},[419,124122,124123],{},"本地生成密钥对；",[419,124125,124126],{},"将公钥上传至远程主机。",[19,124128,124129],{},[694,124130,124131],{},"1.生成密钥对",[19,124133,124134],{},"本地客户端生成公私钥：（一路回车默认即可）",[270,124136,124138],{"className":122153,"code":124137,"language":122155,"meta":122156,"style":275},"ssh-keygen\n",[277,124139,124140],{"__ignoreMap":275},[152,124141,124142],{"class":281,"line":282},[152,124143,124137],{},[19,124145,124146],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[416,124148,124149,124152],{},[419,124150,124151],{},"id_rsa （私钥）；",[419,124153,124154],{},"id_rsa.pub (公钥)。",[19,124156,124157],{},[694,124158,124159],{},"2.公钥上传",[19,124161,124162],{},"上传指令如下：",[270,124164,124166],{"className":122153,"code":124165,"language":122155,"meta":122156,"style":275},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[277,124167,124168],{"__ignoreMap":275},[152,124169,124170],{"class":281,"line":282},[152,124171,124165],{},[19,124173,124174],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124176,124177],{},"以后再远程登录就无需录入密码了。",[14,124179,124181],{"id":124180},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124183,124184],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124186,124187],{},[694,124188,124189],{},"1.准备工作",[19,124191,124192],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124194,124195],{},[694,124196,124197],{},"2.为VScode安装远程开发插件",[19,124199,124200,124201,124204,124205,124208,124209,29984],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[277,124202,124203],{},"扩展：商店","的搜索栏输入",[277,124206,124207],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[277,124210,124211],{},"安装",[19,124213,124214],{},[401,124215],{"alt":275,"src":124216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124218,124219],{},[694,124220,124221],{},"3.配置远程连接",[19,124223,124224,124225,124228,124229,124232],{},"步骤1：使用快捷键",[277,124226,124227],{},"ctrl + shift + p","打开命令输入窗口，并输入",[277,124230,124231],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124234,124235],{},[401,124236],{"alt":275,"src":124237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124239,124240,124241,29984],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[277,124242,124243],{},"Add New SSH Host",[19,124245,124246],{},[401,124247],{"alt":275,"src":124248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124250,124251,124252,124255,124256,124259,124260,124263],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[277,124253,124254],{},"ssh +X ubuntu@192.168.43.164","，其中，",[277,124257,124258],{},"ubuntu","需要替换为你的登录用户名，",[277,124261,124262],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124265,124266],{},[401,124267],{"alt":275,"src":124268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124270,124271],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124273,124274],{},[401,124275],{"alt":275,"src":124276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124278,124279],{},[401,124280],{"alt":275,"src":124281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124283,124284],{},[694,124285,124286],{},"4.使用",[19,124288,124289,124290,124228,124292,124294],{},"步骤1：继续使用快捷键",[277,124291,124227],{},[277,124293,124231],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124296,124297],{},[401,124298],{"alt":275,"src":124299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124301,124302,124303,124306],{},"或者，也可以点击侧边栏的",[277,124304,124305],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124308,124309],{},[401,124310],{"alt":275,"src":124311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124313,124314,124315,124318,124319,124322],{},"步骤2：选择菜单栏的",[277,124316,124317],{},"文件","下的",[277,124320,124321],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124324,124325],{},[401,124326],{"alt":275,"src":124327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124329,124330],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[1760,124332,124334],{"id":124333},"_73-远程桌面","7.3 远程桌面",[19,124336,124337],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124339,124340],{},"我们选择使用VNC来看。",[416,124342,124343],{},[419,124344,124345],{},"安装VNC服务器：",[19,124347,124348],{},"这里以TigerVNC为例进行安装：",[270,124350,124352],{"className":118633,"code":124351,"language":118635,"meta":275,"style":275},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[277,124353,124354],{"__ignoreMap":275},[152,124355,124356,124358,124360,124362,124365],{"class":281,"line":282},[152,124357,26188],{"class":285},[152,124359,118654],{"class":289},[152,124361,25446],{"class":289},[152,124363,124364],{"class":289}," tigervnc-standalone-server",[152,124366,124367],{"class":289}," tigervnc-common\n",[416,124369,124370],{"start":303},[419,124371,124372],{},"设置VNC密码：",[19,124374,124375],{},"为VNC用户设置密码，运行以下命令：",[270,124377,124379],{"className":118633,"code":124378,"language":118635,"meta":275,"style":275},"vncpasswd\n",[277,124380,124381],{"__ignoreMap":275},[152,124382,124383],{"class":281,"line":282},[152,124384,124378],{"class":285},[416,124386,124387],{"start":310},[419,124388,124389],{},"配置VNC启动脚本:",[19,124391,124392],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[270,124394,124396],{"className":118633,"code":124395,"language":118635,"meta":275,"style":275},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[277,124397,124398,124407],{"__ignoreMap":275},[152,124399,124400,124402,124404],{"class":281,"line":282},[152,124401,102603],{"class":285},[152,124403,799],{"class":293},[152,124405,124406],{"class":289}," ~\u002F.vnc\n",[152,124408,124409,124412],{"class":281,"line":303},[152,124410,124411],{"class":285},"nano",[152,124413,124414],{"class":289}," ~\u002F.vnc\u002Fxstartup\n",[19,124416,124417],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[270,124419,124421],{"className":118633,"code":124420,"language":118635,"meta":275,"style":275},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[277,124422,124423,124428,124436,124443],{"__ignoreMap":275},[152,124424,124425],{"class":281,"line":282},[152,124426,124427],{"class":866},"#!\u002Fbin\u002Fsh\n",[152,124429,124430,124433],{"class":281,"line":303},[152,124431,124432],{"class":293},"unset",[152,124434,124435],{"class":289}," SESSION_MANAGER\n",[152,124437,124438,124440],{"class":281,"line":310},[152,124439,124432],{"class":293},[152,124441,124442],{"class":289}," DBUS_SESSION_BUS_ADDRESS\n",[152,124444,124445],{"class":281,"line":324},[152,124446,124447],{"class":285},"gnome-session\n",[19,124449,124450],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[416,124452,124453],{"start":324},[419,124454,124455],{},"给予执行权限：",[19,124457,124458],{},"为xstartup文件设置执行权限：",[270,124460,124462],{"className":118633,"code":124461,"language":118635,"meta":275,"style":275},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[277,124463,124464],{"__ignoreMap":275},[152,124465,124466,124468,124471],{"class":281,"line":282},[152,124467,26223],{"class":285},[152,124469,124470],{"class":289}," +x",[152,124472,124414],{"class":289},[416,124474,124475],{"start":329},[419,124476,124477],{},"启动VNC服务器：",[270,124479,124481],{"className":118633,"code":124480,"language":118635,"meta":275,"style":275},"vncserver -geometry 1920x1080 -localhost=0\n",[277,124482,124483],{"__ignoreMap":275},[152,124484,124485,124488,124491,124494],{"class":281,"line":282},[152,124486,124487],{"class":285},"vncserver",[152,124489,124490],{"class":293}," -geometry",[152,124492,124493],{"class":289}," 1920x1080",[152,124495,124496],{"class":293}," -localhost=0\n",[19,124498,124499],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124501,124502],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[416,124504,124505],{"start":343},[419,124506,124507],{},"查看已开启的VNC服务器：",[270,124509,124511],{"className":118633,"code":124510,"language":118635,"meta":275,"style":275},"vncserver -list\n",[277,124512,124513],{"__ignoreMap":275},[152,124514,124515,124517],{"class":281,"line":282},[152,124516,124487],{"class":285},[152,124518,124519],{"class":293}," -list\n",[19,124521,124522],{},[401,124523],{"alt":275,"src":124524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[416,124526,124527],{"start":348},[419,124528,124529],{},"连接到VNC服务器：",[19,124531,124532],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[416,124534,124535],{"start":362},[419,124536,124537],{},"停止VNC服务器：",[19,124539,124540],{},"如果需要停止VNC服务器，可以使用以下命令：",[270,124542,124544],{"className":118633,"code":124543,"language":118635,"meta":275,"style":275},"vncserver -kill :1\n",[277,124545,124546],{"__ignoreMap":275},[152,124547,124548,124550,124553],{"class":281,"line":282},[152,124549,124487],{"class":285},[152,124551,124552],{"class":293}," -kill",[152,124554,124555],{"class":289}," :1\n",[19,124557,124558],{},"将:1替换为你实际使用的显示编号。",[19,124560,124561],{},[401,124562],{"alt":275,"src":124563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124565,124566],{},[401,124567],{"alt":275,"src":124568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[1760,124570,124572],{"id":124571},"_74-usb端口设置","7.4 USB端口设置",[19,124574,124575],{},[694,124576,124577],{},"首先先配置好权限",[270,124579,124581],{"className":118633,"code":124580,"language":118635,"meta":275,"style":275},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[277,124582,124583,124588,124601,124608,124613],{"__ignoreMap":275},[152,124584,124585],{"class":281,"line":282},[152,124586,124587],{"class":866},"# 将用户权限提高\n",[152,124589,124590,124592,124594,124596,124599],{"class":281,"line":303},[152,124591,26188],{"class":285},[152,124593,28178],{"class":289},[152,124595,28181],{"class":293},[152,124597,124598],{"class":289}," dialout",[152,124600,28186],{"class":483},[152,124602,124603,124605],{"class":281,"line":310},[152,124604,28205],{"class":285},[152,124606,124607],{"class":289}," dialout\n",[152,124609,124610],{"class":281,"line":324},[152,124611,124612],{"class":866},"# 查看下面命令是否输出dialout（若输出才正常）\n",[152,124614,124615],{"class":281,"line":329},[152,124616,124617],{"class":285},"groups\n",[19,124619,124620],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[14,124622,124624],{"id":124623},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124626,124627,124630],{},[694,124628,124629],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124632,124633,124636],{},[694,124634,124635],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124638,124639],{},[694,124640,124641],{},"流程如下：",[19,124643,124644],{},"（1）.查找设备idVendor和idProduct",[19,124646,124647,124648,124651],{},"接入两个USB设备，在终端调用指令",[277,124649,124650],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124653,124654],{},[401,124655],{"alt":275,"src":124656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124658,124659,124660,124663],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[277,124661,124662],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124665,124666],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124668,124669],{},"（2）.编写映射规则",[19,124671,124672,124673,124676],{},"在",[277,124674,124675],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[270,124678,124680],{"className":118633,"code":124679,"language":118635,"meta":275,"style":275},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[277,124681,124682],{"__ignoreMap":275},[152,124683,124684,124686,124688],{"class":281,"line":282},[152,124685,26188],{"class":285},[152,124687,119920],{"class":289},[152,124689,124690],{"class":289}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124692,124693],{},"输入如下内容：",[270,124695,124697],{"className":118633,"code":124696,"language":118635,"meta":275,"style":275},"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",[277,124698,124699,124729],{"__ignoreMap":275},[152,124700,124701,124704,124706,124709,124712,124715,124718,124720,124723,124726],{"class":281,"line":282},[152,124702,124703],{"class":483},"KERNEL",[152,124705,1864],{"class":476},[152,124707,124708],{"class":289},"=\"ttyUSB*\",",[152,124710,124711],{"class":285}," ATTRS",[152,124713,124714],{"class":289},"{idVendor}==",[152,124716,124717],{"class":285},"\"10c4\"",[152,124719,2186],{"class":285},[152,124721,124722],{"class":289}," ATTRS{idProduct}==\"ea60\",",[152,124724,124725],{"class":289}," MODE:=\"0777\",",[152,124727,124728],{"class":289}," SYMLINK+=\"mylidar\"\n",[152,124730,124731,124733,124735,124737,124739,124741,124744,124746,124749,124751],{"class":281,"line":303},[152,124732,124703],{"class":483},[152,124734,1864],{"class":476},[152,124736,124708],{"class":289},[152,124738,124711],{"class":285},[152,124740,124714],{"class":289},[152,124742,124743],{"class":285},"\"1a86\"",[152,124745,2186],{"class":285},[152,124747,124748],{"class":289}," ATTRS{idProduct}==\"7523\",",[152,124750,124725],{"class":289},[152,124752,124753],{"class":289}," SYMLINK+=\"mycar\"\n",[19,124755,124756],{},"代码解释：",[698,124758,124759,124762,124765,124768],{},[419,124760,124761],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[419,124763,124764],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[419,124766,124767],{},"SYMLINK是符号连接，即绑定的别名；",[419,124769,124770],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,124772,124773,124774,124777,124780],{},"***小提示：***",[25168,124775,124776],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[277,124778,124779],{},"\u002Fetc\u002Fudev\u002Frule.d",[25168,124781,124782],{},"目录即可。",[19,124784,124785],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,124787,124788],{},"（3）.使规则生效",[19,124790,124791],{},"在终端下输入如下指令：",[270,124793,124795],{"className":118633,"code":124794,"language":118635,"meta":275,"style":275},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[277,124796,124797,124802,124814,124825,124829,124834,124847],{"__ignoreMap":275},[152,124798,124799],{"class":281,"line":282},[152,124800,124801],{"class":866},"# Ubuntu用下方命令\n",[152,124803,124804,124806,124808,124811],{"class":281,"line":303},[152,124805,26188],{"class":285},[152,124807,121385],{"class":289},[152,124809,124810],{"class":289}," udev",[152,124812,124813],{"class":289}," reload\n",[152,124815,124816,124818,124820,124822],{"class":281,"line":310},[152,124817,26188],{"class":285},[152,124819,121385],{"class":289},[152,124821,124810],{"class":289},[152,124823,124824],{"class":289}," restart\n",[152,124826,124827],{"class":281,"line":324},[152,124828,307],{"emptyLinePlaceholder":306},[152,124830,124831],{"class":281,"line":329},[152,124832,124833],{"class":866},"#Fedora用下方命令\n",[152,124835,124836,124838,124841,124844],{"class":281,"line":343},[152,124837,26188],{"class":285},[152,124839,124840],{"class":289}," udevadm",[152,124842,124843],{"class":289}," control",[152,124845,124846],{"class":293}," --reload\n",[152,124848,124849,124851,124853],{"class":281,"line":348},[152,124850,26188],{"class":285},[152,124852,124840],{"class":289},[152,124854,124855],{"class":289}," trigger\n",[19,124857,124858],{},"再重新插拔设备即可。",[19,124860,124861],{},"（4）.测试",[19,124863,124864],{},"终端下输入如下指令",[270,124866,124868],{"className":118633,"code":124867,"language":118635,"meta":275,"style":275},"ll \u002Fdev | grep ttyUSB\n",[277,124869,124870],{"__ignoreMap":275},[152,124871,124872,124875,124878,124880,124882],{"class":281,"line":282},[152,124873,124874],{"class":285},"ll",[152,124876,124877],{"class":289}," \u002Fdev",[152,124879,26720],{"class":476},[152,124881,31573],{"class":285},[152,124883,124884],{"class":289}," ttyUSB\n",[19,124886,124887],{},"运行结果如下：",[19,124889,124890],{},[401,124891],{"alt":275,"src":124892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124894,124895,124896,124899],{},"也可以多次插拔USB设备，会发现设备端口",[277,124897,124898],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124901,124902],{},[694,124903,119301],{},[19,124905,124906],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[14,124908,124910],{"id":124909},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124912,124913,124915],{},[694,124914,124629],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124917,124918,124920],{},[694,124919,124635],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124922,124923],{},[694,124924,124641],{},[19,124926,124927],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124929,124930],{},"调用如下指令查看第一台雷达的USB信息：",[270,124932,124934],{"className":118633,"code":124933,"language":118635,"meta":275,"style":275},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[277,124935,124936,124956],{"__ignoreMap":275},[152,124937,124938,124941,124943,124946,124949,124951,124953],{"class":281,"line":282},[152,124939,124940],{"class":285},"udevadm",[152,124942,71158],{"class":289},[152,124944,124945],{"class":293}," --attribute-walk",[152,124947,124948],{"class":293}," --name=\u002Fdev\u002FttyUSB0",[152,124950,26720],{"class":476},[152,124952,31573],{"class":285},[152,124954,124955],{"class":289}," KERNELS\n",[152,124957,124958,124960,124962,124964,124967,124969,124971],{"class":281,"line":303},[152,124959,124940],{"class":285},[152,124961,71158],{"class":289},[152,124963,124945],{"class":293},[152,124965,124966],{"class":293}," --name=\u002Fdev\u002FttyACM0",[152,124968,26720],{"class":476},[152,124970,31573],{"class":285},[152,124972,124955],{"class":289},[19,124974,124975],{},[401,124976],{"alt":275,"src":124977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124979,124980],{},"调用如下指令查看第二台雷达的USB信息：",[270,124982,124984],{"className":118633,"code":124983,"language":118635,"meta":275,"style":275},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[277,124985,124986],{"__ignoreMap":275},[152,124987,124988,124990,124992,124994,124997,124999,125001],{"class":281,"line":282},[152,124989,124940],{"class":285},[152,124991,71158],{"class":289},[152,124993,124945],{"class":293},[152,124995,124996],{"class":293}," --name=\u002Fdev\u002FttyUSB1",[152,124998,26720],{"class":476},[152,125000,31573],{"class":285},[152,125002,124955],{"class":289},[19,125004,125005,125006,125009,125010,125013,125014,125017],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[277,125007,125008],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[277,125011,125012],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[694,125015,125016],{},"唯一性标识","”。",[19,125019,124669],{},[19,125021,124672,125022,125024],{},[277,125023,124675],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[270,125026,125027],{"className":118633,"code":124679,"language":118635,"meta":275,"style":275},[277,125028,125029],{"__ignoreMap":275},[152,125030,125031,125033,125035],{"class":281,"line":282},[152,125032,26188],{"class":285},[152,125034,119920],{"class":289},[152,125036,124690],{"class":289},[270,125038,125040],{"className":118633,"code":125039,"language":118635,"meta":275,"style":275},"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",[277,125041,125042,125071],{"__ignoreMap":275},[152,125043,125044,125046,125048,125050,125053,125055,125058,125061,125063,125066,125068],{"class":281,"line":282},[152,125045,124703],{"class":483},[152,125047,1864],{"class":476},[152,125049,124708],{"class":289},[152,125051,125052],{"class":483}," KERNELS",[152,125054,1864],{"class":476},[152,125056,125057],{"class":289},"=\"1-1.3:1.0\",",[152,125059,125060],{"class":285}," MODE:",[152,125062,1864],{"class":289},[152,125064,125065],{"class":285},"\"0777\"",[152,125067,2186],{"class":285},[152,125069,125070],{"class":289}," SYMLINK+=\"rplidar_front\"\n",[152,125072,125073,125075,125077,125079,125081,125083,125086,125088,125090,125092,125094],{"class":281,"line":303},[152,125074,124703],{"class":483},[152,125076,1864],{"class":476},[152,125078,124708],{"class":289},[152,125080,125052],{"class":483},[152,125082,1864],{"class":476},[152,125084,125085],{"class":289},"=\"1-1.4:1.0\",",[152,125087,125060],{"class":285},[152,125089,1864],{"class":289},[152,125091,125065],{"class":285},[152,125093,2186],{"class":285},[152,125095,125096],{"class":289}," SYMLINK+=\"rplidar_back\"\n",[19,125098,124788],{},[19,125100,124791],{},[270,125102,125103],{"className":118633,"code":124794,"language":118635,"meta":275,"style":275},[277,125104,125105,125109,125119,125129,125133,125137,125147],{"__ignoreMap":275},[152,125106,125107],{"class":281,"line":282},[152,125108,124801],{"class":866},[152,125110,125111,125113,125115,125117],{"class":281,"line":303},[152,125112,26188],{"class":285},[152,125114,121385],{"class":289},[152,125116,124810],{"class":289},[152,125118,124813],{"class":289},[152,125120,125121,125123,125125,125127],{"class":281,"line":310},[152,125122,26188],{"class":285},[152,125124,121385],{"class":289},[152,125126,124810],{"class":289},[152,125128,124824],{"class":289},[152,125130,125131],{"class":281,"line":324},[152,125132,307],{"emptyLinePlaceholder":306},[152,125134,125135],{"class":281,"line":329},[152,125136,124833],{"class":866},[152,125138,125139,125141,125143,125145],{"class":281,"line":343},[152,125140,26188],{"class":285},[152,125142,124840],{"class":289},[152,125144,124843],{"class":289},[152,125146,124846],{"class":293},[152,125148,125149,125151,125153],{"class":281,"line":348},[152,125150,26188],{"class":285},[152,125152,124840],{"class":289},[152,125154,124855],{"class":289},[19,125156,124858],{},[19,125158,124861],{},[19,125160,124864,125161,125164],{},[277,125162,125163],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125166,125167],{},[401,125168],{"alt":275,"src":125169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125171,125172],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125174,125175,125177],{},[694,125176,119301],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[14,125179,125181],{"id":125180},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125183,125184],{},"（1）.查看所连接的主机USB接口的信息",[270,125186,125188],{"className":118633,"code":125187,"language":118635,"meta":275,"style":275},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[277,125189,125190,125220],{"__ignoreMap":275},[152,125191,125192,125194,125196,125199,125201,125203,125205,125207,125210,125213,125215,125218],{"class":281,"line":282},[152,125193,124940],{"class":285},[152,125195,71158],{"class":289},[152,125197,125198],{"class":293}," -a",[152,125200,799],{"class":293},[152,125202,30021],{"class":483},[152,125204,124940],{"class":285},[152,125206,71158],{"class":289},[152,125208,125209],{"class":293}," -q",[152,125211,125212],{"class":289}," path",[152,125214,26726],{"class":293},[152,125216,125217],{"class":289}," \u002Fdev\u002FttyACM0",[152,125219,1825],{"class":483},[152,125221,125222,125224,125226,125228,125230,125232,125234,125236,125238,125240,125242,125245],{"class":281,"line":303},[152,125223,124940],{"class":285},[152,125225,71158],{"class":289},[152,125227,125198],{"class":293},[152,125229,799],{"class":293},[152,125231,30021],{"class":483},[152,125233,124940],{"class":285},[152,125235,71158],{"class":289},[152,125237,125209],{"class":293},[152,125239,125212],{"class":289},[152,125241,26726],{"class":293},[152,125243,125244],{"class":289}," \u002Fdev\u002FttyUSB0",[152,125246,1825],{"class":483},[19,125248,125249],{},[401,125250],{"alt":275,"src":125251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125253,125254],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125256,124669],{},[19,125258,124672,125259,125024],{},[277,125260,124675],{},[270,125262,125263],{"className":118633,"code":124679,"language":118635,"meta":275,"style":275},[277,125264,125265],{"__ignoreMap":275},[152,125266,125267,125269,125271],{"class":281,"line":282},[152,125268,26188],{"class":285},[152,125270,119920],{"class":289},[152,125272,124690],{"class":289},[270,125274,125276],{"className":118633,"code":125275,"language":118635,"meta":275,"style":275},"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",[277,125277,125278,125306,125332],{"__ignoreMap":275},[152,125279,125280,125282,125284,125287,125289,125291,125293,125295,125298,125301,125303],{"class":281,"line":282},[152,125281,124703],{"class":483},[152,125283,1864],{"class":476},[152,125285,125286],{"class":289},"=\"ttyACM*\",",[152,125288,124711],{"class":285},[152,125290,124714],{"class":289},[152,125292,124743],{"class":285},[152,125294,2186],{"class":285},[152,125296,125297],{"class":289}," ATTRS{idProduct}==\"55d4\",",[152,125299,125300],{"class":289}," ATTRS{serial}==\"0001\",",[152,125302,124725],{"class":289},[152,125304,125305],{"class":289}," SYMLINK+=\"ttyACM_MCU\"\n",[152,125307,125308,125310,125312,125314,125316,125318,125320,125322,125324,125327,125329],{"class":281,"line":303},[152,125309,124703],{"class":483},[152,125311,1864],{"class":476},[152,125313,125286],{"class":289},[152,125315,124711],{"class":285},[152,125317,124714],{"class":289},[152,125319,124743],{"class":285},[152,125321,2186],{"class":285},[152,125323,125297],{"class":289},[152,125325,125326],{"class":289}," ATTRS{serial}==\"0002\",",[152,125328,124725],{"class":289},[152,125330,125331],{"class":289}," SYMLINK+=\"ttyACM_Lidar\"\n",[152,125333,125334,125336,125338,125340,125342,125344,125346,125348,125350,125352],{"class":281,"line":310},[152,125335,124703],{"class":483},[152,125337,1864],{"class":476},[152,125339,124708],{"class":289},[152,125341,124711],{"class":285},[152,125343,124714],{"class":289},[152,125345,124743],{"class":285},[152,125347,2186],{"class":285},[152,125349,124748],{"class":289},[152,125351,124725],{"class":289},[152,125353,125354],{"class":289}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125356,124788],{},[19,125358,124791],{},[270,125360,125361],{"className":118633,"code":124794,"language":118635,"meta":275,"style":275},[277,125362,125363,125367,125377,125387,125391,125395,125405],{"__ignoreMap":275},[152,125364,125365],{"class":281,"line":282},[152,125366,124801],{"class":866},[152,125368,125369,125371,125373,125375],{"class":281,"line":303},[152,125370,26188],{"class":285},[152,125372,121385],{"class":289},[152,125374,124810],{"class":289},[152,125376,124813],{"class":289},[152,125378,125379,125381,125383,125385],{"class":281,"line":310},[152,125380,26188],{"class":285},[152,125382,121385],{"class":289},[152,125384,124810],{"class":289},[152,125386,124824],{"class":289},[152,125388,125389],{"class":281,"line":324},[152,125390,307],{"emptyLinePlaceholder":306},[152,125392,125393],{"class":281,"line":329},[152,125394,124833],{"class":866},[152,125396,125397,125399,125401,125403],{"class":281,"line":343},[152,125398,26188],{"class":285},[152,125400,124840],{"class":289},[152,125402,124843],{"class":289},[152,125404,124846],{"class":293},[152,125406,125407,125409,125411],{"class":281,"line":348},[152,125408,26188],{"class":285},[152,125410,124840],{"class":289},[152,125412,124855],{"class":289},[19,125414,125415,125416],{},"再重新插拔设备即可，或者 ",[694,125417,125418],{},"直接重启系统。",[19,125420,124861],{},[19,125422,124864,125423,125164],{},[277,125424,125163],{},[19,125426,125427],{},[401,125428],{"alt":275,"src":125429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125431,125172],{},[19,125433,125434,125436],{},[694,125435,119301],{}," 一些设备可能没有串口号等。",[14,125438,125440],{"id":125439},"_744-其他注意事项","7.4.4 其他注意事项",[19,125442,125443,125444,125446,125447,125450,125451,20025,125454,125457,125458,125460],{},"并非所有的USB设备端口号都是",[277,125445,124898],{},"的格式，比如Arduino的端口号可能是",[277,125448,125449],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[277,125452,125453],{},"videon",[277,125455,125456],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[277,125459,125453],{},"端口，绑定时需要关联的也是该接口。",[19,125462,125463,125464,125467,125468,125471,125472,125474,125475,125478,125479,125482,125483,125486,125487,125486,125490,125486,125493,29984],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[277,125465,125466],{},"KERNEL==\"ttyUSB*\"","修改为",[277,125469,125470],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[277,125473,125466],{},"修改为类似于",[277,125476,125477],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[277,125480,125481],{},"video[0,2,4,6]","表示可以绑定的端口为",[277,125484,125485],{},"video0","或",[277,125488,125489],{},"video2",[277,125491,125492],{},"video4",[277,125494,125495],{},"video6",[1760,125497,125499],{"id":125498},"_75-挂载内网网页","7.5 挂载内网网页",[19,125501,125502],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125504,125505],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125507,125508],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125510,125511,125512],{},"Termux 下载地址（F-Droid）：",[69,125513,125514],{"href":125514,"rel":125515},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[245],[19,125517,125518],{},"首先打开app后，先更新软件缓存：",[270,125520,125522],{"className":118633,"code":125521,"language":118635,"meta":275,"style":275},"pkg update\n",[277,125523,125524],{"__ignoreMap":275},[152,125525,125526,125529],{"class":281,"line":282},[152,125527,125528],{"class":285},"pkg",[152,125530,27848],{"class":289},[19,125532,125533],{},"然后换源",[270,125535,125537],{"className":118633,"code":125536,"language":118635,"meta":275,"style":275},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[277,125538,125539],{"__ignoreMap":275},[152,125540,125541,125543,125546],{"class":281,"line":282},[152,125542,124411],{"class":285},[152,125544,125545],{"class":483}," $PREFIX",[152,125547,125548],{"class":289},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125550,125551],{},"将该文件内容替换为下面：",[270,125553,125555],{"className":118633,"code":125554,"language":118635,"meta":275,"style":275},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[277,125556,125557],{"__ignoreMap":275},[152,125558,125559,125562,125565,125568],{"class":281,"line":282},[152,125560,125561],{"class":285},"deb",[152,125563,125564],{"class":289}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[152,125566,125567],{"class":289}," stable",[152,125569,125570],{"class":289}," main\n",[698,125572,125573,125600],{},[419,125574,125575,125576,125578,125579],{},"如果你使用的是",[277,125577,124411],{},"编辑器：",[698,125580,125581,125588,125594],{},[419,125582,125583,125584,125587],{},"按 ",[277,125585,125586],{},"Ctrl+O"," 保存文件。",[419,125589,125583,125590,125593],{},[277,125591,125592],{},"Enter"," 确认文件名。",[419,125595,125583,125596,125599],{},[277,125597,125598],{},"Ctrl+X"," 退出编辑器。",[419,125601,125575,125602,125578,125605],{},[277,125603,125604],{},"vim",[698,125606,125607,125613],{},[419,125608,125583,125609,125612],{},[277,125610,125611],{},"Esc"," 退出编辑模式。",[419,125614,125615,125616,125618],{},"输入 ",[277,125617,120558],{}," 保存并退出。",[19,125620,125621],{},"接下来重新更新软件源：",[270,125623,125625],{"className":118633,"code":125624,"language":118635,"meta":275,"style":275},"pkg update && pkg upgrade\n",[277,125626,125627],{"__ignoreMap":275},[152,125628,125629,125631,125633,125635,125637],{"class":281,"line":282},[152,125630,125528],{"class":285},[152,125632,118684],{"class":289},[152,125634,27797],{"class":483},[152,125636,125528],{"class":285},[152,125638,118670],{"class":289},[19,125640,125641],{},"安装python：",[270,125643,125645],{"className":118633,"code":125644,"language":118635,"meta":275,"style":275},"pkg install python\n",[277,125646,125647],{"__ignoreMap":275},[152,125648,125649,125651,125653],{"class":281,"line":282},[152,125650,125528],{"class":285},[152,125652,25446],{"class":289},[152,125654,125655],{"class":289}," python\n",[19,125657,125658,28078],{},[694,125659,125660],{},"通过Termux访问设备存储",[19,125662,125663],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[270,125665,125667],{"className":118633,"code":125666,"language":118635,"meta":275,"style":275},"termux-setup-storage\n",[277,125668,125669],{"__ignoreMap":275},[152,125670,125671],{"class":281,"line":282},[152,125672,125666],{"class":285},[416,125674,125675],{},[419,125676,125677,28078,125680],{},[694,125678,125679],{},"进入HTML文件所在的目录",[416,125681,125682],{},[419,125683,125684,125685,125687],{},"使用",[277,125686,102613],{},"命令进入HTML文件所在的目录：",[270,125689,125691],{"className":118633,"code":125690,"language":118635,"meta":275,"style":275},"cd ~\u002Fyour_html_folder\n",[277,125692,125693],{"__ignoreMap":275},[152,125694,125695,125697],{"class":281,"line":282},[152,125696,102613],{"class":293},[152,125698,125699],{"class":289}," ~\u002Fyour_html_folder\n",[416,125701,125702],{"start":303},[419,125703,125704,28078,125707,125712,125729],{},[694,125705,125706],{},"启动Python HTTP服务器",[416,125708,125709],{},[419,125710,125711],{},"运行以下命令启动一个简单的HTTP服务器：",[270,125713,125715],{"className":118633,"code":125714,"language":118635,"meta":275,"style":275},"python -m http.server 8000\n",[277,125716,125717],{"__ignoreMap":275},[152,125718,125719,125721,125723,125726],{"class":281,"line":282},[152,125720,31717],{"class":285},[152,125722,102219],{"class":293},[152,125724,125725],{"class":289}," http.server",[152,125727,125728],{"class":293}," 8000\n",[416,125730,125731],{"start":310},[419,125732,125733,125734,125737],{},"这会在端口",[277,125735,125736],{},"8000","上启动一个Web服务器。",[698,125739,125740],{},[419,125741,125742],{},"启动服务器后，Termux会显示日志信息，例如：",[270,125744,125746],{"className":122153,"code":125745,"language":122155,"meta":122156,"style":275},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[277,125747,125748],{"__ignoreMap":275},[152,125749,125750],{"class":281,"line":282},[152,125751,125745],{},[698,125753,125754],{},[419,125755,125756],{},"这表示服务器已成功启动。",[19,125758,125759],{},[694,125760,125761],{},"在浏览器中访问HTML文件",[416,125763,125764],{},[419,125765,125766,28078,125769,125774],{},[694,125767,125768],{},"在同一设备上访问",[416,125770,125771],{},[419,125772,125773],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[270,125775,125778],{"className":125776,"code":125777,"language":73001,"meta":275,"style":275},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[277,125779,125780],{"__ignoreMap":275},[152,125781,125782,125785],{"class":281,"line":282},[152,125783,125784],{"class":483},"http:",[152,125786,125787],{"class":866},"\u002F\u002Flocalhost:8000\n",[698,125789,125790],{},[419,125791,125792,125793,125796],{},"如果HTML文件中有",[277,125794,125795],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[1760,125798,125800],{"id":125799},"_76-linux重点知识","7.6 Linux重点知识",[14,125802,125804],{"id":125803},"_761-关于点的说明","7.6.1 关于点的说明",[19,125806,125807],{},[401,125808],{"alt":275,"src":125809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125811,125812],{},"一点本目录，两点上目录",[14,125814,125816],{"id":125815},"_762-目录","7.6.2 目录",[262,125818,125820],{"id":125819},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125822,125823],{},[694,125824,125825],{},"\u002Fboot:",[19,125827,125828],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125830,125831],{},[694,125832,125833],{},"\u002Fetc:",[19,125835,125836],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125838,125839],{},[694,125840,125841],{},"\u002Flib：",[19,125843,125844],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125846,125847],{},[694,125848,125849],{},"\u002Fsys:",[19,125851,125852],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[262,125854,125856],{"id":125855},"_7622-指令集合","7.6.2.2 指令集合",[19,125858,125859],{},[694,125860,125861],{},"\u002Fbin:",[19,125863,125864],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125866,125867],{},[694,125868,125869],{},"\u002Fsbin:",[19,125871,125872],{},"只有系统管理员才能使用的程序和指令",[262,125874,125876],{"id":125875},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125878,125879],{},[694,125880,125881],{},"\u002Fdev:",[19,125883,125884],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125886,125887],{},[694,125888,125889],{},"\u002Fmedia:",[19,125891,125892],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125894,125895],{},[694,125896,125897],{},"\u002Fmnt:",[19,125899,125900],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[262,125902,125904],{"id":125903},"_7624-临时文件","7.6.2.4 临时文件",[19,125906,125907],{},[694,125908,125909],{},"\u002Frun:",[19,125911,125912],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125914,125915],{},[694,125916,125917],{},"\u002Flost+found:",[19,125919,125920],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125922,125923],{},[694,125924,125925],{},"\u002Ftmp:",[19,125927,125928],{},"这个目录是用来存放一些临时文件的",[262,125930,125932],{"id":125931},"_7625-账户","7.6.2.5 账户",[19,125934,125935],{},[694,125936,125937],{},"\u002Froot：",[19,125939,125940],{},"系统管理员的用户主目录",[19,125942,125943,28078],{},[694,125944,125945],{},"\u002Fhome",[19,125947,125948],{},"用户的主目录，以用户的账号命名的",[19,125950,125951,28078],{},[694,125952,125953],{},"\u002Fusr",[19,125955,125956],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125958,125959],{},[694,125960,125961],{},"\u002Fusr\u002Fbin：",[19,125963,125964],{},"系统用户使用的应用程序与指令",[19,125966,125967],{},[694,125968,125969],{},"\u002Fusr\u002Fsbin：",[19,125971,125972],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125974,125975],{},[694,125976,125977],{},"\u002Fusr\u002Fsrc：",[19,125979,125980],{},"内核源代码默认的放置目录",[262,125982,125984],{"id":125983},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125986,125987],{},[694,125988,125989],{},"\u002Fvar：",[19,125991,125992],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125994,125995],{},[694,125996,125997],{},"\u002Fproc:",[19,125999,126000,126001,126004],{},"管理 ",[694,126002,126003],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[262,126006,126008],{"id":126007},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126010,126011],{},[694,126012,126013],{},"\u002Fopt:",[19,126015,126016],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126018,126019],{},[694,126020,126021],{},"\u002Fsrv:",[19,126023,126024],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[14,126026,126028],{"id":126027},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126030,126031],{},[401,126032],{"alt":275,"src":126033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126035,126036],{},"windows-->linux:",[19,126038,126039],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126041,126042],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126044,126045],{},"linux传输文件到windows",[19,126047,126048],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[14,126050,126052],{"id":126051},"_764-易忘知识","7.6.4 易忘知识",[19,126054,126055],{},"操作系统内核查看",[270,126057,126058],{"className":118633,"code":122627,"language":118635,"meta":275,"style":275},[277,126059,126060],{"__ignoreMap":275},[152,126061,126062,126064],{"class":281,"line":282},[152,126063,71541],{"class":285},[152,126065,122636],{"class":293},[19,126067,126068],{},[401,126069],{"alt":275,"src":126070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126072,126073],{},[401,126074],{"alt":275,"src":126075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[270,126077,126079],{"className":118633,"code":126078,"language":118635,"meta":275,"style":275},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[277,126080,126081,126093],{"__ignoreMap":275},[152,126082,126083,126085,126088,126091],{"class":281,"line":282},[152,126084,122844],{"class":285},[152,126086,126087],{"class":289}," mvtest",[152,126089,126090],{"class":289}," mvtest2",[152,126092,4317],{"class":483},[152,126094,126095],{"class":281,"line":303},[152,126096,126097],{"class":285},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126099,126100],{},[401,126101],{"alt":275,"src":126102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126104,126105],{},[401,126106],{"alt":275,"src":126107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126109,126110,126111,126114],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[277,126112,126113],{},"du -a"," 可以快速查看磁盘使用细节。",[14,126116,126118],{"id":126117},"_765-vim","7.6.5 Vim",[19,126120,126121],{},[401,126122],{"alt":275,"src":126123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126125,126126],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126128,126129],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126131,126132],{},[694,126133,126134],{},"1.命令模式：",[19,126136,126137],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126139,126140],{},"x 删除当前光标所在处的字符",[19,126142,126143],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126145,126146],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126148,126149],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126151,126152],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126154,126155],{},"dd 剪切当前行",[19,126157,126158],{},"yy 复制当前行",[19,126160,126161],{},"p 粘贴剪贴板内容到光标下方",[19,126163,126164],{},"P 粘贴剪贴板内容到光标上方",[19,126166,126167],{},"u 撤销上一次操作",[19,126169,126170],{},"ctrl+r 重做上一次操作",[19,126172,126173,126175],{},[2603,126174],{}," 保存文件",[19,126177,126178,126180],{},[2453,126179],{}," 退出Vim编辑器",[19,126182,126183,126185],{},[2453,126184],{},"! 强制退出Vim编辑器，不保存修改",[19,126187,126188],{},[694,126189,126190],{},"2.输入模式：",[19,126192,126193],{},[401,126194],{"alt":275,"src":126195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126197,126198],{},[694,126199,126200],{},"3.底线命令模式：",[19,126202,126203],{},[401,126204],{"alt":275,"src":126205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126207,126208],{},"按下esc可以退出底线命令模式",[14,126210,126212],{"id":126211},"_766-apt","7.6.6 apt",[19,126214,126215],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[14,126217,126219],{"id":126218},"_767-home与root的区别","7.6.7 home与root的区别",[19,126221,126222],{},[401,126223],{"alt":275,"src":126224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126226,126227],{},[401,126228],{"alt":275,"src":126229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126231,126232],{},[401,126233],{"alt":275,"src":126234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126236,126237],{},[401,126238],{"alt":275,"src":126239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[14,126241,126243],{"id":126242},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126245,126246],{},[69,126247,126248],{"href":126248,"rel":126249},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[245],[416,126251,126252,126255],{},[419,126253,126254],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[419,126256,126257],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126259,126260],{},[401,126261],{"alt":275,"src":126262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126264,126265],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126267,126268],{},[401,126269],{"alt":275,"src":126270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[270,126272,126274],{"className":122153,"code":126273,"language":122155,"meta":122156,"style":275},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[277,126275,126276,126281],{"__ignoreMap":275},[152,126277,126278],{"class":281,"line":282},[152,126279,126280],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[152,126282,126283],{"class":281,"line":303},[152,126284,126285],{},".\u002Fpycharm.sh\n",[19,126287,126288],{},"3️⃣创建.desktop文件",[19,126290,126291],{},[694,126292,126293],{},"原理：",[698,126295,126296,126306],{},[419,126297,126298,126299,126305],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[694,126300,126301,126304],{},[277,126302,126303],{},".desktop"," 文件"," 来识别应用。",[419,126307,126308,126310,126311],{},[277,126309,126303],{}," 文件相当于一个“应用注册表”，告诉系统：",[698,126312,126313,126316,126319,126322,126325],{},[419,126314,126315],{},"应用名字（Name）",[419,126317,126318],{},"图标（Icon）",[419,126320,126321],{},"执行命令（Exec）",[419,126323,126324],{},"分类（Categories）",[419,126326,126327],{},"是否需要终端（Terminal）",[270,126329,126331],{"className":122153,"code":126330,"language":122155,"meta":122156,"style":275},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[277,126332,126333,126338],{"__ignoreMap":275},[152,126334,126335],{"class":281,"line":282},[152,126336,126337],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[152,126339,126340],{"class":281,"line":303},[152,126341,126342],{},"nano pycharm.desktop\n",[19,126344,126345],{},"nano是一个命令行下的编辑器，也可以使用vim",[270,126347,126349],{"className":122153,"code":126348,"language":122155,"meta":122156,"style":275},"[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",[277,126350,126351,126356,126361,126366,126371,126376,126381,126386,126391,126396],{"__ignoreMap":275},[152,126352,126353],{"class":281,"line":282},[152,126354,126355],{},"[Desktop Entry]\n",[152,126357,126358],{"class":281,"line":303},[152,126359,126360],{},"Version=1.0\n",[152,126362,126363],{"class":281,"line":310},[152,126364,126365],{},"Type=Application\n",[152,126367,126368],{"class":281,"line":324},[152,126369,126370],{},"Name=PyCharm\n",[152,126372,126373],{"class":281,"line":329},[152,126374,126375],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[152,126377,126378],{"class":281,"line":343},[152,126379,126380],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[152,126382,126383],{"class":281,"line":348},[152,126384,126385],{},"Comment=JetBrains PyCharm IDE\n",[152,126387,126388],{"class":281,"line":362},[152,126389,126390],{},"Categories=Development;IDE;\n",[152,126392,126393],{"class":281,"line":367},[152,126394,126395],{},"Terminal=false\n",[152,126397,126398],{"class":281,"line":381},[152,126399,126400],{},"StartupWMClass=jetbrains-pycharm\n",[698,126402,126403,126409,126415,126421],{},[419,126404,126405,126408],{},[277,126406,126407],{},"Exec"," → 点击图标时执行的命令",[419,126410,126411,126414],{},[277,126412,126413],{},"Icon"," → 显示在菜单和桌面上的图标",[419,126416,126417,126420],{},[277,126418,126419],{},"Terminal=false"," → 不打开终端",[419,126422,126423,126426],{},[277,126424,126425],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126428,126429,126430],"blockquote",{},[19,126431,126432,126433,126435,126436],{},"可以理解成 ",[277,126434,126303],{}," 文件是 Linux 的 ",[694,126437,126438],{},"快捷方式配置文件",[19,126440,126441],{},"4️⃣设置可执行权限",[270,126443,126445],{"className":122153,"code":126444,"language":122155,"meta":122156,"style":275},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[277,126446,126447],{"__ignoreMap":275},[152,126448,126449],{"class":281,"line":282},[152,126450,126444],{},[19,126452,126453],{},"5️⃣桌面图标启动的话如下：",[270,126455,126457],{"className":122153,"code":126456,"language":122155,"meta":122156,"style":275},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[277,126458,126459,126464],{"__ignoreMap":275},[152,126460,126461],{"class":281,"line":282},[152,126462,126463],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[152,126465,126466],{"class":281,"line":303},[152,126467,126468],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[416,126470,126471],{"start":310},[419,126472,126473],{},"下载Appimage文件实现软件的安装",[19,126475,126476],{},"1️⃣先下载appimage",[19,126478,126479],{},[69,126480,126481],{"href":126481,"rel":126482},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[245],[19,126484,126485],{},[401,126486],{"alt":275,"src":126487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126489,126490],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126492,126493],{},[401,126494],{"alt":275,"src":126495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126497,126498],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126500,126501],{},[401,126502],{"alt":275,"src":126503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126505,126506],{},[401,126507],{"alt":275,"src":126508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126510,126511,126512,126515],{},"3️⃣给他们放在",[277,126513,126514],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126517,126518],{},"4️⃣给软件执行权限",[270,126520,126522],{"className":122153,"code":126521,"language":122155,"meta":122156,"style":275},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[277,126523,126524,126529],{"__ignoreMap":275},[152,126525,126526],{"class":281,"line":282},[152,126527,126528],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[152,126530,126531],{"class":281,"line":303},[152,126532,126533],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126535,126536],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[270,126538,126540],{"className":118633,"code":126539,"language":118635,"meta":275,"style":275},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[277,126541,126542,126549,126556,126562],{"__ignoreMap":275},[152,126543,126544,126546],{"class":281,"line":282},[152,126545,102613],{"class":293},[152,126547,126548],{"class":289}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[152,126550,126551,126553],{"class":281,"line":303},[152,126552,102620],{"class":285},[152,126554,126555],{"class":289}," .\u002Fqqmusic.desktop\n",[152,126557,126558,126560],{"class":281,"line":310},[152,126559,125604],{"class":285},[152,126561,126555],{"class":289},[152,126563,126564,126566,126568,126570],{"class":281,"line":324},[152,126565,26188],{"class":285},[152,126567,26191],{"class":289},[152,126569,124470],{"class":289},[152,126571,126555],{"class":289},[19,126573,126574,126576],{},[277,126575,102620],{},"：一个 Linux 命令，主要功能是：",[698,126578,126579,126582],{},[419,126580,126581],{},"如果文件不存在，就创建一个新的空文件",[419,126583,126584],{},"如果文件已存在，就更新该文件的最后修改时间",[270,126586,126588],{"className":122153,"code":126587,"language":122155,"meta":122156,"style":275},"[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",[277,126589,126590,126594,126599,126604,126609,126613,126618],{"__ignoreMap":275},[152,126591,126592],{"class":281,"line":282},[152,126593,126355],{},[152,126595,126596],{"class":281,"line":303},[152,126597,126598],{},"Name=QQ音乐\n",[152,126600,126601],{"class":281,"line":310},[152,126602,126603],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[152,126605,126606],{"class":281,"line":324},[152,126607,126608],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[152,126610,126611],{"class":281,"line":329},[152,126612,126365],{},[152,126614,126615],{"class":281,"line":343},[152,126616,126617],{},"Categories=Audio;Music;Player;\n",[152,126619,126620],{"class":281,"line":348},[152,126621,126622],{},"Comment=QQ Music Client for Linux\n",[19,126624,126625],{},"将文件复制进去",[19,126627,126628],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126630,126631],{},[401,126632],{"alt":275,"src":126633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126635,126636],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126638,126639],{},[401,126640],{"alt":275,"src":126641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126643,126644,126645,126648,126649,126652],{},"如果你用的不是KDE，那么也可以直接修改",[277,126646,126647],{},"qqmuic.desktop","：在exec的末尾加上",[277,126650,126651],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[270,126654,126656],{"className":122153,"code":126655,"language":122155,"meta":122156,"style":275},"[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",[277,126657,126658,126662,126666,126671,126675,126679,126683],{"__ignoreMap":275},[152,126659,126660],{"class":281,"line":282},[152,126661,126355],{},[152,126663,126664],{"class":281,"line":303},[152,126665,126598],{},[152,126667,126668],{"class":281,"line":310},[152,126669,126670],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[152,126672,126673],{"class":281,"line":324},[152,126674,126608],{},[152,126676,126677],{"class":281,"line":329},[152,126678,126365],{},[152,126680,126681],{"class":281,"line":343},[152,126682,126617],{},[152,126684,126685],{"class":281,"line":348},[152,126686,126622],{},[19,126688,126689],{},[401,126690],{"alt":275,"src":126691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126693,126694],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[270,126696,126698],{"className":122153,"code":126697,"language":122155,"meta":122156,"style":275},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[277,126699,126700],{"__ignoreMap":275},[152,126701,126702],{"class":281,"line":282},[152,126703,126697],{},[416,126705,126706],{"start":324},[419,126707,126708],{},"去Flathub上安装软件",[19,126710,126711],{},[69,126712,126713],{"href":126713,"rel":126714},"https:\u002F\u002Fflathub.org\u002F",[245],[19,126716,126717],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126719,126720],{},[401,126721],{"alt":275,"src":126722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[270,126724,126726],{"className":122153,"code":126725,"language":122155,"meta":122156,"style":275},"flatpak install flathub com.obsproject.Studio\n",[277,126727,126728],{"__ignoreMap":275},[152,126729,126730],{"class":281,"line":282},[152,126731,126725],{},[19,126733,126734],{},[401,126735],{"alt":275,"src":126736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126738,126739],{},"2️⃣运行软件",[19,126741,126742],{},"a.官方方式：",[19,126744,126745],{},[401,126746],{"alt":275,"src":126747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[270,126749,126750],{"className":122153,"code":126725,"language":122155,"meta":122156,"style":275},[277,126751,126752],{"__ignoreMap":275},[152,126753,126754],{"class":281,"line":282},[152,126755,126725],{},[19,126757,126758],{},"b.当普通软件运行：",[19,126760,126761],{},[401,126762],{"alt":275,"src":126763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,126765,126766],{},[401,126767],{"alt":275,"src":126768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1736,126770,126771],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":275,"searchDepth":303,"depth":303,"links":126773},[126774,126775,126780,126781,126787,126788],{"id":123506,"depth":303,"text":123507},{"id":123848,"depth":303,"text":123849,"children":126776},[126777,126778,126779],{"id":123852,"depth":310,"text":123853},{"id":123919,"depth":310,"text":123920},{"id":124180,"depth":310,"text":124181},{"id":124333,"depth":303,"text":124334},{"id":124571,"depth":303,"text":124572,"children":126782},[126783,126784,126785,126786],{"id":124623,"depth":310,"text":124624},{"id":124909,"depth":310,"text":124910},{"id":125180,"depth":310,"text":125181},{"id":125439,"depth":310,"text":125440},{"id":125498,"depth":303,"text":125499},{"id":125799,"depth":303,"text":125800,"children":126789},[126790,126791,126792,126793,126794,126795,126796,126797],{"id":125803,"depth":310,"text":125804},{"id":125815,"depth":310,"text":125816},{"id":126027,"depth":310,"text":126028},{"id":126051,"depth":310,"text":126052},{"id":126117,"depth":310,"text":126118},{"id":126211,"depth":310,"text":126212},{"id":126218,"depth":310,"text":126219},{"id":126242,"depth":310,"text":126243},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123498,"description":24991},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126804,"title":126805,"body":126806,"description":24991,"extension":1744,"meta":126810,"navigation":306,"path":126811,"seo":126812,"stem":126813,"__hash__":126814},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126807,"toc":126808},[],{"title":275,"searchDepth":303,"depth":303,"links":126809},[],{"category":31600},"\u002Fwiki\u002F2025-01-27-linux",{"title":126805,"description":24991},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126816,"title":126817,"body":126818,"description":126822,"extension":1744,"meta":127213,"navigation":306,"path":127214,"seo":127215,"stem":127216,"__hash__":127217},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126819,"toc":127211},[126820,126823,126827,126844,126847,126900,126904,126906,126946,126955,126959,126962,127203,127208],[19,126821,126822],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126824,126826],{"id":126825},"_1ubuntu环境配置","1.Ubuntu环境配置",[416,126828,126829,126832,126835,126838,126841],{},[419,126830,126831],{},"ubuntu环境换源",[419,126833,126834],{},"安装cuda",[419,126836,126837],{},"安装miniconda",[419,126839,126840],{},"安装pytorch",[419,126842,126843],{},"安装genesis",[19,126845,126846],{},"参考链接：",[270,126848,126850],{"className":272,"code":126849,"language":274,"meta":275,"style":275},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[277,126851,126852],{"__ignoreMap":275},[152,126853,126854,126857,126860,126863,126865,126868,126871,126873,126876,126879,126881,126884,126887,126889,126892,126895,126897],{"class":281,"line":282},[152,126855,126856],{"class":285},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[152,126858,126859],{"class":289},"=blogdetail",[152,126861,126862],{"class":483},"&sharetype",[152,126864,1864],{"class":476},[152,126866,126867],{"class":289},"blogdetail",[152,126869,126870],{"class":483},"&sharerId",[152,126872,1864],{"class":476},[152,126874,126875],{"class":289},"144728092",[152,126877,126878],{"class":483},"&sharerefer",[152,126880,1864],{"class":476},[152,126882,126883],{"class":289},"PC",[152,126885,126886],{"class":483},"&sharesource",[152,126888,1864],{"class":476},[152,126890,126891],{"class":289},"qq_69379513",[152,126893,126894],{"class":483},"&sharefrom",[152,126896,1864],{"class":476},[152,126898,126899],{"class":289},"from_link\n",[10,126901,126903],{"id":126902},"_2genesis-报错issue","2.Genesis 报错issue",[19,126905,126846],{},[270,126907,126908],{"className":272,"code":126849,"language":274,"meta":275,"style":275},[277,126909,126910],{"__ignoreMap":275},[152,126911,126912,126914,126916,126918,126920,126922,126924,126926,126928,126930,126932,126934,126936,126938,126940,126942,126944],{"class":281,"line":282},[152,126913,126856],{"class":285},[152,126915,126859],{"class":289},[152,126917,126862],{"class":483},[152,126919,1864],{"class":476},[152,126921,126867],{"class":289},[152,126923,126870],{"class":483},[152,126925,1864],{"class":476},[152,126927,126875],{"class":289},[152,126929,126878],{"class":483},[152,126931,1864],{"class":476},[152,126933,126883],{"class":289},[152,126935,126886],{"class":483},[152,126937,1864],{"class":476},[152,126939,126891],{"class":289},[152,126941,126894],{"class":483},[152,126943,1864],{"class":476},[152,126945,126899],{"class":289},[270,126947,126949],{"className":272,"code":126948,"language":274,"meta":275,"style":275},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[277,126950,126951],{"__ignoreMap":275},[152,126952,126953],{"class":281,"line":282},[152,126954,126948],{"class":285},[10,126956,126958],{"id":126957},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126960,126961],{},"hello_robot.py",[270,126963,126965],{"className":31715,"code":126964,"language":31717,"meta":275,"style":275},"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",[277,126966,126967,126973,126988,126992,127004,127016,127020,127033,127037,127056,127066,127076,127090,127094,127098,127103,127107,127117,127124,127138,127145,127155,127160,127164,127182,127187,127191,127198],{"__ignoreMap":275},[152,126968,126969,126971],{"class":281,"line":282},[152,126970,31729],{"class":476},[152,126972,46642],{"class":483},[152,126974,126975,126978,126981,126983,126985],{"class":281,"line":303},[152,126976,126977],{"class":483},"os.environ[",[152,126979,126980],{"class":289},"'PYOPENGL_PLATFORM'",[152,126982,6085],{"class":483},[152,126984,1864],{"class":476},[152,126986,126987],{"class":289}," 'glx'\n",[152,126989,126990],{"class":281,"line":310},[152,126991,307],{"emptyLinePlaceholder":306},[152,126993,126994,126996,126999,127001],{"class":281,"line":324},[152,126995,31729],{"class":476},[152,126997,126998],{"class":483}," genesis ",[152,127000,32720],{"class":476},[152,127002,127003],{"class":483}," gs\n",[152,127005,127006,127008,127011,127013],{"class":281,"line":329},[152,127007,32074],{"class":476},[152,127009,127010],{"class":483}," pynput ",[152,127012,31729],{"class":476},[152,127014,127015],{"class":483}," keyboard\n",[152,127017,127018],{"class":281,"line":343},[152,127019,307],{"emptyLinePlaceholder":306},[152,127021,127022,127025,127028,127030],{"class":281,"line":348},[152,127023,127024],{"class":483},"gs.init(",[152,127026,127027],{"class":6858},"backend",[152,127029,1864],{"class":476},[152,127031,127032],{"class":483},"gs.gpu)\n",[152,127034,127035],{"class":281,"line":362},[152,127036,307],{"emptyLinePlaceholder":306},[152,127038,127039,127042,127044,127047,127050,127052,127054],{"class":281,"line":367},[152,127040,127041],{"class":483},"scene ",[152,127043,1864],{"class":476},[152,127045,127046],{"class":483}," gs.Scene(",[152,127048,127049],{"class":6858},"show_viewer",[152,127051,1864],{"class":476},[152,127053,32813],{"class":293},[152,127055,1825],{"class":483},[152,127057,127058,127061,127063],{"class":281,"line":381},[152,127059,127060],{"class":483},"plane ",[152,127062,1864],{"class":476},[152,127064,127065],{"class":483}," scene.add_entity(gs.morphs.Plane())\n",[152,127067,127068,127071,127073],{"class":281,"line":386},[152,127069,127070],{"class":483},"franka ",[152,127072,1864],{"class":476},[152,127074,127075],{"class":483}," scene.add_entity(\n",[152,127077,127078,127081,127083,127085,127088],{"class":281,"line":932},[152,127079,127080],{"class":483},"    gs.morphs.MJCF(",[152,127082,46691],{"class":6858},[152,127084,1864],{"class":476},[152,127086,127087],{"class":289},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[152,127089,39384],{"class":483},[152,127091,127092],{"class":281,"line":942},[152,127093,1825],{"class":483},[152,127095,127096],{"class":281,"line":949},[152,127097,307],{"emptyLinePlaceholder":306},[152,127099,127100],{"class":281,"line":954},[152,127101,127102],{"class":483},"scene.build()\n",[152,127104,127105],{"class":281,"line":959},[152,127106,307],{"emptyLinePlaceholder":306},[152,127108,127109,127111,127114],{"class":281,"line":970},[152,127110,33284],{"class":476},[152,127112,127113],{"class":285}," on_press",[152,127115,127116],{"class":483},"(key):\n",[152,127118,127119,127122],{"class":281,"line":979},[152,127120,127121],{"class":476},"    try",[152,127123,5382],{"class":483},[152,127125,127126,127128,127131,127133,127136],{"class":281,"line":989},[152,127127,4147],{"class":476},[152,127129,127130],{"class":483}," key.char ",[152,127132,4592],{"class":476},[152,127134,127135],{"class":289}," 'q'",[152,127137,5382],{"class":483},[152,127139,127140,127142],{"class":281,"line":996},[152,127141,17347],{"class":476},[152,127143,127144],{"class":293}," False\n",[152,127146,127147,127150,127153],{"class":281,"line":1001},[152,127148,127149],{"class":476},"    except",[152,127151,127152],{"class":293}," AttributeError",[152,127154,5382],{"class":483},[152,127156,127157],{"class":281,"line":1006},[152,127158,127159],{"class":476},"        pass\n",[152,127161,127162],{"class":281,"line":1018},[152,127163,307],{"emptyLinePlaceholder":306},[152,127165,127166,127169,127171,127174,127177,127179],{"class":281,"line":1027},[152,127167,127168],{"class":483},"listener ",[152,127170,1864],{"class":476},[152,127172,127173],{"class":483}," keyboard.Listener(",[152,127175,127176],{"class":6858},"on_press",[152,127178,1864],{"class":476},[152,127180,127181],{"class":483},"on_press)\n",[152,127183,127184],{"class":281,"line":1037},[152,127185,127186],{"class":483},"listener.start()\n",[152,127188,127189],{"class":281,"line":1044},[152,127190,307],{"emptyLinePlaceholder":306},[152,127192,127193,127195],{"class":281,"line":1049},[152,127194,110000],{"class":476},[152,127196,127197],{"class":483}," listener.running:\n",[152,127199,127200],{"class":281,"line":1054},[152,127201,127202],{"class":483},"    scene.step()\n",[19,127204,127205],{},[401,127206],{"alt":275,"src":127207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1736,127209,127210],{},"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":275,"searchDepth":303,"depth":303,"links":127212},[],{"category":24993},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126817,"description":126822},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127219,"title":127220,"body":127221,"description":24991,"extension":1744,"meta":127236,"navigation":306,"path":127237,"seo":127238,"stem":127239,"__hash__":127240},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127222,"toc":127233},[127223,127226,127230],[10,127224,127220],{"id":127225},"_1-基础知识",[1760,127227,127229],{"id":127228},"_11-js的组成","1.1 js的组成",[19,127231,127232],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":275,"searchDepth":303,"depth":303,"links":127234},[127235],{"id":127228,"depth":303,"text":127229},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127220,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127242,"title":127243,"body":127244,"description":24991,"extension":1744,"meta":127383,"navigation":306,"path":127384,"seo":127385,"stem":127386,"__hash__":127387},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127245,"toc":127371},[127246,127249,127253,127256,127260,127270,127274,127277,127280,127283,127287,127294,127300,127304,127310,127321,127325,127328,127332,127335,127339,127342,127346,127349,127353,127356,127359,127362,127365,127368],[10,127247,127243],{"id":127248},"_2-vscode必备内容",[1760,127250,127252],{"id":127251},"_21-标签分类","2.1 标签分类",[19,127254,127255],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[1760,127257,127259],{"id":127258},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127261,127262,127263,127265,127266,127269],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[277,127264,2035],{}," 然后按 ",[277,127267,127268],{},"Tab","，快速自动生成基本结构。",[1760,127271,127273],{"id":127272},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127275,127276],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127278,127279],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127281,127282],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[1760,127284,127286],{"id":127285},"_24-视图缩放","2.4 视图缩放",[19,127288,127289,127290,127293],{},"缩放视图 ",[277,127291,127292],{},"ctrl+"," 可实现代码增大。",[19,127295,127296,127299],{},[277,127297,127298],{},"ctrl-"," 可实现代码减小。",[1760,127301,127303],{"id":127302},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127305,127306,127307,29984],{},"VSCode 新建文件快捷键为 ",[277,127308,127309],{},"ctrl+N",[19,127311,127312,127313,127316,127317,127320],{},"保存快捷键为 ",[277,127314,127315],{},"ctrl+S","，将文本保存为 ",[277,127318,127319],{},".html"," 文件。",[1760,127322,127324],{"id":127323},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127326,127327],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[1760,127329,127331],{"id":127330},"_27-vscode-icons","2.7 vscode-icons",[19,127333,127334],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[1760,127336,127338],{"id":127337},"_28-easy-less","2.8 Easy LESS",[19,127340,127341],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[1760,127343,127345],{"id":127344},"_29-会了吧插件","2.9 会了吧插件",[19,127347,127348],{},"会了吧插件可以展示代码中英语单词的意思。",[1760,127350,127352],{"id":127351},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127354,127355],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127357,127358],{},"②选定多个相同的单词:ctrl+D",[19,127360,127361],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127363,127364],{},"④全局替换某些单词:ctrl+h",[19,127366,127367],{},"⑤快速定位到某一行:ctrl+g",[19,127369,127370],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":275,"searchDepth":303,"depth":303,"links":127372},[127373,127374,127375,127376,127377,127378,127379,127380,127381,127382],{"id":127251,"depth":303,"text":127252},{"id":127258,"depth":303,"text":127259},{"id":127272,"depth":303,"text":127273},{"id":127285,"depth":303,"text":127286},{"id":127302,"depth":303,"text":127303},{"id":127323,"depth":303,"text":127324},{"id":127330,"depth":303,"text":127331},{"id":127337,"depth":303,"text":127338},{"id":127344,"depth":303,"text":127345},{"id":127351,"depth":303,"text":127352},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127243,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127389,"title":127390,"body":127391,"description":24991,"extension":1744,"meta":127550,"navigation":306,"path":127551,"seo":127552,"stem":127553,"__hash__":127554},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127392,"toc":127542},[127393,127396,127400,127410,127416,127422,127426,127435,127439,127444,127447,127450,127454,127457,127467,127476,127485,127494,127504,127511,127516,127521,127534],[10,127394,127390],{"id":127395},"_3-html文本与容器标签",[1760,127397,127399],{"id":127398},"_31-标题标签","3.1 标题标签",[19,127401,127402,127405,127406,127409],{},[277,127403,127404],{},"\u003Ch1>","我是一级标签",[277,127407,127408],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127411,127412,127405,127414],{},[277,127413,127404],{},[277,127415,127408],{},[19,127417,124672,127418,127421],{},[277,127419,127420],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[1760,127423,127425],{"id":127424},"_32-段落标签","3.2 段落标签",[19,127427,127428,127431,127432],{},[277,127429,127430],{},"\u003Cp>","....",[277,127433,127434],{},"\u003C\u002Fp>",[1760,127436,127438],{"id":127437},"_33-换行标签","3.3 换行标签",[19,127440,127441],{},[277,127442,127443],{},"\u003Cbr \u002F>",[19,127445,127446],{},"具有强制换行的作用",[19,127448,127449],{},"单标签",[1760,127451,127453],{"id":127452},"_34-文本格式化标签","3.4 文本格式化标签",[19,127455,127456],{},"提供粗体、斜体和下划线等效果",[19,127458,127459,127460,83876,127463,127466],{},"加粗：",[277,127461,127462],{},"\u003Cstrong>...\u003C\u002Fstrong>",[277,127464,127465],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127468,127469,127470,83876,127473,127466],{},"斜体：",[277,127471,127472],{},"\u003Cem>...\u003C\u002Fem>",[277,127474,127475],{},"\u003Ci>...\u003C\u002Fi>",[19,127477,127478,127479,83876,127482,127466],{},"删除线：",[277,127480,127481],{},"\u003Cdel>...\u003C\u002Fdel>",[277,127483,127484],{},"\u003Cs>...\u003C\u002Fs>",[19,127486,127487,127488,83876,127491,127466],{},"下划线：",[277,127489,127490],{},"\u003Cins>...\u003C\u002Fins>",[277,127492,127493],{},"\u003Cu>...\u003C\u002Fu>",[1760,127495,127497,127498,20025,127501,104030],{"id":127496},"_35-div和span标签","3.5 ",[277,127499,127500],{},"\u003Cdiv>",[277,127502,127503],{},"\u003Cspan>",[19,127505,127506,102355,127508,127510],{},[277,127507,127500],{},[277,127509,127503],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127512,127513],{},[277,127514,127515],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127517,127518],{},[277,127519,127520],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127522,127523,127524,127526,127527,127529,127530,127533],{},"两者特点：①",[277,127525,127500],{}," 标签用来布局，但一行通常只放一个 ",[277,127528,127500],{},"。可以理解为一个大盒子，独占一行，在 ",[277,127531,127532],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127535,78586,127536,127538,127539,127541],{},[277,127537,127503],{}," 标签也可用于布局，一行可以放多个 ",[277,127540,127503],{},"，可理解为小盒子。",{"title":275,"searchDepth":303,"depth":303,"links":127543},[127544,127545,127546,127547,127548],{"id":127398,"depth":303,"text":127399},{"id":127424,"depth":303,"text":127425},{"id":127437,"depth":303,"text":127438},{"id":127452,"depth":303,"text":127453},{"id":127496,"depth":303,"text":127549},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127390,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127556,"title":127557,"body":127558,"description":24991,"extension":1744,"meta":127755,"navigation":306,"path":127756,"seo":127757,"stem":127758,"__hash__":127759},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127559,"toc":127747},[127560,127563,127567,127570,127576,127583,127589,127595,127598,127601,127604,127607,127610,127613,127616,127620,127623,127626,127629,127635,127641,127647,127654,127658,127664,127670,127673,127676,127682,127688,127694,127697,127700,127704,127707,127717,127723,127727,127736,127740,127743],[10,127561,127557],{"id":127562},"_4-html图像与链接",[1760,127564,127566],{"id":127565},"_41-图像标签","4.1 图像标签",[19,127568,127569],{},"（1）标签",[19,127571,127572,127575],{},[277,127573,127574],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127577,127578,127579,127582],{},"src是",[277,127580,127581],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127584,127585,127586],{},"alt:文本，替换文本。图像不能显示的文字 ",[277,127587,127588],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127590,127591,127592],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[277,127593,127594],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127596,127597],{},"width:像素，设置图像的宽度",[19,127599,127600],{},"height:像素，设置图像的高度",[19,127602,127603],{},"border：像素，设置图像的边框粗细",[19,127605,127606],{},"（2）图像标签属性的注意点：",[19,127608,127609],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127611,127612],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127614,127615],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[1760,127617,127619],{"id":127618},"_42-路径注意要点","4.2 路径注意要点：",[19,127621,127622],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127624,127625],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127627,127628],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127630,127631,127632],{},"①同一级路径：图像文件位于HTML文件同一级，如",[277,127633,127634],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127636,127637,127638],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[277,127639,127640],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127642,127643,127644],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[277,127645,127646],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127648,127649,127650,2059],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[69,127651,127652],{"href":127652,"rel":127653},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[245],[1760,127655,127657],{"id":127656},"_43-超链接标签","4.3 超链接标签",[19,127659,127660,127663],{},[277,127661,127662],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127665,127666,127667],{},"①语法格式：",[277,127668,127669],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127671,127672],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127674,127675],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127677,127678,127679],{},"③链接分类：外部链接：",[277,127680,127681],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127683,127684,127685],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[277,127686,127687],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127689,127690,127691],{},"空链接：如果当时没有确定链接目标时，",[277,127692,127693],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127695,127696],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127698,127699],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[1760,127701,127703],{"id":127702},"_44-锚点链接","4.4 锚点链接",[19,127705,127706],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127708,127709,127710,127713,127714],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[277,127711,127712],{},"\u003Ca href=\"#two\">","第二级",[277,127715,127716],{},"\u003C\u002Fa>",[19,127718,127719,127720],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[277,127721,127722],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[1760,127724,127726],{"id":127725},"_45-注释标签","4.5 注释标签",[19,127728,127729,127732,127733],{},[277,127730,127731],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[277,127734,127735],{},"ctrl+\u002F",[1760,127737,127739],{"id":127738},"_46-特殊字符","4.6 特殊字符",[19,127741,127742],{},"可以实现添加多个空格",[401,127744],{"style":127745,"src":127746},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":275,"searchDepth":303,"depth":303,"links":127748},[127749,127750,127751,127752,127753,127754],{"id":127565,"depth":303,"text":127566},{"id":127618,"depth":303,"text":127619},{"id":127656,"depth":303,"text":127657},{"id":127702,"depth":303,"text":127703},{"id":127725,"depth":303,"text":127726},{"id":127738,"depth":303,"text":127739},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127557,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127761,"title":127762,"body":127763,"description":24991,"extension":1744,"meta":128056,"navigation":306,"path":128057,"seo":128058,"stem":128059,"__hash__":128060},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127764,"toc":128047},[127765,127768,127772,127775,127778,127781,127784,127787,127790,127793,127796,127799,127819,127825,127829,127832,127835,127838,127841,127844,127847,127851,127854,127857,127860,127863,127876,127881,127884,127887,127902,127905,127908,127911,127914,127917,127921,127924,127931,127934,127937,127940,127943,127946,127952,127955,127958,127964,127967,127970,127973,127979,127982,127985,127999,128006,128009,128012,128019,128028,128031,128034,128037,128041,128044],[10,127766,127762],{"id":127767},"_5-html表格列表与表单",[1760,127769,127771],{"id":127770},"_51-表格标签","5.1 表格标签",[19,127773,127774],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,127776,127777],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,127779,127780],{},"②表格基本语法：",[401,127782],{"style":127745,"src":127783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,127785,127786],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[401,127788],{"style":127745,"src":127789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,127791,127792],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[401,127794],{"style":127745,"src":127795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,127797,127798],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127800,127801,127804,127805,127807,127808,127811,127812,127814,127815,127818],{},[277,127802,127803],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[277,127806,127803],{},"内部必须拥有",[277,127809,127810],{},"\u003Ctr>","标签，一般位于第一行，",[277,127813,127803],{},"比",[277,127816,127817],{},"\u003Cth>","范围广",[19,127820,127821,127824],{},[277,127822,127823],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[1760,127826,127828],{"id":127827},"_52-合并单元格","5.2 合并单元格",[19,127830,127831],{},"（1）合并单元格方式：",[19,127833,127834],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127836,127837],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127839,127840],{},"（2）目标单元格：",[19,127842,127843],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127845,127846],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[1760,127848,127850],{"id":127849},"_53-列表标签","5.3 列表标签",[19,127852,127853],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127855,127856],{},"①无序列表：",[401,127858],{"style":127745,"src":127859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127861,127862],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127864,127865,127868,127869,127872,127873,127875],{},[277,127866,127867],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[277,127870,127871],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[277,127874,127867],{},"中输入其他标签或文字是不对的",[19,127877,127878,127880],{},[277,127879,127871],{},"之间相当于一个容器，可以容纳所有元素",[19,127882,127883],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127885,127886],{},"在css中去除前边的小圆点采用如下代码:",[270,127888,127892],{"className":127889,"code":127890,"language":127891,"meta":275,"style":275},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[277,127893,127894],{"__ignoreMap":275},[152,127895,127896,127899],{"class":281,"line":282},[152,127897,127898],{"class":52637},"list-style",[152,127900,127901],{"class":483},": none;\n",[19,127903,127904],{},"②有序列表：",[401,127906],{"style":127745,"src":127907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127909,127910],{},"③自定义列表：",[401,127912],{"style":127745,"src":127913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[401,127915],{"style":127745,"src":127916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[1760,127918,127920],{"id":127919},"_54-表单标签","5.4 表单标签",[19,127922,127923],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127925,127926,127927,127930],{},"（1）表单域：包含单元素的区域，",[277,127928,127929],{},"\u003Cform>","标签可以实现信息的收集和传递。",[401,127932],{"style":127745,"src":127933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127935,127936],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127938,127939],{},"表单元素提交必须有name属性",[19,127941,127942],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127944,127945],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127947,78563,127948,127951],{},[277,127949,127950],{},"\u003Cinput>","输入表单元素",[401,127953],{"style":127745,"src":127954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[401,127956],{"style":127745,"src":127957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127959,127960,127961],{},"单选按钮：",[277,127962,127963],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[401,127965],{"style":127745,"src":127966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127968,127969],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[401,127971],{"style":127745,"src":127972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127974,127975,127978],{},[694,127976,127977],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127980,127981],{},"②select下拉表单元素：可以节约页面控件",[401,127983],{"style":127745,"src":127984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127986,127987,15411,127989,127992,127993,127995,127996,127998],{},[694,127988,1848],{},[277,127990,127991],{},"\u003Cselect>","中至少包含一对",[277,127994,104051],{},"；在",[277,127997,104051],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128000,128001,128002,128005],{},"③",[277,128003,128004],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[401,128007],{"style":127745,"src":128008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128010,128011],{},"3行20列",[1760,128013,128015,128016,104030],{"id":128014},"_55-lable标签","5.5 ",[277,128017,128018],{},"\u003Clable>",[19,128020,128021,128022,128024,128025,128027],{},"它不是表单标签，但常常与表单标签搭配使用，",[277,128023,128018],{},"标签用于绑定一个表单标签，当点击",[277,128026,128018],{},"标签内的文本",[19,128029,128030],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[401,128032],{"style":127745,"src":128033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[401,128035],{"style":127745,"src":128036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[1760,128038,128040],{"id":128039},"_56-实例","5.6 实例",[401,128042],{"style":127745,"src":128043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1736,128045,128046],{},"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":275,"searchDepth":303,"depth":303,"links":128048},[128049,128050,128051,128052,128053,128055],{"id":127770,"depth":303,"text":127771},{"id":127827,"depth":303,"text":127828},{"id":127849,"depth":303,"text":127850},{"id":127919,"depth":303,"text":127920},{"id":128014,"depth":303,"text":128054},"5.5 \u003Clable>标签",{"id":128039,"depth":303,"text":128040},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127762,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128062,"title":128063,"body":128064,"description":24991,"extension":1744,"meta":128613,"navigation":306,"path":128614,"seo":128615,"stem":128616,"__hash__":128617},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128065,"toc":128588},[128066,128069,128073,128076,128079,128083,128086,128089,128092,128095,128098,128101,128104,128108,128111,128115,128118,128121,128124,128128,128131,128134,128137,128143,128146,128149,128152,128155,128158,128161,128164,128197,128201,128204,128207,128210,128214,128217,128220,128223,128226,128229,128233,128236,128239,128242,128246,128249,128253,128256,128260,128263,128268,128272,128275,128279,128282,128285,128288,128291,128318,128321,128325,128328,128331,128336,128339,128342,128346,128349,128354,128357,128360,128363,128367,128370,128373,128376,128380,128383,128386,128389,128393,128397,128400,128440,128443,128447,128454,128457,128461,128464,128510,128514,128517,128520,128523,128551,128555,128558,128585],[10,128067,128063],{"id":128068},"_6-css语法与文本样式",[1760,128070,128072],{"id":128071},"_61-css语法规范","6.1 css语法规范",[19,128074,128075],{},"由两部分组成，选择器及一条或多条声明",[401,128077],{"style":127745,"src":128078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128080,128081],{},[694,128082,1848],{},[19,128084,128085],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128087,128088],{},"②属性与属性值以“键值对”的形式出现",[19,128090,128091],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128093,128094],{},"④属性和属性值之间用英文“;”分开",[401,128096],{"style":127745,"src":128097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[401,128099],{"style":127745,"src":128100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[401,128102],{"style":127745,"src":128103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[1760,128105,128107],{"id":128106},"_62-css选择器","6.2 css选择器",[19,128109,128110],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[14,128112,128114],{"id":128113},"_621-标签选择器","6.2.1 标签选择器",[19,128116,128117],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128119,128120],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[401,128122],{"style":127745,"src":128123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[14,128125,128127],{"id":128126},"_622-类选择器","6.2.2 类选择器",[19,128129,128130],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128132,128133],{},"②样例",[401,128135],{"style":127745,"src":128136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128138,128139,128140,128142],{},"③ ",[694,128141,127977],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128144,128145],{},"可以理解为给这个标签起了个名字，来表示；",[19,128147,128148],{},"长名称或词组可以使用横线来为选择器命名；",[19,128150,128151],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128153,128154],{},"命名要有意义；",[401,128156],{"style":127745,"src":128157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128159,128160],{},"类选择器也可以指定特殊的元素p.center{}",[19,128162,128163],{},"p.center和.center都对",[270,128165,128167],{"className":127889,"code":128166,"language":127891,"meta":275,"style":275},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[277,128168,128169,128174,128183,128193],{"__ignoreMap":275},[152,128170,128171],{"class":281,"line":282},[152,128172,128173],{"class":866},"\u002F* 类选择器指定特殊元素 *\u002F\n",[152,128175,128176,128178,128181],{"class":281,"line":303},[152,128177,19],{"class":52637},[152,128179,128180],{"class":285},".center",[152,128182,17187],{"class":483},[152,128184,128185,128187,128189,128191],{"class":281,"line":310},[152,128186,71863],{"class":293},[152,128188,52774],{"class":483},[152,128190,52929],{"class":293},[152,128192,2965],{"class":483},[152,128194,128195],{"class":281,"line":324},[152,128196,3236],{"class":483},[14,128198,128200],{"id":128199},"_623-多类名使用","6.2.3 多类名使用",[19,128202,128203],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[401,128205],{"style":127745,"src":128206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128208,128209],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[14,128211,128213],{"id":128212},"_624-id选择器","6.2.4 id选择器",[19,128215,128216],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128218,128219],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[401,128221],{"style":127745,"src":128222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128224,128225],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128227,128228],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[14,128230,128232],{"id":128231},"_625-通配符选择器","6.2.5 通配符选择器",[19,128234,128235],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128237,128238],{},"* {",[19,128240,128241],{},"color=\"red\"}",[14,128243,128245],{"id":128244},"_626-总结","6.2.6 总结",[401,128247],{"style":127745,"src":128248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[1760,128250,128252],{"id":128251},"_63-css字体属性","6.3 css字体属性",[19,128254,128255],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[14,128257,128259],{"id":128258},"_631-字体系列","6.3.1 字体系列",[19,128261,128262],{},"font-family: '宋体';",[19,128264,128265,128267],{},[694,128266,1848],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[14,128269,128271],{"id":128270},"_632-字体大小","6.3.2 字体大小",[19,128273,128274],{},"font-size: 20px",[19,128276,128277,28078],{},[694,128278,127977],{},[19,128280,128281],{},"①px（像素）大小是网页的最常用单位",[19,128283,128284],{},"②谷歌浏览器默认为16px",[19,128286,128287],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128289,128290],{},"④可以给body指定整个页面的大小：会自动引用",[270,128292,128294],{"className":127889,"code":128293,"language":127891,"meta":275,"style":275},"body {\n  font-size: 16px;\n}\n",[277,128295,128296,128302,128314],{"__ignoreMap":275},[152,128297,128298,128300],{"class":281,"line":282},[152,128299,53137],{"class":52637},[152,128301,17187],{"class":483},[152,128303,128304,128306,128308,128310,128312],{"class":281,"line":303},[152,128305,71963],{"class":293},[152,128307,52774],{"class":483},[152,128309,2409],{"class":293},[152,128311,52829],{"class":476},[152,128313,2965],{"class":483},[152,128315,128316],{"class":281,"line":310},[152,128317,3236],{"class":483},[19,128319,128320],{},"⑤标题标签比较特殊，需要单独指定大小",[14,128322,128324],{"id":128323},"_633-字体粗细","6.3.3 字体粗细",[19,128326,128327],{},"font-weight: bold;",[19,128329,128330],{},"font-weight: 100；",[19,128332,128333,128335],{},[694,128334,1848],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128337,128338],{},"font-weight= 400;",[19,128340,128341],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[14,128343,128345],{"id":128344},"_634-文字样式","6.3.4 文字样式",[19,128347,128348],{},"font-style: normal；",[19,128350,128351,28078],{},[694,128352,128353],{},"属性值",[19,128355,128356],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128358,128359],{},"②italic：浏览器会显示斜体的字体样式",[401,128361],{"style":127745,"src":128362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[14,128364,128366],{"id":128365},"_635-字体符合属性","6.3.5 字体符合属性",[401,128368],{"style":127745,"src":128369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[401,128371],{"style":127745,"src":128372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128374,128375],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128377,128378,28078],{},[694,128379,127977],{},[19,128381,128382],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128384,128385],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128387,128388],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[1760,128390,128392],{"id":128391},"_64-css-test文本属性","6.4 css test文本属性",[14,128394,128396],{"id":128395},"_641-文本颜色","6.4.1 文本颜色",[19,128398,128399],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[270,128401,128403],{"className":127889,"code":128402,"language":127891,"meta":275,"style":275},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[277,128404,128405,128410,128416,128426,128431,128436],{"__ignoreMap":275},[152,128406,128407],{"class":281,"line":282},[152,128408,128409],{"class":866},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[152,128411,128412,128414],{"class":281,"line":303},[152,128413,19],{"class":52637},[152,128415,17187],{"class":483},[152,128417,128418,128420,128422,128424],{"class":281,"line":310},[152,128419,72242],{"class":293},[152,128421,52774],{"class":483},[152,128423,58758],{"class":293},[152,128425,2965],{"class":483},[152,128427,128428],{"class":281,"line":324},[152,128429,128430],{"class":866},"  \u002F* color: #ff0000; *\u002F\n",[152,128432,128433],{"class":281,"line":329},[152,128434,128435],{"class":866},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[152,128437,128438],{"class":281,"line":343},[152,128439,3236],{"class":483},[401,128441],{"style":127745,"src":128442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[14,128444,128446],{"id":128445},"_642-对齐文本","6.4.2 对齐文本",[19,128448,128449,128450,128453],{},"text-align属于用于设置元素内文本内容的 ",[694,128451,128452],{},"水平对齐"," 方式",[19,128455,128456],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[14,128458,128460],{"id":128459},"_643-装饰文本","6.4.3 装饰文本",[19,128462,128463],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[270,128465,128467],{"className":127889,"code":128466,"language":127891,"meta":275,"style":275},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[277,128468,128469,128475,128485,128489,128495,128506],{"__ignoreMap":275},[152,128470,128471,128473],{"class":281,"line":282},[152,128472,69],{"class":52637},[152,128474,17187],{"class":483},[152,128476,128477,128479,128481,128483],{"class":281,"line":303},[152,128478,71839],{"class":293},[152,128480,52774],{"class":483},[152,128482,56074],{"class":293},[152,128484,2965],{"class":483},[152,128486,128487],{"class":281,"line":310},[152,128488,3236],{"class":483},[152,128490,128491,128493],{"class":281,"line":324},[152,128492,19],{"class":52637},[152,128494,17187],{"class":483},[152,128496,128497,128499,128501,128504],{"class":281,"line":329},[152,128498,71839],{"class":293},[152,128500,52774],{"class":483},[152,128502,128503],{"class":293},"underline",[152,128505,2965],{"class":483},[152,128507,128508],{"class":281,"line":343},[152,128509,3236],{"class":483},[14,128511,128513],{"id":128512},"_644-文本缩进","6.4.4 文本缩进",[19,128515,128516],{},"实现文本的第一行首行缩进自己指定的距离",[19,128518,128519],{},"20px往右边走；-20px往左边走",[19,128521,128522],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[270,128524,128526],{"className":127889,"code":128525,"language":127891,"meta":275,"style":275},"p {\n  text-indent: 2em;\n}\n",[277,128527,128528,128534,128547],{"__ignoreMap":275},[152,128529,128530,128532],{"class":281,"line":282},[152,128531,19],{"class":52637},[152,128533,17187],{"class":483},[152,128535,128536,128539,128541,128543,128545],{"class":281,"line":303},[152,128537,128538],{"class":293},"  text-indent",[152,128540,52774],{"class":483},[152,128542,1894],{"class":293},[152,128544,25168],{"class":476},[152,128546,2965],{"class":483},[152,128548,128549],{"class":281,"line":310},[152,128550,3236],{"class":483},[14,128552,128554],{"id":128553},"_645-行间距","6.4.5 行间距",[19,128556,128557],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[270,128559,128561],{"className":127889,"code":128560,"language":127891,"meta":275,"style":275},"p {\n  line-height: 1.6;\n}\n",[277,128562,128563,128569,128581],{"__ignoreMap":275},[152,128564,128565,128567],{"class":281,"line":282},[152,128566,19],{"class":52637},[152,128568,17187],{"class":483},[152,128570,128571,128574,128576,128579],{"class":281,"line":303},[152,128572,128573],{"class":293},"  line-height",[152,128575,52774],{"class":483},[152,128577,128578],{"class":293},"1.6",[152,128580,2965],{"class":483},[152,128582,128583],{"class":281,"line":310},[152,128584,3236],{"class":483},[1736,128586,128587],{},"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":275,"searchDepth":303,"depth":303,"links":128589},[128590,128591,128599,128606],{"id":128071,"depth":303,"text":128072},{"id":128106,"depth":303,"text":128107,"children":128592},[128593,128594,128595,128596,128597,128598],{"id":128113,"depth":310,"text":128114},{"id":128126,"depth":310,"text":128127},{"id":128199,"depth":310,"text":128200},{"id":128212,"depth":310,"text":128213},{"id":128231,"depth":310,"text":128232},{"id":128244,"depth":310,"text":128245},{"id":128251,"depth":303,"text":128252,"children":128600},[128601,128602,128603,128604,128605],{"id":128258,"depth":310,"text":128259},{"id":128270,"depth":310,"text":128271},{"id":128323,"depth":310,"text":128324},{"id":128344,"depth":310,"text":128345},{"id":128365,"depth":310,"text":128366},{"id":128391,"depth":303,"text":128392,"children":128607},[128608,128609,128610,128611,128612],{"id":128395,"depth":310,"text":128396},{"id":128445,"depth":310,"text":128446},{"id":128459,"depth":310,"text":128460},{"id":128512,"depth":310,"text":128513},{"id":128553,"depth":310,"text":128554},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128063,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128619,"title":128620,"body":128621,"description":24991,"extension":1744,"meta":129270,"navigation":306,"path":129271,"seo":129272,"stem":129273,"__hash__":129274},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128622,"toc":129251},[128623,128626,128630,128634,128694,128698,128708,128711,128714,128718,128743,128747,128750,128753,128756,128759,128762,128766,128769,128772,128814,128817,128843,128849,128852,128856,128860,128866,128869,128872,128875,128878,128881,128884,128929,128933,128936,128939,128943,128947,128976,128979,128984,128987,128990,128993,128996,129000,129004,129007,129009,129012,129016,129019,129023,129026,129029,129032,129036,129040,129046,129056,129059,129062,129065,129068,129071,129194,129202,129210,129248],[10,128624,128620],{"id":128625},"_7-css引入方式与选择器进阶",[1760,128627,128629],{"id":128628},"_71-css引入方式","7.1 css引入方式",[14,128631,128633],{"id":128632},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[270,128635,128639],{"className":128636,"code":128637,"language":128638,"meta":275,"style":275},"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",[277,128640,128641,128649,128656,128668,128681,128686],{"__ignoreMap":275},[152,128642,128643,128645,128647],{"class":281,"line":282},[152,128644,844],{"class":483},[152,128646,1736],{"class":52637},[152,128648,52644],{"class":483},[152,128650,128651,128654],{"class":281,"line":303},[152,128652,128653],{"class":52637},"  h1",[152,128655,17187],{"class":483},[152,128657,128658,128661,128663,128666],{"class":281,"line":310},[152,128659,128660],{"class":293},"    color",[152,128662,52774],{"class":483},[152,128664,128665],{"class":293},"blue",[152,128667,2965],{"class":483},[152,128669,128670,128673,128675,128677,128679],{"class":281,"line":324},[152,128671,128672],{"class":293},"    font-size",[152,128674,52774],{"class":483},[152,128676,2608],{"class":293},[152,128678,52829],{"class":476},[152,128680,2965],{"class":483},[152,128682,128683],{"class":281,"line":329},[152,128684,128685],{"class":483},"  }\n",[152,128687,128688,128690,128692],{"class":281,"line":343},[152,128689,53122],{"class":483},[152,128691,1736],{"class":52637},[152,128693,52644],{"class":483},[19,128695,128696,28078],{},[694,128697,127977],{},[19,128699,78563,128700,128703,128704,128707],{},[277,128701,128702],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[277,128705,128706],{},"\u003Chead>","标签中",[19,128709,128710],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128712,128713],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[14,128715,128717],{"id":128716},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[270,128719,128721],{"className":128636,"code":128720,"language":128638,"meta":275,"style":275},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[277,128722,128723],{"__ignoreMap":275},[152,128724,128725,128727,128729,128731,128733,128736,128739,128741],{"class":281,"line":282},[152,128726,844],{"class":483},[152,128728,19],{"class":52637},[152,128730,63963],{"class":285},[152,128732,1864],{"class":483},[152,128734,128735],{"class":289},"\"color: red; font-size: 16px;\"",[152,128737,128738],{"class":483},">这是一个段落\u003C\u002F",[152,128740,19],{"class":52637},[152,128742,52644],{"class":483},[19,128744,128745,28078],{},[694,128746,127977],{},[19,128748,128749],{},"①style其实就是标签的属性",[19,128751,128752],{},"②在双引号中间，写法要符合css规范",[19,128754,128755],{},"③可以控制当前的标签设置样式",[19,128757,128758],{},"④书写繁琐，简单时才用",[19,128760,128761],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[14,128763,128765],{"id":128764},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,128767,128768],{},"使用最多，单独建一个css文件，然后html引用",[19,128770,128771],{},"①css文件部分： style.css",[270,128773,128775],{"className":127889,"code":128774,"language":127891,"meta":275,"style":275},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[277,128776,128777,128782,128788,128798,128810],{"__ignoreMap":275},[152,128778,128779],{"class":281,"line":282},[152,128780,128781],{"class":866},"\u002F* style.css *\u002F\n",[152,128783,128784,128786],{"class":281,"line":303},[152,128785,10],{"class":52637},[152,128787,17187],{"class":483},[152,128789,128790,128792,128794,128796],{"class":281,"line":310},[152,128791,72242],{"class":293},[152,128793,52774],{"class":483},[152,128795,128665],{"class":293},[152,128797,2965],{"class":483},[152,128799,128800,128802,128804,128806,128808],{"class":281,"line":324},[152,128801,71963],{"class":293},[152,128803,52774],{"class":483},[152,128805,2608],{"class":293},[152,128807,52829],{"class":476},[152,128809,2965],{"class":483},[152,128811,128812],{"class":281,"line":329},[152,128813,3236],{"class":483},[19,128815,128816],{},"②html部分",[270,128818,128820],{"className":128636,"code":128819,"language":128638,"meta":275,"style":275},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[277,128821,128822],{"__ignoreMap":275},[152,128823,128824,128826,128828,128830,128832,128834,128836,128838,128841],{"class":281,"line":282},[152,128825,844],{"class":483},[152,128827,70342],{"class":52637},[152,128829,70345],{"class":285},[152,128831,1864],{"class":483},[152,128833,70350],{"class":289},[152,128835,62394],{"class":285},[152,128837,1864],{"class":483},[152,128839,128840],{"class":289},"\"style.css\"",[152,128842,52644],{"class":483},[19,128844,128845,128848],{},[277,128846,128847],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128850,128851],{},"ctrl+0回到页面原来大小",[1760,128853,128855],{"id":128854},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[14,128857,128859],{"id":128858},"_721-快速生成html","7.2.1 快速生成html",[19,128861,128862,128863],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[277,128864,128865],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128867,128868],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128870,128871],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128873,128874],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128876,128877],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128879,128880],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128882,128883],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[270,128885,128887],{"className":128636,"code":128886,"language":128638,"meta":275,"style":275},"\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",[277,128888,128889,128894,128899,128904,128909,128914,128919,128924],{"__ignoreMap":275},[152,128890,128891],{"class":281,"line":282},[152,128892,128893],{"class":866},"\u003C!-- Emmet 语法示例 -->\n",[152,128895,128896],{"class":281,"line":303},[152,128897,128898],{"class":866},"\u003C!-- div*3        → 生成3个div -->\n",[152,128900,128901],{"class":281,"line":310},[152,128902,128903],{"class":866},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[152,128905,128906],{"class":281,"line":324},[152,128907,128908],{"class":866},"\u003C!-- div+p        → 兄弟div和p -->\n",[152,128910,128911],{"class":281,"line":329},[152,128912,128913],{"class":866},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[152,128915,128916],{"class":281,"line":343},[152,128917,128918],{"class":866},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[152,128920,128921],{"class":281,"line":348},[152,128922,128923],{"class":866},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[152,128925,128926],{"class":281,"line":362},[152,128927,128928],{"class":866},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[14,128930,128932],{"id":128931},"_722-快速生成css","7.2.2 快速生成css",[19,128934,128935],{},"简写开头",[19,128937,128938],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[1760,128940,128942],{"id":128941},"_73-css复合选择器","7.3 css复合选择器",[14,128944,128946],{"id":128945},"_731-后代选择器","7.3.1 后代选择器",[270,128948,128950],{"className":127889,"code":128949,"language":127891,"meta":275,"style":275},".parent .child {\n  color: blue;\n}\n",[277,128951,128952,128962,128972],{"__ignoreMap":275},[152,128953,128954,128957,128960],{"class":281,"line":282},[152,128955,128956],{"class":285},".parent",[152,128958,128959],{"class":285}," .child",[152,128961,17187],{"class":483},[152,128963,128964,128966,128968,128970],{"class":281,"line":303},[152,128965,72242],{"class":293},[152,128967,52774],{"class":483},[152,128969,128665],{"class":293},[152,128971,2965],{"class":483},[152,128973,128974],{"class":281,"line":310},[152,128975,3236],{"class":483},[19,128977,128978],{},"元素1 元素2 {样式声明}",[19,128980,128981],{},[694,128982,128983],{},"注意点:",[19,128985,128986],{},"①元素1和元素2中间用空格隔开",[19,128988,128989],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128991,128992],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128994,128995],{},"④元素1和元素2可以是任意基础选择器",[14,128997,128999],{"id":128998},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129001,129002],{},[694,129003,128983],{},[19,129005,129006],{},"①元素1和元素2中间用大于号隔开",[19,129008,128989],{},[19,129010,129011],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[14,129013,129015],{"id":129014},"_733-并集选择器","7.3.3 并集选择器",[19,129017,129018],{},"元素1，元素2 {样式声明}",[19,129020,129021],{},[694,129022,128983],{},[19,129024,129025],{},"①元素1和元素2中间用逗号隔开",[19,129027,129028],{},"②逗号可以理解为和的意思",[19,129030,129031],{},"③并集选择器通常用于集体声明",[14,129033,129035],{"id":129034},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129037,129038],{},[694,129039,128983],{},[19,129041,129042,129043,129045],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70342,129044],{},"－:visited－:hover－:active。",[19,129047,129048,129049,129052,129053,27351],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129050,129051],"hover",{}," 、 ",[129054,129055],"first-child",{},[19,129057,129058],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129060,129061],{},"link对没访问的进行设置",[19,129063,129064],{},"vistied对已访问的进行改变",[19,129066,129067],{},"hover鼠标经过就会变",[19,129069,129070],{},"active常按(点)就会变",[270,129072,129074],{"className":127889,"code":129073,"language":127891,"meta":275,"style":275},"\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",[277,129075,129076,129081,129090,129100,129110,129114,129123,129134,129138,129146,129156,129166,129170,129179,129190],{"__ignoreMap":275},[152,129077,129078],{"class":281,"line":282},[152,129079,129080],{"class":866},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[152,129082,129083,129085,129088],{"class":281,"line":303},[152,129084,69],{"class":52637},[152,129086,129087],{"class":285},":link",[152,129089,17187],{"class":483},[152,129091,129092,129094,129096,129098],{"class":281,"line":310},[152,129093,72242],{"class":293},[152,129095,52774],{"class":483},[152,129097,63706],{"class":293},[152,129099,2965],{"class":483},[152,129101,129102,129104,129106,129108],{"class":281,"line":324},[152,129103,71839],{"class":293},[152,129105,52774],{"class":483},[152,129107,56074],{"class":293},[152,129109,2965],{"class":483},[152,129111,129112],{"class":281,"line":329},[152,129113,3236],{"class":483},[152,129115,129116,129118,129121],{"class":281,"line":343},[152,129117,69],{"class":52637},[152,129119,129120],{"class":285},":visited",[152,129122,17187],{"class":483},[152,129124,129125,129127,129129,129132],{"class":281,"line":348},[152,129126,72242],{"class":293},[152,129128,52774],{"class":483},[152,129130,129131],{"class":293},"purple",[152,129133,2965],{"class":483},[152,129135,129136],{"class":281,"line":362},[152,129137,3236],{"class":483},[152,129139,129140,129142,129144],{"class":281,"line":367},[152,129141,69],{"class":52637},[152,129143,62277],{"class":285},[152,129145,17187],{"class":483},[152,129147,129148,129150,129152,129154],{"class":281,"line":381},[152,129149,72242],{"class":293},[152,129151,52774],{"class":483},[152,129153,56226],{"class":293},[152,129155,2965],{"class":483},[152,129157,129158,129160,129162,129164],{"class":281,"line":386},[152,129159,71839],{"class":293},[152,129161,52774],{"class":483},[152,129163,128503],{"class":293},[152,129165,2965],{"class":483},[152,129167,129168],{"class":281,"line":932},[152,129169,3236],{"class":483},[152,129171,129172,129174,129177],{"class":281,"line":942},[152,129173,69],{"class":52637},[152,129175,129176],{"class":285},":active",[152,129178,17187],{"class":483},[152,129180,129181,129183,129185,129188],{"class":281,"line":949},[152,129182,72242],{"class":293},[152,129184,52774],{"class":483},[152,129186,129187],{"class":293},"green",[152,129189,2965],{"class":483},[152,129191,129192],{"class":281,"line":954},[152,129193,3236],{"class":483},[14,129195,129197,129198,129201],{"id":129196},"_735-伪类选择器","7.3.5 ",[129199,129200],"focus",{},"伪类选择器",[19,129203,129204,129206,129207,129209],{},[129199,129205],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[277,129208,127950],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[270,129211,129213],{"className":127889,"code":129212,"language":127891,"meta":275,"style":275},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[277,129214,129215,129223,129234,129244],{"__ignoreMap":275},[152,129216,129217,129219,129221],{"class":281,"line":282},[152,129218,55158],{"class":52637},[152,129220,63237],{"class":285},[152,129222,17187],{"class":483},[152,129224,129225,129228,129230,129232],{"class":281,"line":303},[152,129226,129227],{"class":293},"  border-color",[152,129229,52774],{"class":483},[152,129231,56226],{"class":293},[152,129233,2965],{"class":483},[152,129235,129236,129238,129240,129242],{"class":281,"line":310},[152,129237,72135],{"class":293},[152,129239,52774],{"class":483},[152,129241,56074],{"class":293},[152,129243,2965],{"class":483},[152,129245,129246],{"class":281,"line":324},[152,129247,3236],{"class":483},[1736,129249,129250],{},"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":275,"searchDepth":303,"depth":303,"links":129252},[129253,129258,129262],{"id":128628,"depth":303,"text":128629,"children":129254},[129255,129256,129257],{"id":128632,"depth":310,"text":128633},{"id":128716,"depth":310,"text":128717},{"id":128764,"depth":310,"text":128765},{"id":128854,"depth":303,"text":128855,"children":129259},[129260,129261],{"id":128858,"depth":310,"text":128859},{"id":128931,"depth":310,"text":128932},{"id":128941,"depth":303,"text":128942,"children":129263},[129264,129265,129266,129267,129268],{"id":128945,"depth":310,"text":128946},{"id":128998,"depth":310,"text":128999},{"id":129014,"depth":310,"text":129015},{"id":129034,"depth":310,"text":129035},{"id":129196,"depth":310,"text":129269},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128620,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129276,"title":129277,"body":129278,"description":24991,"extension":1744,"meta":131201,"navigation":306,"path":131202,"seo":131203,"stem":131204,"__hash__":131205},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129279,"toc":131175},[129280,129283,129287,129296,129300,129326,129331,129334,129337,129340,129343,129347,129350,129360,129368,129372,129407,129412,129415,129418,129421,129424,129428,129431,129440,129444,129457,129462,129465,129468,129471,129475,129478,129482,129485,129540,129543,129574,129577,129631,129635,129638,129804,129927,129930,129933,129936,129939,129943,129946,129950,129953,129956,129960,129963,129994,130021,130049,130052,130056,130082,130125,130129,130223,130226,130253,130256,130259,130262,130265,130268,130271,130274,130277,130280,130284,130341,130368,130372,130420,130424,130465,130467,130470,130473,130476,130479,130483,130575,130578,130581,130584,130588,130711,130912,130916,130920,130923,130926,130929,130933,130936,130939,130964,130967,130970,130973,130976,130979,130983,130991,131053,131056,131114,131117,131120,131123,131126,131129,131132,131135,131172],[10,129281,129277],{"id":129282},"_8-css显示模式与背景特性",[1760,129284,129286],{"id":129285},"_81-css元素显示模式","8.1 css元素显示模式",[19,129288,129289,129290,129292,129293,129295],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[277,129291,127500],{},"自己占一行，比如一行可以放多个",[277,129294,127503],{},"，HTML 元素一般分为块元素和行内元素两种类型",[14,129297,129299],{"id":129298},"_811-块元素","8.1.1 块元素",[19,129301,129302,129303,129305,129306,2021,129309,2021,129311,2021,129313,2021,129316,2021,129319,129322,129323,129325],{},"常见的块元素有",[277,129304,127404],{},"~",[277,129307,129308],{},"\u003Ch6>",[277,129310,127430],{},[277,129312,127500],{},[277,129314,129315],{},"\u003Cul>",[277,129317,129318],{},"\u003Col>",[277,129320,129321],{},"\u003Cli>","等，其中 ",[277,129324,127500],{}," 标签是最典型的块元素",[19,129327,129328],{},[694,129329,129330],{},"块级元素的特点：",[19,129332,129333],{},"① 比较霸道，自己独占一行。",[19,129335,129336],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129338,129339],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129341,129342],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129344,129345],{},[694,129346,1848],{},[19,129348,129349],{},"①文字类的元素内不能使用块级元素",[19,129351,78586,129352,129354,129355,129357,129358],{},[277,129353,127430],{}," 标签主要用于存放文字，因此 ",[277,129356,127430],{}," 里面不能放块级元素，特别是不能放",[277,129359,127500],{},[19,129361,129362,129363,129305,129365,129367],{},"⑥同理， ",[277,129364,127404],{},[277,129366,129308],{},"等都是文字类块级标签，里面也不能放其他块级元素",[14,129369,129371],{"id":129370},"_812-行内元素","8.1.2 行内元素",[19,129373,129374,129375,2021,129377,2021,129380,2021,129383,2021,129386,2021,129389,2021,129392,2021,129395,2021,129398,2021,129401,129403,129404,129406],{},"常见的行内元素有 ",[277,129376,127662],{},[277,129378,129379],{},"\u003Cstrong>",[277,129381,129382],{},"\u003Cb>",[277,129384,129385],{},"\u003Cem>",[277,129387,129388],{},"\u003Ci>",[277,129390,129391],{},"\u003Cdel>",[277,129393,129394],{},"\u003Cs>",[277,129396,129397],{},"\u003Cins>",[277,129399,129400],{},"\u003Cu>",[277,129402,127503],{}," 等，其中 ",[277,129405,127503],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129408,129409],{},[694,129410,129411],{},"特点：",[19,129413,129414],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129416,129417],{},"② 高、宽直接设置是无效的。",[19,129419,129420],{},"③ 默认宽度就是它本身内容的宽度。",[19,129422,129423],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129425,129426],{},[694,129427,1848],{},[19,129429,129430],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129432,129433,129434,129436,129437,129439],{},"②特殊情况链接 ",[277,129435,127662],{}," 里面可以放块级元素，但是给 ",[277,129438,127662],{}," 转换一下块级模式最安全",[14,129441,129443],{"id":129442},"_813-行内块元素","8.1.3 行内块元素",[19,129445,129446,129447,2021,129450,2021,129453,129456],{},"在行内元素中有几个特殊的标签 —— ",[277,129448,129449],{},"\u003Cimg \u002F>",[277,129451,129452],{},"\u003Cinput \u002F>",[277,129454,129455],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129458,129459],{},[694,129460,129461],{},"行内块元素的特点：",[19,129463,129464],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129466,129467],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129469,129470],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[14,129472,129474],{"id":129473},"_814-总结","8.1.4 总结",[401,129476],{"style":127745,"src":129477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[14,129479,129481],{"id":129480},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129483,129484],{},"①转换为块元素：display:block;",[270,129486,129488],{"className":127889,"code":129487,"language":127891,"meta":275,"style":275},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[277,129489,129490,129495,129501,129512,129524,129536],{"__ignoreMap":275},[152,129491,129492],{"class":281,"line":282},[152,129493,129494],{"class":866},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[152,129496,129497,129499],{"class":281,"line":303},[152,129498,69],{"class":52637},[152,129500,17187],{"class":483},[152,129502,129503,129506,129508,129510],{"class":281,"line":310},[152,129504,129505],{"class":293},"  display",[152,129507,52774],{"class":483},[152,129509,62206],{"class":293},[152,129511,2965],{"class":483},[152,129513,129514,129516,129518,129520,129522],{"class":281,"line":324},[152,129515,71905],{"class":293},[152,129517,52774],{"class":483},[152,129519,2119],{"class":293},[152,129521,52829],{"class":476},[152,129523,2965],{"class":483},[152,129525,129526,129528,129530,129532,129534],{"class":281,"line":329},[152,129527,72125],{"class":293},[152,129529,52774],{"class":483},[152,129531,2209],{"class":293},[152,129533,52829],{"class":476},[152,129535,2965],{"class":483},[152,129537,129538],{"class":281,"line":343},[152,129539,3236],{"class":483},[19,129541,129542],{},"②转换为行内元素：display:inline;",[270,129544,129546],{"className":127889,"code":129545,"language":127891,"meta":275,"style":275},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[277,129547,129548,129553,129559,129570],{"__ignoreMap":275},[152,129549,129550],{"class":281,"line":282},[152,129551,129552],{"class":866},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[152,129554,129555,129557],{"class":281,"line":303},[152,129556,52948],{"class":52637},[152,129558,17187],{"class":483},[152,129560,129561,129563,129565,129568],{"class":281,"line":310},[152,129562,129505],{"class":293},[152,129564,52774],{"class":483},[152,129566,129567],{"class":293},"inline",[152,129569,2965],{"class":483},[152,129571,129572],{"class":281,"line":324},[152,129573,3236],{"class":483},[19,129575,129576],{},"③转换为行内块：display:inline-block;",[270,129578,129580],{"className":127889,"code":129579,"language":127891,"meta":275,"style":275},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[277,129581,129582,129587,129593,129603,129615,129627],{"__ignoreMap":275},[152,129583,129584],{"class":281,"line":282},[152,129585,129586],{"class":866},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[152,129588,129589,129591],{"class":281,"line":303},[152,129590,152],{"class":52637},[152,129592,17187],{"class":483},[152,129594,129595,129597,129599,129601],{"class":281,"line":310},[152,129596,129505],{"class":293},[152,129598,52774],{"class":483},[152,129600,73720],{"class":293},[152,129602,2965],{"class":483},[152,129604,129605,129607,129609,129611,129613],{"class":281,"line":324},[152,129606,71905],{"class":293},[152,129608,52774],{"class":483},[152,129610,2420],{"class":293},[152,129612,52829],{"class":476},[152,129614,2965],{"class":483},[152,129616,129617,129619,129621,129623,129625],{"class":281,"line":329},[152,129618,72125],{"class":293},[152,129620,52774],{"class":483},[152,129622,2757],{"class":293},[152,129624,52829],{"class":476},[152,129626,2965],{"class":483},[152,129628,129629],{"class":281,"line":343},[152,129630,3236],{"class":483},[14,129632,129634],{"id":129633},"_816-小米侧边栏","8.1.6 小米侧边栏",[401,129636],{"style":127745,"src":129637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[270,129639,129641],{"className":128636,"code":129640,"language":128638,"meta":275,"style":275},"\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",[277,129642,129643,129648,129663,129682,129701,129720,129739,129758,129777,129796],{"__ignoreMap":275},[152,129644,129645],{"class":281,"line":282},[152,129646,129647],{"class":866},"\u003C!-- 小米侧边栏案例 -->\n",[152,129649,129650,129652,129654,129656,129658,129661],{"class":281,"line":303},[152,129651,844],{"class":483},[152,129653,52948],{"class":52637},[152,129655,54823],{"class":285},[152,129657,1864],{"class":483},[152,129659,129660],{"class":289},"\"sidebar\"",[152,129662,52644],{"class":483},[152,129664,129665,129667,129669,129671,129673,129675,129678,129680],{"class":281,"line":310},[152,129666,53481],{"class":483},[152,129668,69],{"class":52637},[152,129670,62394],{"class":285},[152,129672,1864],{"class":483},[152,129674,62399],{"class":289},[152,129676,129677],{"class":483},">手机 电话卡\u003C\u002F",[152,129679,69],{"class":52637},[152,129681,52644],{"class":483},[152,129683,129684,129686,129688,129690,129692,129694,129697,129699],{"class":281,"line":324},[152,129685,53481],{"class":483},[152,129687,69],{"class":52637},[152,129689,62394],{"class":285},[152,129691,1864],{"class":483},[152,129693,62399],{"class":289},[152,129695,129696],{"class":483},">电视 盒子\u003C\u002F",[152,129698,69],{"class":52637},[152,129700,52644],{"class":483},[152,129702,129703,129705,129707,129709,129711,129713,129716,129718],{"class":281,"line":329},[152,129704,53481],{"class":483},[152,129706,69],{"class":52637},[152,129708,62394],{"class":285},[152,129710,1864],{"class":483},[152,129712,62399],{"class":289},[152,129714,129715],{"class":483},">笔记本 平板\u003C\u002F",[152,129717,69],{"class":52637},[152,129719,52644],{"class":483},[152,129721,129722,129724,129726,129728,129730,129732,129735,129737],{"class":281,"line":343},[152,129723,53481],{"class":483},[152,129725,69],{"class":52637},[152,129727,62394],{"class":285},[152,129729,1864],{"class":483},[152,129731,62399],{"class":289},[152,129733,129734],{"class":483},">出行 穿戴\u003C\u002F",[152,129736,69],{"class":52637},[152,129738,52644],{"class":483},[152,129740,129741,129743,129745,129747,129749,129751,129754,129756],{"class":281,"line":348},[152,129742,53481],{"class":483},[152,129744,69],{"class":52637},[152,129746,62394],{"class":285},[152,129748,1864],{"class":483},[152,129750,62399],{"class":289},[152,129752,129753],{"class":483},">智能 路由器\u003C\u002F",[152,129755,69],{"class":52637},[152,129757,52644],{"class":483},[152,129759,129760,129762,129764,129766,129768,129770,129773,129775],{"class":281,"line":362},[152,129761,53481],{"class":483},[152,129763,69],{"class":52637},[152,129765,62394],{"class":285},[152,129767,1864],{"class":483},[152,129769,62399],{"class":289},[152,129771,129772],{"class":483},">健康 儿童\u003C\u002F",[152,129774,69],{"class":52637},[152,129776,52644],{"class":483},[152,129778,129779,129781,129783,129785,129787,129789,129792,129794],{"class":281,"line":367},[152,129780,53481],{"class":483},[152,129782,69],{"class":52637},[152,129784,62394],{"class":285},[152,129786,1864],{"class":483},[152,129788,62399],{"class":289},[152,129790,129791],{"class":483},">耳机 音响\u003C\u002F",[152,129793,69],{"class":52637},[152,129795,52644],{"class":483},[152,129797,129798,129800,129802],{"class":281,"line":381},[152,129799,53122],{"class":483},[152,129801,52948],{"class":52637},[152,129803,52644],{"class":483},[270,129805,129807],{"className":127889,"code":129806,"language":127891,"meta":275,"style":275},".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",[277,129808,129809,129818,129828,129841,129853,129865,129877,129887,129898,129902,129912,129923],{"__ignoreMap":275},[152,129810,129811,129814,129816],{"class":281,"line":282},[152,129812,129813],{"class":285},".sidebar",[152,129815,3070],{"class":52637},[152,129817,17187],{"class":483},[152,129819,129820,129822,129824,129826],{"class":281,"line":303},[152,129821,129505],{"class":293},[152,129823,52774],{"class":483},[152,129825,62206],{"class":293},[152,129827,2965],{"class":483},[152,129829,129830,129832,129834,129837,129839],{"class":281,"line":310},[152,129831,71905],{"class":293},[152,129833,52774],{"class":483},[152,129835,129836],{"class":293},"234",[152,129838,52829],{"class":476},[152,129840,2965],{"class":483},[152,129842,129843,129845,129847,129849,129851],{"class":281,"line":324},[152,129844,72125],{"class":293},[152,129846,52774],{"class":483},[152,129848,2260],{"class":293},[152,129850,52829],{"class":476},[152,129852,2965],{"class":483},[152,129854,129855,129857,129859,129861,129863],{"class":281,"line":329},[152,129856,128573],{"class":293},[152,129858,52774],{"class":483},[152,129860,2260],{"class":293},[152,129862,52829],{"class":476},[152,129864,2965],{"class":483},[152,129866,129867,129869,129871,129873,129875],{"class":281,"line":343},[152,129868,72160],{"class":293},[152,129870,52774],{"class":483},[152,129872,2757],{"class":293},[152,129874,52829],{"class":476},[152,129876,2965],{"class":483},[152,129878,129879,129881,129883,129885],{"class":281,"line":348},[152,129880,72242],{"class":293},[152,129882,52774],{"class":483},[152,129884,62179],{"class":293},[152,129886,2965],{"class":483},[152,129888,129889,129891,129893,129896],{"class":281,"line":362},[152,129890,72215],{"class":293},[152,129892,52774],{"class":483},[152,129894,129895],{"class":293},"#55585a",[152,129897,2965],{"class":483},[152,129899,129900],{"class":281,"line":367},[152,129901,3236],{"class":483},[152,129903,129904,129906,129908,129910],{"class":281,"line":381},[152,129905,129813],{"class":285},[152,129907,3070],{"class":52637},[152,129909,62277],{"class":285},[152,129911,17187],{"class":483},[152,129913,129914,129916,129918,129921],{"class":281,"line":386},[152,129915,72215],{"class":293},[152,129917,52774],{"class":483},[152,129919,129920],{"class":293},"#ff6700",[152,129922,2965],{"class":483},[152,129924,129925],{"class":281,"line":932},[152,129926,3236],{"class":483},[401,129928],{"style":127745,"src":129929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129931,129932],{},"行高=盒子高度：实现文字的垂直居中",[19,129934,129935],{},"原理讲解：",[401,129937],{"style":127745,"src":129938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[1760,129940,129942],{"id":129941},"_82-css背景","8.2 css背景",[19,129944,129945],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[14,129947,129949],{"id":129948},"_821-背景颜色","8.2.1 背景颜色",[19,129951,129952],{},"background-color:颜色值;",[19,129954,129955],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[14,129957,129959],{"id":129958},"_822-背景图片","8.2.2 背景图片",[19,129961,129962],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[270,129964,129966],{"className":127889,"code":129965,"language":127891,"meta":275,"style":275},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[277,129967,129968,129974,129990],{"__ignoreMap":275},[152,129969,129970,129972],{"class":281,"line":282},[152,129971,52948],{"class":52637},[152,129973,17187],{"class":483},[152,129975,129976,129979,129981,129983,129985,129988],{"class":281,"line":303},[152,129977,129978],{"class":293},"  background-image",[152,129980,52774],{"class":483},[152,129982,63063],{"class":293},[152,129984,1819],{"class":483},[152,129986,129987],{"class":6858},"images\u002Fbg.png",[152,129989,4362],{"class":483},[152,129991,129992],{"class":281,"line":310},[152,129993,3236],{"class":483},[23,129995,129996,130005],{},[26,129997,129998],{},[29,129999,130000,130003],{},[32,130001,130002],{"align":34},"参数值",[32,130004,104033],{"align":34},[43,130006,130007,130014],{},[29,130008,130009,130011],{},[48,130010,56074],{"align":34},[48,130012,130013],{"align":34},"无背景图（默认的）",[29,130015,130016,130018],{},[48,130017,63063],{"align":34},[48,130019,130020],{"align":34},"使用绝对或相对地址指定背景图像",[270,130022,130023],{"className":127889,"code":129965,"language":127891,"meta":275,"style":275},[277,130024,130025,130031,130045],{"__ignoreMap":275},[152,130026,130027,130029],{"class":281,"line":282},[152,130028,52948],{"class":52637},[152,130030,17187],{"class":483},[152,130032,130033,130035,130037,130039,130041,130043],{"class":281,"line":303},[152,130034,129978],{"class":293},[152,130036,52774],{"class":483},[152,130038,63063],{"class":293},[152,130040,1819],{"class":483},[152,130042,129987],{"class":6858},[152,130044,4362],{"class":483},[152,130046,130047],{"class":281,"line":310},[152,130048,3236],{"class":483},[19,130050,130051],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[14,130053,130055],{"id":130054},"_823-背景平铺","8.2.3 背景平铺",[270,130057,130059],{"className":127889,"code":130058,"language":127891,"meta":275,"style":275},"div {\n  background-repeat: no-repeat;\n}\n",[277,130060,130061,130067,130078],{"__ignoreMap":275},[152,130062,130063,130065],{"class":281,"line":282},[152,130064,52948],{"class":52637},[152,130066,17187],{"class":483},[152,130068,130069,130072,130074,130076],{"class":281,"line":303},[152,130070,130071],{"class":293},"  background-repeat",[152,130073,52774],{"class":483},[152,130075,63073],{"class":293},[152,130077,2965],{"class":483},[152,130079,130080],{"class":281,"line":310},[152,130081,3236],{"class":483},[23,130083,130084,130092],{},[26,130085,130086],{},[29,130087,130088,130090],{},[32,130089,130002],{"align":34},[32,130091,104033],{"align":34},[43,130093,130094,130102,130109,130117],{},[29,130095,130096,130099],{},[48,130097,130098],{"align":34},"repeat",[48,130100,130101],{"align":34},"背景图像在纵向和横向上平铺（默认的）",[29,130103,130104,130106],{},[48,130105,63073],{"align":34},[48,130107,130108],{"align":34},"背景图像不平铺",[29,130110,130111,130114],{},[48,130112,130113],{"align":34},"repeat-x",[48,130115,130116],{"align":34},"背景图像在横向上平铺",[29,130118,130119,130122],{},[48,130120,130121],{"align":34},"repeat-y",[48,130123,130124],{"align":34},"背景图像在纵向平铺",[14,130126,130128],{"id":130127},"_824-背景图片位置","8.2.4 背景图片位置",[270,130130,130132],{"className":127889,"code":130131,"language":127891,"meta":275,"style":275},"\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",[277,130133,130134,130139,130145,130159,130163,130168,130174,130190,130194,130199,130205,130219],{"__ignoreMap":275},[152,130135,130136],{"class":281,"line":282},[152,130137,130138],{"class":866},"\u002F* 方位名词 *\u002F\n",[152,130140,130141,130143],{"class":281,"line":303},[152,130142,52948],{"class":52637},[152,130144,17187],{"class":483},[152,130146,130147,130150,130152,130154,130157],{"class":281,"line":310},[152,130148,130149],{"class":293},"  background-position",[152,130151,52774],{"class":483},[152,130153,52929],{"class":293},[152,130155,130156],{"class":293}," top",[152,130158,2965],{"class":483},[152,130160,130161],{"class":281,"line":324},[152,130162,3236],{"class":483},[152,130164,130165],{"class":281,"line":329},[152,130166,130167],{"class":866},"\u002F* 精确单位 *\u002F\n",[152,130169,130170,130172],{"class":281,"line":343},[152,130171,52948],{"class":52637},[152,130173,17187],{"class":483},[152,130175,130176,130178,130180,130182,130184,130186,130188],{"class":281,"line":348},[152,130177,130149],{"class":293},[152,130179,52774],{"class":483},[152,130181,2508],{"class":293},[152,130183,52829],{"class":476},[152,130185,58841],{"class":293},[152,130187,52829],{"class":476},[152,130189,2965],{"class":483},[152,130191,130192],{"class":281,"line":362},[152,130193,3236],{"class":483},[152,130195,130196],{"class":281,"line":367},[152,130197,130198],{"class":866},"\u002F* 混合单位 *\u002F\n",[152,130200,130201,130203],{"class":281,"line":381},[152,130202,52948],{"class":52637},[152,130204,17187],{"class":483},[152,130206,130207,130209,130211,130213,130215,130217],{"class":281,"line":386},[152,130208,130149],{"class":293},[152,130210,52774],{"class":483},[152,130212,2508],{"class":293},[152,130214,52829],{"class":476},[152,130216,18759],{"class":293},[152,130218,2965],{"class":483},[152,130220,130221],{"class":281,"line":932},[152,130222,3236],{"class":483},[19,130224,130225],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[23,130227,130228,130236],{},[26,130229,130230],{},[29,130231,130232,130234],{},[32,130233,130002],{"align":34},[32,130235,38],{"align":34},[43,130237,130238,130245],{},[29,130239,130240,130242],{},[48,130241,53305],{"align":34},[48,130243,130244],{"align":34},"百分数|由浮点数和单位标识符组成的长度值",[29,130246,130247,130250],{},[48,130248,130249],{"align":34},"position",[48,130251,130252],{"align":34},"top|center|bottom|left|center|right 方位名词",[19,130254,130255],{},"其他说明：",[19,130257,130258],{},"①参数是方位名词",[19,130260,130261],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130263,130264],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130266,130267],{},"②参数是精确单位",[19,130269,130270],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130272,130273],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130275,130276],{},"③参数是混合单位",[19,130278,130279],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[14,130281,130283],{"id":130282},"_825-背景图片固定","8.2.5 背景图片固定",[270,130285,130287],{"className":127889,"code":130286,"language":127891,"meta":275,"style":275},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[277,130288,130289,130294,130300,130312,130316,130321,130327,130337],{"__ignoreMap":275},[152,130290,130291],{"class":281,"line":282},[152,130292,130293],{"class":866},"\u002F* 背景滚动（默认） *\u002F\n",[152,130295,130296,130298],{"class":281,"line":303},[152,130297,52948],{"class":52637},[152,130299,17187],{"class":483},[152,130301,130302,130305,130307,130310],{"class":281,"line":310},[152,130303,130304],{"class":293},"  background-attachment",[152,130306,52774],{"class":483},[152,130308,130309],{"class":293},"scroll",[152,130311,2965],{"class":483},[152,130313,130314],{"class":281,"line":324},[152,130315,3236],{"class":483},[152,130317,130318],{"class":281,"line":329},[152,130319,130320],{"class":866},"\u002F* 背景固定 *\u002F\n",[152,130322,130323,130325],{"class":281,"line":343},[152,130324,52948],{"class":52637},[152,130326,17187],{"class":483},[152,130328,130329,130331,130333,130335],{"class":281,"line":348},[152,130330,130304],{"class":293},[152,130332,52774],{"class":483},[152,130334,87570],{"class":293},[152,130336,2965],{"class":483},[152,130338,130339],{"class":281,"line":362},[152,130340,3236],{"class":483},[23,130342,130343,130352],{},[26,130344,130345],{},[29,130346,130347,130350],{},[32,130348,130349],{"align":34},"参数",[32,130351,104033],{"align":34},[43,130353,130354,130361],{},[29,130355,130356,130358],{},[48,130357,130309],{"align":34},[48,130359,130360],{"align":34},"背景图像是随对象内容滚动",[29,130362,130363,130365],{},[48,130364,87570],{"align":34},[48,130366,130367],{"align":34},"背景图像固定",[14,130369,130371],{"id":130370},"_826-背景样式合写","8.2.6 背景样式合写",[270,130373,130375],{"className":127889,"code":130374,"language":127891,"meta":275,"style":275},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[277,130376,130377,130382,130388,130416],{"__ignoreMap":275},[152,130378,130379],{"class":281,"line":282},[152,130380,130381],{"class":866},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[152,130383,130384,130386],{"class":281,"line":303},[152,130385,52948],{"class":52637},[152,130387,17187],{"class":483},[152,130389,130390,130392,130394,130396,130399,130401,130403,130405,130407,130410,130412,130414],{"class":281,"line":310},[152,130391,71948],{"class":293},[152,130393,52774],{"class":483},[152,130395,62179],{"class":293},[152,130397,130398],{"class":293}," url",[152,130400,1819],{"class":483},[152,130402,129987],{"class":6858},[152,130404,15330],{"class":483},[152,130406,63073],{"class":293},[152,130408,130409],{"class":293}," fixed",[152,130411,18759],{"class":293},[152,130413,130156],{"class":293},[152,130415,2965],{"class":483},[152,130417,130418],{"class":281,"line":324},[152,130419,3236],{"class":483},[14,130421,130423],{"id":130422},"_827-背景色半透明","8.2.7 背景色半透明",[270,130425,130427],{"className":127889,"code":130426,"language":127891,"meta":275,"style":275},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[277,130428,130429,130435,130461],{"__ignoreMap":275},[152,130430,130431,130433],{"class":281,"line":282},[152,130432,52948],{"class":52637},[152,130434,17187],{"class":483},[152,130436,130437,130439,130441,130443,130445,130447,130449,130451,130453,130455,130457,130459],{"class":281,"line":303},[152,130438,71948],{"class":293},[152,130440,52774],{"class":483},[152,130442,56447],{"class":293},[152,130444,1819],{"class":483},[152,130446,2000],{"class":293},[152,130448,14051],{"class":483},[152,130450,2000],{"class":293},[152,130452,14051],{"class":483},[152,130454,2000],{"class":293},[152,130456,14051],{"class":483},[152,130458,101858],{"class":293},[152,130460,4362],{"class":483},[152,130462,130463],{"class":281,"line":310},[152,130464,3236],{"class":483},[19,130466,100733],{},[19,130468,130469],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130471,130472],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130474,130475],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130477,130478],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[14,130480,130482],{"id":130481},"_828-总结","8.2.8 总结",[23,130484,130485,130496],{},[26,130486,130487],{},[29,130488,130489,130492,130494],{},[32,130490,130491],{"align":34},"属性",[32,130493,104033],{"align":34},[32,130495,1963],{"align":34},[43,130497,130498,130509,130520,130531,130542,130553,130564],{},[29,130499,130500,130503,130506],{},[48,130501,130502],{"align":34},"background-color",[48,130504,130505],{"align":34},"背景颜色",[48,130507,130508],{"align":34},"预定义的颜色值\u002F十六进制\u002FRGB代码",[29,130510,130511,130514,130517],{},[48,130512,130513],{"align":34},"background-image",[48,130515,130516],{"align":34},"背景图片",[48,130518,130519],{"align":34},"url(图片路径)",[29,130521,130522,130525,130528],{},[48,130523,130524],{"align":34},"background-repeat",[48,130526,130527],{"align":34},"是否平铺",[48,130529,130530],{"align":34},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[29,130532,130533,130536,130539],{},[48,130534,130535],{"align":34},"background-position",[48,130537,130538],{"align":34},"背景位置",[48,130540,130541],{"align":34},"length\u002Fposition 分别是x和y坐标",[29,130543,130544,130547,130550],{},[48,130545,130546],{"align":34},"background-attachment",[48,130548,130549],{"align":34},"背景附着",[48,130551,130552],{"align":34},"scroll(背景滚动) \u002Ffixed (背景固定)",[29,130554,130555,130558,130561],{},[48,130556,130557],{"align":34},"背景简写",[48,130559,130560],{"align":34},"书写更简单",[48,130562,130563],{"align":34},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[29,130565,130566,130569,130572],{},[48,130567,130568],{"align":34},"背景半透明",[48,130570,130571],{"align":34},"背景颜色半透明",[48,130573,130574],{"align":34},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130576,130577],{},"颜色渐变：",[401,130579],{"style":127745,"src":130580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[401,130582],{"style":127745,"src":130583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[14,130585,130587],{"id":130586},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[270,130589,130591],{"className":128636,"code":130590,"language":128638,"meta":275,"style":275},"\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",[277,130592,130593,130608,130627,130646,130665,130684,130703],{"__ignoreMap":275},[152,130594,130595,130597,130599,130601,130603,130606],{"class":281,"line":282},[152,130596,844],{"class":483},[152,130598,52948],{"class":52637},[152,130600,54823],{"class":285},[152,130602,1864],{"class":483},[152,130604,130605],{"class":289},"\"nav\"",[152,130607,52644],{"class":483},[152,130609,130610,130612,130614,130616,130618,130620,130623,130625],{"class":281,"line":303},[152,130611,53481],{"class":483},[152,130613,69],{"class":52637},[152,130615,62394],{"class":285},[152,130617,1864],{"class":483},[152,130619,62399],{"class":289},[152,130621,130622],{"class":483},">五彩导航1\u003C\u002F",[152,130624,69],{"class":52637},[152,130626,52644],{"class":483},[152,130628,130629,130631,130633,130635,130637,130639,130642,130644],{"class":281,"line":310},[152,130630,53481],{"class":483},[152,130632,69],{"class":52637},[152,130634,62394],{"class":285},[152,130636,1864],{"class":483},[152,130638,62399],{"class":289},[152,130640,130641],{"class":483},">五彩导航2\u003C\u002F",[152,130643,69],{"class":52637},[152,130645,52644],{"class":483},[152,130647,130648,130650,130652,130654,130656,130658,130661,130663],{"class":281,"line":324},[152,130649,53481],{"class":483},[152,130651,69],{"class":52637},[152,130653,62394],{"class":285},[152,130655,1864],{"class":483},[152,130657,62399],{"class":289},[152,130659,130660],{"class":483},">五彩导航3\u003C\u002F",[152,130662,69],{"class":52637},[152,130664,52644],{"class":483},[152,130666,130667,130669,130671,130673,130675,130677,130680,130682],{"class":281,"line":329},[152,130668,53481],{"class":483},[152,130670,69],{"class":52637},[152,130672,62394],{"class":285},[152,130674,1864],{"class":483},[152,130676,62399],{"class":289},[152,130678,130679],{"class":483},">五彩导航4\u003C\u002F",[152,130681,69],{"class":52637},[152,130683,52644],{"class":483},[152,130685,130686,130688,130690,130692,130694,130696,130699,130701],{"class":281,"line":343},[152,130687,53481],{"class":483},[152,130689,69],{"class":52637},[152,130691,62394],{"class":285},[152,130693,1864],{"class":483},[152,130695,62399],{"class":289},[152,130697,130698],{"class":483},">五彩导航5\u003C\u002F",[152,130700,69],{"class":52637},[152,130702,52644],{"class":483},[152,130704,130705,130707,130709],{"class":281,"line":348},[152,130706,53122],{"class":483},[152,130708,52948],{"class":52637},[152,130710,52644],{"class":483},[270,130712,130714],{"className":127889,"code":130713,"language":127891,"meta":275,"style":275},".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",[277,130715,130716,130725,130735,130747,130759,130769,130781,130791,130795,130820,130843,130866,130889],{"__ignoreMap":275},[152,130717,130718,130721,130723],{"class":281,"line":282},[152,130719,130720],{"class":285},".nav",[152,130722,3070],{"class":52637},[152,130724,17187],{"class":483},[152,130726,130727,130729,130731,130733],{"class":281,"line":303},[152,130728,129505],{"class":293},[152,130730,52774],{"class":483},[152,130732,73720],{"class":293},[152,130734,2965],{"class":483},[152,130736,130737,130739,130741,130743,130745],{"class":281,"line":310},[152,130738,71905],{"class":293},[152,130740,52774],{"class":483},[152,130742,2625],{"class":293},[152,130744,52829],{"class":476},[152,130746,2965],{"class":483},[152,130748,130749,130751,130753,130755,130757],{"class":281,"line":324},[152,130750,72125],{"class":293},[152,130752,52774],{"class":483},[152,130754,2664],{"class":293},[152,130756,52829],{"class":476},[152,130758,2965],{"class":483},[152,130760,130761,130763,130765,130767],{"class":281,"line":329},[152,130762,71863],{"class":293},[152,130764,52774],{"class":483},[152,130766,52929],{"class":293},[152,130768,2965],{"class":483},[152,130770,130771,130773,130775,130777,130779],{"class":281,"line":343},[152,130772,128573],{"class":293},[152,130774,52774],{"class":483},[152,130776,2664],{"class":293},[152,130778,52829],{"class":476},[152,130780,2965],{"class":483},[152,130782,130783,130785,130787,130789],{"class":281,"line":348},[152,130784,72242],{"class":293},[152,130786,52774],{"class":483},[152,130788,62179],{"class":293},[152,130790,2965],{"class":483},[152,130792,130793],{"class":281,"line":362},[152,130794,3236],{"class":483},[152,130796,130797,130799,130801,130804,130806,130808,130811,130813,130815,130817],{"class":281,"line":367},[152,130798,130720],{"class":285},[152,130800,3070],{"class":52637},[152,130802,130803],{"class":285},":nth-child",[152,130805,1819],{"class":483},[152,130807,2026],{"class":293},[152,130809,130810],{"class":483},") { ",[152,130812,130502],{"class":293},[152,130814,52774],{"class":483},[152,130816,129920],{"class":293},[152,130818,130819],{"class":483},"; }\n",[152,130821,130822,130824,130826,130828,130830,130832,130834,130836,130838,130841],{"class":281,"line":381},[152,130823,130720],{"class":285},[152,130825,3070],{"class":52637},[152,130827,130803],{"class":285},[152,130829,1819],{"class":483},[152,130831,1894],{"class":293},[152,130833,130810],{"class":483},[152,130835,130502],{"class":293},[152,130837,52774],{"class":483},[152,130839,130840],{"class":293},"#ff0000",[152,130842,130819],{"class":483},[152,130844,130845,130847,130849,130851,130853,130855,130857,130859,130861,130864],{"class":281,"line":386},[152,130846,130720],{"class":285},[152,130848,3070],{"class":52637},[152,130850,130803],{"class":285},[152,130852,1819],{"class":483},[152,130854,1888],{"class":293},[152,130856,130810],{"class":483},[152,130858,130502],{"class":293},[152,130860,52774],{"class":483},[152,130862,130863],{"class":293},"#00a4ff",[152,130865,130819],{"class":483},[152,130867,130868,130870,130872,130874,130876,130878,130880,130882,130884,130887],{"class":281,"line":932},[152,130869,130720],{"class":285},[152,130871,3070],{"class":52637},[152,130873,130803],{"class":285},[152,130875,1819],{"class":483},[152,130877,2101],{"class":293},[152,130879,130810],{"class":483},[152,130881,130502],{"class":293},[152,130883,52774],{"class":483},[152,130885,130886],{"class":293},"#ff00ff",[152,130888,130819],{"class":483},[152,130890,130891,130893,130895,130897,130899,130901,130903,130905,130907,130910],{"class":281,"line":942},[152,130892,130720],{"class":285},[152,130894,3070],{"class":52637},[152,130896,130803],{"class":285},[152,130898,1819],{"class":483},[152,130900,2127],{"class":293},[152,130902,130810],{"class":483},[152,130904,130502],{"class":293},[152,130906,52774],{"class":483},[152,130908,130909],{"class":293},"#00ff00",[152,130911,130819],{"class":483},[1760,130913,130915],{"id":130914},"_83-css三大特性","8.3 css三大特性",[14,130917,130919],{"id":130918},"_831-层叠性","8.3.1 层叠性",[19,130921,130922],{},"为了解决样式冲突问题",[19,130924,130925],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130927,130928],{},"   ②样式不冲突，不会层叠",[14,130930,130932],{"id":130931},"_832-继承性","8.3.2 继承性",[19,130934,130935],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130937,130938],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[270,130940,130942],{"className":127889,"code":130941,"language":127891,"meta":275,"style":275},"p {\n  color: #333;\n}\n",[277,130943,130944,130950,130960],{"__ignoreMap":275},[152,130945,130946,130948],{"class":281,"line":282},[152,130947,19],{"class":52637},[152,130949,17187],{"class":483},[152,130951,130952,130954,130956,130958],{"class":281,"line":303},[152,130953,72242],{"class":293},[152,130955,52774],{"class":483},[152,130957,63706],{"class":293},[152,130959,2965],{"class":483},[152,130961,130962],{"class":281,"line":310},[152,130963,3236],{"class":483},[401,130965],{"style":127745,"src":130966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130968,130969],{},"解释：①行高可以跟单位也可以不跟单位",[19,130971,130972],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130974,130975],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130977,130978],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[14,130980,130982],{"id":130981},"_833-优先级","8.3.3 优先级",[416,130984,130985,130988],{},[419,130986,130987],{},"选择器相同，则执行层叠性",[419,130989,130990],{},"选择器不同，则根据选择器权重执行",[23,130992,130993,131003],{},[26,130994,130995],{},[29,130996,130997,131000],{},[32,130998,130999],{"align":34},"选择器",[32,131001,131002],{"align":34},"选择器权重",[43,131004,131005,131013,131021,131029,131037,131045],{},[29,131006,131007,131010],{},[48,131008,131009],{"align":34},"继承 或者*",[48,131011,131012],{"align":34},"0，0，0，0",[29,131014,131015,131018],{},[48,131016,131017],{"align":34},"标签选择器",[48,131019,131020],{"align":34},"0，0，0，1",[29,131022,131023,131026],{},[48,131024,131025],{"align":34},"类选择器，伪类选择器",[48,131027,131028],{"align":34},"0，0，1，0",[29,131030,131031,131034],{},[48,131032,131033],{"align":34},"ID选择器",[48,131035,131036],{"align":34},"0，1，0，0",[29,131038,131039,131042],{},[48,131040,131041],{"align":34},"行内样式",[48,131043,131044],{"align":34},"1，0，0，0",[29,131046,131047,131050],{},[48,131048,131049],{"align":34},"！important",[48,131051,131052],{"align":34},"无穷大",[19,131054,131055],{},"! important用法：",[270,131057,131059],{"className":127889,"code":131058,"language":127891,"meta":275,"style":275},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[277,131060,131061,131066,131072,131085,131089,131094,131100,131110],{"__ignoreMap":275},[152,131062,131063],{"class":281,"line":282},[152,131064,131065],{"class":866},"\u002F* !important 拥有最高优先级 *\u002F\n",[152,131067,131068,131070],{"class":281,"line":303},[152,131069,52948],{"class":52637},[152,131071,17187],{"class":483},[152,131073,131074,131076,131078,131080,131083],{"class":281,"line":310},[152,131075,72242],{"class":293},[152,131077,52774],{"class":483},[152,131079,52982],{"class":293},[152,131081,131082],{"class":476}," !important",[152,131084,2965],{"class":483},[152,131086,131087],{"class":281,"line":324},[152,131088,3236],{"class":483},[152,131090,131091],{"class":281,"line":329},[152,131092,131093],{"class":866},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[152,131095,131096,131098],{"class":281,"line":343},[152,131097,52948],{"class":52637},[152,131099,17187],{"class":483},[152,131101,131102,131104,131106,131108],{"class":281,"line":348},[152,131103,72242],{"class":293},[152,131105,52774],{"class":483},[152,131107,58758],{"class":293},[152,131109,2965],{"class":483},[152,131111,131112],{"class":281,"line":362},[152,131113,3236],{"class":483},[19,131115,131116],{},"优先级注意点：",[19,131118,131119],{},"①权重是有4组数字组成,但是不会有进位",[19,131121,131122],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131124,131125],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131127,131128],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131130,131131],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131133,131134],{},"⑥复合选择器",[23,131136,131137,131147],{},[26,131138,131139],{},[29,131140,131141,131144],{},[32,131142,131143],{"align":34},"div ul li",[32,131145,131146],{"align":34},"0,0,0,3",[43,131148,131149,131157,131165],{},[29,131150,131151,131154],{},[48,131152,131153],{"align":34},".nav ul li",[48,131155,131156],{"align":34},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[29,131158,131159,131162],{},[48,131160,131161],{"align":34},"a:hover",[48,131163,131164],{"align":34},"0,0,1,1",[29,131166,131167,131170],{},[48,131168,131169],{"align":34},".nav a",[48,131171,131164],{"align":34},[1736,131173,131174],{},"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":275,"searchDepth":303,"depth":303,"links":131176},[131177,131185,131196],{"id":129285,"depth":303,"text":129286,"children":131178},[131179,131180,131181,131182,131183,131184],{"id":129298,"depth":310,"text":129299},{"id":129370,"depth":310,"text":129371},{"id":129442,"depth":310,"text":129443},{"id":129473,"depth":310,"text":129474},{"id":129480,"depth":310,"text":129481},{"id":129633,"depth":310,"text":129634},{"id":129941,"depth":303,"text":129942,"children":131186},[131187,131188,131189,131190,131191,131192,131193,131194,131195],{"id":129948,"depth":310,"text":129949},{"id":129958,"depth":310,"text":129959},{"id":130054,"depth":310,"text":130055},{"id":130127,"depth":310,"text":130128},{"id":130282,"depth":310,"text":130283},{"id":130370,"depth":310,"text":130371},{"id":130422,"depth":310,"text":130423},{"id":130481,"depth":310,"text":130482},{"id":130586,"depth":310,"text":130587},{"id":130914,"depth":303,"text":130915,"children":131197},[131198,131199,131200],{"id":130918,"depth":310,"text":130919},{"id":130931,"depth":310,"text":130932},{"id":130981,"depth":310,"text":130982},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129277,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131207,"title":131208,"body":131209,"description":24991,"extension":1744,"meta":132799,"navigation":306,"path":132800,"seo":132801,"stem":132802,"__hash__":132803},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131210,"toc":132778},[131211,131214,131218,131221,131224,131227,131230,131233,131236,131239,131243,131251,131288,131324,131327,131341,131346,131380,131383,131476,131481,131484,131514,131517,131522,131530,131534,131541,131587,131631,131636,131639,131642,131645,131648,131651,131654,131656,131659,131663,131668,131712,131717,131720,131723,131760,131765,131768,131771,131774,131777,131809,131812,131815,131818,131850,131853,131856,131859,131863,131866,131898,131901,131905,131925,131928,131936,131939,131943,131948,131951,131983,131988,131991,132029,132033,132038,132041,132044,132075,132078,132095,132100,132152,132212,132217,132271,132309,132313,132317,132320,132324,132332,132335,132337,132348,132353,132401,132435,132438,132441,132444,132447,132491,132494,132497,132500,132503,132506,132509,132553,132556,132559,132562,132565,132568,132571,132577,132580,132624,132627,132630,132633,132636,132639,132683,132686,132688,132691,132695,132699,132737,132741,132744,132747,132751,132759,132763,132766,132769,132772,132775],[10,131212,131208],{"id":131213},"_9-css盒模型浮动与切图",[1760,131215,131217],{"id":131216},"_91-盒子模型","9.1 盒子模型",[19,131219,131220],{},"利用盒子来设计网页",[19,131222,131223],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131225,131226],{},"网页布局设置：",[19,131228,131229],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131231,131232],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131234,131235],{},"③往盒子里装内容",[401,131237],{"style":127745,"src":131238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[14,131240,131242],{"id":131241},"_911-边框border","9.1.1 边框（border）",[416,131244,131245,131248],{},[419,131246,131247],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[419,131249,131250],{},"语法",[270,131252,131254],{"className":127889,"code":131253,"language":127891,"meta":275,"style":275},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[277,131255,131256,131261,131267,131284],{"__ignoreMap":275},[152,131257,131258],{"class":281,"line":282},[152,131259,131260],{"class":866},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[152,131262,131263,131265],{"class":281,"line":303},[152,131264,52948],{"class":52637},[152,131266,17187],{"class":483},[152,131268,131269,131271,131273,131275,131277,131279,131282],{"class":281,"line":310},[152,131270,72233],{"class":293},[152,131272,52774],{"class":483},[152,131274,2026],{"class":293},[152,131276,52829],{"class":476},[152,131278,52858],{"class":293},[152,131280,131281],{"class":293}," #ccc",[152,131283,2965],{"class":483},[152,131285,131286],{"class":281,"line":324},[152,131287,3236],{"class":483},[23,131289,131290,131298],{},[26,131291,131292],{},[29,131293,131294,131296],{},[32,131295,130491],{"align":34},[32,131297,104033],{"align":34},[43,131299,131300,131308,131316],{},[29,131301,131302,131305],{},[48,131303,131304],{"align":34},"border-width",[48,131306,131307],{"align":34},"定义边框粗细，单位是px",[29,131309,131310,131313],{},[48,131311,131312],{"align":34},"border-style",[48,131314,131315],{"align":34},"边框的样式",[29,131317,131318,131321],{},[48,131319,131320],{"align":34},"border-color",[48,131322,131323],{"align":34},"边框的颜色",[19,131325,131326],{},"边框样式 border-style 可以设置如下值：",[698,131328,131329,131332,131335,131338],{},[419,131330,131331],{},"none：没有边框即忽略所有边框的宽度（默认值）",[419,131333,131334],{},"solid：边框为单实线(最为常用的)",[419,131336,131337],{},"dashed：边框为虚线",[419,131339,131340],{},"dotted：边框为点线",[416,131342,131343],{"start":310},[419,131344,131345],{},"边框的合写分写",[270,131347,131348],{"className":127889,"code":131253,"language":127891,"meta":275,"style":275},[277,131349,131350,131354,131360,131376],{"__ignoreMap":275},[152,131351,131352],{"class":281,"line":282},[152,131353,131260],{"class":866},[152,131355,131356,131358],{"class":281,"line":303},[152,131357,52948],{"class":52637},[152,131359,17187],{"class":483},[152,131361,131362,131364,131366,131368,131370,131372,131374],{"class":281,"line":310},[152,131363,72233],{"class":293},[152,131365,52774],{"class":483},[152,131367,2026],{"class":293},[152,131369,52829],{"class":476},[152,131371,52858],{"class":293},[152,131373,131281],{"class":293},[152,131375,2965],{"class":483},[152,131377,131378],{"class":281,"line":324},[152,131379,3236],{"class":483},[19,131381,131382],{},"边框分开写法：",[270,131384,131386],{"className":127889,"code":131385,"language":127891,"meta":275,"style":275},"\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",[277,131387,131388,131393,131399,131417,131435,131454,131472],{"__ignoreMap":275},[152,131389,131390],{"class":281,"line":282},[152,131391,131392],{"class":866},"\u002F* 边框分开写法 *\u002F\n",[152,131394,131395,131397],{"class":281,"line":303},[152,131396,52948],{"class":52637},[152,131398,17187],{"class":483},[152,131400,131401,131404,131406,131408,131410,131412,131415],{"class":281,"line":310},[152,131402,131403],{"class":293},"  border-top",[152,131405,52774],{"class":483},[152,131407,2026],{"class":293},[152,131409,52829],{"class":476},[152,131411,52858],{"class":293},[152,131413,131414],{"class":293}," #000",[152,131416,2965],{"class":483},[152,131418,131419,131422,131424,131426,131428,131430,131433],{"class":281,"line":324},[152,131420,131421],{"class":293},"  border-right",[152,131423,52774],{"class":483},[152,131425,1894],{"class":293},[152,131427,52829],{"class":476},[152,131429,63578],{"class":293},[152,131431,131432],{"class":293}," #333",[152,131434,2965],{"class":483},[152,131436,131437,131440,131442,131444,131446,131449,131452],{"class":281,"line":329},[152,131438,131439],{"class":293},"  border-bottom",[152,131441,52774],{"class":483},[152,131443,1888],{"class":293},[152,131445,52829],{"class":476},[152,131447,131448],{"class":293}," dotted",[152,131450,131451],{"class":293}," #666",[152,131453,2965],{"class":483},[152,131455,131456,131459,131461,131463,131465,131467,131470],{"class":281,"line":343},[152,131457,131458],{"class":293},"  border-left",[152,131460,52774],{"class":483},[152,131462,2026],{"class":293},[152,131464,52829],{"class":476},[152,131466,52858],{"class":293},[152,131468,131469],{"class":293}," #999",[152,131471,2965],{"class":483},[152,131473,131474],{"class":281,"line":348},[152,131475,3236],{"class":483},[416,131477,131478],{"start":324},[419,131479,131480],{},"表格的细线边框",[19,131482,131483],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[270,131485,131487],{"className":127889,"code":131486,"language":127891,"meta":275,"style":275},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[277,131488,131489,131494,131500,131510],{"__ignoreMap":275},[152,131490,131491],{"class":281,"line":282},[152,131492,131493],{"class":866},"\u002F* 表格细线边框合并 *\u002F\n",[152,131495,131496,131498],{"class":281,"line":303},[152,131497,23],{"class":52637},[152,131499,17187],{"class":483},[152,131501,131502,131504,131506,131508],{"class":281,"line":310},[152,131503,71915],{"class":293},[152,131505,52774],{"class":483},[152,131507,66372],{"class":293},[152,131509,2965],{"class":483},[152,131511,131512],{"class":281,"line":324},[152,131513,3236],{"class":483},[19,131515,131516],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[416,131518,131519],{"start":329},[419,131520,131521],{},"解决边框额外增加盒子的实际大小的方法：",[698,131523,131524,131527],{},[419,131525,131526],{},"测量盒子大小的时候,不量边框",[419,131528,131529],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[14,131531,131533],{"id":131532},"_912-内边距","9.1.2 内边距",[416,131535,131536,131539],{},[419,131537,131538],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[419,131540,131250],{},[23,131542,131543,131553],{},[26,131544,131545],{},[29,131546,131547,131550],{},[32,131548,131549],{"align":34},"值的个数",[32,131551,131552],{"align":34},"表达意思",[43,131554,131555,131563,131571,131579],{},[29,131556,131557,131560],{},[48,131558,131559],{"align":34},"padding: 5px;",[48,131561,131562],{"align":34},"1个值，代表上下左右都有5个元素",[29,131564,131565,131568],{},[48,131566,131567],{"align":34},"padding: 5px 10px;",[48,131569,131570],{"align":34},"2个值，代表上下内边距为5像素，左右内边距为10像素",[29,131572,131573,131576],{},[48,131574,131575],{"align":34},"padding: 5px 10px 20px;",[48,131577,131578],{"align":34},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[29,131580,131581,131584],{},[48,131582,131583],{"align":34},"padding: 5px 10px 20px 30px;",[48,131585,131586],{"align":34},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[23,131588,131589,131597],{},[26,131590,131591],{},[29,131592,131593,131595],{},[32,131594,130491],{"align":34},[32,131596,104033],{"align":34},[43,131598,131599,131607,131615,131623],{},[29,131600,131601,131604],{},[48,131602,131603],{"align":34},"padding-left",[48,131605,131606],{"align":34},"左内边距",[29,131608,131609,131612],{},[48,131610,131611],{"align":34},"padding-right",[48,131613,131614],{"align":34},"右内边距",[29,131616,131617,131620],{},[48,131618,131619],{"align":34},"padding-top",[48,131621,131622],{"align":34},"上内边距",[29,131624,131625,131628],{},[48,131626,131627],{"align":34},"padding-bottom",[48,131629,131630],{"align":34},"下内边距",[416,131632,131633],{"start":310},[419,131634,131635],{},"内边距会影响盒子的实际大小",[19,131637,131638],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131640,131641],{},"①内容和边框有了距离，添加了内边距",[19,131643,131644],{},"②padding影响了盒子实际大小",[19,131646,131647],{},"内边距对盒子大小的影响：",[19,131649,131650],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131652,131653],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131655,96557],{},[19,131657,131658],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[14,131660,131662],{"id":131661},"_913-外边距","9.1.3 外边距",[416,131664,131665],{},[419,131666,131667],{},"控制盒子与盒子之间的距离",[23,131669,131670,131678],{},[26,131671,131672],{},[29,131673,131674,131676],{},[32,131675,130491],{"align":34},[32,131677,104033],{"align":34},[43,131679,131680,131688,131696,131704],{},[29,131681,131682,131685],{},[48,131683,131684],{"align":34},"margin-left",[48,131686,131687],{"align":34},"左外边距",[29,131689,131690,131693],{},[48,131691,131692],{"align":34},"margin-right",[48,131694,131695],{"align":34},"右外边距",[29,131697,131698,131701],{},[48,131699,131700],{"align":34},"margin-top",[48,131702,131703],{"align":34},"上外边距",[29,131705,131706,131709],{},[48,131707,131708],{"align":34},"margin-bottom",[48,131710,131711],{"align":34},"下外边距",[416,131713,131714],{"start":303},[419,131715,131716],{},"外边距可以让块级盒子水平居中的两个条件：",[19,131718,131719],{},"①盒子必须指定了宽度（width）",[19,131721,131722],{},"②盒子左右的外边距都设置为 auto",[270,131724,131726],{"className":127889,"code":131725,"language":127891,"meta":275,"style":275},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[277,131727,131728,131733,131740,131756],{"__ignoreMap":275},[152,131729,131730],{"class":281,"line":282},[152,131731,131732],{"class":866},"\u002F* margin 复合写法（同上） *\u002F\n",[152,131734,131735,131738],{"class":281,"line":303},[152,131736,131737],{"class":285},".box",[152,131739,17187],{"class":483},[152,131741,131742,131744,131746,131748,131750,131753],{"class":281,"line":310},[152,131743,71807],{"class":293},[152,131745,52774],{"class":483},[152,131747,2000],{"class":293},[152,131749,52893],{"class":293},[152,131751,131752],{"class":483},";  ",[152,131754,131755],{"class":866},"\u002F* 块级盒子水平居中 *\u002F\n",[152,131757,131758],{"class":281,"line":324},[152,131759,3236],{"class":483},[416,131761,131762],{"start":310},[419,131763,131764],{},"外边距塌陷问题",[19,131766,131767],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[401,131769],{"style":127745,"src":131770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,131772,131773],{},"解决方案：",[19,131775,131776],{},"①可以为父亲元素定义上边距",[270,131778,131779],{"className":127889,"code":131725,"language":127891,"meta":275,"style":275},[277,131780,131781,131785,131791,131805],{"__ignoreMap":275},[152,131782,131783],{"class":281,"line":282},[152,131784,131732],{"class":866},[152,131786,131787,131789],{"class":281,"line":303},[152,131788,131737],{"class":285},[152,131790,17187],{"class":483},[152,131792,131793,131795,131797,131799,131801,131803],{"class":281,"line":310},[152,131794,71807],{"class":293},[152,131796,52774],{"class":483},[152,131798,2000],{"class":293},[152,131800,52893],{"class":293},[152,131802,131752],{"class":483},[152,131804,131755],{"class":866},[152,131806,131807],{"class":281,"line":324},[152,131808,3236],{"class":483},[19,131810,131811],{},"②可以为父亲元素定义上内边距",[19,131813,131814],{},"③可以为父亲元素添加overflow:hidden",[401,131816],{"style":127745,"src":131817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[270,131819,131820],{"className":127889,"code":131725,"language":127891,"meta":275,"style":275},[277,131821,131822,131826,131832,131846],{"__ignoreMap":275},[152,131823,131824],{"class":281,"line":282},[152,131825,131732],{"class":866},[152,131827,131828,131830],{"class":281,"line":303},[152,131829,131737],{"class":285},[152,131831,17187],{"class":483},[152,131833,131834,131836,131838,131840,131842,131844],{"class":281,"line":310},[152,131835,71807],{"class":293},[152,131837,52774],{"class":483},[152,131839,2000],{"class":293},[152,131841,52893],{"class":293},[152,131843,131752],{"class":483},[152,131845,131755],{"class":866},[152,131847,131848],{"class":281,"line":324},[152,131849,3236],{"class":483},[401,131851],{"style":127745,"src":131852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131854,131855],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131857,131858],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[14,131860,131862],{"id":131861},"_914-清除内外边距","9.1.4 清除内外边距",[19,131864,131865],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[270,131867,131868],{"className":127889,"code":131725,"language":127891,"meta":275,"style":275},[277,131869,131870,131874,131880,131894],{"__ignoreMap":275},[152,131871,131872],{"class":281,"line":282},[152,131873,131732],{"class":866},[152,131875,131876,131878],{"class":281,"line":303},[152,131877,131737],{"class":285},[152,131879,17187],{"class":483},[152,131881,131882,131884,131886,131888,131890,131892],{"class":281,"line":310},[152,131883,71807],{"class":293},[152,131885,52774],{"class":483},[152,131887,2000],{"class":293},[152,131889,52893],{"class":293},[152,131891,131752],{"class":483},[152,131893,131755],{"class":866},[152,131895,131896],{"class":281,"line":324},[152,131897,3236],{"class":483},[19,131899,131900],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[14,131902,131904],{"id":131903},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[698,131906,131907,131910,131913,131916,131919,131922],{},[419,131908,131909],{},"文件→打开 ：可以打开我们要测量的图片",[419,131911,131912],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[419,131914,131915],{},"右击标尺，把里面的单位改为像素",[419,131917,131918],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[419,131920,131921],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[419,131923,131924],{},"用选区拖动 可以测量大小",[401,131926],{"style":127745,"src":131927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[698,131929,131930,131933],{},[419,131931,131932],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[419,131934,131935],{},"吸管取色工具",[401,131937],{"style":127745,"src":131938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[14,131940,131942],{"id":131941},"_916-案例","9.1.6 案例",[416,131944,131945],{},[419,131946,131947],{},"小米商品",[401,131949],{"style":127745,"src":131950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[270,131952,131953],{"className":127889,"code":131725,"language":127891,"meta":275,"style":275},[277,131954,131955,131959,131965,131979],{"__ignoreMap":275},[152,131956,131957],{"class":281,"line":282},[152,131958,131732],{"class":866},[152,131960,131961,131963],{"class":281,"line":303},[152,131962,131737],{"class":285},[152,131964,17187],{"class":483},[152,131966,131967,131969,131971,131973,131975,131977],{"class":281,"line":310},[152,131968,71807],{"class":293},[152,131970,52774],{"class":483},[152,131972,2000],{"class":293},[152,131974,52893],{"class":293},[152,131976,131752],{"class":483},[152,131978,131755],{"class":866},[152,131980,131981],{"class":281,"line":324},[152,131982,3236],{"class":483},[416,131984,131985],{"start":303},[419,131986,131987],{},"快报模块",[401,131989],{"style":127745,"src":131990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[270,131992,131994],{"className":128636,"code":131993,"language":128638,"meta":275,"style":275},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[277,131995,131996,132001,132016,132021],{"__ignoreMap":275},[152,131997,131998],{"class":281,"line":282},[152,131999,132000],{"class":866},"\u003C!-- HTML 代码示例 -->\n",[152,132002,132003,132005,132007,132009,132011,132014],{"class":281,"line":303},[152,132004,844],{"class":483},[152,132006,52948],{"class":52637},[152,132008,54823],{"class":285},[152,132010,1864],{"class":483},[152,132012,132013],{"class":289},"\"example\"",[152,132015,52644],{"class":483},[152,132017,132018],{"class":281,"line":310},[152,132019,132020],{"class":483},"  示例内容\n",[152,132022,132023,132025,132027],{"class":281,"line":324},[152,132024,53122],{"class":483},[152,132026,52948],{"class":52637},[152,132028,52644],{"class":483},[14,132030,132032],{"id":132031},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[416,132034,132035],{},[419,132036,132037],{},"圆角边框",[19,132039,132040],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[401,132042],{"style":127745,"src":132043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[270,132045,132047],{"className":127889,"code":132046,"language":127891,"meta":275,"style":275},"div {\n  border: 1px solid #ccc;\n}\n",[277,132048,132049,132055,132071],{"__ignoreMap":275},[152,132050,132051,132053],{"class":281,"line":282},[152,132052,52948],{"class":52637},[152,132054,17187],{"class":483},[152,132056,132057,132059,132061,132063,132065,132067,132069],{"class":281,"line":303},[152,132058,72233],{"class":293},[152,132060,52774],{"class":483},[152,132062,2026],{"class":293},[152,132064,52829],{"class":476},[152,132066,52858],{"class":293},[152,132068,131281],{"class":293},[152,132070,2965],{"class":483},[152,132072,132073],{"class":281,"line":310},[152,132074,3236],{"class":483},[19,132076,132077],{},"解释:",[698,132079,132080,132083,132086,132089,132092],{},[419,132081,132082],{},"参数值可以为数值或百分比的形式",[419,132084,132085],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[419,132087,132088],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[419,132090,132091],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[419,132093,132094],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[416,132096,132097],{"start":303},[419,132098,132099],{},"盒子阴影",[270,132101,132103],{"className":127889,"code":132102,"language":127891,"meta":275,"style":275},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[277,132104,132105,132111,132148],{"__ignoreMap":275},[152,132106,132107,132109],{"class":281,"line":282},[152,132108,52948],{"class":52637},[152,132110,17187],{"class":483},[152,132112,132113,132116,132118,132120,132122,132124,132126,132128,132130,132132,132134,132136,132138,132140,132142,132144,132146],{"class":281,"line":303},[152,132114,132115],{"class":293},"  box-shadow",[152,132117,52774],{"class":483},[152,132119,2000],{"class":293},[152,132121,16370],{"class":293},[152,132123,52829],{"class":476},[152,132125,3689],{"class":293},[152,132127,52829],{"class":476},[152,132129,80104],{"class":293},[152,132131,1819],{"class":483},[152,132133,2000],{"class":293},[152,132135,14051],{"class":483},[152,132137,2000],{"class":293},[152,132139,14051],{"class":483},[152,132141,2000],{"class":293},[152,132143,14051],{"class":483},[152,132145,87547],{"class":293},[152,132147,4362],{"class":483},[152,132149,132150],{"class":281,"line":310},[152,132151,3236],{"class":483},[23,132153,132154,132162],{},[26,132155,132156],{},[29,132157,132158,132160],{},[32,132159,1963],{"align":34},[32,132161,29090],{"align":34},[43,132163,132164,132172,132180,132188,132196,132204],{},[29,132165,132166,132169],{},[48,132167,132168],{"align":34},"h-shadow",[48,132170,132171],{"align":34},"必需,水平阴影的位置,允许负值",[29,132173,132174,132177],{},[48,132175,132176],{"align":34},"v-shadow",[48,132178,132179],{"align":34},"必需,垂直阴影的位置,允许负值",[29,132181,132182,132185],{},[48,132183,132184],{"align":34},"blur",[48,132186,132187],{"align":34},"可选,模糊距离,就是影子的虚实",[29,132189,132190,132193],{},[48,132191,132192],{"align":34},"spread",[48,132194,132195],{"align":34},"可选,阴影尺寸",[29,132197,132198,132201],{},[48,132199,132200],{"align":34},"color",[48,132202,132203],{"align":34},"可选,阴影的颜色",[29,132205,132206,132209],{},[48,132207,132208],{"align":34},"inset",[48,132210,132211],{"align":34},"可选,将外部阴影(outset)改为内部阴影",[416,132213,132214],{"start":310},[419,132215,132216],{},"文字阴影",[270,132218,132220],{"className":127889,"code":132219,"language":127891,"meta":275,"style":275},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[277,132221,132222,132228,132267],{"__ignoreMap":275},[152,132223,132224,132226],{"class":281,"line":282},[152,132225,19],{"class":52637},[152,132227,17187],{"class":483},[152,132229,132230,132233,132235,132237,132239,132241,132243,132245,132247,132249,132251,132253,132255,132257,132259,132261,132263,132265],{"class":281,"line":303},[152,132231,132232],{"class":293},"  text-shadow",[152,132234,52774],{"class":483},[152,132236,2026],{"class":293},[152,132238,52829],{"class":476},[152,132240,26729],{"class":293},[152,132242,52829],{"class":476},[152,132244,16370],{"class":293},[152,132246,52829],{"class":476},[152,132248,80104],{"class":293},[152,132250,1819],{"class":483},[152,132252,2000],{"class":293},[152,132254,14051],{"class":483},[152,132256,2000],{"class":293},[152,132258,14051],{"class":483},[152,132260,2000],{"class":293},[152,132262,14051],{"class":483},[152,132264,101858],{"class":293},[152,132266,4362],{"class":483},[152,132268,132269],{"class":281,"line":310},[152,132270,3236],{"class":483},[23,132272,132273,132281],{},[26,132274,132275],{},[29,132276,132277,132279],{},[32,132278,1963],{"align":34},[32,132280,29090],{"align":34},[43,132282,132283,132289,132296,132303],{},[29,132284,132285,132287],{},[48,132286,132168],{"align":34},[48,132288,132171],{"align":34},[29,132290,132291,132293],{},[48,132292,132176],{"align":34},[48,132294,132295],{"align":34},"必需,垂直阴影位置,允许负值",[29,132297,132298,132300],{},[48,132299,132184],{"align":34},[48,132301,132302],{"align":34},"可选,模糊的距离",[29,132304,132305,132307],{},[48,132306,132200],{"align":34},[48,132308,132203],{"align":34},[1760,132310,132312],{"id":132311},"_92-浮动","9.2 浮动",[14,132314,132316],{"id":132315},"_921-浮动介绍","9.2.1 浮动介绍",[19,132318,132319],{},"在16.2中详细介绍",[14,132321,132323],{"id":132322},"_922-清除浮动","9.2.2 清除浮动",[416,132325,132326,132329],{},[419,132327,132328],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[419,132330,132331],{},"清除浮动的本质",[19,132333,132334],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132336,10657],{},[698,132338,132339,132342,132345],{},[419,132340,132341],{},"如果父盒子本身有高度，则不需要清除浮动",[419,132343,132344],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[419,132346,132347],{},"父级有了高度，就不会影响下面的标准流了",[416,132349,132350],{"start":310},[419,132351,132352],{},"清除浮动样式",[270,132354,132356],{"className":127889,"code":132355,"language":127891,"meta":275,"style":275},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[277,132357,132358,132365,132376,132380,132387,132397],{"__ignoreMap":275},[152,132359,132360,132363],{"class":281,"line":282},[152,132361,132362],{"class":285},".left",[152,132364,17187],{"class":483},[152,132366,132367,132370,132372,132374],{"class":281,"line":303},[152,132368,132369],{"class":293},"  float",[152,132371,52774],{"class":483},[152,132373,34],{"class":293},[152,132375,2965],{"class":483},[152,132377,132378],{"class":281,"line":310},[152,132379,3236],{"class":483},[152,132381,132382,132385],{"class":281,"line":324},[152,132383,132384],{"class":285},".right",[152,132386,17187],{"class":483},[152,132388,132389,132391,132393,132395],{"class":281,"line":329},[152,132390,132369],{"class":293},[152,132392,52774],{"class":483},[152,132394,73859],{"class":293},[152,132396,2965],{"class":483},[152,132398,132399],{"class":281,"line":343},[152,132400,3236],{"class":483},[23,132402,132403,132411],{},[26,132404,132405],{},[29,132406,132407,132409],{},[32,132408,128353],{"align":34},[32,132410,29090],{"align":34},[43,132412,132413,132420,132427],{},[29,132414,132415,132417],{},[48,132416,34],{"align":34},[48,132418,132419],{"align":34},"不允许左侧有浮动元素（清除左侧浮动的影响）",[29,132421,132422,132424],{},[48,132423,73859],{"align":34},[48,132425,132426],{"align":34},"不允许右侧有浮动元素（清除右侧浮动的影响）",[29,132428,132429,132432],{},[48,132430,132431],{"align":34},"both",[48,132433,132434],{"align":34},"同时清除左右侧浮动的影响",[19,132436,132437],{},"法一",[19,132439,132440],{},"额外标签法也称为隔墙法",[19,132442,132443],{},"使用方式：",[19,132445,132446],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[270,132448,132449],{"className":127889,"code":132355,"language":127891,"meta":275,"style":275},[277,132450,132451,132457,132467,132471,132477,132487],{"__ignoreMap":275},[152,132452,132453,132455],{"class":281,"line":282},[152,132454,132362],{"class":285},[152,132456,17187],{"class":483},[152,132458,132459,132461,132463,132465],{"class":281,"line":303},[152,132460,132369],{"class":293},[152,132462,52774],{"class":483},[152,132464,34],{"class":293},[152,132466,2965],{"class":483},[152,132468,132469],{"class":281,"line":310},[152,132470,3236],{"class":483},[152,132472,132473,132475],{"class":281,"line":324},[152,132474,132384],{"class":285},[152,132476,17187],{"class":483},[152,132478,132479,132481,132483,132485],{"class":281,"line":329},[152,132480,132369],{"class":293},[152,132482,52774],{"class":483},[152,132484,73859],{"class":293},[152,132486,2965],{"class":483},[152,132488,132489],{"class":281,"line":343},[152,132490,3236],{"class":483},[19,132492,132493],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132495,132496],{},"优点： 通俗易懂，书写方便",[19,132498,132499],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132501,132502],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132504,132505],{},"法二",[19,132507,132508],{},"父级添加overflow属性",[270,132510,132511],{"className":127889,"code":132355,"language":127891,"meta":275,"style":275},[277,132512,132513,132519,132529,132533,132539,132549],{"__ignoreMap":275},[152,132514,132515,132517],{"class":281,"line":282},[152,132516,132362],{"class":285},[152,132518,17187],{"class":483},[152,132520,132521,132523,132525,132527],{"class":281,"line":303},[152,132522,132369],{"class":293},[152,132524,52774],{"class":483},[152,132526,34],{"class":293},[152,132528,2965],{"class":483},[152,132530,132531],{"class":281,"line":310},[152,132532,3236],{"class":483},[152,132534,132535,132537],{"class":281,"line":324},[152,132536,132384],{"class":285},[152,132538,17187],{"class":483},[152,132540,132541,132543,132545,132547],{"class":281,"line":329},[152,132542,132369],{"class":293},[152,132544,52774],{"class":483},[152,132546,73859],{"class":293},[152,132548,2965],{"class":483},[152,132550,132551],{"class":281,"line":343},[152,132552,3236],{"class":483},[19,132554,132555],{},"overflow: hidden;",[19,132557,132558],{},"优点：代码简洁",[19,132560,132561],{},"缺点：无法显示溢出的部分",[19,132563,132564],{},"注意：是给父元素添加代码",[19,132566,132567],{},"法三",[19,132569,132570],{},"父级添加after伪元素",[19,132572,132573,132576],{},[132574,132575],"after",{}," 方式是额外标签法的升级版",[19,132578,132579],{},"使用的时候复制就可以",[270,132581,132582],{"className":127889,"code":132355,"language":127891,"meta":275,"style":275},[277,132583,132584,132590,132600,132604,132610,132620],{"__ignoreMap":275},[152,132585,132586,132588],{"class":281,"line":282},[152,132587,132362],{"class":285},[152,132589,17187],{"class":483},[152,132591,132592,132594,132596,132598],{"class":281,"line":303},[152,132593,132369],{"class":293},[152,132595,52774],{"class":483},[152,132597,34],{"class":293},[152,132599,2965],{"class":483},[152,132601,132602],{"class":281,"line":310},[152,132603,3236],{"class":483},[152,132605,132606,132608],{"class":281,"line":324},[152,132607,132384],{"class":285},[152,132609,17187],{"class":483},[152,132611,132612,132614,132616,132618],{"class":281,"line":329},[152,132613,132369],{"class":293},[152,132615,52774],{"class":483},[152,132617,73859],{"class":293},[152,132619,2965],{"class":483},[152,132621,132622],{"class":281,"line":343},[152,132623,3236],{"class":483},[19,132625,132626],{},"优点：没有增加标签，结构更简单",[19,132628,132629],{},"缺点：照顾低版本浏览器",[19,132631,132632],{},"代表网站： 百度、淘宝网、网易等",[19,132634,132635],{},"法四",[19,132637,132638],{},"父级添加双伪元素",[270,132640,132641],{"className":127889,"code":132355,"language":127891,"meta":275,"style":275},[277,132642,132643,132649,132659,132663,132669,132679],{"__ignoreMap":275},[152,132644,132645,132647],{"class":281,"line":282},[152,132646,132362],{"class":285},[152,132648,17187],{"class":483},[152,132650,132651,132653,132655,132657],{"class":281,"line":303},[152,132652,132369],{"class":293},[152,132654,52774],{"class":483},[152,132656,34],{"class":293},[152,132658,2965],{"class":483},[152,132660,132661],{"class":281,"line":310},[152,132662,3236],{"class":483},[152,132664,132665,132667],{"class":281,"line":324},[152,132666,132384],{"class":285},[152,132668,17187],{"class":483},[152,132670,132671,132673,132675,132677],{"class":281,"line":329},[152,132672,132369],{"class":293},[152,132674,52774],{"class":483},[152,132676,73859],{"class":293},[152,132678,2965],{"class":483},[152,132680,132681],{"class":281,"line":343},[152,132682,3236],{"class":483},[19,132684,132685],{},"优点：代码更简洁",[19,132687,132629],{},[19,132689,132690],{},"代表网站：小米、腾讯等",[1760,132692,132694],{"id":132693},"_93-ps切图","9.3 PS切图",[14,132696,132698],{"id":132697},"_931-常见图片格式","9.3.1 常见图片格式",[23,132700,132701,132711],{},[26,132702,132703],{},[29,132704,132705,132708],{},[32,132706,132707],{"align":34},"jpg图像格式",[32,132709,132710],{"align":34},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[43,132712,132713,132721,132729],{},[29,132714,132715,132718],{},[48,132716,132717],{"align":34},"gif图像格式",[48,132719,132720],{"align":34},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[29,132722,132723,132726],{},[48,132724,132725],{"align":34},"png图像格式",[48,132727,132728],{"align":34},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[29,132730,132731,132734],{},[48,132732,132733],{"align":34},"PSD图像格式",[48,132735,132736],{"align":34},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[14,132738,132740],{"id":132739},"_932-图层切图","9.3.2 图层切图",[19,132742,132743],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,132745,132746],{},"按住shift选中两个图层->图层菜单->合并图层",[14,132748,132750],{"id":132749},"_933-切片切图","9.3.3 切片切图",[698,132752,132753,132756],{},[419,132754,132755],{},"利用切片工具手动划出",[419,132757,132758],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[14,132760,132762],{"id":132761},"_934-切图步骤","9.3.4 切图步骤",[19,132764,132765],{},"用切片工具选中：",[401,132767],{"style":127745,"src":132768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,132770,132771],{},"文件 -> 导出",[401,132773],{"style":127745,"src":132774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1736,132776,132777],{},"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":275,"searchDepth":303,"depth":303,"links":132779},[132780,132789,132793],{"id":131216,"depth":303,"text":131217,"children":132781},[132782,132783,132784,132785,132786,132787,132788],{"id":131241,"depth":310,"text":131242},{"id":131532,"depth":310,"text":131533},{"id":131661,"depth":310,"text":131662},{"id":131861,"depth":310,"text":131862},{"id":131903,"depth":310,"text":131904},{"id":131941,"depth":310,"text":131942},{"id":132031,"depth":310,"text":132032},{"id":132311,"depth":303,"text":132312,"children":132790},[132791,132792],{"id":132315,"depth":310,"text":132316},{"id":132322,"depth":310,"text":132323},{"id":132693,"depth":303,"text":132694,"children":132794},[132795,132796,132797,132798],{"id":132697,"depth":310,"text":132698},{"id":132739,"depth":310,"text":132740},{"id":132749,"depth":310,"text":132750},{"id":132761,"depth":310,"text":132762},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131208,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132805,"title":132806,"body":132807,"description":24991,"extension":1744,"meta":133448,"navigation":306,"path":133449,"seo":133450,"stem":133451,"__hash__":133452},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132808,"toc":133436},[132809,132812,132816,132842,132876,132880,132884,132887,132929,132936,132946,132954,132956,132959,132962,132965,132972,132986,132990,132993,133022,133026,133029,133043,133047,133050,133078,133082,133085,133111,133115,133120,133153,133158,133186,133190,133207,133253,133258,133302,133319,133426,133434],[10,132810,132806],{"id":132811},"_10-css规范与学成在线案例",[1760,132813,132815],{"id":132814},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[416,132817,132818,132824,132830,132836],{},[419,132819,132820,132823],{},[694,132821,132822],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[419,132825,132826,132829],{},[694,132827,132828],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[419,132831,132832,132835],{},[694,132833,132834],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[419,132837,132838,132841],{},[694,132839,132840],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[270,132843,132844],{"className":127889,"code":131253,"language":127891,"meta":275,"style":275},[277,132845,132846,132850,132856,132872],{"__ignoreMap":275},[152,132847,132848],{"class":281,"line":282},[152,132849,131260],{"class":866},[152,132851,132852,132854],{"class":281,"line":303},[152,132853,52948],{"class":52637},[152,132855,17187],{"class":483},[152,132857,132858,132860,132862,132864,132866,132868,132870],{"class":281,"line":310},[152,132859,72233],{"class":293},[152,132861,52774],{"class":483},[152,132863,2026],{"class":293},[152,132865,52829],{"class":476},[152,132867,52858],{"class":293},[152,132869,131281],{"class":293},[152,132871,2965],{"class":483},[152,132873,132874],{"class":281,"line":324},[152,132875,3236],{"class":483},[1760,132877,132879],{"id":132878},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[14,132881,132883],{"id":132882},"_1021-header头部制作","10.2.1 header头部制作",[401,132885],{"style":127745,"src":132886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[698,132888,132889,132896,132903,132909,132916,132923],{},[419,132890,132891,132892,132895],{},"1号是版心盒子 ",[694,132893,132894],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[419,132897,132898,132899,132902],{},"版心盒子 里面包含 2号盒子 ",[694,132900,132901],{},"logo"," 图标",[419,132904,132905,132906,132908],{},"版心盒子 里面包含 3号盒子 ",[694,132907,55050],{}," 导航栏",[419,132910,132911,132912,132915],{},"版心盒子 里面包含 4号盒子 ",[694,132913,132914],{},"search"," 搜索框",[419,132917,132918,132919,132922],{},"版心盒子 里面包含 5号盒子 ",[694,132920,132921],{},"user"," 个人信息",[419,132924,132925,132926],{},"注意，要求里面的 ",[694,132927,132928],{},"4个子盒子 必须都浮动",[416,132930,132931],{},[419,132932,132933],{},[694,132934,132935],{},"导航栏注意点:",[19,132937,132938,132939,132942,132943],{},"实际开发中， ",[694,132940,132941],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[694,132944,132945],{},"用 li 包含链接(li+a)的做法",[698,132947,132948,132951],{},[419,132949,132950],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[419,132952,132953],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132955,10657],{},[19,132957,132958],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132960,132961],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132963,132964],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[416,132966,132967],{"start":303},[419,132968,132969],{},[694,132970,132971],{},"4号盒子search的细节：",[698,132973,132974,132977,132980],{},[419,132975,132976],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[419,132978,132979],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[419,132981,132982,132985],{},[277,132983,132984],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[14,132987,132989],{"id":132988},"_1022-banner制作","10.2.2 banner制作",[401,132991],{"style":127745,"src":132992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[698,132994,132995,133002,133008,133015],{},[419,132996,132997,132998,133001],{},"1号盒子是通栏的大盒子 ",[694,132999,133000],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[419,133003,133004,133005,133007],{},"2号盒子是版心 ",[694,133006,2603],{}," ， 要水平居中对齐",[419,133009,133010,133011,133014],{},"3号盒子版心内，左对齐 ",[694,133012,133013],{},"subnav"," 侧导航栏",[419,133016,133017,133018,133021],{},"4号盒子版心内，右对齐 ",[694,133019,133020],{},"course"," 课程",[14,133023,133025],{"id":133024},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[401,133027],{"style":127745,"src":133028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[698,133030,133031,133034,133037,133040],{},[419,133032,133033],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[419,133035,133036],{},"1号盒子是标题 H3 左侧浮动",[419,133038,133039],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[419,133041,133042],{},"3号盒子 右浮动 mod 修改",[14,133044,133046],{"id":133045},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[401,133048],{"style":127745,"src":133049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[698,133051,133052,133058,133065,133072,133075],{},[419,133053,133054,133055,133057],{},"1号盒子为最大的盒子 ",[694,133056,55051],{}," 版心水平居中对齐",[419,133059,133060,133061,133064],{},"2号盒子为上面部分 ",[694,133062,133063],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[419,133066,133067,133068,133071],{},"3号盒子为底下部分 ",[694,133069,133070],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[419,133073,133074],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[419,133076,133077],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[14,133079,133081],{"id":133080},"_1025-底部模块制作","10.2.5 底部模块制作",[401,133083],{"style":127745,"src":133084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[698,133086,133087,133094,133097,133104],{},[419,133088,133089,133090,133093],{},"1号盒子通栏大盒子 底部 ",[694,133091,133092],{},"footer"," 给高度 底色是白色",[419,133095,133096],{},"2号盒子版心水平居中",[419,133098,133099,133100,133103],{},"3号盒子版权 ",[694,133101,133102],{},"copyright"," 左对齐",[419,133105,133106,133107,133110],{},"4号盒子 链接组 ",[694,133108,133109],{},"links"," 右对齐",[14,133112,133114],{"id":133113},"_1026-代码模块","10.2.6 代码模块",[416,133116,133117],{},[419,133118,133119],{},"html部分",[270,133121,133123],{"className":128636,"code":133122,"language":128638,"meta":275,"style":275},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[277,133124,133125],{"__ignoreMap":275},[152,133126,133127,133129,133131,133133,133135,133138,133141,133143,133146,133149,133151],{"class":281,"line":282},[152,133128,844],{"class":483},[152,133130,69],{"class":52637},[152,133132,62394],{"class":285},[152,133134,1864],{"class":483},[152,133136,133137],{"class":289},"\"https:\u002F\u002Fexample.com\"",[152,133139,133140],{"class":285}," target",[152,133142,1864],{"class":483},[152,133144,133145],{"class":289},"\"_blank\"",[152,133147,133148],{"class":483},">链接文字\u003C\u002F",[152,133150,69],{"class":52637},[152,133152,52644],{"class":483},[416,133154,133155],{"start":303},[419,133156,133157],{},"css部分",[270,133159,133160],{"className":128636,"code":133122,"language":128638,"meta":275,"style":275},[277,133161,133162],{"__ignoreMap":275},[152,133163,133164,133166,133168,133170,133172,133174,133176,133178,133180,133182,133184],{"class":281,"line":282},[152,133165,844],{"class":483},[152,133167,69],{"class":52637},[152,133169,62394],{"class":285},[152,133171,1864],{"class":483},[152,133173,133137],{"class":289},[152,133175,133140],{"class":285},[152,133177,1864],{"class":483},[152,133179,133145],{"class":289},[152,133181,133148],{"class":483},[152,133183,69],{"class":52637},[152,133185,52644],{"class":483},[14,133187,133189],{"id":133188},"_1027-收获","10.2.7 收获",[416,133191,133192,133195,133198,133201,133204],{},[419,133193,133194],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[419,133196,133197],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[419,133199,133200],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[419,133202,133203],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[419,133205,133206],{},"遗忘代码",[270,133208,133210],{"className":127889,"code":133209,"language":127891,"meta":275,"style":275},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[277,133211,133212,133234,133239,133249],{"__ignoreMap":275},[152,133213,133214,133216,133218,133220,133222,133224,133226,133228,133230,133232],{"class":281,"line":282},[152,133215,52948],{"class":52637},[152,133217,14051],{"class":483},[152,133219,19],{"class":52637},[152,133221,14051],{"class":483},[152,133223,10],{"class":52637},[152,133225,14051],{"class":483},[152,133227,698],{"class":52637},[152,133229,14051],{"class":483},[152,133231,419],{"class":52637},[152,133233,17187],{"class":483},[152,133235,133236],{"class":281,"line":303},[152,133237,133238],{"class":866},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[152,133240,133241,133243,133245,133247],{"class":281,"line":310},[152,133242,129505],{"class":293},[152,133244,52774],{"class":483},[152,133246,62206],{"class":293},[152,133248,2965],{"class":483},[152,133250,133251],{"class":281,"line":324},[152,133252,3236],{"class":483},[416,133254,133255],{"start":343},[419,133256,133257],{},"html引css的程序",[270,133259,133260],{"className":127889,"code":133209,"language":127891,"meta":275,"style":275},[277,133261,133262,133284,133288,133298],{"__ignoreMap":275},[152,133263,133264,133266,133268,133270,133272,133274,133276,133278,133280,133282],{"class":281,"line":282},[152,133265,52948],{"class":52637},[152,133267,14051],{"class":483},[152,133269,19],{"class":52637},[152,133271,14051],{"class":483},[152,133273,10],{"class":52637},[152,133275,14051],{"class":483},[152,133277,698],{"class":52637},[152,133279,14051],{"class":483},[152,133281,419],{"class":52637},[152,133283,17187],{"class":483},[152,133285,133286],{"class":281,"line":303},[152,133287,133238],{"class":866},[152,133289,133290,133292,133294,133296],{"class":281,"line":310},[152,133291,129505],{"class":293},[152,133293,52774],{"class":483},[152,133295,62206],{"class":293},[152,133297,2965],{"class":483},[152,133299,133300],{"class":281,"line":324},[152,133301,3236],{"class":483},[416,133303,133304,133307,133310,133313,133316],{"start":348},[419,133305,133306],{},"浮动的盒子不会有外边距合并问题",[419,133308,133309],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[419,133311,133312],{},"ctrl+g快速定位行；shift+alt多个光标",[419,133314,133315],{},"学习上方各个模块的选择器起名方法，以后就这样用",[419,133317,133318],{},"在写选择器时尽量写全一些，例如",[270,133320,133322],{"className":127889,"code":133321,"language":127891,"meta":275,"style":275},"\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",[277,133323,133324,133329,133345,133350,133365,133370,133385,133390,133405,133410],{"__ignoreMap":275},[152,133325,133326],{"class":281,"line":282},[152,133327,133328],{"class":866},"\u002F* 静态定位（默认） *\u002F\n",[152,133330,133331,133334,133336,133338,133340,133343],{"class":281,"line":303},[152,133332,133333],{"class":285},".static",[152,133335,81144],{"class":483},[152,133337,130249],{"class":293},[152,133339,52774],{"class":483},[152,133341,133342],{"class":293},"static",[152,133344,130819],{"class":483},[152,133346,133347],{"class":281,"line":310},[152,133348,133349],{"class":866},"\u002F* 相对定位 *\u002F\n",[152,133351,133352,133355,133357,133359,133361,133363],{"class":281,"line":324},[152,133353,133354],{"class":285},".relative",[152,133356,81144],{"class":483},[152,133358,130249],{"class":293},[152,133360,52774],{"class":483},[152,133362,56101],{"class":293},[152,133364,130819],{"class":483},[152,133366,133367],{"class":281,"line":329},[152,133368,133369],{"class":866},"\u002F* 绝对定位 *\u002F\n",[152,133371,133372,133375,133377,133379,133381,133383],{"class":281,"line":343},[152,133373,133374],{"class":285},".absolute",[152,133376,81144],{"class":483},[152,133378,130249],{"class":293},[152,133380,52774],{"class":483},[152,133382,56168],{"class":293},[152,133384,130819],{"class":483},[152,133386,133387],{"class":281,"line":348},[152,133388,133389],{"class":866},"\u002F* 固定定位 *\u002F\n",[152,133391,133392,133395,133397,133399,133401,133403],{"class":281,"line":362},[152,133393,133394],{"class":285},".fixed",[152,133396,81144],{"class":483},[152,133398,130249],{"class":293},[152,133400,52774],{"class":483},[152,133402,87570],{"class":293},[152,133404,130819],{"class":483},[152,133406,133407],{"class":281,"line":367},[152,133408,133409],{"class":866},"\u002F* 粘性定位 *\u002F\n",[152,133411,133412,133415,133417,133419,133421,133424],{"class":281,"line":381},[152,133413,133414],{"class":285},".sticky",[152,133416,81144],{"class":483},[152,133418,130249],{"class":293},[152,133420,52774],{"class":483},[152,133422,133423],{"class":293},"sticky",[152,133425,130819],{"class":483},[416,133427,133428,133431],{"start":932},[419,133429,133430],{},"一定要用好注释",[419,133432,133433],{},"浮动的盒子不会有外边距合并的问题",[1736,133435,132777],{},{"title":275,"searchDepth":303,"depth":303,"links":133437},[133438,133439],{"id":132814,"depth":303,"text":132815},{"id":132878,"depth":303,"text":132879,"children":133440},[133441,133442,133443,133444,133445,133446,133447],{"id":132882,"depth":310,"text":132883},{"id":132988,"depth":310,"text":132989},{"id":133024,"depth":310,"text":133025},{"id":133045,"depth":310,"text":133046},{"id":133080,"depth":310,"text":133081},{"id":133113,"depth":310,"text":133114},{"id":133188,"depth":310,"text":133189},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132806,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133454,"title":133455,"body":133456,"description":24991,"extension":1744,"meta":134942,"navigation":306,"path":134943,"seo":134944,"stem":134945,"__hash__":134946},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133457,"toc":134934},[133458,133461,133465,133469,133480,133484,133501,133545,133578,133581,133598,133601,133604,133648,133652,133656,133659,133662,133666,133669,133680,133743,133784,133787,133802,133856,133864,133867,133878,133932,133958,133961,133974,134028,134060,134114,134137,134191,134194,134197,134204,134258,134279,134333,134336,134339,134424,134432,134489,134512,134516,134519,134537,134541,134560,134614,134652,134656,134659,134662,134684,134688,134696,134699,134704,134715,134718,134722,134736,134780,134783,134787,134790,134795,134821,134826,134903,134906,134910,134913,134916,134919,134922,134925,134928,134931],[10,133459,133455],{"id":133460},"_11-传统布局与定位体系",[1760,133462,133464],{"id":133463},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[14,133466,133468],{"id":133467},"_1111-普通流标准流","11.1.1 普通流（标准流）",[698,133470,133471,133474,133477],{},[419,133472,133473],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[419,133475,133476],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[419,133478,133479],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[14,133481,133483],{"id":133482},"_1112-浮动","11.1.2 浮动",[698,133485,133486,133489,133492,133495,133498],{},[419,133487,133488],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[419,133490,133491],{},"浮动可以改变元素标签默认的排列方式",[419,133493,133494],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[419,133496,133497],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[419,133499,133500],{},"在使用行内块转换时盒子之间是有空隙的",[270,133502,133503],{"className":127889,"code":132355,"language":127891,"meta":275,"style":275},[277,133504,133505,133511,133521,133525,133531,133541],{"__ignoreMap":275},[152,133506,133507,133509],{"class":281,"line":282},[152,133508,132362],{"class":285},[152,133510,17187],{"class":483},[152,133512,133513,133515,133517,133519],{"class":281,"line":303},[152,133514,132369],{"class":293},[152,133516,52774],{"class":483},[152,133518,34],{"class":293},[152,133520,2965],{"class":483},[152,133522,133523],{"class":281,"line":310},[152,133524,3236],{"class":483},[152,133526,133527,133529],{"class":281,"line":324},[152,133528,132384],{"class":285},[152,133530,17187],{"class":483},[152,133532,133533,133535,133537,133539],{"class":281,"line":329},[152,133534,132369],{"class":293},[152,133536,52774],{"class":483},[152,133538,73859],{"class":293},[152,133540,2965],{"class":483},[152,133542,133543],{"class":281,"line":343},[152,133544,3236],{"class":483},[23,133546,133547,133555],{},[26,133548,133549],{},[29,133550,133551,133553],{},[32,133552,128353],{"align":34},[32,133554,29090],{"align":34},[43,133556,133557,133564,133571],{},[29,133558,133559,133561],{},[48,133560,56074],{"align":34},[48,133562,133563],{"align":34},"元素不浮动（默认值）",[29,133565,133566,133568],{},[48,133567,34],{"align":34},[48,133569,133570],{"align":34},"元素向左浮动",[29,133572,133573,133575],{},[48,133574,73859],{"align":34},[48,133576,133577],{"align":34},"元素向右浮动",[19,133579,133580],{},"浮动重点：",[698,133582,133583,133586,133589,133592,133595],{},[419,133584,133585],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[419,133587,133588],{},"浮动的元素会一行内显示并且元素顶部对齐",[419,133590,133591],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[419,133593,133594],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[419,133596,133597],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133599,133600],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133602,133603],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[270,133605,133606],{"className":127889,"code":132355,"language":127891,"meta":275,"style":275},[277,133607,133608,133614,133624,133628,133634,133644],{"__ignoreMap":275},[152,133609,133610,133612],{"class":281,"line":282},[152,133611,132362],{"class":285},[152,133613,17187],{"class":483},[152,133615,133616,133618,133620,133622],{"class":281,"line":303},[152,133617,132369],{"class":293},[152,133619,52774],{"class":483},[152,133621,34],{"class":293},[152,133623,2965],{"class":483},[152,133625,133626],{"class":281,"line":310},[152,133627,3236],{"class":483},[152,133629,133630,133632],{"class":281,"line":324},[152,133631,132384],{"class":285},[152,133633,17187],{"class":483},[152,133635,133636,133638,133640,133642],{"class":281,"line":329},[152,133637,132369],{"class":293},[152,133639,52774],{"class":483},[152,133641,73859],{"class":293},[152,133643,2965],{"class":483},[152,133645,133646],{"class":281,"line":343},[152,133647,3236],{"class":483},[14,133649,133651],{"id":133650},"_1113-定位","11.1.3 定位",[262,133653,133655],{"id":133654},"_11131-使用场景","11.1.3.1 使用场景",[19,133657,133658],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133660,133661],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[262,133663,133665],{"id":133664},"_11132-定位组成","11.1.3.2 定位组成",[19,133667,133668],{},"定位 = 定位模式 + 边偏移",[416,133670,133671],{},[419,133672,133673,133676,133677],{},[694,133674,133675],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[694,133678,133679],{},"定位模式",[270,133681,133683],{"className":127889,"code":133682,"language":127891,"meta":275,"style":275},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[277,133684,133685,133691,133705,133722,133739],{"__ignoreMap":275},[152,133686,133687,133689],{"class":281,"line":282},[152,133688,131737],{"class":285},[152,133690,17187],{"class":483},[152,133692,133693,133696,133698,133700,133702],{"class":281,"line":303},[152,133694,133695],{"class":293},"  position",[152,133697,52774],{"class":483},[152,133699,56101],{"class":293},[152,133701,131752],{"class":483},[152,133703,133704],{"class":866},"\u002F* 定位模式 *\u002F\n",[152,133706,133707,133710,133712,133714,133716,133719],{"class":281,"line":310},[152,133708,133709],{"class":293},"  top",[152,133711,52774],{"class":483},[152,133713,2254],{"class":293},[152,133715,52829],{"class":476},[152,133717,133718],{"class":483},";           ",[152,133720,133721],{"class":866},"\u002F* 边偏移：上 *\u002F\n",[152,133723,133724,133727,133729,133731,133733,133736],{"class":281,"line":324},[152,133725,133726],{"class":293},"  left",[152,133728,52774],{"class":483},[152,133730,2508],{"class":293},[152,133732,52829],{"class":476},[152,133734,133735],{"class":483},";          ",[152,133737,133738],{"class":866},"\u002F* 边偏移：左 *\u002F\n",[152,133740,133741],{"class":281,"line":329},[152,133742,3236],{"class":483},[23,133744,133745,133754],{},[26,133746,133747],{},[29,133748,133749,133751],{},[32,133750,1963],{"align":34},[32,133752,133753],{"align":34},"语义",[43,133755,133756,133763,133770,133777],{},[29,133757,133758,133760],{},[48,133759,133342],{"align":34},[48,133761,133762],{"align":34},"静态定位",[29,133764,133765,133767],{},[48,133766,56101],{"align":34},[48,133768,133769],{"align":34},"相对定位",[29,133771,133772,133774],{},[48,133773,56168],{"align":34},[48,133775,133776],{"align":34},"绝对定位",[29,133778,133779,133781],{},[48,133780,87570],{"align":34},[48,133782,133783],{"align":34},"固定定位",[19,133785,133786],{},"（1）静态定位：",[698,133788,133789,133800],{},[419,133790,133791,133792,133795,133796,133799],{},"静态定位是元素的 ",[694,133793,133794],{},"默认定位方式"," ， ",[694,133797,133798],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[419,133801,6823],{},[270,133803,133804],{"className":127889,"code":133682,"language":127891,"meta":275,"style":275},[277,133805,133806,133812,133824,133838,133852],{"__ignoreMap":275},[152,133807,133808,133810],{"class":281,"line":282},[152,133809,131737],{"class":285},[152,133811,17187],{"class":483},[152,133813,133814,133816,133818,133820,133822],{"class":281,"line":303},[152,133815,133695],{"class":293},[152,133817,52774],{"class":483},[152,133819,56101],{"class":293},[152,133821,131752],{"class":483},[152,133823,133704],{"class":866},[152,133825,133826,133828,133830,133832,133834,133836],{"class":281,"line":310},[152,133827,133709],{"class":293},[152,133829,52774],{"class":483},[152,133831,2254],{"class":293},[152,133833,52829],{"class":476},[152,133835,133718],{"class":483},[152,133837,133721],{"class":866},[152,133839,133840,133842,133844,133846,133848,133850],{"class":281,"line":324},[152,133841,133726],{"class":293},[152,133843,52774],{"class":483},[152,133845,2508],{"class":293},[152,133847,52829],{"class":476},[152,133849,133735],{"class":483},[152,133851,133738],{"class":866},[152,133853,133854],{"class":281,"line":329},[152,133855,3236],{"class":483},[698,133857,133858,133861],{},[419,133859,133860],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[419,133862,133863],{},"静态定位在布局时我们几乎不用的",[19,133865,133866],{},"（2）相对定位",[698,133868,133869,133876],{},[419,133870,133871,133872,133875],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[694,133873,133874],{},"原来的位置"," 来说的（自恋型）",[419,133877,6823],{},[270,133879,133880],{"className":127889,"code":133682,"language":127891,"meta":275,"style":275},[277,133881,133882,133888,133900,133914,133928],{"__ignoreMap":275},[152,133883,133884,133886],{"class":281,"line":282},[152,133885,131737],{"class":285},[152,133887,17187],{"class":483},[152,133889,133890,133892,133894,133896,133898],{"class":281,"line":303},[152,133891,133695],{"class":293},[152,133893,52774],{"class":483},[152,133895,56101],{"class":293},[152,133897,131752],{"class":483},[152,133899,133704],{"class":866},[152,133901,133902,133904,133906,133908,133910,133912],{"class":281,"line":310},[152,133903,133709],{"class":293},[152,133905,52774],{"class":483},[152,133907,2254],{"class":293},[152,133909,52829],{"class":476},[152,133911,133718],{"class":483},[152,133913,133721],{"class":866},[152,133915,133916,133918,133920,133922,133924,133926],{"class":281,"line":324},[152,133917,133726],{"class":293},[152,133919,52774],{"class":483},[152,133921,2508],{"class":293},[152,133923,52829],{"class":476},[152,133925,133735],{"class":483},[152,133927,133738],{"class":866},[152,133929,133930],{"class":281,"line":329},[152,133931,3236],{"class":483},[698,133933,133934],{},[419,133935,133936,133937,133939,133940,133942,133943,133946,133947,133950,133951,133953,133954,133957],{},"相对定位的特点：",[55053,133938],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55053,133941],{},"  ② ",[694,133944,133945],{},"原来"," 在标准流的 ",[694,133948,133949],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55053,133952],{},"  ③因此， ",[694,133955,133956],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133959,133960],{},"（3）绝对定位",[698,133962,133963,133972],{},[419,133964,133965,133967,133968,133971],{},[694,133966,133776],{}," 是元素在移动位置的时候，是相对于它 ",[694,133969,133970],{},"祖先元素"," 来说的（拼爹型）",[419,133973,6823],{},[270,133975,133976],{"className":127889,"code":133682,"language":127891,"meta":275,"style":275},[277,133977,133978,133984,133996,134010,134024],{"__ignoreMap":275},[152,133979,133980,133982],{"class":281,"line":282},[152,133981,131737],{"class":285},[152,133983,17187],{"class":483},[152,133985,133986,133988,133990,133992,133994],{"class":281,"line":303},[152,133987,133695],{"class":293},[152,133989,52774],{"class":483},[152,133991,56101],{"class":293},[152,133993,131752],{"class":483},[152,133995,133704],{"class":866},[152,133997,133998,134000,134002,134004,134006,134008],{"class":281,"line":310},[152,133999,133709],{"class":293},[152,134001,52774],{"class":483},[152,134003,2254],{"class":293},[152,134005,52829],{"class":476},[152,134007,133718],{"class":483},[152,134009,133721],{"class":866},[152,134011,134012,134014,134016,134018,134020,134022],{"class":281,"line":324},[152,134013,133726],{"class":293},[152,134015,52774],{"class":483},[152,134017,2508],{"class":293},[152,134019,52829],{"class":476},[152,134021,133735],{"class":483},[152,134023,133738],{"class":866},[152,134025,134026],{"class":281,"line":329},[152,134027,3236],{"class":483},[698,134029,134030,134045,134054,134057],{},[419,134031,134032,134033,134035,134036,134038,134039,134041,134042,134044],{},"绝对定位的特点：",[55053,134034],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55053,134037],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55053,134040],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55053,134043],{},"  (4)固定定位",[419,134046,134047,134049,134050,134053],{},[694,134048,133783],{}," 是元素 ",[694,134051,134052],{},"固定于浏览器可视区的位置"," 。（认死理型）",[419,134055,134056],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[419,134058,134059],{},"语法:",[270,134061,134062],{"className":127889,"code":133682,"language":127891,"meta":275,"style":275},[277,134063,134064,134070,134082,134096,134110],{"__ignoreMap":275},[152,134065,134066,134068],{"class":281,"line":282},[152,134067,131737],{"class":285},[152,134069,17187],{"class":483},[152,134071,134072,134074,134076,134078,134080],{"class":281,"line":303},[152,134073,133695],{"class":293},[152,134075,52774],{"class":483},[152,134077,56101],{"class":293},[152,134079,131752],{"class":483},[152,134081,133704],{"class":866},[152,134083,134084,134086,134088,134090,134092,134094],{"class":281,"line":310},[152,134085,133709],{"class":293},[152,134087,52774],{"class":483},[152,134089,2254],{"class":293},[152,134091,52829],{"class":476},[152,134093,133718],{"class":483},[152,134095,133721],{"class":866},[152,134097,134098,134100,134102,134104,134106,134108],{"class":281,"line":324},[152,134099,133726],{"class":293},[152,134101,52774],{"class":483},[152,134103,2508],{"class":293},[152,134105,52829],{"class":476},[152,134107,133735],{"class":483},[152,134109,133738],{"class":866},[152,134111,134112],{"class":281,"line":329},[152,134113,3236],{"class":483},[698,134115,134116,134125],{},[419,134117,134118,134119,134121,134122,134124],{},"特点:",[55053,134120],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55053,134123],{},"  ②固定定位不再占有原先的位置,完全脱标",[419,134126,134127,134128,134130,134131,134133,134134,134136],{},"固定在版心位置的方法:",[55053,134129],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55053,134132],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55053,134135],{},"  实例：",[270,134138,134139],{"className":127889,"code":133682,"language":127891,"meta":275,"style":275},[277,134140,134141,134147,134159,134173,134187],{"__ignoreMap":275},[152,134142,134143,134145],{"class":281,"line":282},[152,134144,131737],{"class":285},[152,134146,17187],{"class":483},[152,134148,134149,134151,134153,134155,134157],{"class":281,"line":303},[152,134150,133695],{"class":293},[152,134152,52774],{"class":483},[152,134154,56101],{"class":293},[152,134156,131752],{"class":483},[152,134158,133704],{"class":866},[152,134160,134161,134163,134165,134167,134169,134171],{"class":281,"line":310},[152,134162,133709],{"class":293},[152,134164,52774],{"class":483},[152,134166,2254],{"class":293},[152,134168,52829],{"class":476},[152,134170,133718],{"class":483},[152,134172,133721],{"class":866},[152,134174,134175,134177,134179,134181,134183,134185],{"class":281,"line":324},[152,134176,133726],{"class":293},[152,134178,52774],{"class":483},[152,134180,2508],{"class":293},[152,134182,52829],{"class":476},[152,134184,133735],{"class":483},[152,134186,133738],{"class":866},[152,134188,134189],{"class":281,"line":329},[152,134190,3236],{"class":483},[401,134192],{"style":127745,"src":134193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134195,134196],{},"(5)粘性定位",[698,134198,134199,134202],{},[419,134200,134201],{},"粘性定位可以被认为是相对定位和固定定位的混合",[419,134203,6823],{},[270,134205,134206],{"className":127889,"code":133682,"language":127891,"meta":275,"style":275},[277,134207,134208,134214,134226,134240,134254],{"__ignoreMap":275},[152,134209,134210,134212],{"class":281,"line":282},[152,134211,131737],{"class":285},[152,134213,17187],{"class":483},[152,134215,134216,134218,134220,134222,134224],{"class":281,"line":303},[152,134217,133695],{"class":293},[152,134219,52774],{"class":483},[152,134221,56101],{"class":293},[152,134223,131752],{"class":483},[152,134225,133704],{"class":866},[152,134227,134228,134230,134232,134234,134236,134238],{"class":281,"line":310},[152,134229,133709],{"class":293},[152,134231,52774],{"class":483},[152,134233,2254],{"class":293},[152,134235,52829],{"class":476},[152,134237,133718],{"class":483},[152,134239,133721],{"class":866},[152,134241,134242,134244,134246,134248,134250,134252],{"class":281,"line":324},[152,134243,133726],{"class":293},[152,134245,52774],{"class":483},[152,134247,2508],{"class":293},[152,134249,52829],{"class":476},[152,134251,133735],{"class":483},[152,134253,133738],{"class":866},[152,134255,134256],{"class":281,"line":329},[152,134257,3236],{"class":483},[698,134259,134260],{},[419,134261,134262,134263,134265,134266,134268,134269,134271,134272,134275,134276,134278],{},"粘性定位的特点：",[55053,134264],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55053,134267],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55053,134270],{},"  ③必须添加 top 、left、right、bottom ",[694,134273,134274],{},"其中一个"," 才有效",[55053,134277],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[270,134280,134281],{"className":127889,"code":133682,"language":127891,"meta":275,"style":275},[277,134282,134283,134289,134301,134315,134329],{"__ignoreMap":275},[152,134284,134285,134287],{"class":281,"line":282},[152,134286,131737],{"class":285},[152,134288,17187],{"class":483},[152,134290,134291,134293,134295,134297,134299],{"class":281,"line":303},[152,134292,133695],{"class":293},[152,134294,52774],{"class":483},[152,134296,56101],{"class":293},[152,134298,131752],{"class":483},[152,134300,133704],{"class":866},[152,134302,134303,134305,134307,134309,134311,134313],{"class":281,"line":310},[152,134304,133709],{"class":293},[152,134306,52774],{"class":483},[152,134308,2254],{"class":293},[152,134310,52829],{"class":476},[152,134312,133718],{"class":483},[152,134314,133721],{"class":866},[152,134316,134317,134319,134321,134323,134325,134327],{"class":281,"line":324},[152,134318,133726],{"class":293},[152,134320,52774],{"class":483},[152,134322,2508],{"class":293},[152,134324,52829],{"class":476},[152,134326,133735],{"class":483},[152,134328,133738],{"class":866},[152,134330,134331],{"class":281,"line":329},[152,134332,3236],{"class":483},[401,134334],{"style":127745,"src":134335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134337,134338],{},"(6)总结",[23,134340,134341,134356],{},[26,134342,134343],{},[29,134344,134345,134347,134350,134353],{},[32,134346,133679],{"align":34},[32,134348,134349],{"align":34},"是否脱标",[32,134351,134352],{"align":34},"移动位置",[32,134354,134355],{"align":34},"是否常用",[43,134357,134358,134371,134385,134399,134412],{},[29,134359,134360,134363,134365,134368],{},[48,134361,134362],{"align":34},"Static 静态定位",[48,134364,106015],{"align":34},[48,134366,134367],{"align":34},"不能使用边偏移",[48,134369,134370],{"align":34},"很少",[29,134372,134373,134376,134379,134382],{},[48,134374,134375],{"align":34},"Relative 相对定位",[48,134377,134378],{"align":34},"否(占有位置)",[48,134380,134381],{"align":34},"相对于自身位置移动",[48,134383,134384],{"align":34},"基本单独使用",[29,134386,134387,134390,134393,134396],{},[48,134388,134389],{"align":34},"Absolute 绝对定位",[48,134391,134392],{"align":34},"是(不占有位置)",[48,134394,134395],{"align":34},"带有定位的父级",[48,134397,134398],{"align":34},"要和定位父级元素搭配使用",[29,134400,134401,134404,134406,134409],{},[48,134402,134403],{"align":34},"Fixed 固定定位",[48,134405,134392],{"align":34},[48,134407,134408],{"align":34},"浏览器可视区",[48,134410,134411],{"align":34},"单独使用,不需要父级",[29,134413,134414,134417,134419,134421],{},[48,134415,134416],{"align":34},"Sticky 粘性定位",[48,134418,134378],{"align":34},[48,134420,134408],{"align":34},[48,134422,134423],{"align":34},"当前阶段少",[416,134425,134426],{"start":303},[419,134427,134428,134431],{},[694,134429,134430],{},"边偏移"," 则决定了该元素的最终位置",[23,134433,134434,134445],{},[26,134435,134436],{},[29,134437,134438,134441,134443],{},[32,134439,134440],{"align":34},"边偏移属性",[32,134442,41],{"align":34},[32,134444,29090],{"align":34},[43,134446,134447,134458,134469,134479],{},[29,134448,134449,134452,134455],{},[48,134450,134451],{"align":34},"top",[48,134453,134454],{"align":34},"top: 80px;",[48,134456,134457],{"align":34},"顶端偏移量，定义元素相对于父元素上边线的距离",[29,134459,134460,134463,134466],{},[48,134461,134462],{"align":34},"bottom",[48,134464,134465],{"align":34},"bottom: 80px ;",[48,134467,134468],{"align":34},"底部偏移量，定义元素相对于其父元素下边线的距离",[29,134470,134471,134473,134476],{},[48,134472,34],{"align":34},[48,134474,134475],{"align":34},"left: 80px ;",[48,134477,134478],{"align":34},"左侧偏移量，定义元素相对于其父元素左边线的距离",[29,134480,134481,134483,134486],{},[48,134482,73859],{"align":34},[48,134484,134485],{"align":34},"right: 80px ;",[48,134487,134488],{"align":34},"右侧偏移量，定义元素相对于其父元素右边线的距离",[698,134490,134491],{},[419,134492,10657,134493,134495,134496,134498,134499,134501,134502,134505,134506,134508,134509,134511],{},[55053,134494],{},"  ① ",[694,134497,134430],{}," 需要和 ",[694,134500,133679],{}," 联合使用， ",[694,134503,134504],{},"单独使用无效"," ；",[55053,134507],{},"  ②top和bottom不要同时使用",[55053,134510],{},"  ③left和right不要同时使用",[262,134513,134515],{"id":134514},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134517,134518],{},"子级是绝对定位的话，父级要用相对定位",[698,134520,134521,134524,134527,134530],{},[419,134522,134523],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[419,134525,134526],{},"父盒子需要加定位限制子盒子在父盒子内显示",[419,134528,134529],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[419,134531,134532,134533,134536],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[694,134534,134535],{},"子绝父绝"," 也会遇到",[262,134538,134540],{"id":134539},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[698,134542,134543,134558],{},[419,134544,134545,134546,134549,134550,134553,134554,134557],{},"在使用 ",[694,134547,134548],{},"定位"," 布局时，可能会 ",[694,134551,134552],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[694,134555,134556],{},"z-index"," 来控制盒子的前后次序 (z轴)",[419,134559,6823],{},[270,134561,134562],{"className":127889,"code":133682,"language":127891,"meta":275,"style":275},[277,134563,134564,134570,134582,134596,134610],{"__ignoreMap":275},[152,134565,134566,134568],{"class":281,"line":282},[152,134567,131737],{"class":285},[152,134569,17187],{"class":483},[152,134571,134572,134574,134576,134578,134580],{"class":281,"line":303},[152,134573,133695],{"class":293},[152,134575,52774],{"class":483},[152,134577,56101],{"class":293},[152,134579,131752],{"class":483},[152,134581,133704],{"class":866},[152,134583,134584,134586,134588,134590,134592,134594],{"class":281,"line":310},[152,134585,133709],{"class":293},[152,134587,52774],{"class":483},[152,134589,2254],{"class":293},[152,134591,52829],{"class":476},[152,134593,133718],{"class":483},[152,134595,133721],{"class":866},[152,134597,134598,134600,134602,134604,134606,134608],{"class":281,"line":324},[152,134599,133726],{"class":293},[152,134601,52774],{"class":483},[152,134603,2508],{"class":293},[152,134605,52829],{"class":476},[152,134607,133735],{"class":483},[152,134609,133738],{"class":866},[152,134611,134612],{"class":281,"line":329},[152,134613,3236],{"class":483},[698,134615,134616],{},[419,134617,134618,134619,134495,134621,134623,134624,129052,134627,83876,134630,134632,134633,134635,134636,134639,134640,134505,134643,134645,134646,134649,134651],{},"z-index的特性",[55053,134620],{},[694,134622,128353],{}," ： ",[694,134625,134626],{},"正整数",[694,134628,134629],{},"负整数",[694,134631,2000],{}," ，默认值是 0，数值越大，盒子越靠上；",[55053,134634],{},"  ②如果 ",[694,134637,134638],{},"属性值相同"," ，则按照书写顺序， ",[694,134641,134642],{},"后来居上",[55053,134644],{},"  ③数字后面 ",[694,134647,134648],{},"不能加单位",[55053,134650],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[262,134653,134655],{"id":134654},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134657,134658],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134660,134661],{},"方法:",[698,134663,134664,134674],{},[419,134665,134666,134667,134670,134671],{},"left: 50%; 让 ",[694,134668,134669],{},"盒子的左侧"," 移动到 ",[694,134672,134673],{},"父级元素的水平中心位置",[419,134675,134676,134677,134680,134681],{},"margin-left: -100px; 让盒子 ",[694,134678,134679],{},"向左"," 移动 ",[694,134682,134683],{},"自身宽度的一半",[262,134685,134687],{"id":134686},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[416,134689,134690,134693],{},[419,134691,134692],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[419,134694,134695],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134697,134698],{},"也就是说绝对定位和固定定位和浮动类似",[416,134700,134701],{"start":310},[419,134702,134703],{},"display 是显示模式， 可以改变显示模式有以下方式:",[698,134705,134706,134709,134712],{},[419,134707,134708],{},"可以用inline-block 转换为行内块",[419,134710,134711],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[419,134713,134714],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134716,134717],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[262,134719,134721],{"id":134720},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[416,134723,134724,134727,134730,134733],{},[419,134725,134726],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[419,134728,134729],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[419,134731,134732],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[419,134734,134735],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[270,134737,134738],{"className":127889,"code":132355,"language":127891,"meta":275,"style":275},[277,134739,134740,134746,134756,134760,134766,134776],{"__ignoreMap":275},[152,134741,134742,134744],{"class":281,"line":282},[152,134743,132362],{"class":285},[152,134745,17187],{"class":483},[152,134747,134748,134750,134752,134754],{"class":281,"line":303},[152,134749,132369],{"class":293},[152,134751,52774],{"class":483},[152,134753,34],{"class":293},[152,134755,2965],{"class":483},[152,134757,134758],{"class":281,"line":310},[152,134759,3236],{"class":483},[152,134761,134762,134764],{"class":281,"line":324},[152,134763,132384],{"class":285},[152,134765,17187],{"class":483},[152,134767,134768,134770,134772,134774],{"class":281,"line":329},[152,134769,132369],{"class":293},[152,134771,52774],{"class":483},[152,134773,73859],{"class":293},[152,134775,2965],{"class":483},[152,134777,134778],{"class":281,"line":343},[152,134779,3236],{"class":483},[401,134781],{"style":127745,"src":134782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[262,134784,134786],{"id":134785},"_11138-轮播图","11.1.3.8 轮播图",[401,134788],{"style":127745,"src":134789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[416,134791,134792],{},[419,134793,134794],{},"制作顺序:",[698,134796,134797,134800,134803,134812],{},[419,134798,134799],{},"大盒子我们类名为： tb-promo 淘宝广告",[419,134801,134802],{},"里面先放一张图片",[419,134804,134805,134806,134808,134809,134811],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55053,134807],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55053,134810],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[419,134813,134814,134815,134817,134818,134820],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55053,134816],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55053,134819],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[416,134822,134823],{"start":303},[419,134824,134825],{},"代码模块",[270,134827,134829],{"className":127889,"code":134828,"language":127891,"meta":275,"style":275},"\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",[277,134830,134831,134836,134843,134853,134863,134873,134877,134882,134889,134899],{"__ignoreMap":275},[152,134832,134833],{"class":281,"line":282},[152,134834,134835],{"class":866},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[152,134837,134838,134841],{"class":281,"line":303},[152,134839,134840],{"class":285},".son",[152,134842,17187],{"class":483},[152,134844,134845,134847,134849,134851],{"class":281,"line":310},[152,134846,133695],{"class":293},[152,134848,52774],{"class":483},[152,134850,56168],{"class":293},[152,134852,2965],{"class":483},[152,134854,134855,134857,134859,134861],{"class":281,"line":324},[152,134856,133709],{"class":293},[152,134858,52774],{"class":483},[152,134860,2000],{"class":293},[152,134862,2965],{"class":483},[152,134864,134865,134867,134869,134871],{"class":281,"line":329},[152,134866,133726],{"class":293},[152,134868,52774],{"class":483},[152,134870,2000],{"class":293},[152,134872,2965],{"class":483},[152,134874,134875],{"class":281,"line":343},[152,134876,3236],{"class":483},[152,134878,134879],{"class":281,"line":348},[152,134880,134881],{"class":866},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[152,134883,134884,134887],{"class":281,"line":362},[152,134885,134886],{"class":285},".father",[152,134888,17187],{"class":483},[152,134890,134891,134893,134895,134897],{"class":281,"line":367},[152,134892,133695],{"class":293},[152,134894,52774],{"class":483},[152,134896,56101],{"class":293},[152,134898,2965],{"class":483},[152,134900,134901],{"class":281,"line":381},[152,134902,3236],{"class":483},[19,134904,134905],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[14,134907,134909],{"id":134908},"_1114-定位数值的移动","11.1.4 定位数值的移动",[401,134911],{"style":127745,"src":134912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134914,134915],{},"✨ 黄金口诀：",[19,134917,134918],{},"\"TOP正下负上，LEFT正右负左\"",[19,134920,134921],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134923,134924],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134926,134927],{},"✨ 简单记：",[19,134929,134930],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1736,134932,134933],{},"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":275,"searchDepth":303,"depth":303,"links":134935},[134936],{"id":133463,"depth":303,"text":133464,"children":134937},[134938,134939,134940,134941],{"id":133467,"depth":310,"text":133468},{"id":133482,"depth":310,"text":133483},{"id":133650,"depth":310,"text":133651},{"id":134908,"depth":310,"text":134909},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133455,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134948,"title":134949,"body":134950,"description":24991,"extension":1744,"meta":136373,"navigation":306,"path":136374,"seo":136375,"stem":136376,"__hash__":136377},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134951,"toc":136352},[134952,134955,134959,134967,134971,134976,134984,134996,135000,135005,135013,135024,135028,135033,135074,135082,135086,135089,135092,135095,135189,135192,135286,135289,135383,135386,135389,135424,135427,135430,135460,135463,135466,135469,135472,135475,135478,135481,135551,135554,135558,135562,135603,135607,135613,135616,135619,135623,135626,135629,135632,135713,135716,135719,135723,135727,135730,135733,135736,135739,135742,135748,135757,135761,135780,135784,135794,135797,135800,135803,135806,135809,135812,135815,135818,135827,135831,135840,135843,135848,135901,135906,136072,136075,136078,136083,136086,136089,136092,136095,136100,136248,136251,136254,136259,136262,136267,136301,136304,136307,136311,136314,136321,136324,136327,136330,136333,136336,136339,136342,136346,136349],[10,134953,134949],{"id":134954},"_12-显示隐藏与图形资源",[1760,134956,134958],{"id":134957},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[698,134960,134961,134964],{},[419,134962,134963],{},"目的:让一个元素在页面中消失或者显示出来",[419,134965,134966],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[14,134968,134970],{"id":134969},"_1211-display-显示","12.1.1 display 显示",[416,134972,134973],{},[419,134974,134975],{},"display 设置或检索对象是否及如何显示",[698,134977,134978,134981],{},[419,134979,134980],{},"display: none;隐藏对象",[419,134982,134983],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[416,134985,134986,134993],{"start":303},[419,134987,134988,134989,134992],{},"特点： display 隐藏元素后， ",[694,134990,134991],{},"不再占"," 有原来的位置",[419,134994,134995],{},"在js中使用非常的广泛",[14,134997,134999],{"id":134998},"_1212-visibility可见性","12.1.2 visibility可见性",[416,135001,135002],{},[419,135003,135004],{},"visibility 属性用于指定一个元素应可见还是隐藏",[698,135006,135007,135010],{},[419,135008,135009],{},"visibility： visible；元素可见",[419,135011,135012],{},"visibility：hidden；元素隐藏",[416,135014,135015,135018,135021],{"start":303},[419,135016,135017],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[419,135019,135020],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[419,135022,135023],{},"隐藏后继续占有原有位置",[14,135025,135027],{"id":135026},"_1213-overflow溢出","12.1.3 overflow溢出",[698,135029,135030],{},[419,135031,135032],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[23,135034,135035,135043],{},[26,135036,135037],{},[29,135038,135039,135041],{},[32,135040,128353],{"align":34},[32,135042,29090],{"align":34},[43,135044,135045,135053,135060,135067],{},[29,135046,135047,135050],{},[48,135048,135049],{"align":34},"visible",[48,135051,135052],{"align":34},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[29,135054,135055,135057],{},[48,135056,63051],{"align":34},[48,135058,135059],{"align":34},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[29,135061,135062,135064],{},[48,135063,130309],{"align":34},[48,135065,135066],{"align":34},"不管超出内容否，总是显示滚动条",[29,135068,135069,135071],{},[48,135070,74000],{"align":34},[48,135072,135073],{"align":34},"超出自动显示滚动条，不超出不显示滚动条",[698,135075,135076,135079],{},[419,135077,135078],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[419,135080,135081],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[14,135083,135085],{"id":135084},"_1214-案例收获","12.1.4 案例收获",[401,135087],{"style":127745,"src":135088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135090,135091],{},"问题：没做出来动态效果，使用hover没实现",[19,135093,135094],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[270,135096,135097],{"className":127889,"code":133321,"language":127891,"meta":275,"style":275},[277,135098,135099,135103,135117,135121,135135,135139,135153,135157,135171,135175],{"__ignoreMap":275},[152,135100,135101],{"class":281,"line":282},[152,135102,133328],{"class":866},[152,135104,135105,135107,135109,135111,135113,135115],{"class":281,"line":303},[152,135106,133333],{"class":285},[152,135108,81144],{"class":483},[152,135110,130249],{"class":293},[152,135112,52774],{"class":483},[152,135114,133342],{"class":293},[152,135116,130819],{"class":483},[152,135118,135119],{"class":281,"line":310},[152,135120,133349],{"class":866},[152,135122,135123,135125,135127,135129,135131,135133],{"class":281,"line":324},[152,135124,133354],{"class":285},[152,135126,81144],{"class":483},[152,135128,130249],{"class":293},[152,135130,52774],{"class":483},[152,135132,56101],{"class":293},[152,135134,130819],{"class":483},[152,135136,135137],{"class":281,"line":329},[152,135138,133369],{"class":866},[152,135140,135141,135143,135145,135147,135149,135151],{"class":281,"line":343},[152,135142,133374],{"class":285},[152,135144,81144],{"class":483},[152,135146,130249],{"class":293},[152,135148,52774],{"class":483},[152,135150,56168],{"class":293},[152,135152,130819],{"class":483},[152,135154,135155],{"class":281,"line":348},[152,135156,133389],{"class":866},[152,135158,135159,135161,135163,135165,135167,135169],{"class":281,"line":362},[152,135160,133394],{"class":285},[152,135162,81144],{"class":483},[152,135164,130249],{"class":293},[152,135166,52774],{"class":483},[152,135168,87570],{"class":293},[152,135170,130819],{"class":483},[152,135172,135173],{"class":281,"line":367},[152,135174,133409],{"class":866},[152,135176,135177,135179,135181,135183,135185,135187],{"class":281,"line":381},[152,135178,133414],{"class":285},[152,135180,81144],{"class":483},[152,135182,130249],{"class":293},[152,135184,52774],{"class":483},[152,135186,133423],{"class":293},[152,135188,130819],{"class":483},[19,135190,135191],{},"完整代码：",[270,135193,135194],{"className":127889,"code":133321,"language":127891,"meta":275,"style":275},[277,135195,135196,135200,135214,135218,135232,135236,135250,135254,135268,135272],{"__ignoreMap":275},[152,135197,135198],{"class":281,"line":282},[152,135199,133328],{"class":866},[152,135201,135202,135204,135206,135208,135210,135212],{"class":281,"line":303},[152,135203,133333],{"class":285},[152,135205,81144],{"class":483},[152,135207,130249],{"class":293},[152,135209,52774],{"class":483},[152,135211,133342],{"class":293},[152,135213,130819],{"class":483},[152,135215,135216],{"class":281,"line":310},[152,135217,133349],{"class":866},[152,135219,135220,135222,135224,135226,135228,135230],{"class":281,"line":324},[152,135221,133354],{"class":285},[152,135223,81144],{"class":483},[152,135225,130249],{"class":293},[152,135227,52774],{"class":483},[152,135229,56101],{"class":293},[152,135231,130819],{"class":483},[152,135233,135234],{"class":281,"line":329},[152,135235,133369],{"class":866},[152,135237,135238,135240,135242,135244,135246,135248],{"class":281,"line":343},[152,135239,133374],{"class":285},[152,135241,81144],{"class":483},[152,135243,130249],{"class":293},[152,135245,52774],{"class":483},[152,135247,56168],{"class":293},[152,135249,130819],{"class":483},[152,135251,135252],{"class":281,"line":348},[152,135253,133389],{"class":866},[152,135255,135256,135258,135260,135262,135264,135266],{"class":281,"line":362},[152,135257,133394],{"class":285},[152,135259,81144],{"class":483},[152,135261,130249],{"class":293},[152,135263,52774],{"class":483},[152,135265,87570],{"class":293},[152,135267,130819],{"class":483},[152,135269,135270],{"class":281,"line":367},[152,135271,133409],{"class":866},[152,135273,135274,135276,135278,135280,135282,135284],{"class":281,"line":381},[152,135275,133414],{"class":285},[152,135277,81144],{"class":483},[152,135279,130249],{"class":293},[152,135281,52774],{"class":483},[152,135283,133423],{"class":293},[152,135285,130819],{"class":483},[19,135287,135288],{},"分布思路重点详解：",[270,135290,135291],{"className":127889,"code":133321,"language":127891,"meta":275,"style":275},[277,135292,135293,135297,135311,135315,135329,135333,135347,135351,135365,135369],{"__ignoreMap":275},[152,135294,135295],{"class":281,"line":282},[152,135296,133328],{"class":866},[152,135298,135299,135301,135303,135305,135307,135309],{"class":281,"line":303},[152,135300,133333],{"class":285},[152,135302,81144],{"class":483},[152,135304,130249],{"class":293},[152,135306,52774],{"class":483},[152,135308,133342],{"class":293},[152,135310,130819],{"class":483},[152,135312,135313],{"class":281,"line":310},[152,135314,133349],{"class":866},[152,135316,135317,135319,135321,135323,135325,135327],{"class":281,"line":324},[152,135318,133354],{"class":285},[152,135320,81144],{"class":483},[152,135322,130249],{"class":293},[152,135324,52774],{"class":483},[152,135326,56101],{"class":293},[152,135328,130819],{"class":483},[152,135330,135331],{"class":281,"line":329},[152,135332,133369],{"class":866},[152,135334,135335,135337,135339,135341,135343,135345],{"class":281,"line":343},[152,135336,133374],{"class":285},[152,135338,81144],{"class":483},[152,135340,130249],{"class":293},[152,135342,52774],{"class":483},[152,135344,56168],{"class":293},[152,135346,130819],{"class":483},[152,135348,135349],{"class":281,"line":348},[152,135350,133389],{"class":866},[152,135352,135353,135355,135357,135359,135361,135363],{"class":281,"line":362},[152,135354,133394],{"class":285},[152,135356,81144],{"class":483},[152,135358,130249],{"class":293},[152,135360,52774],{"class":483},[152,135362,87570],{"class":293},[152,135364,130819],{"class":483},[152,135366,135367],{"class":281,"line":367},[152,135368,133409],{"class":866},[152,135370,135371,135373,135375,135377,135379,135381],{"class":281,"line":381},[152,135372,133414],{"class":285},[152,135374,81144],{"class":483},[152,135376,130249],{"class":293},[152,135378,52774],{"class":483},[152,135380,133423],{"class":293},[152,135382,130819],{"class":483},[401,135384],{"style":127745,"src":135385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135387,135388],{},"图片太大，盒子太小，此时需要修改图片的大小",[270,135390,135392],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[277,135393,135394],{"__ignoreMap":275},[152,135395,135396,135398,135400,135402,135404,135407,135409,135411,135414,135417,135419,135422],{"class":281,"line":282},[152,135397,844],{"class":483},[152,135399,401],{"class":52637},[152,135401,56576],{"class":285},[152,135403,1864],{"class":483},[152,135405,135406],{"class":289},"\"images\u002Fpic.jpg\"",[152,135408,56584],{"class":285},[152,135410,1864],{"class":483},[152,135412,135413],{"class":289},"\"描述文字\"",[152,135415,135416],{"class":285}," title",[152,135418,1864],{"class":483},[152,135420,135421],{"class":289},"\"悬停提示\"",[152,135423,52644],{"class":483},[401,135425],{"style":127745,"src":135426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135428,135429],{},"制造遮罩层",[270,135431,135432],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,135433,135434],{"__ignoreMap":275},[152,135435,135436,135438,135440,135442,135444,135446,135448,135450,135452,135454,135456,135458],{"class":281,"line":282},[152,135437,844],{"class":483},[152,135439,401],{"class":52637},[152,135441,56576],{"class":285},[152,135443,1864],{"class":483},[152,135445,135406],{"class":289},[152,135447,56584],{"class":285},[152,135449,1864],{"class":483},[152,135451,135413],{"class":289},[152,135453,135416],{"class":285},[152,135455,1864],{"class":483},[152,135457,135421],{"class":289},[152,135459,52644],{"class":483},[19,135461,135462],{},"此时是这样的为标准流",[401,135464],{"style":127745,"src":135465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135467,135468],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135470,135471],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135473,135474],{},"让他在中间，用center(background-position)",[19,135476,135477],{},"将需要变的尽可能放到一个盒子中",[19,135479,135480],{},"放大盒子上内部盒子发生变化",[270,135482,135484],{"className":127889,"code":135483,"language":127891,"meta":275,"style":275},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[277,135485,135486,135492,135502,135506,135513,135523,135535,135547],{"__ignoreMap":275},[152,135487,135488,135490],{"class":281,"line":282},[152,135489,128956],{"class":285},[152,135491,17187],{"class":483},[152,135493,135494,135496,135498,135500],{"class":281,"line":303},[152,135495,133695],{"class":293},[152,135497,52774],{"class":483},[152,135499,56101],{"class":293},[152,135501,2965],{"class":483},[152,135503,135504],{"class":281,"line":310},[152,135505,3236],{"class":483},[152,135507,135508,135511],{"class":281,"line":324},[152,135509,135510],{"class":285},".child",[152,135512,17187],{"class":483},[152,135514,135515,135517,135519,135521],{"class":281,"line":329},[152,135516,133695],{"class":293},[152,135518,52774],{"class":483},[152,135520,56168],{"class":293},[152,135522,2965],{"class":483},[152,135524,135525,135527,135529,135531,135533],{"class":281,"line":343},[152,135526,133709],{"class":293},[152,135528,52774],{"class":483},[152,135530,2464],{"class":293},[152,135532,2136],{"class":476},[152,135534,2965],{"class":483},[152,135536,135537,135539,135541,135543,135545],{"class":281,"line":348},[152,135538,133726],{"class":293},[152,135540,52774],{"class":483},[152,135542,2464],{"class":293},[152,135544,2136],{"class":476},[152,135546,2965],{"class":483},[152,135548,135549],{"class":281,"line":362},[152,135550,3236],{"class":483},[19,135552,135553],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[1760,135555,135557],{"id":135556},"_122-精灵图","12.2 精灵图",[14,135559,135561],{"id":135560},"_1221-理解","12.2.1 理解",[416,135563,135564,135582],{},[419,135565,135566,135567,133795,135570,135573,135574,135577,135578,135581],{},"目的： ",[694,135568,135569],{},"为了有效地减少服务器接收和发送请求的次数",[694,135571,135572],{},"提高"," 页面的 ",[694,135575,135576],{},"加载速度"," ，出现了 ",[694,135579,135580],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[419,135583,135584,135585,135587,135588,135590,135591,135593,135594,135596,135597,135599,135600,135602],{},"使用精灵图核心：",[55053,135586],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55053,135589],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55053,135592],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55053,135595],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55053,135598],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55053,135601],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[14,135604,135606],{"id":135605},"_1222-扒图","12.2.2 扒图",[270,135608,135611],{"className":135609,"code":135610,"language":6829},[6827],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[277,135612,135610],{"__ignoreMap":275},[401,135614],{"style":127745,"src":135615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[401,135617],{"style":127745,"src":135618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[14,135620,135622],{"id":135621},"_1223-精灵图的实现","12.2.3 精灵图的实现",[401,135624],{"style":127745,"src":135625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135627,135628],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[401,135630],{"style":127745,"src":135631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[270,135633,135635],{"className":127889,"code":135634,"language":127891,"meta":275,"style":275},"\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",[277,135636,135637,135642,135649,135661,135673,135692,135709],{"__ignoreMap":275},[152,135638,135639],{"class":281,"line":282},[152,135640,135641],{"class":866},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[152,135643,135644,135647],{"class":281,"line":303},[152,135645,135646],{"class":285},".icon",[152,135648,17187],{"class":483},[152,135650,135651,135653,135655,135657,135659],{"class":281,"line":310},[152,135652,71905],{"class":293},[152,135654,52774],{"class":483},[152,135656,2508],{"class":293},[152,135658,52829],{"class":476},[152,135660,2965],{"class":483},[152,135662,135663,135665,135667,135669,135671],{"class":281,"line":324},[152,135664,72125],{"class":293},[152,135666,52774],{"class":483},[152,135668,2508],{"class":293},[152,135670,52829],{"class":476},[152,135672,2965],{"class":483},[152,135674,135675,135677,135679,135681,135683,135686,135688,135690],{"class":281,"line":329},[152,135676,71948],{"class":293},[152,135678,52774],{"class":483},[152,135680,63063],{"class":293},[152,135682,1819],{"class":483},[152,135684,135685],{"class":6858},"sprites.png",[152,135687,15330],{"class":483},[152,135689,63073],{"class":293},[152,135691,2965],{"class":483},[152,135693,135694,135696,135698,135700,135702,135705,135707],{"class":281,"line":343},[152,135695,130149],{"class":293},[152,135697,52774],{"class":483},[152,135699,53100],{"class":293},[152,135701,52829],{"class":476},[152,135703,135704],{"class":293}," -20",[152,135706,52829],{"class":476},[152,135708,2965],{"class":483},[152,135710,135711],{"class":281,"line":348},[152,135712,3236],{"class":483},[401,135714],{"style":127745,"src":135715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135717,135718],{},"在前端中坐标轴的正方向是右和下",[1760,135720,135722],{"id":135721},"_123-字体图标","12.3 字体图标",[14,135724,135726],{"id":135725},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135728,135729],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135731,135732],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135734,135735],{},"1.图片文件还是比较大的。",[19,135737,135738],{},"2.图片本身放大和缩小会失真。",[19,135740,135741],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135743,135744,135745,27351],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[694,135746,135747],{},"字体图标 iconfont",[19,135749,135750,135753,135754,29984],{},[694,135751,135752],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[694,135755,135756],{},"展示的是图标，本质属于字体",[14,135758,135760],{"id":135759},"_1232-字体图标的优点","12.3.2 字体图标的优点",[698,135762,135763,135768,135771,135774,135777],{},[419,135764,135765,135767],{},[694,135766,27486],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[419,135769,135770],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[419,135772,135773],{},"兼容性：几乎支持所有的浏览器，请放心使用",[419,135775,135776],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[419,135778,135779],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[14,135781,135783],{"id":135782},"_1233-字体库下载网站","12.3.3 字体库下载网站",[698,135785,135786],{},[419,135787,135788,135789],{},"icomoon字体库：",[69,135790,135793],{"href":135791,"rel":135792},"http:\u002F\u002Ficomoon.io\u002F",[245],"http:\u002F\u002Ficomoon.io",[19,135795,135796],{},"进去之后点icomoon app",[401,135798],{"style":127745,"src":135799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135801,135802],{},"可以对其编辑：",[401,135804],{"style":127745,"src":135805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135807,135808],{},"生成字体：",[401,135810],{"style":127745,"src":135811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135813,135814],{},"下载：",[401,135816],{"style":127745,"src":135817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[698,135819,135820],{},[419,135821,135822,135823],{},"阿里iconfont字体库： ",[69,135824,135825],{"href":135825,"rel":135826},"http:\u002F\u002Fwww.iconfont.cn\u002F",[245],[14,135828,135830],{"id":135829},"_1234-字体图标的引入","12.3.4 字体图标的引入",[416,135832,135833],{},[419,135834,135835,135836,135839],{},"把下载包里面的 ",[694,135837,135838],{},"fonts"," 文件夹放入页面根目录下",[401,135841],{"style":127745,"src":135842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[416,135844,135845],{"start":303},[419,135846,135847],{},"字体文件格式",[23,135849,135850,135859],{},[26,135851,135852],{},[29,135853,135854,135857],{},[32,135855,135856],{"align":34},"格式",[32,135858,25354],{"align":34},[43,135860,135861,135871,135881,135891],{},[29,135862,135863,135868],{},[48,135864,135865],{"align":34},[694,135866,135867],{},".ttf",[48,135869,135870],{"align":34},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[29,135872,135873,135878],{},[48,135874,135875],{"align":34},[694,135876,135877],{},".woff",[48,135879,135880],{"align":34},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[29,135882,135883,135888],{},[48,135884,135885],{"align":34},[694,135886,135887],{},".eot",[48,135889,135890],{"align":34},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[29,135892,135893,135898],{},[48,135894,135895],{"align":34},[694,135896,135897],{},"svg",[48,135899,135900],{"align":34},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[416,135902,135903],{"start":310},[419,135904,135905],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[270,135907,135909],{"className":127889,"code":135908,"language":127891,"meta":275,"style":275},"\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",[277,135910,135911,135916,135923,135935,135951,135976,135997,136017,136037,136041,136047,136057,136068],{"__ignoreMap":275},[152,135912,135913],{"class":281,"line":282},[152,135914,135915],{"class":866},"\u002F* 引入字体图标 *\u002F\n",[152,135917,135918,135921],{"class":281,"line":303},[152,135919,135920],{"class":476},"@font-face",[152,135922,17187],{"class":483},[152,135924,135925,135928,135930,135933],{"class":281,"line":310},[152,135926,135927],{"class":293},"  font-family",[152,135929,52774],{"class":483},[152,135931,135932],{"class":289},"'icomoon'",[152,135934,2965],{"class":483},[152,135936,135937,135940,135942,135944,135946,135949],{"class":281,"line":324},[152,135938,135939],{"class":293},"  src",[152,135941,52774],{"class":483},[152,135943,63063],{"class":293},[152,135945,1819],{"class":483},[152,135947,135948],{"class":289},"'fonts\u002Ficomoon.eot'",[152,135950,4362],{"class":483},[152,135952,135953,135955,135957,135959,135961,135964,135966,135969,135971,135974],{"class":281,"line":329},[152,135954,135939],{"class":293},[152,135956,52774],{"class":483},[152,135958,63063],{"class":293},[152,135960,1819],{"class":483},[152,135962,135963],{"class":289},"'fonts\u002Ficomoon.eot?#iefix'",[152,135965,15330],{"class":483},[152,135967,135968],{"class":293},"format",[152,135970,1819],{"class":483},[152,135972,135973],{"class":289},"'embedded-opentype'",[152,135975,39384],{"class":483},[152,135977,135978,135981,135983,135986,135988,135990,135992,135995],{"class":281,"line":343},[152,135979,135980],{"class":293},"       url",[152,135982,1819],{"class":483},[152,135984,135985],{"class":289},"'fonts\u002Ficomoon.woff'",[152,135987,15330],{"class":483},[152,135989,135968],{"class":293},[152,135991,1819],{"class":483},[152,135993,135994],{"class":289},"'woff'",[152,135996,39384],{"class":483},[152,135998,135999,136001,136003,136006,136008,136010,136012,136015],{"class":281,"line":348},[152,136000,135980],{"class":293},[152,136002,1819],{"class":483},[152,136004,136005],{"class":289},"'fonts\u002Ficomoon.ttf'",[152,136007,15330],{"class":483},[152,136009,135968],{"class":293},[152,136011,1819],{"class":483},[152,136013,136014],{"class":289},"'truetype'",[152,136016,39384],{"class":483},[152,136018,136019,136021,136023,136026,136028,136030,136032,136035],{"class":281,"line":362},[152,136020,135980],{"class":293},[152,136022,1819],{"class":483},[152,136024,136025],{"class":289},"'fonts\u002Ficomoon.svg#icomoon'",[152,136027,15330],{"class":483},[152,136029,135968],{"class":293},[152,136031,1819],{"class":483},[152,136033,136034],{"class":289},"'svg'",[152,136036,4362],{"class":483},[152,136038,136039],{"class":281,"line":367},[152,136040,3236],{"class":483},[152,136042,136043,136045],{"class":281,"line":381},[152,136044,135646],{"class":285},[152,136046,17187],{"class":483},[152,136048,136049,136051,136053,136055],{"class":281,"line":386},[152,136050,135927],{"class":293},[152,136052,52774],{"class":483},[152,136054,135932],{"class":289},[152,136056,2965],{"class":483},[152,136058,136059,136062,136064,136066],{"class":281,"line":932},[152,136060,136061],{"class":293},"  font-style",[152,136063,52774],{"class":483},[152,136065,65178],{"class":293},[152,136067,2965],{"class":483},[152,136069,136070],{"class":281,"line":942},[152,136071,3236],{"class":483},[19,136073,136074],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[401,136076],{"style":127745,"src":136077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[416,136079,136080],{"start":324},[419,136081,136082],{},"添加字体",[401,136084],{"style":127745,"src":136085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136087,136088],{},"复制：",[401,136090],{"style":127745,"src":136091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136093,136094],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[416,136096,136097],{"start":329},[419,136098,136099],{},"代码展示：",[270,136101,136102],{"className":127889,"code":135908,"language":127891,"meta":275,"style":275},[277,136103,136104,136108,136114,136124,136138,136160,136178,136196,136214,136218,136224,136234,136244],{"__ignoreMap":275},[152,136105,136106],{"class":281,"line":282},[152,136107,135915],{"class":866},[152,136109,136110,136112],{"class":281,"line":303},[152,136111,135920],{"class":476},[152,136113,17187],{"class":483},[152,136115,136116,136118,136120,136122],{"class":281,"line":310},[152,136117,135927],{"class":293},[152,136119,52774],{"class":483},[152,136121,135932],{"class":289},[152,136123,2965],{"class":483},[152,136125,136126,136128,136130,136132,136134,136136],{"class":281,"line":324},[152,136127,135939],{"class":293},[152,136129,52774],{"class":483},[152,136131,63063],{"class":293},[152,136133,1819],{"class":483},[152,136135,135948],{"class":289},[152,136137,4362],{"class":483},[152,136139,136140,136142,136144,136146,136148,136150,136152,136154,136156,136158],{"class":281,"line":329},[152,136141,135939],{"class":293},[152,136143,52774],{"class":483},[152,136145,63063],{"class":293},[152,136147,1819],{"class":483},[152,136149,135963],{"class":289},[152,136151,15330],{"class":483},[152,136153,135968],{"class":293},[152,136155,1819],{"class":483},[152,136157,135973],{"class":289},[152,136159,39384],{"class":483},[152,136161,136162,136164,136166,136168,136170,136172,136174,136176],{"class":281,"line":343},[152,136163,135980],{"class":293},[152,136165,1819],{"class":483},[152,136167,135985],{"class":289},[152,136169,15330],{"class":483},[152,136171,135968],{"class":293},[152,136173,1819],{"class":483},[152,136175,135994],{"class":289},[152,136177,39384],{"class":483},[152,136179,136180,136182,136184,136186,136188,136190,136192,136194],{"class":281,"line":348},[152,136181,135980],{"class":293},[152,136183,1819],{"class":483},[152,136185,136005],{"class":289},[152,136187,15330],{"class":483},[152,136189,135968],{"class":293},[152,136191,1819],{"class":483},[152,136193,136014],{"class":289},[152,136195,39384],{"class":483},[152,136197,136198,136200,136202,136204,136206,136208,136210,136212],{"class":281,"line":362},[152,136199,135980],{"class":293},[152,136201,1819],{"class":483},[152,136203,136025],{"class":289},[152,136205,15330],{"class":483},[152,136207,135968],{"class":293},[152,136209,1819],{"class":483},[152,136211,136034],{"class":289},[152,136213,4362],{"class":483},[152,136215,136216],{"class":281,"line":367},[152,136217,3236],{"class":483},[152,136219,136220,136222],{"class":281,"line":381},[152,136221,135646],{"class":285},[152,136223,17187],{"class":483},[152,136225,136226,136228,136230,136232],{"class":281,"line":386},[152,136227,135927],{"class":293},[152,136229,52774],{"class":483},[152,136231,135932],{"class":289},[152,136233,2965],{"class":483},[152,136235,136236,136238,136240,136242],{"class":281,"line":932},[152,136237,136061],{"class":293},[152,136239,52774],{"class":483},[152,136241,65178],{"class":293},[152,136243,2965],{"class":483},[152,136245,136246],{"class":281,"line":942},[152,136247,3236],{"class":483},[401,136249],{"style":127745,"src":136250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136252,136253],{},"更加细节展示：",[416,136255,136256],{},[419,136257,136258],{},"html 标签内添加小图标",[401,136260],{"style":127745,"src":136261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[416,136263,136264],{"start":303},[419,136265,136266],{},"给标签定义字体",[270,136268,136269],{"className":128636,"code":131993,"language":128638,"meta":275,"style":275},[277,136270,136271,136275,136289,136293],{"__ignoreMap":275},[152,136272,136273],{"class":281,"line":282},[152,136274,132000],{"class":866},[152,136276,136277,136279,136281,136283,136285,136287],{"class":281,"line":303},[152,136278,844],{"class":483},[152,136280,52948],{"class":52637},[152,136282,54823],{"class":285},[152,136284,1864],{"class":483},[152,136286,132013],{"class":289},[152,136288,52644],{"class":483},[152,136290,136291],{"class":281,"line":310},[152,136292,132020],{"class":483},[152,136294,136295,136297,136299],{"class":281,"line":324},[152,136296,53122],{"class":483},[152,136298,52948],{"class":52637},[152,136300,52644],{"class":483},[19,136302,136303],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[401,136305],{"style":127745,"src":136306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[14,136308,136310],{"id":136309},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136312,136313],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136315,136316,136317,136320],{},"把压缩包里面的 ",[694,136318,136319],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136322,136323],{},"打开网站，点下方：",[401,136325],{"style":127745,"src":136326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[401,136328],{"style":127745,"src":136329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[401,136331],{"style":127745,"src":136332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136334,136335],{},"点yes重新加载",[19,136337,136338],{},"然后重复之前的操作就可以实现了",[19,136340,136341],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[14,136343,136345],{"id":136344},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[401,136347],{"style":127745,"src":136348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1736,136350,136351],{},"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":275,"searchDepth":303,"depth":303,"links":136353},[136354,136360,136365],{"id":134957,"depth":303,"text":134958,"children":136355},[136356,136357,136358,136359],{"id":134969,"depth":310,"text":134970},{"id":134998,"depth":310,"text":134999},{"id":135026,"depth":310,"text":135027},{"id":135084,"depth":310,"text":135085},{"id":135556,"depth":303,"text":135557,"children":136361},[136362,136363,136364],{"id":135560,"depth":310,"text":135561},{"id":135605,"depth":310,"text":135606},{"id":135621,"depth":310,"text":135622},{"id":135721,"depth":303,"text":135722,"children":136366},[136367,136368,136369,136370,136371,136372],{"id":135725,"depth":310,"text":135726},{"id":135759,"depth":310,"text":135760},{"id":135782,"depth":310,"text":135783},{"id":135829,"depth":310,"text":135830},{"id":136309,"depth":310,"text":136310},{"id":136344,"depth":310,"text":136345},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134949,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136379,"title":136380,"body":136381,"description":24991,"extension":1744,"meta":137608,"navigation":306,"path":137609,"seo":137610,"stem":137611,"__hash__":137612},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136382,"toc":137589},[136383,136386,136390,136393,136407,136475,136505,136508,136512,136516,136618,136665,136669,136672,136675,136709,136712,136715,136718,136721,136724,136727,136730,136732,136735,136738,136741,136744,136747,136750,136753,136781,136784,136788,136791,136798,136801,136804,136830,136833,136837,136840,136843,136850,136854,136857,136859,136891,136894,136897,136909,136915,136918,136921,136924,136926,136930,136933,136936,136939,136984,136988,136990,136993,137000,137042,137045,137049,137054,137068,137072,137075,137078,137081,137084,137087,137121,137124,137127,137181,137184,137187,137190,137193,137245,137248,137251,137300,137304,137306,137309,137312,137315,137318,137321,137379,137382,137388,137391,137394,137426,137429,137433,137437,137440,137472,137476,137479,137523,137527,137530,137533,137536,137539,137542,137545,137548,137550,137553,137555,137558,137561,137564,137567,137572,137575,137577,137580,137583,137586],[10,136384,136380],{"id":136385},"_13-界面样式与布局技巧",[1760,136387,136389],{"id":136388},"_131-css三角","13.1 css三角",[19,136391,136392],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[698,136394,136395,136398,136401,136404],{},[419,136396,136397],{},"用css 边框可以模拟三角效果",[419,136399,136400],{},"宽度高度为0",[419,136402,136403],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[419,136405,136406],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[270,136408,136410],{"className":127889,"code":136409,"language":127891,"meta":275,"style":275},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[277,136411,136412,136417,136424,136434,136444,136460,136471],{"__ignoreMap":275},[152,136413,136414],{"class":281,"line":282},[152,136415,136416],{"class":866},"\u002F* CSS 实现三角形 *\u002F\n",[152,136418,136419,136422],{"class":281,"line":303},[152,136420,136421],{"class":285},".triangle",[152,136423,17187],{"class":483},[152,136425,136426,136428,136430,136432],{"class":281,"line":310},[152,136427,71905],{"class":293},[152,136429,52774],{"class":483},[152,136431,2000],{"class":293},[152,136433,2965],{"class":483},[152,136435,136436,136438,136440,136442],{"class":281,"line":324},[152,136437,72125],{"class":293},[152,136439,52774],{"class":483},[152,136441,2000],{"class":293},[152,136443,2965],{"class":483},[152,136445,136446,136448,136450,136452,136454,136456,136458],{"class":281,"line":329},[152,136447,72233],{"class":293},[152,136449,52774],{"class":483},[152,136451,2254],{"class":293},[152,136453,52829],{"class":476},[152,136455,52858],{"class":293},[152,136457,65328],{"class":293},[152,136459,2965],{"class":483},[152,136461,136462,136465,136467,136469],{"class":281,"line":343},[152,136463,136464],{"class":293},"  border-bottom-color",[152,136466,52774],{"class":483},[152,136468,63706],{"class":293},[152,136470,2965],{"class":483},[152,136472,136473],{"class":281,"line":348},[152,136474,3236],{"class":483},[270,136476,136477],{"className":127889,"code":132046,"language":127891,"meta":275,"style":275},[277,136478,136479,136485,136501],{"__ignoreMap":275},[152,136480,136481,136483],{"class":281,"line":282},[152,136482,52948],{"class":52637},[152,136484,17187],{"class":483},[152,136486,136487,136489,136491,136493,136495,136497,136499],{"class":281,"line":303},[152,136488,72233],{"class":293},[152,136490,52774],{"class":483},[152,136492,2026],{"class":293},[152,136494,52829],{"class":476},[152,136496,52858],{"class":293},[152,136498,131281],{"class":293},[152,136500,2965],{"class":483},[152,136502,136503],{"class":281,"line":310},[152,136504,3236],{"class":483},[401,136506],{"style":127745,"src":136507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[1760,136509,136511],{"id":136510},"_132-css用户界面样式","13.2 css用户界面样式",[14,136513,136515],{"id":136514},"_1321-鼠标样式","13.2.1 鼠标样式",[270,136517,136519],{"className":127889,"code":136518,"language":127891,"meta":275,"style":275},"\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",[277,136520,136521,136526,136545,136563,136582,136599],{"__ignoreMap":275},[152,136522,136523],{"class":281,"line":282},[152,136524,136525],{"class":866},"\u002F* 鼠标样式 *\u002F\n",[152,136527,136528,136530,136532,136535,136537,136539,136542],{"class":281,"line":303},[152,136529,52948],{"class":52637},[152,136531,81144],{"class":483},[152,136533,136534],{"class":293},"cursor",[152,136536,52774],{"class":483},[152,136538,63367],{"class":293},[152,136540,136541],{"class":483},"; }   ",[152,136543,136544],{"class":866},"\u002F* 手型 *\u002F\n",[152,136546,136547,136549,136551,136553,136555,136558,136560],{"class":281,"line":310},[152,136548,52948],{"class":52637},[152,136550,81144],{"class":483},[152,136552,136534],{"class":293},[152,136554,52774],{"class":483},[152,136556,136557],{"class":293},"default",[152,136559,136541],{"class":483},[152,136561,136562],{"class":866},"\u002F* 默认 *\u002F\n",[152,136564,136565,136567,136569,136571,136573,136576,136579],{"class":281,"line":324},[152,136566,52948],{"class":52637},[152,136568,81144],{"class":483},[152,136570,136534],{"class":293},[152,136572,52774],{"class":483},[152,136574,136575],{"class":293},"move",[152,136577,136578],{"class":483},"; }      ",[152,136580,136581],{"class":866},"\u002F* 移动 *\u002F\n",[152,136583,136584,136586,136588,136590,136592,136594,136596],{"class":281,"line":329},[152,136585,52948],{"class":52637},[152,136587,81144],{"class":483},[152,136589,136534],{"class":293},[152,136591,52774],{"class":483},[152,136593,6829],{"class":293},[152,136595,136578],{"class":483},[152,136597,136598],{"class":866},"\u002F* 文本 *\u002F\n",[152,136600,136601,136603,136605,136607,136609,136612,136615],{"class":281,"line":343},[152,136602,52948],{"class":52637},[152,136604,81144],{"class":483},[152,136606,136534],{"class":293},[152,136608,52774],{"class":483},[152,136610,136611],{"class":293},"not-allowed",[152,136613,136614],{"class":483},"; } ",[152,136616,136617],{"class":866},"\u002F* 禁止 *\u002F\n",[23,136619,136620,136628],{},[26,136621,136622],{},[29,136623,136624,136626],{},[32,136625,128353],{"align":34},[32,136627,29090],{"align":34},[43,136629,136630,136637,136644,136651,136658],{},[29,136631,136632,136634],{},[48,136633,136557],{"align":34},[48,136635,136636],{"align":34},"小白 默认",[29,136638,136639,136641],{},[48,136640,63367],{"align":34},[48,136642,136643],{"align":34},"小手",[29,136645,136646,136648],{},[48,136647,136575],{"align":34},[48,136649,136650],{"align":34},"移动",[29,136652,136653,136655],{},[48,136654,6829],{"align":34},[48,136656,136657],{"align":34},"文本",[29,136659,136660,136662],{},[48,136661,136611],{"align":34},[48,136663,136664],{"align":34},"禁止",[14,136666,136668],{"id":136667},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136670,136671],{},"去除表单轮廓线",[19,136673,136674],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[270,136676,136677],{"className":127889,"code":131253,"language":127891,"meta":275,"style":275},[277,136678,136679,136683,136689,136705],{"__ignoreMap":275},[152,136680,136681],{"class":281,"line":282},[152,136682,131260],{"class":866},[152,136684,136685,136687],{"class":281,"line":303},[152,136686,52948],{"class":52637},[152,136688,17187],{"class":483},[152,136690,136691,136693,136695,136697,136699,136701,136703],{"class":281,"line":310},[152,136692,72233],{"class":293},[152,136694,52774],{"class":483},[152,136696,2026],{"class":293},[152,136698,52829],{"class":476},[152,136700,52858],{"class":293},[152,136702,131281],{"class":293},[152,136704,2965],{"class":483},[152,136706,136707],{"class":281,"line":324},[152,136708,3236],{"class":483},[19,136710,136711],{},"文本域：",[401,136713],{"style":127745,"src":136714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,136716,136717],{},"此时会有一个空白区域",[401,136719],{"style":127745,"src":136720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,136722,136723],{},"写在同一行就不会出现这个问题",[401,136725],{"style":127745,"src":136726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,136728,136729],{},"文本域是行内块元素，一定记住！！！",[19,136731,99570],{},[401,136733],{"style":127745,"src":136734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,136736,136737],{},"文本域尽量放在一行",[19,136739,136740],{},"知识回顾：cols是列，rols是行",[401,136742],{"style":127745,"src":136743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,136745,136746],{},"它可以进行拖动，显然这是我们不愿意看到的",[401,136748],{"style":127745,"src":136749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,136751,136752],{},"使用resize进行解决",[270,136754,136756],{"className":127889,"code":136755,"language":127891,"meta":275,"style":275},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[277,136757,136758,136764,136777],{"__ignoreMap":275},[152,136759,136760,136762],{"class":281,"line":282},[152,136761,55158],{"class":52637},[152,136763,17187],{"class":483},[152,136765,136766,136768,136770,136772,136774],{"class":281,"line":303},[152,136767,72135],{"class":293},[152,136769,52774],{"class":483},[152,136771,56074],{"class":293},[152,136773,131752],{"class":483},[152,136775,136776],{"class":866},"\u002F* 取消表单轮廓线 *\u002F\n",[152,136778,136779],{"class":281,"line":310},[152,136780,3236],{"class":483},[19,136782,136783],{},"此时就无法通过右下方实现拖动了",[14,136785,136787],{"id":136786},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,136789,136790],{},"实现一个盒子中的文字和图片对齐",[19,136792,136793,136794,136797],{},"用于设置一个元素的 ",[694,136795,136796],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,136799,136800],{},"图片和文字默认是基线对齐",[401,136802],{"style":127745,"src":136803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[270,136805,136806],{"className":127889,"code":136755,"language":127891,"meta":275,"style":275},[277,136807,136808,136814,136826],{"__ignoreMap":275},[152,136809,136810,136812],{"class":281,"line":282},[152,136811,55158],{"class":52637},[152,136813,17187],{"class":483},[152,136815,136816,136818,136820,136822,136824],{"class":281,"line":303},[152,136817,72135],{"class":293},[152,136819,52774],{"class":483},[152,136821,56074],{"class":293},[152,136823,131752],{"class":483},[152,136825,136776],{"class":866},[152,136827,136828],{"class":281,"line":310},[152,136829,3236],{"class":483},[401,136831],{"style":127745,"src":136832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[262,136834,136836],{"id":136835},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136838,136839],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[401,136841],{"style":127745,"src":136842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136844,136845,136846,136849],{},"此时可以给图片、表单这些行内块元素的 ",[694,136847,136848],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[262,136851,136853],{"id":136852},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136855,136856],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136858,607],{},[270,136860,136862],{"className":127889,"code":136861,"language":127891,"meta":275,"style":275},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[277,136863,136864,136869,136875,136887],{"__ignoreMap":275},[152,136865,136866],{"class":281,"line":282},[152,136867,136868],{"class":866},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[152,136870,136871,136873],{"class":281,"line":303},[152,136872,401],{"class":52637},[152,136874,17187],{"class":483},[152,136876,136877,136880,136882,136885],{"class":281,"line":310},[152,136878,136879],{"class":293},"  vertical-align",[152,136881,52774],{"class":483},[152,136883,136884],{"class":293},"middle",[152,136886,2965],{"class":483},[152,136888,136889],{"class":281,"line":324},[152,136890,3236],{"class":483},[401,136892],{"style":127745,"src":136893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136895,136896],{},"主要解决方法有两种：",[416,136898,136899],{},[419,136900,136901,136904,136905,136908],{},[694,136902,136903],{},"给图片"," 添加 ",[694,136906,136907],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136910,136911,136912],{},"2.把图片转换为块级元素 ",[694,136913,136914],{},"display: block",[19,136916,136917],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136919,136920],{},"img {",[19,136922,136923],{},"vertical-align:middle;",[19,136925,2752],{},[14,136927,136929],{"id":136928},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136931,136932],{},"效果：",[401,136934],{"style":127745,"src":136935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136937,136938],{},"单行文本溢出显示省略号--必须满足三个条件：",[270,136940,136942],{"className":127889,"code":136941,"language":127891,"meta":275,"style":275},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[277,136943,136944,136949,136955,136965,136970,136980],{"__ignoreMap":275},[152,136945,136946],{"class":281,"line":282},[152,136947,136948],{"class":866},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[152,136950,136951,136953],{"class":281,"line":303},[152,136952,401],{"class":52637},[152,136954,17187],{"class":483},[152,136956,136957,136959,136961,136963],{"class":281,"line":310},[152,136958,136879],{"class":293},[152,136960,52774],{"class":483},[152,136962,136884],{"class":293},[152,136964,2965],{"class":483},[152,136966,136967],{"class":281,"line":324},[152,136968,136969],{"class":866},"  \u002F* 或 *\u002F\n",[152,136971,136972,136974,136976,136978],{"class":281,"line":329},[152,136973,129505],{"class":293},[152,136975,52774],{"class":483},[152,136977,62206],{"class":293},[152,136979,2965],{"class":483},[152,136981,136982],{"class":281,"line":343},[152,136983,3236],{"class":483},[14,136985,136987],{"id":136986},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136989,136932],{},[401,136991],{"style":127745,"src":136992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136994,136995,136996,136999],{},"多行文本溢出显示省略号， ",[694,136997,136998],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[270,137001,137002],{"className":127889,"code":136941,"language":127891,"meta":275,"style":275},[277,137003,137004,137008,137014,137024,137028,137038],{"__ignoreMap":275},[152,137005,137006],{"class":281,"line":282},[152,137007,136948],{"class":866},[152,137009,137010,137012],{"class":281,"line":303},[152,137011,401],{"class":52637},[152,137013,17187],{"class":483},[152,137015,137016,137018,137020,137022],{"class":281,"line":310},[152,137017,136879],{"class":293},[152,137019,52774],{"class":483},[152,137021,136884],{"class":293},[152,137023,2965],{"class":483},[152,137025,137026],{"class":281,"line":324},[152,137027,136969],{"class":866},[152,137029,137030,137032,137034,137036],{"class":281,"line":329},[152,137031,129505],{"class":293},[152,137033,52774],{"class":483},[152,137035,62206],{"class":293},[152,137037,2965],{"class":483},[152,137039,137040],{"class":281,"line":343},[152,137041,3236],{"class":483},[19,137043,137044],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[1760,137046,137048],{"id":137047},"_133-常见布局技巧","13.3 常见布局技巧",[19,137050,137051],{},[694,137052,137053],{},"巧妙利用一个技术更快更好的布局：",[416,137055,137056,137059,137062,137065],{},[419,137057,137058],{},"margin负值的运用",[419,137060,137061],{},"文字围绕浮动元素",[419,137063,137064],{},"行内块的巧妙运用",[419,137066,137067],{},"CSS三角强化",[14,137069,137071],{"id":137070},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137073,137074],{},"应用场景：",[401,137076],{"style":127745,"src":137077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[401,137079],{"style":127745,"src":137080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137082,137083],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137085,137086],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[270,137088,137089],{"className":127889,"code":131253,"language":127891,"meta":275,"style":275},[277,137090,137091,137095,137101,137117],{"__ignoreMap":275},[152,137092,137093],{"class":281,"line":282},[152,137094,131260],{"class":866},[152,137096,137097,137099],{"class":281,"line":303},[152,137098,52948],{"class":52637},[152,137100,17187],{"class":483},[152,137102,137103,137105,137107,137109,137111,137113,137115],{"class":281,"line":310},[152,137104,72233],{"class":293},[152,137106,52774],{"class":483},[152,137108,2026],{"class":293},[152,137110,52829],{"class":476},[152,137112,52858],{"class":293},[152,137114,131281],{"class":293},[152,137116,2965],{"class":483},[152,137118,137119],{"class":281,"line":324},[152,137120,3236],{"class":483},[401,137122],{"style":127745,"src":137123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137125,137126],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[270,137128,137130],{"className":127889,"code":137129,"language":127891,"meta":275,"style":275},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[277,137131,137132,137137,137143,137153,137165,137177],{"__ignoreMap":275},[152,137133,137134],{"class":281,"line":282},[152,137135,137136],{"class":866},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[152,137138,137139,137141],{"class":281,"line":303},[152,137140,131737],{"class":285},[152,137142,17187],{"class":483},[152,137144,137145,137147,137149,137151],{"class":281,"line":310},[152,137146,133695],{"class":293},[152,137148,52774],{"class":483},[152,137150,56101],{"class":293},[152,137152,2965],{"class":483},[152,137154,137155,137157,137159,137161,137163],{"class":281,"line":324},[152,137156,133709],{"class":293},[152,137158,52774],{"class":483},[152,137160,2254],{"class":293},[152,137162,52829],{"class":476},[152,137164,2965],{"class":483},[152,137166,137167,137169,137171,137173,137175],{"class":281,"line":329},[152,137168,133726],{"class":293},[152,137170,52774],{"class":483},[152,137172,2508],{"class":293},[152,137174,52829],{"class":476},[152,137176,2965],{"class":483},[152,137178,137179],{"class":281,"line":343},[152,137180,3236],{"class":483},[19,137182,137183],{},"加上上述代码会发现：",[401,137185],{"style":127745,"src":137186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137188,137189],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137191,137192],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[270,137194,137195],{"className":127889,"code":137129,"language":127891,"meta":275,"style":275},[277,137196,137197,137201,137207,137217,137229,137241],{"__ignoreMap":275},[152,137198,137199],{"class":281,"line":282},[152,137200,137136],{"class":866},[152,137202,137203,137205],{"class":281,"line":303},[152,137204,131737],{"class":285},[152,137206,17187],{"class":483},[152,137208,137209,137211,137213,137215],{"class":281,"line":310},[152,137210,133695],{"class":293},[152,137212,52774],{"class":483},[152,137214,56101],{"class":293},[152,137216,2965],{"class":483},[152,137218,137219,137221,137223,137225,137227],{"class":281,"line":324},[152,137220,133709],{"class":293},[152,137222,52774],{"class":483},[152,137224,2254],{"class":293},[152,137226,52829],{"class":476},[152,137228,2965],{"class":483},[152,137230,137231,137233,137235,137237,137239],{"class":281,"line":329},[152,137232,133726],{"class":293},[152,137234,52774],{"class":483},[152,137236,2508],{"class":293},[152,137238,52829],{"class":476},[152,137240,2965],{"class":483},[152,137242,137243],{"class":281,"line":343},[152,137244,3236],{"class":483},[19,137246,137247],{},"解决方式2：",[19,137249,137250],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[270,137252,137254],{"className":127889,"code":137253,"language":127891,"meta":275,"style":275},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[277,137255,137256,137262,137272,137284,137296],{"__ignoreMap":275},[152,137257,137258,137260],{"class":281,"line":282},[152,137259,52948],{"class":52637},[152,137261,17187],{"class":483},[152,137263,137264,137266,137268,137270],{"class":281,"line":303},[152,137265,133695],{"class":293},[152,137267,52774],{"class":483},[152,137269,56101],{"class":293},[152,137271,2965],{"class":483},[152,137273,137274,137276,137278,137280,137282],{"class":281,"line":310},[152,137275,133709],{"class":293},[152,137277,52774],{"class":483},[152,137279,2254],{"class":293},[152,137281,52829],{"class":476},[152,137283,2965],{"class":483},[152,137285,137286,137288,137290,137292,137294],{"class":281,"line":324},[152,137287,133726],{"class":293},[152,137289,52774],{"class":483},[152,137291,2508],{"class":293},[152,137293,52829],{"class":476},[152,137295,2965],{"class":483},[152,137297,137298],{"class":281,"line":329},[152,137299,3236],{"class":483},[14,137301,137303],{"id":137302},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137305,137074],{},[401,137307],{"style":127745,"src":137308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137310,137311],{},"实现结构图：",[401,137313],{"style":127745,"src":137314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137316,137317],{},"巧妙运用浮动元素不会压住文字的特性",[19,137319,137320],{},"代码显示：",[270,137322,137324],{"className":127889,"code":137323,"language":127891,"meta":275,"style":275},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[277,137325,137326,137332,137342,137346,137351,137355,137361,137375],{"__ignoreMap":275},[152,137327,137328,137330],{"class":281,"line":282},[152,137329,131737],{"class":285},[152,137331,17187],{"class":483},[152,137333,137334,137336,137338,137340],{"class":281,"line":303},[152,137335,132369],{"class":293},[152,137337,52774],{"class":483},[152,137339,34],{"class":293},[152,137341,2965],{"class":483},[152,137343,137344],{"class":281,"line":310},[152,137345,3236],{"class":483},[152,137347,137348],{"class":281,"line":324},[152,137349,137350],{"class":483},"```Css\n",[152,137352,137353],{"class":281,"line":329},[152,137354,131732],{"class":866},[152,137356,137357,137359],{"class":281,"line":343},[152,137358,131737],{"class":285},[152,137360,17187],{"class":483},[152,137362,137363,137365,137367,137369,137371,137373],{"class":281,"line":348},[152,137364,71807],{"class":293},[152,137366,52774],{"class":483},[152,137368,2000],{"class":293},[152,137370,52893],{"class":293},[152,137372,131752],{"class":483},[152,137374,131755],{"class":866},[152,137376,137377],{"class":281,"line":362},[152,137378,3236],{"class":483},[19,137380,137381],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[270,137383,137386],{"className":137384,"code":137385,"language":6829},[6827],"\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",[277,137387,137385],{"__ignoreMap":275},[401,137389],{"style":127745,"src":137390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137392,137393],{},"最终展示结果：",[270,137395,137396],{"className":127889,"code":131725,"language":127891,"meta":275,"style":275},[277,137397,137398,137402,137408,137422],{"__ignoreMap":275},[152,137399,137400],{"class":281,"line":282},[152,137401,131732],{"class":866},[152,137403,137404,137406],{"class":281,"line":303},[152,137405,131737],{"class":285},[152,137407,17187],{"class":483},[152,137409,137410,137412,137414,137416,137418,137420],{"class":281,"line":310},[152,137411,71807],{"class":293},[152,137413,52774],{"class":483},[152,137415,2000],{"class":293},[152,137417,52893],{"class":293},[152,137419,131752],{"class":483},[152,137421,131755],{"class":866},[152,137423,137424],{"class":281,"line":324},[152,137425,3236],{"class":483},[401,137427],{"style":127745,"src":137428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[1760,137430,137432],{"id":137431},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[14,137434,137436],{"id":137435},"_1341-原理","13.4.1 原理",[401,137438],{"style":127745,"src":137439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[270,137441,137442],{"className":127889,"code":131725,"language":127891,"meta":275,"style":275},[277,137443,137444,137448,137454,137468],{"__ignoreMap":275},[152,137445,137446],{"class":281,"line":282},[152,137447,131732],{"class":866},[152,137449,137450,137452],{"class":281,"line":303},[152,137451,131737],{"class":285},[152,137453,17187],{"class":483},[152,137455,137456,137458,137460,137462,137464,137466],{"class":281,"line":310},[152,137457,71807],{"class":293},[152,137459,52774],{"class":483},[152,137461,2000],{"class":293},[152,137463,52893],{"class":293},[152,137465,131752],{"class":483},[152,137467,131755],{"class":866},[152,137469,137470],{"class":281,"line":324},[152,137471,3236],{"class":483},[14,137473,137475],{"id":137474},"_1342-实例","13.4.2 实例",[401,137477],{"style":127745,"src":137478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[270,137480,137481],{"className":127889,"code":132355,"language":127891,"meta":275,"style":275},[277,137482,137483,137489,137499,137503,137509,137519],{"__ignoreMap":275},[152,137484,137485,137487],{"class":281,"line":282},[152,137486,132362],{"class":285},[152,137488,17187],{"class":483},[152,137490,137491,137493,137495,137497],{"class":281,"line":303},[152,137492,132369],{"class":293},[152,137494,52774],{"class":483},[152,137496,34],{"class":293},[152,137498,2965],{"class":483},[152,137500,137501],{"class":281,"line":310},[152,137502,3236],{"class":483},[152,137504,137505,137507],{"class":281,"line":324},[152,137506,132384],{"class":285},[152,137508,17187],{"class":483},[152,137510,137511,137513,137515,137517],{"class":281,"line":329},[152,137512,132369],{"class":293},[152,137514,52774],{"class":483},[152,137516,73859],{"class":293},[152,137518,2965],{"class":483},[152,137520,137521],{"class":281,"line":343},[152,137522,3236],{"class":483},[1760,137524,137526],{"id":137525},"_135-css的初始化","13.5 css的初始化",[19,137528,137529],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137531,137532],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137534,137535],{},"每个网页都必须首先进行 CSS初始化。",[19,137537,137538],{},"这里我们以 京东CSS初始化代码为例。",[19,137540,137541],{},"在网页右键查看网页源代码",[19,137543,137544],{},"找到css的link引入语句",[19,137546,137547],{},"然后ctrl+f 输入body",[19,137549,78563],{},[401,137551],{"style":127745,"src":137552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137554,78586],{},[401,137556],{"style":127745,"src":137557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137559,137560],{},"③打开了网页上传压缩的代码",[401,137562],{"style":127745,"src":137563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137565,137566],{},"④从body前可以查看这个网页的初始化代码",[19,137568,137569],{},[694,137570,137571],{},"Unicode编码字体：",[19,137573,137574],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137576,84544],{},[19,137578,137579],{},"黑体 \\9ED1\\4F53",[19,137581,137582],{},"宋体 \\5B8B\\4F53",[19,137584,137585],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1736,137587,137588],{},"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":275,"searchDepth":303,"depth":303,"links":137590},[137591,137592,137599,137603,137607],{"id":136388,"depth":303,"text":136389},{"id":136510,"depth":303,"text":136511,"children":137593},[137594,137595,137596,137597,137598],{"id":136514,"depth":310,"text":136515},{"id":136667,"depth":310,"text":136668},{"id":136786,"depth":310,"text":136787},{"id":136928,"depth":310,"text":136929},{"id":136986,"depth":310,"text":136987},{"id":137047,"depth":303,"text":137048,"children":137600},[137601,137602],{"id":137070,"depth":310,"text":137071},{"id":137302,"depth":310,"text":137303},{"id":137431,"depth":303,"text":137432,"children":137604},[137605,137606],{"id":137435,"depth":310,"text":137436},{"id":137474,"depth":310,"text":137475},{"id":137525,"depth":303,"text":137526},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136380,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137614,"title":137615,"body":137616,"description":24991,"extension":1744,"meta":139302,"navigation":306,"path":139303,"seo":139304,"stem":139305,"__hash__":139306},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137617,"toc":139291},[137618,137621,137625,137629,137632,137639,137642,137645,137683,137686,137688,137702,137706,137715,137719,137724,137727,137730,137733,137768,137773,137776,137806,137809,137814,137817,137820,137850,137853,137907,137910,137914,137919,137931,137934,137938,137968,137971,137976,137979,138009,138012,138016,138033,138037,138041,138044,138077,138080,138084,138087,138090,138093,138096,138099,138210,138213,138216,138219,138321,138324,138328,138332,138336,138339,138379,138382,138384,138400,138404,138407,138412,138493,138496,138499,138625,138630,138633,138641,138644,138649,138734,138737,138741,138744,138747,138751,138771,138776,138860,138863,138868,138871,138874,138952,138955,138958,138961,138964,138967,138972,138975,138978,139050,139053,139058,139061,139158,139161,139167,139170,139173,139176,139179,139182,139185,139188,139191,139195,139200,139203,139236,139241,139244,139285,139288],[10,137619,137615],{"id":137620},"_14-html5与css3新特性",[1760,137622,137624],{"id":137623},"_141-html5的新特性","14.1 HTML5的新特性",[14,137626,137628],{"id":137627},"_1411-基本标签","14.1.1 基本标签",[19,137630,137631],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137633,137634,137635,137638],{},"这些新特性都有兼容性问题，基本是 ",[694,137636,137637],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137640,137641],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137643,137644],{},"现在使用的是新特性：",[698,137646,137647,137653,137659,137665,137671,137677],{},[419,137648,137649,137652],{},[277,137650,137651],{},"\u003Cheader>"," 头部标签",[419,137654,137655,137658],{},[277,137656,137657],{},"\u003Cnav>"," 导航标签",[419,137660,137661,137664],{},[277,137662,137663],{},"\u003Carticle>"," 内容标签",[419,137666,137667,137670],{},[277,137668,137669],{},"\u003Csection>"," 定义文档某个区域",[419,137672,137673,137676],{},[277,137674,137675],{},"\u003Caside>"," 侧边栏标签",[419,137678,137679,137682],{},[277,137680,137681],{},"\u003Cfooter>"," 尾部标签",[401,137684],{"style":127745,"src":137685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137687,1848],{},[698,137689,137690,137693,137696,137699],{},[419,137691,137692],{},"这种语义化标准主要是针对搜索引擎的",[419,137694,137695],{},"这些标签页面中可以经常使用",[419,137697,137698],{},"在IE9中，需要把这些元素转换为块级元素",[419,137700,137701],{},"移动端更喜欢使用这些标签",[14,137703,137705],{"id":137704},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137707,137708,137709,137711,137712,137714],{},"音频 ",[694,137710,29773],{}," 和视频 ",[694,137713,29782],{}," 两个标签",[262,137716,137718],{"id":137717},"_14121-视频标签-video","14.1.2.1 视频标签- video",[416,137720,137721],{},[419,137722,137723],{},"支持格式：",[401,137725],{"style":127745,"src":137726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137728,137729],{},"尽量使用MP4，兼容性好",[19,137731,137732],{},"用MP4就可以",[270,137734,137736],{"className":128636,"code":137735,"language":128638,"meta":275,"style":275},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[277,137737,137738],{"__ignoreMap":275},[152,137739,137740,137742,137744,137746,137748,137751,137753,137756,137759,137762,137764,137766],{"class":281,"line":282},[152,137741,844],{"class":483},[152,137743,29782],{"class":52637},[152,137745,56576],{"class":285},[152,137747,1864],{"class":483},[152,137749,137750],{"class":289},"\"movie.mp4\"",[152,137752,93760],{"class":285},[152,137754,137755],{"class":285}," autoplay",[152,137757,137758],{"class":285}," muted",[152,137760,137761],{"class":285}," loop",[152,137763,56651],{"class":483},[152,137765,29782],{"class":52637},[152,137767,52644],{"class":483},[416,137769,137770],{"start":303},[419,137771,137772],{},"兼容写法",[19,137774,137775],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[270,137777,137778],{"className":128636,"code":137735,"language":128638,"meta":275,"style":275},[277,137779,137780],{"__ignoreMap":275},[152,137781,137782,137784,137786,137788,137790,137792,137794,137796,137798,137800,137802,137804],{"class":281,"line":282},[152,137783,844],{"class":483},[152,137785,29782],{"class":52637},[152,137787,56576],{"class":285},[152,137789,1864],{"class":483},[152,137791,137750],{"class":289},[152,137793,93760],{"class":285},[152,137795,137755],{"class":285},[152,137797,137758],{"class":285},[152,137799,137761],{"class":285},[152,137801,56651],{"class":483},[152,137803,29782],{"class":52637},[152,137805,52644],{"class":483},[19,137807,137808],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[416,137810,137811],{"start":310},[419,137812,137813],{},"video常用属性",[401,137815],{"style":127745,"src":137816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137818,137819],{},"poster属性后面是跟的等待加载图片的地址",[270,137821,137822],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,137823,137824],{"__ignoreMap":275},[152,137825,137826,137828,137830,137832,137834,137836,137838,137840,137842,137844,137846,137848],{"class":281,"line":282},[152,137827,844],{"class":483},[152,137829,401],{"class":52637},[152,137831,56576],{"class":285},[152,137833,1864],{"class":483},[152,137835,135406],{"class":289},[152,137837,56584],{"class":285},[152,137839,1864],{"class":483},[152,137841,135413],{"class":289},[152,137843,135416],{"class":285},[152,137845,1864],{"class":483},[152,137847,135421],{"class":289},[152,137849,52644],{"class":483},[19,137851,137852],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[270,137854,137856],{"className":127889,"code":137855,"language":127891,"meta":275,"style":275},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[277,137857,137858,137863,137869,137893,137898,137903],{"__ignoreMap":275},[152,137859,137860],{"class":281,"line":282},[152,137861,137862],{"class":866},"\u002F* 2D 位移 *\u002F\n",[152,137864,137865,137867],{"class":281,"line":303},[152,137866,52948],{"class":52637},[152,137868,17187],{"class":483},[152,137870,137871,137874,137876,137879,137881,137883,137885,137887,137889,137891],{"class":281,"line":310},[152,137872,137873],{"class":293},"  transform",[152,137875,52774],{"class":483},[152,137877,137878],{"class":293},"translate",[152,137880,1819],{"class":483},[152,137882,2119],{"class":293},[152,137884,52829],{"class":476},[152,137886,14051],{"class":483},[152,137888,2464],{"class":293},[152,137890,52829],{"class":476},[152,137892,4362],{"class":483},[152,137894,137895],{"class":281,"line":324},[152,137896,137897],{"class":866},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[152,137899,137900],{"class":281,"line":329},[152,137901,137902],{"class":866},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[152,137904,137905],{"class":281,"line":343},[152,137906,3236],{"class":483},[19,137908,137909],{},"muted:自动静音属性",[262,137911,137913],{"id":137912},"_14122-音频标签audio","14.1.2.2 音频标签audio",[416,137915,137916],{},[419,137917,137918],{},"基本使用",[19,137920,137921,137922,137927,137928],{},"当前 ",[694,137923,137924],{},[277,137925,137926],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[694,137929,137930],{},"mp3格式",[401,137932],{"style":127745,"src":137933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[416,137935,137936],{"start":303},[419,137937,137772],{},[270,137939,137940],{"className":128636,"code":137735,"language":128638,"meta":275,"style":275},[277,137941,137942],{"__ignoreMap":275},[152,137943,137944,137946,137948,137950,137952,137954,137956,137958,137960,137962,137964,137966],{"class":281,"line":282},[152,137945,844],{"class":483},[152,137947,29782],{"class":52637},[152,137949,56576],{"class":285},[152,137951,1864],{"class":483},[152,137953,137750],{"class":289},[152,137955,93760],{"class":285},[152,137957,137755],{"class":285},[152,137959,137758],{"class":285},[152,137961,137761],{"class":285},[152,137963,56651],{"class":483},[152,137965,29782],{"class":52637},[152,137967,52644],{"class":483},[19,137969,137970],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[416,137972,137973],{"start":310},[419,137974,137975],{},"常用属性",[401,137977],{"style":127745,"src":137978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[270,137980,137981],{"className":128636,"code":137735,"language":128638,"meta":275,"style":275},[277,137982,137983],{"__ignoreMap":275},[152,137984,137985,137987,137989,137991,137993,137995,137997,137999,138001,138003,138005,138007],{"class":281,"line":282},[152,137986,844],{"class":483},[152,137988,29782],{"class":52637},[152,137990,56576],{"class":285},[152,137992,1864],{"class":483},[152,137994,137750],{"class":289},[152,137996,93760],{"class":285},[152,137998,137755],{"class":285},[152,138000,137758],{"class":285},[152,138002,137761],{"class":285},[152,138004,56651],{"class":483},[152,138006,29782],{"class":52637},[152,138008,52644],{"class":483},[19,138010,138011],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[262,138013,138015],{"id":138014},"_14123-总结","14.1.2.3 总结",[698,138017,138018,138021,138024,138027,138030],{},[419,138019,138020],{},"音频标签和视频标签使用方式基本一致",[419,138022,138023],{},"浏览器支持情况不同",[419,138025,138026],{},"谷歌浏览器把音频和视频自动播放禁止了",[419,138028,138029],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[419,138031,138032],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[14,138034,138036],{"id":138035},"_1413-表单元素","14.1.3 表单元素",[262,138038,138040],{"id":138039},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[401,138042],{"style":127745,"src":138043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[270,138045,138047],{"className":128636,"code":138046,"language":128638,"meta":275,"style":275},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[277,138048,138049],{"__ignoreMap":275},[152,138050,138051,138053,138055,138057,138059,138061,138063,138065,138068,138070,138072,138075],{"class":281,"line":282},[152,138052,844],{"class":483},[152,138054,55158],{"class":52637},[152,138056,55161],{"class":285},[152,138058,1864],{"class":483},[152,138060,64036],{"class":289},[152,138062,16535],{"class":285},[152,138064,1864],{"class":483},[152,138066,138067],{"class":289},"\"username\"",[152,138069,62357],{"class":285},[152,138071,1864],{"class":483},[152,138073,138074],{"class":289},"\"请输入用户名\"",[152,138076,52644],{"class":483},[401,138078],{"style":127745,"src":138079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[262,138081,138083],{"id":138082},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[401,138085],{"style":127745,"src":138086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138088,138089],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138091,138092],{},"快捷操作：",[401,138094],{"style":127745,"src":138095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138097,138098],{},"例子1：",[270,138100,138102],{"className":128636,"code":138101,"language":128638,"meta":275,"style":275},"\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",[277,138103,138104,138127,138154,138183,138202],{"__ignoreMap":275},[152,138105,138106,138108,138110,138112,138114,138117,138120,138122,138125],{"class":281,"line":282},[152,138107,844],{"class":483},[152,138109,67962],{"class":52637},[152,138111,67965],{"class":285},[152,138113,1864],{"class":483},[152,138115,138116],{"class":289},"\"\u002Fsubmit\"",[152,138118,138119],{"class":285}," method",[152,138121,1864],{"class":483},[152,138123,138124],{"class":289},"\"post\"",[152,138126,52644],{"class":483},[152,138128,138129,138131,138133,138135,138137,138139,138141,138143,138145,138147,138149,138152],{"class":281,"line":303},[152,138130,53481],{"class":483},[152,138132,55158],{"class":52637},[152,138134,55161],{"class":285},[152,138136,1864],{"class":483},[152,138138,64036],{"class":289},[152,138140,16535],{"class":285},[152,138142,1864],{"class":483},[152,138144,138067],{"class":289},[152,138146,62357],{"class":285},[152,138148,1864],{"class":483},[152,138150,138151],{"class":289},"\"用户名\"",[152,138153,52644],{"class":483},[152,138155,138156,138158,138160,138162,138164,138167,138169,138171,138174,138176,138178,138181],{"class":281,"line":310},[152,138157,53481],{"class":483},[152,138159,55158],{"class":52637},[152,138161,55161],{"class":285},[152,138163,1864],{"class":483},[152,138165,138166],{"class":289},"\"password\"",[152,138168,16535],{"class":285},[152,138170,1864],{"class":483},[152,138172,138173],{"class":289},"\"pwd\"",[152,138175,62357],{"class":285},[152,138177,1864],{"class":483},[152,138179,138180],{"class":289},"\"密码\"",[152,138182,52644],{"class":483},[152,138184,138185,138187,138189,138191,138193,138195,138198,138200],{"class":281,"line":324},[152,138186,53481],{"class":483},[152,138188,55224],{"class":52637},[152,138190,55161],{"class":285},[152,138192,1864],{"class":483},[152,138194,67985],{"class":289},[152,138196,138197],{"class":483},">提交\u003C\u002F",[152,138199,55224],{"class":52637},[152,138201,52644],{"class":483},[152,138203,138204,138206,138208],{"class":281,"line":329},[152,138205,53122],{"class":483},[152,138207,67962],{"class":52637},[152,138209,52644],{"class":483},[401,138211],{"style":127745,"src":138212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138214,138215],{},"value是表单域的内容",[19,138217,138218],{},"例子2：",[270,138220,138221],{"className":128636,"code":138101,"language":128638,"meta":275,"style":275},[277,138222,138223,138243,138269,138295,138313],{"__ignoreMap":275},[152,138224,138225,138227,138229,138231,138233,138235,138237,138239,138241],{"class":281,"line":282},[152,138226,844],{"class":483},[152,138228,67962],{"class":52637},[152,138230,67965],{"class":285},[152,138232,1864],{"class":483},[152,138234,138116],{"class":289},[152,138236,138119],{"class":285},[152,138238,1864],{"class":483},[152,138240,138124],{"class":289},[152,138242,52644],{"class":483},[152,138244,138245,138247,138249,138251,138253,138255,138257,138259,138261,138263,138265,138267],{"class":281,"line":303},[152,138246,53481],{"class":483},[152,138248,55158],{"class":52637},[152,138250,55161],{"class":285},[152,138252,1864],{"class":483},[152,138254,64036],{"class":289},[152,138256,16535],{"class":285},[152,138258,1864],{"class":483},[152,138260,138067],{"class":289},[152,138262,62357],{"class":285},[152,138264,1864],{"class":483},[152,138266,138151],{"class":289},[152,138268,52644],{"class":483},[152,138270,138271,138273,138275,138277,138279,138281,138283,138285,138287,138289,138291,138293],{"class":281,"line":310},[152,138272,53481],{"class":483},[152,138274,55158],{"class":52637},[152,138276,55161],{"class":285},[152,138278,1864],{"class":483},[152,138280,138166],{"class":289},[152,138282,16535],{"class":285},[152,138284,1864],{"class":483},[152,138286,138173],{"class":289},[152,138288,62357],{"class":285},[152,138290,1864],{"class":483},[152,138292,138180],{"class":289},[152,138294,52644],{"class":483},[152,138296,138297,138299,138301,138303,138305,138307,138309,138311],{"class":281,"line":324},[152,138298,53481],{"class":483},[152,138300,55224],{"class":52637},[152,138302,55161],{"class":285},[152,138304,1864],{"class":483},[152,138306,67985],{"class":289},[152,138308,138197],{"class":483},[152,138310,55224],{"class":52637},[152,138312,52644],{"class":483},[152,138314,138315,138317,138319],{"class":281,"line":329},[152,138316,53122],{"class":483},[152,138318,67962],{"class":52637},[152,138320,52644],{"class":483},[401,138322],{"style":127745,"src":138323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[1760,138325,138327],{"id":138326},"_142-css新特性","14.2 CSS新特性",[14,138329,138331],{"id":138330},"_1421-新增选择器","14.2.1 新增选择器",[262,138333,138335],{"id":138334},"_14211-属性选择器","14.2.1.1 属性选择器",[401,138337],{"style":127745,"src":138338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[270,138340,138342],{"className":127889,"code":138341,"language":127891,"meta":275,"style":275},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[277,138343,138344,138359,138375],{"__ignoreMap":275},[152,138345,138346,138348,138350,138352,138354,138356],{"class":281,"line":282},[152,138347,55158],{"class":52637},[152,138349,2697],{"class":483},[152,138351,104444],{"class":285},[152,138353,1864],{"class":476},[152,138355,64036],{"class":289},[152,138357,138358],{"class":483},"] {\n",[152,138360,138361,138363,138365,138367,138369,138371,138373],{"class":281,"line":303},[152,138362,72233],{"class":293},[152,138364,52774],{"class":483},[152,138366,2026],{"class":293},[152,138368,52829],{"class":476},[152,138370,52858],{"class":293},[152,138372,131469],{"class":293},[152,138374,2965],{"class":483},[152,138376,138377],{"class":281,"line":310},[152,138378,3236],{"class":483},[401,138380],{"style":127745,"src":138381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138383,1848],{},[698,138385,138386,138389,138392,138395],{},[419,138387,138388],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[419,138390,138391],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[419,138393,138394],{},"属性选择器也可以选择出来自定义的属性",[419,138396,138397,138399],{},[694,138398,10657],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[262,138401,138403],{"id":138402},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[401,138405],{"style":127745,"src":138406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[416,138408,138409],{},[419,138410,138411],{},"fist-child",[270,138413,138415],{"className":127889,"code":138414,"language":127891,"meta":275,"style":275},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[277,138416,138417,138422,138437,138457,138475],{"__ignoreMap":275},[152,138418,138419],{"class":281,"line":282},[152,138420,138421],{"class":866},"\u002F* 属性选择器 *\u002F\n",[152,138423,138424,138426,138428,138430,138432,138434],{"class":281,"line":303},[152,138425,55158],{"class":52637},[152,138427,2697],{"class":483},[152,138429,104444],{"class":285},[152,138431,1864],{"class":476},[152,138433,64036],{"class":289},[152,138435,138436],{"class":483},"] { }\n",[152,138438,138439,138441,138443,138445,138448,138451,138454],{"class":281,"line":310},[152,138440,55158],{"class":52637},[152,138442,2697],{"class":483},[152,138444,16309],{"class":285},[152,138446,138447],{"class":476},"^=",[152,138449,138450],{"class":289},"\"icon\"",[152,138452,138453],{"class":483},"] { }  ",[152,138455,138456],{"class":866},"\u002F* 以 icon 开头 *\u002F\n",[152,138458,138459,138461,138463,138465,138468,138470,138472],{"class":281,"line":324},[152,138460,55158],{"class":52637},[152,138462,2697],{"class":483},[152,138464,16309],{"class":285},[152,138466,138467],{"class":476},"$=",[152,138469,138450],{"class":289},[152,138471,138453],{"class":483},[152,138473,138474],{"class":866},"\u002F* 以 icon 结尾 *\u002F\n",[152,138476,138477,138479,138481,138483,138486,138488,138490],{"class":281,"line":329},[152,138478,55158],{"class":52637},[152,138480,2697],{"class":483},[152,138482,16309],{"class":285},[152,138484,138485],{"class":476},"*=",[152,138487,138450],{"class":289},[152,138489,138453],{"class":483},[152,138491,138492],{"class":866},"\u002F* 包含 icon *\u002F\n",[19,138494,138495],{},"ul的第一个儿子文本为红色",[19,138497,138498],{},"一定要在冒号前加空格，不然就是选中所有的了",[270,138500,138502],{"className":127889,"code":138501,"language":127891,"meta":275,"style":275},".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",[277,138503,138504,138510,138520,138524,138528,138533,138546,138559,138575,138592,138609],{"__ignoreMap":275},[152,138505,138506,138508],{"class":281,"line":282},[152,138507,128180],{"class":285},[152,138509,17187],{"class":483},[152,138511,138512,138514,138516,138518],{"class":281,"line":303},[152,138513,72242],{"class":293},[152,138515,52774],{"class":483},[152,138517,58758],{"class":293},[152,138519,2965],{"class":483},[152,138521,138522],{"class":281,"line":310},[152,138523,3236],{"class":483},[152,138525,138526],{"class":281,"line":324},[152,138527,137350],{"class":483},[152,138529,138530],{"class":281,"line":329},[152,138531,138532],{"class":866},"\u002F* 结构伪类选择器 *\u002F\n",[152,138534,138535,138537,138540,138543],{"class":281,"line":343},[152,138536,419],{"class":52637},[152,138538,138539],{"class":285},":first-child",[152,138541,138542],{"class":483}," { }           ",[152,138544,138545],{"class":866},"\u002F* 第一个 *\u002F\n",[152,138547,138548,138550,138553,138556],{"class":281,"line":348},[152,138549,419],{"class":52637},[152,138551,138552],{"class":285},":last-child",[152,138554,138555],{"class":483}," { }            ",[152,138557,138558],{"class":866},"\u002F* 最后一个 *\u002F\n",[152,138560,138561,138563,138565,138567,138569,138572],{"class":281,"line":362},[152,138562,419],{"class":52637},[152,138564,130803],{"class":285},[152,138566,1819],{"class":483},[152,138568,1894],{"class":293},[152,138570,138571],{"class":483},") { }          ",[152,138573,138574],{"class":866},"\u002F* 第2个 *\u002F\n",[152,138576,138577,138579,138581,138583,138586,138589],{"class":281,"line":367},[152,138578,419],{"class":52637},[152,138580,130803],{"class":285},[152,138582,1819],{"class":483},[152,138584,138585],{"class":293},"2n",[152,138587,138588],{"class":483},") { }         ",[152,138590,138591],{"class":866},"\u002F* 偶数 *\u002F\n",[152,138593,138594,138596,138598,138600,138603,138606],{"class":281,"line":381},[152,138595,419],{"class":52637},[152,138597,130803],{"class":285},[152,138599,1819],{"class":483},[152,138601,138602],{"class":293},"2n+1",[152,138604,138605],{"class":483},") { }       ",[152,138607,138608],{"class":866},"\u002F* 奇数 *\u002F\n",[152,138610,138611,138613,138615,138617,138620,138622],{"class":281,"line":386},[152,138612,419],{"class":52637},[152,138614,130803],{"class":285},[152,138616,1819],{"class":483},[152,138618,138619],{"class":293},"-n+3",[152,138621,138605],{"class":483},[152,138623,138624],{"class":866},"\u002F* 前3个 *\u002F\n",[52948,138626,138629],{"className":138627},[138628],"example","\n  示例内容\n",[19,138631,138632],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[698,138634,138635],{},[419,138636,138637,138640],{},[277,138638,138639],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138642,138643],{},"也就是说它选择的是熊大",[416,138645,138646],{"start":343},[419,138647,138648],{},"权重",[270,138650,138652],{"className":127889,"code":138651,"language":127891,"meta":275,"style":275},"\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",[277,138653,138654,138658,138668,138678,138692,138706,138720],{"__ignoreMap":275},[152,138655,138656],{"class":281,"line":282},[152,138657,138532],{"class":866},[152,138659,138660,138662,138664,138666],{"class":281,"line":303},[152,138661,419],{"class":52637},[152,138663,138539],{"class":285},[152,138665,138542],{"class":483},[152,138667,138545],{"class":866},[152,138669,138670,138672,138674,138676],{"class":281,"line":310},[152,138671,419],{"class":52637},[152,138673,138552],{"class":285},[152,138675,138555],{"class":483},[152,138677,138558],{"class":866},[152,138679,138680,138682,138684,138686,138688,138690],{"class":281,"line":324},[152,138681,419],{"class":52637},[152,138683,130803],{"class":285},[152,138685,1819],{"class":483},[152,138687,1894],{"class":293},[152,138689,138571],{"class":483},[152,138691,138574],{"class":866},[152,138693,138694,138696,138698,138700,138702,138704],{"class":281,"line":329},[152,138695,419],{"class":52637},[152,138697,130803],{"class":285},[152,138699,1819],{"class":483},[152,138701,138585],{"class":293},[152,138703,138588],{"class":483},[152,138705,138591],{"class":866},[152,138707,138708,138710,138712,138714,138716,138718],{"class":281,"line":343},[152,138709,419],{"class":52637},[152,138711,130803],{"class":285},[152,138713,1819],{"class":483},[152,138715,138602],{"class":293},[152,138717,138605],{"class":483},[152,138719,138608],{"class":866},[152,138721,138722,138724,138726,138728,138730,138732],{"class":281,"line":348},[152,138723,419],{"class":52637},[152,138725,130803],{"class":285},[152,138727,1819],{"class":483},[152,138729,138619],{"class":293},[152,138731,138605],{"class":483},[152,138733,138624],{"class":866},[19,138735,138736],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[262,138738,138740],{"id":138739},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138742,138743],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[401,138745],{"style":127745,"src":138746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[416,138748,138749],{},[419,138750,1848],{},[698,138752,138753,138756,138759,138762,138765,138768],{},[419,138754,138755],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[419,138757,138758],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[419,138760,138761],{},"语法： element::before {}",[419,138763,138764],{},"before 和 after 必须有 content 属性",[419,138766,138767],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[419,138769,138770],{},"伪元素选择器和标签选择器一样，权重为 1",[416,138772,138773],{"start":303},[419,138774,138775],{},"实例",[270,138777,138778],{"className":127889,"code":138651,"language":127891,"meta":275,"style":275},[277,138779,138780,138784,138794,138804,138818,138832,138846],{"__ignoreMap":275},[152,138781,138782],{"class":281,"line":282},[152,138783,138532],{"class":866},[152,138785,138786,138788,138790,138792],{"class":281,"line":303},[152,138787,419],{"class":52637},[152,138789,138539],{"class":285},[152,138791,138542],{"class":483},[152,138793,138545],{"class":866},[152,138795,138796,138798,138800,138802],{"class":281,"line":310},[152,138797,419],{"class":52637},[152,138799,138552],{"class":285},[152,138801,138555],{"class":483},[152,138803,138558],{"class":866},[152,138805,138806,138808,138810,138812,138814,138816],{"class":281,"line":324},[152,138807,419],{"class":52637},[152,138809,130803],{"class":285},[152,138811,1819],{"class":483},[152,138813,1894],{"class":293},[152,138815,138571],{"class":483},[152,138817,138574],{"class":866},[152,138819,138820,138822,138824,138826,138828,138830],{"class":281,"line":329},[152,138821,419],{"class":52637},[152,138823,130803],{"class":285},[152,138825,1819],{"class":483},[152,138827,138585],{"class":293},[152,138829,138588],{"class":483},[152,138831,138591],{"class":866},[152,138833,138834,138836,138838,138840,138842,138844],{"class":281,"line":343},[152,138835,419],{"class":52637},[152,138837,130803],{"class":285},[152,138839,1819],{"class":483},[152,138841,138602],{"class":293},[152,138843,138605],{"class":483},[152,138845,138608],{"class":866},[152,138847,138848,138850,138852,138854,138856,138858],{"class":281,"line":348},[152,138849,419],{"class":52637},[152,138851,130803],{"class":285},[152,138853,1819],{"class":483},[152,138855,138619],{"class":293},[152,138857,138605],{"class":483},[152,138859,138624],{"class":866},[401,138861],{"style":127745,"src":138862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[416,138864,138865],{"start":310},[419,138866,138867],{},"使用场景1",[401,138869],{"style":127745,"src":138870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138872,138873],{},"不需要再加盒子来整红色那部分了",[270,138875,138877],{"className":127889,"code":138876,"language":127891,"meta":275,"style":275},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[277,138878,138879,138884,138893,138904,138914,138918,138927,138938,138948],{"__ignoreMap":275},[152,138880,138881],{"class":281,"line":282},[152,138882,138883],{"class":866},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[152,138885,138886,138888,138891],{"class":281,"line":303},[152,138887,52948],{"class":52637},[152,138889,138890],{"class":285},"::before",[152,138892,17187],{"class":483},[152,138894,138895,138898,138900,138902],{"class":281,"line":310},[152,138896,138897],{"class":293},"  content",[152,138899,52774],{"class":483},[152,138901,9294],{"class":289},[152,138903,2965],{"class":483},[152,138905,138906,138908,138910,138912],{"class":281,"line":324},[152,138907,129505],{"class":293},[152,138909,52774],{"class":483},[152,138911,62206],{"class":293},[152,138913,2965],{"class":483},[152,138915,138916],{"class":281,"line":329},[152,138917,3236],{"class":483},[152,138919,138920,138922,138925],{"class":281,"line":343},[152,138921,52948],{"class":52637},[152,138923,138924],{"class":285},"::after",[152,138926,17187],{"class":483},[152,138928,138929,138931,138933,138936],{"class":281,"line":348},[152,138930,138897],{"class":293},[152,138932,52774],{"class":483},[152,138934,138935],{"class":289},"\"→\"",[152,138937,2965],{"class":483},[152,138939,138940,138942,138944,138946],{"class":281,"line":362},[152,138941,72242],{"class":293},[152,138943,52774],{"class":483},[152,138945,63407],{"class":293},[152,138947,2965],{"class":483},[152,138949,138950],{"class":281,"line":367},[152,138951,3236],{"class":483},[401,138953],{"style":127745,"src":138954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138956,138957],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[401,138959],{"style":127745,"src":138960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138962,138963],{},"但是在引用时需要先转义一下",[19,138965,138966],{},"content='\\e930'",[416,138968,138969],{"start":324},[419,138970,138971],{},"使用场景2",[19,138973,138974],{},"仿土豆效果",[19,138976,138977],{},"通过使用伪元素选择器可以减少body中盒子的数量",[270,138979,138980],{"className":127889,"code":138876,"language":127891,"meta":275,"style":275},[277,138981,138982,138986,138994,139004,139014,139018,139026,139036,139046],{"__ignoreMap":275},[152,138983,138984],{"class":281,"line":282},[152,138985,138883],{"class":866},[152,138987,138988,138990,138992],{"class":281,"line":303},[152,138989,52948],{"class":52637},[152,138991,138890],{"class":285},[152,138993,17187],{"class":483},[152,138995,138996,138998,139000,139002],{"class":281,"line":310},[152,138997,138897],{"class":293},[152,138999,52774],{"class":483},[152,139001,9294],{"class":289},[152,139003,2965],{"class":483},[152,139005,139006,139008,139010,139012],{"class":281,"line":324},[152,139007,129505],{"class":293},[152,139009,52774],{"class":483},[152,139011,62206],{"class":293},[152,139013,2965],{"class":483},[152,139015,139016],{"class":281,"line":329},[152,139017,3236],{"class":483},[152,139019,139020,139022,139024],{"class":281,"line":343},[152,139021,52948],{"class":52637},[152,139023,138924],{"class":285},[152,139025,17187],{"class":483},[152,139027,139028,139030,139032,139034],{"class":281,"line":348},[152,139029,138897],{"class":293},[152,139031,52774],{"class":483},[152,139033,138935],{"class":289},[152,139035,2965],{"class":483},[152,139037,139038,139040,139042,139044],{"class":281,"line":362},[152,139039,72242],{"class":293},[152,139041,52774],{"class":483},[152,139043,63407],{"class":293},[152,139045,2965],{"class":483},[152,139047,139048],{"class":281,"line":367},[152,139049,3236],{"class":483},[401,139051],{"style":127745,"src":139052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[416,139054,139055],{"start":329},[419,139056,139057],{},"使用场景3",[19,139059,139060],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[270,139062,139064],{"className":127889,"code":139063,"language":127891,"meta":275,"style":275},".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",[277,139065,139066,139072,139082,139086,139090,139094,139102,139112,139122,139126,139134,139144,139154],{"__ignoreMap":275},[152,139067,139068,139070],{"class":281,"line":282},[152,139069,131737],{"class":285},[152,139071,17187],{"class":483},[152,139073,139074,139076,139078,139080],{"class":281,"line":303},[152,139075,132369],{"class":293},[152,139077,52774],{"class":483},[152,139079,34],{"class":293},[152,139081,2965],{"class":483},[152,139083,139084],{"class":281,"line":310},[152,139085,3236],{"class":483},[152,139087,139088],{"class":281,"line":324},[152,139089,137350],{"class":483},[152,139091,139092],{"class":281,"line":329},[152,139093,138883],{"class":866},[152,139095,139096,139098,139100],{"class":281,"line":343},[152,139097,52948],{"class":52637},[152,139099,138890],{"class":285},[152,139101,17187],{"class":483},[152,139103,139104,139106,139108,139110],{"class":281,"line":348},[152,139105,138897],{"class":293},[152,139107,52774],{"class":483},[152,139109,9294],{"class":289},[152,139111,2965],{"class":483},[152,139113,139114,139116,139118,139120],{"class":281,"line":362},[152,139115,129505],{"class":293},[152,139117,52774],{"class":483},[152,139119,62206],{"class":293},[152,139121,2965],{"class":483},[152,139123,139124],{"class":281,"line":367},[152,139125,3236],{"class":483},[152,139127,139128,139130,139132],{"class":281,"line":381},[152,139129,52948],{"class":52637},[152,139131,138924],{"class":285},[152,139133,17187],{"class":483},[152,139135,139136,139138,139140,139142],{"class":281,"line":386},[152,139137,138897],{"class":293},[152,139139,52774],{"class":483},[152,139141,138935],{"class":289},[152,139143,2965],{"class":483},[152,139145,139146,139148,139150,139152],{"class":281,"line":932},[152,139147,72242],{"class":293},[152,139149,52774],{"class":483},[152,139151,63407],{"class":293},[152,139153,2965],{"class":483},[152,139155,139156],{"class":281,"line":942},[152,139157,3236],{"class":483},[19,139159,139160],{},"div {\nmargin: 0 auto;\n}",[270,139162,139165],{"className":139163,"code":139164,"language":6829},[6827],"\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",[277,139166,139164],{"__ignoreMap":275},[19,139168,139169],{},"如果想让多个元素都发生变化",[19,139171,139172],{},"不能如下操作：",[19,139174,139175],{},"transition: width 2s ease 0.5s;",[19,139177,139178],{},"transition: height 2s ease 0.5s;不对！！！",[19,139180,139181],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139183,139184],{},"使用如下：加逗号隔开",[19,139186,139187],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139189,139190],{},"transition all 2s ease;",[14,139192,139194],{"id":139193},"_1426-过渡练习","14.2.6 过渡练习",[416,139196,139197],{},[419,139198,139199],{},"进度条",[401,139201],{"style":127745,"src":139202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[270,139204,139206],{"className":127889,"code":139205,"language":127891,"meta":275,"style":275},"div {\n  transition: all 0.3s ease;\n}\n",[277,139207,139208,139214,139232],{"__ignoreMap":275},[152,139209,139210,139212],{"class":281,"line":282},[152,139211,52948],{"class":52637},[152,139213,17187],{"class":483},[152,139215,139216,139219,139221,139223,139226,139228,139230],{"class":281,"line":303},[152,139217,139218],{"class":293},"  transition",[152,139220,52774],{"class":483},[152,139222,29721],{"class":293},[152,139224,139225],{"class":293}," 0.3",[152,139227,2503],{"class":476},[152,139229,80017],{"class":293},[152,139231,2965],{"class":483},[152,139233,139234],{"class":281,"line":310},[152,139235,3236],{"class":483},[416,139237,139238],{"start":303},[419,139239,139240],{},"小米logo",[19,139242,139243],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[270,139245,139247],{"className":127889,"code":139246,"language":127891,"meta":275,"style":275},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[277,139248,139249,139254,139260,139276,139281],{"__ignoreMap":275},[152,139250,139251],{"class":281,"line":282},[152,139252,139253],{"class":866},"\u002F* CSS3 过渡 *\u002F\n",[152,139255,139256,139258],{"class":281,"line":303},[152,139257,52948],{"class":52637},[152,139259,17187],{"class":483},[152,139261,139262,139264,139266,139268,139270,139272,139274],{"class":281,"line":310},[152,139263,139218],{"class":293},[152,139265,52774],{"class":483},[152,139267,29721],{"class":293},[152,139269,139225],{"class":293},[152,139271,2503],{"class":476},[152,139273,80017],{"class":293},[152,139275,2965],{"class":483},[152,139277,139278],{"class":281,"line":324},[152,139279,139280],{"class":866},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[152,139282,139283],{"class":281,"line":329},[152,139284,3236],{"class":483},[19,139286,139287],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1736,139289,139290],{},"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":275,"searchDepth":303,"depth":303,"links":139292},[139293,139298],{"id":137623,"depth":303,"text":137624,"children":139294},[139295,139296,139297],{"id":137627,"depth":310,"text":137628},{"id":137704,"depth":310,"text":137705},{"id":138035,"depth":310,"text":138036},{"id":138326,"depth":303,"text":138327,"children":139299},[139300,139301],{"id":138330,"depth":310,"text":138331},{"id":139193,"depth":310,"text":139194},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137615,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139308,"title":139309,"body":139310,"description":24991,"extension":1744,"meta":141054,"navigation":306,"path":141055,"seo":141056,"stem":141057,"__hash__":141058},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139311,"toc":141035},[139312,139315,139319,139322,139328,139334,139338,139340,139343,139346,139349,139352,139355,139358,139361,139365,139369,139372,139375,139378,139382,139385,139388,139393,139396,139399,139402,139406,139409,139418,139421,139424,139428,139431,139434,139439,139446,139460,139468,139475,139480,139483,139486,139489,139496,139500,139506,139512,139515,139518,139523,139529,139531,139539,139544,139547,139553,139555,139560,139565,139568,139570,139575,139578,139583,139588,139622,139626,139630,139633,139637,139640,139726,139729,139766,139769,139805,139809,139814,139827,139881,139883,139911,139913,139941,139947,139961,139963,140007,140009,140053,140056,140063,140074,140076,140103,140105,140131,140138,140154,140156,140250,140252,140346,140353,140356,140361,140367,140441,140444,140446,140482,140484,140520,140523,140530,140549,140552,140555,140557,140582,140584,140608,140611,140614,140644,140648,140651,140714,140716,140782,140784,140848,140851,140883,140885,140911,140913,140939,140942,140973,140975,141001,141003,141029,141032],[10,139313,139309],{"id":139314},"_15-品优购项目上篇-搭建与公共模块",[1760,139316,139318],{"id":139317},"_151-项目规划","15.1 项目规划",[401,139320],{"style":127745,"src":139321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139323,139324,139327],{},[694,139325,139326],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139329,139330,139333],{},[694,139331,139332],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[1760,139335,139337],{"id":139336},"_152-项目介绍","15.2 项目介绍",[19,139339,139326],{},[401,139341],{"style":127745,"src":139342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139344,139345],{},"主页：",[401,139347],{"style":127745,"src":139348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139350,139351],{},"列表页：",[401,139353],{"style":127745,"src":139354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139356,139357],{},"注册页：",[401,139359],{"style":127745,"src":139360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[1760,139362,139364],{"id":139363},"_153-项目搭建工作","15.3 项目搭建工作",[14,139366,139368],{"id":139367},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[401,139370],{"style":127745,"src":139371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139373,139374],{},"经常更换的图片要放到upload文件夹中",[19,139376,139377],{},"不经常换的放到images文件夹中",[14,139379,139381],{"id":139380},"_1532-创建文件如下","15.3.2 创建文件如下",[401,139383],{"style":127745,"src":139384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[401,139386],{"style":127745,"src":139387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139389,139390],{},[694,139391,139392],{},"初始化样式：",[19,139394,139395],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139397,139398],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139400,139401],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[14,139403,139405],{"id":139404},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139407,139408],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139410,139411,139412,139417],{},"这里最典型的应用就是 ",[694,139413,139414],{},[277,139415,139416],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[401,139419],{"style":127745,"src":139420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139422,139423],{},"通过link方法来引入",[14,139425,139427],{"id":139426},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[401,139429],{"style":127745,"src":139430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139432,139433],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[416,139435,139436],{},[419,139437,139438],{},"制作favicon图标",[19,139440,139441,139442,139445],{},"①把品优购图标切成 ",[277,139443,139444],{},"png"," 图片",[19,139447,139448,139449,139451,139452,139455,139456],{},"②把 ",[277,139450,139444],{}," 图片转换为 ",[277,139453,139454],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[69,139457,139458],{"href":139458,"rel":139459},"http:\u002F\u002Fwww.bitbug.net\u002F",[245],[416,139461,139462,139465],{"start":303},[419,139463,139464],{},"favicon图标放到网站根目录下",[419,139466,139467],{},"HTML页面引入favicon",[19,139469,139470,139471,139474],{},"在html 页面里面的 ",[277,139472,139473],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139476,139477],{},[277,139478,139479],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139481,139482],{},"复制这行代码或者在生成这个的网站进行复制",[401,139484],{"style":127745,"src":139485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139487,139488],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139490,139491,139492],{},"例如:",[69,139493,139494],{"href":139494,"rel":139495},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[245],[14,139497,139499],{"id":139498},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139501,139502,139505],{},[694,139503,139504],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139507,139508,139511],{},[694,139509,139510],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139513,139514],{},"页面必须有三个标签用来符合 SEO 优化",[401,139516],{"style":127745,"src":139517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[416,139519,139520],{},[419,139521,139522],{},"title网站标题",[19,139524,139525,139528],{},[694,139526,139527],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139530,70127],{},[698,139532,139533,139536],{},[419,139534,139535],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[419,139537,139538],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[416,139540,139541],{"start":303},[419,139542,139543],{},"description网站描述",[19,139545,139546],{},"简要说明我们网站主要是做什么的",[19,139548,139549,139552],{},[694,139550,139551],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139554,70127],{},[19,139556,139557],{},[277,139558,139559],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[416,139561,139562],{"start":310},[419,139563,139564],{},"keywords关键词",[19,139566,139567],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139569,70127],{},[19,139571,139572],{},[277,139573,139574],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139576,139577],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139579,139580],{},[694,139581,139582],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[416,139584,139585],{"start":324},[419,139586,139587],{},"代码总结",[270,139589,139590],{"className":128636,"code":131993,"language":128638,"meta":275,"style":275},[277,139591,139592,139596,139610,139614],{"__ignoreMap":275},[152,139593,139594],{"class":281,"line":282},[152,139595,132000],{"class":866},[152,139597,139598,139600,139602,139604,139606,139608],{"class":281,"line":303},[152,139599,844],{"class":483},[152,139601,52948],{"class":52637},[152,139603,54823],{"class":285},[152,139605,1864],{"class":483},[152,139607,132013],{"class":289},[152,139609,52644],{"class":483},[152,139611,139612],{"class":281,"line":310},[152,139613,132020],{"class":483},[152,139615,139616,139618,139620],{"class":281,"line":324},[152,139617,53122],{"class":483},[152,139619,52948],{"class":52637},[152,139621,52644],{"class":483},[1760,139623,139625],{"id":139624},"_154-项目公共部分制作","15.4 项目公共部分制作",[14,139627,139629],{"id":139628},"_1541-常用模块类命名","15.4.1 常用模块类命名",[401,139631],{"style":127745,"src":139632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[14,139634,139636],{"id":139635},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139638,139639],{},"布局思路：",[698,139641,139642,139645,139648,139670,139703],{},[419,139643,139644],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[419,139646,139647],{},"里面包含版心的盒子",[419,139649,139650,139651],{},"版心盒子里面包含 1 号左侧盒子左浮动",[698,139652,139653,139661,139667],{},[419,139654,139655,139656,23115,139658,139660],{},"1 号盒子 里面包含一个",[277,139657,698],{},[277,139659,698],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[419,139662,139663,139664,139666],{},"里面的内容是水平排列，所以需要给",[277,139665,419],{},"设置浮动",[419,139668,139669],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[419,139671,139672,139673],{},"版心盒子里面包含 2 号右侧盒子右浮动",[698,139674,139675,139689,139694],{},[419,139676,139677,139678,23115,139680,139682,139683,139685,139686,139688],{},"2 号盒子 里面包含一个",[277,139679,698],{},[277,139681,698],{},"包裹",[277,139684,419],{},"，中间的",[277,139687,2727],{},"可以用样式去设置，也可以用字符 |",[419,139690,139691,139692,139666],{},"里面内容水平排列，给",[277,139693,419],{},[419,139695,139696,139697,139699,139700,139702],{},"找到里面所有偶数的 ",[277,139698,419],{}," 设置样式（偶数的 ",[277,139701,419],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[419,139704,139705,139706],{},"需要用到字体图标",[698,139707,139708,139714,139717,139720,139723],{},[419,139709,139710,139711],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[277,139712,139713],{},"arrow-icon",[419,139715,139716],{},"先要引入字体图片的资源",[419,139718,139719],{},"在样式里面利用 font-face 来进行声明",[419,139721,139722],{},"在伪元素的 content属性设置 图标的编码",[419,139724,139725],{},"给伪元素设置font-family属性",[19,139727,139728],{},"结构实例代码：",[270,139730,139732],{"className":127889,"code":139731,"language":127891,"meta":275,"style":275},"div::before {\n  content: \"\";\n  display: block;\n}\n",[277,139733,139734,139742,139752,139762],{"__ignoreMap":275},[152,139735,139736,139738,139740],{"class":281,"line":282},[152,139737,52948],{"class":52637},[152,139739,138890],{"class":285},[152,139741,17187],{"class":483},[152,139743,139744,139746,139748,139750],{"class":281,"line":303},[152,139745,138897],{"class":293},[152,139747,52774],{"class":483},[152,139749,9294],{"class":289},[152,139751,2965],{"class":483},[152,139753,139754,139756,139758,139760],{"class":281,"line":310},[152,139755,129505],{"class":293},[152,139757,52774],{"class":483},[152,139759,62206],{"class":293},[152,139761,2965],{"class":483},[152,139763,139764],{"class":281,"line":324},[152,139765,3236],{"class":483},[19,139767,139768],{},"样式实例代码：",[270,139770,139771],{"className":127889,"code":139731,"language":127891,"meta":275,"style":275},[277,139772,139773,139781,139791,139801],{"__ignoreMap":275},[152,139774,139775,139777,139779],{"class":281,"line":282},[152,139776,52948],{"class":52637},[152,139778,138890],{"class":285},[152,139780,17187],{"class":483},[152,139782,139783,139785,139787,139789],{"class":281,"line":303},[152,139784,138897],{"class":293},[152,139786,52774],{"class":483},[152,139788,9294],{"class":289},[152,139790,2965],{"class":483},[152,139792,139793,139795,139797,139799],{"class":281,"line":310},[152,139794,129505],{"class":293},[152,139796,52774],{"class":483},[152,139798,62206],{"class":293},[152,139800,2965],{"class":483},[152,139802,139803],{"class":281,"line":324},[152,139804,3236],{"class":483},[14,139806,139808],{"id":139807},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[698,139810,139811],{},[419,139812,139813],{},"header 盒子必须要有高度",[19,139815,139816,139817,139819,139820],{},"1 号盒子是 ",[277,139818,132901],{}," 标志定位，在正常开发过程中， ",[694,139821,139822,139823,139826],{},"logo的布局其实是有讲究的，需要进行 ",[277,139824,139825],{},"logoSEO","的优化 （★★★）",[698,139828,139829,139837,139845,139872],{},[419,139830,139831,139833,139834,139836],{},[277,139832,132901],{}," 里面首先放一个 ",[277,139835,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[419,139838,139839,139841,139842,139844],{},[277,139840,10],{}," 里面再放一个链接，可以返回首页的，把 ",[277,139843,132901],{}," 的背景图片给链接即可",[419,139846,139847,139848],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[698,139849,139850,139865],{},[419,139851,139852,139853,139856,139857,139860,139861,139864],{},"方法1：",[277,139854,139855],{},"text-indent"," 移到盒子外面（",[277,139858,139859],{},"text-indent: -9999px",") ，然后 ",[277,139862,139863],{},"overflow:hidden"," ，淘宝的做法",[419,139866,139867,139868,139871],{},"方法2：直接给 ",[277,139869,139870],{},"font-size: 0;"," 就看不到文字了，京东的做法",[419,139873,139874,139875,139877,139878,139880],{},"最后给链接一个 ",[277,139876,52744],{}," 属性，这样鼠标放到 ",[277,139879,132901],{}," 上就可以看到提示文字了",[19,139882,139728],{},[270,139884,139885],{"className":128636,"code":133122,"language":128638,"meta":275,"style":275},[277,139886,139887],{"__ignoreMap":275},[152,139888,139889,139891,139893,139895,139897,139899,139901,139903,139905,139907,139909],{"class":281,"line":282},[152,139890,844],{"class":483},[152,139892,69],{"class":52637},[152,139894,62394],{"class":285},[152,139896,1864],{"class":483},[152,139898,133137],{"class":289},[152,139900,133140],{"class":285},[152,139902,1864],{"class":483},[152,139904,133145],{"class":289},[152,139906,133148],{"class":483},[152,139908,69],{"class":52637},[152,139910,52644],{"class":483},[19,139912,139768],{},[270,139914,139915],{"className":128636,"code":133122,"language":128638,"meta":275,"style":275},[277,139916,139917],{"__ignoreMap":275},[152,139918,139919,139921,139923,139925,139927,139929,139931,139933,139935,139937,139939],{"class":281,"line":282},[152,139920,844],{"class":483},[152,139922,69],{"class":52637},[152,139924,62394],{"class":285},[152,139926,1864],{"class":483},[152,139928,133137],{"class":289},[152,139930,133140],{"class":285},[152,139932,1864],{"class":483},[152,139934,133145],{"class":289},[152,139936,133148],{"class":483},[152,139938,69],{"class":52637},[152,139940,52644],{"class":483},[19,139942,139943,139944,139946],{},"2 号盒子是 ",[277,139945,132914],{}," 搜索模块定位",[698,139948,139949,139952,139955,139958],{},[419,139950,139951],{},"search盒子利用定位的方式放在对应的位置",[419,139953,139954],{},"search盒子设置绝对定位，header盒子设置相对定位",[419,139956,139957],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[419,139959,139960],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139962,139728],{},[270,139964,139965],{"className":127889,"code":133209,"language":127891,"meta":275,"style":275},[277,139966,139967,139989,139993,140003],{"__ignoreMap":275},[152,139968,139969,139971,139973,139975,139977,139979,139981,139983,139985,139987],{"class":281,"line":282},[152,139970,52948],{"class":52637},[152,139972,14051],{"class":483},[152,139974,19],{"class":52637},[152,139976,14051],{"class":483},[152,139978,10],{"class":52637},[152,139980,14051],{"class":483},[152,139982,698],{"class":52637},[152,139984,14051],{"class":483},[152,139986,419],{"class":52637},[152,139988,17187],{"class":483},[152,139990,139991],{"class":281,"line":303},[152,139992,133238],{"class":866},[152,139994,139995,139997,139999,140001],{"class":281,"line":310},[152,139996,129505],{"class":293},[152,139998,52774],{"class":483},[152,140000,62206],{"class":293},[152,140002,2965],{"class":483},[152,140004,140005],{"class":281,"line":324},[152,140006,3236],{"class":483},[19,140008,139768],{},[270,140010,140011],{"className":127889,"code":133209,"language":127891,"meta":275,"style":275},[277,140012,140013,140035,140039,140049],{"__ignoreMap":275},[152,140014,140015,140017,140019,140021,140023,140025,140027,140029,140031,140033],{"class":281,"line":282},[152,140016,52948],{"class":52637},[152,140018,14051],{"class":483},[152,140020,19],{"class":52637},[152,140022,14051],{"class":483},[152,140024,10],{"class":52637},[152,140026,14051],{"class":483},[152,140028,698],{"class":52637},[152,140030,14051],{"class":483},[152,140032,419],{"class":52637},[152,140034,17187],{"class":483},[152,140036,140037],{"class":281,"line":303},[152,140038,133238],{"class":866},[152,140040,140041,140043,140045,140047],{"class":281,"line":310},[152,140042,129505],{"class":293},[152,140044,52774],{"class":483},[152,140046,62206],{"class":293},[152,140048,2965],{"class":483},[152,140050,140051],{"class":281,"line":324},[152,140052,3236],{"class":483},[19,140054,140055],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140057,140058,140059,140062],{},"3 号盒子是 ",[277,140060,140061],{},"hotwords"," 热词模块定位",[698,140064,140065,140068,140071],{},[419,140066,140067],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[419,140069,140070],{},"给里面所有的a标签设置 左右10px的外边距",[419,140072,140073],{},"给第一个a标签设置文字变红色（#c81623）",[19,140075,139728],{},[270,140077,140079],{"className":127889,"code":140078,"language":127891,"meta":275,"style":275},"div {\n  margin: 0 auto;\n}\n",[277,140080,140081,140087,140099],{"__ignoreMap":275},[152,140082,140083,140085],{"class":281,"line":282},[152,140084,52948],{"class":52637},[152,140086,17187],{"class":483},[152,140088,140089,140091,140093,140095,140097],{"class":281,"line":303},[152,140090,71807],{"class":293},[152,140092,52774],{"class":483},[152,140094,2000],{"class":293},[152,140096,52893],{"class":293},[152,140098,2965],{"class":483},[152,140100,140101],{"class":281,"line":310},[152,140102,3236],{"class":483},[19,140104,139768],{},[270,140106,140107],{"className":127889,"code":140078,"language":127891,"meta":275,"style":275},[277,140108,140109,140115,140127],{"__ignoreMap":275},[152,140110,140111,140113],{"class":281,"line":282},[152,140112,52948],{"class":52637},[152,140114,17187],{"class":483},[152,140116,140117,140119,140121,140123,140125],{"class":281,"line":303},[152,140118,71807],{"class":293},[152,140120,52774],{"class":483},[152,140122,2000],{"class":293},[152,140124,52893],{"class":293},[152,140126,2965],{"class":483},[152,140128,140129],{"class":281,"line":310},[152,140130,3236],{"class":483},[19,140132,140133,140134,140137],{},"4 号盒子是 ",[277,140135,140136],{},"shopcar"," 购物车模块",[698,140139,140140,140145,140148,140151],{},[419,140141,124672,140142,140144],{},[277,140143,140136],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[419,140146,140147],{},"count 统计部分用绝对定位做",[419,140149,140150],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[419,140152,140153],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140155,139728],{},[270,140157,140158],{"className":127889,"code":133321,"language":127891,"meta":275,"style":275},[277,140159,140160,140164,140178,140182,140196,140200,140214,140218,140232,140236],{"__ignoreMap":275},[152,140161,140162],{"class":281,"line":282},[152,140163,133328],{"class":866},[152,140165,140166,140168,140170,140172,140174,140176],{"class":281,"line":303},[152,140167,133333],{"class":285},[152,140169,81144],{"class":483},[152,140171,130249],{"class":293},[152,140173,52774],{"class":483},[152,140175,133342],{"class":293},[152,140177,130819],{"class":483},[152,140179,140180],{"class":281,"line":310},[152,140181,133349],{"class":866},[152,140183,140184,140186,140188,140190,140192,140194],{"class":281,"line":324},[152,140185,133354],{"class":285},[152,140187,81144],{"class":483},[152,140189,130249],{"class":293},[152,140191,52774],{"class":483},[152,140193,56101],{"class":293},[152,140195,130819],{"class":483},[152,140197,140198],{"class":281,"line":329},[152,140199,133369],{"class":866},[152,140201,140202,140204,140206,140208,140210,140212],{"class":281,"line":343},[152,140203,133374],{"class":285},[152,140205,81144],{"class":483},[152,140207,130249],{"class":293},[152,140209,52774],{"class":483},[152,140211,56168],{"class":293},[152,140213,130819],{"class":483},[152,140215,140216],{"class":281,"line":348},[152,140217,133389],{"class":866},[152,140219,140220,140222,140224,140226,140228,140230],{"class":281,"line":362},[152,140221,133394],{"class":285},[152,140223,81144],{"class":483},[152,140225,130249],{"class":293},[152,140227,52774],{"class":483},[152,140229,87570],{"class":293},[152,140231,130819],{"class":483},[152,140233,140234],{"class":281,"line":367},[152,140235,133409],{"class":866},[152,140237,140238,140240,140242,140244,140246,140248],{"class":281,"line":381},[152,140239,133414],{"class":285},[152,140241,81144],{"class":483},[152,140243,130249],{"class":293},[152,140245,52774],{"class":483},[152,140247,133423],{"class":293},[152,140249,130819],{"class":483},[19,140251,139768],{},[270,140253,140254],{"className":127889,"code":133321,"language":127891,"meta":275,"style":275},[277,140255,140256,140260,140274,140278,140292,140296,140310,140314,140328,140332],{"__ignoreMap":275},[152,140257,140258],{"class":281,"line":282},[152,140259,133328],{"class":866},[152,140261,140262,140264,140266,140268,140270,140272],{"class":281,"line":303},[152,140263,133333],{"class":285},[152,140265,81144],{"class":483},[152,140267,130249],{"class":293},[152,140269,52774],{"class":483},[152,140271,133342],{"class":293},[152,140273,130819],{"class":483},[152,140275,140276],{"class":281,"line":310},[152,140277,133349],{"class":866},[152,140279,140280,140282,140284,140286,140288,140290],{"class":281,"line":324},[152,140281,133354],{"class":285},[152,140283,81144],{"class":483},[152,140285,130249],{"class":293},[152,140287,52774],{"class":483},[152,140289,56101],{"class":293},[152,140291,130819],{"class":483},[152,140293,140294],{"class":281,"line":329},[152,140295,133369],{"class":866},[152,140297,140298,140300,140302,140304,140306,140308],{"class":281,"line":343},[152,140299,133374],{"class":285},[152,140301,81144],{"class":483},[152,140303,130249],{"class":293},[152,140305,52774],{"class":483},[152,140307,56168],{"class":293},[152,140309,130819],{"class":483},[152,140311,140312],{"class":281,"line":348},[152,140313,133389],{"class":866},[152,140315,140316,140318,140320,140322,140324,140326],{"class":281,"line":362},[152,140317,133394],{"class":285},[152,140319,81144],{"class":483},[152,140321,130249],{"class":293},[152,140323,52774],{"class":483},[152,140325,87570],{"class":293},[152,140327,130819],{"class":483},[152,140329,140330],{"class":281,"line":367},[152,140331,133409],{"class":866},[152,140333,140334,140336,140338,140340,140342,140344],{"class":281,"line":381},[152,140335,133414],{"class":285},[152,140337,81144],{"class":483},[152,140339,130249],{"class":293},[152,140341,52774],{"class":483},[152,140343,133423],{"class":293},[152,140345,130819],{"class":483},[14,140347,140349,140350,140352],{"id":140348},"_1544-nav导航模块制作","15.4.4 ",[277,140351,55050],{},"导航模块制作",[401,140354],{"style":127745,"src":140355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140357,140358,140360],{},[277,140359,55050],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140362,140363,140364],{},"1 号盒子左侧浮动，",[277,140365,140366],{},"dropdown",[698,140368,140369,140379,140387,140393,140401,140411,140419,140430],{},[419,140370,140371,140372,102355,140375,140378],{},"1号盒子有讲究，根据相关性 里面包含 ",[277,140373,140374],{},".dt",[277,140376,140377],{},".dd"," 两个盒子",[419,140380,140381,140383,140384,140386],{},[277,140382,140374],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[277,140385,140377],{}," 挤到下面去了",[419,140388,140389,140390,140392],{},"给 ",[277,140391,140377],{}," 盒子设置宽度 和 高度，以及背景颜色",[419,140394,140389,140395,140397,140398,121574],{},[277,140396,140377],{}," 盒子里面定义 无序列表 （",[277,140399,140400],{},"ul > li > a",[419,140402,140403,140404,140406,140407,140410],{},"每个 ",[277,140405,419],{}," 都有一个高度（",[277,140408,140409],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[419,140412,140389,140413,140415,140416,121574],{},[277,140414,419],{}," 里面的a设置文字大小（",[277,140417,140418],{},"14px",[419,140420,140389,140421,140423,140424,140426,140427,140429],{},[277,140422,419],{}," 设置 ",[277,140425,129050],{},"，当鼠标移入的时候，让",[277,140428,419],{},"的背景变成白色，让里面的文字变成红色",[419,140431,140432,140434,140435,140437,140438,140440],{},[277,140433,419],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[277,140436,419],{},"的右侧，那么给",[277,140439,419],{},"设置相对定位",[19,140442,140443],{},"一定要注意相关性",[19,140445,139728],{},[270,140447,140448],{"className":127889,"code":139731,"language":127891,"meta":275,"style":275},[277,140449,140450,140458,140468,140478],{"__ignoreMap":275},[152,140451,140452,140454,140456],{"class":281,"line":282},[152,140453,52948],{"class":52637},[152,140455,138890],{"class":285},[152,140457,17187],{"class":483},[152,140459,140460,140462,140464,140466],{"class":281,"line":303},[152,140461,138897],{"class":293},[152,140463,52774],{"class":483},[152,140465,9294],{"class":289},[152,140467,2965],{"class":483},[152,140469,140470,140472,140474,140476],{"class":281,"line":310},[152,140471,129505],{"class":293},[152,140473,52774],{"class":483},[152,140475,62206],{"class":293},[152,140477,2965],{"class":483},[152,140479,140480],{"class":281,"line":324},[152,140481,3236],{"class":483},[19,140483,139768],{},[270,140485,140486],{"className":127889,"code":139731,"language":127891,"meta":275,"style":275},[277,140487,140488,140496,140506,140516],{"__ignoreMap":275},[152,140489,140490,140492,140494],{"class":281,"line":282},[152,140491,52948],{"class":52637},[152,140493,138890],{"class":285},[152,140495,17187],{"class":483},[152,140497,140498,140500,140502,140504],{"class":281,"line":303},[152,140499,138897],{"class":293},[152,140501,52774],{"class":483},[152,140503,9294],{"class":289},[152,140505,2965],{"class":483},[152,140507,140508,140510,140512,140514],{"class":281,"line":310},[152,140509,129505],{"class":293},[152,140511,52774],{"class":483},[152,140513,62206],{"class":293},[152,140515,2965],{"class":483},[152,140517,140518],{"class":281,"line":324},[152,140519,3236],{"class":483},[19,140521,140522],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140524,140525,140526,140529],{},"2 号盒子左侧浮动，",[277,140527,140528],{},"navitems"," 导航栏组",[698,140531,140532,140537,140546],{},[419,140533,140534,140535],{},"里面结构是 ",[277,140536,140400],{},[419,140538,140539,140540,140542,140543,140545],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[277,140541,69],{},"左右的",[277,140544,32220],{},"把两侧撑开",[419,140547,140548],{},"让文字垂直居中（行高等于高度）",[401,140550],{"style":127745,"src":140551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140553,140554],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140556,139728],{},[270,140558,140560],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},".box {\n  float: left;\n}\n",[277,140561,140562,140568,140578],{"__ignoreMap":275},[152,140563,140564,140566],{"class":281,"line":282},[152,140565,131737],{"class":285},[152,140567,17187],{"class":483},[152,140569,140570,140572,140574,140576],{"class":281,"line":303},[152,140571,132369],{"class":293},[152,140573,52774],{"class":483},[152,140575,34],{"class":293},[152,140577,2965],{"class":483},[152,140579,140580],{"class":281,"line":310},[152,140581,3236],{"class":483},[19,140583,139768],{},[270,140585,140586],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},[277,140587,140588,140594,140604],{"__ignoreMap":275},[152,140589,140590,140592],{"class":281,"line":282},[152,140591,131737],{"class":285},[152,140593,17187],{"class":483},[152,140595,140596,140598,140600,140602],{"class":281,"line":303},[152,140597,132369],{"class":293},[152,140599,52774],{"class":483},[152,140601,34],{"class":293},[152,140603,2965],{"class":483},[152,140605,140606],{"class":281,"line":310},[152,140607,3236],{"class":483},[19,140609,140610],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[401,140612],{"style":127745,"src":140613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[270,140615,140616],{"className":127889,"code":132046,"language":127891,"meta":275,"style":275},[277,140617,140618,140624,140640],{"__ignoreMap":275},[152,140619,140620,140622],{"class":281,"line":282},[152,140621,52948],{"class":52637},[152,140623,17187],{"class":483},[152,140625,140626,140628,140630,140632,140634,140636,140638],{"class":281,"line":303},[152,140627,72233],{"class":293},[152,140629,52774],{"class":483},[152,140631,2026],{"class":293},[152,140633,52829],{"class":476},[152,140635,52858],{"class":293},[152,140637,131281],{"class":293},[152,140639,2965],{"class":483},[152,140641,140642],{"class":281,"line":310},[152,140643,3236],{"class":483},[14,140645,140647],{"id":140646},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[401,140649],{"style":127745,"src":140650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[698,140652,140653,140658,140663],{},[419,140654,140655,140657],{},[277,140656,133092],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[419,140659,140660,140662],{},[277,140661,133092],{}," 里面有一个大的版心",[419,140664,140665,140666,140669,140670],{},"版心里面包含 1 号盒子，",[277,140667,140668],{},"mod_service"," 是服务模块，mod 是模块的意思",[698,140671,140672,140677,140690,140706,140711],{},[419,140673,140389,140674,140676],{},[277,140675,140668],{}," 设置高度（80px）和下边框",[419,140678,140679,140680,140683,140684,140686,140687,140689],{},"在里面定义 ",[277,140681,140682],{},"ul > li"," ,每个",[277,140685,419],{}," 宽度是300px 高度是 50px，给每个",[277,140688,419],{},"设置35px的左内边距",[419,140691,140692,140693,140695,140696,140698,140699,140701,140702,20025,140704,121574],{},"在每个",[277,140694,419],{},"里面，放一个 ",[277,140697,24524],{},"（里面放图标），一个",[277,140700,52948],{},"（里面放",[277,140703,52948],{},[277,140705,19],{},[419,140707,140389,140708,140710],{},[277,140709,24524],{},"设置浮动，让h5与这个div左右排列",[419,140712,140713],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140715,139728],{},[270,140717,140719],{"className":127889,"code":140718,"language":127891,"meta":275,"style":275},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[277,140720,140721,140727,140739,140751,140778],{"__ignoreMap":275},[152,140722,140723,140725],{"class":281,"line":282},[152,140724,135646],{"class":285},[152,140726,17187],{"class":483},[152,140728,140729,140731,140733,140735,140737],{"class":281,"line":303},[152,140730,71905],{"class":293},[152,140732,52774],{"class":483},[152,140734,2508],{"class":293},[152,140736,52829],{"class":476},[152,140738,2965],{"class":483},[152,140740,140741,140743,140745,140747,140749],{"class":281,"line":310},[152,140742,72125],{"class":293},[152,140744,52774],{"class":483},[152,140746,2508],{"class":293},[152,140748,52829],{"class":476},[152,140750,2965],{"class":483},[152,140752,140753,140755,140757,140759,140761,140763,140765,140767,140770,140772,140774,140776],{"class":281,"line":324},[152,140754,71948],{"class":293},[152,140756,52774],{"class":483},[152,140758,63063],{"class":293},[152,140760,1819],{"class":483},[152,140762,135685],{"class":6858},[152,140764,15330],{"class":483},[152,140766,63073],{"class":293},[152,140768,140769],{"class":293}," -10",[152,140771,52829],{"class":476},[152,140773,135704],{"class":293},[152,140775,52829],{"class":476},[152,140777,2965],{"class":483},[152,140779,140780],{"class":281,"line":329},[152,140781,3236],{"class":483},[19,140783,139768],{},[270,140785,140786],{"className":127889,"code":140718,"language":127891,"meta":275,"style":275},[277,140787,140788,140794,140806,140818,140844],{"__ignoreMap":275},[152,140789,140790,140792],{"class":281,"line":282},[152,140791,135646],{"class":285},[152,140793,17187],{"class":483},[152,140795,140796,140798,140800,140802,140804],{"class":281,"line":303},[152,140797,71905],{"class":293},[152,140799,52774],{"class":483},[152,140801,2508],{"class":293},[152,140803,52829],{"class":476},[152,140805,2965],{"class":483},[152,140807,140808,140810,140812,140814,140816],{"class":281,"line":310},[152,140809,72125],{"class":293},[152,140811,52774],{"class":483},[152,140813,2508],{"class":293},[152,140815,52829],{"class":476},[152,140817,2965],{"class":483},[152,140819,140820,140822,140824,140826,140828,140830,140832,140834,140836,140838,140840,140842],{"class":281,"line":324},[152,140821,71948],{"class":293},[152,140823,52774],{"class":483},[152,140825,63063],{"class":293},[152,140827,1819],{"class":483},[152,140829,135685],{"class":6858},[152,140831,15330],{"class":483},[152,140833,63073],{"class":293},[152,140835,140769],{"class":293},[152,140837,52829],{"class":476},[152,140839,135704],{"class":293},[152,140841,52829],{"class":476},[152,140843,2965],{"class":483},[152,140845,140846],{"class":281,"line":329},[152,140847,3236],{"class":483},[19,140849,140850],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[698,140852,140853,140856,140862,140868,140880],{},[419,140854,140855],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[419,140857,140858,140859,121574],{},"里面的布局利用 自定义列表来实现（",[277,140860,140861],{},"dl > dt + dd",[419,140863,140389,140864,140867],{},[277,140865,140866],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[419,140869,140389,140870,140873,140874,20025,140876,140879],{},[277,140871,140872],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[277,140875,140872],{},[277,140877,140878],{},"dd","之间有些距离",[419,140881,140882],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140884,139728],{},[270,140886,140887],{"className":127889,"code":140078,"language":127891,"meta":275,"style":275},[277,140888,140889,140895,140907],{"__ignoreMap":275},[152,140890,140891,140893],{"class":281,"line":282},[152,140892,52948],{"class":52637},[152,140894,17187],{"class":483},[152,140896,140897,140899,140901,140903,140905],{"class":281,"line":303},[152,140898,71807],{"class":293},[152,140900,52774],{"class":483},[152,140902,2000],{"class":293},[152,140904,52893],{"class":293},[152,140906,2965],{"class":483},[152,140908,140909],{"class":281,"line":310},[152,140910,3236],{"class":483},[19,140912,139768],{},[270,140914,140915],{"className":127889,"code":140078,"language":127891,"meta":275,"style":275},[277,140916,140917,140923,140935],{"__ignoreMap":275},[152,140918,140919,140921],{"class":281,"line":282},[152,140920,52948],{"class":52637},[152,140922,17187],{"class":483},[152,140924,140925,140927,140929,140931,140933],{"class":281,"line":303},[152,140926,71807],{"class":293},[152,140928,52774],{"class":483},[152,140930,2000],{"class":293},[152,140932,52893],{"class":293},[152,140934,2965],{"class":483},[152,140936,140937],{"class":281,"line":310},[152,140938,3236],{"class":483},[19,140940,140941],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[698,140943,140944,140953,140956,140967],{},[419,140945,140946,140947,140949,140950,140952],{},"分为上下两块，上面是 ",[277,140948,133109],{}," 友情链接，下面是 ",[277,140951,133102],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[419,140954,140955],{},"把内容分别复制到相应模块中",[419,140957,140389,140958,140960,140961,140963,140964,140966],{},[277,140959,133109],{}," 设置 15px 的下外边距，给",[277,140962,133109],{}," 里面 的 ",[277,140965,69],{}," 标签设置 左右 3px 的外边距",[419,140968,140969,140970,140972],{},"给",[277,140971,133102],{}," 设置 20px 的行高",[19,140974,139728],{},[270,140976,140977],{"className":127889,"code":140078,"language":127891,"meta":275,"style":275},[277,140978,140979,140985,140997],{"__ignoreMap":275},[152,140980,140981,140983],{"class":281,"line":282},[152,140982,52948],{"class":52637},[152,140984,17187],{"class":483},[152,140986,140987,140989,140991,140993,140995],{"class":281,"line":303},[152,140988,71807],{"class":293},[152,140990,52774],{"class":483},[152,140992,2000],{"class":293},[152,140994,52893],{"class":293},[152,140996,2965],{"class":483},[152,140998,140999],{"class":281,"line":310},[152,141000,3236],{"class":483},[19,141002,139768],{},[270,141004,141005],{"className":127889,"code":140078,"language":127891,"meta":275,"style":275},[277,141006,141007,141013,141025],{"__ignoreMap":275},[152,141008,141009,141011],{"class":281,"line":282},[152,141010,52948],{"class":52637},[152,141012,17187],{"class":483},[152,141014,141015,141017,141019,141021,141023],{"class":281,"line":303},[152,141016,71807],{"class":293},[152,141018,52774],{"class":483},[152,141020,2000],{"class":293},[152,141022,52893],{"class":293},[152,141024,2965],{"class":483},[152,141026,141027],{"class":281,"line":310},[152,141028,3236],{"class":483},[19,141030,141031],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1736,141033,141034],{},"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":275,"searchDepth":303,"depth":303,"links":141036},[141037,141038,141039,141046],{"id":139317,"depth":303,"text":139318},{"id":139336,"depth":303,"text":139337},{"id":139363,"depth":303,"text":139364,"children":141040},[141041,141042,141043,141044,141045],{"id":139367,"depth":310,"text":139368},{"id":139380,"depth":310,"text":139381},{"id":139404,"depth":310,"text":139405},{"id":139426,"depth":310,"text":139427},{"id":139498,"depth":310,"text":139499},{"id":139624,"depth":303,"text":139625,"children":141047},[141048,141049,141050,141051,141053],{"id":139628,"depth":310,"text":139629},{"id":139635,"depth":310,"text":139636},{"id":139807,"depth":310,"text":139808},{"id":140348,"depth":310,"text":141052},"15.4.4 nav导航模块制作",{"id":140646,"depth":310,"text":140647},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139309,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141060,"title":141061,"body":141062,"description":24991,"extension":1744,"meta":143464,"navigation":306,"path":143465,"seo":143466,"stem":143467,"__hash__":143468},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141063,"toc":143441},[141064,141067,141071,141075,141087,141090,141093,141096,141107,141109,141133,141135,141159,141164,141167,141169,141205,141207,141243,141246,141251,141254,141257,141260,141290,141297,141300,141310,141312,141346,141349,141383,141389,141406,141408,141444,141446,141482,141487,141512,141514,141540,141542,141566,141573,141576,141640,141642,141684,141686,141726,141733,141738,141740,141770,141772,141802,141806,141809,141816,141828,141830,141856,141858,141882,141885,141887,141911,141917,141927,141929,141959,141961,141991,141998,142039,142041,142077,142079,142115,142119,142122,142125,142128,142134,142139,142142,142165,142168,142192,142195,142219,142224,142227,142230,142233,142236,142239,142313,142315,142345,142347,142377,142380,142383,142415,142419,142423,142437,142446,142449,142454,142456,142550,142552,142646,142669,142671,142695,142697,142721,142728,142731,142741,142743,142767,142772,142780,142782,142812,142817,142857,142859,142885,142887,142913,142917,142920,142925,142928,142932,142940,142947,142955,142957,142987,142989,143019,143027,143030,143033,143035,143065,143067,143097,143100,143105,143107,143131,143133,143157,143160,143245,143247,143271,143273,143297,143301,143303,143327,143329,143363,143367,143381,143384,143389,143392,143397,143400,143430,143438],[10,141065,141061],{"id":141066},"_16-品优购项目下篇-主体与页面开发",[1760,141068,141070],{"id":141069},"_161-项目主体模块制作","16.1 项目主体模块制作",[14,141072,141074],{"id":141073},"_1611-首页制作","16.1.1 首页制作",[19,141076,141077,141079,141080,141082,141083,141086],{},[694,141078,103395],{}," 主体模块是 ",[694,141081,75395],{}," 里面专有的，注意需要新的样式文件 ",[694,141084,141085],{},"index.css，"," 就不要写在common.css中了",[401,141088],{"style":127745,"src":141089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[401,141091],{"style":127745,"src":141092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141094,141095],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[698,141097,141098,141101,141104],{},[419,141099,141100],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[419,141102,141103],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[419,141105,141106],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141108,139728],{},[270,141110,141111],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},[277,141112,141113,141119,141129],{"__ignoreMap":275},[152,141114,141115,141117],{"class":281,"line":282},[152,141116,131737],{"class":285},[152,141118,17187],{"class":483},[152,141120,141121,141123,141125,141127],{"class":281,"line":303},[152,141122,132369],{"class":293},[152,141124,52774],{"class":483},[152,141126,34],{"class":293},[152,141128,2965],{"class":483},[152,141130,141131],{"class":281,"line":310},[152,141132,3236],{"class":483},[19,141134,139768],{},[270,141136,141137],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},[277,141138,141139,141145,141155],{"__ignoreMap":275},[152,141140,141141,141143],{"class":281,"line":282},[152,141142,131737],{"class":285},[152,141144,17187],{"class":483},[152,141146,141147,141149,141151,141153],{"class":281,"line":303},[152,141148,132369],{"class":293},[152,141150,52774],{"class":483},[152,141152,34],{"class":293},[152,141154,2965],{"class":483},[152,141156,141157],{"class":281,"line":310},[152,141158,3236],{"class":483},[416,141160,141161],{},[419,141162,141163],{},"左侧focus模块制作",[401,141165],{"style":127745,"src":141166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141168,139728],{},[270,141170,141171],{"className":127889,"code":129212,"language":127891,"meta":275,"style":275},[277,141172,141173,141181,141191,141201],{"__ignoreMap":275},[152,141174,141175,141177,141179],{"class":281,"line":282},[152,141176,55158],{"class":52637},[152,141178,63237],{"class":285},[152,141180,17187],{"class":483},[152,141182,141183,141185,141187,141189],{"class":281,"line":303},[152,141184,129227],{"class":293},[152,141186,52774],{"class":483},[152,141188,56226],{"class":293},[152,141190,2965],{"class":483},[152,141192,141193,141195,141197,141199],{"class":281,"line":310},[152,141194,72135],{"class":293},[152,141196,52774],{"class":483},[152,141198,56074],{"class":293},[152,141200,2965],{"class":483},[152,141202,141203],{"class":281,"line":324},[152,141204,3236],{"class":483},[19,141206,139768],{},[270,141208,141209],{"className":127889,"code":129212,"language":127891,"meta":275,"style":275},[277,141210,141211,141219,141229,141239],{"__ignoreMap":275},[152,141212,141213,141215,141217],{"class":281,"line":282},[152,141214,55158],{"class":52637},[152,141216,63237],{"class":285},[152,141218,17187],{"class":483},[152,141220,141221,141223,141225,141227],{"class":281,"line":303},[152,141222,129227],{"class":293},[152,141224,52774],{"class":483},[152,141226,56226],{"class":293},[152,141228,2965],{"class":483},[152,141230,141231,141233,141235,141237],{"class":281,"line":310},[152,141232,72135],{"class":293},[152,141234,52774],{"class":483},[152,141236,56074],{"class":293},[152,141238,2965],{"class":483},[152,141240,141241],{"class":281,"line":324},[152,141242,3236],{"class":483},[19,141244,141245],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[416,141247,141248],{"start":303},[419,141249,141250],{},"右侧newsflash模块制作",[401,141252],{"style":127745,"src":141253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141255,141256],{},"右侧的模块 分为上中下三个盒子",[19,141258,141259],{},"结构代码：",[270,141261,141262],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,141263,141264],{"__ignoreMap":275},[152,141265,141266,141268,141270,141272,141274,141276,141278,141280,141282,141284,141286,141288],{"class":281,"line":282},[152,141267,844],{"class":483},[152,141269,401],{"class":52637},[152,141271,56576],{"class":285},[152,141273,1864],{"class":483},[152,141275,135406],{"class":289},[152,141277,56584],{"class":285},[152,141279,1864],{"class":483},[152,141281,135413],{"class":289},[152,141283,135416],{"class":285},[152,141285,1864],{"class":483},[152,141287,135421],{"class":289},[152,141289,52644],{"class":483},[19,141291,141292,141293,141296],{},"1 号盒子为 ",[277,141294,141295],{},"news"," 新闻模块 高度为 165px",[401,141298],{"style":127745,"src":141299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141301,141302,141303,141306,141307],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[277,141304,141305],{},"news-hd","，下面是 ",[277,141308,141309],{},"news-bd",[19,141311,141259],{},[270,141313,141314],{"className":128636,"code":131993,"language":128638,"meta":275,"style":275},[277,141315,141316,141320,141334,141338],{"__ignoreMap":275},[152,141317,141318],{"class":281,"line":282},[152,141319,132000],{"class":866},[152,141321,141322,141324,141326,141328,141330,141332],{"class":281,"line":303},[152,141323,844],{"class":483},[152,141325,52948],{"class":52637},[152,141327,54823],{"class":285},[152,141329,1864],{"class":483},[152,141331,132013],{"class":289},[152,141333,52644],{"class":483},[152,141335,141336],{"class":281,"line":310},[152,141337,132020],{"class":483},[152,141339,141340,141342,141344],{"class":281,"line":324},[152,141341,53122],{"class":483},[152,141343,52948],{"class":52637},[152,141345,52644],{"class":483},[19,141347,141348],{},"样式代码：",[270,141350,141351],{"className":128636,"code":131993,"language":128638,"meta":275,"style":275},[277,141352,141353,141357,141371,141375],{"__ignoreMap":275},[152,141354,141355],{"class":281,"line":282},[152,141356,132000],{"class":866},[152,141358,141359,141361,141363,141365,141367,141369],{"class":281,"line":303},[152,141360,844],{"class":483},[152,141362,52948],{"class":52637},[152,141364,54823],{"class":285},[152,141366,1864],{"class":483},[152,141368,132013],{"class":289},[152,141370,52644],{"class":483},[152,141372,141373],{"class":281,"line":310},[152,141374,132020],{"class":483},[152,141376,141377,141379,141381],{"class":281,"line":324},[152,141378,53122],{"class":483},[152,141380,52948],{"class":52637},[152,141382,52644],{"class":483},[19,141384,141385,141386,141388],{},"上面是",[277,141387,141305],{},"，设置高度是 33px，设置下边框",[698,141390,141391,141397],{},[419,141392,141393,141394,141396],{},"里面放一个",[277,141395,24524],{}," 标题",[419,141398,141399,141400,141402,141403,141405],{},"放一个a",[277,141401,104030],{},"，内容是 更多，然后让 ",[277,141404,69],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141407,141259],{},[270,141409,141410],{"className":127889,"code":139731,"language":127891,"meta":275,"style":275},[277,141411,141412,141420,141430,141440],{"__ignoreMap":275},[152,141413,141414,141416,141418],{"class":281,"line":282},[152,141415,52948],{"class":52637},[152,141417,138890],{"class":285},[152,141419,17187],{"class":483},[152,141421,141422,141424,141426,141428],{"class":281,"line":303},[152,141423,138897],{"class":293},[152,141425,52774],{"class":483},[152,141427,9294],{"class":289},[152,141429,2965],{"class":483},[152,141431,141432,141434,141436,141438],{"class":281,"line":310},[152,141433,129505],{"class":293},[152,141435,52774],{"class":483},[152,141437,62206],{"class":293},[152,141439,2965],{"class":483},[152,141441,141442],{"class":281,"line":324},[152,141443,3236],{"class":483},[19,141445,141348],{},[270,141447,141448],{"className":127889,"code":139731,"language":127891,"meta":275,"style":275},[277,141449,141450,141458,141468,141478],{"__ignoreMap":275},[152,141451,141452,141454,141456],{"class":281,"line":282},[152,141453,52948],{"class":52637},[152,141455,138890],{"class":285},[152,141457,17187],{"class":483},[152,141459,141460,141462,141464,141466],{"class":281,"line":303},[152,141461,138897],{"class":293},[152,141463,52774],{"class":483},[152,141465,9294],{"class":289},[152,141467,2965],{"class":483},[152,141469,141470,141472,141474,141476],{"class":281,"line":310},[152,141471,129505],{"class":293},[152,141473,52774],{"class":483},[152,141475,62206],{"class":293},[152,141477,2965],{"class":483},[152,141479,141480],{"class":281,"line":324},[152,141481,3236],{"class":483},[19,141483,141484,141485],{},"下面是",[277,141486,141309],{},[698,141488,141489,141497],{},[419,141490,141491,141492,102355,141494,141496],{},"里面包含 ",[277,141493,698],{},[277,141495,419],{}," 还有链接",[419,141498,140969,141499,141501,141502,141504,141505,141508,141509],{},[277,141500,419],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[277,141503,132555],{}," 2.设置 ",[277,141506,141507],{},"white-space: nowrap;"," 3. 设置 ",[277,141510,141511],{},"text-overflow: ellipsis;",[19,141513,141259],{},[270,141515,141517],{"className":127889,"code":141516,"language":127891,"meta":275,"style":275},"div {\n  overflow: hidden;\n}\n",[277,141518,141519,141525,141536],{"__ignoreMap":275},[152,141520,141521,141523],{"class":281,"line":282},[152,141522,52948],{"class":52637},[152,141524,17187],{"class":483},[152,141526,141527,141530,141532,141534],{"class":281,"line":303},[152,141528,141529],{"class":293},"  overflow",[152,141531,52774],{"class":483},[152,141533,63051],{"class":293},[152,141535,2965],{"class":483},[152,141537,141538],{"class":281,"line":310},[152,141539,3236],{"class":483},[19,141541,141348],{},[270,141543,141544],{"className":127889,"code":141516,"language":127891,"meta":275,"style":275},[277,141545,141546,141552,141562],{"__ignoreMap":275},[152,141547,141548,141550],{"class":281,"line":282},[152,141549,52948],{"class":52637},[152,141551,17187],{"class":483},[152,141553,141554,141556,141558,141560],{"class":281,"line":303},[152,141555,141529],{"class":293},[152,141557,52774],{"class":483},[152,141559,63051],{"class":293},[152,141561,2965],{"class":483},[152,141563,141564],{"class":281,"line":310},[152,141565,3236],{"class":483},[19,141567,141568,141569,141572],{},"2 号盒子为 ",[277,141570,141571],{},"lifeservice"," 生活服务模块 高度为 209px",[401,141574],{"style":127745,"src":141575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[698,141577,141578,141581,141591,141615,141626],{},[419,141579,141580],{},"设置边框（左右下边框）",[419,141582,141583,141584,141587,141588,141590],{},"里面的内容 是 ",[277,141585,141586],{},"ul > 12*li","，给",[277,141589,419],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[419,141592,141593,141594],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[698,141595,141596,141601,141610],{},[419,141597,141598,141600],{},[277,141599,141571],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[419,141602,141603,141604,141606,141607,141609],{},"可以让 ",[277,141605,141571],{}," 里面的 ",[277,141608,698],{}," 宽度为 252，就可以装的下 4 个 小 li",[419,141611,141612,141614],{},[277,141613,141571],{}," 盒子 overflow 隐藏多余的部分就可以了",[419,141616,117804,141617,141619,141620,141622,141623,141625],{},[277,141618,419],{}," 里面放一个 ",[277,141621,2249],{},"（里面放图标），下面的文本用 ",[277,141624,19],{}," 标签包裹",[419,141627,140389,141628,141630,141631,141633,141634,140423,141636,141639],{},[277,141629,2249],{}," 设置 24px宽和28px的高（注意 ",[277,141632,2249],{}," 是行内元素， 转成行内块），给 ",[277,141635,419],{},[277,141637,141638],{},"text-align:center"," 让里面内容居中显示",[19,141641,141259],{},[270,141643,141645],{"className":127889,"code":141644,"language":127891,"meta":275,"style":275},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[277,141646,141647,141665,141670,141680],{"__ignoreMap":275},[152,141648,141649,141651,141653,141655,141657,141659,141661,141663],{"class":281,"line":282},[152,141650,152],{"class":52637},[152,141652,14051],{"class":483},[152,141654,69],{"class":52637},[152,141656,14051],{"class":483},[152,141658,25168],{"class":52637},[152,141660,14051],{"class":483},[152,141662,694],{"class":52637},[152,141664,17187],{"class":483},[152,141666,141667],{"class":281,"line":303},[152,141668,141669],{"class":866},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[152,141671,141672,141674,141676,141678],{"class":281,"line":310},[152,141673,129505],{"class":293},[152,141675,52774],{"class":483},[152,141677,129567],{"class":293},[152,141679,2965],{"class":483},[152,141681,141682],{"class":281,"line":324},[152,141683,3236],{"class":483},[19,141685,141348],{},[270,141687,141688],{"className":127889,"code":141644,"language":127891,"meta":275,"style":275},[277,141689,141690,141708,141712,141722],{"__ignoreMap":275},[152,141691,141692,141694,141696,141698,141700,141702,141704,141706],{"class":281,"line":282},[152,141693,152],{"class":52637},[152,141695,14051],{"class":483},[152,141697,69],{"class":52637},[152,141699,14051],{"class":483},[152,141701,25168],{"class":52637},[152,141703,14051],{"class":483},[152,141705,694],{"class":52637},[152,141707,17187],{"class":483},[152,141709,141710],{"class":281,"line":303},[152,141711,141669],{"class":866},[152,141713,141714,141716,141718,141720],{"class":281,"line":310},[152,141715,129505],{"class":293},[152,141717,52774],{"class":483},[152,141719,129567],{"class":293},[152,141721,2965],{"class":483},[152,141723,141724],{"class":281,"line":324},[152,141725,3236],{"class":483},[19,141727,141728,141729,141732],{},"3 号盒子为 ",[277,141730,141731],{},"bargain"," 特价商品",[698,141734,141735],{},[419,141736,141737],{},"这个比较简单，直接插入一张图片即可",[19,141739,141259],{},[270,141741,141742],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,141743,141744],{"__ignoreMap":275},[152,141745,141746,141748,141750,141752,141754,141756,141758,141760,141762,141764,141766,141768],{"class":281,"line":282},[152,141747,844],{"class":483},[152,141749,401],{"class":52637},[152,141751,56576],{"class":285},[152,141753,1864],{"class":483},[152,141755,135406],{"class":289},[152,141757,56584],{"class":285},[152,141759,1864],{"class":483},[152,141761,135413],{"class":289},[152,141763,135416],{"class":285},[152,141765,1864],{"class":483},[152,141767,135421],{"class":289},[152,141769,52644],{"class":483},[19,141771,141348],{},[270,141773,141774],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,141775,141776],{"__ignoreMap":275},[152,141777,141778,141780,141782,141784,141786,141788,141790,141792,141794,141796,141798,141800],{"class":281,"line":282},[152,141779,844],{"class":483},[152,141781,401],{"class":52637},[152,141783,56576],{"class":285},[152,141785,1864],{"class":483},[152,141787,135406],{"class":289},[152,141789,56584],{"class":285},[152,141791,1864],{"class":483},[152,141793,135413],{"class":289},[152,141795,135416],{"class":285},[152,141797,1864],{"class":483},[152,141799,135421],{"class":289},[152,141801,52644],{"class":483},[14,141803,141805],{"id":141804},"_1612-推荐模块制作","16.1.2 推荐模块制作",[401,141807],{"style":127745,"src":141808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141810,141811,141812,141815],{},"大盒子 ",[277,141813,141814],{},"recom"," 推荐模块 recommend",[698,141817,141818],{},[419,141819,141820,141821,141823,141824,141827],{},"给这个 ",[277,141822,141814],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[277,141825,141826],{},"#ebebeb","），设置距离上边 12px",[19,141829,141259],{},[270,141831,141833],{"className":127889,"code":141832,"language":127891,"meta":275,"style":275},"div {\n  background-color: #f0f0f0;\n}\n",[277,141834,141835,141841,141852],{"__ignoreMap":275},[152,141836,141837,141839],{"class":281,"line":282},[152,141838,52948],{"class":52637},[152,141840,17187],{"class":483},[152,141842,141843,141845,141847,141850],{"class":281,"line":303},[152,141844,72215],{"class":293},[152,141846,52774],{"class":483},[152,141848,141849],{"class":293},"#f0f0f0",[152,141851,2965],{"class":483},[152,141853,141854],{"class":281,"line":310},[152,141855,3236],{"class":483},[19,141857,141348],{},[270,141859,141860],{"className":127889,"code":141832,"language":127891,"meta":275,"style":275},[277,141861,141862,141868,141878],{"__ignoreMap":275},[152,141863,141864,141866],{"class":281,"line":282},[152,141865,52948],{"class":52637},[152,141867,17187],{"class":483},[152,141869,141870,141872,141874,141876],{"class":281,"line":303},[152,141871,72215],{"class":293},[152,141873,52774],{"class":483},[152,141875,141849],{"class":293},[152,141877,2965],{"class":483},[152,141879,141880],{"class":281,"line":310},[152,141881,3236],{"class":483},[19,141883,141884],{},"里面包含 2 个盒子， 浮动即可",[19,141886,141259],{},[270,141888,141889],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},[277,141890,141891,141897,141907],{"__ignoreMap":275},[152,141892,141893,141895],{"class":281,"line":282},[152,141894,131737],{"class":285},[152,141896,17187],{"class":483},[152,141898,141899,141901,141903,141905],{"class":281,"line":303},[152,141900,132369],{"class":293},[152,141902,52774],{"class":483},[152,141904,34],{"class":293},[152,141906,2965],{"class":483},[152,141908,141909],{"class":281,"line":310},[152,141910,3236],{"class":483},[19,141912,141913,141914],{},"1 号盒子 ",[277,141915,141916],{},"recom_hd",[698,141918,141919,141922],{},[419,141920,141921],{},"设置宽度205px，高度163px",[419,141923,141393,141924,141926],{},[277,141925,401],{},"标签，插入图片即可",[19,141928,141259],{},[270,141930,141931],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,141932,141933],{"__ignoreMap":275},[152,141934,141935,141937,141939,141941,141943,141945,141947,141949,141951,141953,141955,141957],{"class":281,"line":282},[152,141936,844],{"class":483},[152,141938,401],{"class":52637},[152,141940,56576],{"class":285},[152,141942,1864],{"class":483},[152,141944,135406],{"class":289},[152,141946,56584],{"class":285},[152,141948,1864],{"class":483},[152,141950,135413],{"class":289},[152,141952,135416],{"class":285},[152,141954,1864],{"class":483},[152,141956,135421],{"class":289},[152,141958,52644],{"class":483},[19,141960,141348],{},[270,141962,141963],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,141964,141965],{"__ignoreMap":275},[152,141966,141967,141969,141971,141973,141975,141977,141979,141981,141983,141985,141987,141989],{"class":281,"line":282},[152,141968,844],{"class":483},[152,141970,401],{"class":52637},[152,141972,56576],{"class":285},[152,141974,1864],{"class":483},[152,141976,135406],{"class":289},[152,141978,56584],{"class":285},[152,141980,1864],{"class":483},[152,141982,135413],{"class":289},[152,141984,135416],{"class":285},[152,141986,1864],{"class":483},[152,141988,135421],{"class":289},[152,141990,52644],{"class":483},[19,141992,141993,141994,141997],{},"2 号盒子 ",[277,141995,141996],{},"recom_bd"," ，注意里面的小竖线",[698,141999,142000,142011,142014,142019,142024],{},[419,142001,142002,142003,142005,142006,142008,142009],{},"右侧结构里面放 ",[277,142004,698],{}," 包含 4个 ",[277,142007,419],{},"，每个li里面包含一个",[277,142010,401],{},[419,142012,142013],{},"直接利用切片工具把里面的内容当成一张图片",[419,142015,140389,142016,142018],{},[277,142017,419],{}," 设置浮动",[419,142020,140389,142021,142023],{},[277,142022,401],{}," 设置宽高，宽度 248px，高度 163px",[419,142025,142026,142027,141587,142030,142032,142033,142035,142036],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[277,142028,142029],{},"top 10px",[277,142031,419],{},"设置相对定位（注意，最后一个",[277,142034,419],{},"不用设置伪元素），可以利用 ",[277,142037,142038],{},"nth-child(-n+3){...}",[19,142040,141259],{},[270,142042,142043],{"className":127889,"code":139731,"language":127891,"meta":275,"style":275},[277,142044,142045,142053,142063,142073],{"__ignoreMap":275},[152,142046,142047,142049,142051],{"class":281,"line":282},[152,142048,52948],{"class":52637},[152,142050,138890],{"class":285},[152,142052,17187],{"class":483},[152,142054,142055,142057,142059,142061],{"class":281,"line":303},[152,142056,138897],{"class":293},[152,142058,52774],{"class":483},[152,142060,9294],{"class":289},[152,142062,2965],{"class":483},[152,142064,142065,142067,142069,142071],{"class":281,"line":310},[152,142066,129505],{"class":293},[152,142068,52774],{"class":483},[152,142070,62206],{"class":293},[152,142072,2965],{"class":483},[152,142074,142075],{"class":281,"line":324},[152,142076,3236],{"class":483},[19,142078,141348],{},[270,142080,142081],{"className":127889,"code":139731,"language":127891,"meta":275,"style":275},[277,142082,142083,142091,142101,142111],{"__ignoreMap":275},[152,142084,142085,142087,142089],{"class":281,"line":282},[152,142086,52948],{"class":52637},[152,142088,138890],{"class":285},[152,142090,17187],{"class":483},[152,142092,142093,142095,142097,142099],{"class":281,"line":303},[152,142094,138897],{"class":293},[152,142096,52774],{"class":483},[152,142098,9294],{"class":289},[152,142100,2965],{"class":483},[152,142102,142103,142105,142107,142109],{"class":281,"line":310},[152,142104,129505],{"class":293},[152,142106,52774],{"class":483},[152,142108,62206],{"class":293},[152,142110,2965],{"class":483},[152,142112,142113],{"class":281,"line":324},[152,142114,3236],{"class":483},[14,142116,142118],{"id":142117},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[401,142120],{"style":127745,"src":142121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142123,142124],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142126,142127],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142129,142130,142133],{},[277,142131,142132],{},"box_hd"," 制作",[19,142135,141913,142136,142138],{},[277,142137,142132],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[401,142140],{"style":127745,"src":142141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[698,142143,142144,142149,142154,142157],{},[419,142145,142146,142148],{},[277,142147,142132],{}," 给 30px 的高度，2个像素的下边框",[419,142150,142151,142152],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[277,142153,140400],{},[419,142155,142156],{},"左侧盒左浮动，右侧盒子右浮动",[419,142158,142159,142161,142162,142164],{},[277,142160,69],{},"标签之间的距离用左右的",[277,142163,32220],{},"撑开即可",[19,142166,142167],{},"结构代码",[270,142169,142170],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},[277,142171,142172,142178,142188],{"__ignoreMap":275},[152,142173,142174,142176],{"class":281,"line":282},[152,142175,131737],{"class":285},[152,142177,17187],{"class":483},[152,142179,142180,142182,142184,142186],{"class":281,"line":303},[152,142181,132369],{"class":293},[152,142183,52774],{"class":483},[152,142185,34],{"class":293},[152,142187,2965],{"class":483},[152,142189,142190],{"class":281,"line":310},[152,142191,3236],{"class":483},[19,142193,142194],{},"样式代码",[270,142196,142197],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},[277,142198,142199,142205,142215],{"__ignoreMap":275},[152,142200,142201,142203],{"class":281,"line":282},[152,142202,131737],{"class":285},[152,142204,17187],{"class":483},[152,142206,142207,142209,142211,142213],{"class":281,"line":303},[152,142208,132369],{"class":293},[152,142210,52774],{"class":483},[152,142212,34],{"class":293},[152,142214,2965],{"class":483},[152,142216,142217],{"class":281,"line":310},[152,142218,3236],{"class":483},[19,142220,142221,142133],{},[277,142222,142223],{},"box_bd",[19,142225,142226],{},"2 号盒子 box_bd，不要给高度",[401,142228],{"style":127745,"src":142229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142231,142232],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142234,142235],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142237,142238],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[698,142240,142241,142253,142269],{},[419,142242,142243,142245,142246,142249,142250,142252],{},[277,142244,142223],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[277,142247,142248],{},"tab_content","，在",[277,142251,142248],{}," 里面包裹tab选项卡对应的内容",[419,142254,142255,142256,142259,142260,142262,142263,142265,142266,142268],{},"内容被一个大盒子包裹（",[277,142257,142258],{},"tab_list_item","），里面是 ",[277,142261,698],{}," 包裹 5个 ",[277,142264,419],{},"，每个",[277,142267,419],{},"设置对应的宽度，然后设置浮动",[419,142270,142271,142272,142274,142275,142277,142278],{},"而这5个",[277,142273,419],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[277,142276,419],{},"设置",[698,142279,142280,142298,142301],{},[419,142281,142282,142283,142285,142286,142288,142289,142291,142292,142294,142295,142297],{},"第一个小 ",[277,142284,419],{}," 分为上下结构，上面是 ",[277,142287,698],{}," 包裹 ",[277,142290,419],{}," ，",[277,142293,419],{},"里面包裹 ",[277,142296,69],{},"，下面插入一张图片",[419,142299,142300],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[419,142302,142303,142304,142306,142307,142309,142310,142312],{},"后面的小 ",[277,142305,419],{}," 里面先放一个",[277,142308,69],{},"标签，然后在",[277,142311,69],{},"标签里面插入图片即可",[19,142314,142167],{},[270,142316,142317],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,142318,142319],{"__ignoreMap":275},[152,142320,142321,142323,142325,142327,142329,142331,142333,142335,142337,142339,142341,142343],{"class":281,"line":282},[152,142322,844],{"class":483},[152,142324,401],{"class":52637},[152,142326,56576],{"class":285},[152,142328,1864],{"class":483},[152,142330,135406],{"class":289},[152,142332,56584],{"class":285},[152,142334,1864],{"class":483},[152,142336,135413],{"class":289},[152,142338,135416],{"class":285},[152,142340,1864],{"class":483},[152,142342,135421],{"class":289},[152,142344,52644],{"class":483},[19,142346,142194],{},[270,142348,142349],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,142350,142351],{"__ignoreMap":275},[152,142352,142353,142355,142357,142359,142361,142363,142365,142367,142369,142371,142373,142375],{"class":281,"line":282},[152,142354,844],{"class":483},[152,142356,401],{"class":52637},[152,142358,56576],{"class":285},[152,142360,1864],{"class":483},[152,142362,135406],{"class":289},[152,142364,56584],{"class":285},[152,142366,1864],{"class":483},[152,142368,135413],{"class":289},[152,142370,135416],{"class":285},[152,142372,1864],{"class":483},[152,142374,135421],{"class":289},[152,142376,52644],{"class":483},[19,142378,142379],{},"tab栏切换需求！！！！！！介绍：",[401,142381],{"style":127745,"src":142382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[698,142384,142385,142393,142399,142402],{},[419,142386,142387,142390,142391],{},[277,142388,142389],{},"tab","栏的布局是 ",[277,142392,140400],{},[419,142394,142395,142396,142398],{},"有多少个",[277,142397,142389],{},"选项卡，那么对应就有多少个内容",[419,142400,142401],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[419,142403,142404,142405,142408,142409,142411,142412,142414],{},"等后面我们学习了",[277,142406,142407],{},"js","之后，我们就会配合",[277,142410,142407],{},"来实现，",[277,142413,142389],{},"栏的切换",[1760,142416,142418],{"id":142417},"_162-列表制作","16.2 列表制作",[14,142420,142422],{"id":142421},"_1621-准备工作","16.2.1 准备工作",[698,142424,142425,142428,142431,142434],{},[419,142426,142427],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[419,142429,142430],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[419,142432,142433],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[419,142435,142436],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[14,142438,142440,142441,102355,142443,142445],{"id":142439},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[277,142442,132894],{},[277,142444,55050],{}," 修改",[401,142447],{"style":127745,"src":142448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[698,142450,142451],{},[419,142452,142453],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142455,141259],{},[270,142457,142458],{"className":127889,"code":133321,"language":127891,"meta":275,"style":275},[277,142459,142460,142464,142478,142482,142496,142500,142514,142518,142532,142536],{"__ignoreMap":275},[152,142461,142462],{"class":281,"line":282},[152,142463,133328],{"class":866},[152,142465,142466,142468,142470,142472,142474,142476],{"class":281,"line":303},[152,142467,133333],{"class":285},[152,142469,81144],{"class":483},[152,142471,130249],{"class":293},[152,142473,52774],{"class":483},[152,142475,133342],{"class":293},[152,142477,130819],{"class":483},[152,142479,142480],{"class":281,"line":310},[152,142481,133349],{"class":866},[152,142483,142484,142486,142488,142490,142492,142494],{"class":281,"line":324},[152,142485,133354],{"class":285},[152,142487,81144],{"class":483},[152,142489,130249],{"class":293},[152,142491,52774],{"class":483},[152,142493,56101],{"class":293},[152,142495,130819],{"class":483},[152,142497,142498],{"class":281,"line":329},[152,142499,133369],{"class":866},[152,142501,142502,142504,142506,142508,142510,142512],{"class":281,"line":343},[152,142503,133374],{"class":285},[152,142505,81144],{"class":483},[152,142507,130249],{"class":293},[152,142509,52774],{"class":483},[152,142511,56168],{"class":293},[152,142513,130819],{"class":483},[152,142515,142516],{"class":281,"line":348},[152,142517,133389],{"class":866},[152,142519,142520,142522,142524,142526,142528,142530],{"class":281,"line":362},[152,142521,133394],{"class":285},[152,142523,81144],{"class":483},[152,142525,130249],{"class":293},[152,142527,52774],{"class":483},[152,142529,87570],{"class":293},[152,142531,130819],{"class":483},[152,142533,142534],{"class":281,"line":367},[152,142535,133409],{"class":866},[152,142537,142538,142540,142542,142544,142546,142548],{"class":281,"line":381},[152,142539,133414],{"class":285},[152,142541,81144],{"class":483},[152,142543,130249],{"class":293},[152,142545,52774],{"class":483},[152,142547,133423],{"class":293},[152,142549,130819],{"class":483},[19,142551,141348],{},[270,142553,142554],{"className":127889,"code":133321,"language":127891,"meta":275,"style":275},[277,142555,142556,142560,142574,142578,142592,142596,142610,142614,142628,142632],{"__ignoreMap":275},[152,142557,142558],{"class":281,"line":282},[152,142559,133328],{"class":866},[152,142561,142562,142564,142566,142568,142570,142572],{"class":281,"line":303},[152,142563,133333],{"class":285},[152,142565,81144],{"class":483},[152,142567,130249],{"class":293},[152,142569,52774],{"class":483},[152,142571,133342],{"class":293},[152,142573,130819],{"class":483},[152,142575,142576],{"class":281,"line":310},[152,142577,133349],{"class":866},[152,142579,142580,142582,142584,142586,142588,142590],{"class":281,"line":324},[152,142581,133354],{"class":285},[152,142583,81144],{"class":483},[152,142585,130249],{"class":293},[152,142587,52774],{"class":483},[152,142589,56101],{"class":293},[152,142591,130819],{"class":483},[152,142593,142594],{"class":281,"line":329},[152,142595,133369],{"class":866},[152,142597,142598,142600,142602,142604,142606,142608],{"class":281,"line":343},[152,142599,133374],{"class":285},[152,142601,81144],{"class":483},[152,142603,130249],{"class":293},[152,142605,52774],{"class":483},[152,142607,56168],{"class":293},[152,142609,130819],{"class":483},[152,142611,142612],{"class":281,"line":348},[152,142613,133389],{"class":866},[152,142615,142616,142618,142620,142622,142624,142626],{"class":281,"line":362},[152,142617,133394],{"class":285},[152,142619,81144],{"class":483},[152,142621,130249],{"class":293},[152,142623,52774],{"class":483},[152,142625,87570],{"class":293},[152,142627,130819],{"class":483},[152,142629,142630],{"class":281,"line":367},[152,142631,133409],{"class":866},[152,142633,142634,142636,142638,142640,142642,142644],{"class":281,"line":381},[152,142635,133414],{"class":285},[152,142637,81144],{"class":483},[152,142639,130249],{"class":293},[152,142641,52774],{"class":483},[152,142643,133423],{"class":293},[152,142645,130819],{"class":483},[698,142647,142648,142659],{},[419,142649,142650,142651,142654,142655,102355,142657],{},"1 号盒子左侧浮动 ",[277,142652,142653],{},"sk_list"," 里面包含 ",[277,142656,698],{},[277,142658,419],{},[419,142660,142661,142662,142654,142665,102355,142667],{},"2 号盒子左侧浮动 ",[277,142663,142664],{},"sk_con",[277,142666,698],{},[277,142668,419],{},[19,142670,141259],{},[270,142672,142673],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},[277,142674,142675,142681,142691],{"__ignoreMap":275},[152,142676,142677,142679],{"class":281,"line":282},[152,142678,131737],{"class":285},[152,142680,17187],{"class":483},[152,142682,142683,142685,142687,142689],{"class":281,"line":303},[152,142684,132369],{"class":293},[152,142686,52774],{"class":483},[152,142688,34],{"class":293},[152,142690,2965],{"class":483},[152,142692,142693],{"class":281,"line":310},[152,142694,3236],{"class":483},[19,142696,141348],{},[270,142698,142699],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},[277,142700,142701,142707,142717],{"__ignoreMap":275},[152,142702,142703,142705],{"class":281,"line":282},[152,142704,131737],{"class":285},[152,142706,17187],{"class":483},[152,142708,142709,142711,142713,142715],{"class":281,"line":303},[152,142710,132369],{"class":293},[152,142712,52774],{"class":483},[152,142714,34],{"class":293},[152,142716,2965],{"class":483},[152,142718,142719],{"class":281,"line":310},[152,142720,3236],{"class":483},[14,142722,142724,142725],{"id":142723},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[277,142726,142727],{},"sk_container",[401,142729],{"style":127745,"src":142730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[698,142732,142733,142738],{},[419,142734,141913,142735,142737],{},[277,142736,142727],{}," 给宽度 1200，不要给高度",[419,142739,142740],{},"一定不要忘记清除浮动",[19,142742,141259],{},[270,142744,142745],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},[277,142746,142747,142753,142763],{"__ignoreMap":275},[152,142748,142749,142751],{"class":281,"line":282},[152,142750,131737],{"class":285},[152,142752,17187],{"class":483},[152,142754,142755,142757,142759,142761],{"class":281,"line":303},[152,142756,132369],{"class":293},[152,142758,52774],{"class":483},[152,142760,34],{"class":293},[152,142762,2965],{"class":483},[152,142764,142765],{"class":281,"line":310},[152,142766,3236],{"class":483},[416,142768,142769],{},[419,142770,142771],{},"sk_hd制作",[698,142773,142774],{},[419,142775,141993,142776,142779],{},[277,142777,142778],{},"sk_hd"," ，插入图片即可",[19,142781,141259],{},[270,142783,142784],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,142785,142786],{"__ignoreMap":275},[152,142787,142788,142790,142792,142794,142796,142798,142800,142802,142804,142806,142808,142810],{"class":281,"line":282},[152,142789,844],{"class":483},[152,142791,401],{"class":52637},[152,142793,56576],{"class":285},[152,142795,1864],{"class":483},[152,142797,135406],{"class":289},[152,142799,56584],{"class":285},[152,142801,1864],{"class":483},[152,142803,135413],{"class":289},[152,142805,135416],{"class":285},[152,142807,1864],{"class":483},[152,142809,135421],{"class":289},[152,142811,52644],{"class":483},[416,142813,142814],{"start":303},[419,142815,142816],{},"sk_bd制作",[698,142818,142819],{},[419,142820,142821,142822,142825,142826,102355,142828,142830],{},"3 号盒子 ",[277,142823,142824],{},"sk_bd"," ，里面包含很多的 ",[277,142827,698],{},[277,142829,419],{},[698,142831,142832,142841],{},[419,142833,142834,142835,142837,142838,142840],{},"当鼠标移入到 ",[277,142836,419],{}," 上面的时候显示红色的边框，在这里先给 ",[277,142839,419],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[419,142842,142843,142844,142846,142847,142849,142850,142853,142854,142856],{},"由于给每个 ",[277,142845,419],{}," 都设置了外边距，导致一行的最后一个 ",[277,142848,419],{}," 掉了下来，在这里我们利用 ",[277,142851,142852],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[277,142855,419],{},"，去掉外边距就好了",[19,142858,141259],{},[270,142860,142861],{"className":127889,"code":140078,"language":127891,"meta":275,"style":275},[277,142862,142863,142869,142881],{"__ignoreMap":275},[152,142864,142865,142867],{"class":281,"line":282},[152,142866,52948],{"class":52637},[152,142868,17187],{"class":483},[152,142870,142871,142873,142875,142877,142879],{"class":281,"line":303},[152,142872,71807],{"class":293},[152,142874,52774],{"class":483},[152,142876,2000],{"class":293},[152,142878,52893],{"class":293},[152,142880,2965],{"class":483},[152,142882,142883],{"class":281,"line":310},[152,142884,3236],{"class":483},[19,142886,141348],{},[270,142888,142889],{"className":127889,"code":140078,"language":127891,"meta":275,"style":275},[277,142890,142891,142897,142909],{"__ignoreMap":275},[152,142892,142893,142895],{"class":281,"line":282},[152,142894,52948],{"class":52637},[152,142896,17187],{"class":483},[152,142898,142899,142901,142903,142905,142907],{"class":281,"line":303},[152,142900,71807],{"class":293},[152,142902,52774],{"class":483},[152,142904,2000],{"class":293},[152,142906,52893],{"class":293},[152,142908,2965],{"class":483},[152,142910,142911],{"class":281,"line":310},[152,142912,3236],{"class":483},[1760,142914,142916],{"id":142915},"_163-注册页面制作","16.3 注册页面制作",[401,142918],{"style":127745,"src":142919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142921,142922,142924],{},[694,142923,10657],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[401,142926],{"style":127745,"src":142927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[14,142929,142931],{"id":142930},"_1631-准备工作","16.3.1 准备工作",[698,142933,142934,142937],{},[419,142935,142936],{},"创建register.html，引入 base.css，引入favicon图标",[419,142938,142939],{},"创建register.css ，在html页面进行引入",[14,142941,142943,142944,142946],{"id":142942},"_1632-header-头部实现","16.3.2 ",[277,142945,132894],{}," 头部实现",[698,142948,142949,142952],{},[419,142950,142951],{},"整个内容用 版心 进行包裹",[419,142953,142954],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142956,141259],{},[270,142958,142959],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,142960,142961],{"__ignoreMap":275},[152,142962,142963,142965,142967,142969,142971,142973,142975,142977,142979,142981,142983,142985],{"class":281,"line":282},[152,142964,844],{"class":483},[152,142966,401],{"class":52637},[152,142968,56576],{"class":285},[152,142970,1864],{"class":483},[152,142972,135406],{"class":289},[152,142974,56584],{"class":285},[152,142976,1864],{"class":483},[152,142978,135413],{"class":289},[152,142980,135416],{"class":285},[152,142982,1864],{"class":483},[152,142984,135421],{"class":289},[152,142986,52644],{"class":483},[19,142988,141348],{},[270,142990,142991],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,142992,142993],{"__ignoreMap":275},[152,142994,142995,142997,142999,143001,143003,143005,143007,143009,143011,143013,143015,143017],{"class":281,"line":282},[152,142996,844],{"class":483},[152,142998,401],{"class":52637},[152,143000,56576],{"class":285},[152,143002,1864],{"class":483},[152,143004,135406],{"class":289},[152,143006,56584],{"class":285},[152,143008,1864],{"class":483},[152,143010,135413],{"class":289},[152,143012,135416],{"class":285},[152,143014,1864],{"class":483},[152,143016,135421],{"class":289},[152,143018,52644],{"class":483},[14,143020,143022,143023,143026],{"id":143021},"_1633-registerarea-主体模块实现","16.3.3 ",[277,143024,143025],{},"registerarea"," 主体模块实现",[401,143028],{"style":127745,"src":143029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143031,143032],{},"整个大盒子 高度为 522px，设置4个边框",[19,143034,141259],{},[270,143036,143037],{"className":127889,"code":132046,"language":127891,"meta":275,"style":275},[277,143038,143039,143045,143061],{"__ignoreMap":275},[152,143040,143041,143043],{"class":281,"line":282},[152,143042,52948],{"class":52637},[152,143044,17187],{"class":483},[152,143046,143047,143049,143051,143053,143055,143057,143059],{"class":281,"line":303},[152,143048,72233],{"class":293},[152,143050,52774],{"class":483},[152,143052,2026],{"class":293},[152,143054,52829],{"class":476},[152,143056,52858],{"class":293},[152,143058,131281],{"class":293},[152,143060,2965],{"class":483},[152,143062,143063],{"class":281,"line":310},[152,143064,3236],{"class":483},[19,143066,141348],{},[270,143068,143069],{"className":127889,"code":132046,"language":127891,"meta":275,"style":275},[277,143070,143071,143077,143093],{"__ignoreMap":275},[152,143072,143073,143075],{"class":281,"line":282},[152,143074,52948],{"class":52637},[152,143076,17187],{"class":483},[152,143078,143079,143081,143083,143085,143087,143089,143091],{"class":281,"line":303},[152,143080,72233],{"class":293},[152,143082,52774],{"class":483},[152,143084,2026],{"class":293},[152,143086,52829],{"class":476},[152,143088,52858],{"class":293},[152,143090,131281],{"class":293},[152,143092,2965],{"class":483},[152,143094,143095],{"class":281,"line":310},[152,143096,3236],{"class":483},[19,143098,143099],{},"1号盒子 是一个 h3 标签，放标题",[698,143101,143102],{},[419,143103,143104],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143106,141259],{},[270,143108,143109],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},[277,143110,143111,143117,143127],{"__ignoreMap":275},[152,143112,143113,143115],{"class":281,"line":282},[152,143114,131737],{"class":285},[152,143116,17187],{"class":483},[152,143118,143119,143121,143123,143125],{"class":281,"line":303},[152,143120,132369],{"class":293},[152,143122,52774],{"class":483},[152,143124,34],{"class":293},[152,143126,2965],{"class":483},[152,143128,143129],{"class":281,"line":310},[152,143130,3236],{"class":483},[19,143132,141348],{},[270,143134,143135],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},[277,143136,143137,143143,143153],{"__ignoreMap":275},[152,143138,143139,143141],{"class":281,"line":282},[152,143140,131737],{"class":285},[152,143142,17187],{"class":483},[152,143144,143145,143147,143149,143151],{"class":281,"line":303},[152,143146,132369],{"class":293},[152,143148,52774],{"class":483},[152,143150,34],{"class":293},[152,143152,2965],{"class":483},[152,143154,143155],{"class":281,"line":310},[152,143156,3236],{"class":483},[19,143158,143159],{},"2号盒子 里面放注册的内容",[698,143161,143162,143165,143174,143188,143201,143204,143207,143225,143239],{},[419,143163,143164],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[419,143166,143167,143168,143170,143171,143173],{},"里面的内容利用 ",[277,143169,698],{}," 包含 ",[277,143172,419],{}," 来实现的（不需要用表格）",[419,143175,140403,143176,143178,143179,143181,143182,143184,143185,143187],{},[277,143177,419],{}," 里面，左侧放 ",[277,143180,34945],{}," 标签， 中间放",[277,143183,55158],{}," 标签， 右侧放 ",[277,143186,152],{}," 提示信息",[419,143189,143190,143191,143193,143194,143196,143197,143200],{},"左侧 ",[277,143192,34945],{},"里面的文字都是右对齐，我们可以给",[277,143195,34945],{},"设置一个宽度（88px），然后利用",[277,143198,143199],{},"text-align"," 来设置右对齐",[419,143202,143203],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[419,143205,143206],{},"右侧 span修饰一下文字颜色",[419,143208,143209,143210],{},"提示信息的样式优化",[698,143211,143212,143215,143218],{},[419,143213,143214],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[419,143216,143217],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[419,143219,143220,143221,143224],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[277,143222,143223],{},"vertical-algin"," 来设置 图片与文字对齐方式",[419,143226,143227,143228],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[698,143229,143230,143236],{},[419,143231,143232,143233,143235],{},"设置 ",[277,143234,25168],{}," 的 左右 12px 的内边距，设置一下文字颜色",[419,143237,143238],{},"分别设置 背景颜色",[419,143240,143241,143242,143244],{},"同意协议 和 完成注册 都是用 ",[277,143243,419],{}," 进行包裹",[19,143246,141259],{},[270,143248,143249],{"className":127889,"code":141832,"language":127891,"meta":275,"style":275},[277,143250,143251,143257,143267],{"__ignoreMap":275},[152,143252,143253,143255],{"class":281,"line":282},[152,143254,52948],{"class":52637},[152,143256,17187],{"class":483},[152,143258,143259,143261,143263,143265],{"class":281,"line":303},[152,143260,72215],{"class":293},[152,143262,52774],{"class":483},[152,143264,141849],{"class":293},[152,143266,2965],{"class":483},[152,143268,143269],{"class":281,"line":310},[152,143270,3236],{"class":483},[19,143272,141348],{},[270,143274,143275],{"className":127889,"code":141832,"language":127891,"meta":275,"style":275},[277,143276,143277,143283,143293],{"__ignoreMap":275},[152,143278,143279,143281],{"class":281,"line":282},[152,143280,52948],{"class":52637},[152,143282,17187],{"class":483},[152,143284,143285,143287,143289,143291],{"class":281,"line":303},[152,143286,72215],{"class":293},[152,143288,52774],{"class":483},[152,143290,141849],{"class":293},[152,143292,2965],{"class":483},[152,143294,143295],{"class":281,"line":310},[152,143296,3236],{"class":483},[14,143298,143300],{"id":143299},"_1634-底部实现","16.3.4 底部实现",[19,143302,141259],{},[270,143304,143305],{"className":127889,"code":141832,"language":127891,"meta":275,"style":275},[277,143306,143307,143313,143323],{"__ignoreMap":275},[152,143308,143309,143311],{"class":281,"line":282},[152,143310,52948],{"class":52637},[152,143312,17187],{"class":483},[152,143314,143315,143317,143319,143321],{"class":281,"line":303},[152,143316,72215],{"class":293},[152,143318,52774],{"class":483},[152,143320,141849],{"class":293},[152,143322,2965],{"class":483},[152,143324,143325],{"class":281,"line":310},[152,143326,3236],{"class":483},[19,143328,141348],{},[270,143330,143331],{"className":128636,"code":131993,"language":128638,"meta":275,"style":275},[277,143332,143333,143337,143351,143355],{"__ignoreMap":275},[152,143334,143335],{"class":281,"line":282},[152,143336,132000],{"class":866},[152,143338,143339,143341,143343,143345,143347,143349],{"class":281,"line":303},[152,143340,844],{"class":483},[152,143342,52948],{"class":52637},[152,143344,54823],{"class":285},[152,143346,1864],{"class":483},[152,143348,132013],{"class":289},[152,143350,52644],{"class":483},[152,143352,143353],{"class":281,"line":310},[152,143354,132020],{"class":483},[152,143356,143357,143359,143361],{"class":281,"line":324},[152,143358,53122],{"class":483},[152,143360,52948],{"class":52637},[152,143362,52644],{"class":483},[1760,143364,143366],{"id":143365},"_164-项目总结","16.4 项目总结",[416,143368,143369,143372,143375,143378],{},[419,143370,143371],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[419,143373,143374],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[419,143376,143377],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[419,143379,143380],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[401,143382],{"style":127745,"src":143383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[416,143385,143386],{"start":329},[419,143387,143388],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[401,143390],{"style":127745,"src":143391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[416,143393,143394],{"start":343},[419,143395,143396],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[401,143398],{"style":127745,"src":143399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[270,143401,143402],{"className":128636,"code":138046,"language":128638,"meta":275,"style":275},[277,143403,143404],{"__ignoreMap":275},[152,143405,143406,143408,143410,143412,143414,143416,143418,143420,143422,143424,143426,143428],{"class":281,"line":282},[152,143407,844],{"class":483},[152,143409,55158],{"class":52637},[152,143411,55161],{"class":285},[152,143413,1864],{"class":483},[152,143415,64036],{"class":289},[152,143417,16535],{"class":285},[152,143419,1864],{"class":483},[152,143421,138067],{"class":289},[152,143423,62357],{"class":285},[152,143425,1864],{"class":483},[152,143427,138074],{"class":289},[152,143429,52644],{"class":483},[416,143431,143432,143435],{"start":348},[419,143433,143434],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[419,143436,143437],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1736,143439,143440],{},"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":275,"searchDepth":303,"depth":303,"links":143442},[143443,143448,143455,143463],{"id":141069,"depth":303,"text":141070,"children":143444},[143445,143446,143447],{"id":141073,"depth":310,"text":141074},{"id":141804,"depth":310,"text":141805},{"id":142117,"depth":310,"text":142118},{"id":142417,"depth":303,"text":142418,"children":143449},[143450,143451,143453],{"id":142421,"depth":310,"text":142422},{"id":142439,"depth":310,"text":143452},"16.2.2 列表页 header 和 nav 修改",{"id":142723,"depth":310,"text":143454},"16.2.3 列表页主体 sk_container",{"id":142915,"depth":303,"text":142916,"children":143456},[143457,143458,143460,143462],{"id":142930,"depth":310,"text":142931},{"id":142942,"depth":310,"text":143459},"16.3.2 header 头部实现",{"id":143021,"depth":310,"text":143461},"16.3.3 registerarea 主体模块实现",{"id":143299,"depth":310,"text":143300},{"id":143365,"depth":303,"text":143366},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141061,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143470,"title":143471,"body":143472,"description":24991,"extension":1744,"meta":143580,"navigation":306,"path":143581,"seo":143582,"stem":143583,"__hash__":143584},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143473,"toc":143575},[143474,143477,143481,143484,143487,143496,143505,143509,143514,143521,143539,143542,143545,143548,143551,143554,143557,143560,143563,143566,143569,143572],[10,143475,143471],{"id":143476},"_17-web服务器与网站发布",[1760,143478,143480],{"id":143479},"_171-web服务器","17.1 Web服务器",[19,143482,143483],{},"把自己网站上传到服务器上，可以让其他人访问",[401,143485],{"style":127745,"src":143486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143488,143489,143492,143493],{},[694,143490,143491],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[694,143494,143495],{},"Web 服务器等",[19,143497,143498,143499,102355,143502,27351],{},"根据服务器在网络中所在的位置不同，又可分为 ",[694,143500,143501],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[694,143503,143504],{},"远程服务器",[14,143506,143508],{"id":143507},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143510,143511],{},[694,143512,143513],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143515,143516,143517],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[69,143518,143519],{"href":143519,"rel":143520},"http:\u002F\u002Ffree.3v.do\u002F",[245],[698,143522,143523,143526,143529,143536],{},[419,143524,143525],{},"去免费空间网站注册账号。",[419,143527,143528],{},"记录下主机名、用户名、密码、域名。",[419,143530,143531,143532,143535],{},"利用 ",[277,143533,143534],{},"utftp"," 软件 上传网站到远程服务器",[419,143537,143538],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143540,143541],{},"使用软件上传，对上传软件文件进行解压",[401,143543],{"style":127745,"src":143544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[401,143546],{"style":127745,"src":143547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143549,143550],{},"输入刚刚申请的服务器账号信息：",[401,143552],{"style":127745,"src":143553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[401,143555],{"style":127745,"src":143556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[401,143558],{"style":127745,"src":143559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[401,143561],{"style":127745,"src":143562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143564,143565],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[401,143567],{"style":127745,"src":143568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143570,143571],{},"浏览器输入域名即可访问",[19,143573,143574],{},"首页一定必须是index",{"title":275,"searchDepth":303,"depth":303,"links":143576},[143577],{"id":143479,"depth":303,"text":143480,"children":143578},[143579],{"id":143507,"depth":310,"text":143508},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143471,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143586,"title":143587,"body":143588,"description":24991,"extension":1744,"meta":144515,"navigation":306,"path":144516,"seo":144517,"stem":144518,"__hash__":144519},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143589,"toc":144498},[143590,143593,143597,143600,143603,143614,143617,143621,143625,143630,143633,143636,143639,143642,143646,143672,143676,143680,143683,143686,143690,143723,143727,143730,143733,143797,143801,143805,143808,143811,143814,143818,143863,143867,143870,143900,143904,143908,143911,143914,143918,143921,143990,143993,144101,144103,144109,144113,144116,144119,144215,144218,144222,144246,144250,144253,144257,144260,144264,144267,144270,144273,144276,144280,144283,144286,144290,144294,144297,144300,144303,144306,144310,144313,144317,144320,144323,144368,144372,144376,144379,144382,144385,144417,144421,144424,144458,144462,144465,144495],[10,143591,143587],{"id":143592},"_18-2d动画与3d转换",[1760,143594,143596],{"id":143595},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143598,143599],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143601,143602],{},"转换（transform）你可以简单理解为变形",[698,143604,143605,143608,143611],{},[419,143606,143607],{},"移动：translate",[419,143609,143610],{},"旋转：rotate",[419,143612,143613],{},"缩放：scale",[401,143615],{"style":127745,"src":143616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[14,143618,143620],{"id":143619},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[262,143622,143624],{"id":143623},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143626,143627,143628],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[694,143629,134548],{},[401,143631],{"style":127745,"src":143632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143634,143635],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143637,143638],{},"对于行内元素无效",[19,143640,143641],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[262,143643,143645],{"id":143644},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[270,143647,143648],{"className":127889,"code":140078,"language":127891,"meta":275,"style":275},[277,143649,143650,143656,143668],{"__ignoreMap":275},[152,143651,143652,143654],{"class":281,"line":282},[152,143653,52948],{"class":52637},[152,143655,17187],{"class":483},[152,143657,143658,143660,143662,143664,143666],{"class":281,"line":303},[152,143659,71807],{"class":293},[152,143661,52774],{"class":483},[152,143663,2000],{"class":293},[152,143665,52893],{"class":293},[152,143667,2965],{"class":483},[152,143669,143670],{"class":281,"line":310},[152,143671,3236],{"class":483},[14,143673,143675],{"id":143674},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[262,143677,143679],{"id":143678},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143681,143682],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[401,143684],{"style":127745,"src":143685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[262,143687,143689],{"id":143688},"_18122-旋转效果","18.1.2.2 旋转效果",[270,143691,143693],{"className":127889,"code":143692,"language":127891,"meta":275,"style":275},"div {\n  transform: rotate(45deg);\n}\n",[277,143694,143695,143701,143719],{"__ignoreMap":275},[152,143696,143697,143699],{"class":281,"line":282},[152,143698,52948],{"class":52637},[152,143700,17187],{"class":483},[152,143702,143703,143705,143707,143710,143712,143714,143717],{"class":281,"line":303},[152,143704,137873],{"class":293},[152,143706,52774],{"class":483},[152,143708,143709],{"class":293},"rotate",[152,143711,1819],{"class":483},[152,143713,2337],{"class":293},[152,143715,143716],{"class":476},"deg",[152,143718,4362],{"class":483},[152,143720,143721],{"class":281,"line":310},[152,143722,3236],{"class":483},[262,143724,143726],{"id":143725},"_18123-三角做法","18.1.2.3 三角做法",[19,143728,143729],{},"该下标当经过最外层大盒子时会实现向上反转",[401,143731],{"style":127745,"src":143732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[270,143734,143735],{"className":127889,"code":136409,"language":127891,"meta":275,"style":275},[277,143736,143737,143741,143747,143757,143767,143783,143793],{"__ignoreMap":275},[152,143738,143739],{"class":281,"line":282},[152,143740,136416],{"class":866},[152,143742,143743,143745],{"class":281,"line":303},[152,143744,136421],{"class":285},[152,143746,17187],{"class":483},[152,143748,143749,143751,143753,143755],{"class":281,"line":310},[152,143750,71905],{"class":293},[152,143752,52774],{"class":483},[152,143754,2000],{"class":293},[152,143756,2965],{"class":483},[152,143758,143759,143761,143763,143765],{"class":281,"line":324},[152,143760,72125],{"class":293},[152,143762,52774],{"class":483},[152,143764,2000],{"class":293},[152,143766,2965],{"class":483},[152,143768,143769,143771,143773,143775,143777,143779,143781],{"class":281,"line":329},[152,143770,72233],{"class":293},[152,143772,52774],{"class":483},[152,143774,2254],{"class":293},[152,143776,52829],{"class":476},[152,143778,52858],{"class":293},[152,143780,65328],{"class":293},[152,143782,2965],{"class":483},[152,143784,143785,143787,143789,143791],{"class":281,"line":343},[152,143786,136464],{"class":293},[152,143788,52774],{"class":483},[152,143790,63706],{"class":293},[152,143792,2965],{"class":483},[152,143794,143795],{"class":281,"line":348},[152,143796,3236],{"class":483},[14,143798,143800],{"id":143799},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[262,143802,143804],{"id":143803},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143806,143807],{},"设置中心点",[401,143809],{"style":127745,"src":143810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143812,143813],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[262,143815,143817],{"id":143816},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[270,143819,143821],{"className":127889,"code":143820,"language":127891,"meta":275,"style":275},"\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",[277,143822,143823,143828,143834,143849,143854,143859],{"__ignoreMap":275},[152,143824,143825],{"class":281,"line":282},[152,143826,143827],{"class":866},"\u002F* 转换中心点 *\u002F\n",[152,143829,143830,143832],{"class":281,"line":303},[152,143831,52948],{"class":52637},[152,143833,17187],{"class":483},[152,143835,143836,143839,143841,143843,143845,143847],{"class":281,"line":310},[152,143837,143838],{"class":293},"  transform-origin",[152,143840,52774],{"class":483},[152,143842,52929],{"class":293},[152,143844,18759],{"class":293},[152,143846,131752],{"class":483},[152,143848,136562],{"class":866},[152,143850,143851],{"class":281,"line":324},[152,143852,143853],{"class":866},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[152,143855,143856],{"class":281,"line":329},[152,143857,143858],{"class":866},"  \u002F* transform-origin: left top; *\u002F\n",[152,143860,143861],{"class":281,"line":343},[152,143862,3236],{"class":483},[262,143864,143866],{"id":143865},"_18133-旋转案例","18.1.3.3 旋转案例",[401,143868],{"style":127745,"src":143869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[270,143871,143872],{"className":127889,"code":143692,"language":127891,"meta":275,"style":275},[277,143873,143874,143880,143896],{"__ignoreMap":275},[152,143875,143876,143878],{"class":281,"line":282},[152,143877,52948],{"class":52637},[152,143879,17187],{"class":483},[152,143881,143882,143884,143886,143888,143890,143892,143894],{"class":281,"line":303},[152,143883,137873],{"class":293},[152,143885,52774],{"class":483},[152,143887,143709],{"class":293},[152,143889,1819],{"class":483},[152,143891,2337],{"class":293},[152,143893,143716],{"class":476},[152,143895,4362],{"class":483},[152,143897,143898],{"class":281,"line":310},[152,143899,3236],{"class":483},[14,143901,143903],{"id":143902},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[262,143905,143907],{"id":143906},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143909,143910],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[401,143912],{"style":127745,"src":143913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[262,143915,143917],{"id":143916},"_18142-分页按钮","18.1.4.2 分页按钮",[401,143919],{"style":127745,"src":143920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[270,143922,143924],{"className":127889,"code":143923,"language":127891,"meta":275,"style":275},"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",[277,143925,143926,143932,143948,143952,143956,143961,143967,143981,143986],{"__ignoreMap":275},[152,143927,143928,143930],{"class":281,"line":282},[152,143929,52948],{"class":52637},[152,143931,17187],{"class":483},[152,143933,143934,143936,143938,143941,143943,143946],{"class":281,"line":303},[152,143935,137873],{"class":293},[152,143937,52774],{"class":483},[152,143939,143940],{"class":293},"scale",[152,143942,1819],{"class":483},[152,143944,143945],{"class":293},"1.2",[152,143947,4362],{"class":483},[152,143949,143950],{"class":281,"line":310},[152,143951,3236],{"class":483},[152,143953,143954],{"class":281,"line":324},[152,143955,137350],{"class":483},[152,143957,143958],{"class":281,"line":329},[152,143959,143960],{"class":866},"\u002F* 2D 缩放 *\u002F\n",[152,143962,143963,143965],{"class":281,"line":343},[152,143964,52948],{"class":52637},[152,143966,17187],{"class":483},[152,143968,143969,143971,143973,143975,143977,143979],{"class":281,"line":348},[152,143970,137873],{"class":293},[152,143972,52774],{"class":483},[152,143974,143940],{"class":293},[152,143976,1819],{"class":483},[152,143978,143945],{"class":293},[152,143980,4362],{"class":483},[152,143982,143983],{"class":281,"line":362},[152,143984,143985],{"class":866},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[152,143987,143988],{"class":281,"line":367},[152,143989,3236],{"class":483},[19,143991,143992],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[270,143994,143996],{"className":127889,"code":143995,"language":127891,"meta":275,"style":275},"\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",[277,143997,143998,144003,144013,144034,144055,144059,144064,144070,144097],{"__ignoreMap":275},[152,143999,144000],{"class":281,"line":282},[152,144001,144002],{"class":866},"\u002F* 定义动画 *\u002F\n",[152,144004,144005,144008,144011],{"class":281,"line":303},[152,144006,144007],{"class":476},"@keyframes",[152,144009,144010],{"class":6858}," move",[152,144012,17187],{"class":483},[152,144014,144015,144018,144020,144022,144024,144027,144029,144031],{"class":281,"line":310},[152,144016,144017],{"class":285},"  0%",[152,144019,81144],{"class":483},[152,144021,49471],{"class":293},[152,144023,52774],{"class":483},[152,144025,144026],{"class":293},"translateX",[152,144028,1819],{"class":483},[152,144030,2000],{"class":293},[152,144032,144033],{"class":483},"); }\n",[152,144035,144036,144039,144041,144043,144045,144047,144049,144051,144053],{"class":281,"line":324},[152,144037,144038],{"class":285},"  100%",[152,144040,81144],{"class":483},[152,144042,49471],{"class":293},[152,144044,52774],{"class":483},[152,144046,144026],{"class":293},[152,144048,1819],{"class":483},[152,144050,2119],{"class":293},[152,144052,52829],{"class":476},[152,144054,144033],{"class":483},[152,144056,144057],{"class":281,"line":329},[152,144058,3236],{"class":483},[152,144060,144061],{"class":281,"line":343},[152,144062,144063],{"class":866},"\u002F* 调用动画 *\u002F\n",[152,144065,144066,144068],{"class":281,"line":348},[152,144067,52948],{"class":52637},[152,144069,17187],{"class":483},[152,144071,144072,144075,144077,144079,144081,144083,144085,144087,144089,144092,144095],{"class":281,"line":362},[152,144073,144074],{"class":293},"  animation",[152,144076,52774],{"class":483},[152,144078,136575],{"class":293},[152,144080,26729],{"class":293},[152,144082,2503],{"class":476},[152,144084,80017],{"class":293},[152,144086,5735],{"class":293},[152,144088,2503],{"class":476},[152,144090,144091],{"class":293}," infinite",[152,144093,144094],{"class":293}," alternate",[152,144096,2965],{"class":483},[152,144098,144099],{"class":281,"line":367},[152,144100,3236],{"class":483},[19,144102,143992],{},[270,144104,144107],{"className":144105,"code":144106,"language":6829},[6827],"\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",[277,144108,144106],{"__ignoreMap":275},[262,144110,144112],{"id":144111},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144114,144115],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[401,144117],{"style":127745,"src":144118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[270,144120,144121],{"className":127889,"code":143995,"language":127891,"meta":275,"style":275},[277,144122,144123,144127,144135,144153,144173,144177,144181,144187,144211],{"__ignoreMap":275},[152,144124,144125],{"class":281,"line":282},[152,144126,144002],{"class":866},[152,144128,144129,144131,144133],{"class":281,"line":303},[152,144130,144007],{"class":476},[152,144132,144010],{"class":6858},[152,144134,17187],{"class":483},[152,144136,144137,144139,144141,144143,144145,144147,144149,144151],{"class":281,"line":310},[152,144138,144017],{"class":285},[152,144140,81144],{"class":483},[152,144142,49471],{"class":293},[152,144144,52774],{"class":483},[152,144146,144026],{"class":293},[152,144148,1819],{"class":483},[152,144150,2000],{"class":293},[152,144152,144033],{"class":483},[152,144154,144155,144157,144159,144161,144163,144165,144167,144169,144171],{"class":281,"line":324},[152,144156,144038],{"class":285},[152,144158,81144],{"class":483},[152,144160,49471],{"class":293},[152,144162,52774],{"class":483},[152,144164,144026],{"class":293},[152,144166,1819],{"class":483},[152,144168,2119],{"class":293},[152,144170,52829],{"class":476},[152,144172,144033],{"class":483},[152,144174,144175],{"class":281,"line":329},[152,144176,3236],{"class":483},[152,144178,144179],{"class":281,"line":343},[152,144180,144063],{"class":866},[152,144182,144183,144185],{"class":281,"line":348},[152,144184,52948],{"class":52637},[152,144186,17187],{"class":483},[152,144188,144189,144191,144193,144195,144197,144199,144201,144203,144205,144207,144209],{"class":281,"line":362},[152,144190,144074],{"class":293},[152,144192,52774],{"class":483},[152,144194,136575],{"class":293},[152,144196,26729],{"class":293},[152,144198,2503],{"class":476},[152,144200,80017],{"class":293},[152,144202,5735],{"class":293},[152,144204,2503],{"class":476},[152,144206,144091],{"class":293},[152,144208,144094],{"class":293},[152,144210,2965],{"class":483},[152,144212,144213],{"class":281,"line":367},[152,144214,3236],{"class":483},[19,144216,144217],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[14,144219,144221],{"id":144220},"_1823-知识点回顾","18.2.3 知识点回顾",[270,144223,144224],{"className":127889,"code":130058,"language":127891,"meta":275,"style":275},[277,144225,144226,144232,144242],{"__ignoreMap":275},[152,144227,144228,144230],{"class":281,"line":282},[152,144229,52948],{"class":52637},[152,144231,17187],{"class":483},[152,144233,144234,144236,144238,144240],{"class":281,"line":303},[152,144235,130071],{"class":293},[152,144237,52774],{"class":483},[152,144239,63073],{"class":293},[152,144241,2965],{"class":483},[152,144243,144244],{"class":281,"line":310},[152,144245,3236],{"class":483},[1760,144247,144249],{"id":144248},"_183-3d-转换","18.3 3D 转换",[19,144251,144252],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[14,144254,144256],{"id":144255},"_1831-坐标轴认识","18.3.1 坐标轴认识",[401,144258],{"style":127745,"src":144259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[14,144261,144263],{"id":144262},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[401,144265],{"style":127745,"src":144266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144268,144269],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144271,144272],{},"translate3d的效果需要搭配透视perspective来使用",[401,144274],{"style":127745,"src":144275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[14,144277,144279],{"id":144278},"_1833-透视-perspective","18.3.3 透视 perspective",[401,144281],{"style":127745,"src":144282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144284,144285],{},"透视写在父盒子上，单位为像素",[14,144287,144289],{"id":144288},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[262,144291,144293],{"id":144292},"_18341-分开解释","18.3.4.1 分开解释",[401,144295],{"style":127745,"src":144296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[401,144298],{"style":127745,"src":144299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[401,144301],{"style":127745,"src":144302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144304,144305],{},"总结来说就是左手原则",[262,144307,144309],{"id":144308},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[401,144311],{"style":127745,"src":144312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[14,144314,144316],{"id":144315},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[401,144318],{"style":127745,"src":144319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[401,144321],{"style":127745,"src":144322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[270,144324,144326],{"className":127889,"code":144325,"language":127891,"meta":275,"style":275},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[277,144327,144328,144334,144347,144364],{"__ignoreMap":275},[152,144329,144330,144332],{"class":281,"line":282},[152,144331,52948],{"class":52637},[152,144333,17187],{"class":483},[152,144335,144336,144339,144341,144343,144345],{"class":281,"line":303},[152,144337,144338],{"class":293},"  perspective",[152,144340,52774],{"class":483},[152,144342,66411],{"class":293},[152,144344,52829],{"class":476},[152,144346,2965],{"class":483},[152,144348,144349,144351,144353,144356,144358,144360,144362],{"class":281,"line":310},[152,144350,137873],{"class":293},[152,144352,52774],{"class":483},[152,144354,144355],{"class":293},"rotateX",[152,144357,1819],{"class":483},[152,144359,2337],{"class":293},[152,144361,143716],{"class":476},[152,144363,4362],{"class":483},[152,144365,144366],{"class":281,"line":324},[152,144367,3236],{"class":483},[14,144369,144371],{"id":144370},"_1836-案例","18.3.6 案例",[262,144373,144375],{"id":144374},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[401,144377],{"style":127745,"src":144378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[401,144380],{"style":127745,"src":144381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[401,144383],{"style":127745,"src":144384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[270,144386,144388],{"className":127889,"code":144387,"language":127891,"meta":275,"style":275},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[277,144389,144390,144395,144401,144413],{"__ignoreMap":275},[152,144391,144392],{"class":281,"line":282},[152,144393,144394],{"class":866},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[152,144396,144397,144399],{"class":281,"line":303},[152,144398,134886],{"class":285},[152,144400,17187],{"class":483},[152,144402,144403,144405,144407,144409,144411],{"class":281,"line":310},[152,144404,144338],{"class":293},[152,144406,52774],{"class":483},[152,144408,66411],{"class":293},[152,144410,52829],{"class":476},[152,144412,2965],{"class":483},[152,144414,144415],{"class":281,"line":324},[152,144416,3236],{"class":483},[262,144418,144420],{"id":144419},"_18362-3d导航栏","18.3.6.2 3D导航栏",[401,144422],{"style":127745,"src":144423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[270,144425,144426],{"className":128636,"code":131993,"language":128638,"meta":275,"style":275},[277,144427,144428,144432,144446,144450],{"__ignoreMap":275},[152,144429,144430],{"class":281,"line":282},[152,144431,132000],{"class":866},[152,144433,144434,144436,144438,144440,144442,144444],{"class":281,"line":303},[152,144435,844],{"class":483},[152,144437,52948],{"class":52637},[152,144439,54823],{"class":285},[152,144441,1864],{"class":483},[152,144443,132013],{"class":289},[152,144445,52644],{"class":483},[152,144447,144448],{"class":281,"line":310},[152,144449,132020],{"class":483},[152,144451,144452,144454,144456],{"class":281,"line":324},[152,144453,53122],{"class":483},[152,144455,52948],{"class":52637},[152,144457,52644],{"class":483},[262,144459,144461],{"id":144460},"_18363-旋转木马","18.3.6.3 旋转木马",[401,144463],{"style":127745,"src":144464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[270,144466,144467],{"className":127889,"code":143692,"language":127891,"meta":275,"style":275},[277,144468,144469,144475,144491],{"__ignoreMap":275},[152,144470,144471,144473],{"class":281,"line":282},[152,144472,52948],{"class":52637},[152,144474,17187],{"class":483},[152,144476,144477,144479,144481,144483,144485,144487,144489],{"class":281,"line":303},[152,144478,137873],{"class":293},[152,144480,52774],{"class":483},[152,144482,143709],{"class":293},[152,144484,1819],{"class":483},[152,144486,2337],{"class":293},[152,144488,143716],{"class":476},[152,144490,4362],{"class":483},[152,144492,144493],{"class":281,"line":310},[152,144494,3236],{"class":483},[1736,144496,144497],{},"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":275,"searchDepth":303,"depth":303,"links":144499},[144500,144507],{"id":143595,"depth":303,"text":143596,"children":144501},[144502,144503,144504,144505,144506],{"id":143619,"depth":310,"text":143620},{"id":143674,"depth":310,"text":143675},{"id":143799,"depth":310,"text":143800},{"id":143902,"depth":310,"text":143903},{"id":144220,"depth":310,"text":144221},{"id":144248,"depth":303,"text":144249,"children":144508},[144509,144510,144511,144512,144513,144514],{"id":144255,"depth":310,"text":144256},{"id":144262,"depth":310,"text":144263},{"id":144278,"depth":310,"text":144279},{"id":144288,"depth":310,"text":144289},{"id":144315,"depth":310,"text":144316},{"id":144370,"depth":310,"text":144371},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143587,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144521,"title":144522,"body":144523,"description":24991,"extension":1744,"meta":144726,"navigation":306,"path":144727,"seo":144728,"stem":144729,"__hash__":144730},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144524,"toc":144715},[144525,144528,144532,144535,144538,144542,144545,144548,144551,144555,144558,144562,144565,144569,144572,144576,144590,144594,144619,144622,144625,144642,144646,144650,144653,144656,144660,144663,144666,144684,144688,144691,144705,144709,144712],[10,144526,144522],{"id":144527},"_19-移动端基础-前缀现状与视口",[1760,144529,144531],{"id":144530},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[401,144533],{"style":127745,"src":144534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144536,144537],{},"意思就是加个前缀，增加兼容性",[1760,144539,144541],{"id":144540},"_192-移动端现状认识","19.2 移动端现状认识",[401,144543],{"style":127745,"src":144544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144546,144547],{},"调试方法：",[401,144549],{"style":127745,"src":144550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[1760,144552,144554],{"id":144553},"_193-视口","19.3 视口",[19,144556,144557],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[14,144559,144561],{"id":144560},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[401,144563],{"style":127745,"src":144564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[14,144566,144568],{"id":144567},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[401,144570],{"style":127745,"src":144571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[14,144573,144575],{"id":144574},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[698,144577,144578,144581,144584,144587],{},[419,144579,144580],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[419,144582,144583],{},"理想视口，对设备来讲，是最理想的视口尺寸",[419,144585,144586],{},"需要手动添写meta视口标签通知浏览器操作",[419,144588,144589],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[14,144591,144593],{"id":144592},"_1934-meta视口标签","19.3.4 meta视口标签",[270,144595,144597],{"className":128636,"code":144596,"language":128638,"meta":275,"style":275},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[277,144598,144599],{"__ignoreMap":275},[152,144600,144601,144603,144605,144607,144609,144611,144613,144615,144617],{"class":281,"line":282},[152,144602,844],{"class":483},[152,144604,52681],{"class":52637},[152,144606,16535],{"class":285},[152,144608,1864],{"class":483},[152,144610,52728],{"class":289},[152,144612,52708],{"class":285},[152,144614,1864],{"class":483},[152,144616,52735],{"class":289},[152,144618,52644],{"class":483},[401,144620],{"style":127745,"src":144621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144623,144624],{},"标准视口设置：",[416,144626,144627,144630,144633,144636,144639],{},[419,144628,144629],{},"视口宽度和设备保持一致",[419,144631,144632],{},"视口的默认缩放比例1.0",[419,144634,144635],{},"不允许用户自行缩放",[419,144637,144638],{},"最大允许的缩放比例1.0",[419,144640,144641],{},"最小允许的缩放比例1.0",[14,144643,144645],{"id":144644},"_1935-二倍图","19.3.5 二倍图",[262,144647,144649],{"id":144648},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[401,144651],{"style":127745,"src":144652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[401,144654],{"style":127745,"src":144655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[262,144657,144659],{"id":144658},"_19352-多倍图","19.3.5.2 多倍图",[401,144661],{"style":127745,"src":144662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144664,144665],{},"二倍图法，代码如下：",[270,144667,144669],{"className":127889,"code":144668,"language":127891,"meta":275,"style":275},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[277,144670,144671,144676],{"__ignoreMap":275},[152,144672,144673],{"class":281,"line":282},[152,144674,144675],{"class":866},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[152,144677,144678,144681],{"class":281,"line":303},[152,144679,144680],{"class":52637},"background-size",[152,144682,144683],{"class":483},": 50% 50%;\n",[262,144685,144687],{"id":144686},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[401,144689],{"style":127745,"src":144690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[416,144692,144693,144696,144699,144702],{},[419,144694,144695],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[419,144697,144698],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[419,144700,144701],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[419,144703,144704],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[262,144706,144708],{"id":144707},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[401,144710],{"style":127745,"src":144711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1736,144713,144714],{},"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":275,"searchDepth":303,"depth":303,"links":144716},[144717,144718,144719],{"id":144530,"depth":303,"text":144531},{"id":144540,"depth":303,"text":144541},{"id":144553,"depth":303,"text":144554,"children":144720},[144721,144722,144723,144724,144725],{"id":144560,"depth":310,"text":144561},{"id":144567,"depth":310,"text":144568},{"id":144574,"depth":310,"text":144575},{"id":144592,"depth":310,"text":144593},{"id":144644,"depth":310,"text":144645},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144522,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144732,"title":144733,"body":144734,"description":24991,"extension":1744,"meta":145611,"navigation":306,"path":145612,"seo":145613,"stem":145614,"__hash__":145615},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144735,"toc":145595},[144736,144739,144743,144750,144753,144760,144763,144768,144771,144775,144779,144786,144789,144792,144796,144799,144802,144805,144808,144811,144815,144818,144822,144824,144827,144830,144833,144836,144838,144841,144843,144873,144875,144905,144909,144912,144916,144919,144936,144939,144942,145018,145020,145023,145026,145029,145032,145034,145037,145040,145044,145066,145069,145072,145076,145079,145085,145088,145092,145095,145098,145102,145105,145108,145111,145115,145118,145121,145124,145127,145131,145134,145138,145145,145148,145151,145154,145157,145167,145170,145173,145180,145183,145187,145190,145193,145197,145200,145203,145206,145251,145254,145257,145260,145262,145391,145393,145431,145434,145437,145439,145557,145559,145593],[10,144737,144733],{"id":144738},"_20-移动端布局实战上篇",[1760,144740,144742],{"id":144741},"_201-移动端主流方案","20.1 移动端主流方案",[416,144744,144745],{},[419,144746,144747],{},[694,144748,144749],{},"单独移动端页面（主流）",[401,144751],{"style":127745,"src":144752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[416,144754,144755],{"start":303},[419,144756,144757],{},[694,144758,144759],{},"响应式兼容PC移动端",[401,144761],{"style":127745,"src":144762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[416,144764,144765],{"start":310},[419,144766,144767],{},"两种页面选型布局方式",[401,144769],{"style":127745,"src":144770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[1760,144772,144774],{"id":144773},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[14,144776,144778],{"id":144777},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,144780,144781,144782],{},"官网地址： ",[69,144783,144784],{"href":144784,"rel":144785},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[245],[401,144787],{"style":127745,"src":144788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[401,144790],{"style":127745,"src":144791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[14,144793,144795],{"id":144794},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[401,144797],{"style":127745,"src":144798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[401,144800],{"style":127745,"src":144801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144803,144804],{},"去除高亮：",[19,144806,144807],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144809,144810],{},"-webkit- tap-highlight-color: transparent;",[1760,144812,144814],{"id":144813},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[401,144816],{"style":127745,"src":144817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[1760,144819,144821],{"id":144820},"_204-流式布局案例","20.4 流式布局案例",[19,144823,1848],{},[19,144825,144826],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144828,144829],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144831,144832],{},"图片格式：",[401,144834],{"style":127745,"src":144835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144837,136932],{},[401,144839],{"style":127745,"src":144840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144842,141259],{},[270,144844,144845],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,144846,144847],{"__ignoreMap":275},[152,144848,144849,144851,144853,144855,144857,144859,144861,144863,144865,144867,144869,144871],{"class":281,"line":282},[152,144850,844],{"class":483},[152,144852,401],{"class":52637},[152,144854,56576],{"class":285},[152,144856,1864],{"class":483},[152,144858,135406],{"class":289},[152,144860,56584],{"class":285},[152,144862,1864],{"class":483},[152,144864,135413],{"class":289},[152,144866,135416],{"class":285},[152,144868,1864],{"class":483},[152,144870,135421],{"class":289},[152,144872,52644],{"class":483},[19,144874,141348],{},[270,144876,144877],{"className":128636,"code":135391,"language":128638,"meta":275,"style":275},[277,144878,144879],{"__ignoreMap":275},[152,144880,144881,144883,144885,144887,144889,144891,144893,144895,144897,144899,144901,144903],{"class":281,"line":282},[152,144882,844],{"class":483},[152,144884,401],{"class":52637},[152,144886,56576],{"class":285},[152,144888,1864],{"class":483},[152,144890,135406],{"class":289},[152,144892,56584],{"class":285},[152,144894,1864],{"class":483},[152,144896,135413],{"class":289},[152,144898,135416],{"class":285},[152,144900,1864],{"class":483},[152,144902,135421],{"class":289},[152,144904,52644],{"class":483},[1760,144906,144908],{"id":144907},"_205-flex布局","20.5 flex布局",[401,144910],{"style":127745,"src":144911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[14,144913,144915],{"id":144914},"_2051-布局原理","20.5.1 布局原理",[19,144917,144918],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[698,144920,144921,144924,144927,144930,144933],{},[419,144922,144923],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[419,144925,144926],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[419,144928,144929],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[419,144931,144932],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[419,144934,144935],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144937,144938],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144940,144941],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[270,144943,144945],{"className":127889,"code":144944,"language":127891,"meta":275,"style":275},"\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",[277,144946,144947,144952,144959,144969,144981,144992,145003,145014],{"__ignoreMap":275},[152,144948,144949],{"class":281,"line":282},[152,144950,144951],{"class":866},"\u002F* Flex 弹性布局 *\u002F\n",[152,144953,144954,144957],{"class":281,"line":303},[152,144955,144956],{"class":285},".container",[152,144958,17187],{"class":483},[152,144960,144961,144963,144965,144967],{"class":281,"line":310},[152,144962,129505],{"class":293},[152,144964,52774],{"class":483},[152,144966,52814],{"class":293},[152,144968,2965],{"class":483},[152,144970,144971,144974,144976,144979],{"class":281,"line":324},[152,144972,144973],{"class":293},"  flex-direction",[152,144975,52774],{"class":483},[152,144977,144978],{"class":293},"row",[152,144980,2965],{"class":483},[152,144982,144983,144986,144988,144990],{"class":281,"line":329},[152,144984,144985],{"class":293},"  justify-content",[152,144987,52774],{"class":483},[152,144989,53005],{"class":293},[152,144991,2965],{"class":483},[152,144993,144994,144997,144999,145001],{"class":281,"line":343},[152,144995,144996],{"class":293},"  align-items",[152,144998,52774],{"class":483},[152,145000,52929],{"class":293},[152,145002,2965],{"class":483},[152,145004,145005,145008,145010,145012],{"class":281,"line":348},[152,145006,145007],{"class":293},"  flex-wrap",[152,145009,52774],{"class":483},[152,145011,79947],{"class":293},[152,145013,2965],{"class":483},[152,145015,145016],{"class":281,"line":362},[152,145017,3236],{"class":483},[19,145019,71790],{},[19,145021,145022],{},".form-item .male-label {",[19,145024,145025],{},"   margin-right: 20px;",[19,145027,145028],{},"   display: inline-flex;",[19,145030,145031],{},"   align-items: center;",[19,145033,2752],{},[401,145035],{"style":127745,"src":145036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[401,145038],{"style":127745,"src":145039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[14,145041,145043],{"id":145042},"_2052-常见父项属性","20.5.2 常见父项属性",[416,145045,145046,145049,145052,145055,145058,145061,145064],{},[419,145047,145048],{},"flex-direction：设置主轴的方向",[419,145050,145051],{},"justify-content：设置主轴上的子元素排列方式",[419,145053,145054],{},"flex-wrap：设置子元素是否换行",[419,145056,145057],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[419,145059,145060],{},"align-items：设置侧轴上的子元素排列方式（单行）",[419,145062,145063],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[419,145065,145048],{},[401,145067],{"style":127745,"src":145068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[401,145070],{"style":127745,"src":145071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[416,145073,145074],{"start":303},[419,145075,145051],{},[401,145077],{"style":127745,"src":145078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145080,145081,145084],{},[277,145082,145083],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145086,145087],{},"跟着主轴走",[416,145089,145090],{"start":310},[419,145091,145054],{},[401,145093],{"style":127745,"src":145094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145096,145097],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[416,145099,145100],{"start":324},[419,145101,145057],{},[401,145103],{"style":127745,"src":145104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145106,145107],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145109,145110],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[416,145112,145113],{"start":329},[419,145114,145060],{},[401,145116],{"style":127745,"src":145117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145119,145120],{},"align-items与align-content之间的区别：",[19,145122,145123],{},"单找items，多找content",[401,145125],{"style":127745,"src":145126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[416,145128,145129],{"start":343},[419,145130,145063],{},[401,145132],{"style":127745,"src":145133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[14,145135,145137],{"id":145136},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[416,145139,145140],{},[419,145141,145142],{},[694,145143,145144],{},"flex 属性",[19,145146,145147],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[401,145149],{"style":127745,"src":145150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145152,145153],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145155,145156],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[416,145158,145159],{"start":303},[419,145160,145161,15411,145164],{},[694,145162,145163],{},"align-self",[694,145165,145166],{},"控制子项自己在侧轴上的排列方式",[401,145168],{"style":127745,"src":145169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145171,145172],{},"单个子盒子在父盒子侧轴上的排列方式",[416,145174,145175],{"start":310},[419,145176,145177,145179],{},[694,145178,96634],{}," 属性定义项目的排列顺序",[401,145181],{"style":127745,"src":145182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[14,145184,145186],{"id":145185},"_2054-背景线性渐变","20.5.4 背景线性渐变",[401,145188],{"style":127745,"src":145189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145191,145192],{},"必须要添加浏览器的私有前缀",[14,145194,145196],{"id":145195},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145198,145199],{},"学到最重要的知识：",[19,145201,145202],{},"flex处理这样的布局思路",[401,145204],{"style":127745,"src":145205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[270,145207,145209],{"className":127889,"code":145208,"language":127891,"meta":275,"style":275},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[277,145210,145211,145217,145227,145237,145247],{"__ignoreMap":275},[152,145212,145213,145215],{"class":281,"line":282},[152,145214,144956],{"class":285},[152,145216,17187],{"class":483},[152,145218,145219,145221,145223,145225],{"class":281,"line":303},[152,145220,129505],{"class":293},[152,145222,52774],{"class":483},[152,145224,52814],{"class":293},[152,145226,2965],{"class":483},[152,145228,145229,145231,145233,145235],{"class":281,"line":310},[152,145230,144985],{"class":293},[152,145232,52774],{"class":483},[152,145234,52929],{"class":293},[152,145236,2965],{"class":483},[152,145238,145239,145241,145243,145245],{"class":281,"line":324},[152,145240,144996],{"class":293},[152,145242,52774],{"class":483},[152,145244,52929],{"class":293},[152,145246,2965],{"class":483},[152,145248,145249],{"class":281,"line":329},[152,145250,3236],{"class":483},[19,145252,145253],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145255,145256],{},"使用属性选择器",[401,145258],{"style":127745,"src":145259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145261,70226],{},[270,145263,145265],{"className":128636,"code":145264,"language":128638,"meta":275,"style":275},"\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",[277,145266,145267,145272,145286,145291,145311,145316,145335,145340,145359,145364,145383],{"__ignoreMap":275},[152,145268,145269],{"class":281,"line":282},[152,145270,145271],{"class":866},"\u003C!-- 携程网移动端案例结构 -->\n",[152,145273,145274,145276,145278,145280,145282,145284],{"class":281,"line":303},[152,145275,844],{"class":483},[152,145277,52948],{"class":52637},[152,145279,54823],{"class":285},[152,145281,1864],{"class":483},[152,145283,93660],{"class":289},[152,145285,52644],{"class":483},[152,145287,145288],{"class":281,"line":310},[152,145289,145290],{"class":866},"  \u003C!-- 搜索栏 -->\n",[152,145292,145293,145295,145297,145299,145301,145304,145307,145309],{"class":281,"line":324},[152,145294,53481],{"class":483},[152,145296,52948],{"class":52637},[152,145298,54823],{"class":285},[152,145300,1864],{"class":483},[152,145302,145303],{"class":289},"\"search-index\"",[152,145305,145306],{"class":483},">...\u003C\u002F",[152,145308,52948],{"class":52637},[152,145310,52644],{"class":483},[152,145312,145313],{"class":281,"line":329},[152,145314,145315],{"class":866},"  \u003C!-- 焦点图 -->\n",[152,145317,145318,145320,145322,145324,145326,145329,145331,145333],{"class":281,"line":343},[152,145319,53481],{"class":483},[152,145321,52948],{"class":52637},[152,145323,54823],{"class":285},[152,145325,1864],{"class":483},[152,145327,145328],{"class":289},"\"focus\"",[152,145330,145306],{"class":483},[152,145332,52948],{"class":52637},[152,145334,52644],{"class":483},[152,145336,145337],{"class":281,"line":348},[152,145338,145339],{"class":866},"  \u003C!-- 主导航 -->\n",[152,145341,145342,145344,145346,145348,145350,145353,145355,145357],{"class":281,"line":362},[152,145343,53481],{"class":483},[152,145345,52948],{"class":52637},[152,145347,54823],{"class":285},[152,145349,1864],{"class":483},[152,145351,145352],{"class":289},"\"local-nav\"",[152,145354,145306],{"class":483},[152,145356,52948],{"class":52637},[152,145358,52644],{"class":483},[152,145360,145361],{"class":281,"line":367},[152,145362,145363],{"class":866},"  \u003C!-- 子导航 -->\n",[152,145365,145366,145368,145370,145372,145374,145377,145379,145381],{"class":281,"line":381},[152,145367,53481],{"class":483},[152,145369,52948],{"class":52637},[152,145371,54823],{"class":285},[152,145373,1864],{"class":483},[152,145375,145376],{"class":289},"\"nav-common\"",[152,145378,145306],{"class":483},[152,145380,52948],{"class":52637},[152,145382,52644],{"class":483},[152,145384,145385,145387,145389],{"class":281,"line":386},[152,145386,53122],{"class":483},[152,145388,52948],{"class":52637},[152,145390,52644],{"class":483},[19,145392,71790],{},[270,145394,145395],{"className":127889,"code":138341,"language":127891,"meta":275,"style":275},[277,145396,145397,145411,145427],{"__ignoreMap":275},[152,145398,145399,145401,145403,145405,145407,145409],{"class":281,"line":282},[152,145400,55158],{"class":52637},[152,145402,2697],{"class":483},[152,145404,104444],{"class":285},[152,145406,1864],{"class":476},[152,145408,64036],{"class":289},[152,145410,138358],{"class":483},[152,145412,145413,145415,145417,145419,145421,145423,145425],{"class":281,"line":303},[152,145414,72233],{"class":293},[152,145416,52774],{"class":483},[152,145418,2026],{"class":293},[152,145420,52829],{"class":476},[152,145422,52858],{"class":293},[152,145424,131469],{"class":293},[152,145426,2965],{"class":483},[152,145428,145429],{"class":281,"line":310},[152,145430,3236],{"class":483},[19,145432,145433],{},"总代码和效果展示：",[401,145435],{"style":127745,"src":145436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145438,70226],{},[270,145440,145441],{"className":128636,"code":145264,"language":128638,"meta":275,"style":275},[277,145442,145443,145447,145461,145465,145483,145487,145505,145509,145527,145531,145549],{"__ignoreMap":275},[152,145444,145445],{"class":281,"line":282},[152,145446,145271],{"class":866},[152,145448,145449,145451,145453,145455,145457,145459],{"class":281,"line":303},[152,145450,844],{"class":483},[152,145452,52948],{"class":52637},[152,145454,54823],{"class":285},[152,145456,1864],{"class":483},[152,145458,93660],{"class":289},[152,145460,52644],{"class":483},[152,145462,145463],{"class":281,"line":310},[152,145464,145290],{"class":866},[152,145466,145467,145469,145471,145473,145475,145477,145479,145481],{"class":281,"line":324},[152,145468,53481],{"class":483},[152,145470,52948],{"class":52637},[152,145472,54823],{"class":285},[152,145474,1864],{"class":483},[152,145476,145303],{"class":289},[152,145478,145306],{"class":483},[152,145480,52948],{"class":52637},[152,145482,52644],{"class":483},[152,145484,145485],{"class":281,"line":329},[152,145486,145315],{"class":866},[152,145488,145489,145491,145493,145495,145497,145499,145501,145503],{"class":281,"line":343},[152,145490,53481],{"class":483},[152,145492,52948],{"class":52637},[152,145494,54823],{"class":285},[152,145496,1864],{"class":483},[152,145498,145328],{"class":289},[152,145500,145306],{"class":483},[152,145502,52948],{"class":52637},[152,145504,52644],{"class":483},[152,145506,145507],{"class":281,"line":348},[152,145508,145339],{"class":866},[152,145510,145511,145513,145515,145517,145519,145521,145523,145525],{"class":281,"line":362},[152,145512,53481],{"class":483},[152,145514,52948],{"class":52637},[152,145516,54823],{"class":285},[152,145518,1864],{"class":483},[152,145520,145352],{"class":289},[152,145522,145306],{"class":483},[152,145524,52948],{"class":52637},[152,145526,52644],{"class":483},[152,145528,145529],{"class":281,"line":367},[152,145530,145363],{"class":866},[152,145532,145533,145535,145537,145539,145541,145543,145545,145547],{"class":281,"line":381},[152,145534,53481],{"class":483},[152,145536,52948],{"class":52637},[152,145538,54823],{"class":285},[152,145540,1864],{"class":483},[152,145542,145376],{"class":289},[152,145544,145306],{"class":483},[152,145546,52948],{"class":52637},[152,145548,52644],{"class":483},[152,145550,145551,145553,145555],{"class":281,"line":386},[152,145552,53122],{"class":483},[152,145554,52948],{"class":52637},[152,145556,52644],{"class":483},[19,145558,71790],{},[270,145560,145561],{"className":128636,"code":131993,"language":128638,"meta":275,"style":275},[277,145562,145563,145567,145581,145585],{"__ignoreMap":275},[152,145564,145565],{"class":281,"line":282},[152,145566,132000],{"class":866},[152,145568,145569,145571,145573,145575,145577,145579],{"class":281,"line":303},[152,145570,844],{"class":483},[152,145572,52948],{"class":52637},[152,145574,54823],{"class":285},[152,145576,1864],{"class":483},[152,145578,132013],{"class":289},[152,145580,52644],{"class":483},[152,145582,145583],{"class":281,"line":310},[152,145584,132020],{"class":483},[152,145586,145587,145589,145591],{"class":281,"line":324},[152,145588,53122],{"class":483},[152,145590,52948],{"class":52637},[152,145592,52644],{"class":483},[1736,145594,139290],{},{"title":275,"searchDepth":303,"depth":303,"links":145596},[145597,145598,145602,145603,145604],{"id":144741,"depth":303,"text":144742},{"id":144773,"depth":303,"text":144774,"children":145599},[145600,145601],{"id":144777,"depth":310,"text":144778},{"id":144794,"depth":310,"text":144795},{"id":144813,"depth":303,"text":144814},{"id":144820,"depth":303,"text":144821},{"id":144907,"depth":303,"text":144908,"children":145605},[145606,145607,145608,145609,145610],{"id":144914,"depth":310,"text":144915},{"id":145042,"depth":310,"text":145043},{"id":145136,"depth":310,"text":145137},{"id":145185,"depth":310,"text":145186},{"id":145195,"depth":310,"text":145196},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144733,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145617,"title":145618,"body":145619,"description":24991,"extension":1744,"meta":146846,"navigation":306,"path":146847,"seo":146848,"stem":146849,"__hash__":146850},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145620,"toc":146824},[145621,145624,145628,145632,145635,145638,145642,145647,145650,145653,145656,145659,145662,145719,145722,145727,145730,145733,145737,145748,145752,145755,145758,145765,145770,145774,145777,145783,145786,145790,145793,145800,145803,145806,145813,145816,145823,145826,145829,145836,145839,145842,145844,145861,145865,145868,145871,145874,145878,145881,145884,145887,145890,145893,145896,145898,145901,145904,145966,145969,146079,146086,146092,146095,146098,146102,146105,146109,146114,146117,146124,146127,146133,146138,146141,146144,146147,146150,146153,146156,146159,146162,146218,146220,146246,146250,146253,146256,146259,146267,146270,146273,146277,146333,146336,146340,146346,146357,146360,146365,146368,146371,146377,146380,146383,146386,146389,146392,146395,146398,146401,146426,146432,146435,146438,146441,146444,146447,146450,146455,146458,146461,146464,146472,146475,146482,146485,146488,146490,146514,146516,146519,146522,146525,146528,146531,146534,146537,146571,146574,146577,146611,146618,146621,146624,146627,146630,146633,146636,146643,146646,146649,146652,146655,146662,146665,146668,146675,146678,146681,146685,146688,146691,146694,146697,146700,146703,146706,146709,146711,146735,146737,146761,146765,146776,146779,146782,146785,146788,146791,146794,146797,146800,146803,146806,146809,146812,146815,146818,146821],[10,145622,145618],{"id":145623},"_21-移动端布局实战下篇",[1760,145625,145627],{"id":145626},"_211-rem适配布局","21.1 rem适配布局",[14,145629,145631],{"id":145630},"_2111-rem单位","21.1.1 rem单位",[401,145633],{"style":127745,"src":145634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145636,145637],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[14,145639,145641],{"id":145640},"_2112-媒体查询","21.1.2 媒体查询",[416,145643,145644],{},[419,145645,145646],{},"参数介绍",[401,145648],{"style":127745,"src":145649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[401,145651],{"style":127745,"src":145652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[401,145654],{"style":127745,"src":145655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[401,145657],{"style":127745,"src":145658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[401,145660],{"style":127745,"src":145661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[270,145663,145665],{"className":127889,"code":145664,"language":127891,"meta":275,"style":275},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[277,145666,145667,145672,145691,145698,145711,145715],{"__ignoreMap":275},[152,145668,145669],{"class":281,"line":282},[152,145670,145671],{"class":866},"\u002F* 媒体查询 *\u002F\n",[152,145673,145674,145677,145679,145682,145684,145687,145689],{"class":281,"line":303},[152,145675,145676],{"class":476},"@media",[152,145678,3322],{"class":483},[152,145680,145681],{"class":293},"max-width",[152,145683,52774],{"class":483},[152,145685,145686],{"class":293},"768",[152,145688,52829],{"class":476},[152,145690,14058],{"class":483},[152,145692,145693,145696],{"class":281,"line":310},[152,145694,145695],{"class":285},"  .container",[152,145697,17187],{"class":483},[152,145699,145700,145703,145705,145707,145709],{"class":281,"line":324},[152,145701,145702],{"class":293},"    width",[152,145704,52774],{"class":483},[152,145706,2119],{"class":293},[152,145708,2136],{"class":476},[152,145710,2965],{"class":483},[152,145712,145713],{"class":281,"line":329},[152,145714,128685],{"class":483},[152,145716,145717],{"class":281,"line":343},[152,145718,3236],{"class":483},[19,145720,145721],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[416,145723,145724],{"start":303},[419,145725,145726],{},"引入资源",[401,145728],{"style":127745,"src":145729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145731,145732],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[14,145734,145736],{"id":145735},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[698,145738,145739,145742,145745],{},[419,145740,145741],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[419,145743,145744],{},"媒体查询可以根据不同设备宽度来修改样式",[419,145746,145747],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[1760,145749,145751],{"id":145750},"_212-less基础","21.2 Less基础",[19,145753,145754],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,145756,145757],{},"Less可以解决该问题，它是css的扩展语言",[19,145759,145760,145761],{},"Less中文网址： ",[69,145762,145763],{"href":145763,"rel":145764},"http:\u002F\u002Flesscss.cn\u002F",[245],[19,145766,145767],{},[694,145768,145769],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[14,145771,145773],{"id":145772},"_2121-less安装","21.2.1 less安装",[19,145775,145776],{},"如果使用vscode，则无需进行下方安装步骤",[19,145778,145779],{},[69,145780,145781],{"href":145781,"rel":145782},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[245],[401,145784],{"style":127745,"src":145785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[14,145787,145789],{"id":145788},"_2122-less使用","21.2.2 less使用",[19,145791,145792],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[416,145794,145795],{},[419,145796,145797],{},[694,145798,145799],{},"Less 变量",[401,145801],{"style":127745,"src":145802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[401,145804],{"style":127745,"src":145805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[416,145807,145808],{"start":303},[419,145809,145810],{},[694,145811,145812],{},"Less 编译",[401,145814],{"style":127745,"src":145815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[416,145817,145818],{"start":310},[419,145819,145820],{},[694,145821,145822],{},"Less 嵌套",[401,145824],{"style":127745,"src":145825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[401,145827],{"style":127745,"src":145828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[416,145830,145831],{"start":324},[419,145832,145833],{},[694,145834,145835],{},"Less 运算",[401,145837],{"style":127745,"src":145838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145840,145841],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145843,1848],{},[698,145845,145846,145849,145852,145855,145858],{},[419,145847,145848],{},"乘号（*）和除号（\u002F）的写法",[419,145850,145851],{},"运算符中间左右有个空格隔开 1px + 5",[419,145853,145854],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[419,145856,145857],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[419,145859,145860],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[1760,145862,145864],{"id":145863},"_213-rem-适配方案","21.3 rem 适配方案",[19,145866,145867],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145869,145870],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[401,145872],{"style":127745,"src":145873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[14,145875,145877],{"id":145876},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145879,145880],{},"rem + 媒体查询 + less 技术",[401,145882],{"style":127745,"src":145883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145885,145886],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145888,145889],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[401,145891],{"style":127745,"src":145892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145894,145895],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145897,607],{},[401,145899],{"style":127745,"src":145900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145902,145903],{},"index.html:",[270,145905,145907],{"className":127889,"code":145906,"language":127891,"meta":275,"style":275},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[277,145908,145909,145914,145920,145936,145940,145946,145962],{"__ignoreMap":275},[152,145910,145911],{"class":281,"line":282},[152,145912,145913],{"class":866},"\u002F* rem 适配方案 *\u002F\n",[152,145915,145916,145918],{"class":281,"line":303},[152,145917,51972],{"class":52637},[152,145919,17187],{"class":483},[152,145921,145922,145924,145926,145929,145931,145933],{"class":281,"line":310},[152,145923,71963],{"class":293},[152,145925,52774],{"class":483},[152,145927,145928],{"class":293},"62.5",[152,145930,2136],{"class":476},[152,145932,131752],{"class":483},[152,145934,145935],{"class":866},"\u002F* 1rem = 10px *\u002F\n",[152,145937,145938],{"class":281,"line":324},[152,145939,3236],{"class":483},[152,145941,145942,145944],{"class":281,"line":329},[152,145943,131737],{"class":285},[152,145945,17187],{"class":483},[152,145947,145948,145950,145952,145954,145957,145959],{"class":281,"line":343},[152,145949,71905],{"class":293},[152,145951,52774],{"class":483},[152,145953,2254],{"class":293},[152,145955,145956],{"class":476},"rem",[152,145958,131752],{"class":483},[152,145960,145961],{"class":866},"\u002F* 100px *\u002F\n",[152,145963,145964],{"class":281,"line":348},[152,145965,3236],{"class":483},[19,145967,145968],{},"common.less",[270,145970,145972],{"className":127889,"code":145971,"language":127891,"meta":275,"style":275},"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",[277,145973,145974,145980,145995,145999,146005,146019,146023,146027,146031,146037,146051,146055,146061,146075],{"__ignoreMap":275},[152,145975,145976,145978],{"class":281,"line":282},[152,145977,51972],{"class":52637},[152,145979,17187],{"class":483},[152,145981,145982,145984,145986,145988,145990,145992],{"class":281,"line":303},[152,145983,71963],{"class":293},[152,145985,52774],{"class":483},[152,145987,145928],{"class":293},[152,145989,2136],{"class":476},[152,145991,27677],{"class":483},[152,145993,145994],{"class":866},"\u002F* 10px *\u002F\n",[152,145996,145997],{"class":281,"line":310},[152,145998,3236],{"class":483},[152,146000,146001,146003],{"class":281,"line":324},[152,146002,52948],{"class":52637},[152,146004,17187],{"class":483},[152,146006,146007,146009,146011,146013,146015,146017],{"class":281,"line":329},[152,146008,71905],{"class":293},[152,146010,52774],{"class":483},[152,146012,2254],{"class":293},[152,146014,145956],{"class":476},[152,146016,27677],{"class":483},[152,146018,145961],{"class":866},[152,146020,146021],{"class":281,"line":343},[152,146022,3236],{"class":483},[152,146024,146025],{"class":281,"line":348},[152,146026,137350],{"class":483},[152,146028,146029],{"class":281,"line":362},[152,146030,145913],{"class":866},[152,146032,146033,146035],{"class":281,"line":367},[152,146034,51972],{"class":52637},[152,146036,17187],{"class":483},[152,146038,146039,146041,146043,146045,146047,146049],{"class":281,"line":381},[152,146040,71963],{"class":293},[152,146042,52774],{"class":483},[152,146044,145928],{"class":293},[152,146046,2136],{"class":476},[152,146048,131752],{"class":483},[152,146050,145935],{"class":866},[152,146052,146053],{"class":281,"line":386},[152,146054,3236],{"class":483},[152,146056,146057,146059],{"class":281,"line":932},[152,146058,131737],{"class":285},[152,146060,17187],{"class":483},[152,146062,146063,146065,146067,146069,146071,146073],{"class":281,"line":942},[152,146064,71905],{"class":293},[152,146066,52774],{"class":483},[152,146068,2254],{"class":293},[152,146070,145956],{"class":476},[152,146072,131752],{"class":483},[152,146074,145961],{"class":866},[152,146076,146077],{"class":281,"line":949},[152,146078,3236],{"class":483},[19,146080,146081,146082,146085],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25168,146083,146084],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[270,146087,146090],{"className":146088,"code":146089,"language":6829},[6827],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[277,146091,146089],{"__ignoreMap":275},[19,146093,146094],{},"less保存时会自动变成.css文件",[19,146096,146097],{},"好好搞懂上述代码写法",[14,146099,146101],{"id":146100},"_2132-样式导入样式","21.3.2 样式导入样式",[401,146103],{"style":127745,"src":146104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[14,146106,146108],{"id":146107},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[416,146110,146111],{},[419,146112,146113],{},"准备工作",[401,146115],{"style":127745,"src":146116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146118,146119,146120],{},"github地址：",[69,146121,146122],{"href":146122,"rel":146123},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[245],[19,146125,146126],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146128,146129,146130],{},"js文件引入到index.html中使用的是",[277,146131,146132],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[416,146134,146135],{"start":303},[419,146136,146137],{},"vscode插件",[401,146139],{"style":127745,"src":146140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146142,146143],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146145,146146],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[401,146148],{"style":127745,"src":146149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146151,146152],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[401,146154],{"style":127745,"src":146155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146157,146158],{},"修改成75就可以，alt+z为快捷键",[19,146160,146161],{},"index.css：",[270,146163,146164],{"className":127889,"code":145906,"language":127891,"meta":275,"style":275},[277,146165,146166,146170,146176,146190,146194,146200,146214],{"__ignoreMap":275},[152,146167,146168],{"class":281,"line":282},[152,146169,145913],{"class":866},[152,146171,146172,146174],{"class":281,"line":303},[152,146173,51972],{"class":52637},[152,146175,17187],{"class":483},[152,146177,146178,146180,146182,146184,146186,146188],{"class":281,"line":310},[152,146179,71963],{"class":293},[152,146181,52774],{"class":483},[152,146183,145928],{"class":293},[152,146185,2136],{"class":476},[152,146187,131752],{"class":483},[152,146189,145935],{"class":866},[152,146191,146192],{"class":281,"line":324},[152,146193,3236],{"class":483},[152,146195,146196,146198],{"class":281,"line":329},[152,146197,131737],{"class":285},[152,146199,17187],{"class":483},[152,146201,146202,146204,146206,146208,146210,146212],{"class":281,"line":343},[152,146203,71905],{"class":293},[152,146205,52774],{"class":483},[152,146207,2254],{"class":293},[152,146209,145956],{"class":476},[152,146211,131752],{"class":483},[152,146213,145961],{"class":866},[152,146215,146216],{"class":281,"line":348},[152,146217,3236],{"class":483},[19,146219,145903],{},[270,146221,146222],{"className":127889,"code":128293,"language":127891,"meta":275,"style":275},[277,146223,146224,146230,146242],{"__ignoreMap":275},[152,146225,146226,146228],{"class":281,"line":282},[152,146227,53137],{"class":52637},[152,146229,17187],{"class":483},[152,146231,146232,146234,146236,146238,146240],{"class":281,"line":303},[152,146233,71963],{"class":293},[152,146235,52774],{"class":483},[152,146237,2409],{"class":293},[152,146239,52829],{"class":476},[152,146241,2965],{"class":483},[152,146243,146244],{"class":281,"line":310},[152,146245,3236],{"class":483},[1760,146247,146249],{"id":146248},"_214-响应式开发","21.4 响应式开发",[19,146251,146252],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[401,146254],{"style":127745,"src":146255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146257,146258],{},"做法：",[698,146260,146261,146264],{},[419,146262,146263],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[419,146265,146266],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[401,146268],{"style":127745,"src":146269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146271,146272],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[14,146274,146276],{"id":146275},"_2141-简单代码示范","21.4.1 简单代码示范",[270,146278,146279],{"className":127889,"code":145906,"language":127891,"meta":275,"style":275},[277,146280,146281,146285,146291,146305,146309,146315,146329],{"__ignoreMap":275},[152,146282,146283],{"class":281,"line":282},[152,146284,145913],{"class":866},[152,146286,146287,146289],{"class":281,"line":303},[152,146288,51972],{"class":52637},[152,146290,17187],{"class":483},[152,146292,146293,146295,146297,146299,146301,146303],{"class":281,"line":310},[152,146294,71963],{"class":293},[152,146296,52774],{"class":483},[152,146298,145928],{"class":293},[152,146300,2136],{"class":476},[152,146302,131752],{"class":483},[152,146304,145935],{"class":866},[152,146306,146307],{"class":281,"line":324},[152,146308,3236],{"class":483},[152,146310,146311,146313],{"class":281,"line":329},[152,146312,131737],{"class":285},[152,146314,17187],{"class":483},[152,146316,146317,146319,146321,146323,146325,146327],{"class":281,"line":343},[152,146318,71905],{"class":293},[152,146320,52774],{"class":483},[152,146322,2254],{"class":293},[152,146324,145956],{"class":476},[152,146326,131752],{"class":483},[152,146328,145961],{"class":866},[152,146330,146331],{"class":281,"line":348},[152,146332,3236],{"class":483},[19,146334,146335],{},"父盒子一般命名为container",[14,146337,146339],{"id":146338},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146341,146342,146343],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[694,146344,146345],{},"使得 Web 开发更加快捷",[698,146347,146348],{},[419,146349,146350,146351],{},"官网：",[694,146352,146353],{},[69,146354,146355],{"href":146355,"rel":146356},"http:\u002F\u002Fgetbootstrap.com\u002F",[245],[19,146358,146359],{},"可以直接去官网拿现成的东西",[416,146361,146362],{},[419,146363,146364],{},"Bootstrap的使用",[19,146366,146367],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146369,146370],{},"Bootstrap 使用四步曲：",[19,146372,146373,146376],{},[694,146374,146375],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[401,146378],{"style":127745,"src":146379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146381,146382],{},"打开Bootstrap官网，然后下载",[401,146384],{"style":127745,"src":146385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[401,146387],{"style":127745,"src":146388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146390,146391],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146393,146394],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146396,146397],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[401,146399],{"style":127745,"src":146400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[270,146402,146404],{"className":127889,"code":146403,"language":127891,"meta":275,"style":275},".center {\n  color: red;\n}\n",[277,146405,146406,146412,146422],{"__ignoreMap":275},[152,146407,146408,146410],{"class":281,"line":282},[152,146409,128180],{"class":285},[152,146411,17187],{"class":483},[152,146413,146414,146416,146418,146420],{"class":281,"line":303},[152,146415,72242],{"class":293},[152,146417,52774],{"class":483},[152,146419,58758],{"class":293},[152,146421,2965],{"class":483},[152,146423,146424],{"class":281,"line":310},[152,146425,3236],{"class":483},[19,146427,146428,146431],{},[277,146429,146430],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[401,146433],{"style":127745,"src":146434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[401,146436],{"style":127745,"src":146437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[401,146439],{"style":127745,"src":146440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146442,146443],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[401,146445],{"style":127745,"src":146446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146448,146449],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[416,146451,146452],{"start":303},[419,146453,146454],{},"布局容器",[401,146456],{"style":127745,"src":146457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146459,146460],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146462,146463],{},"container-fluid用于移动式布局比较方便",[416,146465,146466],{"start":310},[419,146467,146468,146469],{},"bootstrap ",[694,146470,146471],{},"栅格系统原理",[401,146473],{"style":127745,"src":146474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[416,146476,146477],{"start":324},[419,146478,146479],{},[694,146480,146481],{},"栅格选项参数",[401,146483],{"style":127745,"src":146484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146486,146487],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146489,607],{},[270,146491,146492],{"className":127889,"code":146403,"language":127891,"meta":275,"style":275},[277,146493,146494,146500,146510],{"__ignoreMap":275},[152,146495,146496,146498],{"class":281,"line":282},[152,146497,128180],{"class":285},[152,146499,17187],{"class":483},[152,146501,146502,146504,146506,146508],{"class":281,"line":303},[152,146503,72242],{"class":293},[152,146505,52774],{"class":483},[152,146507,58758],{"class":293},[152,146509,2965],{"class":483},[152,146511,146512],{"class":281,"line":310},[152,146513,3236],{"class":483},[19,146515,136932],{},[401,146517],{"style":127745,"src":146518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146520,146521],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146523,146524],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146526,146527],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146529,146530],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146532,146533],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146535,146536],{},"汇总展示说明：",[270,146538,146539],{"className":128636,"code":131993,"language":128638,"meta":275,"style":275},[277,146540,146541,146545,146559,146563],{"__ignoreMap":275},[152,146542,146543],{"class":281,"line":282},[152,146544,132000],{"class":866},[152,146546,146547,146549,146551,146553,146555,146557],{"class":281,"line":303},[152,146548,844],{"class":483},[152,146550,52948],{"class":52637},[152,146552,54823],{"class":285},[152,146554,1864],{"class":483},[152,146556,132013],{"class":289},[152,146558,52644],{"class":483},[152,146560,146561],{"class":281,"line":310},[152,146562,132020],{"class":483},[152,146564,146565,146567,146569],{"class":281,"line":324},[152,146566,53122],{"class":483},[152,146568,52948],{"class":52637},[152,146570,52644],{"class":483},[401,146572],{"style":127745,"src":146573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146575,146576],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[270,146578,146579],{"className":128636,"code":131993,"language":128638,"meta":275,"style":275},[277,146580,146581,146585,146599,146603],{"__ignoreMap":275},[152,146582,146583],{"class":281,"line":282},[152,146584,132000],{"class":866},[152,146586,146587,146589,146591,146593,146595,146597],{"class":281,"line":303},[152,146588,844],{"class":483},[152,146590,52948],{"class":52637},[152,146592,54823],{"class":285},[152,146594,1864],{"class":483},[152,146596,132013],{"class":289},[152,146598,52644],{"class":483},[152,146600,146601],{"class":281,"line":310},[152,146602,132020],{"class":483},[152,146604,146605,146607,146609],{"class":281,"line":324},[152,146606,53122],{"class":483},[152,146608,52948],{"class":52637},[152,146610,52644],{"class":483},[416,146612,146613],{"start":329},[419,146614,146615],{},[694,146616,146617],{},"列嵌套",[401,146619],{"style":127745,"src":146620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146622,146623],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146625,146626],{},"没加row内部这样：",[401,146628],{"style":127745,"src":146629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146631,146632],{},"加上row之后内部为：",[401,146634],{"style":127745,"src":146635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[416,146637,146638],{"start":343},[419,146639,146640],{},[694,146641,146642],{},"列偏移",[401,146644],{"style":127745,"src":146645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146647,146648],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146650,146651],{},"要加偏移量，即偏移份数",[19,146653,146654],{},"偏移的份数=12-两个盒子的份数",[416,146656,146657],{"start":348},[419,146658,146659],{},[694,146660,146661],{},"列排序",[401,146663],{"style":127745,"src":146664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146666,146667],{},"pull拉左；push推右",[416,146669,146670],{"start":362},[419,146671,146672],{},[694,146673,146674],{},"响应式工具",[401,146676],{"style":127745,"src":146677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146679,146680],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[14,146682,146684],{"id":146683},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146686,146687],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146689,146690],{},"ul {",[19,146692,146693],{},"list-style: none;",[19,146695,146696],{},"margin:0;",[19,146698,146699],{},"padding:0; }",[401,146701],{"style":127745,"src":146702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[401,146704],{"style":127745,"src":146705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146707,146708],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146710,70226],{},[270,146712,146713],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},[277,146714,146715,146721,146731],{"__ignoreMap":275},[152,146716,146717,146719],{"class":281,"line":282},[152,146718,131737],{"class":285},[152,146720,17187],{"class":483},[152,146722,146723,146725,146727,146729],{"class":281,"line":303},[152,146724,132369],{"class":293},[152,146726,52774],{"class":483},[152,146728,34],{"class":293},[152,146730,2965],{"class":483},[152,146732,146733],{"class":281,"line":310},[152,146734,3236],{"class":483},[19,146736,71790],{},[270,146738,146739],{"className":127889,"code":140559,"language":127891,"meta":275,"style":275},[277,146740,146741,146747,146757],{"__ignoreMap":275},[152,146742,146743,146745],{"class":281,"line":282},[152,146744,131737],{"class":285},[152,146746,17187],{"class":483},[152,146748,146749,146751,146753,146755],{"class":281,"line":303},[152,146750,132369],{"class":293},[152,146752,52774],{"class":483},[152,146754,34],{"class":293},[152,146756,2965],{"class":483},[152,146758,146759],{"class":281,"line":310},[152,146760,3236],{"class":483},[1760,146762,146764],{"id":146763},"_215-swiper-插件使用","21.5 swiper 插件使用",[698,146766,146767,146770,146773],{},[419,146768,146769],{},"下载需要的css和js文件html页面中 引入相关文件",[419,146771,146772],{},"官网找到类似案例，复制html结构，css样式 js 语法",[419,146774,146775],{},"根据需求定制修改模块",[401,146777],{"style":127745,"src":146778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,146780,146781],{},"解压后将这两部分放到项目中",[401,146783],{"style":127745,"src":146784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,146786,146787],{},"这个插件可以帮助我们实现轮播图效果",[19,146789,146790],{},"用法：",[401,146792],{"style":127745,"src":146793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,146795,146796],{},"找到自己喜欢的",[401,146798],{"style":127745,"src":146799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146801,146802],{},"右键，查看网页源代码",[401,146804],{"style":127745,"src":146805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146807,146808],{},"复制人家的结构内容",[19,146810,146811],{},"然后去看API文档：",[401,146813],{"style":127745,"src":146814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146816,146817],{},"可以看看如何修改样式",[19,146819,146820],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1736,146822,146823],{},"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":275,"searchDepth":303,"depth":303,"links":146825},[146826,146831,146835,146840,146845],{"id":145626,"depth":303,"text":145627,"children":146827},[146828,146829,146830],{"id":145630,"depth":310,"text":145631},{"id":145640,"depth":310,"text":145641},{"id":145735,"depth":310,"text":145736},{"id":145750,"depth":303,"text":145751,"children":146832},[146833,146834],{"id":145772,"depth":310,"text":145773},{"id":145788,"depth":310,"text":145789},{"id":145863,"depth":303,"text":145864,"children":146836},[146837,146838,146839],{"id":145876,"depth":310,"text":145877},{"id":146100,"depth":310,"text":146101},{"id":146107,"depth":310,"text":146108},{"id":146248,"depth":303,"text":146249,"children":146841},[146842,146843,146844],{"id":146275,"depth":310,"text":146276},{"id":146338,"depth":310,"text":146339},{"id":146683,"depth":310,"text":146684},{"id":146763,"depth":303,"text":146764},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145618,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146852,"title":146853,"body":146854,"description":24991,"extension":1744,"meta":147074,"navigation":306,"path":147075,"seo":147076,"stem":147077,"__hash__":147078},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146855,"toc":147070},[146856,146859,146863,146866,146881,146886,146889,146894,146929,146934,146946,146951,146964,146969,146986,146991,147011,147016,147034,147037,147040,147043,147046,147050,147053,147056,147059,147062,147065,147068],[10,146857,146853],{"id":146858},"_22-代码提交与新型相对单位",[1760,146860,146862],{"id":146861},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146864,146865],{},"法1：",[416,146867,146868,146875,146878],{},[419,146869,146870,146871],{},"登录网站注册：",[69,146872,146873],{"href":146873,"rel":146874},"https:\u002F\u002Fgitee.com\u002F",[245],[419,146876,146877],{},"码云创建新的仓库",[419,146879,146880],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[698,146882,146883],{},[419,146884,146885],{},"在网站根目录右键-- Git Bash Here",[401,146887],{"style":127745,"src":146888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[698,146890,146891],{},[419,146892,146893],{},"如果是第一次利用git提交，请配置好全局选项",[270,146895,146897],{"className":118633,"code":146896,"language":118635,"meta":275,"style":275},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[277,146898,146899,146915],{"__ignoreMap":275},[152,146900,146901,146904,146906,146909,146912],{"class":281,"line":282},[152,146902,146903],{"class":285},"git",[152,146905,121056],{"class":289},[152,146907,146908],{"class":293}," --global",[152,146910,146911],{"class":289}," user.name",[152,146913,146914],{"class":289}," \"你的名字\"\n",[152,146916,146917,146919,146921,146923,146926],{"class":281,"line":303},[152,146918,146903],{"class":285},[152,146920,121056],{"class":289},[152,146922,146908],{"class":293},[152,146924,146925],{"class":289}," user.email",[152,146927,146928],{"class":289}," \"你的邮箱\"\n",[698,146930,146931],{},[419,146932,146933],{},"初始化仓库",[270,146935,146937],{"className":118633,"code":146936,"language":118635,"meta":275,"style":275},"git init\n",[277,146938,146939],{"__ignoreMap":275},[152,146940,146941,146943],{"class":281,"line":282},[152,146942,146903],{"class":285},[152,146944,146945],{"class":289}," init\n",[698,146947,146948],{},[419,146949,146950],{},"把本地文件放到暂存区",[270,146952,146954],{"className":118633,"code":146953,"language":118635,"meta":275,"style":275},"git add .\n",[277,146955,146956],{"__ignoreMap":275},[152,146957,146958,146960,146962],{"class":281,"line":282},[152,146959,146903],{"class":285},[152,146961,6851],{"class":289},[152,146963,300],{"class":289},[698,146965,146966],{},[419,146967,146968],{},"把本地文件放到本地仓库里面",[270,146970,146972],{"className":118633,"code":146971,"language":118635,"meta":275,"style":275},"git commit -m \"first commit\"\n",[277,146973,146974],{"__ignoreMap":275},[152,146975,146976,146978,146981,146983],{"class":281,"line":282},[152,146977,146903],{"class":285},[152,146979,146980],{"class":289}," commit",[152,146982,102219],{"class":293},[152,146984,146985],{"class":289}," \"first commit\"\n",[698,146987,146988],{},[419,146989,146990],{},"链接远程仓库",[270,146992,146994],{"className":118633,"code":146993,"language":118635,"meta":275,"style":275},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[277,146995,146996],{"__ignoreMap":275},[152,146997,146998,147000,147003,147005,147008],{"class":281,"line":282},[152,146999,146903],{"class":285},[152,147001,147002],{"class":289}," remote",[152,147004,6851],{"class":289},[152,147006,147007],{"class":289}," origin",[152,147009,147010],{"class":289}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[698,147012,147013],{},[419,147014,147015],{},"把本地仓库的文件推送到远程仓库 push",[270,147017,147019],{"className":118633,"code":147018,"language":118635,"meta":275,"style":275},"git push -u origin master\n",[277,147020,147021],{"__ignoreMap":275},[152,147022,147023,147025,147027,147029,147031],{"class":281,"line":282},[152,147024,146903],{"class":285},[152,147026,593],{"class":289},[152,147028,29889],{"class":293},[152,147030,147007],{"class":289},[152,147032,147033],{"class":289}," master\n",[401,147035],{"style":127745,"src":147036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147038,147039],{},"上方方法暂未实现，后边学完git后在整",[19,147041,147042],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[401,147044],{"style":127745,"src":147045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[1760,147047,147049],{"id":147048},"_222-新型相对单位","22.2 新型相对单位",[401,147051],{"style":127745,"src":147052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[401,147054],{"style":127745,"src":147055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147057,147058],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147060,147061],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[401,147063],{"style":127745,"src":147064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147066,147067],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1736,147069,25569],{},{"title":275,"searchDepth":303,"depth":303,"links":147071},[147072,147073],{"id":146861,"depth":303,"text":146862},{"id":147048,"depth":303,"text":147049},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146853,"description":24991},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147080,"title":147081,"body":147082,"description":147086,"extension":1744,"meta":147087,"navigation":306,"path":147088,"seo":147089,"stem":147090,"__hash__":147091},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147083,"toc":147084},[],{"title":275,"searchDepth":303,"depth":303,"links":147085},[],"自己正经开始学编程的第一门语言！",{"category":94176},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147081,"description":147086},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147093,"title":147094,"body":147095,"description":24991,"extension":1744,"meta":148242,"navigation":306,"path":148243,"seo":148244,"stem":148245,"__hash__":148246},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147096,"toc":148218},[147097,147100,147104,147107,147110,147135,147138,147144,147148,147151,147178,147181,147221,147224,147236,147239,147245,147249,147253,147280,147297,147304,147308,147311,147337,147340,147344,147347,147387,147390,147407,147413,147417,147422,147466,147469,147487,147490,147558,147562,147569,147572,147587,147590,147599,147602,147613,147616,147625,147628,147645,147648,147663,147667,147671,147674,147676,147696,147700,147703,147706,147717,147720,147726,147730,147736,147763,147766,147778,147781,147792,147795,147801,147805,147811,147861,147864,147906,147909,147942,147945,147979,147983,147986,148006,148009,148045,148048,148061,148065,148069,148075,148078,148091,148095,148098,148104,148107,148111,148114,148117,148166,148170,148186,148192,148199,148205,148215],[10,147098,147094],{"id":147099},"_1-python环境与第一个程序",[1760,147101,147103],{"id":147102},"_11-什么是python","1.1 什么是Python",[19,147105,147106],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147108,147109],{},"理解 Python 时抓住三个关键词：",[416,147111,147112,147115,147118],{},[419,147113,147114],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[419,147116,147117],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[419,147119,147120,147121,2021,147124,2021,147127,2021,147130,2021,147132,29984],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[277,147122,147123],{},"os",[277,147125,147126],{},"sys",[277,147128,147129],{},"json",[277,147131,59197],{},[277,147133,147134],{},"datetime",[19,147136,147137],{},"Python 程序的运行链路：",[270,147139,147142],{"className":147140,"code":147141,"language":6829,"meta":275},[6827],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[277,147143,147141],{"__ignoreMap":275},[1760,147145,147147],{"id":147146},"_12-python解释器","1.2 Python解释器",[19,147149,147150],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[270,147152,147154],{"className":272,"code":147153,"language":274,"meta":275,"style":275},"python --version\npython3 --version\npython\npython3\n",[277,147155,147156,147162,147168,147173],{"__ignoreMap":275},[152,147157,147158,147160],{"class":281,"line":282},[152,147159,31717],{"class":285},[152,147161,27899],{"class":293},[152,147163,147164,147166],{"class":281,"line":303},[152,147165,102216],{"class":285},[152,147167,27899],{"class":293},[152,147169,147170],{"class":281,"line":310},[152,147171,147172],{"class":285},"python\n",[152,147174,147175],{"class":281,"line":324},[152,147176,147177],{"class":285},"python3\n",[19,147179,147180],{},"进入交互模式后，可以直接输入表达式：",[270,147182,147184],{"className":31715,"code":147183,"language":31717,"meta":275,"style":275},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[277,147185,147186,147197,147202,147216],{"__ignoreMap":275},[152,147187,147188,147191,147193,147195],{"class":281,"line":282},[152,147189,147190],{"class":476},">>>",[152,147192,26729],{"class":293},[152,147194,46903],{"class":476},[152,147196,49060],{"class":293},[152,147198,147199],{"class":281,"line":303},[152,147200,147201],{"class":293},"3\n",[152,147203,147204,147206,147209,147211,147214],{"class":281,"line":310},[152,147205,147190],{"class":476},[152,147207,147208],{"class":293}," print",[152,147210,1819],{"class":483},[152,147212,147213],{"class":289},"\"hello python\"",[152,147215,1825],{"class":483},[152,147217,147218],{"class":281,"line":324},[152,147219,147220],{"class":483},"hello python\n",[19,147222,147223],{},"退出交互模式：",[270,147225,147227],{"className":31715,"code":147226,"language":31717,"meta":275,"style":275},"exit()\n",[277,147228,147229],{"__ignoreMap":275},[152,147230,147231,147234],{"class":281,"line":282},[152,147232,147233],{"class":293},"exit",[152,147235,3627],{"class":483},[19,147237,147238],{},"或使用快捷键：",[270,147240,147243],{"className":147241,"code":147242,"language":6829,"meta":275},[6827],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[277,147244,147242],{"__ignoreMap":275},[1760,147246,147248],{"id":147247},"_13-安装python","1.3 安装Python",[14,147250,147252],{"id":147251},"_131-windows安装","1.3.1 Windows安装",[416,147254,147255,147262,147265,147271,147277],{},[419,147256,147257,147258],{},"打开 Python 官网：",[69,147259,147260],{"href":147260,"rel":147261},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[245],[419,147263,147264],{},"下载 Windows Installer。",[419,147266,147267,147268,29984],{},"安装时勾选 ",[277,147269,147270],{},"Add Python to PATH",[419,147272,147273,147274,29984],{},"点击 ",[277,147275,147276],{},"Install Now",[419,147278,147279],{},"安装完成后打开命令提示符验证：",[270,147281,147283],{"className":272,"code":147282,"language":274,"meta":275,"style":275},"python --version\npip --version\n",[277,147284,147285,147291],{"__ignoreMap":275},[152,147286,147287,147289],{"class":281,"line":282},[152,147288,31717],{"class":285},[152,147290,27899],{"class":293},[152,147292,147293,147295],{"class":281,"line":303},[152,147294,25443],{"class":285},[152,147296,27899],{"class":293},[19,147298,147299,147300,147303],{},"如果提示 ",[277,147301,147302],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[14,147305,147307],{"id":147306},"_132-macos安装","1.3.2 macOS安装",[19,147309,147310],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[270,147312,147314],{"className":272,"code":147313,"language":274,"meta":275,"style":275},"brew install python\npython3 --version\npip3 --version\n",[277,147315,147316,147325,147331],{"__ignoreMap":275},[152,147317,147318,147321,147323],{"class":281,"line":282},[152,147319,147320],{"class":285},"brew",[152,147322,25446],{"class":289},[152,147324,125655],{"class":289},[152,147326,147327,147329],{"class":281,"line":303},[152,147328,102216],{"class":285},[152,147330,27899],{"class":293},[152,147332,147333,147335],{"class":281,"line":310},[152,147334,121037],{"class":285},[152,147336,27899],{"class":293},[19,147338,147339],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[14,147341,147343],{"id":147342},"_133-linux安装","1.3.3 Linux安装",[19,147345,147346],{},"Ubuntu\u002FDebian：",[270,147348,147350],{"className":272,"code":147349,"language":274,"meta":275,"style":275},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[277,147351,147352,147360,147375,147381],{"__ignoreMap":275},[152,147353,147354,147356,147358],{"class":281,"line":282},[152,147355,26188],{"class":285},[152,147357,118654],{"class":289},[152,147359,27848],{"class":289},[152,147361,147362,147364,147366,147368,147370,147372],{"class":281,"line":303},[152,147363,26188],{"class":285},[152,147365,118654],{"class":289},[152,147367,25446],{"class":289},[152,147369,105740],{"class":289},[152,147371,102135],{"class":289},[152,147373,147374],{"class":289}," python3-venv\n",[152,147376,147377,147379],{"class":281,"line":310},[152,147378,102216],{"class":285},[152,147380,27899],{"class":293},[152,147382,147383,147385],{"class":281,"line":324},[152,147384,121037],{"class":285},[152,147386,27899],{"class":293},[19,147388,147389],{},"Fedora：",[270,147391,147393],{"className":272,"code":147392,"language":274,"meta":275,"style":275},"sudo dnf install python3 python3-pip\n",[277,147394,147395],{"__ignoreMap":275},[152,147396,147397,147399,147401,147403,147405],{"class":281,"line":282},[152,147398,26188],{"class":285},[152,147400,27921],{"class":289},[152,147402,25446],{"class":289},[152,147404,105740],{"class":289},[152,147406,121102],{"class":289},[19,147408,147409,147410,147412],{},"Linux 上通常使用 ",[277,147411,102216],{}," 命令，避免和系统旧版本 Python 冲突。",[1760,147414,147416],{"id":147415},"_14-pip包管理器","1.4 pip包管理器",[19,147418,147419,147421],{},[277,147420,25443],{}," 用来安装第三方库。",[270,147423,147425],{"className":272,"code":147424,"language":274,"meta":275,"style":275},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[277,147426,147427,147436,147445,147453,147459],{"__ignoreMap":275},[152,147428,147429,147431,147433],{"class":281,"line":282},[152,147430,25443],{"class":285},[152,147432,25446],{"class":289},[152,147434,147435],{"class":289}," requests\n",[152,147437,147438,147440,147443],{"class":281,"line":303},[152,147439,25443],{"class":285},[152,147441,147442],{"class":289}," uninstall",[152,147444,147435],{"class":289},[152,147446,147447,147449,147451],{"class":281,"line":310},[152,147448,25443],{"class":285},[152,147450,118911],{"class":289},[152,147452,147435],{"class":289},[152,147454,147455,147457],{"class":281,"line":324},[152,147456,25443],{"class":285},[152,147458,120292],{"class":289},[152,147460,147461,147463],{"class":281,"line":329},[152,147462,25443],{"class":285},[152,147464,147465],{"class":289}," freeze\n",[19,147467,147468],{},"国内网络较慢时可以临时使用镜像：",[270,147470,147472],{"className":272,"code":147471,"language":274,"meta":275,"style":275},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[277,147473,147474],{"__ignoreMap":275},[152,147475,147476,147478,147480,147483,147485],{"class":281,"line":282},[152,147477,25443],{"class":285},[152,147479,25446],{"class":289},[152,147481,147482],{"class":289}," requests",[152,147484,28035],{"class":293},[152,147486,121065],{"class":289},[19,147488,147489],{},"常见第三方库：",[23,147491,147492,147501],{},[26,147493,147494],{},[29,147495,147496,147499],{},[32,147497,147498],{},"库",[32,147500,104033],{},[43,147502,147503,147511,147518,147526,147534,147542,147550],{},[29,147504,147505,147508],{},[48,147506,147507],{},"requests",[48,147509,147510],{},"网络请求",[29,147512,147513,147515],{},[48,147514,101963],{},[48,147516,147517],{},"数值计算",[29,147519,147520,147523],{},[48,147521,147522],{},"pandas",[48,147524,147525],{},"表格数据处理",[29,147527,147528,147531],{},[48,147529,147530],{},"matplotlib",[48,147532,147533],{},"绘图",[29,147535,147536,147539],{},[48,147537,147538],{},"pyecharts",[48,147540,147541],{},"ECharts 图表",[29,147543,147544,147547],{},[48,147545,147546],{},"flask",[48,147548,147549],{},"Web 后端",[29,147551,147552,147555],{},[48,147553,147554],{},"pytest",[48,147556,147557],{},"自动化测试",[1760,147559,147561],{"id":147560},"_15-虚拟环境","1.5 虚拟环境",[19,147563,147564,147565,147568],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[277,147566,147567],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147570,147571],{},"创建虚拟环境：",[270,147573,147575],{"className":272,"code":147574,"language":274,"meta":275,"style":275},"python -m venv .venv\n",[277,147576,147577],{"__ignoreMap":275},[152,147578,147579,147581,147583,147585],{"class":281,"line":282},[152,147580,31717],{"class":285},[152,147582,102219],{"class":293},[152,147584,102222],{"class":289},[152,147586,102225],{"class":289},[19,147588,147589],{},"Windows 激活：",[270,147591,147593],{"className":272,"code":147592,"language":274,"meta":275,"style":275},".venv\\Scripts\\activate\n",[277,147594,147595],{"__ignoreMap":275},[152,147596,147597],{"class":281,"line":282},[152,147598,147592],{"class":285},[19,147600,147601],{},"macOS\u002FLinux 激活：",[270,147603,147605],{"className":272,"code":147604,"language":274,"meta":275,"style":275},"source .venv\u002Fbin\u002Factivate\n",[277,147606,147607],{"__ignoreMap":275},[152,147608,147609,147611],{"class":281,"line":282},[152,147610,102230],{"class":293},[152,147612,102233],{"class":289},[19,147614,147615],{},"退出虚拟环境：",[270,147617,147619],{"className":272,"code":147618,"language":274,"meta":275,"style":275},"deactivate\n",[277,147620,147621],{"__ignoreMap":275},[152,147622,147623],{"class":281,"line":282},[152,147624,147618],{"class":285},[19,147626,147627],{},"保存依赖：",[270,147629,147631],{"className":272,"code":147630,"language":274,"meta":275,"style":275},"pip freeze > requirements.txt\n",[277,147632,147633],{"__ignoreMap":275},[152,147634,147635,147637,147640,147642],{"class":281,"line":282},[152,147636,25443],{"class":285},[152,147638,147639],{"class":289}," freeze",[152,147641,1416],{"class":476},[152,147643,147644],{"class":289}," requirements.txt\n",[19,147646,147647],{},"安装依赖：",[270,147649,147651],{"className":272,"code":147650,"language":274,"meta":275,"style":275},"pip install -r requirements.txt\n",[277,147652,147653],{"__ignoreMap":275},[152,147654,147655,147657,147659,147661],{"class":281,"line":282},[152,147656,25443],{"class":285},[152,147658,25446],{"class":289},[152,147660,120976],{"class":293},[152,147662,147644],{"class":289},[1760,147664,147666],{"id":147665},"_16-开发工具","1.6 开发工具",[14,147668,147670],{"id":147669},"_161-pycharm","1.6.1 PyCharm",[19,147672,147673],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147675,123399],{},[416,147677,147678,147681,147684,147690,147693],{},[419,147679,147680],{},"New Project：创建项目。",[419,147682,147683],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[419,147685,147686,147687,127320],{},"New Python File：创建 ",[277,147688,147689],{},".py",[419,147691,147692],{},"Run：运行当前文件。",[419,147694,147695],{},"Debug：断点调试。",[14,147697,147699],{"id":147698},"_162-vs-code","1.6.2 VS Code",[19,147701,147702],{},"VS Code 轻量，适合后续多语言开发。",[19,147704,147705],{},"建议安装插件：",[416,147707,147708,147711,147714],{},[419,147709,147710],{},"Python。",[419,147712,147713],{},"Pylance。",[419,147715,147716],{},"Jupyter。",[19,147718,147719],{},"选择解释器：",[270,147721,147724],{"className":147722,"code":147723,"language":6829,"meta":275},[6827],"Ctrl + Shift + P -> Python: Select Interpreter\n",[277,147725,147723],{"__ignoreMap":275},[1760,147727,147729],{"id":147728},"_17-第一个python程序","1.7 第一个Python程序",[19,147731,147732,147733,26230],{},"创建文件 ",[277,147734,147735],{},"hello.py",[270,147737,147739],{"className":31715,"code":147738,"language":31717,"meta":275,"style":275},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[277,147740,147741,147752],{"__ignoreMap":275},[152,147742,147743,147745,147747,147750],{"class":281,"line":282},[152,147744,31752],{"class":293},[152,147746,1819],{"class":483},[152,147748,147749],{"class":289},"\"Hello World\"",[152,147751,1825],{"class":483},[152,147753,147754,147756,147758,147761],{"class":281,"line":303},[152,147755,31752],{"class":293},[152,147757,1819],{"class":483},[152,147759,147760],{"class":289},"\"你好，Python\"",[152,147762,1825],{"class":483},[19,147764,147765],{},"在终端运行：",[270,147767,147769],{"className":272,"code":147768,"language":274,"meta":275,"style":275},"python hello.py\n",[277,147770,147771],{"__ignoreMap":275},[152,147772,147773,147775],{"class":281,"line":282},[152,147774,31717],{"class":285},[152,147776,147777],{"class":289}," hello.py\n",[19,147779,147780],{},"或：",[270,147782,147784],{"className":272,"code":147783,"language":274,"meta":275,"style":275},"python3 hello.py\n",[277,147785,147786],{"__ignoreMap":275},[152,147787,147788,147790],{"class":281,"line":282},[152,147789,102216],{"class":285},[152,147791,147777],{"class":289},[19,147793,147794],{},"输出：",[270,147796,147799],{"className":147797,"code":147798,"language":6829,"meta":275},[6827],"Hello World\n你好，Python\n",[277,147800,147798],{"__ignoreMap":275},[1760,147802,147804],{"id":147803},"_18-print函数","1.8 print函数",[19,147806,147807,147810],{},[277,147808,147809],{},"print()"," 用来输出内容。",[270,147812,147814],{"className":31715,"code":147813,"language":31717,"meta":275,"style":275},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[277,147815,147816,147826,147836,147846],{"__ignoreMap":275},[152,147817,147818,147820,147822,147824],{"class":281,"line":282},[152,147819,31752],{"class":293},[152,147821,1819],{"class":483},[152,147823,7486],{"class":289},[152,147825,1825],{"class":483},[152,147827,147828,147830,147832,147834],{"class":281,"line":303},[152,147829,31752],{"class":293},[152,147831,1819],{"class":483},[152,147833,2119],{"class":293},[152,147835,1825],{"class":483},[152,147837,147838,147840,147842,147844],{"class":281,"line":310},[152,147839,31752],{"class":293},[152,147841,1819],{"class":483},[152,147843,1867],{"class":293},[152,147845,1825],{"class":483},[152,147847,147848,147850,147852,147855,147857,147859],{"class":281,"line":324},[152,147849,31752],{"class":293},[152,147851,1819],{"class":483},[152,147853,147854],{"class":289},"\"年龄:\"",[152,147856,14051],{"class":483},[152,147858,2458],{"class":293},[152,147860,1825],{"class":483},[19,147862,147863],{},"多个内容用逗号隔开，默认中间加空格：",[270,147865,147867],{"className":31715,"code":147866,"language":31717,"meta":275,"style":275},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[277,147868,147869,147879,147889],{"__ignoreMap":275},[152,147870,147871,147874,147876],{"class":281,"line":282},[152,147872,147873],{"class":483},"name ",[152,147875,1864],{"class":476},[152,147877,147878],{"class":289}," \"张三\"\n",[152,147880,147881,147884,147886],{"class":281,"line":303},[152,147882,147883],{"class":483},"age ",[152,147885,1864],{"class":476},[152,147887,147888],{"class":293}," 18\n",[152,147890,147891,147893,147895,147898,147901,147903],{"class":281,"line":310},[152,147892,31752],{"class":293},[152,147894,1819],{"class":483},[152,147896,147897],{"class":289},"\"姓名:\"",[152,147899,147900],{"class":483},", name, ",[152,147902,147854],{"class":289},[152,147904,147905],{"class":483},", age)\n",[19,147907,147908],{},"修改分隔符：",[270,147910,147912],{"className":31715,"code":147911,"language":31717,"meta":275,"style":275},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[277,147913,147914],{"__ignoreMap":275},[152,147915,147916,147918,147920,147923,147925,147927,147929,147931,147933,147936,147938,147940],{"class":281,"line":282},[152,147917,31752],{"class":293},[152,147919,1819],{"class":483},[152,147921,147922],{"class":289},"\"2024\"",[152,147924,14051],{"class":483},[152,147926,55653],{"class":289},[152,147928,14051],{"class":483},[152,147930,55653],{"class":289},[152,147932,14051],{"class":483},[152,147934,147935],{"class":6858},"sep",[152,147937,1864],{"class":476},[152,147939,33820],{"class":289},[152,147941,1825],{"class":483},[19,147943,147944],{},"修改结尾符：",[270,147946,147948],{"className":31715,"code":147947,"language":31717,"meta":275,"style":275},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[277,147949,147950,147968],{"__ignoreMap":275},[152,147951,147952,147954,147956,147958,147960,147962,147964,147966],{"class":281,"line":282},[152,147953,31752],{"class":293},[152,147955,1819],{"class":483},[152,147957,7486],{"class":289},[152,147959,14051],{"class":483},[152,147961,47138],{"class":6858},[152,147963,1864],{"class":476},[152,147965,6001],{"class":289},[152,147967,1825],{"class":483},[152,147969,147970,147972,147974,147977],{"class":281,"line":303},[152,147971,31752],{"class":293},[152,147973,1819],{"class":483},[152,147975,147976],{"class":289},"\"python\"",[152,147978,1825],{"class":483},[1760,147980,147982],{"id":147981},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147984,147985],{},"交互运行适合临时验证：",[270,147987,147989],{"className":31715,"code":147988,"language":31717,"meta":275,"style":275},">>> 10 * 3\n30\n",[277,147990,147991,148001],{"__ignoreMap":275},[152,147992,147993,147995,147997,147999],{"class":281,"line":282},[152,147994,147190],{"class":476},[152,147996,3689],{"class":293},[152,147998,8160],{"class":476},[152,148000,121373],{"class":293},[152,148002,148003],{"class":281,"line":303},[152,148004,148005],{"class":293},"30\n",[19,148007,148008],{},"脚本运行适合保存程序：",[270,148010,148012],{"className":31715,"code":148011,"language":31717,"meta":275,"style":275},"price = 8\ncount = 5\nprint(price * count)\n",[277,148013,148014,148024,148033],{"__ignoreMap":275},[152,148015,148016,148019,148021],{"class":281,"line":282},[152,148017,148018],{"class":483},"price ",[152,148020,1864],{"class":476},[152,148022,148023],{"class":293}," 8\n",[152,148025,148026,148029,148031],{"class":281,"line":303},[152,148027,148028],{"class":483},"count ",[152,148030,1864],{"class":476},[152,148032,55764],{"class":293},[152,148034,148035,148037,148040,148042],{"class":281,"line":310},[152,148036,31752],{"class":293},[152,148038,148039],{"class":483},"(price ",[152,148041,2263],{"class":476},[152,148043,148044],{"class":483}," count)\n",[19,148046,148047],{},"实际学习中推荐：",[416,148049,148050,148053,148058],{},[419,148051,148052],{},"临时试一个语法，用交互模式。",[419,148054,148055,148056,127320],{},"写完整练习，用 ",[277,148057,147689],{},[419,148059,148060],{},"写项目，用独立目录和虚拟环境。",[1760,148062,148064],{"id":148063},"_110-常见错误","1.10 常见错误",[14,148066,148068],{"id":148067},"_1101-命令找不到","1.10.1 命令找不到",[270,148070,148073],{"className":148071,"code":148072,"language":6829,"meta":275},[6827],"python: command not found\n",[277,148074,148072],{"__ignoreMap":275},[19,148076,148077],{},"原因：",[416,148079,148080,148083,148086],{},[419,148081,148082],{},"没安装 Python。",[419,148084,148085],{},"PATH 没配置。",[419,148087,148088,148089,29984],{},"Linux\u002FmacOS 应该使用 ",[277,148090,102216],{},[14,148092,148094],{"id":148093},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148096,148097],{},"不要把文件命名为：",[270,148099,148102],{"className":148100,"code":148101,"language":6829,"meta":275},[6827],"random.py\njson.py\ntime.py\nrequests.py\n",[277,148103,148101],{"__ignoreMap":275},[19,148105,148106],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[14,148108,148110],{"id":148109},"_1103-中文乱码","1.10.3 中文乱码",[19,148112,148113],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148115,148116],{},"如果读写文件出现乱码，要明确指定编码：",[270,148118,148120],{"className":31715,"code":148119,"language":31717,"meta":275,"style":275},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[277,148121,148122,148156],{"__ignoreMap":275},[152,148123,148124,148126,148129,148131,148134,148136,148139,148141,148144,148146,148149,148151,148153],{"class":281,"line":282},[152,148125,109170],{"class":476},[152,148127,148128],{"class":293}," open",[152,148130,1819],{"class":483},[152,148132,148133],{"class":289},"\"data.txt\"",[152,148135,14051],{"class":483},[152,148137,148138],{"class":289},"\"r\"",[152,148140,14051],{"class":483},[152,148142,148143],{"class":6858},"encoding",[152,148145,1864],{"class":476},[152,148147,148148],{"class":289},"\"utf-8\"",[152,148150,15330],{"class":483},[152,148152,32720],{"class":476},[152,148154,148155],{"class":483}," f:\n",[152,148157,148158,148161,148163],{"class":281,"line":303},[152,148159,148160],{"class":483},"    content ",[152,148162,1864],{"class":476},[152,148164,148165],{"class":483}," f.read()\n",[1760,148167,148169],{"id":148168},"_111-本章练习","1.11 本章练习",[416,148171,148172,148175,148181],{},[419,148173,148174],{},"安装 Python，并在终端输出版本号。",[419,148176,148177,148178,148180],{},"新建 ",[277,148179,147735],{},"，输出自己的姓名、年龄、学习目标。",[419,148182,105703,148183,148185],{},[277,148184,147809],{}," 输出下面格式：",[270,148187,148190],{"className":148188,"code":148189,"language":6829,"meta":275},[6827],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[277,148191,148189],{"__ignoreMap":275},[416,148193,148194],{"start":324},[419,148195,105703,148196,148198],{},[277,148197,147935],{}," 输出日期：",[270,148200,148203],{"className":148201,"code":148202,"language":6829,"meta":275},[6827],"2024-10-10\n",[277,148204,148202],{"__ignoreMap":275},[416,148206,148207],{"start":329},[419,148208,105703,148209,148211,148212,148214],{},[277,148210,47138],{}," 让两次 ",[277,148213,147809],{}," 输出在同一行。",[1736,148216,148217],{},"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":275,"searchDepth":303,"depth":303,"links":148219},[148220,148221,148222,148227,148228,148229,148233,148234,148235,148236,148241],{"id":147102,"depth":303,"text":147103},{"id":147146,"depth":303,"text":147147},{"id":147247,"depth":303,"text":147248,"children":148223},[148224,148225,148226],{"id":147251,"depth":310,"text":147252},{"id":147306,"depth":310,"text":147307},{"id":147342,"depth":310,"text":147343},{"id":147415,"depth":303,"text":147416},{"id":147560,"depth":303,"text":147561},{"id":147665,"depth":303,"text":147666,"children":148230},[148231,148232],{"id":147669,"depth":310,"text":147670},{"id":147698,"depth":310,"text":147699},{"id":147728,"depth":303,"text":147729},{"id":147803,"depth":303,"text":147804},{"id":147981,"depth":303,"text":147982},{"id":148063,"depth":303,"text":148064,"children":148237},[148238,148239,148240],{"id":148067,"depth":310,"text":148068},{"id":148093,"depth":310,"text":148094},{"id":148109,"depth":310,"text":148110},{"id":148168,"depth":303,"text":148169},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147094,"description":24991},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148248,"title":148249,"body":148250,"description":24991,"extension":1744,"meta":150654,"navigation":306,"path":150655,"seo":150656,"stem":150657,"__hash__":150658},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148251,"toc":150639},[148252,148255,148259,148262,148265,148282,148285,148327,148330,148334,148337,148340,148377,148380,148414,148417,148509,148513,148527,148530,148557,148560,148564,148667,148674,148677,148694,148698,148705,148894,148897,148970,148974,148977,149061,149064,149096,149100,149304,149307,149311,149317,149419,149422,149678,149682,149685,149688,149702,149704,149890,149894,150256,150262,150266,150269,150393,150396,150575,150578,150582,150615,150619,150636],[10,148253,148249],{"id":148254},"_10-json与pyecharts折线图",[1760,148256,148258],{"id":148257},"_101-数据可视化","10.1 数据可视化",[19,148260,148261],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148263,148264],{},"常见图表：",[416,148266,148267,148270,148273,148276,148279],{},[419,148268,148269],{},"折线图：看趋势。",[419,148271,148272],{},"柱状图：看分类对比。",[419,148274,148275],{},"饼图：看占比。",[419,148277,148278],{},"地图：看地域分布。",[419,148280,148281],{},"散点图：看两个变量之间的关系。",[19,148283,148284],{},"Python 可视化常用库：",[23,148286,148287,148295],{},[26,148288,148289],{},[29,148290,148291,148293],{},[32,148292,147498],{},[32,148294,25354],{},[43,148296,148297,148304,148312,148319],{},[29,148298,148299,148301],{},[48,148300,147530],{},[48,148302,148303],{},"基础、经典、可定制",[29,148305,148306,148309],{},[48,148307,148308],{},"seaborn",[48,148310,148311],{},"统计图表更美观",[29,148313,148314,148316],{},[48,148315,147538],{},[48,148317,148318],{},"生成交互式网页图表",[29,148320,148321,148324],{},[48,148322,148323],{},"plotly",[48,148325,148326],{},"交互图表能力强",[19,148328,148329],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[1760,148331,148333],{"id":148332},"_102-json回顾","10.2 JSON回顾",[19,148335,148336],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148338,148339],{},"Python 字典：",[270,148341,148343],{"className":31715,"code":148342,"language":31717,"meta":275,"style":275},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[277,148344,148345,148353,148364,148373],{"__ignoreMap":275},[152,148346,148347,148349,148351],{"class":281,"line":282},[152,148348,102995],{"class":483},[152,148350,1864],{"class":476},[152,148352,17187],{"class":483},[152,148354,148355,148358,148360,148362],{"class":281,"line":303},[152,148356,148357],{"class":289},"    \"name\"",[152,148359,52774],{"class":483},[152,148361,70606],{"class":289},[152,148363,32803],{"class":483},[152,148365,148366,148369,148371],{"class":281,"line":310},[152,148367,148368],{"class":289},"    \"value\"",[152,148370,52774],{"class":483},[152,148372,98795],{"class":293},[152,148374,148375],{"class":281,"line":324},[152,148376,3236],{"class":483},[19,148378,148379],{},"JSON 字符串：",[270,148381,148384],{"className":148382,"code":148383,"language":147129,"meta":275,"style":275},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[277,148385,148386,148390,148401,148410],{"__ignoreMap":275},[152,148387,148388],{"class":281,"line":282},[152,148389,3217],{"class":483},[152,148391,148392,148395,148397,148399],{"class":281,"line":303},[152,148393,148394],{"class":293},"  \"name\"",[152,148396,52774],{"class":483},[152,148398,70606],{"class":289},[152,148400,32803],{"class":483},[152,148402,148403,148406,148408],{"class":281,"line":310},[152,148404,148405],{"class":293},"  \"value\"",[152,148407,52774],{"class":483},[152,148409,98795],{"class":293},[152,148411,148412],{"class":281,"line":324},[152,148413,3236],{"class":483},[19,148415,148416],{},"Python 与 JSON 的转换：",[270,148418,148420],{"className":31715,"code":148419,"language":31717,"meta":275,"style":275},"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",[277,148421,148422,148429,148433,148458,148462,148481,148488,148492,148502],{"__ignoreMap":275},[152,148423,148424,148426],{"class":281,"line":282},[152,148425,31729],{"class":476},[152,148427,148428],{"class":483}," json\n",[152,148430,148431],{"class":281,"line":303},[152,148432,307],{"emptyLinePlaceholder":306},[152,148434,148435,148437,148439,148441,148443,148445,148447,148449,148452,148454,148456],{"class":281,"line":310},[152,148436,102995],{"class":483},[152,148438,1864],{"class":476},[152,148440,6090],{"class":483},[152,148442,64016],{"class":289},[152,148444,52774],{"class":483},[152,148446,70606],{"class":289},[152,148448,14051],{"class":483},[152,148450,148451],{"class":289},"\"value\"",[152,148453,52774],{"class":483},[152,148455,2119],{"class":293},[152,148457,3236],{"class":483},[152,148459,148460],{"class":281,"line":324},[152,148461,307],{"emptyLinePlaceholder":306},[152,148463,148464,148467,148469,148472,148475,148477,148479],{"class":281,"line":329},[152,148465,148466],{"class":483},"json_text ",[152,148468,1864],{"class":476},[152,148470,148471],{"class":483}," json.dumps(data, ",[152,148473,148474],{"class":6858},"ensure_ascii",[152,148476,1864],{"class":476},[152,148478,35324],{"class":293},[152,148480,1825],{"class":483},[152,148482,148483,148485],{"class":281,"line":343},[152,148484,31752],{"class":293},[152,148486,148487],{"class":483},"(json_text)\n",[152,148489,148490],{"class":281,"line":348},[152,148491,307],{"emptyLinePlaceholder":306},[152,148493,148494,148497,148499],{"class":281,"line":362},[152,148495,148496],{"class":483},"new_data ",[152,148498,1864],{"class":476},[152,148500,148501],{"class":483}," json.loads(json_text)\n",[152,148503,148504,148506],{"class":281,"line":367},[152,148505,31752],{"class":293},[152,148507,148508],{"class":483},"(new_data)\n",[1760,148510,148512],{"id":148511},"_103-安装pyecharts","10.3 安装pyecharts",[270,148514,148516],{"className":272,"code":148515,"language":274,"meta":275,"style":275},"pip install pyecharts\n",[277,148517,148518],{"__ignoreMap":275},[152,148519,148520,148522,148524],{"class":281,"line":282},[152,148521,25443],{"class":285},[152,148523,25446],{"class":289},[152,148525,148526],{"class":289}," pyecharts\n",[19,148528,148529],{},"验证：",[270,148531,148533],{"className":31715,"code":148532,"language":31717,"meta":275,"style":275},"import pyecharts\n\nprint(pyecharts.__version__)\n",[277,148534,148535,148541,148545],{"__ignoreMap":275},[152,148536,148537,148539],{"class":281,"line":282},[152,148538,31729],{"class":476},[152,148540,148526],{"class":483},[152,148542,148543],{"class":281,"line":303},[152,148544,307],{"emptyLinePlaceholder":306},[152,148546,148547,148549,148552,148555],{"class":281,"line":310},[152,148548,31752],{"class":293},[152,148550,148551],{"class":483},"(pyecharts.",[152,148553,148554],{"class":293},"__version__",[152,148556,1825],{"class":483},[19,148558,148559],{},"如果使用虚拟环境，要先激活环境再安装。",[1760,148561,148563],{"id":148562},"_104-第一个折线图","10.4 第一个折线图",[270,148565,148567],{"className":31715,"code":148566,"language":31717,"meta":275,"style":275},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[277,148568,148569,148581,148585,148595,148625,148657],{"__ignoreMap":275},[152,148570,148571,148573,148576,148578],{"class":281,"line":282},[152,148572,32074],{"class":476},[152,148574,148575],{"class":483}," pyecharts.charts ",[152,148577,31729],{"class":476},[152,148579,148580],{"class":483}," Line\n",[152,148582,148583],{"class":281,"line":303},[152,148584,307],{"emptyLinePlaceholder":306},[152,148586,148587,148590,148592],{"class":281,"line":310},[152,148588,148589],{"class":483},"line ",[152,148591,1864],{"class":476},[152,148593,148594],{"class":483}," Line()\n",[152,148596,148597,148600,148603,148605,148608,148610,148613,148615,148618,148620,148623],{"class":281,"line":324},[152,148598,148599],{"class":483},"line.add_xaxis([",[152,148601,148602],{"class":289},"\"周一\"",[152,148604,14051],{"class":483},[152,148606,148607],{"class":289},"\"周二\"",[152,148609,14051],{"class":483},[152,148611,148612],{"class":289},"\"周三\"",[152,148614,14051],{"class":483},[152,148616,148617],{"class":289},"\"周四\"",[152,148619,14051],{"class":483},[152,148621,148622],{"class":289},"\"周五\"",[152,148624,6299],{"class":483},[152,148626,148627,148630,148633,148635,148637,148639,148641,148643,148645,148647,148650,148652,148655],{"class":281,"line":329},[152,148628,148629],{"class":483},"line.add_yaxis(",[152,148631,148632],{"class":289},"\"销售额\"",[152,148634,78855],{"class":483},[152,148636,2119],{"class":293},[152,148638,14051],{"class":483},[152,148640,2625],{"class":293},[152,148642,14051],{"class":483},[152,148644,2669],{"class":293},[152,148646,14051],{"class":483},[152,148648,148649],{"class":293},"150",[152,148651,14051],{"class":483},[152,148653,148654],{"class":293},"180",[152,148656,6299],{"class":483},[152,148658,148659,148662,148665],{"class":281,"line":343},[152,148660,148661],{"class":483},"line.render(",[152,148663,148664],{"class":289},"\"line.html\"",[152,148666,1825],{"class":483},[19,148668,148669,148670,148673],{},"运行后会生成 ",[277,148671,148672],{},"line.html","，用浏览器打开即可看到图表。",[19,148675,148676],{},"核心步骤：",[416,148678,148679,148682,148685,148688,148691],{},[419,148680,148681],{},"导入图表类。",[419,148683,148684],{},"创建图表对象。",[419,148686,148687],{},"添加 x 轴数据。",[419,148689,148690],{},"添加 y 轴数据。",[419,148692,148693],{},"渲染为 HTML。",[1760,148695,148697],{"id":148696},"_105-全局配置","10.5 全局配置",[19,148699,148700,148701,148704],{},"常用配置在 ",[277,148702,148703],{},"pyecharts.options"," 中。",[270,148706,148708],{"className":31715,"code":148707,"language":31717,"meta":275,"style":275},"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",[277,148709,148710,148727,148737,148741,148749,148773,148801,148806,148825,148844,148862,148882,148886],{"__ignoreMap":275},[152,148711,148712,148714,148717,148719,148722,148724],{"class":281,"line":282},[152,148713,32074],{"class":476},[152,148715,148716],{"class":483}," pyecharts ",[152,148718,31729],{"class":476},[152,148720,148721],{"class":483}," options ",[152,148723,32720],{"class":476},[152,148725,148726],{"class":483}," opts\n",[152,148728,148729,148731,148733,148735],{"class":281,"line":303},[152,148730,32074],{"class":476},[152,148732,148575],{"class":483},[152,148734,31729],{"class":476},[152,148736,148580],{"class":483},[152,148738,148739],{"class":281,"line":310},[152,148740,307],{"emptyLinePlaceholder":306},[152,148742,148743,148745,148747],{"class":281,"line":324},[152,148744,148589],{"class":483},[152,148746,1864],{"class":476},[152,148748,148594],{"class":483},[152,148750,148751,148753,148755,148757,148759,148761,148763,148765,148767,148769,148771],{"class":281,"line":329},[152,148752,148599],{"class":483},[152,148754,148602],{"class":289},[152,148756,14051],{"class":483},[152,148758,148607],{"class":289},[152,148760,14051],{"class":483},[152,148762,148612],{"class":289},[152,148764,14051],{"class":483},[152,148766,148617],{"class":289},[152,148768,14051],{"class":483},[152,148770,148622],{"class":289},[152,148772,6299],{"class":483},[152,148774,148775,148777,148779,148781,148783,148785,148787,148789,148791,148793,148795,148797,148799],{"class":281,"line":343},[152,148776,148629],{"class":483},[152,148778,148632],{"class":289},[152,148780,78855],{"class":483},[152,148782,2119],{"class":293},[152,148784,14051],{"class":483},[152,148786,2625],{"class":293},[152,148788,14051],{"class":483},[152,148790,2669],{"class":293},[152,148792,14051],{"class":483},[152,148794,148649],{"class":293},[152,148796,14051],{"class":483},[152,148798,148654],{"class":293},[152,148800,6299],{"class":483},[152,148802,148803],{"class":281,"line":348},[152,148804,148805],{"class":483},"line.set_global_opts(\n",[152,148807,148808,148811,148813,148816,148818,148820,148823],{"class":281,"line":362},[152,148809,148810],{"class":6858},"    title_opts",[152,148812,1864],{"class":476},[152,148814,148815],{"class":483},"opts.TitleOpts(",[152,148817,52744],{"class":6858},[152,148819,1864],{"class":476},[152,148821,148822],{"class":289},"\"一周销售额\"",[152,148824,39384],{"class":483},[152,148826,148827,148830,148832,148835,148837,148839,148842],{"class":281,"line":367},[152,148828,148829],{"class":6858},"    xaxis_opts",[152,148831,1864],{"class":476},[152,148833,148834],{"class":483},"opts.AxisOpts(",[152,148836,81147],{"class":6858},[152,148838,1864],{"class":476},[152,148840,148841],{"class":289},"\"日期\"",[152,148843,39384],{"class":483},[152,148845,148846,148849,148851,148853,148855,148857,148860],{"class":281,"line":381},[152,148847,148848],{"class":6858},"    yaxis_opts",[152,148850,1864],{"class":476},[152,148852,148834],{"class":483},[152,148854,81147],{"class":6858},[152,148856,1864],{"class":476},[152,148858,148859],{"class":289},"\"金额\"",[152,148861,39384],{"class":483},[152,148863,148864,148867,148869,148872,148875,148877,148880],{"class":281,"line":386},[152,148865,148866],{"class":6858},"    tooltip_opts",[152,148868,1864],{"class":476},[152,148870,148871],{"class":483},"opts.TooltipOpts(",[152,148873,148874],{"class":6858},"trigger",[152,148876,1864],{"class":476},[152,148878,148879],{"class":289},"\"axis\"",[152,148881,39384],{"class":483},[152,148883,148884],{"class":281,"line":932},[152,148885,1825],{"class":483},[152,148887,148888,148890,148892],{"class":281,"line":942},[152,148889,148661],{"class":483},[152,148891,148664],{"class":289},[152,148893,1825],{"class":483},[19,148895,148896],{},"常见全局配置：",[23,148898,148899,148908],{},[26,148900,148901],{},[29,148902,148903,148906],{},[32,148904,148905],{},"配置",[32,148907,104033],{},[43,148909,148910,148920,148930,148940,148950,148960],{},[29,148911,148912,148917],{},[48,148913,148914],{},[277,148915,148916],{},"TitleOpts",[48,148918,148919],{},"标题",[29,148921,148922,148927],{},[48,148923,148924],{},[277,148925,148926],{},"LegendOpts",[48,148928,148929],{},"图例",[29,148931,148932,148937],{},[48,148933,148934],{},[277,148935,148936],{},"TooltipOpts",[48,148938,148939],{},"提示框",[29,148941,148942,148947],{},[48,148943,148944],{},[277,148945,148946],{},"AxisOpts",[48,148948,148949],{},"坐标轴",[29,148951,148952,148957],{},[48,148953,148954],{},[277,148955,148956],{},"VisualMapOpts",[48,148958,148959],{},"视觉映射",[29,148961,148962,148967],{},[48,148963,148964],{},[277,148965,148966],{},"DataZoomOpts",[48,148968,148969],{},"区域缩放",[1760,148971,148973],{"id":148972},"_106-系列配置","10.6 系列配置",[19,148975,148976],{},"系列配置作用于某一组数据。",[270,148978,148980],{"className":31715,"code":148979,"language":31717,"meta":275,"style":275},"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",[277,148981,148982,148987,148998,149027,149038,149057],{"__ignoreMap":275},[152,148983,148984],{"class":281,"line":282},[152,148985,148986],{"class":483},"line.add_yaxis(\n",[152,148988,148989,148992,148994,148996],{"class":281,"line":303},[152,148990,148991],{"class":6858},"    series_name",[152,148993,1864],{"class":476},[152,148995,148632],{"class":289},[152,148997,32803],{"class":483},[152,148999,149000,149003,149005,149007,149009,149011,149013,149015,149017,149019,149021,149023,149025],{"class":281,"line":310},[152,149001,149002],{"class":6858},"    y_axis",[152,149004,1864],{"class":476},[152,149006,2697],{"class":483},[152,149008,2119],{"class":293},[152,149010,14051],{"class":483},[152,149012,2625],{"class":293},[152,149014,14051],{"class":483},[152,149016,2669],{"class":293},[152,149018,14051],{"class":483},[152,149020,148649],{"class":293},[152,149022,14051],{"class":483},[152,149024,148654],{"class":293},[152,149026,89173],{"class":483},[152,149028,149029,149032,149034,149036],{"class":281,"line":324},[152,149030,149031],{"class":6858},"    is_smooth",[152,149033,1864],{"class":476},[152,149035,32813],{"class":293},[152,149037,32803],{"class":483},[152,149039,149040,149043,149045,149048,149051,149053,149055],{"class":281,"line":329},[152,149041,149042],{"class":6858},"    label_opts",[152,149044,1864],{"class":476},[152,149046,149047],{"class":483},"opts.LabelOpts(",[152,149049,149050],{"class":6858},"is_show",[152,149052,1864],{"class":476},[152,149054,32813],{"class":293},[152,149056,39384],{"class":483},[152,149058,149059],{"class":281,"line":343},[152,149060,1825],{"class":483},[19,149062,149063],{},"常用参数：",[416,149065,149066,149072,149078,149084,149090],{},[419,149067,149068,149071],{},[277,149069,149070],{},"series_name","：系列名称。",[419,149073,149074,149077],{},[277,149075,149076],{},"y_axis","：y 轴数据。",[419,149079,149080,149083],{},[277,149081,149082],{},"is_smooth","：是否平滑曲线。",[419,149085,149086,149089],{},[277,149087,149088],{},"label_opts","：标签配置。",[419,149091,149092,149095],{},[277,149093,149094],{},"symbol_size","：标记点大小。",[1760,149097,149099],{"id":149098},"_107-多条折线","10.7 多条折线",[270,149101,149103],{"className":31715,"code":149102,"language":31717,"meta":275,"style":275},"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",[277,149104,149105,149119,149129,149133,149162,149166,149174,149179,149217,149254,149258,149275,149291,149295],{"__ignoreMap":275},[152,149106,149107,149109,149111,149113,149115,149117],{"class":281,"line":282},[152,149108,32074],{"class":476},[152,149110,148716],{"class":483},[152,149112,31729],{"class":476},[152,149114,148721],{"class":483},[152,149116,32720],{"class":476},[152,149118,148726],{"class":483},[152,149120,149121,149123,149125,149127],{"class":281,"line":303},[152,149122,32074],{"class":476},[152,149124,148575],{"class":483},[152,149126,31729],{"class":476},[152,149128,148580],{"class":483},[152,149130,149131],{"class":281,"line":310},[152,149132,307],{"emptyLinePlaceholder":306},[152,149134,149135,149138,149140,149142,149144,149146,149148,149150,149152,149154,149156,149158,149160],{"class":281,"line":324},[152,149136,149137],{"class":483},"dates ",[152,149139,1864],{"class":476},[152,149141,53563],{"class":483},[152,149143,148602],{"class":289},[152,149145,14051],{"class":483},[152,149147,148607],{"class":289},[152,149149,14051],{"class":483},[152,149151,148612],{"class":289},[152,149153,14051],{"class":483},[152,149155,148617],{"class":289},[152,149157,14051],{"class":483},[152,149159,148622],{"class":289},[152,149161,34583],{"class":483},[152,149163,149164],{"class":281,"line":329},[152,149165,307],{"emptyLinePlaceholder":306},[152,149167,149168,149170,149172],{"class":281,"line":343},[152,149169,148589],{"class":483},[152,149171,1864],{"class":476},[152,149173,148594],{"class":483},[152,149175,149176],{"class":281,"line":348},[152,149177,149178],{"class":483},"line.add_xaxis(dates)\n",[152,149180,149181,149183,149186,149188,149190,149192,149195,149197,149199,149201,149203,149205,149207,149209,149211,149213,149215],{"class":281,"line":362},[152,149182,148629],{"class":483},[152,149184,149185],{"class":289},"\"线上销售\"",[152,149187,78855],{"class":483},[152,149189,2119],{"class":293},[152,149191,14051],{"class":483},[152,149193,149194],{"class":293},"130",[152,149196,14051],{"class":483},[152,149198,2625],{"class":293},[152,149200,14051],{"class":483},[152,149202,22663],{"class":293},[152,149204,14051],{"class":483},[152,149206,3382],{"class":293},[152,149208,113539],{"class":483},[152,149210,149082],{"class":6858},[152,149212,1864],{"class":476},[152,149214,32813],{"class":293},[152,149216,1825],{"class":483},[152,149218,149219,149221,149224,149226,149228,149230,149232,149234,149236,149238,149240,149242,149244,149246,149248,149250,149252],{"class":281,"line":367},[152,149220,148629],{"class":483},[152,149222,149223],{"class":289},"\"线下销售\"",[152,149225,78855],{"class":483},[152,149227,2420],{"class":293},[152,149229,14051],{"class":483},[152,149231,2669],{"class":293},[152,149233,14051],{"class":483},[152,149235,2119],{"class":293},[152,149237,14051],{"class":483},[152,149239,2625],{"class":293},[152,149241,14051],{"class":483},[152,149243,148649],{"class":293},[152,149245,113539],{"class":483},[152,149247,149082],{"class":6858},[152,149249,1864],{"class":476},[152,149251,32813],{"class":293},[152,149253,1825],{"class":483},[152,149255,149256],{"class":281,"line":381},[152,149257,148805],{"class":483},[152,149259,149260,149262,149264,149266,149268,149270,149273],{"class":281,"line":386},[152,149261,148810],{"class":6858},[152,149263,1864],{"class":476},[152,149265,148815],{"class":483},[152,149267,52744],{"class":6858},[152,149269,1864],{"class":476},[152,149271,149272],{"class":289},"\"线上线下销售趋势\"",[152,149274,39384],{"class":483},[152,149276,149277,149279,149281,149283,149285,149287,149289],{"class":281,"line":932},[152,149278,148866],{"class":6858},[152,149280,1864],{"class":476},[152,149282,148871],{"class":483},[152,149284,148874],{"class":6858},[152,149286,1864],{"class":476},[152,149288,148879],{"class":289},[152,149290,39384],{"class":483},[152,149292,149293],{"class":281,"line":942},[152,149294,1825],{"class":483},[152,149296,149297,149299,149302],{"class":281,"line":949},[152,149298,148661],{"class":483},[152,149300,149301],{"class":289},"\"sales.html\"",[152,149303,1825],{"class":483},[19,149305,149306],{},"多条折线适合比较不同指标或不同地区。",[1760,149308,149310],{"id":149309},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149312,149313,149314,26230],{},"假设 ",[277,149315,149316],{},"sales.json",[270,149318,149320],{"className":148382,"code":149319,"language":147129,"meta":275,"style":275},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[277,149321,149322,149327,149359,149387,149415],{"__ignoreMap":275},[152,149323,149324],{"class":281,"line":282},[152,149325,149326],{"class":483},"[\n",[152,149328,149329,149332,149335,149337,149339,149341,149344,149346,149348,149350,149353,149355,149357],{"class":281,"line":303},[152,149330,149331],{"class":483},"  {",[152,149333,149334],{"class":293},"\"date\"",[152,149336,52774],{"class":483},[152,149338,148602],{"class":289},[152,149340,14051],{"class":483},[152,149342,149343],{"class":293},"\"online\"",[152,149345,52774],{"class":483},[152,149347,2119],{"class":293},[152,149349,14051],{"class":483},[152,149351,149352],{"class":293},"\"offline\"",[152,149354,52774],{"class":483},[152,149356,2420],{"class":293},[152,149358,6572],{"class":483},[152,149360,149361,149363,149365,149367,149369,149371,149373,149375,149377,149379,149381,149383,149385],{"class":281,"line":310},[152,149362,149331],{"class":483},[152,149364,149334],{"class":293},[152,149366,52774],{"class":483},[152,149368,148607],{"class":289},[152,149370,14051],{"class":483},[152,149372,149343],{"class":293},[152,149374,52774],{"class":483},[152,149376,149194],{"class":293},[152,149378,14051],{"class":483},[152,149380,149352],{"class":293},[152,149382,52774],{"class":483},[152,149384,2669],{"class":293},[152,149386,6572],{"class":483},[152,149388,149389,149391,149393,149395,149397,149399,149401,149403,149405,149407,149409,149411,149413],{"class":281,"line":324},[152,149390,149331],{"class":483},[152,149392,149334],{"class":293},[152,149394,52774],{"class":483},[152,149396,148612],{"class":289},[152,149398,14051],{"class":483},[152,149400,149343],{"class":293},[152,149402,52774],{"class":483},[152,149404,2625],{"class":293},[152,149406,14051],{"class":483},[152,149408,149352],{"class":293},[152,149410,52774],{"class":483},[152,149412,2119],{"class":293},[152,149414,3236],{"class":483},[152,149416,149417],{"class":281,"line":329},[152,149418,34583],{"class":483},[19,149420,149421],{},"读取并绘图：",[270,149423,149425],{"className":31715,"code":149424,"language":31717,"meta":275,"style":275},"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",[277,149426,149427,149433,149447,149457,149461,149493,149506,149510,149518,149527,149536,149540,149552,149561,149570,149579,149583,149591,149595,149612,149629,149633,149650,149666,149670],{"__ignoreMap":275},[152,149428,149429,149431],{"class":281,"line":282},[152,149430,31729],{"class":476},[152,149432,148428],{"class":483},[152,149434,149435,149437,149439,149441,149443,149445],{"class":281,"line":303},[152,149436,32074],{"class":476},[152,149438,148716],{"class":483},[152,149440,31729],{"class":476},[152,149442,148721],{"class":483},[152,149444,32720],{"class":476},[152,149446,148726],{"class":483},[152,149448,149449,149451,149453,149455],{"class":281,"line":310},[152,149450,32074],{"class":476},[152,149452,148575],{"class":483},[152,149454,31729],{"class":476},[152,149456,148580],{"class":483},[152,149458,149459],{"class":281,"line":324},[152,149460,307],{"emptyLinePlaceholder":306},[152,149462,149463,149465,149467,149469,149472,149474,149476,149478,149480,149482,149484,149486,149488,149491],{"class":281,"line":329},[152,149464,109170],{"class":476},[152,149466,148128],{"class":293},[152,149468,1819],{"class":483},[152,149470,149471],{"class":289},"\"sales.json\"",[152,149473,14051],{"class":483},[152,149475,148138],{"class":289},[152,149477,14051],{"class":483},[152,149479,148143],{"class":6858},[152,149481,1864],{"class":476},[152,149483,148148],{"class":289},[152,149485,15330],{"class":483},[152,149487,32720],{"class":476},[152,149489,149490],{"class":6858}," file",[152,149492,5382],{"class":483},[152,149494,149495,149497,149499,149502,149504],{"class":281,"line":343},[152,149496,102758],{"class":483},[152,149498,1864],{"class":476},[152,149500,149501],{"class":483}," json.load(",[152,149503,46691],{"class":6858},[152,149505,1825],{"class":483},[152,149507,149508],{"class":281,"line":348},[152,149509,307],{"emptyLinePlaceholder":306},[152,149511,149512,149514,149516],{"class":281,"line":362},[152,149513,149137],{"class":483},[152,149515,1864],{"class":476},[152,149517,53175],{"class":483},[152,149519,149520,149523,149525],{"class":281,"line":367},[152,149521,149522],{"class":483},"online_sales ",[152,149524,1864],{"class":476},[152,149526,53175],{"class":483},[152,149528,149529,149532,149534],{"class":281,"line":381},[152,149530,149531],{"class":483},"offline_sales ",[152,149533,1864],{"class":476},[152,149535,53175],{"class":483},[152,149537,149538],{"class":281,"line":386},[152,149539,307],{"emptyLinePlaceholder":306},[152,149541,149542,149544,149547,149549],{"class":281,"line":932},[152,149543,4668],{"class":476},[152,149545,149546],{"class":483}," item ",[152,149548,27653],{"class":476},[152,149550,149551],{"class":483}," data:\n",[152,149553,149554,149557,149559],{"class":281,"line":942},[152,149555,149556],{"class":483},"    dates.append(item[",[152,149558,149334],{"class":289},[152,149560,6299],{"class":483},[152,149562,149563,149566,149568],{"class":281,"line":949},[152,149564,149565],{"class":483},"    online_sales.append(item[",[152,149567,149343],{"class":289},[152,149569,6299],{"class":483},[152,149571,149572,149575,149577],{"class":281,"line":954},[152,149573,149574],{"class":483},"    offline_sales.append(item[",[152,149576,149352],{"class":289},[152,149578,6299],{"class":483},[152,149580,149581],{"class":281,"line":959},[152,149582,307],{"emptyLinePlaceholder":306},[152,149584,149585,149587,149589],{"class":281,"line":970},[152,149586,148589],{"class":483},[152,149588,1864],{"class":476},[152,149590,148594],{"class":483},[152,149592,149593],{"class":281,"line":979},[152,149594,149178],{"class":483},[152,149596,149597,149599,149601,149604,149606,149608,149610],{"class":281,"line":989},[152,149598,148629],{"class":483},[152,149600,149185],{"class":289},[152,149602,149603],{"class":483},", online_sales, ",[152,149605,149082],{"class":6858},[152,149607,1864],{"class":476},[152,149609,32813],{"class":293},[152,149611,1825],{"class":483},[152,149613,149614,149616,149618,149621,149623,149625,149627],{"class":281,"line":996},[152,149615,148629],{"class":483},[152,149617,149223],{"class":289},[152,149619,149620],{"class":483},", offline_sales, ",[152,149622,149082],{"class":6858},[152,149624,1864],{"class":476},[152,149626,32813],{"class":293},[152,149628,1825],{"class":483},[152,149630,149631],{"class":281,"line":1001},[152,149632,148805],{"class":483},[152,149634,149635,149637,149639,149641,149643,149645,149648],{"class":281,"line":1006},[152,149636,148810],{"class":6858},[152,149638,1864],{"class":476},[152,149640,148815],{"class":483},[152,149642,52744],{"class":6858},[152,149644,1864],{"class":476},[152,149646,149647],{"class":289},"\"销售趋势\"",[152,149649,39384],{"class":483},[152,149651,149652,149654,149656,149658,149660,149662,149664],{"class":281,"line":1018},[152,149653,148866],{"class":6858},[152,149655,1864],{"class":476},[152,149657,148871],{"class":483},[152,149659,148874],{"class":6858},[152,149661,1864],{"class":476},[152,149663,148879],{"class":289},[152,149665,39384],{"class":483},[152,149667,149668],{"class":281,"line":1027},[152,149669,1825],{"class":483},[152,149671,149672,149674,149676],{"class":281,"line":1037},[152,149673,148661],{"class":483},[152,149675,149301],{"class":289},[152,149677,1825],{"class":483},[1760,149679,149681],{"id":149680},"_109-数据清洗","10.9 数据清洗",[19,149683,149684],{},"真实数据经常不整齐，需要清洗。",[19,149686,149687],{},"常见问题：",[416,149689,149690,149693,149696,149699],{},[419,149691,149692],{},"数字是字符串。",[419,149694,149695],{},"字段缺失。",[419,149697,149698],{},"空值。",[419,149700,149701],{},"日期格式不统一。",[19,149703,16750],{},[270,149705,149707],{"className":31715,"code":149706,"language":31717,"meta":275,"style":275},"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",[277,149708,149709,149718,149741,149761,149782,149786,149790,149798,149807,149811,149822,149836,149845,149850,149854,149862,149872,149876,149883],{"__ignoreMap":275},[152,149710,149711,149714,149716],{"class":281,"line":282},[152,149712,149713],{"class":483},"raw_data ",[152,149715,1864],{"class":476},[152,149717,56784],{"class":483},[152,149719,149720,149723,149725,149727,149729,149731,149734,149736,149739],{"class":281,"line":303},[152,149721,149722],{"class":483},"    {",[152,149724,149334],{"class":289},[152,149726,52774],{"class":483},[152,149728,148602],{"class":289},[152,149730,14051],{"class":483},[152,149732,149733],{"class":289},"\"sales\"",[152,149735,52774],{"class":483},[152,149737,149738],{"class":289},"\"100\"",[152,149740,6572],{"class":483},[152,149742,149743,149745,149747,149749,149751,149753,149755,149757,149759],{"class":281,"line":310},[152,149744,149722],{"class":483},[152,149746,149334],{"class":289},[152,149748,52774],{"class":483},[152,149750,148607],{"class":289},[152,149752,14051],{"class":483},[152,149754,149733],{"class":289},[152,149756,52774],{"class":483},[152,149758,9294],{"class":289},[152,149760,6572],{"class":483},[152,149762,149763,149765,149767,149769,149771,149773,149775,149777,149780],{"class":281,"line":324},[152,149764,149722],{"class":483},[152,149766,149334],{"class":289},[152,149768,52774],{"class":483},[152,149770,148612],{"class":289},[152,149772,14051],{"class":483},[152,149774,149733],{"class":289},[152,149776,52774],{"class":483},[152,149778,149779],{"class":289},"\"120\"",[152,149781,6572],{"class":483},[152,149783,149784],{"class":281,"line":329},[152,149785,34583],{"class":483},[152,149787,149788],{"class":281,"line":343},[152,149789,307],{"emptyLinePlaceholder":306},[152,149791,149792,149794,149796],{"class":281,"line":348},[152,149793,149137],{"class":483},[152,149795,1864],{"class":476},[152,149797,53175],{"class":483},[152,149799,149800,149803,149805],{"class":281,"line":362},[152,149801,149802],{"class":483},"sales ",[152,149804,1864],{"class":476},[152,149806,53175],{"class":483},[152,149808,149809],{"class":281,"line":367},[152,149810,307],{"emptyLinePlaceholder":306},[152,149812,149813,149815,149817,149819],{"class":281,"line":381},[152,149814,4668],{"class":476},[152,149816,149546],{"class":483},[152,149818,27653],{"class":476},[152,149820,149821],{"class":483}," raw_data:\n",[152,149823,149824,149827,149829,149832,149834],{"class":281,"line":386},[152,149825,149826],{"class":483},"    value ",[152,149828,1864],{"class":476},[152,149830,149831],{"class":483}," item.get(",[152,149833,149733],{"class":289},[152,149835,1825],{"class":483},[152,149837,149838,149840,149842],{"class":281,"line":932},[152,149839,4744],{"class":476},[152,149841,40267],{"class":476},[152,149843,149844],{"class":483}," value:\n",[152,149846,149847],{"class":281,"line":942},[152,149848,149849],{"class":476},"        continue\n",[152,149851,149852],{"class":281,"line":949},[152,149853,307],{"emptyLinePlaceholder":306},[152,149855,149856,149858,149860],{"class":281,"line":954},[152,149857,149556],{"class":483},[152,149859,149334],{"class":289},[152,149861,6299],{"class":483},[152,149863,149864,149867,149869],{"class":281,"line":959},[152,149865,149866],{"class":483},"    sales.append(",[152,149868,1822],{"class":293},[152,149870,149871],{"class":483},"(value))\n",[152,149873,149874],{"class":281,"line":970},[152,149875,307],{"emptyLinePlaceholder":306},[152,149877,149878,149880],{"class":281,"line":979},[152,149879,31752],{"class":293},[152,149881,149882],{"class":483},"(dates)\n",[152,149884,149885,149887],{"class":281,"line":989},[152,149886,31752],{"class":293},[152,149888,149889],{"class":483},"(sales)\n",[1760,149891,149893],{"id":149892},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[270,149895,149897],{"className":31715,"code":149896,"language":31717,"meta":275,"style":275},"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",[277,149898,149899,149913,149923,149927,149935,149956,149978,150000,150022,150044,150048,150052,150074,150095,150099,150107,150111,150115,150125,150134,150144,150160,150164,150168,150185,150201,150217,150233,150243,150247],{"__ignoreMap":275},[152,149900,149901,149903,149905,149907,149909,149911],{"class":281,"line":282},[152,149902,32074],{"class":476},[152,149904,148716],{"class":483},[152,149906,31729],{"class":476},[152,149908,148721],{"class":483},[152,149910,32720],{"class":476},[152,149912,148726],{"class":483},[152,149914,149915,149917,149919,149921],{"class":281,"line":303},[152,149916,32074],{"class":476},[152,149918,148575],{"class":483},[152,149920,31729],{"class":476},[152,149922,148580],{"class":483},[152,149924,149925],{"class":281,"line":310},[152,149926,307],{"emptyLinePlaceholder":306},[152,149928,149929,149931,149933],{"class":281,"line":324},[152,149930,149802],{"class":483},[152,149932,1864],{"class":476},[152,149934,56784],{"class":483},[152,149936,149937,149939,149941,149943,149946,149948,149950,149952,149954],{"class":281,"line":329},[152,149938,149722],{"class":483},[152,149940,149334],{"class":289},[152,149942,52774],{"class":483},[152,149944,149945],{"class":289},"\"2024-10-01\"",[152,149947,14051],{"class":483},[152,149949,85421],{"class":289},[152,149951,52774],{"class":483},[152,149953,93360],{"class":293},[152,149955,6572],{"class":483},[152,149957,149958,149960,149962,149964,149967,149969,149971,149973,149976],{"class":281,"line":343},[152,149959,149722],{"class":483},[152,149961,149334],{"class":289},[152,149963,52774],{"class":483},[152,149965,149966],{"class":289},"\"2024-10-02\"",[152,149968,14051],{"class":483},[152,149970,85421],{"class":289},[152,149972,52774],{"class":483},[152,149974,149975],{"class":293},"1800",[152,149977,6572],{"class":483},[152,149979,149980,149982,149984,149986,149989,149991,149993,149995,149998],{"class":281,"line":348},[152,149981,149722],{"class":483},[152,149983,149334],{"class":289},[152,149985,52774],{"class":483},[152,149987,149988],{"class":289},"\"2024-10-03\"",[152,149990,14051],{"class":483},[152,149992,85421],{"class":289},[152,149994,52774],{"class":483},[152,149996,149997],{"class":293},"1500",[152,149999,6572],{"class":483},[152,150001,150002,150004,150006,150008,150011,150013,150015,150017,150020],{"class":281,"line":362},[152,150003,149722],{"class":483},[152,150005,149334],{"class":289},[152,150007,52774],{"class":483},[152,150009,150010],{"class":289},"\"2024-10-04\"",[152,150012,14051],{"class":483},[152,150014,85421],{"class":289},[152,150016,52774],{"class":483},[152,150018,150019],{"class":293},"2100",[152,150021,6572],{"class":483},[152,150023,150024,150026,150028,150030,150033,150035,150037,150039,150042],{"class":281,"line":367},[152,150025,149722],{"class":483},[152,150027,149334],{"class":289},[152,150029,52774],{"class":483},[152,150031,150032],{"class":289},"\"2024-10-05\"",[152,150034,14051],{"class":483},[152,150036,85421],{"class":289},[152,150038,52774],{"class":483},[152,150040,150041],{"class":293},"2600",[152,150043,6572],{"class":483},[152,150045,150046],{"class":281,"line":381},[152,150047,34583],{"class":483},[152,150049,150050],{"class":281,"line":386},[152,150051,307],{"emptyLinePlaceholder":306},[152,150053,150054,150056,150058,150061,150063,150065,150067,150069,150071],{"class":281,"line":932},[152,150055,149137],{"class":483},[152,150057,1864],{"class":476},[152,150059,150060],{"class":483}," [item[",[152,150062,149334],{"class":289},[152,150064,6085],{"class":483},[152,150066,4668],{"class":476},[152,150068,149546],{"class":483},[152,150070,27653],{"class":476},[152,150072,150073],{"class":483}," sales]\n",[152,150075,150076,150079,150081,150083,150085,150087,150089,150091,150093],{"class":281,"line":942},[152,150077,150078],{"class":483},"amounts ",[152,150080,1864],{"class":476},[152,150082,150060],{"class":483},[152,150084,85421],{"class":289},[152,150086,6085],{"class":483},[152,150088,4668],{"class":476},[152,150090,149546],{"class":483},[152,150092,27653],{"class":476},[152,150094,150073],{"class":483},[152,150096,150097],{"class":281,"line":949},[152,150098,307],{"emptyLinePlaceholder":306},[152,150100,150101,150103,150105],{"class":281,"line":954},[152,150102,148589],{"class":483},[152,150104,1864],{"class":476},[152,150106,148594],{"class":483},[152,150108,150109],{"class":281,"line":959},[152,150110,149178],{"class":483},[152,150112,150113],{"class":281,"line":970},[152,150114,148986],{"class":483},[152,150116,150117,150119,150121,150123],{"class":281,"line":979},[152,150118,148991],{"class":6858},[152,150120,1864],{"class":476},[152,150122,148632],{"class":289},[152,150124,32803],{"class":483},[152,150126,150127,150129,150131],{"class":281,"line":989},[152,150128,149002],{"class":6858},[152,150130,1864],{"class":476},[152,150132,150133],{"class":483},"amounts,\n",[152,150135,150136,150138,150140,150142],{"class":281,"line":996},[152,150137,149031],{"class":6858},[152,150139,1864],{"class":476},[152,150141,32813],{"class":293},[152,150143,32803],{"class":483},[152,150145,150146,150148,150150,150152,150154,150156,150158],{"class":281,"line":1001},[152,150147,149042],{"class":6858},[152,150149,1864],{"class":476},[152,150151,149047],{"class":483},[152,150153,149050],{"class":6858},[152,150155,1864],{"class":476},[152,150157,32813],{"class":293},[152,150159,39384],{"class":483},[152,150161,150162],{"class":281,"line":1006},[152,150163,1825],{"class":483},[152,150165,150166],{"class":281,"line":1018},[152,150167,148805],{"class":483},[152,150169,150170,150172,150174,150176,150178,150180,150183],{"class":281,"line":1027},[152,150171,148810],{"class":6858},[152,150173,1864],{"class":476},[152,150175,148815],{"class":483},[152,150177,52744],{"class":6858},[152,150179,1864],{"class":476},[152,150181,150182],{"class":289},"\"每日销售额\"",[152,150184,39384],{"class":483},[152,150186,150187,150189,150191,150193,150195,150197,150199],{"class":281,"line":1037},[152,150188,148829],{"class":6858},[152,150190,1864],{"class":476},[152,150192,148834],{"class":483},[152,150194,81147],{"class":6858},[152,150196,1864],{"class":476},[152,150198,148841],{"class":289},[152,150200,39384],{"class":483},[152,150202,150203,150205,150207,150209,150211,150213,150215],{"class":281,"line":1044},[152,150204,148848],{"class":6858},[152,150206,1864],{"class":476},[152,150208,148834],{"class":483},[152,150210,81147],{"class":6858},[152,150212,1864],{"class":476},[152,150214,148859],{"class":289},[152,150216,39384],{"class":483},[152,150218,150219,150221,150223,150225,150227,150229,150231],{"class":281,"line":1049},[152,150220,148866],{"class":6858},[152,150222,1864],{"class":476},[152,150224,148871],{"class":483},[152,150226,148874],{"class":6858},[152,150228,1864],{"class":476},[152,150230,148879],{"class":289},[152,150232,39384],{"class":483},[152,150234,150235,150238,150240],{"class":281,"line":1054},[152,150236,150237],{"class":6858},"    datazoom_opts",[152,150239,1864],{"class":476},[152,150241,150242],{"class":483},"[opts.DataZoomOpts()],\n",[152,150244,150245],{"class":281,"line":1065},[152,150246,1825],{"class":483},[152,150248,150249,150251,150254],{"class":281,"line":1074},[152,150250,148661],{"class":483},[152,150252,150253],{"class":289},"\"daily_sales.html\"",[152,150255,1825],{"class":483},[19,150257,150258,150261],{},[277,150259,150260],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[1760,150263,150265],{"id":150264},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150267,150268],{},"如果数据结构如下：",[270,150270,150272],{"className":31715,"code":150271,"language":31717,"meta":275,"style":275},"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",[277,150273,150274,150282,150290,150312,150333,150338,150345,150365,150385,150389],{"__ignoreMap":275},[152,150275,150276,150278,150280],{"class":281,"line":282},[152,150277,102995],{"class":483},[152,150279,1864],{"class":476},[152,150281,17187],{"class":483},[152,150283,150284,150287],{"class":281,"line":303},[152,150285,150286],{"class":289},"    \"北京\"",[152,150288,150289],{"class":483},": [\n",[152,150291,150292,150294,150296,150298,150301,150303,150306,150308,150310],{"class":281,"line":310},[152,150293,6559],{"class":483},[152,150295,149334],{"class":289},[152,150297,52774],{"class":483},[152,150299,150300],{"class":289},"\"2024-01-01\"",[152,150302,14051],{"class":483},[152,150304,150305],{"class":289},"\"confirm\"",[152,150307,52774],{"class":483},[152,150309,2254],{"class":293},[152,150311,6572],{"class":483},[152,150313,150314,150316,150318,150320,150323,150325,150327,150329,150331],{"class":281,"line":324},[152,150315,6559],{"class":483},[152,150317,149334],{"class":289},[152,150319,52774],{"class":483},[152,150321,150322],{"class":289},"\"2024-01-02\"",[152,150324,14051],{"class":483},[152,150326,150305],{"class":289},[152,150328,52774],{"class":483},[152,150330,2306],{"class":293},[152,150332,6572],{"class":483},[152,150334,150335],{"class":281,"line":329},[152,150336,150337],{"class":483},"    ],\n",[152,150339,150340,150343],{"class":281,"line":343},[152,150341,150342],{"class":289},"    \"上海\"",[152,150344,150289],{"class":483},[152,150346,150347,150349,150351,150353,150355,150357,150359,150361,150363],{"class":281,"line":348},[152,150348,6559],{"class":483},[152,150350,149334],{"class":289},[152,150352,52774],{"class":483},[152,150354,150300],{"class":289},[152,150356,14051],{"class":483},[152,150358,150305],{"class":289},[152,150360,52774],{"class":483},[152,150362,2203],{"class":293},[152,150364,6572],{"class":483},[152,150366,150367,150369,150371,150373,150375,150377,150379,150381,150383],{"class":281,"line":362},[152,150368,6559],{"class":483},[152,150370,149334],{"class":289},[152,150372,52774],{"class":483},[152,150374,150322],{"class":289},[152,150376,14051],{"class":483},[152,150378,150305],{"class":289},[152,150380,52774],{"class":483},[152,150382,2331],{"class":293},[152,150384,6572],{"class":483},[152,150386,150387],{"class":281,"line":367},[152,150388,150337],{"class":483},[152,150390,150391],{"class":281,"line":381},[152,150392,3236],{"class":483},[19,150394,150395],{},"绘制多地区趋势：",[270,150397,150399],{"className":31715,"code":150398,"language":31717,"meta":275,"style":275},"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",[277,150400,150401,150415,150425,150429,150454,150458,150466,150470,150474,150486,150508,150521,150525,150529,150546,150562,150566],{"__ignoreMap":275},[152,150402,150403,150405,150407,150409,150411,150413],{"class":281,"line":282},[152,150404,32074],{"class":476},[152,150406,148716],{"class":483},[152,150408,31729],{"class":476},[152,150410,148721],{"class":483},[152,150412,32720],{"class":476},[152,150414,148726],{"class":483},[152,150416,150417,150419,150421,150423],{"class":281,"line":303},[152,150418,32074],{"class":476},[152,150420,148575],{"class":483},[152,150422,31729],{"class":476},[152,150424,148580],{"class":483},[152,150426,150427],{"class":281,"line":310},[152,150428,307],{"emptyLinePlaceholder":306},[152,150430,150431,150433,150435,150437,150439,150441,150443,150445,150447,150450,150452],{"class":281,"line":324},[152,150432,149137],{"class":483},[152,150434,1864],{"class":476},[152,150436,150060],{"class":483},[152,150438,149334],{"class":289},[152,150440,6085],{"class":483},[152,150442,4668],{"class":476},[152,150444,149546],{"class":483},[152,150446,27653],{"class":476},[152,150448,150449],{"class":483}," data[",[152,150451,70606],{"class":289},[152,150453,78864],{"class":483},[152,150455,150456],{"class":281,"line":329},[152,150457,307],{"emptyLinePlaceholder":306},[152,150459,150460,150462,150464],{"class":281,"line":343},[152,150461,148589],{"class":483},[152,150463,1864],{"class":476},[152,150465,148594],{"class":483},[152,150467,150468],{"class":281,"line":348},[152,150469,149178],{"class":483},[152,150471,150472],{"class":281,"line":362},[152,150473,307],{"emptyLinePlaceholder":306},[152,150475,150476,150478,150481,150483],{"class":281,"line":367},[152,150477,4668],{"class":476},[152,150479,150480],{"class":483}," city, records ",[152,150482,27653],{"class":476},[152,150484,150485],{"class":483}," data.items():\n",[152,150487,150488,150491,150493,150495,150497,150499,150501,150503,150505],{"class":281,"line":381},[152,150489,150490],{"class":483},"    values ",[152,150492,1864],{"class":476},[152,150494,150060],{"class":483},[152,150496,150305],{"class":289},[152,150498,6085],{"class":483},[152,150500,4668],{"class":476},[152,150502,149546],{"class":483},[152,150504,27653],{"class":476},[152,150506,150507],{"class":483}," records]\n",[152,150509,150510,150513,150515,150517,150519],{"class":281,"line":386},[152,150511,150512],{"class":483},"    line.add_yaxis(city, values, ",[152,150514,149082],{"class":6858},[152,150516,1864],{"class":476},[152,150518,32813],{"class":293},[152,150520,1825],{"class":483},[152,150522,150523],{"class":281,"line":932},[152,150524,307],{"emptyLinePlaceholder":306},[152,150526,150527],{"class":281,"line":942},[152,150528,148805],{"class":483},[152,150530,150531,150533,150535,150537,150539,150541,150544],{"class":281,"line":949},[152,150532,148810],{"class":6858},[152,150534,1864],{"class":476},[152,150536,148815],{"class":483},[152,150538,52744],{"class":6858},[152,150540,1864],{"class":476},[152,150542,150543],{"class":289},"\"多地区趋势图\"",[152,150545,39384],{"class":483},[152,150547,150548,150550,150552,150554,150556,150558,150560],{"class":281,"line":954},[152,150549,148866],{"class":6858},[152,150551,1864],{"class":476},[152,150553,148871],{"class":483},[152,150555,148874],{"class":6858},[152,150557,1864],{"class":476},[152,150559,148879],{"class":289},[152,150561,39384],{"class":483},[152,150563,150564],{"class":281,"line":959},[152,150565,1825],{"class":483},[152,150567,150568,150570,150573],{"class":281,"line":970},[152,150569,148661],{"class":483},[152,150571,150572],{"class":289},"\"trend.html\"",[152,150574,1825],{"class":483},[19,150576,150577],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[1760,150579,150581],{"id":150580},"_1012-易错点","10.12 易错点",[416,150583,150584,150590,150596,150606,150612],{},[419,150585,150586,150589],{},[277,150587,150588],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[419,150591,150592,150595],{},[277,150593,150594],{},"render()"," 生成的是 HTML，不是图片。",[419,150597,150598,150599,150602,150603,29984],{},"JSON 字符串用 ",[277,150600,150601],{},"json.loads()","，JSON 文件用 ",[277,150604,150605],{},"json.load()",[419,150607,150608,150609,29984],{},"中文 JSON 保存时加 ",[277,150610,150611],{},"ensure_ascii=False",[419,150613,150614],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[1760,150616,150618],{"id":150617},"_1013-本章练习","10.13 本章练习",[416,150620,150621,150624,150627,150630,150633],{},[419,150622,150623],{},"安装 pyecharts 并生成第一个折线图。",[419,150625,150626],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[419,150628,150629],{},"绘制两条折线，对比线上和线下销售额。",[419,150631,150632],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[419,150634,150635],{},"对含有空值的销售数据进行清洗后再绘图。",[1736,150637,150638],{},"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":275,"searchDepth":303,"depth":303,"links":150640},[150641,150642,150643,150644,150645,150646,150647,150648,150649,150650,150651,150652,150653],{"id":148257,"depth":303,"text":148258},{"id":148332,"depth":303,"text":148333},{"id":148511,"depth":303,"text":148512},{"id":148562,"depth":303,"text":148563},{"id":148696,"depth":303,"text":148697},{"id":148972,"depth":303,"text":148973},{"id":149098,"depth":303,"text":149099},{"id":149309,"depth":303,"text":149310},{"id":149680,"depth":303,"text":149681},{"id":149892,"depth":303,"text":149893},{"id":150264,"depth":303,"text":150265},{"id":150580,"depth":303,"text":150581},{"id":150617,"depth":303,"text":150618},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148249,"description":24991},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150660,"title":150661,"body":150662,"description":24991,"extension":1744,"meta":153022,"navigation":306,"path":153023,"seo":153024,"stem":153025,"__hash__":153026},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150663,"toc":152999},[150664,150667,150671,150674,150677,150753,150756,150847,150850,150854,150857,150901,150914,150918,150921,150988,150991,150995,150998,151082,151090,151094,151099,151240,151243,151254,151260,151266,151380,151384,151387,151390,151643,151646,151650,151653,151757,151760,151764,151915,151919,151926,152039,152043,152046,152152,152155,152159,152162,152193,152196,152301,152304,152308,152312,152322,152390,152394,152401,152465,152468,152472,152478,152574,152583,152587,152911,152920,152924,152952,152956,152996],[10,150665,150661],{"id":150666},"_11-面向对象基础",[1760,150668,150670],{"id":150669},"_111-什么是面向对象","11.1 什么是面向对象",[19,150672,150673],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150675,150676],{},"面向过程：",[270,150678,150680],{"className":31715,"code":150679,"language":31717,"meta":275,"style":275},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[277,150681,150682,150691,150699,150703,150713,150744,150748],{"__ignoreMap":275},[152,150683,150684,150686,150688],{"class":281,"line":282},[152,150685,147873],{"class":483},[152,150687,1864],{"class":476},[152,150689,150690],{"class":289}," \"小明\"\n",[152,150692,150693,150695,150697],{"class":281,"line":303},[152,150694,147883],{"class":483},[152,150696,1864],{"class":476},[152,150698,147888],{"class":293},[152,150700,150701],{"class":281,"line":310},[152,150702,307],{"emptyLinePlaceholder":306},[152,150704,150705,150707,150710],{"class":281,"line":324},[152,150706,33284],{"class":476},[152,150708,150709],{"class":285}," introduce",[152,150711,150712],{"class":483},"(name, age):\n",[152,150714,150715,150717,150719,150721,150724,150726,150728,150730,150733,150735,150737,150739,150742],{"class":281,"line":329},[152,150716,32636],{"class":293},[152,150718,1819],{"class":483},[152,150720,1870],{"class":476},[152,150722,150723],{"class":289},"\"我叫",[152,150725,2703],{"class":293},[152,150727,81147],{"class":483},[152,150729,2752],{"class":293},[152,150731,150732],{"class":289},"，今年",[152,150734,2703],{"class":293},[152,150736,71558],{"class":483},[152,150738,2752],{"class":293},[152,150740,150741],{"class":289},"岁\"",[152,150743,1825],{"class":483},[152,150745,150746],{"class":281,"line":343},[152,150747,307],{"emptyLinePlaceholder":306},[152,150749,150750],{"class":281,"line":348},[152,150751,150752],{"class":483},"introduce(name, age)\n",[19,150754,150755],{},"面向对象：",[270,150757,150759],{"className":31715,"code":150758,"language":31717,"meta":275,"style":275},"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",[277,150760,150761,150769,150777,150806,150810,150814,150824,150833,150842],{"__ignoreMap":275},[152,150762,150763,150765,150767],{"class":281,"line":282},[152,150764,16309],{"class":476},[152,150766,9540],{"class":285},[152,150768,5382],{"class":483},[152,150770,150771,150773,150775],{"class":281,"line":303},[152,150772,32138],{"class":476},[152,150774,150709],{"class":285},[152,150776,32144],{"class":483},[152,150778,150779,150781,150783,150785,150787,150790,150792,150794,150796,150798,150800,150802,150804],{"class":281,"line":310},[152,150780,33788],{"class":293},[152,150782,1819],{"class":483},[152,150784,1870],{"class":476},[152,150786,150723],{"class":289},[152,150788,150789],{"class":293},"{self",[152,150791,81638],{"class":483},[152,150793,2752],{"class":293},[152,150795,150732],{"class":289},[152,150797,150789],{"class":293},[152,150799,81650],{"class":483},[152,150801,2752],{"class":293},[152,150803,150741],{"class":289},[152,150805,1825],{"class":483},[152,150807,150808],{"class":281,"line":324},[152,150809,307],{"emptyLinePlaceholder":306},[152,150811,150812],{"class":281,"line":329},[152,150813,307],{"emptyLinePlaceholder":306},[152,150815,150816,150819,150821],{"class":281,"line":343},[152,150817,150818],{"class":483},"student ",[152,150820,1864],{"class":476},[152,150822,150823],{"class":483}," Student()\n",[152,150825,150826,150829,150831],{"class":281,"line":348},[152,150827,150828],{"class":483},"student.name ",[152,150830,1864],{"class":476},[152,150832,150690],{"class":289},[152,150834,150835,150838,150840],{"class":281,"line":362},[152,150836,150837],{"class":483},"student.age ",[152,150839,1864],{"class":476},[152,150841,147888],{"class":293},[152,150843,150844],{"class":281,"line":367},[152,150845,150846],{"class":483},"student.introduce()\n",[19,150848,150849],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[1760,150851,150853],{"id":150852},"_112-类和对象","11.2 类和对象",[19,150855,150856],{},"类是模板，对象是根据模板创建出来的具体实例。",[270,150858,150860],{"className":31715,"code":150859,"language":31717,"meta":275,"style":275},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[277,150861,150862,150870,150875,150879,150883,150892],{"__ignoreMap":275},[152,150863,150864,150866,150868],{"class":281,"line":282},[152,150865,16309],{"class":476},[152,150867,9540],{"class":285},[152,150869,5382],{"class":483},[152,150871,150872],{"class":281,"line":303},[152,150873,150874],{"class":476},"    pass\n",[152,150876,150877],{"class":281,"line":310},[152,150878,307],{"emptyLinePlaceholder":306},[152,150880,150881],{"class":281,"line":324},[152,150882,307],{"emptyLinePlaceholder":306},[152,150884,150885,150888,150890],{"class":281,"line":329},[152,150886,150887],{"class":483},"student1 ",[152,150889,1864],{"class":476},[152,150891,150823],{"class":483},[152,150893,150894,150897,150899],{"class":281,"line":343},[152,150895,150896],{"class":483},"student2 ",[152,150898,1864],{"class":476},[152,150900,150823],{"class":483},[19,150902,150903,150906,150907,102355,150910,150913],{},[277,150904,150905],{},"Student"," 是类，",[277,150908,150909],{},"student1",[277,150911,150912],{},"student2"," 是对象。",[1760,150915,150917],{"id":150916},"_113-属性","11.3 属性",[19,150919,150920],{},"属性是对象保存的数据。",[270,150922,150924],{"className":31715,"code":150923,"language":31717,"meta":275,"style":275},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[277,150925,150926,150934,150938,150942,150946,150954,150962,150970,150974,150981],{"__ignoreMap":275},[152,150927,150928,150930,150932],{"class":281,"line":282},[152,150929,16309],{"class":476},[152,150931,9540],{"class":285},[152,150933,5382],{"class":483},[152,150935,150936],{"class":281,"line":303},[152,150937,150874],{"class":476},[152,150939,150940],{"class":281,"line":310},[152,150941,307],{"emptyLinePlaceholder":306},[152,150943,150944],{"class":281,"line":324},[152,150945,307],{"emptyLinePlaceholder":306},[152,150947,150948,150950,150952],{"class":281,"line":329},[152,150949,150818],{"class":483},[152,150951,1864],{"class":476},[152,150953,150823],{"class":483},[152,150955,150956,150958,150960],{"class":281,"line":343},[152,150957,150828],{"class":483},[152,150959,1864],{"class":476},[152,150961,150690],{"class":289},[152,150963,150964,150966,150968],{"class":281,"line":348},[152,150965,150837],{"class":483},[152,150967,1864],{"class":476},[152,150969,147888],{"class":293},[152,150971,150972],{"class":281,"line":362},[152,150973,307],{"emptyLinePlaceholder":306},[152,150975,150976,150978],{"class":281,"line":367},[152,150977,31752],{"class":293},[152,150979,150980],{"class":483},"(student.name)\n",[152,150982,150983,150985],{"class":281,"line":381},[152,150984,31752],{"class":293},[152,150986,150987],{"class":483},"(student.age)\n",[19,150989,150990],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[1760,150992,150994],{"id":150993},"_114-方法","11.4 方法",[19,150996,150997],{},"类中的函数叫方法。",[270,150999,151000],{"className":31715,"code":150758,"language":31717,"meta":275,"style":275},[277,151001,151002,151010,151018,151046,151050,151054,151062,151070,151078],{"__ignoreMap":275},[152,151003,151004,151006,151008],{"class":281,"line":282},[152,151005,16309],{"class":476},[152,151007,9540],{"class":285},[152,151009,5382],{"class":483},[152,151011,151012,151014,151016],{"class":281,"line":303},[152,151013,32138],{"class":476},[152,151015,150709],{"class":285},[152,151017,32144],{"class":483},[152,151019,151020,151022,151024,151026,151028,151030,151032,151034,151036,151038,151040,151042,151044],{"class":281,"line":310},[152,151021,33788],{"class":293},[152,151023,1819],{"class":483},[152,151025,1870],{"class":476},[152,151027,150723],{"class":289},[152,151029,150789],{"class":293},[152,151031,81638],{"class":483},[152,151033,2752],{"class":293},[152,151035,150732],{"class":289},[152,151037,150789],{"class":293},[152,151039,81650],{"class":483},[152,151041,2752],{"class":293},[152,151043,150741],{"class":289},[152,151045,1825],{"class":483},[152,151047,151048],{"class":281,"line":324},[152,151049,307],{"emptyLinePlaceholder":306},[152,151051,151052],{"class":281,"line":329},[152,151053,307],{"emptyLinePlaceholder":306},[152,151055,151056,151058,151060],{"class":281,"line":343},[152,151057,150818],{"class":483},[152,151059,1864],{"class":476},[152,151061,150823],{"class":483},[152,151063,151064,151066,151068],{"class":281,"line":348},[152,151065,150828],{"class":483},[152,151067,1864],{"class":476},[152,151069,150690],{"class":289},[152,151071,151072,151074,151076],{"class":281,"line":362},[152,151073,150837],{"class":483},[152,151075,1864],{"class":476},[152,151077,147888],{"class":293},[152,151079,151080],{"class":281,"line":367},[152,151081,150846],{"class":483},[19,151083,151084,151086,151087,151089],{},[277,151085,32160],{}," 表示当前对象。调用方法时不需要手动传入 ",[277,151088,32160],{},"，Python 会自动传。",[1760,151091,151093],{"id":151092},"_115-构造方法__init__","11.5 构造方法__init__",[19,151095,151096,151098],{},[277,151097,32166],{}," 在对象创建时自动执行，用于初始化属性。",[270,151100,151102],{"className":31715,"code":151101,"language":31717,"meta":275,"style":275},"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",[277,151103,151104,151112,151121,151133,151145,151156,151160,151168,151206,151210,151214,151236],{"__ignoreMap":275},[152,151105,151106,151108,151110],{"class":281,"line":282},[152,151107,16309],{"class":476},[152,151109,9540],{"class":285},[152,151111,5382],{"class":483},[152,151113,151114,151116,151118],{"class":281,"line":303},[152,151115,32138],{"class":476},[152,151117,32141],{"class":293},[152,151119,151120],{"class":483},"(self, name, age, score):\n",[152,151122,151123,151125,151128,151130],{"class":281,"line":310},[152,151124,32182],{"class":293},[152,151126,151127],{"class":483},".name ",[152,151129,1864],{"class":476},[152,151131,151132],{"class":483}," name\n",[152,151134,151135,151137,151140,151142],{"class":281,"line":324},[152,151136,32182],{"class":293},[152,151138,151139],{"class":483},".age ",[152,151141,1864],{"class":476},[152,151143,151144],{"class":483}," age\n",[152,151146,151147,151149,151152,151154],{"class":281,"line":329},[152,151148,32182],{"class":293},[152,151150,151151],{"class":483},".score ",[152,151153,1864],{"class":476},[152,151155,3250],{"class":483},[152,151157,151158],{"class":281,"line":343},[152,151159,307],{"emptyLinePlaceholder":306},[152,151161,151162,151164,151166],{"class":281,"line":348},[152,151163,32138],{"class":476},[152,151165,150709],{"class":285},[152,151167,32144],{"class":483},[152,151169,151170,151172,151174,151176,151178,151180,151182,151184,151186,151188,151190,151192,151195,151197,151200,151202,151204],{"class":281,"line":362},[152,151171,33788],{"class":293},[152,151173,1819],{"class":483},[152,151175,1870],{"class":476},[152,151177,150723],{"class":289},[152,151179,150789],{"class":293},[152,151181,81638],{"class":483},[152,151183,2752],{"class":293},[152,151185,150732],{"class":289},[152,151187,150789],{"class":293},[152,151189,81650],{"class":483},[152,151191,2752],{"class":293},[152,151193,151194],{"class":289},"岁，成绩",[152,151196,150789],{"class":293},[152,151198,151199],{"class":483},".score",[152,151201,2752],{"class":293},[152,151203,2059],{"class":289},[152,151205,1825],{"class":483},[152,151207,151208],{"class":281,"line":367},[152,151209,307],{"emptyLinePlaceholder":306},[152,151211,151212],{"class":281,"line":381},[152,151213,307],{"emptyLinePlaceholder":306},[152,151215,151216,151218,151220,151223,151226,151228,151230,151232,151234],{"class":281,"line":386},[152,151217,150818],{"class":483},[152,151219,1864],{"class":476},[152,151221,151222],{"class":483}," Student(",[152,151224,151225],{"class":289},"\"小明\"",[152,151227,14051],{"class":483},[152,151229,2458],{"class":293},[152,151231,14051],{"class":483},[152,151233,2794],{"class":293},[152,151235,1825],{"class":483},[152,151237,151238],{"class":281,"line":932},[152,151239,150846],{"class":483},[19,151241,151242],{},"构造方法的好处：",[416,151244,151245,151248,151251],{},[419,151246,151247],{},"创建对象时必须提供必要数据。",[419,151249,151250],{},"属性初始化集中，不容易漏。",[419,151252,151253],{},"对象状态更完整。",[1760,151255,151257,151258],{"id":151256},"_116-str","11.6 ",[694,151259,2974],{},[19,151261,151262,151263,29984],{},"直接打印对象时，默认输出不直观。可以定义 ",[277,151264,151265],{},"__str__",[270,151267,151269],{"className":31715,"code":151268,"language":31717,"meta":275,"style":275},"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",[277,151270,151271,151279,151288,151298,151308,151312,151321,151349,151353,151357,151373],{"__ignoreMap":275},[152,151272,151273,151275,151277],{"class":281,"line":282},[152,151274,16309],{"class":476},[152,151276,9540],{"class":285},[152,151278,5382],{"class":483},[152,151280,151281,151283,151285],{"class":281,"line":303},[152,151282,32138],{"class":476},[152,151284,32141],{"class":293},[152,151286,151287],{"class":483},"(self, name, age):\n",[152,151289,151290,151292,151294,151296],{"class":281,"line":310},[152,151291,32182],{"class":293},[152,151293,151127],{"class":483},[152,151295,1864],{"class":476},[152,151297,151132],{"class":483},[152,151299,151300,151302,151304,151306],{"class":281,"line":324},[152,151301,32182],{"class":293},[152,151303,151139],{"class":483},[152,151305,1864],{"class":476},[152,151307,151144],{"class":483},[152,151309,151310],{"class":281,"line":329},[152,151311,307],{"emptyLinePlaceholder":306},[152,151313,151314,151316,151319],{"class":281,"line":343},[152,151315,32138],{"class":476},[152,151317,151318],{"class":293}," __str__",[152,151320,32144],{"class":483},[152,151322,151323,151325,151328,151331,151333,151335,151337,151340,151342,151344,151346],{"class":281,"line":348},[152,151324,16367],{"class":476},[152,151326,151327],{"class":476}," f",[152,151329,151330],{"class":289},"\"Student(name=",[152,151332,150789],{"class":293},[152,151334,81638],{"class":483},[152,151336,2752],{"class":293},[152,151338,151339],{"class":289},", age=",[152,151341,150789],{"class":293},[152,151343,81650],{"class":483},[152,151345,2752],{"class":293},[152,151347,151348],{"class":289},")\"\n",[152,151350,151351],{"class":281,"line":362},[152,151352,307],{"emptyLinePlaceholder":306},[152,151354,151355],{"class":281,"line":367},[152,151356,307],{"emptyLinePlaceholder":306},[152,151358,151359,151361,151363,151365,151367,151369,151371],{"class":281,"line":381},[152,151360,150818],{"class":483},[152,151362,1864],{"class":476},[152,151364,151222],{"class":483},[152,151366,151225],{"class":289},[152,151368,14051],{"class":483},[152,151370,2458],{"class":293},[152,151372,1825],{"class":483},[152,151374,151375,151377],{"class":281,"line":386},[152,151376,31752],{"class":293},[152,151378,151379],{"class":483},"(student)\n",[1760,151381,151383],{"id":151382},"_117-封装","11.7 封装",[19,151385,151386],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151388,151389],{},"Python 中以双下划线开头的属性通常视为私有属性。",[270,151391,151393],{"className":31715,"code":151392,"language":31717,"meta":275,"style":275},"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",[277,151394,151395,151404,151413,151425,151437,151441,151450,151459,151463,151473,151486,151497,151502,151513,151517,151526,151538,151549,151553,151566,151577,151581,151592,151596,151600,151618,151627,151636],{"__ignoreMap":275},[152,151396,151397,151399,151402],{"class":281,"line":282},[152,151398,16309],{"class":476},[152,151400,151401],{"class":285}," Account",[152,151403,5382],{"class":483},[152,151405,151406,151408,151410],{"class":281,"line":303},[152,151407,32138],{"class":476},[152,151409,32141],{"class":293},[152,151411,151412],{"class":483},"(self, owner, balance):\n",[152,151414,151415,151417,151420,151422],{"class":281,"line":310},[152,151416,32182],{"class":293},[152,151418,151419],{"class":483},".owner ",[152,151421,1864],{"class":476},[152,151423,151424],{"class":483}," owner\n",[152,151426,151427,151429,151432,151434],{"class":281,"line":324},[152,151428,32182],{"class":293},[152,151430,151431],{"class":483},".__balance ",[152,151433,1864],{"class":476},[152,151435,151436],{"class":483}," balance\n",[152,151438,151439],{"class":281,"line":329},[152,151440,307],{"emptyLinePlaceholder":306},[152,151442,151443,151445,151448],{"class":281,"line":343},[152,151444,32138],{"class":476},[152,151446,151447],{"class":285}," get_balance",[152,151449,32144],{"class":483},[152,151451,151452,151454,151456],{"class":281,"line":348},[152,151453,16367],{"class":476},[152,151455,40210],{"class":293},[152,151457,151458],{"class":483},".__balance\n",[152,151460,151461],{"class":281,"line":362},[152,151462,307],{"emptyLinePlaceholder":306},[152,151464,151465,151467,151470],{"class":281,"line":367},[152,151466,32138],{"class":476},[152,151468,151469],{"class":285}," deposit",[152,151471,151472],{"class":483},"(self, money):\n",[152,151474,151475,151477,151480,151482,151484],{"class":281,"line":381},[152,151476,4147],{"class":476},[152,151478,151479],{"class":483}," money ",[152,151481,3259],{"class":476},[152,151483,5735],{"class":293},[152,151485,5382],{"class":483},[152,151487,151488,151490,151492,151495],{"class":281,"line":386},[152,151489,35987],{"class":293},[152,151491,1819],{"class":483},[152,151493,151494],{"class":289},"\"存款金额必须大于0\"",[152,151496,1825],{"class":483},[152,151498,151499],{"class":281,"line":932},[152,151500,151501],{"class":476},"            return\n",[152,151503,151504,151506,151508,151510],{"class":281,"line":942},[152,151505,32182],{"class":293},[152,151507,151431],{"class":483},[152,151509,11109],{"class":476},[152,151511,151512],{"class":483}," money\n",[152,151514,151515],{"class":281,"line":949},[152,151516,307],{"emptyLinePlaceholder":306},[152,151518,151519,151521,151524],{"class":281,"line":954},[152,151520,32138],{"class":476},[152,151522,151523],{"class":285}," withdraw",[152,151525,151472],{"class":483},[152,151527,151528,151530,151532,151534,151536],{"class":281,"line":959},[152,151529,4147],{"class":476},[152,151531,151479],{"class":483},[152,151533,3259],{"class":476},[152,151535,5735],{"class":293},[152,151537,5382],{"class":483},[152,151539,151540,151542,151544,151547],{"class":281,"line":970},[152,151541,35987],{"class":293},[152,151543,1819],{"class":483},[152,151545,151546],{"class":289},"\"取款金额必须大于0\"",[152,151548,1825],{"class":483},[152,151550,151551],{"class":281,"line":979},[152,151552,151501],{"class":476},[152,151554,151555,151557,151559,151561,151563],{"class":281,"line":989},[152,151556,4147],{"class":476},[152,151558,151479],{"class":483},[152,151560,487],{"class":476},[152,151562,40210],{"class":293},[152,151564,151565],{"class":483},".__balance:\n",[152,151567,151568,151570,151572,151575],{"class":281,"line":996},[152,151569,35987],{"class":293},[152,151571,1819],{"class":483},[152,151573,151574],{"class":289},"\"余额不足\"",[152,151576,1825],{"class":483},[152,151578,151579],{"class":281,"line":1001},[152,151580,151501],{"class":476},[152,151582,151583,151585,151587,151590],{"class":281,"line":1006},[152,151584,32182],{"class":293},[152,151586,151431],{"class":483},[152,151588,151589],{"class":476},"-=",[152,151591,151512],{"class":483},[152,151593,151594],{"class":281,"line":1018},[152,151595,307],{"emptyLinePlaceholder":306},[152,151597,151598],{"class":281,"line":1027},[152,151599,307],{"emptyLinePlaceholder":306},[152,151601,151602,151605,151607,151610,151612,151614,151616],{"class":281,"line":1037},[152,151603,151604],{"class":483},"account ",[152,151606,1864],{"class":476},[152,151608,151609],{"class":483}," Account(",[152,151611,151225],{"class":289},[152,151613,14051],{"class":483},[152,151615,8052],{"class":293},[152,151617,1825],{"class":483},[152,151619,151620,151623,151625],{"class":281,"line":1044},[152,151621,151622],{"class":483},"account.deposit(",[152,151624,3382],{"class":293},[152,151626,1825],{"class":483},[152,151628,151629,151632,151634],{"class":281,"line":1049},[152,151630,151631],{"class":483},"account.withdraw(",[152,151633,2119],{"class":293},[152,151635,1825],{"class":483},[152,151637,151638,151640],{"class":281,"line":1054},[152,151639,31752],{"class":293},[152,151641,151642],{"class":483},"(account.get_balance())\n",[19,151644,151645],{},"封装的意义是避免外部随意修改内部状态。",[1760,151647,151649],{"id":151648},"_118-继承","11.8 继承",[19,151651,151652],{},"继承可以让子类复用父类的属性和方法。",[270,151654,151656],{"className":31715,"code":151655,"language":31717,"meta":275,"style":275},"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",[277,151657,151658,151667,151676,151687,151691,151695,151709,151718,151729,151733,151737,151747,151752],{"__ignoreMap":275},[152,151659,151660,151662,151665],{"class":281,"line":282},[152,151661,16309],{"class":476},[152,151663,151664],{"class":285}," Animal",[152,151666,5382],{"class":483},[152,151668,151669,151671,151674],{"class":281,"line":303},[152,151670,32138],{"class":476},[152,151672,151673],{"class":285}," eat",[152,151675,32144],{"class":483},[152,151677,151678,151680,151682,151685],{"class":281,"line":310},[152,151679,33788],{"class":293},[152,151681,1819],{"class":483},[152,151683,151684],{"class":289},"\"吃东西\"",[152,151686,1825],{"class":483},[152,151688,151689],{"class":281,"line":324},[152,151690,307],{"emptyLinePlaceholder":306},[152,151692,151693],{"class":281,"line":329},[152,151694,307],{"emptyLinePlaceholder":306},[152,151696,151697,151699,151702,151704,151707],{"class":281,"line":343},[152,151698,16309],{"class":476},[152,151700,151701],{"class":285}," Dog",[152,151703,1819],{"class":483},[152,151705,151706],{"class":285},"Animal",[152,151708,32123],{"class":483},[152,151710,151711,151713,151716],{"class":281,"line":348},[152,151712,32138],{"class":476},[152,151714,151715],{"class":285}," bark",[152,151717,32144],{"class":483},[152,151719,151720,151722,151724,151727],{"class":281,"line":362},[152,151721,33788],{"class":293},[152,151723,1819],{"class":483},[152,151725,151726],{"class":289},"\"汪汪\"",[152,151728,1825],{"class":483},[152,151730,151731],{"class":281,"line":367},[152,151732,307],{"emptyLinePlaceholder":306},[152,151734,151735],{"class":281,"line":381},[152,151736,307],{"emptyLinePlaceholder":306},[152,151738,151739,151742,151744],{"class":281,"line":386},[152,151740,151741],{"class":483},"dog ",[152,151743,1864],{"class":476},[152,151745,151746],{"class":483}," Dog()\n",[152,151748,151749],{"class":281,"line":932},[152,151750,151751],{"class":483},"dog.eat()\n",[152,151753,151754],{"class":281,"line":942},[152,151755,151756],{"class":483},"dog.bark()\n",[19,151758,151759],{},"子类可以扩展新方法，也可以重写父类方法。",[1760,151761,151763],{"id":151762},"_119-方法重写","11.9 方法重写",[270,151765,151767],{"className":31715,"code":151766,"language":31717,"meta":275,"style":275},"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",[277,151768,151769,151777,151786,151797,151801,151805,151817,151825,151835,151839,151843,151856,151864,151875,151879,151883,151891,151901,151905,151910],{"__ignoreMap":275},[152,151770,151771,151773,151775],{"class":281,"line":282},[152,151772,16309],{"class":476},[152,151774,151664],{"class":285},[152,151776,5382],{"class":483},[152,151778,151779,151781,151784],{"class":281,"line":303},[152,151780,32138],{"class":476},[152,151782,151783],{"class":285}," speak",[152,151785,32144],{"class":483},[152,151787,151788,151790,151792,151795],{"class":281,"line":310},[152,151789,33788],{"class":293},[152,151791,1819],{"class":483},[152,151793,151794],{"class":289},"\"动物叫\"",[152,151796,1825],{"class":483},[152,151798,151799],{"class":281,"line":324},[152,151800,307],{"emptyLinePlaceholder":306},[152,151802,151803],{"class":281,"line":329},[152,151804,307],{"emptyLinePlaceholder":306},[152,151806,151807,151809,151811,151813,151815],{"class":281,"line":343},[152,151808,16309],{"class":476},[152,151810,151701],{"class":285},[152,151812,1819],{"class":483},[152,151814,151706],{"class":285},[152,151816,32123],{"class":483},[152,151818,151819,151821,151823],{"class":281,"line":348},[152,151820,32138],{"class":476},[152,151822,151783],{"class":285},[152,151824,32144],{"class":483},[152,151826,151827,151829,151831,151833],{"class":281,"line":362},[152,151828,33788],{"class":293},[152,151830,1819],{"class":483},[152,151832,151726],{"class":289},[152,151834,1825],{"class":483},[152,151836,151837],{"class":281,"line":367},[152,151838,307],{"emptyLinePlaceholder":306},[152,151840,151841],{"class":281,"line":381},[152,151842,307],{"emptyLinePlaceholder":306},[152,151844,151845,151847,151850,151852,151854],{"class":281,"line":386},[152,151846,16309],{"class":476},[152,151848,151849],{"class":285}," Cat",[152,151851,1819],{"class":483},[152,151853,151706],{"class":285},[152,151855,32123],{"class":483},[152,151857,151858,151860,151862],{"class":281,"line":932},[152,151859,32138],{"class":476},[152,151861,151783],{"class":285},[152,151863,32144],{"class":483},[152,151865,151866,151868,151870,151873],{"class":281,"line":942},[152,151867,33788],{"class":293},[152,151869,1819],{"class":483},[152,151871,151872],{"class":289},"\"喵喵\"",[152,151874,1825],{"class":483},[152,151876,151877],{"class":281,"line":949},[152,151878,307],{"emptyLinePlaceholder":306},[152,151880,151881],{"class":281,"line":954},[152,151882,307],{"emptyLinePlaceholder":306},[152,151884,151885,151887,151889],{"class":281,"line":959},[152,151886,151741],{"class":483},[152,151888,1864],{"class":476},[152,151890,151746],{"class":483},[152,151892,151893,151896,151898],{"class":281,"line":970},[152,151894,151895],{"class":483},"cat ",[152,151897,1864],{"class":476},[152,151899,151900],{"class":483}," Cat()\n",[152,151902,151903],{"class":281,"line":979},[152,151904,307],{"emptyLinePlaceholder":306},[152,151906,151907],{"class":281,"line":989},[152,151908,151909],{"class":483},"dog.speak()\n",[152,151911,151912],{"class":281,"line":996},[152,151913,151914],{"class":483},"cat.speak()\n",[1760,151916,151918],{"id":151917},"_1110-super","11.10 super",[19,151920,151921,151922,151925],{},"子类可以通过 ",[277,151923,151924],{},"super()"," 调用父类方法。",[270,151927,151929],{"className":31715,"code":151928,"language":31717,"meta":275,"style":275},"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",[277,151930,151931,151939,151948,151958,151962,151966,151978,151987,151998,152008,152012,152016,152032],{"__ignoreMap":275},[152,151932,151933,151935,151937],{"class":281,"line":282},[152,151934,16309],{"class":476},[152,151936,17184],{"class":285},[152,151938,5382],{"class":483},[152,151940,151941,151943,151945],{"class":281,"line":303},[152,151942,32138],{"class":476},[152,151944,32141],{"class":293},[152,151946,151947],{"class":483},"(self, name):\n",[152,151949,151950,151952,151954,151956],{"class":281,"line":310},[152,151951,32182],{"class":293},[152,151953,151127],{"class":483},[152,151955,1864],{"class":476},[152,151957,151132],{"class":483},[152,151959,151960],{"class":281,"line":324},[152,151961,307],{"emptyLinePlaceholder":306},[152,151963,151964],{"class":281,"line":329},[152,151965,307],{"emptyLinePlaceholder":306},[152,151967,151968,151970,151972,151974,151976],{"class":281,"line":343},[152,151969,16309],{"class":476},[152,151971,9540],{"class":285},[152,151973,1819],{"class":483},[152,151975,20661],{"class":285},[152,151977,32123],{"class":483},[152,151979,151980,151982,151984],{"class":281,"line":348},[152,151981,32138],{"class":476},[152,151983,32141],{"class":293},[152,151985,151986],{"class":483},"(self, name, score):\n",[152,151988,151989,151991,151993,151995],{"class":281,"line":362},[152,151990,32154],{"class":293},[152,151992,18876],{"class":483},[152,151994,32166],{"class":293},[152,151996,151997],{"class":483},"(name)\n",[152,151999,152000,152002,152004,152006],{"class":281,"line":367},[152,152001,32182],{"class":293},[152,152003,151151],{"class":483},[152,152005,1864],{"class":476},[152,152007,3250],{"class":483},[152,152009,152010],{"class":281,"line":381},[152,152011,307],{"emptyLinePlaceholder":306},[152,152013,152014],{"class":281,"line":386},[152,152015,307],{"emptyLinePlaceholder":306},[152,152017,152018,152020,152022,152024,152026,152028,152030],{"class":281,"line":932},[152,152019,150818],{"class":483},[152,152021,1864],{"class":476},[152,152023,151222],{"class":483},[152,152025,151225],{"class":289},[152,152027,14051],{"class":483},[152,152029,2794],{"class":293},[152,152031,1825],{"class":483},[152,152033,152034,152036],{"class":281,"line":942},[152,152035,31752],{"class":293},[152,152037,152038],{"class":483},"(student.name, student.score)\n",[1760,152040,152042],{"id":152041},"_1111-多态","11.11 多态",[19,152044,152045],{},"多态指不同对象响应同一个方法，表现出不同结果。",[270,152047,152049],{"className":31715,"code":152048,"language":31717,"meta":275,"style":275},"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",[277,152050,152051,152059,152067,152077,152081,152085,152093,152101,152111,152115,152119,152129,152134,152138,152142,152147],{"__ignoreMap":275},[152,152052,152053,152055,152057],{"class":281,"line":282},[152,152054,16309],{"class":476},[152,152056,151701],{"class":285},[152,152058,5382],{"class":483},[152,152060,152061,152063,152065],{"class":281,"line":303},[152,152062,32138],{"class":476},[152,152064,151783],{"class":285},[152,152066,32144],{"class":483},[152,152068,152069,152071,152073,152075],{"class":281,"line":310},[152,152070,33788],{"class":293},[152,152072,1819],{"class":483},[152,152074,151726],{"class":289},[152,152076,1825],{"class":483},[152,152078,152079],{"class":281,"line":324},[152,152080,307],{"emptyLinePlaceholder":306},[152,152082,152083],{"class":281,"line":329},[152,152084,307],{"emptyLinePlaceholder":306},[152,152086,152087,152089,152091],{"class":281,"line":343},[152,152088,16309],{"class":476},[152,152090,151849],{"class":285},[152,152092,5382],{"class":483},[152,152094,152095,152097,152099],{"class":281,"line":348},[152,152096,32138],{"class":476},[152,152098,151783],{"class":285},[152,152100,32144],{"class":483},[152,152102,152103,152105,152107,152109],{"class":281,"line":362},[152,152104,33788],{"class":293},[152,152106,1819],{"class":483},[152,152108,151872],{"class":289},[152,152110,1825],{"class":483},[152,152112,152113],{"class":281,"line":367},[152,152114,307],{"emptyLinePlaceholder":306},[152,152116,152117],{"class":281,"line":381},[152,152118,307],{"emptyLinePlaceholder":306},[152,152120,152121,152123,152126],{"class":281,"line":386},[152,152122,33284],{"class":476},[152,152124,152125],{"class":285}," make_sound",[152,152127,152128],{"class":483},"(animal):\n",[152,152130,152131],{"class":281,"line":932},[152,152132,152133],{"class":483},"    animal.speak()\n",[152,152135,152136],{"class":281,"line":942},[152,152137,307],{"emptyLinePlaceholder":306},[152,152139,152140],{"class":281,"line":949},[152,152141,307],{"emptyLinePlaceholder":306},[152,152143,152144],{"class":281,"line":954},[152,152145,152146],{"class":483},"make_sound(Dog())\n",[152,152148,152149],{"class":281,"line":959},[152,152150,152151],{"class":483},"make_sound(Cat())\n",[19,152153,152154],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[1760,152156,152158],{"id":152157},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152160,152161],{},"实例属性属于对象：",[270,152163,152165],{"className":31715,"code":152164,"language":31717,"meta":275,"style":275},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[277,152166,152167,152175,152183],{"__ignoreMap":275},[152,152168,152169,152171,152173],{"class":281,"line":282},[152,152170,16309],{"class":476},[152,152172,9540],{"class":285},[152,152174,5382],{"class":483},[152,152176,152177,152179,152181],{"class":281,"line":303},[152,152178,32138],{"class":476},[152,152180,32141],{"class":293},[152,152182,151947],{"class":483},[152,152184,152185,152187,152189,152191],{"class":281,"line":310},[152,152186,32182],{"class":293},[152,152188,151127],{"class":483},[152,152190,1864],{"class":476},[152,152192,151132],{"class":483},[19,152194,152195],{},"类属性属于类，所有对象共享：",[270,152197,152199],{"className":31715,"code":152198,"language":31717,"meta":275,"style":275},"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",[277,152200,152201,152209,152219,152223,152231,152241,152245,152249,152262,152276,152280,152287,152294],{"__ignoreMap":275},[152,152202,152203,152205,152207],{"class":281,"line":282},[152,152204,16309],{"class":476},[152,152206,9540],{"class":285},[152,152208,5382],{"class":483},[152,152210,152211,152214,152216],{"class":281,"line":303},[152,152212,152213],{"class":483},"    school ",[152,152215,1864],{"class":476},[152,152217,152218],{"class":289}," \"黑马学校\"\n",[152,152220,152221],{"class":281,"line":310},[152,152222,307],{"emptyLinePlaceholder":306},[152,152224,152225,152227,152229],{"class":281,"line":324},[152,152226,32138],{"class":476},[152,152228,32141],{"class":293},[152,152230,151947],{"class":483},[152,152232,152233,152235,152237,152239],{"class":281,"line":329},[152,152234,32182],{"class":293},[152,152236,151127],{"class":483},[152,152238,1864],{"class":476},[152,152240,151132],{"class":483},[152,152242,152243],{"class":281,"line":343},[152,152244,307],{"emptyLinePlaceholder":306},[152,152246,152247],{"class":281,"line":348},[152,152248,307],{"emptyLinePlaceholder":306},[152,152250,152251,152254,152256,152258,152260],{"class":281,"line":362},[152,152252,152253],{"class":483},"s1 ",[152,152255,1864],{"class":476},[152,152257,151222],{"class":483},[152,152259,151225],{"class":289},[152,152261,1825],{"class":483},[152,152263,152264,152267,152269,152271,152274],{"class":281,"line":367},[152,152265,152266],{"class":483},"s2 ",[152,152268,1864],{"class":476},[152,152270,151222],{"class":483},[152,152272,152273],{"class":289},"\"小红\"",[152,152275,1825],{"class":483},[152,152277,152278],{"class":281,"line":381},[152,152279,307],{"emptyLinePlaceholder":306},[152,152281,152282,152284],{"class":281,"line":386},[152,152283,31752],{"class":293},[152,152285,152286],{"class":483},"(s1.school)\n",[152,152288,152289,152291],{"class":281,"line":932},[152,152290,31752],{"class":293},[152,152292,152293],{"class":483},"(s2.school)\n",[152,152295,152296,152298],{"class":281,"line":942},[152,152297,31752],{"class":293},[152,152299,152300],{"class":483},"(Student.school)\n",[19,152302,152303],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[1760,152305,152307],{"id":152306},"_1113-类方法和静态方法","11.13 类方法和静态方法",[14,152309,152311],{"id":152310},"_11131-类方法","11.13.1 类方法",[19,152313,152314,152315,152318,152319,29984],{},"类方法使用 ",[277,152316,152317],{},"@classmethod","，第一个参数通常是 ",[277,152320,152321],{},"cls",[270,152323,152325],{"className":31715,"code":152324,"language":31717,"meta":275,"style":275},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[277,152326,152327,152335,152343,152347,152355,152365,152375,152379,152383],{"__ignoreMap":275},[152,152328,152329,152331,152333],{"class":281,"line":282},[152,152330,16309],{"class":476},[152,152332,9540],{"class":285},[152,152334,5382],{"class":483},[152,152336,152337,152339,152341],{"class":281,"line":303},[152,152338,152213],{"class":483},[152,152340,1864],{"class":476},[152,152342,152218],{"class":289},[152,152344,152345],{"class":281,"line":310},[152,152346,307],{"emptyLinePlaceholder":306},[152,152348,152349,152352],{"class":281,"line":324},[152,152350,152351],{"class":285},"    @",[152,152353,152354],{"class":293},"classmethod\n",[152,152356,152357,152359,152362],{"class":281,"line":329},[152,152358,32138],{"class":476},[152,152360,152361],{"class":285}," get_school",[152,152363,152364],{"class":483},"(cls):\n",[152,152366,152367,152369,152372],{"class":281,"line":343},[152,152368,16367],{"class":476},[152,152370,152371],{"class":293}," cls",[152,152373,152374],{"class":483},".school\n",[152,152376,152377],{"class":281,"line":348},[152,152378,307],{"emptyLinePlaceholder":306},[152,152380,152381],{"class":281,"line":362},[152,152382,307],{"emptyLinePlaceholder":306},[152,152384,152385,152387],{"class":281,"line":367},[152,152386,31752],{"class":293},[152,152388,152389],{"class":483},"(Student.get_school())\n",[14,152391,152393],{"id":152392},"_11132-静态方法","11.13.2 静态方法",[19,152395,152396,152397,152400],{},"静态方法使用 ",[277,152398,152399],{},"@staticmethod","，不需要访问实例和类。",[270,152402,152404],{"className":31715,"code":152403,"language":31717,"meta":275,"style":275},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[277,152405,152406,152415,152422,152431,152442,152446,152450],{"__ignoreMap":275},[152,152407,152408,152410,152413],{"class":281,"line":282},[152,152409,16309],{"class":476},[152,152411,152412],{"class":285}," MathUtils",[152,152414,5382],{"class":483},[152,152416,152417,152419],{"class":281,"line":303},[152,152418,152351],{"class":285},[152,152420,152421],{"class":293},"staticmethod\n",[152,152423,152424,152426,152428],{"class":281,"line":310},[152,152425,32138],{"class":476},[152,152427,6851],{"class":285},[152,152429,152430],{"class":483},"(a, b):\n",[152,152432,152433,152435,152437,152439],{"class":281,"line":324},[152,152434,16367],{"class":476},[152,152436,12485],{"class":483},[152,152438,2289],{"class":476},[152,152440,152441],{"class":483}," b\n",[152,152443,152444],{"class":281,"line":329},[152,152445,307],{"emptyLinePlaceholder":306},[152,152447,152448],{"class":281,"line":343},[152,152449,307],{"emptyLinePlaceholder":306},[152,152451,152452,152454,152457,152459,152461,152463],{"class":281,"line":348},[152,152453,31752],{"class":293},[152,152455,152456],{"class":483},"(MathUtils.add(",[152,152458,2026],{"class":293},[152,152460,14051],{"class":483},[152,152462,1894],{"class":293},[152,152464,31834],{"class":483},[19,152466,152467],{},"静态方法本质上是放在类命名空间里的普通函数。",[1760,152469,152471],{"id":152470},"_1114-dataclass","11.14 dataclass",[19,152473,152474,152477],{},[277,152475,152476],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[270,152479,152481],{"className":31715,"code":152480,"language":31717,"meta":275,"style":275},"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",[277,152482,152483,152495,152499,152503,152508,152516,152524,152532,152540,152544,152548,152568],{"__ignoreMap":275},[152,152484,152485,152487,152490,152492],{"class":281,"line":282},[152,152486,32074],{"class":476},[152,152488,152489],{"class":483}," dataclasses ",[152,152491,31729],{"class":476},[152,152493,152494],{"class":483}," dataclass\n",[152,152496,152497],{"class":281,"line":303},[152,152498,307],{"emptyLinePlaceholder":306},[152,152500,152501],{"class":281,"line":310},[152,152502,307],{"emptyLinePlaceholder":306},[152,152504,152505],{"class":281,"line":324},[152,152506,152507],{"class":285},"@dataclass\n",[152,152509,152510,152512,152514],{"class":281,"line":329},[152,152511,16309],{"class":476},[152,152513,9540],{"class":285},[152,152515,5382],{"class":483},[152,152517,152518,152521],{"class":281,"line":343},[152,152519,152520],{"class":483},"    name: ",[152,152522,152523],{"class":293},"str\n",[152,152525,152526,152529],{"class":281,"line":348},[152,152527,152528],{"class":483},"    age: ",[152,152530,152531],{"class":293},"int\n",[152,152533,152534,152537],{"class":281,"line":362},[152,152535,152536],{"class":483},"    score: ",[152,152538,152539],{"class":293},"float\n",[152,152541,152542],{"class":281,"line":367},[152,152543,307],{"emptyLinePlaceholder":306},[152,152545,152546],{"class":281,"line":381},[152,152547,307],{"emptyLinePlaceholder":306},[152,152549,152550,152552,152554,152556,152558,152560,152562,152564,152566],{"class":281,"line":386},[152,152551,150818],{"class":483},[152,152553,1864],{"class":476},[152,152555,151222],{"class":483},[152,152557,151225],{"class":289},[152,152559,14051],{"class":483},[152,152561,2458],{"class":293},[152,152563,14051],{"class":483},[152,152565,2794],{"class":293},[152,152567,1825],{"class":483},[152,152569,152570,152572],{"class":281,"line":932},[152,152571,31752],{"class":293},[152,152573,151379],{"class":483},[19,152575,152576,152577,2021,152579,152582],{},"它会自动生成 ",[277,152578,32166],{},[277,152580,152581],{},"__repr__"," 等方法。适合数据模型类。",[1760,152584,152586],{"id":152585},"_1115-小案例学生类","11.15 小案例：学生类",[270,152588,152590],{"className":31715,"code":152589,"language":31717,"meta":275,"style":275},"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",[277,152591,152592,152600,152609,152621,152631,152641,152651,152655,152664,152677,152681,152690,152696,152708,152720,152732,152744,152748,152752,152758,152768,152777,152787,152795,152803,152812,152816,152820,152828,152864,152868,152872,152897,152904],{"__ignoreMap":275},[152,152593,152594,152596,152598],{"class":281,"line":282},[152,152595,16309],{"class":476},[152,152597,9540],{"class":285},[152,152599,5382],{"class":483},[152,152601,152602,152604,152606],{"class":281,"line":303},[152,152603,32138],{"class":476},[152,152605,32141],{"class":293},[152,152607,152608],{"class":483},"(self, student_id, name, age, score):\n",[152,152610,152611,152613,152616,152618],{"class":281,"line":310},[152,152612,32182],{"class":293},[152,152614,152615],{"class":483},".student_id ",[152,152617,1864],{"class":476},[152,152619,152620],{"class":483}," student_id\n",[152,152622,152623,152625,152627,152629],{"class":281,"line":324},[152,152624,32182],{"class":293},[152,152626,151127],{"class":483},[152,152628,1864],{"class":476},[152,152630,151132],{"class":483},[152,152632,152633,152635,152637,152639],{"class":281,"line":329},[152,152634,32182],{"class":293},[152,152636,151139],{"class":483},[152,152638,1864],{"class":476},[152,152640,151144],{"class":483},[152,152642,152643,152645,152647,152649],{"class":281,"line":343},[152,152644,32182],{"class":293},[152,152646,151151],{"class":483},[152,152648,1864],{"class":476},[152,152650,3250],{"class":483},[152,152652,152653],{"class":281,"line":348},[152,152654,307],{"emptyLinePlaceholder":306},[152,152656,152657,152659,152662],{"class":281,"line":362},[152,152658,32138],{"class":476},[152,152660,152661],{"class":285}," is_passed",[152,152663,32144],{"class":483},[152,152665,152666,152668,152670,152672,152674],{"class":281,"line":367},[152,152667,16367],{"class":476},[152,152669,40210],{"class":293},[152,152671,151151],{"class":483},[152,152673,3370],{"class":476},[152,152675,152676],{"class":293}," 60\n",[152,152678,152679],{"class":281,"line":381},[152,152680,307],{"emptyLinePlaceholder":306},[152,152682,152683,152685,152688],{"class":281,"line":386},[152,152684,32138],{"class":476},[152,152686,152687],{"class":285}," to_dict",[152,152689,32144],{"class":483},[152,152691,152692,152694],{"class":281,"line":932},[152,152693,16367],{"class":476},[152,152695,17187],{"class":483},[152,152697,152698,152701,152703,152705],{"class":281,"line":942},[152,152699,152700],{"class":289},"            \"student_id\"",[152,152702,52774],{"class":483},[152,152704,32160],{"class":293},[152,152706,152707],{"class":483},".student_id,\n",[152,152709,152710,152713,152715,152717],{"class":281,"line":949},[152,152711,152712],{"class":289},"            \"name\"",[152,152714,52774],{"class":483},[152,152716,32160],{"class":293},[152,152718,152719],{"class":483},".name,\n",[152,152721,152722,152725,152727,152729],{"class":281,"line":954},[152,152723,152724],{"class":289},"            \"age\"",[152,152726,52774],{"class":483},[152,152728,32160],{"class":293},[152,152730,152731],{"class":483},".age,\n",[152,152733,152734,152737,152739,152741],{"class":281,"line":959},[152,152735,152736],{"class":289},"            \"score\"",[152,152738,52774],{"class":483},[152,152740,32160],{"class":293},[152,152742,152743],{"class":483},".score,\n",[152,152745,152746],{"class":281,"line":970},[152,152747,4179],{"class":483},[152,152749,152750],{"class":281,"line":979},[152,152751,307],{"emptyLinePlaceholder":306},[152,152753,152754,152756],{"class":281,"line":989},[152,152755,152351],{"class":285},[152,152757,152354],{"class":293},[152,152759,152760,152762,152765],{"class":281,"line":996},[152,152761,32138],{"class":476},[152,152763,152764],{"class":285}," from_dict",[152,152766,152767],{"class":483},"(cls, data):\n",[152,152769,152770,152772,152774],{"class":281,"line":1001},[152,152771,16367],{"class":476},[152,152773,152371],{"class":293},[152,152775,152776],{"class":483},"(\n",[152,152778,152779,152782,152785],{"class":281,"line":1006},[152,152780,152781],{"class":483},"            data[",[152,152783,152784],{"class":289},"\"student_id\"",[152,152786,89173],{"class":483},[152,152788,152789,152791,152793],{"class":281,"line":1018},[152,152790,152781],{"class":483},[152,152792,64016],{"class":289},[152,152794,89173],{"class":483},[152,152796,152797,152799,152801],{"class":281,"line":1027},[152,152798,152781],{"class":483},[152,152800,70461],{"class":289},[152,152802,89173],{"class":483},[152,152804,152805,152807,152810],{"class":281,"line":1037},[152,152806,152781],{"class":483},[152,152808,152809],{"class":289},"\"score\"",[152,152811,89173],{"class":483},[152,152813,152814],{"class":281,"line":1044},[152,152815,39463],{"class":483},[152,152817,152818],{"class":281,"line":1049},[152,152819,307],{"emptyLinePlaceholder":306},[152,152821,152822,152824,152826],{"class":281,"line":1054},[152,152823,32138],{"class":476},[152,152825,151318],{"class":293},[152,152827,32144],{"class":483},[152,152829,152830,152832,152834,152836,152838,152841,152843,152846,152848,152850,152852,152854,152856,152858,152860,152862],{"class":281,"line":1065},[152,152831,16367],{"class":476},[152,152833,151327],{"class":476},[152,152835,2059],{"class":289},[152,152837,150789],{"class":293},[152,152839,152840],{"class":483},".student_id",[152,152842,2752],{"class":293},[152,152844,152845],{"class":293}," {self",[152,152847,81638],{"class":483},[152,152849,2752],{"class":293},[152,152851,152845],{"class":293},[152,152853,81650],{"class":483},[152,152855,2752],{"class":293},[152,152857,152845],{"class":293},[152,152859,151199],{"class":483},[152,152861,2752],{"class":293},[152,152863,26744],{"class":289},[152,152865,152866],{"class":281,"line":1074},[152,152867,307],{"emptyLinePlaceholder":306},[152,152869,152870],{"class":281,"line":1084},[152,152871,307],{"emptyLinePlaceholder":306},[152,152873,152874,152876,152878,152880,152883,152885,152887,152889,152891,152893,152895],{"class":281,"line":1091},[152,152875,150818],{"class":483},[152,152877,1864],{"class":476},[152,152879,151222],{"class":483},[152,152881,152882],{"class":289},"\"001\"",[152,152884,14051],{"class":483},[152,152886,151225],{"class":289},[152,152888,14051],{"class":483},[152,152890,2458],{"class":293},[152,152892,14051],{"class":483},[152,152894,2794],{"class":293},[152,152896,1825],{"class":483},[152,152898,152899,152901],{"class":281,"line":1096},[152,152900,31752],{"class":293},[152,152902,152903],{"class":483},"(student.is_passed())\n",[152,152905,152906,152908],{"class":281,"line":1101},[152,152907,31752],{"class":293},[152,152909,152910],{"class":483},"(student.to_dict())\n",[19,152912,152913,102355,152916,152919],{},[277,152914,152915],{},"to_dict()",[277,152917,152918],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[1760,152921,152923],{"id":152922},"_1116-易错点","11.16 易错点",[416,152925,152926,152932,152938,152943,152946,152949],{},[419,152927,152928,152929,29984],{},"类名推荐使用大驼峰，如 ",[277,152930,152931],{},"StudentManager",[419,152933,152934,152935,152937],{},"方法第一个参数必须写 ",[277,152936,32160],{},"，调用时不用传。",[419,152939,152940,152942],{},[277,152941,32166],{}," 不是普通方法，它在创建对象时自动执行。",[419,152944,152945],{},"私有属性不是绝对安全，只是约定和名称改写。",[419,152947,152948],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[419,152950,152951],{},"类中方法太多时，说明职责可能过重。",[1760,152953,152955],{"id":152954},"_1117-本章练习","11.17 本章练习",[416,152957,152958,152964,152970,152975,152988],{},[419,152959,152960,152961,152963],{},"定义 ",[277,152962,150905],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[419,152965,152960,152966,152969],{},[277,152967,152968],{},"Account"," 类，实现存款、取款、查询余额。",[419,152971,152960,152972,152974],{},[277,152973,18841],{}," 类，计算圆的周长和面积。",[419,152976,152960,152977,2021,152980,152983,152984,152987],{},[277,152978,152979],{},"Dog",[277,152981,152982],{},"Cat"," 类，并用同一个函数调用它们的 ",[277,152985,152986],{},"speak()"," 方法。",[419,152989,105703,152990,152992,152993,29984],{},[277,152991,152476],{}," 定义一个商品类 ",[277,152994,152995],{},"Product",[1736,152997,152998],{},"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":275,"searchDepth":303,"depth":303,"links":153000},[153001,153002,153003,153004,153005,153006,153008,153009,153010,153011,153012,153013,153014,153018,153019,153020,153021],{"id":150669,"depth":303,"text":150670},{"id":150852,"depth":303,"text":150853},{"id":150916,"depth":303,"text":150917},{"id":150993,"depth":303,"text":150994},{"id":151092,"depth":303,"text":151093},{"id":151256,"depth":303,"text":153007},"11.6 str",{"id":151382,"depth":303,"text":151383},{"id":151648,"depth":303,"text":151649},{"id":151762,"depth":303,"text":151763},{"id":151917,"depth":303,"text":151918},{"id":152041,"depth":303,"text":152042},{"id":152157,"depth":303,"text":152158},{"id":152306,"depth":303,"text":152307,"children":153015},[153016,153017],{"id":152310,"depth":310,"text":152311},{"id":152392,"depth":310,"text":152393},{"id":152470,"depth":303,"text":152471},{"id":152585,"depth":303,"text":152586},{"id":152922,"depth":303,"text":152923},{"id":152954,"depth":303,"text":152955},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150661,"description":24991},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153028,"title":153029,"body":153030,"description":24991,"extension":1744,"meta":156343,"navigation":306,"path":156344,"seo":156345,"stem":156346,"__hash__":156347},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153031,"toc":156319},[153032,153035,153039,153042,153045,153074,153077,153085,153089,153093,153096,153119,153122,153128,153132,154578,154581,154602,154606,154609,154621,154624,154808,154811,154937,154940,154944,154948,155084,155088,155174,155178,155260,155264,155301,155305,155494,155498,155501,155731,155735,155738,155919,155922,155926,155929,155935,155938,155964,155968,155971,155985,155988,156013,156016,156030,156033,156050,156053,156070,156073,156090,156094,156120,156124,156147,156151,156154,156156,156162,156164,156185,156188,156194,156200,156204,156207,156283,156286,156290,156316],[10,153033,153029],{"id":153034},"_12-综合案例与复习路线",[1760,153036,153038],{"id":153037},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153040,153041],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153043,153044],{},"一个合格的入门综合项目最好覆盖：",[416,153046,153047,153050,153053,153056,153059,153062,153065,153068,153071],{},[419,153048,153049],{},"输入输出。",[419,153051,153052],{},"判断和循环。",[419,153054,153055],{},"函数拆分。",[419,153057,153058],{},"列表、字典等容器。",[419,153060,153061],{},"文件持久化。",[419,153063,153064],{},"异常处理。",[419,153066,153067],{},"模块拆分。",[419,153069,153070],{},"可选：面向对象。",[419,153072,153073],{},"可选：数据可视化。",[19,153075,153076],{},"本章整理两个方向：",[416,153078,153079,153082],{},[419,153080,153081],{},"学生管理系统。",[419,153083,153084],{},"销售数据统计和可视化。",[1760,153086,153088],{"id":153087},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[14,153090,153092],{"id":153091},"_1221-需求","12.2.1 需求",[19,153094,153095],{},"实现一个命令行学生管理系统：",[416,153097,153098,153101,153104,153107,153110,153113,153116],{},[419,153099,153100],{},"添加学生。",[419,153102,153103],{},"删除学生。",[419,153105,153106],{},"修改学生。",[419,153108,153109],{},"查询学生。",[419,153111,153112],{},"显示所有学生。",[419,153114,153115],{},"保存到 JSON 文件。",[419,153117,153118],{},"程序启动时自动读取 JSON 文件。",[19,153120,153121],{},"学生字段：",[270,153123,153126],{"className":153124,"code":153125,"language":6829,"meta":275},[6827],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[277,153127,153125],{"__ignoreMap":275},[1760,153129,153131],{"id":153130},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[270,153133,153135],{"className":31715,"code":153134,"language":31717,"meta":275,"style":275},"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",[277,153136,153137,153143,153153,153157,153171,153175,153179,153188,153200,153206,153210,153216,153247,153257,153264,153275,153281,153285,153289,153299,153330,153356,153360,153364,153373,153384,153395,153406,153417,153428,153439,153450,153454,153458,153468,153480,153496,153503,153510,153514,153518,153528,153536,153543,153556,153566,153577,153581,153585,153594,153602,153608,153620,153628,153639,153643,153647,153656,153672,153676,153683,153694,153699,153703,153719,153734,153749,153753,153758,153766,153774,153782,153790,153794,153799,153810,153814,153818,153827,153842,153852,153856,153868,153879,153883,153887,153892,153896,153907,153911,153915,153924,153939,153947,153951,153963,153973,153977,153981,153996,154009,154022,154026,154039,154051,154063,154067,154071,154082,154086,154090,154099,154114,154122,154126,154138,154148,154152,154156,154161,154165,154169,154179,154185,154207,154226,154245,154264,154269,154273,154277,154286,154294,154305,154309,154313,154339,154349,154354,154358,154362,154370,154380,154384,154392,154397,154413,154417,154431,154436,154450,154455,154468,154473,154486,154491,154504,154509,154522,154533,154537,154543,154554,154558,154562,154574],{"__ignoreMap":275},[152,153138,153139,153141],{"class":281,"line":282},[152,153140,31729],{"class":476},[152,153142,148428],{"class":483},[152,153144,153145,153147,153149,153151],{"class":281,"line":303},[152,153146,32074],{"class":476},[152,153148,109648],{"class":483},[152,153150,31729],{"class":476},[152,153152,109653],{"class":483},[152,153154,153155],{"class":281,"line":310},[152,153156,307],{"emptyLinePlaceholder":306},[152,153158,153159,153162,153164,153166,153169],{"class":281,"line":324},[152,153160,153161],{"class":293},"DATA_FILE",[152,153163,15180],{"class":476},[152,153165,109882],{"class":483},[152,153167,153168],{"class":289},"\"students.json\"",[152,153170,1825],{"class":483},[152,153172,153173],{"class":281,"line":329},[152,153174,307],{"emptyLinePlaceholder":306},[152,153176,153177],{"class":281,"line":343},[152,153178,307],{"emptyLinePlaceholder":306},[152,153180,153181,153183,153186],{"class":281,"line":348},[152,153182,33284],{"class":476},[152,153184,153185],{"class":285}," load_students",[152,153187,33290],{"class":483},[152,153189,153190,153192,153194,153197],{"class":281,"line":362},[152,153191,4744],{"class":476},[152,153193,40267],{"class":476},[152,153195,153196],{"class":293}," DATA_FILE",[152,153198,153199],{"class":483},".exists():\n",[152,153201,153202,153204],{"class":281,"line":367},[152,153203,16367],{"class":476},[152,153205,53175],{"class":483},[152,153207,153208],{"class":281,"line":381},[152,153209,307],{"emptyLinePlaceholder":306},[152,153211,153212,153214],{"class":281,"line":386},[152,153213,127121],{"class":476},[152,153215,5382],{"class":483},[152,153217,153218,153221,153223,153225,153227,153229,153231,153233,153235,153237,153239,153241,153243,153245],{"class":281,"line":932},[152,153219,153220],{"class":476},"        with",[152,153222,148128],{"class":293},[152,153224,1819],{"class":483},[152,153226,153161],{"class":293},[152,153228,14051],{"class":483},[152,153230,148138],{"class":289},[152,153232,14051],{"class":483},[152,153234,148143],{"class":6858},[152,153236,1864],{"class":476},[152,153238,148148],{"class":289},[152,153240,15330],{"class":483},[152,153242,32720],{"class":476},[152,153244,149490],{"class":6858},[152,153246,5382],{"class":483},[152,153248,153249,153251,153253,153255],{"class":281,"line":942},[152,153250,17347],{"class":476},[152,153252,149501],{"class":483},[152,153254,46691],{"class":6858},[152,153256,1825],{"class":483},[152,153258,153259,153261],{"class":281,"line":949},[152,153260,127149],{"class":476},[152,153262,153263],{"class":483}," json.JSONDecodeError:\n",[152,153265,153266,153268,153270,153273],{"class":281,"line":954},[152,153267,33788],{"class":293},[152,153269,1819],{"class":483},[152,153271,153272],{"class":289},"\"数据文件格式错误，已使用空数据启动\"",[152,153274,1825],{"class":483},[152,153276,153277,153279],{"class":281,"line":959},[152,153278,16367],{"class":476},[152,153280,53175],{"class":483},[152,153282,153283],{"class":281,"line":970},[152,153284,307],{"emptyLinePlaceholder":306},[152,153286,153287],{"class":281,"line":979},[152,153288,307],{"emptyLinePlaceholder":306},[152,153290,153291,153293,153296],{"class":281,"line":989},[152,153292,33284],{"class":476},[152,153294,153295],{"class":285}," save_students",[152,153297,153298],{"class":483},"(students):\n",[152,153300,153301,153303,153305,153307,153309,153311,153314,153316,153318,153320,153322,153324,153326,153328],{"class":281,"line":996},[152,153302,35515],{"class":476},[152,153304,148128],{"class":293},[152,153306,1819],{"class":483},[152,153308,153161],{"class":293},[152,153310,14051],{"class":483},[152,153312,153313],{"class":289},"\"w\"",[152,153315,14051],{"class":483},[152,153317,148143],{"class":6858},[152,153319,1864],{"class":476},[152,153321,148148],{"class":289},[152,153323,15330],{"class":483},[152,153325,32720],{"class":476},[152,153327,149490],{"class":6858},[152,153329,5382],{"class":483},[152,153331,153332,153335,153337,153339,153341,153343,153345,153347,153350,153352,153354],{"class":281,"line":1001},[152,153333,153334],{"class":483},"        json.dump(students, ",[152,153336,46691],{"class":6858},[152,153338,14051],{"class":483},[152,153340,148474],{"class":6858},[152,153342,1864],{"class":476},[152,153344,35324],{"class":293},[152,153346,14051],{"class":483},[152,153348,153349],{"class":6858},"indent",[152,153351,1864],{"class":476},[152,153353,1894],{"class":293},[152,153355,1825],{"class":483},[152,153357,153358],{"class":281,"line":1006},[152,153359,307],{"emptyLinePlaceholder":306},[152,153361,153362],{"class":281,"line":1018},[152,153363,307],{"emptyLinePlaceholder":306},[152,153365,153366,153368,153371],{"class":281,"line":1027},[152,153367,33284],{"class":476},[152,153369,153370],{"class":285}," show_menu",[152,153372,33290],{"class":483},[152,153374,153375,153377,153379,153382],{"class":281,"line":1037},[152,153376,32636],{"class":293},[152,153378,1819],{"class":483},[152,153380,153381],{"class":289},"\"====== 学生管理系统 ======\"",[152,153383,1825],{"class":483},[152,153385,153386,153388,153390,153393],{"class":281,"line":1044},[152,153387,32636],{"class":293},[152,153389,1819],{"class":483},[152,153391,153392],{"class":289},"\"1. 添加学生\"",[152,153394,1825],{"class":483},[152,153396,153397,153399,153401,153404],{"class":281,"line":1049},[152,153398,32636],{"class":293},[152,153400,1819],{"class":483},[152,153402,153403],{"class":289},"\"2. 删除学生\"",[152,153405,1825],{"class":483},[152,153407,153408,153410,153412,153415],{"class":281,"line":1054},[152,153409,32636],{"class":293},[152,153411,1819],{"class":483},[152,153413,153414],{"class":289},"\"3. 修改学生\"",[152,153416,1825],{"class":483},[152,153418,153419,153421,153423,153426],{"class":281,"line":1065},[152,153420,32636],{"class":293},[152,153422,1819],{"class":483},[152,153424,153425],{"class":289},"\"4. 查询学生\"",[152,153427,1825],{"class":483},[152,153429,153430,153432,153434,153437],{"class":281,"line":1074},[152,153431,32636],{"class":293},[152,153433,1819],{"class":483},[152,153435,153436],{"class":289},"\"5. 显示所有学生\"",[152,153438,1825],{"class":483},[152,153440,153441,153443,153445,153448],{"class":281,"line":1084},[152,153442,32636],{"class":293},[152,153444,1819],{"class":483},[152,153446,153447],{"class":289},"\"0. 退出系统\"",[152,153449,1825],{"class":483},[152,153451,153452],{"class":281,"line":1091},[152,153453,307],{"emptyLinePlaceholder":306},[152,153455,153456],{"class":281,"line":1096},[152,153457,307],{"emptyLinePlaceholder":306},[152,153459,153460,153462,153465],{"class":281,"line":1101},[152,153461,33284],{"class":476},[152,153463,153464],{"class":285}," find_student",[152,153466,153467],{"class":483},"(students, student_id):\n",[152,153469,153470,153472,153475,153477],{"class":281,"line":1112},[152,153471,4844],{"class":476},[152,153473,153474],{"class":483}," student ",[152,153476,27653],{"class":476},[152,153478,153479],{"class":483}," students:\n",[152,153481,153482,153484,153487,153489,153491,153493],{"class":281,"line":1121},[152,153483,4147],{"class":476},[152,153485,153486],{"class":483}," student[",[152,153488,152784],{"class":289},[152,153490,6085],{"class":483},[152,153492,4592],{"class":476},[152,153494,153495],{"class":483}," student_id:\n",[152,153497,153498,153500],{"class":281,"line":1131},[152,153499,17347],{"class":476},[152,153501,153502],{"class":483}," student\n",[152,153504,153505,153507],{"class":281,"line":1138},[152,153506,5732],{"class":476},[152,153508,153509],{"class":293}," None\n",[152,153511,153512],{"class":281,"line":1143},[152,153513,307],{"emptyLinePlaceholder":306},[152,153515,153516],{"class":281,"line":1148},[152,153517,307],{"emptyLinePlaceholder":306},[152,153519,153520,153522,153525],{"class":281,"line":1159},[152,153521,33284],{"class":476},[152,153523,153524],{"class":285}," input_int",[152,153526,153527],{"class":483},"(prompt):\n",[152,153529,153530,153532,153534],{"class":281,"line":1168},[152,153531,3902],{"class":476},[152,153533,96629],{"class":293},[152,153535,5382],{"class":483},[152,153537,153538,153541],{"class":281,"line":1178},[152,153539,153540],{"class":476},"        try",[152,153542,5382],{"class":483},[152,153544,153545,153547,153549,153551,153553],{"class":281,"line":1185},[152,153546,17347],{"class":476},[152,153548,4033],{"class":293},[152,153550,1819],{"class":483},[152,153552,55158],{"class":293},[152,153554,153555],{"class":483},"(prompt))\n",[152,153557,153558,153561,153564],{"class":281,"line":1190},[152,153559,153560],{"class":476},"        except",[152,153562,153563],{"class":293}," ValueError",[152,153565,5382],{"class":483},[152,153567,153568,153570,153572,153575],{"class":281,"line":1195},[152,153569,35987],{"class":293},[152,153571,1819],{"class":483},[152,153573,153574],{"class":289},"\"请输入整数\"",[152,153576,1825],{"class":483},[152,153578,153579],{"class":281,"line":1206},[152,153580,307],{"emptyLinePlaceholder":306},[152,153582,153583],{"class":281,"line":1215},[152,153584,307],{"emptyLinePlaceholder":306},[152,153586,153587,153589,153592],{"class":281,"line":1225},[152,153588,33284],{"class":476},[152,153590,153591],{"class":285}," input_float",[152,153593,153527],{"class":483},[152,153595,153596,153598,153600],{"class":281,"line":1232},[152,153597,3902],{"class":476},[152,153599,96629],{"class":293},[152,153601,5382],{"class":483},[152,153603,153604,153606],{"class":281,"line":1237},[152,153605,153540],{"class":476},[152,153607,5382],{"class":483},[152,153609,153610,153612,153614,153616,153618],{"class":281,"line":1242},[152,153611,17347],{"class":476},[152,153613,111134],{"class":293},[152,153615,1819],{"class":483},[152,153617,55158],{"class":293},[152,153619,153555],{"class":483},[152,153621,153622,153624,153626],{"class":281,"line":1253},[152,153623,153560],{"class":476},[152,153625,153563],{"class":293},[152,153627,5382],{"class":483},[152,153629,153630,153632,153634,153637],{"class":281,"line":1262},[152,153631,35987],{"class":293},[152,153633,1819],{"class":483},[152,153635,153636],{"class":289},"\"请输入数字\"",[152,153638,1825],{"class":483},[152,153640,153641],{"class":281,"line":1272},[152,153642,307],{"emptyLinePlaceholder":306},[152,153644,153645],{"class":281,"line":1279},[152,153646,307],{"emptyLinePlaceholder":306},[152,153648,153649,153651,153654],{"class":281,"line":1284},[152,153650,33284],{"class":476},[152,153652,153653],{"class":285}," add_student",[152,153655,153298],{"class":483},[152,153657,153658,153661,153663,153665,153667,153670],{"class":281,"line":1289},[152,153659,153660],{"class":483},"    student_id ",[152,153662,1864],{"class":476},[152,153664,61942],{"class":293},[152,153666,1819],{"class":483},[152,153668,153669],{"class":289},"\"请输入学号:\"",[152,153671,1825],{"class":483},[152,153673,153674],{"class":281,"line":1301},[152,153675,307],{"emptyLinePlaceholder":306},[152,153677,153678,153680],{"class":281,"line":1310},[152,153679,4744],{"class":476},[152,153681,153682],{"class":483}," find_student(students, student_id):\n",[152,153684,153685,153687,153689,153692],{"class":281,"line":1320},[152,153686,33788],{"class":293},[152,153688,1819],{"class":483},[152,153690,153691],{"class":289},"\"学号已存在\"",[152,153693,1825],{"class":483},[152,153695,153696],{"class":281,"line":1327},[152,153697,153698],{"class":476},"        return\n",[152,153700,153701],{"class":281,"line":11528},[152,153702,307],{"emptyLinePlaceholder":306},[152,153704,153705,153708,153710,153712,153714,153717],{"class":281,"line":11536},[152,153706,153707],{"class":483},"    name ",[152,153709,1864],{"class":476},[152,153711,61942],{"class":293},[152,153713,1819],{"class":483},[152,153715,153716],{"class":289},"\"请输入姓名:\"",[152,153718,1825],{"class":483},[152,153720,153721,153724,153726,153729,153732],{"class":281,"line":11541},[152,153722,153723],{"class":483},"    age ",[152,153725,1864],{"class":476},[152,153727,153728],{"class":483}," input_int(",[152,153730,153731],{"class":289},"\"请输入年龄:\"",[152,153733,1825],{"class":483},[152,153735,153736,153739,153741,153744,153747],{"class":281,"line":18219},[152,153737,153738],{"class":483},"    score ",[152,153740,1864],{"class":476},[152,153742,153743],{"class":483}," input_float(",[152,153745,153746],{"class":289},"\"请输入成绩:\"",[152,153748,1825],{"class":483},[152,153750,153751],{"class":281,"line":18225},[152,153752,307],{"emptyLinePlaceholder":306},[152,153754,153755],{"class":281,"line":18248},[152,153756,153757],{"class":483},"    students.append({\n",[152,153759,153760,153763],{"class":281,"line":18254},[152,153761,153762],{"class":289},"        \"student_id\"",[152,153764,153765],{"class":483},": student_id,\n",[152,153767,153768,153771],{"class":281,"line":18277},[152,153769,153770],{"class":289},"        \"name\"",[152,153772,153773],{"class":483},": name,\n",[152,153775,153776,153779],{"class":281,"line":18291},[152,153777,153778],{"class":289},"        \"age\"",[152,153780,153781],{"class":483},": age,\n",[152,153783,153784,153787],{"class":281,"line":18311},[152,153785,153786],{"class":289},"        \"score\"",[152,153788,153789],{"class":483},": score,\n",[152,153791,153792],{"class":281,"line":18317},[152,153793,34798],{"class":483},[152,153795,153796],{"class":281,"line":18328},[152,153797,153798],{"class":483},"    save_students(students)\n",[152,153800,153801,153803,153805,153808],{"class":281,"line":18351},[152,153802,32636],{"class":293},[152,153804,1819],{"class":483},[152,153806,153807],{"class":289},"\"添加成功\"",[152,153809,1825],{"class":483},[152,153811,153812],{"class":281,"line":18373},[152,153813,307],{"emptyLinePlaceholder":306},[152,153815,153816],{"class":281,"line":18378},[152,153817,307],{"emptyLinePlaceholder":306},[152,153819,153820,153822,153825],{"class":281,"line":18384},[152,153821,33284],{"class":476},[152,153823,153824],{"class":285}," delete_student",[152,153826,153298],{"class":483},[152,153828,153829,153831,153833,153835,153837,153840],{"class":281,"line":18398},[152,153830,153660],{"class":483},[152,153832,1864],{"class":476},[152,153834,61942],{"class":293},[152,153836,1819],{"class":483},[152,153838,153839],{"class":289},"\"请输入要删除的学号:\"",[152,153841,1825],{"class":483},[152,153843,153844,153847,153849],{"class":281,"line":18411},[152,153845,153846],{"class":483},"    student ",[152,153848,1864],{"class":476},[152,153850,153851],{"class":483}," find_student(students, student_id)\n",[152,153853,153854],{"class":281,"line":18416},[152,153855,307],{"emptyLinePlaceholder":306},[152,153857,153858,153860,153862,153864,153866],{"class":281,"line":18430},[152,153859,4744],{"class":476},[152,153861,153474],{"class":483},[152,153863,40264],{"class":476},[152,153865,40270],{"class":293},[152,153867,5382],{"class":483},[152,153869,153870,153872,153874,153877],{"class":281,"line":18435},[152,153871,33788],{"class":293},[152,153873,1819],{"class":483},[152,153875,153876],{"class":289},"\"学生不存在\"",[152,153878,1825],{"class":483},[152,153880,153881],{"class":281,"line":18441},[152,153882,153698],{"class":476},[152,153884,153885],{"class":281,"line":18446},[152,153886,307],{"emptyLinePlaceholder":306},[152,153888,153889],{"class":281,"line":18460},[152,153890,153891],{"class":483},"    students.remove(student)\n",[152,153893,153894],{"class":281,"line":18465},[152,153895,153798],{"class":483},[152,153897,153898,153900,153902,153905],{"class":281,"line":18470},[152,153899,32636],{"class":293},[152,153901,1819],{"class":483},[152,153903,153904],{"class":289},"\"删除成功\"",[152,153906,1825],{"class":483},[152,153908,153909],{"class":281,"line":18484},[152,153910,307],{"emptyLinePlaceholder":306},[152,153912,153913],{"class":281,"line":18496},[152,153914,307],{"emptyLinePlaceholder":306},[152,153916,153917,153919,153922],{"class":281,"line":18501},[152,153918,33284],{"class":476},[152,153920,153921],{"class":285}," update_student",[152,153923,153298],{"class":483},[152,153925,153926,153928,153930,153932,153934,153937],{"class":281,"line":18514},[152,153927,153660],{"class":483},[152,153929,1864],{"class":476},[152,153931,61942],{"class":293},[152,153933,1819],{"class":483},[152,153935,153936],{"class":289},"\"请输入要修改的学号:\"",[152,153938,1825],{"class":483},[152,153940,153941,153943,153945],{"class":281,"line":18519},[152,153942,153846],{"class":483},[152,153944,1864],{"class":476},[152,153946,153851],{"class":483},[152,153948,153949],{"class":281,"line":18524},[152,153950,307],{"emptyLinePlaceholder":306},[152,153952,153953,153955,153957,153959,153961],{"class":281,"line":18529},[152,153954,4744],{"class":476},[152,153956,153474],{"class":483},[152,153958,40264],{"class":476},[152,153960,40270],{"class":293},[152,153962,5382],{"class":483},[152,153964,153965,153967,153969,153971],{"class":281,"line":18542},[152,153966,33788],{"class":293},[152,153968,1819],{"class":483},[152,153970,153876],{"class":289},[152,153972,1825],{"class":483},[152,153974,153975],{"class":281,"line":18547},[152,153976,153698],{"class":476},[152,153978,153979],{"class":281,"line":33970},[152,153980,307],{"emptyLinePlaceholder":306},[152,153982,153983,153985,153987,153989,153991,153994],{"class":281,"line":33976},[152,153984,153707],{"class":483},[152,153986,1864],{"class":476},[152,153988,61942],{"class":293},[152,153990,1819],{"class":483},[152,153992,153993],{"class":289},"\"请输入新姓名:\"",[152,153995,1825],{"class":483},[152,153997,153998,154000,154002,154004,154007],{"class":281,"line":33982},[152,153999,153723],{"class":483},[152,154001,1864],{"class":476},[152,154003,153728],{"class":483},[152,154005,154006],{"class":289},"\"请输入新年龄:\"",[152,154008,1825],{"class":483},[152,154010,154011,154013,154015,154017,154020],{"class":281,"line":33988},[152,154012,153738],{"class":483},[152,154014,1864],{"class":476},[152,154016,153743],{"class":483},[152,154018,154019],{"class":289},"\"请输入新成绩:\"",[152,154021,1825],{"class":483},[152,154023,154024],{"class":281,"line":33994},[152,154025,307],{"emptyLinePlaceholder":306},[152,154027,154028,154031,154033,154035,154037],{"class":281,"line":34005},[152,154029,154030],{"class":483},"    student[",[152,154032,64016],{"class":289},[152,154034,6085],{"class":483},[152,154036,1864],{"class":476},[152,154038,151132],{"class":483},[152,154040,154041,154043,154045,154047,154049],{"class":281,"line":34011},[152,154042,154030],{"class":483},[152,154044,70461],{"class":289},[152,154046,6085],{"class":483},[152,154048,1864],{"class":476},[152,154050,151144],{"class":483},[152,154052,154053,154055,154057,154059,154061],{"class":281,"line":34031},[152,154054,154030],{"class":483},[152,154056,152809],{"class":289},[152,154058,6085],{"class":483},[152,154060,1864],{"class":476},[152,154062,3250],{"class":483},[152,154064,154065],{"class":281,"line":34037},[152,154066,307],{"emptyLinePlaceholder":306},[152,154068,154069],{"class":281,"line":34048},[152,154070,153798],{"class":483},[152,154072,154073,154075,154077,154080],{"class":281,"line":34054},[152,154074,32636],{"class":293},[152,154076,1819],{"class":483},[152,154078,154079],{"class":289},"\"修改成功\"",[152,154081,1825],{"class":483},[152,154083,154084],{"class":281,"line":34060},[152,154085,307],{"emptyLinePlaceholder":306},[152,154087,154088],{"class":281,"line":34066},[152,154089,307],{"emptyLinePlaceholder":306},[152,154091,154092,154094,154097],{"class":281,"line":34072},[152,154093,33284],{"class":476},[152,154095,154096],{"class":285}," query_student",[152,154098,153298],{"class":483},[152,154100,154101,154103,154105,154107,154109,154112],{"class":281,"line":34078},[152,154102,153660],{"class":483},[152,154104,1864],{"class":476},[152,154106,61942],{"class":293},[152,154108,1819],{"class":483},[152,154110,154111],{"class":289},"\"请输入要查询的学号:\"",[152,154113,1825],{"class":483},[152,154115,154116,154118,154120],{"class":281,"line":34084},[152,154117,153846],{"class":483},[152,154119,1864],{"class":476},[152,154121,153851],{"class":483},[152,154123,154124],{"class":281,"line":34090},[152,154125,307],{"emptyLinePlaceholder":306},[152,154127,154128,154130,154132,154134,154136],{"class":281,"line":34110},[152,154129,4744],{"class":476},[152,154131,153474],{"class":483},[152,154133,40264],{"class":476},[152,154135,40270],{"class":293},[152,154137,5382],{"class":483},[152,154139,154140,154142,154144,154146],{"class":281,"line":34116},[152,154141,33788],{"class":293},[152,154143,1819],{"class":483},[152,154145,153876],{"class":289},[152,154147,1825],{"class":483},[152,154149,154150],{"class":281,"line":34132},[152,154151,153698],{"class":476},[152,154153,154154],{"class":281,"line":34138},[152,154155,307],{"emptyLinePlaceholder":306},[152,154157,154158],{"class":281,"line":34152},[152,154159,154160],{"class":483},"    print_student(student)\n",[152,154162,154163],{"class":281,"line":34158},[152,154164,307],{"emptyLinePlaceholder":306},[152,154166,154167],{"class":281,"line":34173},[152,154168,307],{"emptyLinePlaceholder":306},[152,154170,154171,154173,154176],{"class":281,"line":34179},[152,154172,33284],{"class":476},[152,154174,154175],{"class":285}," print_student",[152,154177,154178],{"class":483},"(student):\n",[152,154180,154181,154183],{"class":281,"line":34188},[152,154182,32636],{"class":293},[152,154184,152776],{"class":483},[152,154186,154187,154190,154192,154194,154197,154200,154202,154205],{"class":281,"line":34194},[152,154188,154189],{"class":476},"        f",[152,154191,2059],{"class":289},[152,154193,2703],{"class":293},[152,154195,154196],{"class":483},"student[",[152,154198,154199],{"class":289},"'student_id'",[152,154201,2746],{"class":483},[152,154203,154204],{"class":293},"}\\t",[152,154206,26744],{"class":289},[152,154208,154209,154211,154213,154215,154217,154220,154222,154224],{"class":281,"line":34203},[152,154210,154189],{"class":476},[152,154212,2059],{"class":289},[152,154214,2703],{"class":293},[152,154216,154196],{"class":483},[152,154218,154219],{"class":289},"'name'",[152,154221,2746],{"class":483},[152,154223,154204],{"class":293},[152,154225,26744],{"class":289},[152,154227,154228,154230,154232,154234,154236,154239,154241,154243],{"class":281,"line":34209},[152,154229,154189],{"class":476},[152,154231,2059],{"class":289},[152,154233,2703],{"class":293},[152,154235,154196],{"class":483},[152,154237,154238],{"class":289},"'age'",[152,154240,2746],{"class":483},[152,154242,154204],{"class":293},[152,154244,26744],{"class":289},[152,154246,154247,154249,154251,154253,154255,154258,154260,154262],{"class":281,"line":34215},[152,154248,154189],{"class":476},[152,154250,2059],{"class":289},[152,154252,2703],{"class":293},[152,154254,154196],{"class":483},[152,154256,154257],{"class":289},"'score'",[152,154259,2746],{"class":483},[152,154261,2752],{"class":293},[152,154263,26744],{"class":289},[152,154265,154266],{"class":281,"line":34224},[152,154267,154268],{"class":483},"    )\n",[152,154270,154271],{"class":281,"line":34230},[152,154272,307],{"emptyLinePlaceholder":306},[152,154274,154275],{"class":281,"line":34241},[152,154276,307],{"emptyLinePlaceholder":306},[152,154278,154279,154281,154284],{"class":281,"line":34247},[152,154280,33284],{"class":476},[152,154282,154283],{"class":285}," show_all_students",[152,154285,153298],{"class":483},[152,154287,154288,154290,154292],{"class":281,"line":34266},[152,154289,4744],{"class":476},[152,154291,40267],{"class":476},[152,154293,153479],{"class":483},[152,154295,154296,154298,154300,154303],{"class":281,"line":34272},[152,154297,33788],{"class":293},[152,154299,1819],{"class":483},[152,154301,154302],{"class":289},"\"暂无学生\"",[152,154304,1825],{"class":483},[152,154306,154307],{"class":281,"line":34283},[152,154308,153698],{"class":476},[152,154310,154311],{"class":281,"line":34289},[152,154312,307],{"emptyLinePlaceholder":306},[152,154314,154315,154317,154319,154322,154324,154327,154329,154332,154334,154337],{"class":281,"line":34309},[152,154316,32636],{"class":293},[152,154318,1819],{"class":483},[152,154320,154321],{"class":289},"\"学号",[152,154323,2905],{"class":293},[152,154325,154326],{"class":289},"姓名",[152,154328,2905],{"class":293},[152,154330,154331],{"class":289},"年龄",[152,154333,2905],{"class":293},[152,154335,154336],{"class":289},"成绩\"",[152,154338,1825],{"class":483},[152,154340,154341,154343,154345,154347],{"class":281,"line":34325},[152,154342,4844],{"class":476},[152,154344,153474],{"class":483},[152,154346,27653],{"class":476},[152,154348,153479],{"class":483},[152,154350,154351],{"class":281,"line":34331},[152,154352,154353],{"class":483},"        print_student(student)\n",[152,154355,154356],{"class":281,"line":34345},[152,154357,307],{"emptyLinePlaceholder":306},[152,154359,154360],{"class":281,"line":34351},[152,154361,307],{"emptyLinePlaceholder":306},[152,154363,154364,154366,154368],{"class":281,"line":34357},[152,154365,33284],{"class":476},[152,154367,3624],{"class":285},[152,154369,33290],{"class":483},[152,154371,154372,154375,154377],{"class":281,"line":34368},[152,154373,154374],{"class":483},"    students ",[152,154376,1864],{"class":476},[152,154378,154379],{"class":483}," load_students()\n",[152,154381,154382],{"class":281,"line":34374},[152,154383,307],{"emptyLinePlaceholder":306},[152,154385,154386,154388,154390],{"class":281,"line":34380},[152,154387,3902],{"class":476},[152,154389,96629],{"class":293},[152,154391,5382],{"class":483},[152,154393,154394],{"class":281,"line":34390},[152,154395,154396],{"class":483},"        show_menu()\n",[152,154398,154399,154402,154404,154406,154408,154411],{"class":281,"line":34396},[152,154400,154401],{"class":483},"        choice ",[152,154403,1864],{"class":476},[152,154405,61942],{"class":293},[152,154407,1819],{"class":483},[152,154409,154410],{"class":289},"\"请输入操作:\"",[152,154412,1825],{"class":483},[152,154414,154415],{"class":281,"line":34407},[152,154416,307],{"emptyLinePlaceholder":306},[152,154418,154419,154421,154424,154426,154429],{"class":281,"line":34413},[152,154420,4147],{"class":476},[152,154422,154423],{"class":483}," choice ",[152,154425,4592],{"class":476},[152,154427,154428],{"class":289}," \"1\"",[152,154430,5382],{"class":483},[152,154432,154433],{"class":281,"line":34423},[152,154434,154435],{"class":483},"            add_student(students)\n",[152,154437,154438,154441,154443,154445,154448],{"class":281,"line":34428},[152,154439,154440],{"class":476},"        elif",[152,154442,154423],{"class":483},[152,154444,4592],{"class":476},[152,154446,154447],{"class":289}," \"2\"",[152,154449,5382],{"class":483},[152,154451,154452],{"class":281,"line":34434},[152,154453,154454],{"class":483},"            delete_student(students)\n",[152,154456,154457,154459,154461,154463,154466],{"class":281,"line":34483},[152,154458,154440],{"class":476},[152,154460,154423],{"class":483},[152,154462,4592],{"class":476},[152,154464,154465],{"class":289}," \"3\"",[152,154467,5382],{"class":483},[152,154469,154470],{"class":281,"line":34530},[152,154471,154472],{"class":483},"            update_student(students)\n",[152,154474,154475,154477,154479,154481,154484],{"class":281,"line":34535},[152,154476,154440],{"class":476},[152,154478,154423],{"class":483},[152,154480,4592],{"class":476},[152,154482,154483],{"class":289}," \"4\"",[152,154485,5382],{"class":483},[152,154487,154488],{"class":281,"line":34541},[152,154489,154490],{"class":483},"            query_student(students)\n",[152,154492,154493,154495,154497,154499,154502],{"class":281,"line":34560},[152,154494,154440],{"class":476},[152,154496,154423],{"class":483},[152,154498,4592],{"class":476},[152,154500,154501],{"class":289}," \"5\"",[152,154503,5382],{"class":483},[152,154505,154506],{"class":281,"line":34566},[152,154507,154508],{"class":483},"            show_all_students(students)\n",[152,154510,154511,154513,154515,154517,154520],{"class":281,"line":34586},[152,154512,154440],{"class":476},[152,154514,154423],{"class":483},[152,154516,4592],{"class":476},[152,154518,154519],{"class":289}," \"0\"",[152,154521,5382],{"class":483},[152,154523,154524,154526,154528,154531],{"class":281,"line":34592},[152,154525,35987],{"class":293},[152,154527,1819],{"class":483},[152,154529,154530],{"class":289},"\"退出系统\"",[152,154532,1825],{"class":483},[152,154534,154535],{"class":281,"line":34598},[152,154536,116435],{"class":476},[152,154538,154539,154541],{"class":281,"line":34608},[152,154540,4184],{"class":476},[152,154542,5382],{"class":483},[152,154544,154545,154547,154549,154552],{"class":281,"line":34613},[152,154546,35987],{"class":293},[152,154548,1819],{"class":483},[152,154550,154551],{"class":289},"\"输入错误\"",[152,154553,1825],{"class":483},[152,154555,154556],{"class":281,"line":34619},[152,154557,307],{"emptyLinePlaceholder":306},[152,154559,154560],{"class":281,"line":34635},[152,154561,307],{"emptyLinePlaceholder":306},[152,154563,154564,154566,154568,154570,154572],{"class":281,"line":34680},[152,154565,3202],{"class":476},[152,154567,32557],{"class":293},[152,154569,102896],{"class":476},[152,154571,102899],{"class":289},[152,154573,5382],{"class":483},[152,154575,154576],{"class":281,"line":34686},[152,154577,102906],{"class":483},[19,154579,154580],{},"这个项目串联了：",[416,154582,154583,154586,154589,154592,154595,154597],{},[419,154584,154585],{},"菜单循环。",[419,154587,154588],{},"函数封装。",[419,154590,154591],{},"列表字典。",[419,154593,154594],{},"JSON 读写。",[419,154596,153064],{},[419,154598,154599,29984],{},[277,154600,154601],{},"if __name__ == \"__main__\"",[1760,154603,154605],{"id":154604},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154607,154608],{},"可以进一步拆成两个类：",[416,154610,154611,154616],{},[419,154612,154613,154615],{},[277,154614,150905],{},"：表示单个学生。",[419,154617,154618,154620],{},[277,154619,152931],{},"：负责学生增删改查和文件保存。",[19,154622,154623],{},"示意代码：",[270,154625,154627],{"className":31715,"code":154626,"language":31717,"meta":275,"style":275},"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",[277,154628,154629,154639,154643,154647,154651,154659,154666,154672,154678,154684,154688,154696,154702,154712,154722,154732,154742,154746,154750,154756,154764,154772,154780,154788,154796,154804],{"__ignoreMap":275},[152,154630,154631,154633,154635,154637],{"class":281,"line":282},[152,154632,32074],{"class":476},[152,154634,152489],{"class":483},[152,154636,31729],{"class":476},[152,154638,152494],{"class":483},[152,154640,154641],{"class":281,"line":303},[152,154642,307],{"emptyLinePlaceholder":306},[152,154644,154645],{"class":281,"line":310},[152,154646,307],{"emptyLinePlaceholder":306},[152,154648,154649],{"class":281,"line":324},[152,154650,152507],{"class":285},[152,154652,154653,154655,154657],{"class":281,"line":329},[152,154654,16309],{"class":476},[152,154656,9540],{"class":285},[152,154658,5382],{"class":483},[152,154660,154661,154664],{"class":281,"line":343},[152,154662,154663],{"class":483},"    student_id: ",[152,154665,152523],{"class":293},[152,154667,154668,154670],{"class":281,"line":348},[152,154669,152520],{"class":483},[152,154671,152523],{"class":293},[152,154673,154674,154676],{"class":281,"line":362},[152,154675,152528],{"class":483},[152,154677,152531],{"class":293},[152,154679,154680,154682],{"class":281,"line":367},[152,154681,152536],{"class":483},[152,154683,152539],{"class":293},[152,154685,154686],{"class":281,"line":381},[152,154687,307],{"emptyLinePlaceholder":306},[152,154689,154690,154692,154694],{"class":281,"line":386},[152,154691,32138],{"class":476},[152,154693,152687],{"class":285},[152,154695,32144],{"class":483},[152,154697,154698,154700],{"class":281,"line":932},[152,154699,16367],{"class":476},[152,154701,17187],{"class":483},[152,154703,154704,154706,154708,154710],{"class":281,"line":942},[152,154705,152700],{"class":289},[152,154707,52774],{"class":483},[152,154709,32160],{"class":293},[152,154711,152707],{"class":483},[152,154713,154714,154716,154718,154720],{"class":281,"line":949},[152,154715,152712],{"class":289},[152,154717,52774],{"class":483},[152,154719,32160],{"class":293},[152,154721,152719],{"class":483},[152,154723,154724,154726,154728,154730],{"class":281,"line":954},[152,154725,152724],{"class":289},[152,154727,52774],{"class":483},[152,154729,32160],{"class":293},[152,154731,152731],{"class":483},[152,154733,154734,154736,154738,154740],{"class":281,"line":959},[152,154735,152736],{"class":289},[152,154737,52774],{"class":483},[152,154739,32160],{"class":293},[152,154741,152743],{"class":483},[152,154743,154744],{"class":281,"line":970},[152,154745,4179],{"class":483},[152,154747,154748],{"class":281,"line":979},[152,154749,307],{"emptyLinePlaceholder":306},[152,154751,154752,154754],{"class":281,"line":989},[152,154753,152351],{"class":285},[152,154755,152354],{"class":293},[152,154757,154758,154760,154762],{"class":281,"line":996},[152,154759,32138],{"class":476},[152,154761,152764],{"class":285},[152,154763,152767],{"class":483},[152,154765,154766,154768,154770],{"class":281,"line":1001},[152,154767,16367],{"class":476},[152,154769,152371],{"class":293},[152,154771,152776],{"class":483},[152,154773,154774,154776,154778],{"class":281,"line":1006},[152,154775,152781],{"class":483},[152,154777,152784],{"class":289},[152,154779,89173],{"class":483},[152,154781,154782,154784,154786],{"class":281,"line":1018},[152,154783,152781],{"class":483},[152,154785,64016],{"class":289},[152,154787,89173],{"class":483},[152,154789,154790,154792,154794],{"class":281,"line":1027},[152,154791,152781],{"class":483},[152,154793,70461],{"class":289},[152,154795,89173],{"class":483},[152,154797,154798,154800,154802],{"class":281,"line":1037},[152,154799,152781],{"class":483},[152,154801,152809],{"class":289},[152,154803,89173],{"class":483},[152,154805,154806],{"class":281,"line":1044},[152,154807,39463],{"class":483},[19,154809,154810],{},"管理器示意：",[270,154812,154814],{"className":31715,"code":154813,"language":31717,"meta":275,"style":275},"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",[277,154815,154816,154825,154833,154844,154848,154858,154871,154882,154889,154895,154899,154908,154917,154923,154930],{"__ignoreMap":275},[152,154817,154818,154820,154823],{"class":281,"line":282},[152,154819,16309],{"class":476},[152,154821,154822],{"class":285}," StudentManager",[152,154824,5382],{"class":483},[152,154826,154827,154829,154831],{"class":281,"line":303},[152,154828,32138],{"class":476},[152,154830,32141],{"class":293},[152,154832,32144],{"class":483},[152,154834,154835,154837,154840,154842],{"class":281,"line":310},[152,154836,32182],{"class":293},[152,154838,154839],{"class":483},".students ",[152,154841,1864],{"class":476},[152,154843,53175],{"class":483},[152,154845,154846],{"class":281,"line":324},[152,154847,307],{"emptyLinePlaceholder":306},[152,154849,154850,154852,154855],{"class":281,"line":329},[152,154851,32138],{"class":476},[152,154853,154854],{"class":285}," find_by_id",[152,154856,154857],{"class":483},"(self, student_id):\n",[152,154859,154860,154862,154864,154866,154868],{"class":281,"line":343},[152,154861,5046],{"class":476},[152,154863,153474],{"class":483},[152,154865,27653],{"class":476},[152,154867,40210],{"class":293},[152,154869,154870],{"class":483},".students:\n",[152,154872,154873,154875,154878,154880],{"class":281,"line":348},[152,154874,6284],{"class":476},[152,154876,154877],{"class":483}," student.student_id ",[152,154879,4592],{"class":476},[152,154881,153495],{"class":483},[152,154883,154884,154887],{"class":281,"line":362},[152,154885,154886],{"class":476},"                return",[152,154888,153502],{"class":483},[152,154890,154891,154893],{"class":281,"line":367},[152,154892,16367],{"class":476},[152,154894,153509],{"class":293},[152,154896,154897],{"class":281,"line":381},[152,154898,307],{"emptyLinePlaceholder":306},[152,154900,154901,154903,154905],{"class":281,"line":386},[152,154902,32138],{"class":476},[152,154904,6851],{"class":285},[152,154906,154907],{"class":483},"(self, student):\n",[152,154909,154910,154912,154914],{"class":281,"line":932},[152,154911,4147],{"class":476},[152,154913,40210],{"class":293},[152,154915,154916],{"class":483},".find_by_id(student.student_id):\n",[152,154918,154919,154921],{"class":281,"line":942},[152,154920,17347],{"class":476},[152,154922,127144],{"class":293},[152,154924,154925,154927],{"class":281,"line":949},[152,154926,32182],{"class":293},[152,154928,154929],{"class":483},".students.append(student)\n",[152,154931,154932,154934],{"class":281,"line":954},[152,154933,16367],{"class":476},[152,154935,154936],{"class":293}," True\n",[19,154938,154939],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[1760,154941,154943],{"id":154942},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[14,154945,154947],{"id":154946},"_1251-数据结构","12.5.1 数据结构",[270,154949,154951],{"className":31715,"code":154950,"language":31717,"meta":275,"style":275},"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",[277,154952,154953,154961,154992,155022,155051,155080],{"__ignoreMap":275},[152,154954,154955,154957,154959],{"class":281,"line":282},[152,154956,149802],{"class":483},[152,154958,1864],{"class":476},[152,154960,56784],{"class":483},[152,154962,154963,154965,154967,154969,154971,154973,154976,154978,154981,154983,154985,154987,154990],{"class":281,"line":303},[152,154964,149722],{"class":483},[152,154966,149334],{"class":289},[152,154968,52774],{"class":483},[152,154970,149945],{"class":289},[152,154972,14051],{"class":483},[152,154974,154975],{"class":289},"\"category\"",[152,154977,52774],{"class":483},[152,154979,154980],{"class":289},"\"手机\"",[152,154982,14051],{"class":483},[152,154984,85421],{"class":289},[152,154986,52774],{"class":483},[152,154988,154989],{"class":293},"12000",[152,154991,6572],{"class":483},[152,154993,154994,154996,154998,155000,155002,155004,155006,155008,155011,155013,155015,155017,155020],{"class":281,"line":310},[152,154995,149722],{"class":483},[152,154997,149334],{"class":289},[152,154999,52774],{"class":483},[152,155001,149945],{"class":289},[152,155003,14051],{"class":483},[152,155005,154975],{"class":289},[152,155007,52774],{"class":483},[152,155009,155010],{"class":289},"\"电脑\"",[152,155012,14051],{"class":483},[152,155014,85421],{"class":289},[152,155016,52774],{"class":483},[152,155018,155019],{"class":293},"18000",[152,155021,6572],{"class":483},[152,155023,155024,155026,155028,155030,155032,155034,155036,155038,155040,155042,155044,155046,155049],{"class":281,"line":324},[152,155025,149722],{"class":483},[152,155027,149334],{"class":289},[152,155029,52774],{"class":483},[152,155031,149966],{"class":289},[152,155033,14051],{"class":483},[152,155035,154975],{"class":289},[152,155037,52774],{"class":483},[152,155039,154980],{"class":289},[152,155041,14051],{"class":483},[152,155043,85421],{"class":289},[152,155045,52774],{"class":483},[152,155047,155048],{"class":293},"15000",[152,155050,6572],{"class":483},[152,155052,155053,155055,155057,155059,155061,155063,155065,155067,155069,155071,155073,155075,155078],{"class":281,"line":329},[152,155054,149722],{"class":483},[152,155056,149334],{"class":289},[152,155058,52774],{"class":483},[152,155060,149966],{"class":289},[152,155062,14051],{"class":483},[152,155064,154975],{"class":289},[152,155066,52774],{"class":483},[152,155068,155010],{"class":289},[152,155070,14051],{"class":483},[152,155072,85421],{"class":289},[152,155074,52774],{"class":483},[152,155076,155077],{"class":293},"16000",[152,155079,6572],{"class":483},[152,155081,155082],{"class":281,"line":343},[152,155083,34583],{"class":483},[14,155085,155087],{"id":155086},"_1252-按日期统计","12.5.2 按日期统计",[270,155089,155091],{"className":31715,"code":155090,"language":31717,"meta":275,"style":275},"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",[277,155092,155093,155102,155106,155117,155131,155144,155163,155167],{"__ignoreMap":275},[152,155094,155095,155098,155100],{"class":281,"line":282},[152,155096,155097],{"class":483},"daily_total ",[152,155099,1864],{"class":476},[152,155101,89205],{"class":483},[152,155103,155104],{"class":281,"line":303},[152,155105,307],{"emptyLinePlaceholder":306},[152,155107,155108,155110,155112,155114],{"class":281,"line":310},[152,155109,4668],{"class":476},[152,155111,149546],{"class":483},[152,155113,27653],{"class":476},[152,155115,155116],{"class":483}," sales:\n",[152,155118,155119,155122,155124,155127,155129],{"class":281,"line":324},[152,155120,155121],{"class":483},"    date ",[152,155123,1864],{"class":476},[152,155125,155126],{"class":483}," item[",[152,155128,149334],{"class":289},[152,155130,34583],{"class":483},[152,155132,155133,155136,155138,155140,155142],{"class":281,"line":329},[152,155134,155135],{"class":483},"    amount ",[152,155137,1864],{"class":476},[152,155139,155126],{"class":483},[152,155141,85421],{"class":289},[152,155143,34583],{"class":483},[152,155145,155146,155149,155151,155154,155156,155158,155160],{"class":281,"line":343},[152,155147,155148],{"class":483},"    daily_total[date] ",[152,155150,1864],{"class":476},[152,155152,155153],{"class":483}," daily_total.get(date, ",[152,155155,2000],{"class":293},[152,155157,15330],{"class":483},[152,155159,2289],{"class":476},[152,155161,155162],{"class":483}," amount\n",[152,155164,155165],{"class":281,"line":348},[152,155166,307],{"emptyLinePlaceholder":306},[152,155168,155169,155171],{"class":281,"line":362},[152,155170,31752],{"class":293},[152,155172,155173],{"class":483},"(daily_total)\n",[14,155175,155177],{"id":155176},"_1253-按类别统计","12.5.3 按类别统计",[270,155179,155181],{"className":31715,"code":155180,"language":31717,"meta":275,"style":275},"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",[277,155182,155183,155192,155196,155206,155219,155231,155249,155253],{"__ignoreMap":275},[152,155184,155185,155188,155190],{"class":281,"line":282},[152,155186,155187],{"class":483},"category_total ",[152,155189,1864],{"class":476},[152,155191,89205],{"class":483},[152,155193,155194],{"class":281,"line":303},[152,155195,307],{"emptyLinePlaceholder":306},[152,155197,155198,155200,155202,155204],{"class":281,"line":310},[152,155199,4668],{"class":476},[152,155201,149546],{"class":483},[152,155203,27653],{"class":476},[152,155205,155116],{"class":483},[152,155207,155208,155211,155213,155215,155217],{"class":281,"line":324},[152,155209,155210],{"class":483},"    category ",[152,155212,1864],{"class":476},[152,155214,155126],{"class":483},[152,155216,154975],{"class":289},[152,155218,34583],{"class":483},[152,155220,155221,155223,155225,155227,155229],{"class":281,"line":329},[152,155222,155135],{"class":483},[152,155224,1864],{"class":476},[152,155226,155126],{"class":483},[152,155228,85421],{"class":289},[152,155230,34583],{"class":483},[152,155232,155233,155236,155238,155241,155243,155245,155247],{"class":281,"line":343},[152,155234,155235],{"class":483},"    category_total[category] ",[152,155237,1864],{"class":476},[152,155239,155240],{"class":483}," category_total.get(category, ",[152,155242,2000],{"class":293},[152,155244,15330],{"class":483},[152,155246,2289],{"class":476},[152,155248,155162],{"class":483},[152,155250,155251],{"class":281,"line":348},[152,155252,307],{"emptyLinePlaceholder":306},[152,155254,155255,155257],{"class":281,"line":362},[152,155256,31752],{"class":293},[152,155258,155259],{"class":483},"(category_total)\n",[14,155261,155263],{"id":155262},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[270,155265,155267],{"className":31715,"code":155266,"language":31717,"meta":275,"style":275},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[277,155268,155269,155294],{"__ignoreMap":275},[152,155270,155271,155274,155276,155278,155281,155284,155287,155290,155292],{"class":281,"line":282},[152,155272,155273],{"class":483},"top_date, top_amount ",[152,155275,1864],{"class":476},[152,155277,7593],{"class":293},[152,155279,155280],{"class":483},"(daily_total.items(), ",[152,155282,155283],{"class":6858},"key",[152,155285,155286],{"class":476},"=lambda",[152,155288,155289],{"class":483}," item: item[",[152,155291,2026],{"class":293},[152,155293,6299],{"class":483},[152,155295,155296,155298],{"class":281,"line":303},[152,155297,31752],{"class":293},[152,155299,155300],{"class":483},"(top_date, top_amount)\n",[1760,155302,155304],{"id":155303},"_126-绘制柱状图","12.6 绘制柱状图",[270,155306,155308],{"className":31715,"code":155307,"language":31717,"meta":275,"style":275},"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",[277,155309,155310,155324,155335,155339,155347,155359,155371,155382,155386,155390,155400,155411,155425,155430,155447,155464,155480,155484],{"__ignoreMap":275},[152,155311,155312,155314,155316,155318,155320,155322],{"class":281,"line":282},[152,155313,32074],{"class":476},[152,155315,148716],{"class":483},[152,155317,31729],{"class":476},[152,155319,148721],{"class":483},[152,155321,32720],{"class":476},[152,155323,148726],{"class":483},[152,155325,155326,155328,155330,155332],{"class":281,"line":303},[152,155327,32074],{"class":476},[152,155329,148575],{"class":483},[152,155331,31729],{"class":476},[152,155333,155334],{"class":483}," Bar\n",[152,155336,155337],{"class":281,"line":310},[152,155338,307],{"emptyLinePlaceholder":306},[152,155340,155341,155343,155345],{"class":281,"line":324},[152,155342,155187],{"class":483},[152,155344,1864],{"class":476},[152,155346,17187],{"class":483},[152,155348,155349,155352,155354,155357],{"class":281,"line":329},[152,155350,155351],{"class":289},"    \"手机\"",[152,155353,52774],{"class":483},[152,155355,155356],{"class":293},"27000",[152,155358,32803],{"class":483},[152,155360,155361,155364,155366,155369],{"class":281,"line":343},[152,155362,155363],{"class":289},"    \"电脑\"",[152,155365,52774],{"class":483},[152,155367,155368],{"class":293},"34000",[152,155370,32803],{"class":483},[152,155372,155373,155376,155378,155380],{"class":281,"line":348},[152,155374,155375],{"class":289},"    \"耳机\"",[152,155377,52774],{"class":483},[152,155379,125736],{"class":293},[152,155381,32803],{"class":483},[152,155383,155384],{"class":281,"line":362},[152,155385,3236],{"class":483},[152,155387,155388],{"class":281,"line":367},[152,155389,307],{"emptyLinePlaceholder":306},[152,155391,155392,155395,155397],{"class":281,"line":381},[152,155393,155394],{"class":483},"bar ",[152,155396,1864],{"class":476},[152,155398,155399],{"class":483}," Bar()\n",[152,155401,155402,155405,155408],{"class":281,"line":386},[152,155403,155404],{"class":483},"bar.add_xaxis(",[152,155406,155407],{"class":293},"list",[152,155409,155410],{"class":483},"(category_total.keys()))\n",[152,155412,155413,155416,155418,155420,155422],{"class":281,"line":932},[152,155414,155415],{"class":483},"bar.add_yaxis(",[152,155417,148632],{"class":289},[152,155419,14051],{"class":483},[152,155421,155407],{"class":293},[152,155423,155424],{"class":483},"(category_total.values()))\n",[152,155426,155427],{"class":281,"line":942},[152,155428,155429],{"class":483},"bar.set_global_opts(\n",[152,155431,155432,155434,155436,155438,155440,155442,155445],{"class":281,"line":949},[152,155433,148810],{"class":6858},[152,155435,1864],{"class":476},[152,155437,148815],{"class":483},[152,155439,52744],{"class":6858},[152,155441,1864],{"class":476},[152,155443,155444],{"class":289},"\"品类销售额\"",[152,155446,39384],{"class":483},[152,155448,155449,155451,155453,155455,155457,155459,155462],{"class":281,"line":954},[152,155450,148829],{"class":6858},[152,155452,1864],{"class":476},[152,155454,148834],{"class":483},[152,155456,81147],{"class":6858},[152,155458,1864],{"class":476},[152,155460,155461],{"class":289},"\"品类\"",[152,155463,39384],{"class":483},[152,155465,155466,155468,155470,155472,155474,155476,155478],{"class":281,"line":959},[152,155467,148848],{"class":6858},[152,155469,1864],{"class":476},[152,155471,148834],{"class":483},[152,155473,81147],{"class":6858},[152,155475,1864],{"class":476},[152,155477,148632],{"class":289},[152,155479,39384],{"class":483},[152,155481,155482],{"class":281,"line":970},[152,155483,1825],{"class":483},[152,155485,155486,155489,155492],{"class":281,"line":979},[152,155487,155488],{"class":483},"bar.render(",[152,155490,155491],{"class":289},"\"category_sales.html\"",[152,155493,1825],{"class":483},[1760,155495,155497],{"id":155496},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155499,155500],{},"时间线适合展示不同日期、月份、年份的数据变化。",[270,155502,155504],{"className":31715,"code":155503,"language":31717,"meta":275,"style":275},"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",[277,155505,155506,155520,155531,155535,155543,155567,155590,155615,155619,155623,155633,155637,155648,155657,155667,155681,155712,155717,155721],{"__ignoreMap":275},[152,155507,155508,155510,155512,155514,155516,155518],{"class":281,"line":282},[152,155509,32074],{"class":476},[152,155511,148716],{"class":483},[152,155513,31729],{"class":476},[152,155515,148721],{"class":483},[152,155517,32720],{"class":476},[152,155519,148726],{"class":483},[152,155521,155522,155524,155526,155528],{"class":281,"line":303},[152,155523,32074],{"class":476},[152,155525,148575],{"class":483},[152,155527,31729],{"class":476},[152,155529,155530],{"class":483}," Bar, Timeline\n",[152,155532,155533],{"class":281,"line":310},[152,155534,307],{"emptyLinePlaceholder":306},[152,155536,155537,155539,155541],{"class":281,"line":324},[152,155538,102995],{"class":483},[152,155540,1864],{"class":476},[152,155542,17187],{"class":483},[152,155544,155545,155548,155551,155553,155555,155557,155559,155561,155563,155565],{"class":281,"line":329},[152,155546,155547],{"class":289},"    \"2024-10-01\"",[152,155549,155550],{"class":483},": {",[152,155552,154980],{"class":289},[152,155554,52774],{"class":483},[152,155556,154989],{"class":293},[152,155558,14051],{"class":483},[152,155560,155010],{"class":289},[152,155562,52774],{"class":483},[152,155564,155019],{"class":293},[152,155566,6572],{"class":483},[152,155568,155569,155572,155574,155576,155578,155580,155582,155584,155586,155588],{"class":281,"line":343},[152,155570,155571],{"class":289},"    \"2024-10-02\"",[152,155573,155550],{"class":483},[152,155575,154980],{"class":289},[152,155577,52774],{"class":483},[152,155579,155048],{"class":293},[152,155581,14051],{"class":483},[152,155583,155010],{"class":289},[152,155585,52774],{"class":483},[152,155587,155077],{"class":293},[152,155589,6572],{"class":483},[152,155591,155592,155595,155597,155599,155601,155604,155606,155608,155610,155613],{"class":281,"line":348},[152,155593,155594],{"class":289},"    \"2024-10-03\"",[152,155596,155550],{"class":483},[152,155598,154980],{"class":289},[152,155600,52774],{"class":483},[152,155602,155603],{"class":293},"17000",[152,155605,14051],{"class":483},[152,155607,155010],{"class":289},[152,155609,52774],{"class":483},[152,155611,155612],{"class":293},"19000",[152,155614,6572],{"class":483},[152,155616,155617],{"class":281,"line":362},[152,155618,3236],{"class":483},[152,155620,155621],{"class":281,"line":367},[152,155622,307],{"emptyLinePlaceholder":306},[152,155624,155625,155628,155630],{"class":281,"line":381},[152,155626,155627],{"class":483},"timeline ",[152,155629,1864],{"class":476},[152,155631,155632],{"class":483}," Timeline()\n",[152,155634,155635],{"class":281,"line":386},[152,155636,307],{"emptyLinePlaceholder":306},[152,155638,155639,155641,155644,155646],{"class":281,"line":932},[152,155640,4668],{"class":476},[152,155642,155643],{"class":483}," date, category_data ",[152,155645,27653],{"class":476},[152,155647,150485],{"class":483},[152,155649,155650,155653,155655],{"class":281,"line":942},[152,155651,155652],{"class":483},"    bar ",[152,155654,1864],{"class":476},[152,155656,155399],{"class":483},[152,155658,155659,155662,155664],{"class":281,"line":949},[152,155660,155661],{"class":483},"    bar.add_xaxis(",[152,155663,155407],{"class":293},[152,155665,155666],{"class":483},"(category_data.keys()))\n",[152,155668,155669,155672,155674,155676,155678],{"class":281,"line":954},[152,155670,155671],{"class":483},"    bar.add_yaxis(",[152,155673,148632],{"class":289},[152,155675,14051],{"class":483},[152,155677,155407],{"class":293},[152,155679,155680],{"class":483},"(category_data.values()))\n",[152,155682,155683,155686,155689,155691,155693,155695,155697,155699,155701,155703,155705,155707,155710],{"class":281,"line":959},[152,155684,155685],{"class":483},"    bar.set_global_opts(",[152,155687,155688],{"class":6858},"title_opts",[152,155690,1864],{"class":476},[152,155692,148815],{"class":483},[152,155694,52744],{"class":6858},[152,155696,1864],{"class":476},[152,155698,1870],{"class":476},[152,155700,2059],{"class":289},[152,155702,2703],{"class":293},[152,155704,75263],{"class":483},[152,155706,2752],{"class":293},[152,155708,155709],{"class":289},"销售额\"",[152,155711,31834],{"class":483},[152,155713,155714],{"class":281,"line":970},[152,155715,155716],{"class":483},"    timeline.add(bar, date)\n",[152,155718,155719],{"class":281,"line":979},[152,155720,307],{"emptyLinePlaceholder":306},[152,155722,155723,155726,155729],{"class":281,"line":989},[152,155724,155725],{"class":483},"timeline.render(",[152,155727,155728],{"class":289},"\"timeline_sales.html\"",[152,155730,1825],{"class":483},[1760,155732,155734],{"id":155733},"_128-绘制地图","12.8 绘制地图",[19,155736,155737],{},"地图适合展示地区数据。",[270,155739,155741],{"className":31715,"code":155740,"language":31717,"meta":275,"style":275},"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",[277,155742,155743,155757,155768,155772,155780,155793,155805,155818,155831,155835,155839,155849,155864,155869,155886,155905,155909],{"__ignoreMap":275},[152,155744,155745,155747,155749,155751,155753,155755],{"class":281,"line":282},[152,155746,32074],{"class":476},[152,155748,148716],{"class":483},[152,155750,31729],{"class":476},[152,155752,148721],{"class":483},[152,155754,32720],{"class":476},[152,155756,148726],{"class":483},[152,155758,155759,155761,155763,155765],{"class":281,"line":303},[152,155760,32074],{"class":476},[152,155762,148575],{"class":483},[152,155764,31729],{"class":476},[152,155766,155767],{"class":483}," Map\n",[152,155769,155770],{"class":281,"line":310},[152,155771,307],{"emptyLinePlaceholder":306},[152,155773,155774,155776,155778],{"class":281,"line":324},[152,155775,102995],{"class":483},[152,155777,1864],{"class":476},[152,155779,56784],{"class":483},[152,155781,155782,155785,155787,155789,155791],{"class":281,"line":329},[152,155783,155784],{"class":483},"    (",[152,155786,70606],{"class":289},[152,155788,14051],{"class":483},[152,155790,2625],{"class":293},[152,155792,39384],{"class":483},[152,155794,155795,155797,155799,155801,155803],{"class":281,"line":343},[152,155796,155784],{"class":483},[152,155798,70626],{"class":289},[152,155800,14051],{"class":483},[152,155802,148649],{"class":293},[152,155804,39384],{"class":483},[152,155806,155807,155809,155812,155814,155816],{"class":281,"line":348},[152,155808,155784],{"class":483},[152,155810,155811],{"class":289},"\"广东\"",[152,155813,14051],{"class":483},[152,155815,3382],{"class":293},[152,155817,39384],{"class":483},[152,155819,155820,155822,155825,155827,155829],{"class":281,"line":362},[152,155821,155784],{"class":483},[152,155823,155824],{"class":289},"\"浙江\"",[152,155826,14051],{"class":483},[152,155828,148654],{"class":293},[152,155830,39384],{"class":483},[152,155832,155833],{"class":281,"line":367},[152,155834,34583],{"class":483},[152,155836,155837],{"class":281,"line":381},[152,155838,307],{"emptyLinePlaceholder":306},[152,155840,155841,155844,155846],{"class":281,"line":386},[152,155842,155843],{"class":483},"map_chart ",[152,155845,1864],{"class":476},[152,155847,155848],{"class":483}," Map()\n",[152,155850,155851,155854,155856,155859,155862],{"class":281,"line":932},[152,155852,155853],{"class":483},"map_chart.add(",[152,155855,148632],{"class":289},[152,155857,155858],{"class":483},", data, ",[152,155860,155861],{"class":289},"\"china\"",[152,155863,1825],{"class":483},[152,155865,155866],{"class":281,"line":942},[152,155867,155868],{"class":483},"map_chart.set_global_opts(\n",[152,155870,155871,155873,155875,155877,155879,155881,155884],{"class":281,"line":949},[152,155872,148810],{"class":6858},[152,155874,1864],{"class":476},[152,155876,148815],{"class":483},[152,155878,52744],{"class":6858},[152,155880,1864],{"class":476},[152,155882,155883],{"class":289},"\"地区销售额\"",[152,155885,39384],{"class":483},[152,155887,155888,155891,155893,155896,155899,155901,155903],{"class":281,"line":954},[152,155889,155890],{"class":6858},"    visualmap_opts",[152,155892,1864],{"class":476},[152,155894,155895],{"class":483},"opts.VisualMapOpts(",[152,155897,155898],{"class":6858},"max_",[152,155900,1864],{"class":476},[152,155902,3382],{"class":293},[152,155904,39384],{"class":483},[152,155906,155907],{"class":281,"line":959},[152,155908,1825],{"class":483},[152,155910,155911,155914,155917],{"class":281,"line":970},[152,155912,155913],{"class":483},"map_chart.render(",[152,155915,155916],{"class":289},"\"map_sales.html\"",[152,155918,1825],{"class":483},[19,155920,155921],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[1760,155923,155925],{"id":155924},"_129-项目拆分建议","12.9 项目拆分建议",[19,155927,155928],{},"当代码超过一个文件时，可以这样组织：",[270,155930,155933],{"className":155931,"code":155932,"language":6829,"meta":275},[6827],"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",[277,155934,155932],{"__ignoreMap":275},[19,155936,155937],{},"职责：",[416,155939,155940,155946,155952,155958],{},[419,155941,155942,155945],{},[277,155943,155944],{},"main.py","：程序入口。",[419,155947,155948,155951],{},[277,155949,155950],{},"file_utils.py","：读写 JSON。",[419,155953,155954,155957],{},[277,155955,155956],{},"sales_service.py","：统计销售数据。",[419,155959,155960,155963],{},[277,155961,155962],{},"chart_builder.py","：生成图表。",[1760,155965,155967],{"id":155966},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155969,155970],{},"语法基础：",[416,155972,155973,155976,155979,155982],{},[419,155974,155975],{},"会写变量、注释、输入输出。",[419,155977,155978],{},"会使用 int、float、str、bool。",[419,155980,155981],{},"会做类型转换。",[419,155983,155984],{},"会使用 f-string 格式化输出。",[19,155986,155987],{},"流程控制：",[416,155989,155990,155996,156002,156010],{},[419,155991,155992,155993,29984],{},"会写 ",[277,155994,155995],{},"if elif else",[419,155997,155992,155998,102355,156000,29984],{},[277,155999,110000],{},[277,156001,4668],{},[419,156003,156004,156005,102355,156007,29984],{},"理解 ",[277,156006,3704],{},[277,156008,156009],{},"continue",[419,156011,156012],{},"能写嵌套循环。",[19,156014,156015],{},"函数：",[416,156017,156018,156021,156024,156027],{},[419,156019,156020],{},"会定义和调用函数。",[419,156022,156023],{},"理解参数和返回值。",[419,156025,156026],{},"知道局部变量和全局变量。",[419,156028,156029],{},"会使用默认参数、关键字参数、不定长参数。",[19,156031,156032],{},"容器：",[416,156034,156035,156038,156041,156044,156047],{},[419,156036,156037],{},"会使用列表增删改查。",[419,156039,156040],{},"会遍历列表、字典。",[419,156042,156043],{},"会使用切片。",[419,156045,156046],{},"会用集合去重。",[419,156048,156049],{},"会处理列表嵌套字典。",[19,156051,156052],{},"文件和模块：",[416,156054,156055,156058,156061,156064,156067],{},[419,156056,156057],{},"会读写文本文件。",[419,156059,156060],{},"会读写 JSON。",[419,156062,156063],{},"会捕获常见异常。",[419,156065,156066],{},"会导入模块和第三方包。",[419,156068,156069],{},"会创建简单包结构。",[19,156071,156072],{},"项目能力：",[416,156074,156075,156078,156081,156084,156087],{},[419,156076,156077],{},"能把代码拆成函数。",[419,156079,156080],{},"能把数据保存到文件。",[419,156082,156083],{},"能处理用户输入错误。",[419,156085,156086],{},"能写一个完整菜单程序。",[419,156088,156089],{},"能用 pyecharts 生成图表。",[1760,156091,156093],{"id":156092},"_1211-推荐练习顺序","12.11 推荐练习顺序",[416,156095,156096,156099,156102,156105,156108,156111,156114,156117],{},[419,156097,156098],{},"猜数字游戏。",[419,156100,156101],{},"ATM 菜单程序。",[419,156103,156104],{},"学生成绩统计。",[419,156106,156107],{},"学生管理系统函数版。",[419,156109,156110],{},"学生管理系统文件持久化版。",[419,156112,156113],{},"学生管理系统面向对象版。",[419,156115,156116],{},"销售数据统计。",[419,156118,156119],{},"销售数据可视化。",[1760,156121,156123],{"id":156122},"_1212-常见学习误区","12.12 常见学习误区",[416,156125,156126,156129,156132,156135,156138,156141,156144],{},[419,156127,156128],{},"只看视频不敲代码。",[419,156130,156131],{},"一报错就复制错误去搜，不先读报错位置。",[419,156133,156134],{},"变量名随便写，后续自己看不懂。",[419,156136,156137],{},"所有代码都写在一个文件一个函数里。",[419,156139,156140],{},"不保存练习代码，复习时没有材料。",[419,156142,156143],{},"还没掌握列表字典就急着学框架。",[419,156145,156146],{},"不会读官方文档，只依赖教程。",[1760,156148,156150],{"id":156149},"_1213-如何读报错","12.13 如何读报错",[19,156152,156153],{},"报错通常从下往上看最后几行。",[19,156155,16750],{},[270,156157,156160],{"className":156158,"code":156159,"language":6829,"meta":275},[6827],"ValueError: invalid literal for int() with base 10: 'abc'\n",[277,156161,156159],{"__ignoreMap":275},[19,156163,26211],{},[416,156165,156166,156172,156182],{},[419,156167,156168,156169,29984],{},"异常类型是 ",[277,156170,156171],{},"ValueError",[419,156173,108682,156174,156177,156178,156181],{},[277,156175,156176],{},"int()"," 无法把 ",[277,156179,156180],{},"'abc'"," 转成整数。",[419,156183,156184],{},"应该检查输入内容或增加异常处理。",[19,156186,156187],{},"再看文件名和行号：",[270,156189,156192],{"className":156190,"code":156191,"language":6829,"meta":275},[6827],"File \"main.py\", line 10, in \u003Cmodule>\n",[277,156193,156191],{"__ignoreMap":275},[19,156195,156196,156197,156199],{},"表示错误发生在 ",[277,156198,155944],{}," 第 10 行。",[1760,156201,156203],{"id":156202},"_1214-后续学习方向","12.14 后续学习方向",[19,156205,156206],{},"Python 基础完成后，可以按兴趣选择方向：",[416,156208,156209,156221,156230,156242,156253,156262,156272],{},[419,156210,156211,156212,2021,156215,2021,156218,29984],{},"自动化办公：",[277,156213,156214],{},"openpyxl",[277,156216,156217],{},"python-docx",[277,156219,156220],{},"pdfplumber",[419,156222,156223,156224,2021,156226,2021,156228,29984],{},"数据分析：",[277,156225,101963],{},[277,156227,147522],{},[277,156229,147530],{},[419,156231,156232,156233,2021,156236,2021,156239,29984],{},"Web 后端：",[277,156234,156235],{},"Flask",[277,156237,156238],{},"FastAPI",[277,156240,156241],{},"Django",[419,156243,156244,156245,2021,156247,2021,156250,29984],{},"爬虫：",[277,156246,147507],{},[277,156248,156249],{},"BeautifulSoup",[277,156251,156252],{},"Scrapy",[419,156254,156255,156256,2021,156258,156261],{},"测试开发：",[277,156257,147554],{},[277,156259,156260],{},"selenium","、接口测试。",[419,156263,156264,156265,2021,156267,2021,156269,29984],{},"人工智能：",[277,156266,101963],{},[277,156268,147522],{},[277,156270,156271],{},"pytorch",[419,156273,156274,156275,2021,156277,2021,156280,29984],{},"运维脚本：",[277,156276,147123],{},[277,156278,156279],{},"subprocess",[277,156281,156282],{},"paramiko",[19,156284,156285],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[1760,156287,156289],{"id":156288},"_1215-结课练习","12.15 结课练习",[416,156291,156292,156295,156298,156301,156304,156307,156310,156313],{},[419,156293,156294],{},"完成函数版学生管理系统。",[419,156296,156297],{},"给学生管理系统增加 JSON 持久化。",[419,156299,156300],{},"给学生管理系统增加异常处理。",[419,156302,156303],{},"把学生管理系统改成面向对象版。",[419,156305,156306],{},"使用 pyecharts 绘制学生成绩柱状图。",[419,156308,156309],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[419,156311,156312],{},"按品类统计销售额并绘制柱状图。",[419,156314,156315],{},"写一份自己的 Python 学习路线图。",[1736,156317,156318],{},"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":275,"searchDepth":303,"depth":303,"links":156320},[156321,156322,156325,156326,156327,156333,156334,156335,156336,156337,156338,156339,156340,156341,156342],{"id":153037,"depth":303,"text":153038},{"id":153087,"depth":303,"text":153088,"children":156323},[156324],{"id":153091,"depth":310,"text":153092},{"id":153130,"depth":303,"text":153131},{"id":154604,"depth":303,"text":154605},{"id":154942,"depth":303,"text":154943,"children":156328},[156329,156330,156331,156332],{"id":154946,"depth":310,"text":154947},{"id":155086,"depth":310,"text":155087},{"id":155176,"depth":310,"text":155177},{"id":155262,"depth":310,"text":155263},{"id":155303,"depth":303,"text":155304},{"id":155496,"depth":303,"text":155497},{"id":155733,"depth":303,"text":155734},{"id":155924,"depth":303,"text":155925},{"id":155966,"depth":303,"text":155967},{"id":156092,"depth":303,"text":156093},{"id":156122,"depth":303,"text":156123},{"id":156149,"depth":303,"text":156150},{"id":156202,"depth":303,"text":156203},{"id":156288,"depth":303,"text":156289},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153029,"description":24991},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156349,"title":156350,"body":156351,"description":24991,"extension":1744,"meta":158820,"navigation":306,"path":158821,"seo":158822,"stem":158823,"__hash__":158824},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156352,"toc":158795},[156353,156356,156360,156363,156366,156386,156389,156412,156415,156418,156440,156443,156465,156469,156472,156512,156515,156636,156640,156643,156683,156686,156710,156713,156717,156720,156734,156767,156770,156805,156808,156831,156834,156867,156870,156872,156878,156953,156956,156962,156979,157019,157023,157026,157072,157074,157112,157115,157150,157153,157188,157191,157223,157226,157245,157249,157253,157366,157368,157443,157447,157493,157496,157522,157531,157535,157538,157601,157609,157637,157641,157681,157746,157750,157753,157792,157795,157840,157843,157904,157908,157935,157938,157966,157969,157973,157977,158042,158045,158083,158086,158118,158122,158221,158225,158228,158301,158304,158352,158356,158362,158402,158405,158452,158455,158504,158508,158510,158524,158526,158707,158711,158738,158758,158765,158769,158786,158792],[10,156354,156350],{"id":156355},"_2-基础语法变量与字符串",[1760,156357,156359],{"id":156358},"_21-注释","2.1 注释",[19,156361,156362],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156364,156365],{},"单行注释：",[270,156367,156369],{"className":31715,"code":156368,"language":31717,"meta":275,"style":275},"# 这是单行注释\nprint(\"hello\")\n",[277,156370,156371,156376],{"__ignoreMap":275},[152,156372,156373],{"class":281,"line":282},[152,156374,156375],{"class":866},"# 这是单行注释\n",[152,156377,156378,156380,156382,156384],{"class":281,"line":303},[152,156379,31752],{"class":293},[152,156381,1819],{"class":483},[152,156383,7486],{"class":289},[152,156385,1825],{"class":483},[19,156387,156388],{},"多行说明常用三引号：",[270,156390,156392],{"className":31715,"code":156391,"language":31717,"meta":275,"style":275},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[277,156393,156394,156398,156403,156408],{"__ignoreMap":275},[152,156395,156396],{"class":281,"line":282},[152,156397,97035],{"class":289},[152,156399,156400],{"class":281,"line":303},[152,156401,156402],{"class":289},"这是多行说明。\n",[152,156404,156405],{"class":281,"line":310},[152,156406,156407],{"class":289},"常用于文件顶部说明、函数说明等。\n",[152,156409,156410],{"class":281,"line":324},[152,156411,97035],{"class":289},[19,156413,156414],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156416,156417],{},"不好：",[270,156419,156421],{"className":31715,"code":156420,"language":31717,"meta":275,"style":275},"# age 加 1\nage = age + 1\n",[277,156422,156423,156428],{"__ignoreMap":275},[152,156424,156425],{"class":281,"line":282},[152,156426,156427],{"class":866},"# age 加 1\n",[152,156429,156430,156432,156434,156436,156438],{"class":281,"line":303},[152,156431,147883],{"class":483},[152,156433,1864],{"class":476},[152,156435,17322],{"class":483},[152,156437,2289],{"class":476},[152,156439,57036],{"class":293},[19,156441,156442],{},"较好：",[270,156444,156446],{"className":31715,"code":156445,"language":31717,"meta":275,"style":275},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[277,156447,156448,156453],{"__ignoreMap":275},[152,156449,156450],{"class":281,"line":282},[152,156451,156452],{"class":866},"# 用户过完生日后，年龄增加一岁\n",[152,156454,156455,156457,156459,156461,156463],{"class":281,"line":303},[152,156456,147883],{"class":483},[152,156458,1864],{"class":476},[152,156460,17322],{"class":483},[152,156462,2289],{"class":476},[152,156464,57036],{"class":293},[1760,156466,156468],{"id":156467},"_22-字面量","2.2 字面量",[19,156470,156471],{},"字面量就是代码中直接写出来的数据。",[270,156473,156475],{"className":31715,"code":156474,"language":31717,"meta":275,"style":275},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[277,156476,156477,156484,156491,156498,156505],{"__ignoreMap":275},[152,156478,156479,156481],{"class":281,"line":282},[152,156480,2119],{"class":293},[152,156482,156483],{"class":866},"          # 整数\n",[152,156485,156486,156488],{"class":281,"line":303},[152,156487,1867],{"class":293},[152,156489,156490],{"class":866},"         # 小数\n",[152,156492,156493,156495],{"class":281,"line":310},[152,156494,7486],{"class":289},[152,156496,156497],{"class":866},"      # 字符串\n",[152,156499,156500,156502],{"class":281,"line":324},[152,156501,32813],{"class":293},[152,156503,156504],{"class":866},"         # 布尔值\n",[152,156506,156507,156509],{"class":281,"line":329},[152,156508,97023],{"class":293},[152,156510,156511],{"class":866},"         # 空值\n",[19,156513,156514],{},"常见字面量类型：",[23,156516,156517,156527],{},[26,156518,156519],{},[29,156520,156521,156523,156525],{},[32,156522,25351],{},[32,156524,41],{},[32,156526,38],{},[43,156528,156529,156540,156551,156562,156574,156586,156598,156611,156623],{},[29,156530,156531,156533,156537],{},[48,156532,1822],{},[48,156534,156535],{},[277,156536,2119],{},[48,156538,156539],{},"整数",[29,156541,156542,156544,156548],{},[48,156543,1858],{},[48,156545,156546],{},[277,156547,1867],{},[48,156549,156550],{},"浮点数",[29,156552,156553,156555,156559],{},[48,156554,2974],{},[48,156556,156557],{},[277,156558,7486],{},[48,156560,156561],{},"字符串",[29,156563,156564,156566,156572],{},[48,156565,3026],{},[48,156567,156568,2021,156570],{},[277,156569,32813],{},[277,156571,35324],{},[48,156573,67352],{},[29,156575,156576,156579,156583],{},[48,156577,156578],{},"NoneType",[48,156580,156581],{},[277,156582,97023],{},[48,156584,156585],{},"空值",[29,156587,156588,156590,156595],{},[48,156589,155407],{},[48,156591,156592],{},[277,156593,156594],{},"[1, 2, 3]",[48,156596,156597],{},"列表",[29,156599,156600,156603,156608],{},[48,156601,156602],{},"tuple",[48,156604,156605],{},[277,156606,156607],{},"(1, 2, 3)",[48,156609,156610],{},"元组",[29,156612,156613,156615,156620],{},[48,156614,115883],{},[48,156616,156617],{},[277,156618,156619],{},"{\"name\": \"张三\"}",[48,156621,156622],{},"字典",[29,156624,156625,156628,156633],{},[48,156626,156627],{},"set",[48,156629,156630],{},[277,156631,156632],{},"{1, 2, 3}",[48,156634,156635],{},"集合",[1760,156637,156639],{"id":156638},"_23-变量","2.3 变量",[19,156641,156642],{},"变量是保存数据的名字。",[270,156644,156646],{"className":31715,"code":156645,"language":31717,"meta":275,"style":275},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[277,156647,156648,156656,156664,156674],{"__ignoreMap":275},[152,156649,156650,156652,156654],{"class":281,"line":282},[152,156651,147873],{"class":483},[152,156653,1864],{"class":476},[152,156655,150690],{"class":289},[152,156657,156658,156660,156662],{"class":281,"line":303},[152,156659,147883],{"class":483},[152,156661,1864],{"class":476},[152,156663,147888],{"class":293},[152,156665,156666,156669,156671],{"class":281,"line":310},[152,156667,156668],{"class":483},"height ",[152,156670,1864],{"class":476},[152,156672,156673],{"class":293}," 1.75\n",[152,156675,156676,156679,156681],{"class":281,"line":324},[152,156677,156678],{"class":483},"is_student ",[152,156680,1864],{"class":476},[152,156682,154936],{"class":293},[19,156684,156685],{},"Python 的变量不需要提前声明类型：",[270,156687,156689],{"className":31715,"code":156688,"language":31717,"meta":275,"style":275},"score = 100\nscore = \"满分\"\n",[277,156690,156691,156701],{"__ignoreMap":275},[152,156692,156693,156696,156698],{"class":281,"line":282},[152,156694,156695],{"class":483},"score ",[152,156697,1864],{"class":476},[152,156699,156700],{"class":293}," 100\n",[152,156702,156703,156705,156707],{"class":281,"line":303},[152,156704,156695],{"class":483},[152,156706,1864],{"class":476},[152,156708,156709],{"class":289}," \"满分\"\n",[19,156711,156712],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[1760,156714,156716],{"id":156715},"_24-变量命名规则","2.4 变量命名规则",[19,156718,156719],{},"硬性规则：",[416,156721,156722,156725,156728,156731],{},[419,156723,156724],{},"只能由字母、数字、下划线组成。",[419,156726,156727],{},"不能以数字开头。",[419,156729,156730],{},"不能使用 Python 关键字。",[419,156732,156733],{},"区分大小写。",[270,156735,156737],{"className":31715,"code":156736,"language":31717,"meta":275,"style":275},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[277,156738,156739,156748,156757],{"__ignoreMap":275},[152,156740,156741,156744,156746],{"class":281,"line":282},[152,156742,156743],{"class":483},"user_name ",[152,156745,1864],{"class":476},[152,156747,147878],{"class":289},[152,156749,156750,156753,156755],{"class":281,"line":303},[152,156751,156752],{"class":483},"age2 ",[152,156754,1864],{"class":476},[152,156756,147888],{"class":293},[152,156758,156759,156762,156764],{"class":281,"line":310},[152,156760,156761],{"class":483},"_token ",[152,156763,1864],{"class":476},[152,156765,156766],{"class":289}," \"abc\"\n",[19,156768,156769],{},"错误写法：",[270,156771,156773],{"className":31715,"code":156772,"language":31717,"meta":275,"style":275},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[277,156774,156775,156784,156796],{"__ignoreMap":275},[152,156776,156777,156780,156782],{"class":281,"line":282},[152,156778,156779],{"class":78740},"2age",[152,156781,15180],{"class":476},[152,156783,147888],{"class":293},[152,156785,156786,156788,156790,156792,156794],{"class":281,"line":303},[152,156787,132921],{"class":483},[152,156789,2340],{"class":476},[152,156791,147873],{"class":483},[152,156793,1864],{"class":476},[152,156795,147878],{"class":289},[152,156797,156798,156800,156802],{"class":281,"line":310},[152,156799,16309],{"class":476},[152,156801,15180],{"class":476},[152,156803,156804],{"class":289}," \"一班\"\n",[19,156806,156807],{},"查看关键字：",[270,156809,156811],{"className":31715,"code":156810,"language":31717,"meta":275,"style":275},"import keyword\n\nprint(keyword.kwlist)\n",[277,156812,156813,156820,156824],{"__ignoreMap":275},[152,156814,156815,156817],{"class":281,"line":282},[152,156816,31729],{"class":476},[152,156818,156819],{"class":483}," keyword\n",[152,156821,156822],{"class":281,"line":303},[152,156823,307],{"emptyLinePlaceholder":306},[152,156825,156826,156828],{"class":281,"line":310},[152,156827,31752],{"class":293},[152,156829,156830],{"class":483},"(keyword.kwlist)\n",[19,156832,156833],{},"推荐命名风格：",[270,156835,156837],{"className":31715,"code":156836,"language":31717,"meta":275,"style":275},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[277,156838,156839,156848,156858],{"__ignoreMap":275},[152,156840,156841,156844,156846],{"class":281,"line":282},[152,156842,156843],{"class":483},"student_name ",[152,156845,1864],{"class":476},[152,156847,150690],{"class":289},[152,156849,156850,156853,156855],{"class":281,"line":303},[152,156851,156852],{"class":483},"total_price ",[152,156854,1864],{"class":476},[152,156856,156857],{"class":293}," 99.8\n",[152,156859,156860,156863,156865],{"class":281,"line":310},[152,156861,156862],{"class":483},"is_finished ",[152,156864,1864],{"class":476},[152,156866,127144],{"class":293},[19,156868,156869],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[1760,156871,52069],{"id":52068},[19,156873,105703,156874,156877],{},[277,156875,156876],{},"type()"," 查看数据类型：",[270,156879,156881],{"className":31715,"code":156880,"language":31717,"meta":275,"style":275},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[277,156882,156883,156897,156911,156925,156939],{"__ignoreMap":275},[152,156884,156885,156887,156889,156891,156893,156895],{"class":281,"line":282},[152,156886,31752],{"class":293},[152,156888,1819],{"class":483},[152,156890,104444],{"class":293},[152,156892,1819],{"class":483},[152,156894,2119],{"class":293},[152,156896,31834],{"class":483},[152,156898,156899,156901,156903,156905,156907,156909],{"class":281,"line":303},[152,156900,31752],{"class":293},[152,156902,1819],{"class":483},[152,156904,104444],{"class":293},[152,156906,1819],{"class":483},[152,156908,1867],{"class":293},[152,156910,31834],{"class":483},[152,156912,156913,156915,156917,156919,156921,156923],{"class":281,"line":310},[152,156914,31752],{"class":293},[152,156916,1819],{"class":483},[152,156918,104444],{"class":293},[152,156920,1819],{"class":483},[152,156922,7486],{"class":289},[152,156924,31834],{"class":483},[152,156926,156927,156929,156931,156933,156935,156937],{"class":281,"line":324},[152,156928,31752],{"class":293},[152,156930,1819],{"class":483},[152,156932,104444],{"class":293},[152,156934,1819],{"class":483},[152,156936,32813],{"class":293},[152,156938,31834],{"class":483},[152,156940,156941,156943,156945,156947,156949,156951],{"class":281,"line":329},[152,156942,31752],{"class":293},[152,156944,1819],{"class":483},[152,156946,104444],{"class":293},[152,156948,1819],{"class":483},[152,156950,97023],{"class":293},[152,156952,31834],{"class":483},[19,156954,156955],{},"输出类似：",[270,156957,156960],{"className":156958,"code":156959,"language":6829,"meta":275},[6827],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[277,156961,156959],{"__ignoreMap":275},[19,156963,10657,156964,108620,156966,156968,156969,156971,156972,23115,156974,156971,156976,156978],{},[277,156965,3026],{},[277,156967,1822],{}," 的子类，",[277,156970,32813],{}," 可以当作 ",[277,156973,2026],{},[277,156975,35324],{},[277,156977,2000],{},"，但业务代码中不要滥用。",[270,156980,156982],{"className":31715,"code":156981,"language":31717,"meta":275,"style":275},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[277,156983,156984,157002],{"__ignoreMap":275},[152,156985,156986,156988,156990,156992,156994,156996,156999],{"class":281,"line":282},[152,156987,31752],{"class":293},[152,156989,1819],{"class":483},[152,156991,32813],{"class":293},[152,156993,46903],{"class":476},[152,156995,26729],{"class":293},[152,156997,156998],{"class":483},")   ",[152,157000,157001],{"class":866},"# 2\n",[152,157003,157004,157006,157008,157010,157012,157014,157016],{"class":281,"line":303},[152,157005,31752],{"class":293},[152,157007,1819],{"class":483},[152,157009,35324],{"class":293},[152,157011,46903],{"class":476},[152,157013,26729],{"class":293},[152,157015,47145],{"class":483},[152,157017,157018],{"class":866},"# 1\n",[1760,157020,157022],{"id":157021},"_26-类型转换","2.6 类型转换",[19,157024,157025],{},"常用转换函数：",[270,157027,157029],{"className":31715,"code":157028,"language":31717,"meta":275,"style":275},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[277,157030,157031,157041,157052,157062],{"__ignoreMap":275},[152,157032,157033,157035,157037,157039],{"class":281,"line":282},[152,157034,1822],{"class":293},[152,157036,1819],{"class":483},[152,157038,55653],{"class":289},[152,157040,1825],{"class":483},[152,157042,157043,157045,157047,157050],{"class":281,"line":303},[152,157044,1858],{"class":293},[152,157046,1819],{"class":483},[152,157048,157049],{"class":289},"\"3.14\"",[152,157051,1825],{"class":483},[152,157053,157054,157056,157058,157060],{"class":281,"line":310},[152,157055,2974],{"class":293},[152,157057,1819],{"class":483},[152,157059,2119],{"class":293},[152,157061,1825],{"class":483},[152,157063,157064,157066,157068,157070],{"class":281,"line":324},[152,157065,3026],{"class":293},[152,157067,1819],{"class":483},[152,157069,2026],{"class":293},[152,157071,1825],{"class":483},[19,157073,16750],{},[270,157075,157077],{"className":31715,"code":157076,"language":31717,"meta":275,"style":275},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[277,157078,157079,157088,157099],{"__ignoreMap":275},[152,157080,157081,157083,157085],{"class":281,"line":282},[152,157082,147883],{"class":483},[152,157084,1864],{"class":476},[152,157086,157087],{"class":289}," \"18\"\n",[152,157089,157090,157092,157094,157096],{"class":281,"line":303},[152,157091,147883],{"class":483},[152,157093,1864],{"class":476},[152,157095,4033],{"class":293},[152,157097,157098],{"class":483},"(age)\n",[152,157100,157101,157103,157106,157108,157110],{"class":281,"line":310},[152,157102,31752],{"class":293},[152,157104,157105],{"class":483},"(age ",[152,157107,2289],{"class":476},[152,157109,26729],{"class":293},[152,157111,1825],{"class":483},[19,157113,157114],{},"输入得到的内容永远是字符串：",[270,157116,157118],{"className":31715,"code":157117,"language":31717,"meta":275,"style":275},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[277,157119,157120,157136],{"__ignoreMap":275},[152,157121,157122,157125,157127,157129,157131,157134],{"class":281,"line":282},[152,157123,157124],{"class":483},"num ",[152,157126,1864],{"class":476},[152,157128,61942],{"class":293},[152,157130,1819],{"class":483},[152,157132,157133],{"class":289},"\"请输入数字:\"",[152,157135,1825],{"class":483},[152,157137,157138,157140,157142,157144,157147],{"class":281,"line":303},[152,157139,31752],{"class":293},[152,157141,1819],{"class":483},[152,157143,104444],{"class":293},[152,157145,157146],{"class":483},"(num))  ",[152,157148,157149],{"class":866},"# str\n",[19,157151,157152],{},"如果要做数学运算，必须转换：",[270,157154,157156],{"className":31715,"code":157155,"language":31717,"meta":275,"style":275},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[277,157157,157158,157176],{"__ignoreMap":275},[152,157159,157160,157162,157164,157166,157168,157170,157172,157174],{"class":281,"line":282},[152,157161,157124],{"class":483},[152,157163,1864],{"class":476},[152,157165,4033],{"class":293},[152,157167,1819],{"class":483},[152,157169,55158],{"class":293},[152,157171,1819],{"class":483},[152,157173,157133],{"class":289},[152,157175,31834],{"class":483},[152,157177,157178,157180,157182,157184,157186],{"class":281,"line":303},[152,157179,31752],{"class":293},[152,157181,46956],{"class":483},[152,157183,2289],{"class":476},[152,157185,3689],{"class":293},[152,157187,1825],{"class":483},[19,157189,157190],{},"常见错误：",[270,157192,157194],{"className":31715,"code":157193,"language":31717,"meta":275,"style":275},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[277,157195,157196,157209],{"__ignoreMap":275},[152,157197,157198,157200,157202,157204,157206],{"class":281,"line":282},[152,157199,1822],{"class":293},[152,157201,1819],{"class":483},[152,157203,157049],{"class":289},[152,157205,156998],{"class":483},[152,157207,157208],{"class":866},"# 错误\n",[152,157210,157211,157213,157215,157218,157221],{"class":281,"line":303},[152,157212,1822],{"class":293},[152,157214,1819],{"class":483},[152,157216,157217],{"class":289},"\"abc\"",[152,157219,157220],{"class":483},")    ",[152,157222,157208],{"class":866},[19,157224,157225],{},"正确写法：",[270,157227,157229],{"className":31715,"code":157228,"language":31717,"meta":275,"style":275},"num = float(\"3.14\")\n",[277,157230,157231],{"__ignoreMap":275},[152,157232,157233,157235,157237,157239,157241,157243],{"class":281,"line":282},[152,157234,157124],{"class":483},[152,157236,1864],{"class":476},[152,157238,111134],{"class":293},[152,157240,1819],{"class":483},[152,157242,157049],{"class":289},[152,157244,1825],{"class":483},[1760,157246,157248],{"id":157247},"_27-运算符","2.7 运算符",[14,157250,157252],{"id":157251},"_271-算术运算符","2.7.1 算术运算符",[23,157254,157255,157266],{},[26,157256,157257],{},[29,157258,157259,157262,157264],{},[32,157260,157261],{},"运算符",[32,157263,38],{},[32,157265,41],{},[43,157267,157268,157282,157296,157310,157324,157338,157352],{},[29,157269,157270,157274,157277],{},[48,157271,157272],{},[277,157273,2289],{},[48,157275,157276],{},"加法",[48,157278,157279],{},[277,157280,157281],{},"1 + 2",[29,157283,157284,157288,157291],{},[48,157285,157286],{},[277,157287,2340],{},[48,157289,157290],{},"减法",[48,157292,157293],{},[277,157294,157295],{},"5 - 3",[29,157297,157298,157302,157305],{},[48,157299,157300],{},[277,157301,2263],{},[48,157303,157304],{},"乘法",[48,157306,157307],{},[277,157308,157309],{},"2 * 3",[29,157311,157312,157316,157319],{},[48,157313,157314],{},[277,157315,2392],{},[48,157317,157318],{},"除法，结果是浮点数",[48,157320,157321],{},[277,157322,157323],{},"5 \u002F 2",[29,157325,157326,157330,157333],{},[48,157327,157328],{},[277,157329,34666],{},[48,157331,157332],{},"整除",[48,157334,157335],{},[277,157336,157337],{},"5 \u002F\u002F 2",[29,157339,157340,157344,157347],{},[48,157341,157342],{},[277,157343,2136],{},[48,157345,157346],{},"取余",[48,157348,157349],{},[277,157350,157351],{},"5 % 2",[29,157353,157354,157358,157361],{},[48,157355,157356],{},[277,157357,12277],{},[48,157359,157360],{},"幂运算",[48,157362,157363],{},[277,157364,157365],{},"2 ** 3",[19,157367,16750],{},[270,157369,157371],{"className":31715,"code":157370,"language":31717,"meta":275,"style":275},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[277,157372,157373,157391,157408,157425],{"__ignoreMap":275},[152,157374,157375,157377,157379,157381,157384,157386,157388],{"class":281,"line":282},[152,157376,31752],{"class":293},[152,157378,1819],{"class":483},[152,157380,2127],{"class":293},[152,157382,157383],{"class":476}," \u002F",[152,157385,16370],{"class":293},[152,157387,156998],{"class":483},[152,157389,157390],{"class":866},"# 2.5\n",[152,157392,157393,157395,157397,157399,157402,157404,157406],{"class":281,"line":303},[152,157394,31752],{"class":293},[152,157396,1819],{"class":483},[152,157398,2127],{"class":293},[152,157400,157401],{"class":476}," \u002F\u002F",[152,157403,16370],{"class":293},[152,157405,47145],{"class":483},[152,157407,157001],{"class":866},[152,157409,157410,157412,157414,157416,157419,157421,157423],{"class":281,"line":310},[152,157411,31752],{"class":293},[152,157413,1819],{"class":483},[152,157415,2127],{"class":293},[152,157417,157418],{"class":476}," %",[152,157420,16370],{"class":293},[152,157422,156998],{"class":483},[152,157424,157018],{"class":866},[152,157426,157427,157429,157431,157433,157436,157438,157440],{"class":281,"line":324},[152,157428,31752],{"class":293},[152,157430,1819],{"class":483},[152,157432,1894],{"class":293},[152,157434,157435],{"class":476}," **",[152,157437,79407],{"class":293},[152,157439,47145],{"class":483},[152,157441,157442],{"class":866},"# 8\n",[14,157444,157446],{"id":157445},"_272-赋值运算符","2.7.2 赋值运算符",[270,157448,157450],{"className":31715,"code":157449,"language":31717,"meta":275,"style":275},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[277,157451,157452,157460,157468,157476,157484],{"__ignoreMap":275},[152,157453,157454,157456,157458],{"class":281,"line":282},[152,157455,157124],{"class":483},[152,157457,1864],{"class":476},[152,157459,59765],{"class":293},[152,157461,157462,157464,157466],{"class":281,"line":303},[152,157463,157124],{"class":483},[152,157465,11109],{"class":476},[152,157467,55764],{"class":293},[152,157469,157470,157472,157474],{"class":281,"line":310},[152,157471,157124],{"class":483},[152,157473,151589],{"class":476},[152,157475,49060],{"class":293},[152,157477,157478,157480,157482],{"class":281,"line":324},[152,157479,157124],{"class":483},[152,157481,138485],{"class":476},[152,157483,121373],{"class":293},[152,157485,157486,157488,157491],{"class":281,"line":329},[152,157487,157124],{"class":483},[152,157489,157490],{"class":476},"\u002F=",[152,157492,49060],{"class":293},[19,157494,157495],{},"等价关系：",[270,157497,157499],{"className":31715,"code":157498,"language":31717,"meta":275,"style":275},"num += 1\nnum = num + 1\n",[277,157500,157501,157509],{"__ignoreMap":275},[152,157502,157503,157505,157507],{"class":281,"line":282},[152,157504,157124],{"class":483},[152,157506,11109],{"class":476},[152,157508,57036],{"class":293},[152,157510,157511,157513,157515,157518,157520],{"class":281,"line":303},[152,157512,157124],{"class":483},[152,157514,1864],{"class":476},[152,157516,157517],{"class":483}," num ",[152,157519,2289],{"class":476},[152,157521,57036],{"class":293},[19,157523,157524,157525,102355,157528,29984],{},"Python 没有 ",[277,157526,157527],{},"num++",[277,157529,157530],{},"num--",[14,157532,157534],{"id":157533},"_273-比较运算符","2.7.3 比较运算符",[19,157536,157537],{},"比较运算结果是布尔值。",[270,157539,157541],{"className":31715,"code":157540,"language":31717,"meta":275,"style":275},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[277,157542,157543,157557,157572,157586],{"__ignoreMap":275},[152,157544,157545,157547,157549,157551,157553,157555],{"class":281,"line":282},[152,157546,31752],{"class":293},[152,157548,1819],{"class":483},[152,157550,2254],{"class":293},[152,157552,1416],{"class":476},[152,157554,3799],{"class":293},[152,157556,1825],{"class":483},[152,157558,157559,157561,157563,157565,157568,157570],{"class":281,"line":303},[152,157560,31752],{"class":293},[152,157562,1819],{"class":483},[152,157564,2254],{"class":293},[152,157566,157567],{"class":476}," >=",[152,157569,3689],{"class":293},[152,157571,1825],{"class":483},[152,157573,157574,157576,157578,157580,157582,157584],{"class":281,"line":310},[152,157575,31752],{"class":293},[152,157577,1819],{"class":483},[152,157579,2254],{"class":293},[152,157581,102896],{"class":476},[152,157583,3734],{"class":293},[152,157585,1825],{"class":483},[152,157587,157588,157590,157592,157594,157597,157599],{"class":281,"line":324},[152,157589,31752],{"class":293},[152,157591,1819],{"class":483},[152,157593,2254],{"class":293},[152,157595,157596],{"class":476}," !=",[152,157598,3734],{"class":293},[152,157600,1825],{"class":483},[19,157602,157603,157604,157606,157607,29984],{},"注意：判断相等用 ",[277,157605,4592],{},"，赋值用 ",[277,157608,1864],{},[270,157610,157612],{"className":31715,"code":157611,"language":31717,"meta":275,"style":275},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[277,157613,157614,157626],{"__ignoreMap":275},[152,157615,157616,157618,157620,157623],{"class":281,"line":282},[152,157617,147883],{"class":483},[152,157619,1864],{"class":476},[152,157621,157622],{"class":293}," 18",[152,157624,157625],{"class":866},"       # 赋值\n",[152,157627,157628,157630,157632,157634],{"class":281,"line":303},[152,157629,147883],{"class":483},[152,157631,4592],{"class":476},[152,157633,157622],{"class":293},[152,157635,157636],{"class":866},"      # 判断是否相等\n",[14,157638,157640],{"id":157639},"_274-逻辑运算符","2.7.4 逻辑运算符",[23,157642,157643,157651],{},[26,157644,157645],{},[29,157646,157647,157649],{},[32,157648,157261],{},[32,157650,38],{},[43,157652,157653,157662,157671],{},[29,157654,157655,157659],{},[48,157656,157657],{},[277,157658,31799],{},[48,157660,157661],{},"并且",[29,157663,157664,157668],{},[48,157665,157666],{},[277,157667,116427],{},[48,157669,157670],{},"或者",[29,157672,157673,157678],{},[48,157674,157675],{},[277,157676,157677],{},"not",[48,157679,157680],{},"取反",[270,157682,157684],{"className":31715,"code":157683,"language":31717,"meta":275,"style":275},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[277,157685,157686,157694,157703,157707,157722,157736],{"__ignoreMap":275},[152,157687,157688,157690,157692],{"class":281,"line":282},[152,157689,147883],{"class":483},[152,157691,1864],{"class":476},[152,157693,89402],{"class":293},[152,157695,157696,157699,157701],{"class":281,"line":303},[152,157697,157698],{"class":483},"has_ticket ",[152,157700,1864],{"class":476},[152,157702,154936],{"class":293},[152,157704,157705],{"class":281,"line":310},[152,157706,307],{"emptyLinePlaceholder":306},[152,157708,157709,157711,157713,157715,157717,157719],{"class":281,"line":324},[152,157710,31752],{"class":293},[152,157712,157105],{"class":483},[152,157714,3370],{"class":476},[152,157716,157622],{"class":293},[152,157718,121766],{"class":476},[152,157720,157721],{"class":483}," has_ticket)\n",[152,157723,157724,157726,157728,157730,157732,157734],{"class":281,"line":329},[152,157725,31752],{"class":293},[152,157727,157105],{"class":483},[152,157729,844],{"class":476},[152,157731,157622],{"class":293},[152,157733,115538],{"class":476},[152,157735,157721],{"class":483},[152,157737,157738,157740,157742,157744],{"class":281,"line":343},[152,157739,31752],{"class":293},[152,157741,1819],{"class":483},[152,157743,157677],{"class":476},[152,157745,157721],{"class":483},[1760,157747,157749],{"id":157748},"_28-字符串定义","2.8 字符串定义",[19,157751,157752],{},"三种常见写法：",[270,157754,157756],{"className":31715,"code":157755,"language":31717,"meta":275,"style":275},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[277,157757,157758,157768,157777,157787],{"__ignoreMap":275},[152,157759,157760,157763,157765],{"class":281,"line":282},[152,157761,157762],{"class":483},"name1 ",[152,157764,1864],{"class":476},[152,157766,157767],{"class":289}," '小明'\n",[152,157769,157770,157773,157775],{"class":281,"line":303},[152,157771,157772],{"class":483},"name2 ",[152,157774,1864],{"class":476},[152,157776,150690],{"class":289},[152,157778,157779,157782,157784],{"class":281,"line":310},[152,157780,157781],{"class":483},"text ",[152,157783,1864],{"class":476},[152,157785,157786],{"class":289}," \"\"\"这是多行字符串\n",[152,157788,157789],{"class":281,"line":324},[152,157790,157791],{"class":289},"可以换行\"\"\"\n",[19,157793,157794],{},"字符串中包含引号：",[270,157796,157798],{"className":31715,"code":157797,"language":31717,"meta":275,"style":275},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[277,157799,157800,157810,157820],{"__ignoreMap":275},[152,157801,157802,157805,157807],{"class":281,"line":282},[152,157803,157804],{"class":483},"msg ",[152,157806,1864],{"class":476},[152,157808,157809],{"class":289}," \"他说:'你好'\"\n",[152,157811,157812,157815,157817],{"class":281,"line":303},[152,157813,157814],{"class":483},"msg2 ",[152,157816,1864],{"class":476},[152,157818,157819],{"class":289}," '他说:\"你好\"'\n",[152,157821,157822,157825,157827,157830,157833,157836,157838],{"class":281,"line":310},[152,157823,157824],{"class":483},"msg3 ",[152,157826,1864],{"class":476},[152,157828,157829],{"class":289}," \"他说:",[152,157831,157832],{"class":293},"\\\"",[152,157834,157835],{"class":289},"你好",[152,157837,157832],{"class":293},[152,157839,26744],{"class":289},[19,157841,157842],{},"常见转义字符：",[23,157844,157845,157854],{},[26,157846,157847],{},[29,157848,157849,157852],{},[32,157850,157851],{},"写法",[32,157853,102037],{},[43,157855,157856,157866,157875,157885,157894],{},[29,157857,157858,157863],{},[48,157859,157860],{},[277,157861,157862],{},"\\n",[48,157864,157865],{},"换行",[29,157867,157868,157872],{},[48,157869,157870],{},[277,157871,2905],{},[48,157873,157874],{},"制表符",[29,157876,157877,157882],{},[48,157878,157879],{},[277,157880,157881],{},"\\\\",[48,157883,157884],{},"反斜杠",[29,157886,157887,157891],{},[48,157888,157889],{},[277,157890,157832],{},[48,157892,157893],{},"双引号",[29,157895,157896,157901],{},[48,157897,157898],{},[277,157899,157900],{},"\\'",[48,157902,157903],{},"单引号",[1760,157905,157907],{"id":157906},"_29-字符串拼接","2.9 字符串拼接",[270,157909,157911],{"className":31715,"code":157910,"language":31717,"meta":275,"style":275},"name = \"小明\"\nprint(\"你好，\" + name)\n",[277,157912,157913,157921],{"__ignoreMap":275},[152,157914,157915,157917,157919],{"class":281,"line":282},[152,157916,147873],{"class":483},[152,157918,1864],{"class":476},[152,157920,150690],{"class":289},[152,157922,157923,157925,157927,157930,157932],{"class":281,"line":303},[152,157924,31752],{"class":293},[152,157926,1819],{"class":483},[152,157928,157929],{"class":289},"\"你好，\"",[152,157931,46903],{"class":476},[152,157933,157934],{"class":483}," name)\n",[19,157936,157937],{},"字符串只能和字符串拼接：",[270,157939,157941],{"className":31715,"code":157940,"language":31717,"meta":275,"style":275},"age = 18\nprint(\"年龄:\" + str(age))\n",[277,157942,157943,157951],{"__ignoreMap":275},[152,157944,157945,157947,157949],{"class":281,"line":282},[152,157946,147883],{"class":483},[152,157948,1864],{"class":476},[152,157950,147888],{"class":293},[152,157952,157953,157955,157957,157959,157961,157963],{"class":281,"line":303},[152,157954,31752],{"class":293},[152,157956,1819],{"class":483},[152,157958,147854],{"class":289},[152,157960,46903],{"class":476},[152,157962,75256],{"class":293},[152,157964,157965],{"class":483},"(age))\n",[19,157967,157968],{},"更推荐使用格式化字符串。",[1760,157970,157972],{"id":157971},"_210-字符串格式化","2.10 字符串格式化",[14,157974,157976],{"id":157975},"_2101-百分号格式化","2.10.1 百分号格式化",[270,157978,157980],{"className":31715,"code":157979,"language":31717,"meta":275,"style":275},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[277,157981,157982,157990,157998,158007,158011],{"__ignoreMap":275},[152,157983,157984,157986,157988],{"class":281,"line":282},[152,157985,147873],{"class":483},[152,157987,1864],{"class":476},[152,157989,150690],{"class":289},[152,157991,157992,157994,157996],{"class":281,"line":303},[152,157993,147883],{"class":483},[152,157995,1864],{"class":476},[152,157997,147888],{"class":293},[152,157999,158000,158002,158004],{"class":281,"line":310},[152,158001,156695],{"class":483},[152,158003,1864],{"class":476},[152,158005,158006],{"class":293}," 95.5\n",[152,158008,158009],{"class":281,"line":324},[152,158010,307],{"emptyLinePlaceholder":306},[152,158012,158013,158015,158017,158020,158023,158026,158029,158032,158035,158037,158039],{"class":281,"line":329},[152,158014,31752],{"class":293},[152,158016,1819],{"class":483},[152,158018,158019],{"class":289},"\"姓名:",[152,158021,158022],{"class":293},"%s",[152,158024,158025],{"class":289}," 年龄:",[152,158027,158028],{"class":293},"%d",[152,158030,158031],{"class":289}," 分数:",[152,158033,158034],{"class":293},"%.1f",[152,158036,2059],{"class":289},[152,158038,157418],{"class":476},[152,158040,158041],{"class":483}," (name, age, score))\n",[19,158043,158044],{},"常用占位符：",[23,158046,158047,158056],{},[26,158048,158049],{},[29,158050,158051,158054],{},[32,158052,158053],{},"占位符",[32,158055,38],{},[43,158057,158058,158066,158074],{},[29,158059,158060,158064],{},[48,158061,158062],{},[277,158063,158022],{},[48,158065,156561],{},[29,158067,158068,158072],{},[48,158069,158070],{},[277,158071,158028],{},[48,158073,156539],{},[29,158075,158076,158081],{},[48,158077,158078],{},[277,158079,158080],{},"%f",[48,158082,156550],{},[19,158084,158085],{},"精度控制：",[270,158087,158089],{"className":31715,"code":158088,"language":31717,"meta":275,"style":275},"price = 12.3456\nprint(\"%.2f\" % price)\n",[277,158090,158091,158100],{"__ignoreMap":275},[152,158092,158093,158095,158097],{"class":281,"line":282},[152,158094,148018],{"class":483},[152,158096,1864],{"class":476},[152,158098,158099],{"class":293}," 12.3456\n",[152,158101,158102,158104,158106,158108,158111,158113,158115],{"class":281,"line":303},[152,158103,31752],{"class":293},[152,158105,1819],{"class":483},[152,158107,2059],{"class":289},[152,158109,158110],{"class":293},"%.2f",[152,158112,2059],{"class":289},[152,158114,157418],{"class":476},[152,158116,158117],{"class":483}," price)\n",[14,158119,158121],{"id":158120},"_2102-format方法","2.10.2 format方法",[270,158123,158125],{"className":31715,"code":158124,"language":31717,"meta":275,"style":275},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[277,158126,158127,158135,158143,158147,158166,158186],{"__ignoreMap":275},[152,158128,158129,158131,158133],{"class":281,"line":282},[152,158130,147873],{"class":483},[152,158132,1864],{"class":476},[152,158134,150690],{"class":289},[152,158136,158137,158139,158141],{"class":281,"line":303},[152,158138,147883],{"class":483},[152,158140,1864],{"class":476},[152,158142,147888],{"class":293},[152,158144,158145],{"class":281,"line":310},[152,158146,307],{"emptyLinePlaceholder":306},[152,158148,158149,158151,158153,158155,158157,158159,158161,158163],{"class":281,"line":324},[152,158150,31752],{"class":293},[152,158152,1819],{"class":483},[152,158154,158019],{"class":289},[152,158156,33796],{"class":293},[152,158158,158025],{"class":289},[152,158160,33796],{"class":293},[152,158162,2059],{"class":289},[152,158164,158165],{"class":483},".format(name, age))\n",[152,158167,158168,158170,158172,158174,158177,158179,158182,158184],{"class":281,"line":329},[152,158169,31752],{"class":293},[152,158171,1819],{"class":483},[152,158173,158019],{"class":289},[152,158175,158176],{"class":293},"{0}",[152,158178,158025],{"class":289},[152,158180,158181],{"class":293},"{1}",[152,158183,2059],{"class":289},[152,158185,158165],{"class":483},[152,158187,158188,158190,158192,158194,158197,158199,158202,158204,158207,158209,158211,158214,158216,158218],{"class":281,"line":343},[152,158189,31752],{"class":293},[152,158191,1819],{"class":483},[152,158193,158019],{"class":289},[152,158195,158196],{"class":293},"{name}",[152,158198,158025],{"class":289},[152,158200,158201],{"class":293},"{age}",[152,158203,2059],{"class":289},[152,158205,158206],{"class":483},".format(",[152,158208,81147],{"class":6858},[152,158210,1864],{"class":476},[152,158212,158213],{"class":483},"name, ",[152,158215,71558],{"class":6858},[152,158217,1864],{"class":476},[152,158219,158220],{"class":483},"age))\n",[14,158222,158224],{"id":158223},"_2103-f-string","2.10.3 f-string",[19,158226,158227],{},"推荐写法：",[270,158229,158231],{"className":31715,"code":158230,"language":31717,"meta":275,"style":275},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[277,158232,158233,158241,158249,158257,158261],{"__ignoreMap":275},[152,158234,158235,158237,158239],{"class":281,"line":282},[152,158236,147873],{"class":483},[152,158238,1864],{"class":476},[152,158240,150690],{"class":289},[152,158242,158243,158245,158247],{"class":281,"line":303},[152,158244,147883],{"class":483},[152,158246,1864],{"class":476},[152,158248,147888],{"class":293},[152,158250,158251,158253,158255],{"class":281,"line":310},[152,158252,156695],{"class":483},[152,158254,1864],{"class":476},[152,158256,158006],{"class":293},[152,158258,158259],{"class":281,"line":324},[152,158260,307],{"emptyLinePlaceholder":306},[152,158262,158263,158265,158267,158269,158271,158273,158275,158277,158279,158281,158283,158285,158287,158289,158292,158295,158297,158299],{"class":281,"line":329},[152,158264,31752],{"class":293},[152,158266,1819],{"class":483},[152,158268,1870],{"class":476},[152,158270,158019],{"class":289},[152,158272,2703],{"class":293},[152,158274,81147],{"class":483},[152,158276,2752],{"class":293},[152,158278,158025],{"class":289},[152,158280,2703],{"class":293},[152,158282,71558],{"class":483},[152,158284,2752],{"class":293},[152,158286,158031],{"class":289},[152,158288,2703],{"class":293},[152,158290,158291],{"class":483},"score",[152,158293,158294],{"class":476},":.1f",[152,158296,2752],{"class":293},[152,158298,2059],{"class":289},[152,158300,1825],{"class":483},[19,158302,158303],{},"表达式也可以放进去：",[270,158305,158307],{"className":31715,"code":158306,"language":31717,"meta":275,"style":275},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[277,158308,158309,158317,158325],{"__ignoreMap":275},[152,158310,158311,158313,158315],{"class":281,"line":282},[152,158312,148018],{"class":483},[152,158314,1864],{"class":476},[152,158316,148023],{"class":293},[152,158318,158319,158321,158323],{"class":281,"line":303},[152,158320,148028],{"class":483},[152,158322,1864],{"class":476},[152,158324,55764],{"class":293},[152,158326,158327,158329,158331,158333,158336,158338,158340,158342,158345,158347,158350],{"class":281,"line":310},[152,158328,31752],{"class":293},[152,158330,1819],{"class":483},[152,158332,1870],{"class":476},[152,158334,158335],{"class":289},"\"总价:",[152,158337,2703],{"class":293},[152,158339,148018],{"class":483},[152,158341,2263],{"class":476},[152,158343,158344],{"class":483}," count",[152,158346,2752],{"class":293},[152,158348,158349],{"class":289},"元\"",[152,158351,1825],{"class":483},[1760,158353,158355],{"id":158354},"_211-input输入","2.11 input输入",[19,158357,158358,158361],{},[277,158359,158360],{},"input()"," 会暂停程序，等待用户输入。",[270,158363,158365],{"className":31715,"code":158364,"language":31717,"meta":275,"style":275},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[277,158366,158367,158381],{"__ignoreMap":275},[152,158368,158369,158371,158373,158375,158377,158379],{"class":281,"line":282},[152,158370,147873],{"class":483},[152,158372,1864],{"class":476},[152,158374,61942],{"class":293},[152,158376,1819],{"class":483},[152,158378,153716],{"class":289},[152,158380,1825],{"class":483},[152,158382,158383,158385,158387,158389,158392,158394,158396,158398,158400],{"class":281,"line":303},[152,158384,31752],{"class":293},[152,158386,1819],{"class":483},[152,158388,1870],{"class":476},[152,158390,158391],{"class":289},"\"你好，",[152,158393,2703],{"class":293},[152,158395,81147],{"class":483},[152,158397,2752],{"class":293},[152,158399,2059],{"class":289},[152,158401,1825],{"class":483},[19,158403,158404],{},"输入整数：",[270,158406,158408],{"className":31715,"code":158407,"language":31717,"meta":275,"style":275},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[277,158409,158410,158428],{"__ignoreMap":275},[152,158411,158412,158414,158416,158418,158420,158422,158424,158426],{"class":281,"line":282},[152,158413,147883],{"class":483},[152,158415,1864],{"class":476},[152,158417,4033],{"class":293},[152,158419,1819],{"class":483},[152,158421,55158],{"class":293},[152,158423,1819],{"class":483},[152,158425,153731],{"class":289},[152,158427,31834],{"class":483},[152,158429,158430,158432,158434,158436,158439,158441,158443,158445,158448,158450],{"class":281,"line":303},[152,158431,31752],{"class":293},[152,158433,1819],{"class":483},[152,158435,1870],{"class":476},[152,158437,158438],{"class":289},"\"明年你",[152,158440,2703],{"class":293},[152,158442,147883],{"class":483},[152,158444,2289],{"class":476},[152,158446,158447],{"class":293}," 1}",[152,158449,150741],{"class":289},[152,158451,1825],{"class":483},[19,158453,158454],{},"输入小数：",[270,158456,158458],{"className":31715,"code":158457,"language":31717,"meta":275,"style":275},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[277,158459,158460,158479],{"__ignoreMap":275},[152,158461,158462,158464,158466,158468,158470,158472,158474,158477],{"class":281,"line":282},[152,158463,156668],{"class":483},[152,158465,1864],{"class":476},[152,158467,111134],{"class":293},[152,158469,1819],{"class":483},[152,158471,55158],{"class":293},[152,158473,1819],{"class":483},[152,158475,158476],{"class":289},"\"请输入身高:\"",[152,158478,31834],{"class":483},[152,158480,158481,158483,158485,158487,158490,158492,158494,158497,158499,158502],{"class":281,"line":303},[152,158482,31752],{"class":293},[152,158484,1819],{"class":483},[152,158486,1870],{"class":476},[152,158488,158489],{"class":289},"\"身高:",[152,158491,2703],{"class":293},[152,158493,26592],{"class":483},[152,158495,158496],{"class":476},":.2f",[152,158498,2752],{"class":293},[152,158500,158501],{"class":289},"米\"",[152,158503,1825],{"class":483},[1760,158505,158507],{"id":158506},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158509,124629],{},[416,158511,158512,158515,158518,158521],{},[419,158513,158514],{},"输入商品单价。",[419,158516,158517],{},"输入购买数量。",[419,158519,158520],{},"输入折扣，例如 0.8 表示八折。",[419,158522,158523],{},"输出最终金额，保留两位小数。",[19,158525,11651],{},[270,158527,158529],{"className":31715,"code":158528,"language":31717,"meta":275,"style":275},"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",[277,158530,158531,158550,158569,158589,158593,158613,158617,158640,158661,158683],{"__ignoreMap":275},[152,158532,158533,158535,158537,158539,158541,158543,158545,158548],{"class":281,"line":282},[152,158534,148018],{"class":483},[152,158536,1864],{"class":476},[152,158538,111134],{"class":293},[152,158540,1819],{"class":483},[152,158542,55158],{"class":293},[152,158544,1819],{"class":483},[152,158546,158547],{"class":289},"\"请输入商品单价:\"",[152,158549,31834],{"class":483},[152,158551,158552,158554,158556,158558,158560,158562,158564,158567],{"class":281,"line":303},[152,158553,148028],{"class":483},[152,158555,1864],{"class":476},[152,158557,4033],{"class":293},[152,158559,1819],{"class":483},[152,158561,55158],{"class":293},[152,158563,1819],{"class":483},[152,158565,158566],{"class":289},"\"请输入购买数量:\"",[152,158568,31834],{"class":483},[152,158570,158571,158574,158576,158578,158580,158582,158584,158587],{"class":281,"line":310},[152,158572,158573],{"class":483},"discount ",[152,158575,1864],{"class":476},[152,158577,111134],{"class":293},[152,158579,1819],{"class":483},[152,158581,55158],{"class":293},[152,158583,1819],{"class":483},[152,158585,158586],{"class":289},"\"请输入折扣:\"",[152,158588,31834],{"class":483},[152,158590,158591],{"class":281,"line":324},[152,158592,307],{"emptyLinePlaceholder":306},[152,158594,158595,158598,158600,158603,158605,158608,158610],{"class":281,"line":329},[152,158596,158597],{"class":483},"total ",[152,158599,1864],{"class":476},[152,158601,158602],{"class":483}," price ",[152,158604,2263],{"class":476},[152,158606,158607],{"class":483}," count ",[152,158609,2263],{"class":476},[152,158611,158612],{"class":483}," discount\n",[152,158614,158615],{"class":281,"line":343},[152,158616,307],{"emptyLinePlaceholder":306},[152,158618,158619,158621,158623,158625,158628,158630,158632,158634,158636,158638],{"class":281,"line":348},[152,158620,31752],{"class":293},[152,158622,1819],{"class":483},[152,158624,1870],{"class":476},[152,158626,158627],{"class":289},"\"商品单价:",[152,158629,2703],{"class":293},[152,158631,81152],{"class":483},[152,158633,158496],{"class":476},[152,158635,2752],{"class":293},[152,158637,2059],{"class":289},[152,158639,1825],{"class":483},[152,158641,158642,158644,158646,158648,158651,158653,158655,158657,158659],{"class":281,"line":362},[152,158643,31752],{"class":293},[152,158645,1819],{"class":483},[152,158647,1870],{"class":476},[152,158649,158650],{"class":289},"\"购买数量:",[152,158652,2703],{"class":293},[152,158654,85771],{"class":483},[152,158656,2752],{"class":293},[152,158658,2059],{"class":289},[152,158660,1825],{"class":483},[152,158662,158663,158665,158667,158669,158672,158674,158677,158679,158681],{"class":281,"line":367},[152,158664,31752],{"class":293},[152,158666,1819],{"class":483},[152,158668,1870],{"class":476},[152,158670,158671],{"class":289},"\"折扣:",[152,158673,2703],{"class":293},[152,158675,158676],{"class":483},"discount",[152,158678,2752],{"class":293},[152,158680,2059],{"class":289},[152,158682,1825],{"class":483},[152,158684,158685,158687,158689,158691,158694,158696,158699,158701,158703,158705],{"class":281,"line":381},[152,158686,31752],{"class":293},[152,158688,1819],{"class":483},[152,158690,1870],{"class":476},[152,158692,158693],{"class":289},"\"应付金额:",[152,158695,2703],{"class":293},[152,158697,158698],{"class":483},"total",[152,158700,158496],{"class":476},[152,158702,2752],{"class":293},[152,158704,158349],{"class":289},[152,158706,1825],{"class":483},[1760,158708,158710],{"id":158709},"_213-易错点","2.13 易错点",[416,158712,158713,158718,158724,158732,158735],{},[419,158714,158715,158717],{},[277,158716,158360],{}," 的结果是字符串，做运算前要转换。",[419,158719,158720,158721,29984],{},"字符串拼接时，数字要先 ",[277,158722,158723],{},"str()",[419,158725,158726,158728,158729,158731],{},[277,158727,1864],{}," 是赋值，",[277,158730,4592],{}," 是比较。",[419,158733,158734],{},"Python 没有自增自减运算符。",[419,158736,158737],{},"浮点数计算可能有精度误差：",[270,158739,158741],{"className":31715,"code":158740,"language":31717,"meta":275,"style":275},"print(0.1 + 0.2)\n",[277,158742,158743],{"__ignoreMap":275},[152,158744,158745,158747,158749,158751,158753,158756],{"class":281,"line":282},[152,158746,31752],{"class":293},[152,158748,1819],{"class":483},[152,158750,87547],{"class":293},[152,158752,46903],{"class":476},[152,158754,158755],{"class":293}," 0.2",[152,158757,1825],{"class":483},[19,158759,158760,158761,158764],{},"金额计算如果要求严格，可以后续学习 ",[277,158762,158763],{},"decimal"," 模块。",[1760,158766,158768],{"id":158767},"_214-本章练习","2.14 本章练习",[416,158770,158771,158774,158777,158780,158783],{},[419,158772,158773],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[419,158775,158776],{},"输入圆的半径，计算面积，保留两位小数。",[419,158778,158779],{},"输入工资和奖金，计算总收入。",[419,158781,158782],{},"输入摄氏温度，转换为华氏温度。",[419,158784,158785],{},"写一个 BMI 计算程序：",[270,158787,158790],{"className":158788,"code":158789,"language":6829,"meta":275},[6827],"BMI = 体重kg \u002F 身高m ** 2\n",[277,158791,158789],{"__ignoreMap":275},[1736,158793,158794],{},"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":275,"searchDepth":303,"depth":303,"links":158796},[158797,158798,158799,158800,158801,158802,158803,158809,158810,158811,158816,158817,158818,158819],{"id":156358,"depth":303,"text":156359},{"id":156467,"depth":303,"text":156468},{"id":156638,"depth":303,"text":156639},{"id":156715,"depth":303,"text":156716},{"id":52068,"depth":303,"text":52069},{"id":157021,"depth":303,"text":157022},{"id":157247,"depth":303,"text":157248,"children":158804},[158805,158806,158807,158808],{"id":157251,"depth":310,"text":157252},{"id":157445,"depth":310,"text":157446},{"id":157533,"depth":310,"text":157534},{"id":157639,"depth":310,"text":157640},{"id":157748,"depth":303,"text":157749},{"id":157906,"depth":303,"text":157907},{"id":157971,"depth":303,"text":157972,"children":158812},[158813,158814,158815],{"id":157975,"depth":310,"text":157976},{"id":158120,"depth":310,"text":158121},{"id":158223,"depth":310,"text":158224},{"id":158354,"depth":303,"text":158355},{"id":158506,"depth":303,"text":158507},{"id":158709,"depth":303,"text":158710},{"id":158767,"depth":303,"text":158768},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156350,"description":24991},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158826,"title":158827,"body":158828,"description":24991,"extension":1744,"meta":160464,"navigation":306,"path":160465,"seo":160466,"stem":160467,"__hash__":160468},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158829,"toc":160445},[158830,158833,158837,158840,158855,158858,158886,158890,158940,158942,158958,158961,158987,158990,158994,159061,159064,159080,159084,159087,159205,159208,159215,159264,159270,159274,159277,159390,159393,159397,159401,159404,159454,159458,159461,159511,159515,159518,159556,159560,159563,159609,159612,159647,159651,159656,159659,159705,159707,159774,159778,159784,159895,159904,159908,159910,159921,159923,160089,160093,160095,160109,160111,160325,160329,160348,160365,160368,160414,160418,160442],[10,158831,158827],{"id":158832},"_3-判断语句",[1760,158834,158836],{"id":158835},"_31-布尔值","3.1 布尔值",[19,158838,158839],{},"判断语句依赖布尔值：",[270,158841,158843],{"className":31715,"code":158842,"language":31717,"meta":275,"style":275},"True\nFalse\n",[277,158844,158845,158850],{"__ignoreMap":275},[152,158846,158847],{"class":281,"line":282},[152,158848,158849],{"class":293},"True\n",[152,158851,158852],{"class":281,"line":303},[152,158853,158854],{"class":293},"False\n",[19,158856,158857],{},"比较表达式会产生布尔值：",[270,158859,158861],{"className":31715,"code":158860,"language":31717,"meta":275,"style":275},"age = 18\nprint(age >= 18)  # True\n",[277,158862,158863,158871],{"__ignoreMap":275},[152,158864,158865,158867,158869],{"class":281,"line":282},[152,158866,147883],{"class":483},[152,158868,1864],{"class":476},[152,158870,147888],{"class":293},[152,158872,158873,158875,158877,158879,158881,158883],{"class":281,"line":303},[152,158874,31752],{"class":293},[152,158876,157105],{"class":483},[152,158878,3370],{"class":476},[152,158880,157622],{"class":293},[152,158882,47145],{"class":483},[152,158884,158885],{"class":866},"# True\n",[1760,158887,158889],{"id":158888},"_32-if基础语法","3.2 if基础语法",[270,158891,158893],{"className":31715,"code":158892,"language":31717,"meta":275,"style":275},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[277,158894,158895,158913,158917,158929],{"__ignoreMap":275},[152,158896,158897,158899,158901,158903,158905,158907,158909,158911],{"class":281,"line":282},[152,158898,147883],{"class":483},[152,158900,1864],{"class":476},[152,158902,4033],{"class":293},[152,158904,1819],{"class":483},[152,158906,55158],{"class":293},[152,158908,1819],{"class":483},[152,158910,153731],{"class":289},[152,158912,31834],{"class":483},[152,158914,158915],{"class":281,"line":303},[152,158916,307],{"emptyLinePlaceholder":306},[152,158918,158919,158921,158923,158925,158927],{"class":281,"line":310},[152,158920,3202],{"class":476},[152,158922,17322],{"class":483},[152,158924,3370],{"class":476},[152,158926,157622],{"class":293},[152,158928,5382],{"class":483},[152,158930,158931,158933,158935,158938],{"class":281,"line":324},[152,158932,32636],{"class":293},[152,158934,1819],{"class":483},[152,158936,158937],{"class":289},"\"可以进入网吧\"",[152,158939,1825],{"class":483},[19,158941,10657],{},[416,158943,158944,158949,158952,158955],{},[419,158945,158946,158948],{},[277,158947,3202],{}," 后面是条件表达式。",[419,158950,158951],{},"条件后面必须写冒号。",[419,158953,158954],{},"条件成立时执行缩进代码块。",[419,158956,158957],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158959,158960],{},"错误示例：",[270,158962,158964],{"className":31715,"code":158963,"language":31717,"meta":275,"style":275},"if age >= 18\n    print(\"可以进入\")\n",[277,158965,158966,158976],{"__ignoreMap":275},[152,158967,158968,158970,158972,158974],{"class":281,"line":282},[152,158969,3202],{"class":476},[152,158971,17322],{"class":483},[152,158973,3370],{"class":476},[152,158975,147888],{"class":293},[152,158977,158978,158980,158982,158985],{"class":281,"line":303},[152,158979,32636],{"class":293},[152,158981,1819],{"class":483},[152,158983,158984],{"class":289},"\"可以进入\"",[152,158986,1825],{"class":483},[19,158988,158989],{},"缺少冒号。",[1760,158991,158993],{"id":158992},"_33-if-else","3.3 if else",[270,158995,158997],{"className":31715,"code":158996,"language":31717,"meta":275,"style":275},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[277,158998,158999,159017,159021,159033,159044,159050],{"__ignoreMap":275},[152,159000,159001,159003,159005,159007,159009,159011,159013,159015],{"class":281,"line":282},[152,159002,147883],{"class":483},[152,159004,1864],{"class":476},[152,159006,4033],{"class":293},[152,159008,1819],{"class":483},[152,159010,55158],{"class":293},[152,159012,1819],{"class":483},[152,159014,153731],{"class":289},[152,159016,31834],{"class":483},[152,159018,159019],{"class":281,"line":303},[152,159020,307],{"emptyLinePlaceholder":306},[152,159022,159023,159025,159027,159029,159031],{"class":281,"line":310},[152,159024,3202],{"class":476},[152,159026,17322],{"class":483},[152,159028,3370],{"class":476},[152,159030,157622],{"class":293},[152,159032,5382],{"class":483},[152,159034,159035,159037,159039,159042],{"class":281,"line":324},[152,159036,32636],{"class":293},[152,159038,1819],{"class":483},[152,159040,159041],{"class":289},"\"成年人\"",[152,159043,1825],{"class":483},[152,159045,159046,159048],{"class":281,"line":329},[152,159047,3361],{"class":476},[152,159049,5382],{"class":483},[152,159051,159052,159054,159056,159059],{"class":281,"line":343},[152,159053,32636],{"class":293},[152,159055,1819],{"class":483},[152,159057,159058],{"class":289},"\"未成年人\"",[152,159060,1825],{"class":483},[19,159062,159063],{},"执行逻辑：",[416,159065,159066,159072,159077],{},[419,159067,159068,159069,159071],{},"条件成立，执行 ",[277,159070,3202],{}," 代码块。",[419,159073,159074,159075,159071],{},"条件不成立，执行 ",[277,159076,3361],{},[419,159078,159079],{},"两个代码块只会执行其中一个。",[1760,159081,159083],{"id":159082},"_34-if-elif-else","3.4 if elif else",[19,159085,159086],{},"多条件判断：",[270,159088,159090],{"className":31715,"code":159089,"language":31717,"meta":275,"style":275},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[277,159091,159092,159110,159114,159128,159139,159153,159164,159177,159188,159194],{"__ignoreMap":275},[152,159093,159094,159096,159098,159100,159102,159104,159106,159108],{"class":281,"line":282},[152,159095,156695],{"class":483},[152,159097,1864],{"class":476},[152,159099,4033],{"class":293},[152,159101,1819],{"class":483},[152,159103,55158],{"class":293},[152,159105,1819],{"class":483},[152,159107,153746],{"class":289},[152,159109,31834],{"class":483},[152,159111,159112],{"class":281,"line":303},[152,159113,307],{"emptyLinePlaceholder":306},[152,159115,159116,159118,159121,159123,159126],{"class":281,"line":310},[152,159117,3202],{"class":476},[152,159119,159120],{"class":483}," score ",[152,159122,3370],{"class":476},[152,159124,159125],{"class":293}," 90",[152,159127,5382],{"class":483},[152,159129,159130,159132,159134,159137],{"class":281,"line":324},[152,159131,32636],{"class":293},[152,159133,1819],{"class":483},[152,159135,159136],{"class":289},"\"优秀\"",[152,159138,1825],{"class":483},[152,159140,159141,159144,159146,159148,159151],{"class":281,"line":329},[152,159142,159143],{"class":476},"elif",[152,159145,159120],{"class":483},[152,159147,3370],{"class":476},[152,159149,159150],{"class":293}," 80",[152,159152,5382],{"class":483},[152,159154,159155,159157,159159,159162],{"class":281,"line":343},[152,159156,32636],{"class":293},[152,159158,1819],{"class":483},[152,159160,159161],{"class":289},"\"良好\"",[152,159163,1825],{"class":483},[152,159165,159166,159168,159170,159172,159175],{"class":281,"line":348},[152,159167,159143],{"class":476},[152,159169,159120],{"class":483},[152,159171,3370],{"class":476},[152,159173,159174],{"class":293}," 60",[152,159176,5382],{"class":483},[152,159178,159179,159181,159183,159186],{"class":281,"line":362},[152,159180,32636],{"class":293},[152,159182,1819],{"class":483},[152,159184,159185],{"class":289},"\"及格\"",[152,159187,1825],{"class":483},[152,159189,159190,159192],{"class":281,"line":367},[152,159191,3361],{"class":476},[152,159193,5382],{"class":483},[152,159195,159196,159198,159200,159203],{"class":281,"line":381},[152,159197,32636],{"class":293},[152,159199,1819],{"class":483},[152,159201,159202],{"class":289},"\"不及格\"",[152,159204,1825],{"class":483},[19,159206,159207],{},"注意判断顺序很重要。",[19,159209,159210,159211,159214],{},"如果把 ",[277,159212,159213],{},"score >= 60"," 放在最前面：",[270,159216,159218],{"className":31715,"code":159217,"language":31717,"meta":275,"style":275},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[277,159219,159220,159232,159242,159254],{"__ignoreMap":275},[152,159221,159222,159224,159226,159228,159230],{"class":281,"line":282},[152,159223,3202],{"class":476},[152,159225,159120],{"class":483},[152,159227,3370],{"class":476},[152,159229,159174],{"class":293},[152,159231,5382],{"class":483},[152,159233,159234,159236,159238,159240],{"class":281,"line":303},[152,159235,32636],{"class":293},[152,159237,1819],{"class":483},[152,159239,159185],{"class":289},[152,159241,1825],{"class":483},[152,159243,159244,159246,159248,159250,159252],{"class":281,"line":310},[152,159245,159143],{"class":476},[152,159247,159120],{"class":483},[152,159249,3370],{"class":476},[152,159251,159125],{"class":293},[152,159253,5382],{"class":483},[152,159255,159256,159258,159260,159262],{"class":281,"line":324},[152,159257,32636],{"class":293},[152,159259,1819],{"class":483},[152,159261,159136],{"class":289},[152,159263,1825],{"class":483},[19,159265,159266,159267,159269],{},"成绩 95 会先满足 ",[277,159268,159213],{},"，后面的优秀分支就不会执行。",[1760,159271,159273],{"id":159272},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159275,159276],{},"嵌套判断就是在一个判断内部再写判断。",[270,159278,159280],{"className":31715,"code":159279,"language":31717,"meta":275,"style":275},"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",[277,159281,159282,159300,159315,159319,159331,159345,159355,159362,159373,159379],{"__ignoreMap":275},[152,159283,159284,159286,159288,159290,159292,159294,159296,159298],{"class":281,"line":282},[152,159285,147883],{"class":483},[152,159287,1864],{"class":476},[152,159289,4033],{"class":293},[152,159291,1819],{"class":483},[152,159293,55158],{"class":293},[152,159295,1819],{"class":483},[152,159297,153731],{"class":289},[152,159299,31834],{"class":483},[152,159301,159302,159304,159306,159308,159310,159313],{"class":281,"line":303},[152,159303,157698],{"class":483},[152,159305,1864],{"class":476},[152,159307,61942],{"class":293},[152,159309,1819],{"class":483},[152,159311,159312],{"class":289},"\"是否有票(y\u002Fn):\"",[152,159314,1825],{"class":483},[152,159316,159317],{"class":281,"line":310},[152,159318,307],{"emptyLinePlaceholder":306},[152,159320,159321,159323,159325,159327,159329],{"class":281,"line":324},[152,159322,3202],{"class":476},[152,159324,17322],{"class":483},[152,159326,3370],{"class":476},[152,159328,157622],{"class":293},[152,159330,5382],{"class":483},[152,159332,159333,159335,159338,159340,159343],{"class":281,"line":329},[152,159334,4744],{"class":476},[152,159336,159337],{"class":483}," has_ticket ",[152,159339,4592],{"class":476},[152,159341,159342],{"class":289}," \"y\"",[152,159344,5382],{"class":483},[152,159346,159347,159349,159351,159353],{"class":281,"line":343},[152,159348,33788],{"class":293},[152,159350,1819],{"class":483},[152,159352,158984],{"class":289},[152,159354,1825],{"class":483},[152,159356,159357,159360],{"class":281,"line":348},[152,159358,159359],{"class":476},"    else",[152,159361,5382],{"class":483},[152,159363,159364,159366,159368,159371],{"class":281,"line":362},[152,159365,33788],{"class":293},[152,159367,1819],{"class":483},[152,159369,159370],{"class":289},"\"请先买票\"",[152,159372,1825],{"class":483},[152,159374,159375,159377],{"class":281,"line":367},[152,159376,3361],{"class":476},[152,159378,5382],{"class":483},[152,159380,159381,159383,159385,159388],{"class":281,"line":381},[152,159382,32636],{"class":293},[152,159384,1819],{"class":483},[152,159386,159387],{"class":289},"\"未成年人禁止进入\"",[152,159389,1825],{"class":483},[19,159391,159392],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[1760,159394,159396],{"id":159395},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[14,159398,159400],{"id":159399},"_361-and","3.6.1 and",[19,159402,159403],{},"两个条件都成立才成立。",[270,159405,159407],{"className":31715,"code":159406,"language":31717,"meta":275,"style":275},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[277,159408,159409,159417,159425,159429,159444],{"__ignoreMap":275},[152,159410,159411,159413,159415],{"class":281,"line":282},[152,159412,147883],{"class":483},[152,159414,1864],{"class":476},[152,159416,89402],{"class":293},[152,159418,159419,159421,159423],{"class":281,"line":303},[152,159420,157698],{"class":483},[152,159422,1864],{"class":476},[152,159424,154936],{"class":293},[152,159426,159427],{"class":281,"line":310},[152,159428,307],{"emptyLinePlaceholder":306},[152,159430,159431,159433,159435,159437,159439,159441],{"class":281,"line":324},[152,159432,3202],{"class":476},[152,159434,17322],{"class":483},[152,159436,3370],{"class":476},[152,159438,157622],{"class":293},[152,159440,121766],{"class":476},[152,159442,159443],{"class":483}," has_ticket:\n",[152,159445,159446,159448,159450,159452],{"class":281,"line":329},[152,159447,32636],{"class":293},[152,159449,1819],{"class":483},[152,159451,158984],{"class":289},[152,159453,1825],{"class":483},[14,159455,159457],{"id":159456},"_362-or","3.6.2 or",[19,159459,159460],{},"只要一个条件成立就成立。",[270,159462,159464],{"className":31715,"code":159463,"language":31717,"meta":275,"style":275},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[277,159465,159466,159475,159484,159488,159500],{"__ignoreMap":275},[152,159467,159468,159471,159473],{"class":281,"line":282},[152,159469,159470],{"class":483},"is_vip ",[152,159472,1864],{"class":476},[152,159474,127144],{"class":293},[152,159476,159477,159480,159482],{"class":281,"line":303},[152,159478,159479],{"class":483},"coupon ",[152,159481,1864],{"class":476},[152,159483,154936],{"class":293},[152,159485,159486],{"class":281,"line":310},[152,159487,307],{"emptyLinePlaceholder":306},[152,159489,159490,159492,159495,159497],{"class":281,"line":324},[152,159491,3202],{"class":476},[152,159493,159494],{"class":483}," is_vip ",[152,159496,116427],{"class":476},[152,159498,159499],{"class":483}," coupon:\n",[152,159501,159502,159504,159506,159509],{"class":281,"line":329},[152,159503,32636],{"class":293},[152,159505,1819],{"class":483},[152,159507,159508],{"class":289},"\"可以享受优惠\"",[152,159510,1825],{"class":483},[14,159512,159514],{"id":159513},"_363-not","3.6.3 not",[19,159516,159517],{},"取反。",[270,159519,159521],{"className":31715,"code":159520,"language":31717,"meta":275,"style":275},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[277,159522,159523,159532,159536,159545],{"__ignoreMap":275},[152,159524,159525,159528,159530],{"class":281,"line":282},[152,159526,159527],{"class":483},"is_closed ",[152,159529,1864],{"class":476},[152,159531,127144],{"class":293},[152,159533,159534],{"class":281,"line":303},[152,159535,307],{"emptyLinePlaceholder":306},[152,159537,159538,159540,159542],{"class":281,"line":310},[152,159539,3202],{"class":476},[152,159541,40267],{"class":476},[152,159543,159544],{"class":483}," is_closed:\n",[152,159546,159547,159549,159551,159554],{"class":281,"line":324},[152,159548,32636],{"class":293},[152,159550,1819],{"class":483},[152,159552,159553],{"class":289},"\"店铺营业中\"",[152,159555,1825],{"class":483},[1760,159557,159559],{"id":159558},"_37-链式比较","3.7 链式比较",[19,159561,159562],{},"Python 支持链式比较：",[270,159564,159566],{"className":31715,"code":159565,"language":31717,"meta":275,"style":275},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[277,159567,159568,159577,159581,159598],{"__ignoreMap":275},[152,159569,159570,159572,159574],{"class":281,"line":282},[152,159571,156695],{"class":483},[152,159573,1864],{"class":476},[152,159575,159576],{"class":293}," 85\n",[152,159578,159579],{"class":281,"line":303},[152,159580,307],{"emptyLinePlaceholder":306},[152,159582,159583,159585,159587,159590,159592,159594,159596],{"class":281,"line":310},[152,159584,3202],{"class":476},[152,159586,5735],{"class":293},[152,159588,159589],{"class":476}," \u003C=",[152,159591,159120],{"class":483},[152,159593,3259],{"class":476},[152,159595,7396],{"class":293},[152,159597,5382],{"class":483},[152,159599,159600,159602,159604,159607],{"class":281,"line":324},[152,159601,32636],{"class":293},[152,159603,1819],{"class":483},[152,159605,159606],{"class":289},"\"成绩合法\"",[152,159608,1825],{"class":483},[19,159610,159611],{},"等价于：",[270,159613,159615],{"className":31715,"code":159614,"language":31717,"meta":275,"style":275},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[277,159616,159617,159637],{"__ignoreMap":275},[152,159618,159619,159621,159623,159625,159627,159629,159631,159633,159635],{"class":281,"line":282},[152,159620,3202],{"class":476},[152,159622,159120],{"class":483},[152,159624,3370],{"class":476},[152,159626,5735],{"class":293},[152,159628,121766],{"class":476},[152,159630,159120],{"class":483},[152,159632,3259],{"class":476},[152,159634,7396],{"class":293},[152,159636,5382],{"class":483},[152,159638,159639,159641,159643,159645],{"class":281,"line":303},[152,159640,32636],{"class":293},[152,159642,1819],{"class":483},[152,159644,159606],{"class":289},[152,159646,1825],{"class":483},[1760,159648,159650],{"id":159649},"_38-真值和假值","3.8 真值和假值",[19,159652,117804,159653,159655],{},[277,159654,3202],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159657,159658],{},"假值：",[270,159660,159662],{"className":31715,"code":159661,"language":31717,"meta":275,"style":275},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[277,159663,159664,159668,159673,159677,159681,159686,159690,159694,159699],{"__ignoreMap":275},[152,159665,159666],{"class":281,"line":282},[152,159667,158854],{"class":293},[152,159669,159670],{"class":281,"line":303},[152,159671,159672],{"class":293},"None\n",[152,159674,159675],{"class":281,"line":310},[152,159676,4728],{"class":293},[152,159678,159679],{"class":281,"line":324},[152,159680,33679],{"class":293},[152,159682,159683],{"class":281,"line":329},[152,159684,159685],{"class":289},"\"\"\n",[152,159687,159688],{"class":281,"line":343},[152,159689,33694],{"class":483},[152,159691,159692],{"class":281,"line":348},[152,159693,3627],{"class":483},[152,159695,159696],{"class":281,"line":362},[152,159697,159698],{"class":483},"{}\n",[152,159700,159701,159703],{"class":281,"line":367},[152,159702,156627],{"class":293},[152,159704,3627],{"class":483},[19,159706,16750],{},[270,159708,159710],{"className":31715,"code":159709,"language":31717,"meta":275,"style":275},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[277,159711,159712,159726,159730,159737,159757,159763],{"__ignoreMap":275},[152,159713,159714,159716,159718,159720,159722,159724],{"class":281,"line":282},[152,159715,147873],{"class":483},[152,159717,1864],{"class":476},[152,159719,61942],{"class":293},[152,159721,1819],{"class":483},[152,159723,153716],{"class":289},[152,159725,1825],{"class":483},[152,159727,159728],{"class":281,"line":303},[152,159729,307],{"emptyLinePlaceholder":306},[152,159731,159732,159734],{"class":281,"line":310},[152,159733,3202],{"class":476},[152,159735,159736],{"class":483}," name:\n",[152,159738,159739,159741,159743,159745,159747,159749,159751,159753,159755],{"class":281,"line":324},[152,159740,32636],{"class":293},[152,159742,1819],{"class":483},[152,159744,1870],{"class":476},[152,159746,158391],{"class":289},[152,159748,2703],{"class":293},[152,159750,81147],{"class":483},[152,159752,2752],{"class":293},[152,159754,2059],{"class":289},[152,159756,1825],{"class":483},[152,159758,159759,159761],{"class":281,"line":329},[152,159760,3361],{"class":476},[152,159762,5382],{"class":483},[152,159764,159765,159767,159769,159772],{"class":281,"line":343},[152,159766,32636],{"class":293},[152,159768,1819],{"class":483},[152,159770,159771],{"class":289},"\"姓名不能为空\"",[152,159773,1825],{"class":483},[1760,159775,159777],{"id":159776},"_39-match语句","3.9 match语句",[19,159779,159780,159781,159783],{},"Python 3.10 开始支持 ",[277,159782,72602],{},"。它适合处理固定选项。",[270,159785,159787],{"className":31715,"code":159786,"language":31717,"meta":275,"style":275},"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",[277,159788,159789,159805,159809,159816,159826,159837,159846,159857,159866,159877,159884],{"__ignoreMap":275},[152,159790,159791,159794,159796,159798,159800,159803],{"class":281,"line":282},[152,159792,159793],{"class":483},"command ",[152,159795,1864],{"class":476},[152,159797,61942],{"class":293},[152,159799,1819],{"class":483},[152,159801,159802],{"class":289},"\"请输入命令:\"",[152,159804,1825],{"class":483},[152,159806,159807],{"class":281,"line":303},[152,159808,307],{"emptyLinePlaceholder":306},[152,159810,159811,159813],{"class":281,"line":310},[152,159812,72602],{"class":476},[152,159814,159815],{"class":483}," command:\n",[152,159817,159818,159821,159824],{"class":281,"line":324},[152,159819,159820],{"class":476},"    case",[152,159822,159823],{"class":289}," \"start\"",[152,159825,5382],{"class":483},[152,159827,159828,159830,159832,159835],{"class":281,"line":329},[152,159829,33788],{"class":293},[152,159831,1819],{"class":483},[152,159833,159834],{"class":289},"\"启动\"",[152,159836,1825],{"class":483},[152,159838,159839,159841,159844],{"class":281,"line":343},[152,159840,159820],{"class":476},[152,159842,159843],{"class":289}," \"stop\"",[152,159845,5382],{"class":483},[152,159847,159848,159850,159852,159855],{"class":281,"line":348},[152,159849,33788],{"class":293},[152,159851,1819],{"class":483},[152,159853,159854],{"class":289},"\"停止\"",[152,159856,1825],{"class":483},[152,159858,159859,159861,159864],{"class":281,"line":362},[152,159860,159820],{"class":476},[152,159862,159863],{"class":289}," \"restart\"",[152,159865,5382],{"class":483},[152,159867,159868,159870,159872,159875],{"class":281,"line":367},[152,159869,33788],{"class":293},[152,159871,1819],{"class":483},[152,159873,159874],{"class":289},"\"重启\"",[152,159876,1825],{"class":483},[152,159878,159879,159881],{"class":281,"line":381},[152,159880,159820],{"class":476},[152,159882,159883],{"class":483}," _:\n",[152,159885,159886,159888,159890,159893],{"class":281,"line":386},[152,159887,33788],{"class":293},[152,159889,1819],{"class":483},[152,159891,159892],{"class":289},"\"未知命令\"",[152,159894,1825],{"class":483},[19,159896,159897,159898,159900,159901,159903],{},"入门阶段掌握 ",[277,159899,155995],{}," 更重要，",[277,159902,72602],{}," 可以作为补充。",[1760,159905,159907],{"id":159906},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159909,124629],{},[416,159911,159912,159915,159918],{},[419,159913,159914],{},"输入成绩。",[419,159916,159917],{},"判断成绩是否合法。",[419,159919,159920],{},"输出等级。",[19,159922,11651],{},[270,159924,159926],{"className":31715,"code":159925,"language":31717,"meta":275,"style":275},"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",[277,159927,159928,159946,159950,159968,159979,159991,160002,160014,160025,160038,160049,160061,160072,160078],{"__ignoreMap":275},[152,159929,159930,159932,159934,159936,159938,159940,159942,159944],{"class":281,"line":282},[152,159931,156695],{"class":483},[152,159933,1864],{"class":476},[152,159935,111134],{"class":293},[152,159937,1819],{"class":483},[152,159939,55158],{"class":293},[152,159941,1819],{"class":483},[152,159943,153746],{"class":289},[152,159945,31834],{"class":483},[152,159947,159948],{"class":281,"line":303},[152,159949,307],{"emptyLinePlaceholder":306},[152,159951,159952,159954,159956,159958,159960,159962,159964,159966],{"class":281,"line":310},[152,159953,3202],{"class":476},[152,159955,40267],{"class":476},[152,159957,5735],{"class":293},[152,159959,159589],{"class":476},[152,159961,159120],{"class":483},[152,159963,3259],{"class":476},[152,159965,7396],{"class":293},[152,159967,5382],{"class":483},[152,159969,159970,159972,159974,159977],{"class":281,"line":324},[152,159971,32636],{"class":293},[152,159973,1819],{"class":483},[152,159975,159976],{"class":289},"\"成绩不合法\"",[152,159978,1825],{"class":483},[152,159980,159981,159983,159985,159987,159989],{"class":281,"line":329},[152,159982,159143],{"class":476},[152,159984,159120],{"class":483},[152,159986,3370],{"class":476},[152,159988,159125],{"class":293},[152,159990,5382],{"class":483},[152,159992,159993,159995,159997,160000],{"class":281,"line":343},[152,159994,32636],{"class":293},[152,159996,1819],{"class":483},[152,159998,159999],{"class":289},"\"等级:A\"",[152,160001,1825],{"class":483},[152,160003,160004,160006,160008,160010,160012],{"class":281,"line":348},[152,160005,159143],{"class":476},[152,160007,159120],{"class":483},[152,160009,3370],{"class":476},[152,160011,159150],{"class":293},[152,160013,5382],{"class":483},[152,160015,160016,160018,160020,160023],{"class":281,"line":362},[152,160017,32636],{"class":293},[152,160019,1819],{"class":483},[152,160021,160022],{"class":289},"\"等级:B\"",[152,160024,1825],{"class":483},[152,160026,160027,160029,160031,160033,160036],{"class":281,"line":367},[152,160028,159143],{"class":476},[152,160030,159120],{"class":483},[152,160032,3370],{"class":476},[152,160034,160035],{"class":293}," 70",[152,160037,5382],{"class":483},[152,160039,160040,160042,160044,160047],{"class":281,"line":381},[152,160041,32636],{"class":293},[152,160043,1819],{"class":483},[152,160045,160046],{"class":289},"\"等级:C\"",[152,160048,1825],{"class":483},[152,160050,160051,160053,160055,160057,160059],{"class":281,"line":386},[152,160052,159143],{"class":476},[152,160054,159120],{"class":483},[152,160056,3370],{"class":476},[152,160058,159174],{"class":293},[152,160060,5382],{"class":483},[152,160062,160063,160065,160067,160070],{"class":281,"line":932},[152,160064,32636],{"class":293},[152,160066,1819],{"class":483},[152,160068,160069],{"class":289},"\"等级:D\"",[152,160071,1825],{"class":483},[152,160073,160074,160076],{"class":281,"line":942},[152,160075,3361],{"class":476},[152,160077,5382],{"class":483},[152,160079,160080,160082,160084,160087],{"class":281,"line":949},[152,160081,32636],{"class":293},[152,160083,1819],{"class":483},[152,160085,160086],{"class":289},"\"等级:E\"",[152,160088,1825],{"class":483},[1760,160090,160092],{"id":160091},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160094,124629],{},[416,160096,160097,160100,160103,160106],{},[419,160098,160099],{},"输入消费金额。",[419,160101,160102],{},"输入会员等级，普通、银卡、金卡。",[419,160104,160105],{},"普通不打折，银卡 9 折，金卡 8 折。",[419,160107,160108],{},"满 500 再减 50。",[19,160110,11651],{},[270,160112,160114],{"className":31715,"code":160113,"language":31717,"meta":275,"style":275},"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",[277,160115,160116,160136,160152,160156,160164,160168,160182,160192,160205,160214,160227,160235,160241,160252,160256,160270,160274,160288,160298,160302],{"__ignoreMap":275},[152,160117,160118,160121,160123,160125,160127,160129,160131,160134],{"class":281,"line":282},[152,160119,160120],{"class":483},"amount ",[152,160122,1864],{"class":476},[152,160124,111134],{"class":293},[152,160126,1819],{"class":483},[152,160128,55158],{"class":293},[152,160130,1819],{"class":483},[152,160132,160133],{"class":289},"\"请输入消费金额:\"",[152,160135,31834],{"class":483},[152,160137,160138,160141,160143,160145,160147,160150],{"class":281,"line":303},[152,160139,160140],{"class":483},"level ",[152,160142,1864],{"class":476},[152,160144,61942],{"class":293},[152,160146,1819],{"class":483},[152,160148,160149],{"class":289},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[152,160151,1825],{"class":483},[152,160153,160154],{"class":281,"line":310},[152,160155,307],{"emptyLinePlaceholder":306},[152,160157,160158,160160,160162],{"class":281,"line":324},[152,160159,158573],{"class":483},[152,160161,1864],{"class":476},[152,160163,57036],{"class":293},[152,160165,160166],{"class":281,"line":329},[152,160167,307],{"emptyLinePlaceholder":306},[152,160169,160170,160172,160175,160177,160180],{"class":281,"line":343},[152,160171,3202],{"class":476},[152,160173,160174],{"class":483}," level ",[152,160176,4592],{"class":476},[152,160178,160179],{"class":289}," \"银卡\"",[152,160181,5382],{"class":483},[152,160183,160184,160187,160189],{"class":281,"line":348},[152,160185,160186],{"class":483},"    discount ",[152,160188,1864],{"class":476},[152,160190,160191],{"class":293}," 0.9\n",[152,160193,160194,160196,160198,160200,160203],{"class":281,"line":362},[152,160195,159143],{"class":476},[152,160197,160174],{"class":483},[152,160199,4592],{"class":476},[152,160201,160202],{"class":289}," \"金卡\"",[152,160204,5382],{"class":483},[152,160206,160207,160209,160211],{"class":281,"line":367},[152,160208,160186],{"class":483},[152,160210,1864],{"class":476},[152,160212,160213],{"class":293}," 0.8\n",[152,160215,160216,160218,160220,160222,160225],{"class":281,"line":381},[152,160217,159143],{"class":476},[152,160219,160174],{"class":483},[152,160221,4592],{"class":476},[152,160223,160224],{"class":289}," \"普通\"",[152,160226,5382],{"class":483},[152,160228,160229,160231,160233],{"class":281,"line":386},[152,160230,160186],{"class":483},[152,160232,1864],{"class":476},[152,160234,57036],{"class":293},[152,160236,160237,160239],{"class":281,"line":932},[152,160238,3361],{"class":476},[152,160240,5382],{"class":483},[152,160242,160243,160245,160247,160250],{"class":281,"line":942},[152,160244,32636],{"class":293},[152,160246,1819],{"class":483},[152,160248,160249],{"class":289},"\"会员等级输入错误，按普通会员计算\"",[152,160251,1825],{"class":483},[152,160253,160254],{"class":281,"line":949},[152,160255,307],{"emptyLinePlaceholder":306},[152,160257,160258,160261,160263,160266,160268],{"class":281,"line":954},[152,160259,160260],{"class":483},"pay ",[152,160262,1864],{"class":476},[152,160264,160265],{"class":483}," amount ",[152,160267,2263],{"class":476},[152,160269,158612],{"class":483},[152,160271,160272],{"class":281,"line":959},[152,160273,307],{"emptyLinePlaceholder":306},[152,160275,160276,160278,160281,160283,160286],{"class":281,"line":970},[152,160277,3202],{"class":476},[152,160279,160280],{"class":483}," pay ",[152,160282,3370],{"class":476},[152,160284,160285],{"class":293}," 500",[152,160287,5382],{"class":483},[152,160289,160290,160293,160295],{"class":281,"line":979},[152,160291,160292],{"class":483},"    pay ",[152,160294,151589],{"class":476},[152,160296,160297],{"class":293}," 50\n",[152,160299,160300],{"class":281,"line":989},[152,160301,307],{"emptyLinePlaceholder":306},[152,160303,160304,160306,160308,160310,160312,160314,160317,160319,160321,160323],{"class":281,"line":996},[152,160305,31752],{"class":293},[152,160307,1819],{"class":483},[152,160309,1870],{"class":476},[152,160311,158693],{"class":289},[152,160313,2703],{"class":293},[152,160315,160316],{"class":483},"pay",[152,160318,158496],{"class":476},[152,160320,2752],{"class":293},[152,160322,158349],{"class":289},[152,160324,1825],{"class":483},[1760,160326,160328],{"id":160327},"_312-易错点","3.12 易错点",[416,160330,160331,160334,160337,160340,160345],{},[419,160332,160333],{},"冒号不能漏。",[419,160335,160336],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[419,160338,160339],{},"多分支判断要注意顺序。",[419,160341,160342,160343,29984],{},"判断相等用 ",[277,160344,4592],{},[419,160346,160347],{},"字符串比较区分大小写：",[270,160349,160351],{"className":31715,"code":160350,"language":31717,"meta":275,"style":275},"\"Y\" == \"y\"  # False\n",[277,160352,160353],{"__ignoreMap":275},[152,160354,160355,160358,160360,160362],{"class":281,"line":282},[152,160356,160357],{"class":289},"\"Y\"",[152,160359,102896],{"class":476},[152,160361,159342],{"class":289},[152,160363,160364],{"class":866},"  # False\n",[19,160366,160367],{},"可转换后再判断：",[270,160369,160371],{"className":31715,"code":160370,"language":31717,"meta":275,"style":275},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[277,160372,160373,160390,160403],{"__ignoreMap":275},[152,160374,160375,160378,160380,160382,160384,160387],{"class":281,"line":282},[152,160376,160377],{"class":483},"answer ",[152,160379,1864],{"class":476},[152,160381,61942],{"class":293},[152,160383,1819],{"class":483},[152,160385,160386],{"class":289},"\"是否继续(y\u002Fn):\"",[152,160388,160389],{"class":483},").lower()\n",[152,160391,160392,160394,160397,160399,160401],{"class":281,"line":303},[152,160393,3202],{"class":476},[152,160395,160396],{"class":483}," answer ",[152,160398,4592],{"class":476},[152,160400,159342],{"class":289},[152,160402,5382],{"class":483},[152,160404,160405,160407,160409,160412],{"class":281,"line":310},[152,160406,32636],{"class":293},[152,160408,1819],{"class":483},[152,160410,160411],{"class":289},"\"继续\"",[152,160413,1825],{"class":483},[1760,160415,160417],{"id":160416},"_313-本章练习","3.13 本章练习",[416,160419,160420,160423,160426,160429,160439],{},[419,160421,160422],{},"输入年龄，判断是否成年。",[419,160424,160425],{},"输入年份，判断是否为闰年。",[419,160427,160428],{},"输入三个数字，输出最大值。",[419,160430,160431,160432,160435,160436,160438],{},"写登录判断：用户名是 ",[277,160433,160434],{},"admin"," 且密码是 ",[277,160437,16699],{}," 才登录成功。",[419,160440,160441],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1736,160443,160444],{},"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":275,"searchDepth":303,"depth":303,"links":160446},[160447,160448,160449,160450,160451,160452,160457,160458,160459,160460,160461,160462,160463],{"id":158835,"depth":303,"text":158836},{"id":158888,"depth":303,"text":158889},{"id":158992,"depth":303,"text":158993},{"id":159082,"depth":303,"text":159083},{"id":159272,"depth":303,"text":159273},{"id":159395,"depth":303,"text":159396,"children":160453},[160454,160455,160456],{"id":159399,"depth":310,"text":159400},{"id":159456,"depth":310,"text":159457},{"id":159513,"depth":310,"text":159514},{"id":159558,"depth":303,"text":159559},{"id":159649,"depth":303,"text":159650},{"id":159776,"depth":303,"text":159777},{"id":159906,"depth":303,"text":159907},{"id":160091,"depth":303,"text":160092},{"id":160327,"depth":303,"text":160328},{"id":160416,"depth":303,"text":160417},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158827,"description":24991},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160470,"title":160471,"body":160472,"description":24991,"extension":1744,"meta":162241,"navigation":306,"path":162242,"seo":162243,"stem":162244,"__hash__":162245},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160473,"toc":162221},[160474,160477,160481,160487,160490,160507,160511,160513,160530,160532,160577,160579,160596,160600,160603,160669,160672,160690,160694,160855,160864,160868,160872,160877,160924,160926,160932,160936,160941,160988,160990,160996,161000,161005,161041,161044,161091,161095,161101,161159,161164,161195,161200,161204,161259,161262,161334,161337,161396,161400,161403,161478,161481,161485,161591,161594,161620,161624,161636,161705,161708,161800,161804,161806,161817,161819,161949,161953,162155,162163,162167,162197,162201,162218],[10,160475,160471],{"id":160476},"_4-循环语句",[1760,160478,160480],{"id":160479},"_41-为什么需要循环","4.1 为什么需要循环",[19,160482,160483,160484,160486],{},"如果要输出 1 到 100，不应该写 100 行 ",[277,160485,147809],{},"，而应该用循环。",[19,160488,160489],{},"循环适合处理重复任务：",[416,160491,160492,160495,160498,160501,160504],{},[419,160493,160494],{},"重复输出。",[419,160496,160497],{},"重复输入。",[419,160499,160500],{},"遍历数据。",[419,160502,160503],{},"持续执行菜单。",[419,160505,160506],{},"批量处理文件或数据。",[1760,160508,160510],{"id":160509},"_42-while循环","4.2 while循环",[19,160512,6823],{},[270,160514,160516],{"className":31715,"code":160515,"language":31717,"meta":275,"style":275},"while 条件:\n    循环体\n",[277,160517,160518,160525],{"__ignoreMap":275},[152,160519,160520,160522],{"class":281,"line":282},[152,160521,110000],{"class":476},[152,160523,160524],{"class":483}," 条件:\n",[152,160526,160527],{"class":281,"line":303},[152,160528,160529],{"class":483},"    循环体\n",[19,160531,16750],{},[270,160533,160535],{"className":31715,"code":160534,"language":31717,"meta":275,"style":275},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[277,160536,160537,160545,160549,160561,160568],{"__ignoreMap":275},[152,160538,160539,160541,160543],{"class":281,"line":282},[152,160540,101485],{"class":483},[152,160542,1864],{"class":476},[152,160544,57036],{"class":293},[152,160546,160547],{"class":281,"line":303},[152,160548,307],{"emptyLinePlaceholder":306},[152,160550,160551,160553,160555,160557,160559],{"class":281,"line":310},[152,160552,110000],{"class":476},[152,160554,11070],{"class":483},[152,160556,3259],{"class":476},[152,160558,3799],{"class":293},[152,160560,5382],{"class":483},[152,160562,160563,160565],{"class":281,"line":324},[152,160564,32636],{"class":293},[152,160566,160567],{"class":483},"(i)\n",[152,160569,160570,160573,160575],{"class":281,"line":329},[152,160571,160572],{"class":483},"    i ",[152,160574,11109],{"class":476},[152,160576,57036],{"class":293},[19,160578,82266],{},[416,160580,160581,160587,160590,160593],{},[419,160582,160583,160584,29984],{},"判断条件 ",[277,160585,160586],{},"i \u003C= 5",[419,160588,160589],{},"条件成立，执行循环体。",[419,160591,160592],{},"执行完后回到条件判断。",[419,160594,160595],{},"条件不成立，退出循环。",[1760,160597,160599],{"id":160598},"_43-while累加","4.3 while累加",[19,160601,160602],{},"计算 1 到 100 的和：",[270,160604,160606],{"className":31715,"code":160605,"language":31717,"meta":275,"style":275},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[277,160607,160608,160616,160624,160628,160640,160650,160658,160662],{"__ignoreMap":275},[152,160609,160610,160612,160614],{"class":281,"line":282},[152,160611,101485],{"class":483},[152,160613,1864],{"class":476},[152,160615,57036],{"class":293},[152,160617,160618,160620,160622],{"class":281,"line":303},[152,160619,158597],{"class":483},[152,160621,1864],{"class":476},[152,160623,48670],{"class":293},[152,160625,160626],{"class":281,"line":310},[152,160627,307],{"emptyLinePlaceholder":306},[152,160629,160630,160632,160634,160636,160638],{"class":281,"line":324},[152,160631,110000],{"class":476},[152,160633,11070],{"class":483},[152,160635,3259],{"class":476},[152,160637,7396],{"class":293},[152,160639,5382],{"class":483},[152,160641,160642,160645,160647],{"class":281,"line":329},[152,160643,160644],{"class":483},"    total ",[152,160646,11109],{"class":476},[152,160648,160649],{"class":483}," i\n",[152,160651,160652,160654,160656],{"class":281,"line":343},[152,160653,160572],{"class":483},[152,160655,11109],{"class":476},[152,160657,57036],{"class":293},[152,160659,160660],{"class":281,"line":348},[152,160661,307],{"emptyLinePlaceholder":306},[152,160663,160664,160666],{"class":281,"line":362},[152,160665,31752],{"class":293},[152,160667,160668],{"class":483},"(total)\n",[19,160670,160671],{},"核心思想：",[416,160673,160674,160679,160684],{},[419,160675,160676,160678],{},[277,160677,2249],{}," 控制循环次数。",[419,160680,160681,160683],{},[277,160682,158698],{}," 保存累加结果。",[419,160685,160686,160687,160689],{},"每轮循环都要更新 ",[277,160688,2249],{},"，否则可能死循环。",[1760,160691,160693],{"id":160692},"_44-while猜数字","4.4 while猜数字",[270,160695,160697],{"className":31715,"code":160696,"language":31717,"meta":275,"style":275},"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",[277,160698,160699,160705,160709,160726,160734,160738,160746,160766,160775,160779,160791,160802,160812,160823,160829,160851],{"__ignoreMap":275},[152,160700,160701,160703],{"class":281,"line":282},[152,160702,31729],{"class":476},[152,160704,46665],{"class":483},[152,160706,160707],{"class":281,"line":303},[152,160708,307],{"emptyLinePlaceholder":306},[152,160710,160711,160713,160715,160718,160720,160722,160724],{"class":281,"line":310},[152,160712,160377],{"class":483},[152,160714,1864],{"class":476},[152,160716,160717],{"class":483}," random.randint(",[152,160719,2026],{"class":293},[152,160721,14051],{"class":483},[152,160723,2119],{"class":293},[152,160725,1825],{"class":483},[152,160727,160728,160730,160732],{"class":281,"line":324},[152,160729,148028],{"class":483},[152,160731,1864],{"class":476},[152,160733,48670],{"class":293},[152,160735,160736],{"class":281,"line":329},[152,160737,307],{"emptyLinePlaceholder":306},[152,160739,160740,160742,160744],{"class":281,"line":343},[152,160741,110000],{"class":476},[152,160743,96629],{"class":293},[152,160745,5382],{"class":483},[152,160747,160748,160751,160753,160755,160757,160759,160761,160764],{"class":281,"line":348},[152,160749,160750],{"class":483},"    guess ",[152,160752,1864],{"class":476},[152,160754,4033],{"class":293},[152,160756,1819],{"class":483},[152,160758,55158],{"class":293},[152,160760,1819],{"class":483},[152,160762,160763],{"class":289},"\"请输入1到100之间的数字:\"",[152,160765,31834],{"class":483},[152,160767,160768,160771,160773],{"class":281,"line":362},[152,160769,160770],{"class":483},"    count ",[152,160772,11109],{"class":476},[152,160774,57036],{"class":293},[152,160776,160777],{"class":281,"line":367},[152,160778,307],{"emptyLinePlaceholder":306},[152,160780,160781,160783,160786,160788],{"class":281,"line":381},[152,160782,4744],{"class":476},[152,160784,160785],{"class":483}," guess ",[152,160787,487],{"class":476},[152,160789,160790],{"class":483}," answer:\n",[152,160792,160793,160795,160797,160800],{"class":281,"line":386},[152,160794,33788],{"class":293},[152,160796,1819],{"class":483},[152,160798,160799],{"class":289},"\"猜大了\"",[152,160801,1825],{"class":483},[152,160803,160804,160806,160808,160810],{"class":281,"line":932},[152,160805,40630],{"class":476},[152,160807,160785],{"class":483},[152,160809,844],{"class":476},[152,160811,160790],{"class":483},[152,160813,160814,160816,160818,160821],{"class":281,"line":942},[152,160815,33788],{"class":293},[152,160817,1819],{"class":483},[152,160819,160820],{"class":289},"\"猜小了\"",[152,160822,1825],{"class":483},[152,160824,160825,160827],{"class":281,"line":949},[152,160826,159359],{"class":476},[152,160828,5382],{"class":483},[152,160830,160831,160833,160835,160837,160840,160842,160844,160846,160849],{"class":281,"line":954},[152,160832,33788],{"class":293},[152,160834,1819],{"class":483},[152,160836,1870],{"class":476},[152,160838,160839],{"class":289},"\"猜对了，一共猜了",[152,160841,2703],{"class":293},[152,160843,85771],{"class":483},[152,160845,2752],{"class":293},[152,160847,160848],{"class":289},"次\"",[152,160850,1825],{"class":483},[152,160852,160853],{"class":281,"line":959},[152,160854,32964],{"class":476},[19,160856,160857,160860,160861,160863],{},[277,160858,160859],{},"while True"," 表示无限循环，通常配合 ",[277,160862,3704],{}," 使用。",[1760,160865,160867],{"id":160866},"_45-break和continue","4.5 break和continue",[14,160869,160871],{"id":160870},"_451-break","4.5.1 break",[19,160873,160874,160876],{},[277,160875,3704],{}," 直接结束整个循环。",[270,160878,160880],{"className":31715,"code":160879,"language":31717,"meta":275,"style":275},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[277,160881,160882,160902,160914,160918],{"__ignoreMap":275},[152,160883,160884,160886,160888,160890,160892,160894,160896,160898,160900],{"class":281,"line":282},[152,160885,4668],{"class":476},[152,160887,11070],{"class":483},[152,160889,27653],{"class":476},[152,160891,33780],{"class":293},[152,160893,1819],{"class":483},[152,160895,2026],{"class":293},[152,160897,14051],{"class":483},[152,160899,2152],{"class":293},[152,160901,32123],{"class":483},[152,160903,160904,160906,160908,160910,160912],{"class":281,"line":303},[152,160905,4744],{"class":476},[152,160907,11070],{"class":483},[152,160909,4592],{"class":476},[152,160911,79407],{"class":293},[152,160913,5382],{"class":483},[152,160915,160916],{"class":281,"line":310},[152,160917,32964],{"class":476},[152,160919,160920,160922],{"class":281,"line":324},[152,160921,32636],{"class":293},[152,160923,160567],{"class":483},[19,160925,147794],{},[270,160927,160930],{"className":160928,"code":160929,"language":6829,"meta":275},[6827],"1\n2\n",[277,160931,160929],{"__ignoreMap":275},[14,160933,160935],{"id":160934},"_452-continue","4.5.2 continue",[19,160937,160938,160940],{},[277,160939,156009],{}," 跳过本轮剩余代码，进入下一轮循环。",[270,160942,160944],{"className":31715,"code":160943,"language":31717,"meta":275,"style":275},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[277,160945,160946,160966,160978,160982],{"__ignoreMap":275},[152,160947,160948,160950,160952,160954,160956,160958,160960,160962,160964],{"class":281,"line":282},[152,160949,4668],{"class":476},[152,160951,11070],{"class":483},[152,160953,27653],{"class":476},[152,160955,33780],{"class":293},[152,160957,1819],{"class":483},[152,160959,2026],{"class":293},[152,160961,14051],{"class":483},[152,160963,2152],{"class":293},[152,160965,32123],{"class":483},[152,160967,160968,160970,160972,160974,160976],{"class":281,"line":303},[152,160969,4744],{"class":476},[152,160971,11070],{"class":483},[152,160973,4592],{"class":476},[152,160975,79407],{"class":293},[152,160977,5382],{"class":483},[152,160979,160980],{"class":281,"line":310},[152,160981,149849],{"class":476},[152,160983,160984,160986],{"class":281,"line":324},[152,160985,32636],{"class":293},[152,160987,160567],{"class":483},[19,160989,147794],{},[270,160991,160994],{"className":160992,"code":160993,"language":6829,"meta":275},[6827],"1\n2\n4\n5\n",[277,160995,160993],{"__ignoreMap":275},[1760,160997,160999],{"id":160998},"_46-for循环","4.6 for循环",[19,161001,161002,161004],{},[277,161003,4668],{}," 常用于遍历序列。",[270,161006,161008],{"className":31715,"code":161007,"language":31717,"meta":275,"style":275},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[277,161009,161010,161019,161023,161034],{"__ignoreMap":275},[152,161011,161012,161014,161016],{"class":281,"line":282},[152,161013,147873],{"class":483},[152,161015,1864],{"class":476},[152,161017,161018],{"class":289}," \"python\"\n",[152,161020,161021],{"class":281,"line":303},[152,161022,307],{"emptyLinePlaceholder":306},[152,161024,161025,161027,161030,161032],{"class":281,"line":310},[152,161026,4668],{"class":476},[152,161028,161029],{"class":483}," ch ",[152,161031,27653],{"class":476},[152,161033,159736],{"class":483},[152,161035,161036,161038],{"class":281,"line":324},[152,161037,32636],{"class":293},[152,161039,161040],{"class":483},"(ch)\n",[19,161042,161043],{},"遍历列表：",[270,161045,161047],{"className":31715,"code":161046,"language":31717,"meta":275,"style":275},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[277,161048,161049,161071,161075,161085],{"__ignoreMap":275},[152,161050,161051,161054,161056,161058,161060,161062,161064,161066,161069],{"class":281,"line":282},[152,161052,161053],{"class":483},"students ",[152,161055,1864],{"class":476},[152,161057,53563],{"class":483},[152,161059,151225],{"class":289},[152,161061,14051],{"class":483},[152,161063,152273],{"class":289},[152,161065,14051],{"class":483},[152,161067,161068],{"class":289},"\"小刚\"",[152,161070,34583],{"class":483},[152,161072,161073],{"class":281,"line":303},[152,161074,307],{"emptyLinePlaceholder":306},[152,161076,161077,161079,161081,161083],{"class":281,"line":310},[152,161078,4668],{"class":476},[152,161080,153474],{"class":483},[152,161082,27653],{"class":476},[152,161084,153479],{"class":483},[152,161086,161087,161089],{"class":281,"line":324},[152,161088,32636],{"class":293},[152,161090,151379],{"class":483},[1760,161092,161094],{"id":161093},"_47-range函数","4.7 range函数",[19,161096,161097,161100],{},[277,161098,161099],{},"range()"," 用于生成整数序列。",[270,161102,161104],{"className":31715,"code":161103,"language":31717,"meta":275,"style":275},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[277,161105,161106,161120,161138],{"__ignoreMap":275},[152,161107,161108,161110,161112,161114,161117],{"class":281,"line":282},[152,161109,34753],{"class":293},[152,161111,1819],{"class":483},[152,161113,2127],{"class":293},[152,161115,161116],{"class":483},")          ",[152,161118,161119],{"class":866},"# 0,1,2,3,4\n",[152,161121,161122,161124,161126,161128,161130,161132,161135],{"class":281,"line":303},[152,161123,34753],{"class":293},[152,161125,1819],{"class":483},[152,161127,2026],{"class":293},[152,161129,14051],{"class":483},[152,161131,2127],{"class":293},[152,161133,161134],{"class":483},")       ",[152,161136,161137],{"class":866},"# 1,2,3,4\n",[152,161139,161140,161142,161144,161146,161148,161150,161152,161154,161156],{"class":281,"line":310},[152,161141,34753],{"class":293},[152,161143,1819],{"class":483},[152,161145,2026],{"class":293},[152,161147,14051],{"class":483},[152,161149,2254],{"class":293},[152,161151,14051],{"class":483},[152,161153,1894],{"class":293},[152,161155,156998],{"class":483},[152,161157,161158],{"class":866},"# 1,3,5,7,9\n",[19,161160,161161,161162,26230],{},"配合 ",[277,161163,4668],{},[270,161165,161167],{"className":31715,"code":161166,"language":31717,"meta":275,"style":275},"for i in range(1, 6):\n    print(i)\n",[277,161168,161169,161189],{"__ignoreMap":275},[152,161170,161171,161173,161175,161177,161179,161181,161183,161185,161187],{"class":281,"line":282},[152,161172,4668],{"class":476},[152,161174,11070],{"class":483},[152,161176,27653],{"class":476},[152,161178,33780],{"class":293},[152,161180,1819],{"class":483},[152,161182,2026],{"class":293},[152,161184,14051],{"class":483},[152,161186,2152],{"class":293},[152,161188,32123],{"class":483},[152,161190,161191,161193],{"class":281,"line":303},[152,161192,32636],{"class":293},[152,161194,160567],{"class":483},[19,161196,10657,161197,161199],{},[277,161198,34753],{}," 的结束值不包含在内。",[1760,161201,161203],{"id":161202},"_48-for循环求和","4.8 for循环求和",[270,161205,161207],{"className":31715,"code":161206,"language":31717,"meta":275,"style":275},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[277,161208,161209,161217,161221,161241,161249,161253],{"__ignoreMap":275},[152,161210,161211,161213,161215],{"class":281,"line":282},[152,161212,158597],{"class":483},[152,161214,1864],{"class":476},[152,161216,48670],{"class":293},[152,161218,161219],{"class":281,"line":303},[152,161220,307],{"emptyLinePlaceholder":306},[152,161222,161223,161225,161227,161229,161231,161233,161235,161237,161239],{"class":281,"line":310},[152,161224,4668],{"class":476},[152,161226,11070],{"class":483},[152,161228,27653],{"class":476},[152,161230,33780],{"class":293},[152,161232,1819],{"class":483},[152,161234,2026],{"class":293},[152,161236,14051],{"class":483},[152,161238,2145],{"class":293},[152,161240,32123],{"class":483},[152,161242,161243,161245,161247],{"class":281,"line":324},[152,161244,160644],{"class":483},[152,161246,11109],{"class":476},[152,161248,160649],{"class":483},[152,161250,161251],{"class":281,"line":329},[152,161252,307],{"emptyLinePlaceholder":306},[152,161254,161255,161257],{"class":281,"line":343},[152,161256,31752],{"class":293},[152,161258,160668],{"class":483},[19,161260,161261],{},"求偶数和：",[270,161263,161265],{"className":31715,"code":161264,"language":31717,"meta":275,"style":275},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[277,161266,161267,161275,161279,161299,161315,161324,161328],{"__ignoreMap":275},[152,161268,161269,161271,161273],{"class":281,"line":282},[152,161270,158597],{"class":483},[152,161272,1864],{"class":476},[152,161274,48670],{"class":293},[152,161276,161277],{"class":281,"line":303},[152,161278,307],{"emptyLinePlaceholder":306},[152,161280,161281,161283,161285,161287,161289,161291,161293,161295,161297],{"class":281,"line":310},[152,161282,4668],{"class":476},[152,161284,11070],{"class":483},[152,161286,27653],{"class":476},[152,161288,33780],{"class":293},[152,161290,1819],{"class":483},[152,161292,2026],{"class":293},[152,161294,14051],{"class":483},[152,161296,2145],{"class":293},[152,161298,32123],{"class":483},[152,161300,161301,161303,161305,161307,161309,161311,161313],{"class":281,"line":324},[152,161302,4744],{"class":476},[152,161304,11070],{"class":483},[152,161306,2136],{"class":476},[152,161308,16370],{"class":293},[152,161310,102896],{"class":476},[152,161312,5735],{"class":293},[152,161314,5382],{"class":483},[152,161316,161317,161320,161322],{"class":281,"line":329},[152,161318,161319],{"class":483},"        total ",[152,161321,11109],{"class":476},[152,161323,160649],{"class":483},[152,161325,161326],{"class":281,"line":343},[152,161327,307],{"emptyLinePlaceholder":306},[152,161329,161330,161332],{"class":281,"line":348},[152,161331,31752],{"class":293},[152,161333,160668],{"class":483},[19,161335,161336],{},"也可以：",[270,161338,161340],{"className":31715,"code":161339,"language":31717,"meta":275,"style":275},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[277,161341,161342,161350,161354,161378,161386,161390],{"__ignoreMap":275},[152,161343,161344,161346,161348],{"class":281,"line":282},[152,161345,158597],{"class":483},[152,161347,1864],{"class":476},[152,161349,48670],{"class":293},[152,161351,161352],{"class":281,"line":303},[152,161353,307],{"emptyLinePlaceholder":306},[152,161355,161356,161358,161360,161362,161364,161366,161368,161370,161372,161374,161376],{"class":281,"line":310},[152,161357,4668],{"class":476},[152,161359,11070],{"class":483},[152,161361,27653],{"class":476},[152,161363,33780],{"class":293},[152,161365,1819],{"class":483},[152,161367,1894],{"class":293},[152,161369,14051],{"class":483},[152,161371,2145],{"class":293},[152,161373,14051],{"class":483},[152,161375,1894],{"class":293},[152,161377,32123],{"class":483},[152,161379,161380,161382,161384],{"class":281,"line":324},[152,161381,160644],{"class":483},[152,161383,11109],{"class":476},[152,161385,160649],{"class":483},[152,161387,161388],{"class":281,"line":329},[152,161389,307],{"emptyLinePlaceholder":306},[152,161391,161392,161394],{"class":281,"line":343},[152,161393,31752],{"class":293},[152,161395,160668],{"class":483},[1760,161397,161399],{"id":161398},"_49-循环嵌套","4.9 循环嵌套",[19,161401,161402],{},"嵌套循环就是循环里面再写循环。",[270,161404,161406],{"className":31715,"code":161405,"language":31717,"meta":275,"style":275},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[277,161407,161408,161428,161448],{"__ignoreMap":275},[152,161409,161410,161412,161414,161416,161418,161420,161422,161424,161426],{"class":281,"line":282},[152,161411,4668],{"class":476},[152,161413,11070],{"class":483},[152,161415,27653],{"class":476},[152,161417,33780],{"class":293},[152,161419,1819],{"class":483},[152,161421,2026],{"class":293},[152,161423,14051],{"class":483},[152,161425,2101],{"class":293},[152,161427,32123],{"class":483},[152,161429,161430,161432,161434,161436,161438,161440,161442,161444,161446],{"class":281,"line":303},[152,161431,4844],{"class":476},[152,161433,11132],{"class":483},[152,161435,27653],{"class":476},[152,161437,33780],{"class":293},[152,161439,1819],{"class":483},[152,161441,2026],{"class":293},[152,161443,14051],{"class":483},[152,161445,2101],{"class":293},[152,161447,32123],{"class":483},[152,161449,161450,161452,161454,161456,161459,161461,161463,161465,161468,161470,161472,161474,161476],{"class":281,"line":310},[152,161451,33788],{"class":293},[152,161453,1819],{"class":483},[152,161455,1870],{"class":476},[152,161457,161458],{"class":289},"\"i=",[152,161460,2703],{"class":293},[152,161462,2249],{"class":483},[152,161464,2752],{"class":293},[152,161466,161467],{"class":289},", j=",[152,161469,2703],{"class":293},[152,161471,2275],{"class":483},[152,161473,2752],{"class":293},[152,161475,2059],{"class":289},[152,161477,1825],{"class":483},[19,161479,161480],{},"外层循环执行一次，内层循环执行完整一轮。",[1760,161482,161484],{"id":161483},"_410-九九乘法表","4.10 九九乘法表",[270,161486,161488],{"className":31715,"code":161487,"language":31717,"meta":275,"style":275},"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",[277,161489,161490,161510,161533,161585],{"__ignoreMap":275},[152,161491,161492,161494,161496,161498,161500,161502,161504,161506,161508],{"class":281,"line":282},[152,161493,4668],{"class":476},[152,161495,11070],{"class":483},[152,161497,27653],{"class":476},[152,161499,33780],{"class":293},[152,161501,1819],{"class":483},[152,161503,2026],{"class":293},[152,161505,14051],{"class":483},[152,161507,2254],{"class":293},[152,161509,32123],{"class":483},[152,161511,161512,161514,161516,161518,161520,161522,161524,161527,161529,161531],{"class":281,"line":303},[152,161513,4844],{"class":476},[152,161515,11132],{"class":483},[152,161517,27653],{"class":476},[152,161519,33780],{"class":293},[152,161521,1819],{"class":483},[152,161523,2026],{"class":293},[152,161525,161526],{"class":483},", i ",[152,161528,2289],{"class":476},[152,161530,26729],{"class":293},[152,161532,32123],{"class":483},[152,161534,161535,161537,161539,161541,161543,161545,161547,161549,161551,161553,161555,161557,161559,161561,161563,161565,161567,161569,161571,161573,161575,161577,161579,161581,161583],{"class":281,"line":310},[152,161536,33788],{"class":293},[152,161538,1819],{"class":483},[152,161540,1870],{"class":476},[152,161542,2059],{"class":289},[152,161544,2703],{"class":293},[152,161546,2275],{"class":483},[152,161548,2752],{"class":293},[152,161550,2263],{"class":289},[152,161552,2703],{"class":293},[152,161554,2249],{"class":483},[152,161556,2752],{"class":293},[152,161558,1864],{"class":289},[152,161560,2703],{"class":293},[152,161562,101485],{"class":483},[152,161564,2263],{"class":476},[152,161566,5053],{"class":483},[152,161568,2752],{"class":293},[152,161570,2059],{"class":289},[152,161572,14051],{"class":483},[152,161574,47138],{"class":6858},[152,161576,1864],{"class":476},[152,161578,2059],{"class":289},[152,161580,2905],{"class":293},[152,161582,2059],{"class":289},[152,161584,1825],{"class":483},[152,161586,161587,161589],{"class":281,"line":324},[152,161588,32636],{"class":293},[152,161590,3627],{"class":483},[19,161592,161593],{},"关键点：",[416,161595,161596,161602,161608,161614],{},[419,161597,161598,161599,161601],{},"外层 ",[277,161600,2249],{}," 控制行。",[419,161603,161604,161605,161607],{},"内层 ",[277,161606,2275],{}," 控制列。",[419,161609,161610,161611,161613],{},"每行结束后用 ",[277,161612,147809],{}," 换行。",[419,161615,161616,161619],{},[277,161617,161618],{},"end=\"\\t\""," 让同一行的内容横向排列。",[1760,161621,161623],{"id":161622},"_411-循环else","4.11 循环else",[19,161625,161626,161627,161629,161630,161632,161633,161635],{},"Python 的循环可以带 ",[277,161628,3361],{},"。当循环正常结束时执行 ",[277,161631,3361],{},"，如果被 ",[277,161634,3704],{}," 打断，则不执行。",[270,161637,161639],{"className":31715,"code":161638,"language":31717,"meta":275,"style":275},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[277,161640,161641,161661,161673,161684,161688,161694],{"__ignoreMap":275},[152,161642,161643,161645,161647,161649,161651,161653,161655,161657,161659],{"class":281,"line":282},[152,161644,4668],{"class":476},[152,161646,11070],{"class":483},[152,161648,27653],{"class":476},[152,161650,33780],{"class":293},[152,161652,1819],{"class":483},[152,161654,2026],{"class":293},[152,161656,14051],{"class":483},[152,161658,2152],{"class":293},[152,161660,32123],{"class":483},[152,161662,161663,161665,161667,161669,161671],{"class":281,"line":303},[152,161664,4744],{"class":476},[152,161666,11070],{"class":483},[152,161668,4592],{"class":476},[152,161670,3689],{"class":293},[152,161672,5382],{"class":483},[152,161674,161675,161677,161679,161682],{"class":281,"line":310},[152,161676,33788],{"class":293},[152,161678,1819],{"class":483},[152,161680,161681],{"class":289},"\"找到了\"",[152,161683,1825],{"class":483},[152,161685,161686],{"class":281,"line":324},[152,161687,32964],{"class":476},[152,161689,161690,161692],{"class":281,"line":329},[152,161691,3361],{"class":476},[152,161693,5382],{"class":483},[152,161695,161696,161698,161700,161703],{"class":281,"line":343},[152,161697,32636],{"class":293},[152,161699,1819],{"class":483},[152,161701,161702],{"class":289},"\"没找到\"",[152,161704,1825],{"class":483},[19,161706,161707],{},"常用于搜索。",[270,161709,161711],{"className":31715,"code":161710,"language":31717,"meta":275,"style":275},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[277,161712,161713,161734,161743,161747,161759,161770,161780,161784,161790],{"__ignoreMap":275},[152,161714,161715,161718,161720,161722,161724,161726,161728,161730,161732],{"class":281,"line":282},[152,161716,161717],{"class":483},"names ",[152,161719,1864],{"class":476},[152,161721,53563],{"class":483},[152,161723,151225],{"class":289},[152,161725,14051],{"class":483},[152,161727,152273],{"class":289},[152,161729,14051],{"class":483},[152,161731,161068],{"class":289},[152,161733,34583],{"class":483},[152,161735,161736,161738,161740],{"class":281,"line":303},[152,161737,112915],{"class":483},[152,161739,1864],{"class":476},[152,161741,161742],{"class":289}," \"小李\"\n",[152,161744,161745],{"class":281,"line":310},[152,161746,307],{"emptyLinePlaceholder":306},[152,161748,161749,161751,161754,161756],{"class":281,"line":324},[152,161750,4668],{"class":476},[152,161752,161753],{"class":483}," name ",[152,161755,27653],{"class":476},[152,161757,161758],{"class":483}," names:\n",[152,161760,161761,161763,161765,161767],{"class":281,"line":329},[152,161762,4744],{"class":476},[152,161764,161753],{"class":483},[152,161766,4592],{"class":476},[152,161768,161769],{"class":483}," target:\n",[152,161771,161772,161774,161776,161778],{"class":281,"line":343},[152,161773,33788],{"class":293},[152,161775,1819],{"class":483},[152,161777,161681],{"class":289},[152,161779,1825],{"class":483},[152,161781,161782],{"class":281,"line":348},[152,161783,32964],{"class":476},[152,161785,161786,161788],{"class":281,"line":362},[152,161787,3361],{"class":476},[152,161789,5382],{"class":483},[152,161791,161792,161794,161796,161798],{"class":281,"line":367},[152,161793,32636],{"class":293},[152,161795,1819],{"class":483},[152,161797,161702],{"class":289},[152,161799,1825],{"class":483},[1760,161801,161803],{"id":161802},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161805,124629],{},[416,161807,161808,161811,161814],{},[419,161809,161810],{},"用户最多输入 3 次密码。",[419,161812,161813],{},"密码正确则登录成功。",[419,161815,161816],{},"3 次都错误则锁定账号。",[19,161818,11651],{},[270,161820,161822],{"className":31715,"code":161821,"language":31717,"meta":275,"style":275},"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",[277,161823,161824,161834,161838,161854,161870,161874,161886,161897,161901,161907,161932,161938],{"__ignoreMap":275},[152,161825,161826,161829,161831],{"class":281,"line":282},[152,161827,161828],{"class":483},"password ",[152,161830,1864],{"class":476},[152,161832,161833],{"class":289}," \"123456\"\n",[152,161835,161836],{"class":281,"line":303},[152,161837,307],{"emptyLinePlaceholder":306},[152,161839,161840,161842,161844,161846,161848,161850,161852],{"class":281,"line":310},[152,161841,4668],{"class":476},[152,161843,11070],{"class":483},[152,161845,27653],{"class":476},[152,161847,33780],{"class":293},[152,161849,1819],{"class":483},[152,161851,1888],{"class":293},[152,161853,32123],{"class":483},[152,161855,161856,161859,161861,161863,161865,161868],{"class":281,"line":324},[152,161857,161858],{"class":483},"    user_password ",[152,161860,1864],{"class":476},[152,161862,61942],{"class":293},[152,161864,1819],{"class":483},[152,161866,161867],{"class":289},"\"请输入密码:\"",[152,161869,1825],{"class":483},[152,161871,161872],{"class":281,"line":329},[152,161873,307],{"emptyLinePlaceholder":306},[152,161875,161876,161878,161881,161883],{"class":281,"line":343},[152,161877,4744],{"class":476},[152,161879,161880],{"class":483}," user_password ",[152,161882,4592],{"class":476},[152,161884,161885],{"class":483}," password:\n",[152,161887,161888,161890,161892,161895],{"class":281,"line":348},[152,161889,33788],{"class":293},[152,161891,1819],{"class":483},[152,161893,161894],{"class":289},"\"登录成功\"",[152,161896,1825],{"class":483},[152,161898,161899],{"class":281,"line":362},[152,161900,32964],{"class":476},[152,161902,161903,161905],{"class":281,"line":367},[152,161904,159359],{"class":476},[152,161906,5382],{"class":483},[152,161908,161909,161911,161913,161915,161918,161921,161923,161925,161927,161930],{"class":281,"line":381},[152,161910,33788],{"class":293},[152,161912,1819],{"class":483},[152,161914,1870],{"class":476},[152,161916,161917],{"class":289},"\"密码错误，还剩",[152,161919,161920],{"class":293},"{2",[152,161922,53608],{"class":476},[152,161924,4675],{"class":483},[152,161926,2752],{"class":293},[152,161928,161929],{"class":289},"次机会\"",[152,161931,1825],{"class":483},[152,161933,161934,161936],{"class":281,"line":386},[152,161935,3361],{"class":476},[152,161937,5382],{"class":483},[152,161939,161940,161942,161944,161947],{"class":281,"line":932},[152,161941,32636],{"class":293},[152,161943,1819],{"class":483},[152,161945,161946],{"class":289},"\"账号已锁定\"",[152,161948,1825],{"class":483},[1760,161950,161952],{"id":161951},"_413-小案例菜单程序","4.13 小案例：菜单程序",[270,161954,161956],{"className":31715,"code":161955,"language":31717,"meta":275,"style":275},"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",[277,161957,161958,161966,161977,161988,161999,162010,162021,162025,162040,162044,162056,162067,162079,162090,162102,162113,162125,162135,162139,162145],{"__ignoreMap":275},[152,161959,161960,161962,161964],{"class":281,"line":282},[152,161961,110000],{"class":476},[152,161963,96629],{"class":293},[152,161965,5382],{"class":483},[152,161967,161968,161970,161972,161975],{"class":281,"line":303},[152,161969,32636],{"class":293},[152,161971,1819],{"class":483},[152,161973,161974],{"class":289},"\"====== 菜单 ======\"",[152,161976,1825],{"class":483},[152,161978,161979,161981,161983,161986],{"class":281,"line":310},[152,161980,32636],{"class":293},[152,161982,1819],{"class":483},[152,161984,161985],{"class":289},"\"1. 查询余额\"",[152,161987,1825],{"class":483},[152,161989,161990,161992,161994,161997],{"class":281,"line":324},[152,161991,32636],{"class":293},[152,161993,1819],{"class":483},[152,161995,161996],{"class":289},"\"2. 存款\"",[152,161998,1825],{"class":483},[152,162000,162001,162003,162005,162008],{"class":281,"line":329},[152,162002,32636],{"class":293},[152,162004,1819],{"class":483},[152,162006,162007],{"class":289},"\"3. 取款\"",[152,162009,1825],{"class":483},[152,162011,162012,162014,162016,162019],{"class":281,"line":343},[152,162013,32636],{"class":293},[152,162015,1819],{"class":483},[152,162017,162018],{"class":289},"\"0. 退出\"",[152,162020,1825],{"class":483},[152,162022,162023],{"class":281,"line":348},[152,162024,307],{"emptyLinePlaceholder":306},[152,162026,162027,162030,162032,162034,162036,162038],{"class":281,"line":362},[152,162028,162029],{"class":483},"    choice ",[152,162031,1864],{"class":476},[152,162033,61942],{"class":293},[152,162035,1819],{"class":483},[152,162037,154410],{"class":289},[152,162039,1825],{"class":483},[152,162041,162042],{"class":281,"line":367},[152,162043,307],{"emptyLinePlaceholder":306},[152,162045,162046,162048,162050,162052,162054],{"class":281,"line":381},[152,162047,4744],{"class":476},[152,162049,154423],{"class":483},[152,162051,4592],{"class":476},[152,162053,154428],{"class":289},[152,162055,5382],{"class":483},[152,162057,162058,162060,162062,162065],{"class":281,"line":386},[152,162059,33788],{"class":293},[152,162061,1819],{"class":483},[152,162063,162064],{"class":289},"\"余额为1000元\"",[152,162066,1825],{"class":483},[152,162068,162069,162071,162073,162075,162077],{"class":281,"line":932},[152,162070,40630],{"class":476},[152,162072,154423],{"class":483},[152,162074,4592],{"class":476},[152,162076,154447],{"class":289},[152,162078,5382],{"class":483},[152,162080,162081,162083,162085,162088],{"class":281,"line":942},[152,162082,33788],{"class":293},[152,162084,1819],{"class":483},[152,162086,162087],{"class":289},"\"存款功能\"",[152,162089,1825],{"class":483},[152,162091,162092,162094,162096,162098,162100],{"class":281,"line":949},[152,162093,40630],{"class":476},[152,162095,154423],{"class":483},[152,162097,4592],{"class":476},[152,162099,154465],{"class":289},[152,162101,5382],{"class":483},[152,162103,162104,162106,162108,162111],{"class":281,"line":954},[152,162105,33788],{"class":293},[152,162107,1819],{"class":483},[152,162109,162110],{"class":289},"\"取款功能\"",[152,162112,1825],{"class":483},[152,162114,162115,162117,162119,162121,162123],{"class":281,"line":959},[152,162116,40630],{"class":476},[152,162118,154423],{"class":483},[152,162120,4592],{"class":476},[152,162122,154519],{"class":289},[152,162124,5382],{"class":483},[152,162126,162127,162129,162131,162133],{"class":281,"line":970},[152,162128,33788],{"class":293},[152,162130,1819],{"class":483},[152,162132,154530],{"class":289},[152,162134,1825],{"class":483},[152,162136,162137],{"class":281,"line":979},[152,162138,32964],{"class":476},[152,162140,162141,162143],{"class":281,"line":989},[152,162142,159359],{"class":476},[152,162144,5382],{"class":483},[152,162146,162147,162149,162151,162153],{"class":281,"line":996},[152,162148,33788],{"class":293},[152,162150,1819],{"class":483},[152,162152,154551],{"class":289},[152,162154,1825],{"class":483},[19,162156,162157,162158,162160,162161,29984],{},"菜单类程序通常使用 ",[277,162159,160859],{},"，用户选择退出时 ",[277,162162,3704],{},[1760,162164,162166],{"id":162165},"_414-易错点","4.14 易错点",[416,162168,162169,162174,162180,162188,162194],{},[419,162170,162171,162173],{},[277,162172,110000],{}," 循环必须更新控制变量。",[419,162175,162176,162179],{},[277,162177,162178],{},"range(1, 10)"," 不包含 10。",[419,162181,162182,162184,162185,162187],{},[277,162183,3704],{}," 结束整个循环，",[277,162186,156009],{}," 只跳过本轮。",[419,162189,162190,162191,162193],{},"嵌套循环中，",[277,162192,3704],{}," 只跳出当前所在的一层循环。",[419,162195,162196],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[1760,162198,162200],{"id":162199},"_415-本章练习","4.15 本章练习",[416,162202,162203,162206,162209,162212,162215],{},[419,162204,162205],{},"输出 1 到 100。",[419,162207,162208],{},"计算 1 到 100 的偶数和。",[419,162210,162211],{},"输出 100 以内能被 3 和 5 同时整除的数。",[419,162213,162214],{},"编写猜数字游戏，限制最多猜 7 次。",[419,162216,162217],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1736,162219,162220],{},"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":275,"searchDepth":303,"depth":303,"links":162222},[162223,162224,162225,162226,162227,162231,162232,162233,162234,162235,162236,162237,162238,162239,162240],{"id":160479,"depth":303,"text":160480},{"id":160509,"depth":303,"text":160510},{"id":160598,"depth":303,"text":160599},{"id":160692,"depth":303,"text":160693},{"id":160866,"depth":303,"text":160867,"children":162228},[162229,162230],{"id":160870,"depth":310,"text":160871},{"id":160934,"depth":310,"text":160935},{"id":160998,"depth":303,"text":160999},{"id":161093,"depth":303,"text":161094},{"id":161202,"depth":303,"text":161203},{"id":161398,"depth":303,"text":161399},{"id":161483,"depth":303,"text":161484},{"id":161622,"depth":303,"text":161623},{"id":161802,"depth":303,"text":161803},{"id":161951,"depth":303,"text":161952},{"id":162165,"depth":303,"text":162166},{"id":162199,"depth":303,"text":162200},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160471,"description":24991},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162247,"title":162248,"body":162249,"description":24991,"extension":1744,"meta":164254,"navigation":306,"path":164255,"seo":164256,"stem":164257,"__hash__":164258},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162250,"toc":164234},[162251,162254,162258,162261,162264,162278,162281,162295,162299,162301,162320,162322,162369,162371,162385,162389,162463,162466,162470,162473,162532,162540,162543,162596,162599,162603,162608,162663,162671,162721,162725,162730,162738,162837,162843,162847,162852,162855,162866,162907,162920,162924,162927,162963,162966,162979,162982,163042,163046,163050,163053,163104,163108,163111,163158,163164,163230,163233,163237,163240,163356,163359,163363,163366,163472,163476,163479,163517,163520,163562,163565,163625,163628,163632,164096,164099,164103,164130,164136,164197,164201,164231],[10,162252,162248],{"id":162253},"_5-函数基础",[1760,162255,162257],{"id":162256},"_51-为什么需要函数","5.1 为什么需要函数",[19,162259,162260],{},"函数用于封装一段可以重复使用的代码。",[19,162262,162263],{},"不使用函数的问题：",[416,162265,162266,162269,162272,162275],{},[419,162267,162268],{},"重复代码多。",[419,162270,162271],{},"修改逻辑时容易漏改。",[419,162273,162274],{},"主流程不清晰。",[419,162276,162277],{},"程序越写越长，难以维护。",[19,162279,162280],{},"使用函数后的好处：",[416,162282,162283,162286,162289,162292],{},[419,162284,162285],{},"提高复用性。",[419,162287,162288],{},"提高可读性。",[419,162290,162291],{},"便于调试。",[419,162293,162294],{},"便于分工。",[1760,162296,162298],{"id":162297},"_52-函数定义","5.2 函数定义",[19,162300,6823],{},[270,162302,162304],{"className":31715,"code":162303,"language":31717,"meta":275,"style":275},"def 函数名():\n    函数体\n",[277,162305,162306,162315],{"__ignoreMap":275},[152,162307,162308,162310,162313],{"class":281,"line":282},[152,162309,33284],{"class":476},[152,162311,162312],{"class":285}," 函数名",[152,162314,33290],{"class":483},[152,162316,162317],{"class":281,"line":303},[152,162318,162319],{"class":483},"    函数体\n",[19,162321,16750],{},[270,162323,162325],{"className":31715,"code":162324,"language":31717,"meta":275,"style":275},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[277,162326,162327,162336,162346,162356,162360,162364],{"__ignoreMap":275},[152,162328,162329,162331,162334],{"class":281,"line":282},[152,162330,33284],{"class":476},[152,162332,162333],{"class":285}," say_hello",[152,162335,33290],{"class":483},[152,162337,162338,162340,162342,162344],{"class":281,"line":303},[152,162339,32636],{"class":293},[152,162341,1819],{"class":483},[152,162343,7486],{"class":289},[152,162345,1825],{"class":483},[152,162347,162348,162350,162352,162354],{"class":281,"line":310},[152,162349,32636],{"class":293},[152,162351,1819],{"class":483},[152,162353,147976],{"class":289},[152,162355,1825],{"class":483},[152,162357,162358],{"class":281,"line":324},[152,162359,307],{"emptyLinePlaceholder":306},[152,162361,162362],{"class":281,"line":329},[152,162363,307],{"emptyLinePlaceholder":306},[152,162365,162366],{"class":281,"line":343},[152,162367,162368],{"class":483},"say_hello()\n",[19,162370,10657],{},[416,162372,162373,162376,162379,162382],{},[419,162374,162375],{},"函数必须先定义，再调用。",[419,162377,162378],{},"函数名遵循变量命名规则。",[419,162380,162381],{},"函数体需要缩进。",[419,162383,162384],{},"函数不调用就不会执行。",[1760,162386,162388],{"id":162387},"_53-函数调用","5.3 函数调用",[270,162390,162392],{"className":31715,"code":162391,"language":31717,"meta":275,"style":275},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[277,162393,162394,162403,162414,162425,162436,162446,162450,162454,162459],{"__ignoreMap":275},[152,162395,162396,162398,162401],{"class":281,"line":282},[152,162397,33284],{"class":476},[152,162399,162400],{"class":285}," print_menu",[152,162402,33290],{"class":483},[152,162404,162405,162407,162409,162412],{"class":281,"line":303},[152,162406,32636],{"class":293},[152,162408,1819],{"class":483},[152,162410,162411],{"class":289},"\"1. 查询\"",[152,162413,1825],{"class":483},[152,162415,162416,162418,162420,162423],{"class":281,"line":310},[152,162417,32636],{"class":293},[152,162419,1819],{"class":483},[152,162421,162422],{"class":289},"\"2. 添加\"",[152,162424,1825],{"class":483},[152,162426,162427,162429,162431,162434],{"class":281,"line":324},[152,162428,32636],{"class":293},[152,162430,1819],{"class":483},[152,162432,162433],{"class":289},"\"3. 删除\"",[152,162435,1825],{"class":483},[152,162437,162438,162440,162442,162444],{"class":281,"line":329},[152,162439,32636],{"class":293},[152,162441,1819],{"class":483},[152,162443,162018],{"class":289},[152,162445,1825],{"class":483},[152,162447,162448],{"class":281,"line":343},[152,162449,307],{"emptyLinePlaceholder":306},[152,162451,162452],{"class":281,"line":348},[152,162453,307],{"emptyLinePlaceholder":306},[152,162455,162456],{"class":281,"line":362},[152,162457,162458],{"class":483},"print_menu()\n",[152,162460,162461],{"class":281,"line":367},[152,162462,162458],{"class":483},[19,162464,162465],{},"函数可以多次调用，每次调用都会执行函数体。",[1760,162467,162469],{"id":162468},"_54-参数","5.4 参数",[19,162471,162472],{},"参数用于向函数传递数据。",[270,162474,162476],{"className":31715,"code":162475,"language":31717,"meta":275,"style":275},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[277,162477,162478,162487,162507,162511,162515,162524],{"__ignoreMap":275},[152,162479,162480,162482,162484],{"class":281,"line":282},[152,162481,33284],{"class":476},[152,162483,162333],{"class":285},[152,162485,162486],{"class":483},"(name):\n",[152,162488,162489,162491,162493,162495,162497,162499,162501,162503,162505],{"class":281,"line":303},[152,162490,32636],{"class":293},[152,162492,1819],{"class":483},[152,162494,1870],{"class":476},[152,162496,158391],{"class":289},[152,162498,2703],{"class":293},[152,162500,81147],{"class":483},[152,162502,2752],{"class":293},[152,162504,2059],{"class":289},[152,162506,1825],{"class":483},[152,162508,162509],{"class":281,"line":310},[152,162510,307],{"emptyLinePlaceholder":306},[152,162512,162513],{"class":281,"line":324},[152,162514,307],{"emptyLinePlaceholder":306},[152,162516,162517,162520,162522],{"class":281,"line":329},[152,162518,162519],{"class":483},"say_hello(",[152,162521,151225],{"class":289},[152,162523,1825],{"class":483},[152,162525,162526,162528,162530],{"class":281,"line":343},[152,162527,162519],{"class":483},[152,162529,152273],{"class":289},[152,162531,1825],{"class":483},[19,162533,162534,162536,162537,162539],{},[277,162535,81147],{}," 是形参，",[277,162538,151225],{}," 是实参。",[19,162541,162542],{},"多个参数：",[270,162544,162546],{"className":31715,"code":162545,"language":31717,"meta":275,"style":275},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[277,162547,162548,162556,162569,162575,162579,162583],{"__ignoreMap":275},[152,162549,162550,162552,162554],{"class":281,"line":282},[152,162551,33284],{"class":476},[152,162553,6851],{"class":285},[152,162555,152430],{"class":483},[152,162557,162558,162561,162563,162565,162567],{"class":281,"line":303},[152,162559,162560],{"class":483},"    result ",[152,162562,1864],{"class":476},[152,162564,12485],{"class":483},[152,162566,2289],{"class":476},[152,162568,152441],{"class":483},[152,162570,162571,162573],{"class":281,"line":310},[152,162572,32636],{"class":293},[152,162574,77922],{"class":483},[152,162576,162577],{"class":281,"line":324},[152,162578,307],{"emptyLinePlaceholder":306},[152,162580,162581],{"class":281,"line":329},[152,162582,307],{"emptyLinePlaceholder":306},[152,162584,162585,162588,162590,162592,162594],{"class":281,"line":343},[152,162586,162587],{"class":483},"add(",[152,162589,2254],{"class":293},[152,162591,14051],{"class":483},[152,162593,2508],{"class":293},[152,162595,1825],{"class":483},[19,162597,162598],{},"调用时参数数量必须匹配。",[1760,162600,162602],{"id":162601},"_55-返回值","5.5 返回值",[19,162604,162605,162607],{},[277,162606,18661],{}," 用于把函数内部的结果返回给调用者。",[270,162609,162611],{"className":31715,"code":162610,"language":31717,"meta":275,"style":275},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[277,162612,162613,162621,162631,162635,162639,162657],{"__ignoreMap":275},[152,162614,162615,162617,162619],{"class":281,"line":282},[152,162616,33284],{"class":476},[152,162618,6851],{"class":285},[152,162620,152430],{"class":483},[152,162622,162623,162625,162627,162629],{"class":281,"line":303},[152,162624,5732],{"class":476},[152,162626,12485],{"class":483},[152,162628,2289],{"class":476},[152,162630,152441],{"class":483},[152,162632,162633],{"class":281,"line":310},[152,162634,307],{"emptyLinePlaceholder":306},[152,162636,162637],{"class":281,"line":324},[152,162638,307],{"emptyLinePlaceholder":306},[152,162640,162641,162644,162646,162649,162651,162653,162655],{"class":281,"line":329},[152,162642,162643],{"class":483},"result ",[152,162645,1864],{"class":476},[152,162647,162648],{"class":483}," add(",[152,162650,2254],{"class":293},[152,162652,14051],{"class":483},[152,162654,2508],{"class":293},[152,162656,1825],{"class":483},[152,162658,162659,162661],{"class":281,"line":343},[152,162660,31752],{"class":293},[152,162662,77922],{"class":483},[19,162664,162665,162666,162668,162669,29984],{},"如果函数没有写 ",[277,162667,18661],{},"，默认返回 ",[277,162670,97023],{},[270,162672,162674],{"className":31715,"code":162673,"language":31717,"meta":275,"style":275},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[277,162675,162676,162684,162694,162698,162702,162711],{"__ignoreMap":275},[152,162677,162678,162680,162682],{"class":281,"line":282},[152,162679,33284],{"class":476},[152,162681,162333],{"class":285},[152,162683,33290],{"class":483},[152,162685,162686,162688,162690,162692],{"class":281,"line":303},[152,162687,32636],{"class":293},[152,162689,1819],{"class":483},[152,162691,7486],{"class":289},[152,162693,1825],{"class":483},[152,162695,162696],{"class":281,"line":310},[152,162697,307],{"emptyLinePlaceholder":306},[152,162699,162700],{"class":281,"line":324},[152,162701,307],{"emptyLinePlaceholder":306},[152,162703,162704,162706,162708],{"class":281,"line":329},[152,162705,162643],{"class":483},[152,162707,1864],{"class":476},[152,162709,162710],{"class":483}," say_hello()\n",[152,162712,162713,162715,162718],{"class":281,"line":343},[152,162714,31752],{"class":293},[152,162716,162717],{"class":483},"(result)  ",[152,162719,162720],{"class":866},"# None\n",[1760,162722,162724],{"id":162723},"_56-return的作用","5.6 return的作用",[19,162726,162727,162729],{},[277,162728,18661],{}," 有两个作用：",[416,162731,162732,162735],{},[419,162733,162734],{},"返回结果。",[419,162736,162737],{},"结束函数。",[270,162739,162741],{"className":31715,"code":162740,"language":31717,"meta":275,"style":275},"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",[277,162742,162743,162753,162765,162772,162776,162788,162795,162799,162806,162810,162814,162825],{"__ignoreMap":275},[152,162744,162745,162747,162750],{"class":281,"line":282},[152,162746,33284],{"class":476},[152,162748,162749],{"class":285}," check_age",[152,162751,162752],{"class":483},"(age):\n",[152,162754,162755,162757,162759,162761,162763],{"class":281,"line":303},[152,162756,4744],{"class":476},[152,162758,17322],{"class":483},[152,162760,844],{"class":476},[152,162762,5735],{"class":293},[152,162764,5382],{"class":483},[152,162766,162767,162769],{"class":281,"line":310},[152,162768,16367],{"class":476},[152,162770,162771],{"class":289}," \"年龄不合法\"\n",[152,162773,162774],{"class":281,"line":324},[152,162775,307],{"emptyLinePlaceholder":306},[152,162777,162778,162780,162782,162784,162786],{"class":281,"line":329},[152,162779,4744],{"class":476},[152,162781,17322],{"class":483},[152,162783,3370],{"class":476},[152,162785,157622],{"class":293},[152,162787,5382],{"class":483},[152,162789,162790,162792],{"class":281,"line":343},[152,162791,16367],{"class":476},[152,162793,162794],{"class":289}," \"成年人\"\n",[152,162796,162797],{"class":281,"line":348},[152,162798,307],{"emptyLinePlaceholder":306},[152,162800,162801,162803],{"class":281,"line":362},[152,162802,5732],{"class":476},[152,162804,162805],{"class":289}," \"未成年人\"\n",[152,162807,162808],{"class":281,"line":367},[152,162809,307],{"emptyLinePlaceholder":306},[152,162811,162812],{"class":281,"line":381},[152,162813,307],{"emptyLinePlaceholder":306},[152,162815,162816,162818,162821,162823],{"class":281,"line":386},[152,162817,31752],{"class":293},[152,162819,162820],{"class":483},"(check_age(",[152,162822,2508],{"class":293},[152,162824,31834],{"class":483},[152,162826,162827,162829,162831,162833,162835],{"class":281,"line":932},[152,162828,31752],{"class":293},[152,162830,162820],{"class":483},[152,162832,2340],{"class":476},[152,162834,2026],{"class":293},[152,162836,31834],{"class":483},[19,162838,162839,162840,162842],{},"函数执行到 ",[277,162841,18661],{}," 后，后面的代码不会继续执行。",[1760,162844,162846],{"id":162845},"_57-none","5.7 None",[19,162848,162849,162851],{},[277,162850,97023],{}," 表示空值或没有结果。",[19,162853,162854],{},"常见使用场景：",[416,162856,162857,162860,162863],{},[419,162858,162859],{},"函数没有返回值。",[419,162861,162862],{},"变量暂时没有具体值。",[419,162864,162865],{},"表示查询不到结果。",[270,162867,162869],{"className":31715,"code":162868,"language":31717,"meta":275,"style":275},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[277,162870,162871,162879,162883,162896],{"__ignoreMap":275},[152,162872,162873,162875,162877],{"class":281,"line":282},[152,162874,162643],{"class":483},[152,162876,1864],{"class":476},[152,162878,153509],{"class":293},[152,162880,162881],{"class":281,"line":303},[152,162882,307],{"emptyLinePlaceholder":306},[152,162884,162885,162887,162890,162892,162894],{"class":281,"line":310},[152,162886,3202],{"class":476},[152,162888,162889],{"class":483}," result ",[152,162891,40264],{"class":476},[152,162893,40270],{"class":293},[152,162895,5382],{"class":483},[152,162897,162898,162900,162902,162905],{"class":281,"line":324},[152,162899,32636],{"class":293},[152,162901,1819],{"class":483},[152,162903,162904],{"class":289},"\"没有数据\"",[152,162906,1825],{"class":483},[19,162908,162909,162910,162912,162913,162916,162917,29984],{},"判断 ",[277,162911,97023],{}," 推荐使用 ",[277,162914,162915],{},"is None","，不要写成 ",[277,162918,162919],{},"== None",[1760,162921,162923],{"id":162922},"_58-函数文档字符串","5.8 函数文档字符串",[19,162925,162926],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[270,162928,162930],{"className":31715,"code":162929,"language":31717,"meta":275,"style":275},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[277,162931,162932,162942,162947],{"__ignoreMap":275},[152,162933,162934,162936,162939],{"class":281,"line":282},[152,162935,33284],{"class":476},[152,162937,162938],{"class":285}," calculate_bmi",[152,162940,162941],{"class":483},"(weight, height):\n",[152,162943,162944],{"class":281,"line":303},[152,162945,162946],{"class":289},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[152,162948,162949,162951,162954,162956,162959,162961],{"class":281,"line":310},[152,162950,5732],{"class":476},[152,162952,162953],{"class":483}," weight ",[152,162955,2392],{"class":476},[152,162957,162958],{"class":483}," height ",[152,162960,12277],{"class":476},[152,162962,49060],{"class":293},[19,162964,162965],{},"查看说明：",[270,162967,162969],{"className":31715,"code":162968,"language":31717,"meta":275,"style":275},"help(calculate_bmi)\n",[277,162970,162971],{"__ignoreMap":275},[152,162972,162973,162976],{"class":281,"line":282},[152,162974,162975],{"class":293},"help",[152,162977,162978],{"class":483},"(calculate_bmi)\n",[19,162980,162981],{},"较完整的写法：",[270,162983,162985],{"className":31715,"code":162984,"language":31717,"meta":275,"style":275},"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",[277,162986,162987,162995,163000,163005,163009,163014,163019,163024,163028],{"__ignoreMap":275},[152,162988,162989,162991,162993],{"class":281,"line":282},[152,162990,33284],{"class":476},[152,162992,162938],{"class":285},[152,162994,162941],{"class":483},[152,162996,162997],{"class":281,"line":303},[152,162998,162999],{"class":289},"    \"\"\"\n",[152,163001,163002],{"class":281,"line":310},[152,163003,163004],{"class":289},"    计算BMI。\n",[152,163006,163007],{"class":281,"line":324},[152,163008,307],{"emptyLinePlaceholder":306},[152,163010,163011],{"class":281,"line":329},[152,163012,163013],{"class":289},"    :param weight: 体重，单位kg\n",[152,163015,163016],{"class":281,"line":343},[152,163017,163018],{"class":289},"    :param height: 身高，单位m\n",[152,163020,163021],{"class":281,"line":348},[152,163022,163023],{"class":289},"    :return: BMI数值\n",[152,163025,163026],{"class":281,"line":362},[152,163027,162999],{"class":289},[152,163029,163030,163032,163034,163036,163038,163040],{"class":281,"line":367},[152,163031,5732],{"class":476},[152,163033,162953],{"class":483},[152,163035,2392],{"class":476},[152,163037,162958],{"class":483},[152,163039,12277],{"class":476},[152,163041,49060],{"class":293},[1760,163043,163045],{"id":163044},"_59-变量作用域","5.9 变量作用域",[14,163047,163049],{"id":163048},"_591-局部变量","5.9.1 局部变量",[19,163051,163052],{},"在函数内部定义的变量，只能在函数内部使用。",[270,163054,163056],{"className":31715,"code":163055,"language":31717,"meta":275,"style":275},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[277,163057,163058,163067,163075,163081,163085,163089,163094],{"__ignoreMap":275},[152,163059,163060,163062,163065],{"class":281,"line":282},[152,163061,33284],{"class":476},[152,163063,163064],{"class":285}," test",[152,163066,33290],{"class":483},[152,163068,163069,163071,163073],{"class":281,"line":303},[152,163070,46930],{"class":483},[152,163072,1864],{"class":476},[152,163074,59765],{"class":293},[152,163076,163077,163079],{"class":281,"line":310},[152,163078,32636],{"class":293},[152,163080,1832],{"class":483},[152,163082,163083],{"class":281,"line":324},[152,163084,307],{"emptyLinePlaceholder":306},[152,163086,163087],{"class":281,"line":329},[152,163088,307],{"emptyLinePlaceholder":306},[152,163090,163091],{"class":281,"line":343},[152,163092,163093],{"class":483},"test()\n",[152,163095,163096,163098,163101],{"class":281,"line":348},[152,163097,31752],{"class":293},[152,163099,163100],{"class":483},"(num)  ",[152,163102,163103],{"class":866},"# 报错\n",[14,163105,163107],{"id":163106},"_592-全局变量","5.9.2 全局变量",[19,163109,163110],{},"在函数外部定义的变量，可以在函数内部读取。",[270,163112,163114],{"className":31715,"code":163113,"language":31717,"meta":275,"style":275},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[277,163115,163116,163124,163128,163132,163140,163146,163150,163154],{"__ignoreMap":275},[152,163117,163118,163120,163122],{"class":281,"line":282},[152,163119,147873],{"class":483},[152,163121,1864],{"class":476},[152,163123,150690],{"class":289},[152,163125,163126],{"class":281,"line":303},[152,163127,307],{"emptyLinePlaceholder":306},[152,163129,163130],{"class":281,"line":310},[152,163131,307],{"emptyLinePlaceholder":306},[152,163133,163134,163136,163138],{"class":281,"line":324},[152,163135,33284],{"class":476},[152,163137,162333],{"class":285},[152,163139,33290],{"class":483},[152,163141,163142,163144],{"class":281,"line":329},[152,163143,32636],{"class":293},[152,163145,151997],{"class":483},[152,163147,163148],{"class":281,"line":343},[152,163149,307],{"emptyLinePlaceholder":306},[152,163151,163152],{"class":281,"line":348},[152,163153,307],{"emptyLinePlaceholder":306},[152,163155,163156],{"class":281,"line":362},[152,163157,162368],{"class":483},[19,163159,163160,163161,29984],{},"如果要在函数内部修改全局变量，需要 ",[277,163162,163163],{},"global",[270,163165,163167],{"className":31715,"code":163166,"language":31717,"meta":275,"style":275},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[277,163168,163169,163177,163181,163185,163194,163202,163210,163214,163218,163223],{"__ignoreMap":275},[152,163170,163171,163173,163175],{"class":281,"line":282},[152,163172,148028],{"class":483},[152,163174,1864],{"class":476},[152,163176,48670],{"class":293},[152,163178,163179],{"class":281,"line":303},[152,163180,307],{"emptyLinePlaceholder":306},[152,163182,163183],{"class":281,"line":310},[152,163184,307],{"emptyLinePlaceholder":306},[152,163186,163187,163189,163192],{"class":281,"line":324},[152,163188,33284],{"class":476},[152,163190,163191],{"class":285}," add_count",[152,163193,33290],{"class":483},[152,163195,163196,163199],{"class":281,"line":329},[152,163197,163198],{"class":476},"    global",[152,163200,163201],{"class":483}," count\n",[152,163203,163204,163206,163208],{"class":281,"line":343},[152,163205,160770],{"class":483},[152,163207,11109],{"class":476},[152,163209,57036],{"class":293},[152,163211,163212],{"class":281,"line":348},[152,163213,307],{"emptyLinePlaceholder":306},[152,163215,163216],{"class":281,"line":362},[152,163217,307],{"emptyLinePlaceholder":306},[152,163219,163220],{"class":281,"line":367},[152,163221,163222],{"class":483},"add_count()\n",[152,163224,163225,163227],{"class":281,"line":381},[152,163226,31752],{"class":293},[152,163228,163229],{"class":483},"(count)\n",[19,163231,163232],{},"不建议大量使用全局变量，项目变大后很难维护。",[1760,163234,163236],{"id":163235},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163238,163239],{},"一个函数中可以调用另一个函数。",[270,163241,163243],{"className":31715,"code":163242,"language":31717,"meta":275,"style":275},"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",[277,163244,163245,163254,163268,163272,163276,163285,163290,163310,163331,163335,163339,163343],{"__ignoreMap":275},[152,163246,163247,163249,163252],{"class":281,"line":282},[152,163248,33284],{"class":476},[152,163250,163251],{"class":285}," print_line",[152,163253,33290],{"class":483},[152,163255,163256,163258,163260,163262,163264,163266],{"class":281,"line":303},[152,163257,32636],{"class":293},[152,163259,1819],{"class":483},[152,163261,33820],{"class":289},[152,163263,8160],{"class":476},[152,163265,80002],{"class":293},[152,163267,1825],{"class":483},[152,163269,163270],{"class":281,"line":310},[152,163271,307],{"emptyLinePlaceholder":306},[152,163273,163274],{"class":281,"line":324},[152,163275,307],{"emptyLinePlaceholder":306},[152,163277,163278,163280,163283],{"class":281,"line":329},[152,163279,33284],{"class":476},[152,163281,163282],{"class":285}," print_info",[152,163284,150712],{"class":483},[152,163286,163287],{"class":281,"line":343},[152,163288,163289],{"class":483},"    print_line()\n",[152,163291,163292,163294,163296,163298,163300,163302,163304,163306,163308],{"class":281,"line":348},[152,163293,32636],{"class":293},[152,163295,1819],{"class":483},[152,163297,1870],{"class":476},[152,163299,158019],{"class":289},[152,163301,2703],{"class":293},[152,163303,81147],{"class":483},[152,163305,2752],{"class":293},[152,163307,2059],{"class":289},[152,163309,1825],{"class":483},[152,163311,163312,163314,163316,163318,163321,163323,163325,163327,163329],{"class":281,"line":362},[152,163313,32636],{"class":293},[152,163315,1819],{"class":483},[152,163317,1870],{"class":476},[152,163319,163320],{"class":289},"\"年龄:",[152,163322,2703],{"class":293},[152,163324,71558],{"class":483},[152,163326,2752],{"class":293},[152,163328,2059],{"class":289},[152,163330,1825],{"class":483},[152,163332,163333],{"class":281,"line":367},[152,163334,163289],{"class":483},[152,163336,163337],{"class":281,"line":381},[152,163338,307],{"emptyLinePlaceholder":306},[152,163340,163341],{"class":281,"line":386},[152,163342,307],{"emptyLinePlaceholder":306},[152,163344,163345,163348,163350,163352,163354],{"class":281,"line":932},[152,163346,163347],{"class":483},"print_info(",[152,163349,151225],{"class":289},[152,163351,14051],{"class":483},[152,163353,2458],{"class":293},[152,163355,1825],{"class":483},[19,163357,163358],{},"这种方式可以把小功能组合成大功能。",[1760,163360,163362],{"id":163361},"_511-参数检查","5.11 参数检查",[19,163364,163365],{},"函数内部可以检查参数是否合法。",[270,163367,163369],{"className":31715,"code":163368,"language":31717,"meta":275,"style":275},"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",[277,163370,163371,163380,163392,163398,163408,163412,163416,163433,163437,163449,163460,163466],{"__ignoreMap":275},[152,163372,163373,163375,163378],{"class":281,"line":282},[152,163374,33284],{"class":476},[152,163376,163377],{"class":285}," divide",[152,163379,152430],{"class":483},[152,163381,163382,163384,163386,163388,163390],{"class":281,"line":303},[152,163383,4744],{"class":476},[152,163385,12498],{"class":483},[152,163387,4592],{"class":476},[152,163389,5735],{"class":293},[152,163391,5382],{"class":483},[152,163393,163394,163396],{"class":281,"line":310},[152,163395,16367],{"class":476},[152,163397,153509],{"class":293},[152,163399,163400,163402,163404,163406],{"class":281,"line":324},[152,163401,5732],{"class":476},[152,163403,12485],{"class":483},[152,163405,2392],{"class":476},[152,163407,152441],{"class":483},[152,163409,163410],{"class":281,"line":329},[152,163411,307],{"emptyLinePlaceholder":306},[152,163413,163414],{"class":281,"line":343},[152,163415,307],{"emptyLinePlaceholder":306},[152,163417,163418,163420,163422,163425,163427,163429,163431],{"class":281,"line":348},[152,163419,162643],{"class":483},[152,163421,1864],{"class":476},[152,163423,163424],{"class":483}," divide(",[152,163426,2254],{"class":293},[152,163428,14051],{"class":483},[152,163430,2000],{"class":293},[152,163432,1825],{"class":483},[152,163434,163435],{"class":281,"line":362},[152,163436,307],{"emptyLinePlaceholder":306},[152,163438,163439,163441,163443,163445,163447],{"class":281,"line":367},[152,163440,3202],{"class":476},[152,163442,162889],{"class":483},[152,163444,40264],{"class":476},[152,163446,40270],{"class":293},[152,163448,5382],{"class":483},[152,163450,163451,163453,163455,163458],{"class":281,"line":381},[152,163452,32636],{"class":293},[152,163454,1819],{"class":483},[152,163456,163457],{"class":289},"\"除数不能为0\"",[152,163459,1825],{"class":483},[152,163461,163462,163464],{"class":281,"line":386},[152,163463,3361],{"class":476},[152,163465,5382],{"class":483},[152,163467,163468,163470],{"class":281,"line":932},[152,163469,32636],{"class":293},[152,163471,77922],{"class":483},[1760,163473,163475],{"id":163474},"_512-类型提示","5.12 类型提示",[19,163477,163478],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[270,163480,163482],{"className":31715,"code":163481,"language":31717,"meta":275,"style":275},"def add(a: int, b: int) -> int:\n    return a + b\n",[277,163483,163484,163507],{"__ignoreMap":275},[152,163485,163486,163488,163490,163493,163495,163498,163500,163503,163505],{"class":281,"line":282},[152,163487,33284],{"class":476},[152,163489,6851],{"class":285},[152,163491,163492],{"class":483},"(a: ",[152,163494,1822],{"class":293},[152,163496,163497],{"class":483},", b: ",[152,163499,1822],{"class":293},[152,163501,163502],{"class":483},") -> ",[152,163504,1822],{"class":293},[152,163506,5382],{"class":483},[152,163508,163509,163511,163513,163515],{"class":281,"line":303},[152,163510,5732],{"class":476},[152,163512,12485],{"class":483},[152,163514,2289],{"class":476},[152,163516,152441],{"class":483},[19,163518,163519],{},"字符串参数：",[270,163521,163523],{"className":31715,"code":163522,"language":31717,"meta":275,"style":275},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[277,163524,163525,163542],{"__ignoreMap":275},[152,163526,163527,163529,163531,163534,163536,163538,163540],{"class":281,"line":282},[152,163528,33284],{"class":476},[152,163530,162333],{"class":285},[152,163532,163533],{"class":483},"(name: ",[152,163535,2974],{"class":293},[152,163537,163502],{"class":483},[152,163539,97023],{"class":293},[152,163541,5382],{"class":483},[152,163543,163544,163546,163548,163550,163552,163554,163556,163558,163560],{"class":281,"line":303},[152,163545,32636],{"class":293},[152,163547,1819],{"class":483},[152,163549,1870],{"class":476},[152,163551,158391],{"class":289},[152,163553,2703],{"class":293},[152,163555,81147],{"class":483},[152,163557,2752],{"class":293},[152,163559,2059],{"class":289},[152,163561,1825],{"class":483},[19,163563,163564],{},"列表参数：",[270,163566,163568],{"className":31715,"code":163567,"language":31717,"meta":275,"style":275},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[277,163569,163570,163589,163597,163609,163618],{"__ignoreMap":275},[152,163571,163572,163574,163577,163580,163582,163585,163587],{"class":281,"line":282},[152,163573,33284],{"class":476},[152,163575,163576],{"class":285}," get_total",[152,163578,163579],{"class":483},"(numbers: list[",[152,163581,1822],{"class":293},[152,163583,163584],{"class":483},"]) -> ",[152,163586,1822],{"class":293},[152,163588,5382],{"class":483},[152,163590,163591,163593,163595],{"class":281,"line":303},[152,163592,160644],{"class":483},[152,163594,1864],{"class":476},[152,163596,48670],{"class":293},[152,163598,163599,163601,163604,163606],{"class":281,"line":310},[152,163600,4844],{"class":476},[152,163602,163603],{"class":483}," number ",[152,163605,27653],{"class":476},[152,163607,163608],{"class":483}," numbers:\n",[152,163610,163611,163613,163615],{"class":281,"line":324},[152,163612,161319],{"class":483},[152,163614,11109],{"class":476},[152,163616,163617],{"class":483}," number\n",[152,163619,163620,163622],{"class":281,"line":329},[152,163621,5732],{"class":476},[152,163623,163624],{"class":483}," total\n",[19,163626,163627],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[1760,163629,163631],{"id":163630},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[270,163633,163635],{"className":31715,"code":163634,"language":31717,"meta":275,"style":275},"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",[277,163636,163637,163647,163651,163655,163663,163674,163684,163694,163704,163714,163718,163722,163731,163753,163757,163761,163770,163776,163796,163808,163819,163823,163832,163843,163848,163852,163856,163865,163871,163890,163902,163912,163916,163927,163937,163941,163949,163960,163964,163968,163972,163980,163985,163999,164003,164015,164020,164032,164037,164049,164054,164066,164076,164080,164086],{"__ignoreMap":275},[152,163638,163639,163642,163644],{"class":281,"line":282},[152,163640,163641],{"class":483},"balance ",[152,163643,1864],{"class":476},[152,163645,163646],{"class":293}," 1000\n",[152,163648,163649],{"class":281,"line":303},[152,163650,307],{"emptyLinePlaceholder":306},[152,163652,163653],{"class":281,"line":310},[152,163654,307],{"emptyLinePlaceholder":306},[152,163656,163657,163659,163661],{"class":281,"line":324},[152,163658,33284],{"class":476},[152,163660,153370],{"class":285},[152,163662,33290],{"class":483},[152,163664,163665,163667,163669,163672],{"class":281,"line":329},[152,163666,32636],{"class":293},[152,163668,1819],{"class":483},[152,163670,163671],{"class":289},"\"====== ATM ======\"",[152,163673,1825],{"class":483},[152,163675,163676,163678,163680,163682],{"class":281,"line":343},[152,163677,32636],{"class":293},[152,163679,1819],{"class":483},[152,163681,161985],{"class":289},[152,163683,1825],{"class":483},[152,163685,163686,163688,163690,163692],{"class":281,"line":348},[152,163687,32636],{"class":293},[152,163689,1819],{"class":483},[152,163691,161996],{"class":289},[152,163693,1825],{"class":483},[152,163695,163696,163698,163700,163702],{"class":281,"line":362},[152,163697,32636],{"class":293},[152,163699,1819],{"class":483},[152,163701,162007],{"class":289},[152,163703,1825],{"class":483},[152,163705,163706,163708,163710,163712],{"class":281,"line":367},[152,163707,32636],{"class":293},[152,163709,1819],{"class":483},[152,163711,162018],{"class":289},[152,163713,1825],{"class":483},[152,163715,163716],{"class":281,"line":381},[152,163717,307],{"emptyLinePlaceholder":306},[152,163719,163720],{"class":281,"line":386},[152,163721,307],{"emptyLinePlaceholder":306},[152,163723,163724,163726,163729],{"class":281,"line":932},[152,163725,33284],{"class":476},[152,163727,163728],{"class":285}," show_balance",[152,163730,33290],{"class":483},[152,163732,163733,163735,163737,163739,163742,163744,163747,163749,163751],{"class":281,"line":942},[152,163734,32636],{"class":293},[152,163736,1819],{"class":483},[152,163738,1870],{"class":476},[152,163740,163741],{"class":289},"\"当前余额:",[152,163743,2703],{"class":293},[152,163745,163746],{"class":483},"balance",[152,163748,2752],{"class":293},[152,163750,158349],{"class":289},[152,163752,1825],{"class":483},[152,163754,163755],{"class":281,"line":949},[152,163756,307],{"emptyLinePlaceholder":306},[152,163758,163759],{"class":281,"line":954},[152,163760,307],{"emptyLinePlaceholder":306},[152,163762,163763,163765,163768],{"class":281,"line":959},[152,163764,33284],{"class":476},[152,163766,163767],{"class":285}," save_money",[152,163769,33290],{"class":483},[152,163771,163772,163774],{"class":281,"line":970},[152,163773,163198],{"class":476},[152,163775,151436],{"class":483},[152,163777,163778,163781,163783,163785,163787,163789,163791,163794],{"class":281,"line":979},[152,163779,163780],{"class":483},"    money ",[152,163782,1864],{"class":476},[152,163784,111134],{"class":293},[152,163786,1819],{"class":483},[152,163788,55158],{"class":293},[152,163790,1819],{"class":483},[152,163792,163793],{"class":289},"\"请输入存款金额:\"",[152,163795,31834],{"class":483},[152,163797,163798,163800,163802,163804,163806],{"class":281,"line":989},[152,163799,4744],{"class":476},[152,163801,151479],{"class":483},[152,163803,3259],{"class":476},[152,163805,5735],{"class":293},[152,163807,5382],{"class":483},[152,163809,163810,163812,163814,163817],{"class":281,"line":996},[152,163811,33788],{"class":293},[152,163813,1819],{"class":483},[152,163815,163816],{"class":289},"\"金额必须大于0\"",[152,163818,1825],{"class":483},[152,163820,163821],{"class":281,"line":1001},[152,163822,153698],{"class":476},[152,163824,163825,163828,163830],{"class":281,"line":1006},[152,163826,163827],{"class":483},"    balance ",[152,163829,11109],{"class":476},[152,163831,151512],{"class":483},[152,163833,163834,163836,163838,163841],{"class":281,"line":1018},[152,163835,32636],{"class":293},[152,163837,1819],{"class":483},[152,163839,163840],{"class":289},"\"存款成功\"",[152,163842,1825],{"class":483},[152,163844,163845],{"class":281,"line":1027},[152,163846,163847],{"class":483},"    show_balance()\n",[152,163849,163850],{"class":281,"line":1037},[152,163851,307],{"emptyLinePlaceholder":306},[152,163853,163854],{"class":281,"line":1044},[152,163855,307],{"emptyLinePlaceholder":306},[152,163857,163858,163860,163863],{"class":281,"line":1049},[152,163859,33284],{"class":476},[152,163861,163862],{"class":285}," withdraw_money",[152,163864,33290],{"class":483},[152,163866,163867,163869],{"class":281,"line":1054},[152,163868,163198],{"class":476},[152,163870,151436],{"class":483},[152,163872,163873,163875,163877,163879,163881,163883,163885,163888],{"class":281,"line":1065},[152,163874,163780],{"class":483},[152,163876,1864],{"class":476},[152,163878,111134],{"class":293},[152,163880,1819],{"class":483},[152,163882,55158],{"class":293},[152,163884,1819],{"class":483},[152,163886,163887],{"class":289},"\"请输入取款金额:\"",[152,163889,31834],{"class":483},[152,163891,163892,163894,163896,163898,163900],{"class":281,"line":1074},[152,163893,4744],{"class":476},[152,163895,151479],{"class":483},[152,163897,3259],{"class":476},[152,163899,5735],{"class":293},[152,163901,5382],{"class":483},[152,163903,163904,163906,163908,163910],{"class":281,"line":1084},[152,163905,33788],{"class":293},[152,163907,1819],{"class":483},[152,163909,163816],{"class":289},[152,163911,1825],{"class":483},[152,163913,163914],{"class":281,"line":1091},[152,163915,153698],{"class":476},[152,163917,163918,163920,163922,163924],{"class":281,"line":1096},[152,163919,4744],{"class":476},[152,163921,151479],{"class":483},[152,163923,487],{"class":476},[152,163925,163926],{"class":483}," balance:\n",[152,163928,163929,163931,163933,163935],{"class":281,"line":1101},[152,163930,33788],{"class":293},[152,163932,1819],{"class":483},[152,163934,151574],{"class":289},[152,163936,1825],{"class":483},[152,163938,163939],{"class":281,"line":1112},[152,163940,153698],{"class":476},[152,163942,163943,163945,163947],{"class":281,"line":1121},[152,163944,163827],{"class":483},[152,163946,151589],{"class":476},[152,163948,151512],{"class":483},[152,163950,163951,163953,163955,163958],{"class":281,"line":1131},[152,163952,32636],{"class":293},[152,163954,1819],{"class":483},[152,163956,163957],{"class":289},"\"取款成功\"",[152,163959,1825],{"class":483},[152,163961,163962],{"class":281,"line":1138},[152,163963,163847],{"class":483},[152,163965,163966],{"class":281,"line":1143},[152,163967,307],{"emptyLinePlaceholder":306},[152,163969,163970],{"class":281,"line":1148},[152,163971,307],{"emptyLinePlaceholder":306},[152,163973,163974,163976,163978],{"class":281,"line":1159},[152,163975,110000],{"class":476},[152,163977,96629],{"class":293},[152,163979,5382],{"class":483},[152,163981,163982],{"class":281,"line":1168},[152,163983,163984],{"class":483},"    show_menu()\n",[152,163986,163987,163989,163991,163993,163995,163997],{"class":281,"line":1178},[152,163988,162029],{"class":483},[152,163990,1864],{"class":476},[152,163992,61942],{"class":293},[152,163994,1819],{"class":483},[152,163996,154410],{"class":289},[152,163998,1825],{"class":483},[152,164000,164001],{"class":281,"line":1185},[152,164002,307],{"emptyLinePlaceholder":306},[152,164004,164005,164007,164009,164011,164013],{"class":281,"line":1190},[152,164006,4744],{"class":476},[152,164008,154423],{"class":483},[152,164010,4592],{"class":476},[152,164012,154428],{"class":289},[152,164014,5382],{"class":483},[152,164016,164017],{"class":281,"line":1195},[152,164018,164019],{"class":483},"        show_balance()\n",[152,164021,164022,164024,164026,164028,164030],{"class":281,"line":1206},[152,164023,40630],{"class":476},[152,164025,154423],{"class":483},[152,164027,4592],{"class":476},[152,164029,154447],{"class":289},[152,164031,5382],{"class":483},[152,164033,164034],{"class":281,"line":1215},[152,164035,164036],{"class":483},"        save_money()\n",[152,164038,164039,164041,164043,164045,164047],{"class":281,"line":1225},[152,164040,40630],{"class":476},[152,164042,154423],{"class":483},[152,164044,4592],{"class":476},[152,164046,154465],{"class":289},[152,164048,5382],{"class":483},[152,164050,164051],{"class":281,"line":1232},[152,164052,164053],{"class":483},"        withdraw_money()\n",[152,164055,164056,164058,164060,164062,164064],{"class":281,"line":1237},[152,164057,40630],{"class":476},[152,164059,154423],{"class":483},[152,164061,4592],{"class":476},[152,164063,154519],{"class":289},[152,164065,5382],{"class":483},[152,164067,164068,164070,164072,164074],{"class":281,"line":1242},[152,164069,33788],{"class":293},[152,164071,1819],{"class":483},[152,164073,154530],{"class":289},[152,164075,1825],{"class":483},[152,164077,164078],{"class":281,"line":1253},[152,164079,32964],{"class":476},[152,164081,164082,164084],{"class":281,"line":1262},[152,164083,159359],{"class":476},[152,164085,5382],{"class":483},[152,164087,164088,164090,164092,164094],{"class":281,"line":1272},[152,164089,33788],{"class":293},[152,164091,1819],{"class":483},[152,164093,154551],{"class":289},[152,164095,1825],{"class":483},[19,164097,164098],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[1760,164100,164102],{"id":164101},"_514-易错点","5.14 易错点",[416,164104,164105,164108,164111,164116,164121,164124],{},[419,164106,164107],{},"函数定义后必须调用才会执行。",[419,164109,164110],{},"函数名后面有括号才是调用。",[419,164112,164113,164115],{},[277,164114,18661],{}," 后面的代码不会执行。",[419,164117,164118,164119,29984],{},"没有返回值的函数默认返回 ",[277,164120,97023],{},[419,164122,164123],{},"局部变量不能在函数外部访问。",[419,164125,164126,164127,164129],{},"不要滥用 ",[277,164128,163163],{},"，更好的方式是让函数返回新值。",[19,164131,164132,164133,164135],{},"例如不用 ",[277,164134,163163],{}," 改写存款：",[270,164137,164139],{"className":31715,"code":164138,"language":31717,"meta":275,"style":275},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[277,164140,164141,164150,164161,164165,164169,164177,164190],{"__ignoreMap":275},[152,164142,164143,164145,164147],{"class":281,"line":282},[152,164144,33284],{"class":476},[152,164146,163767],{"class":285},[152,164148,164149],{"class":483},"(balance, money):\n",[152,164151,164152,164154,164157,164159],{"class":281,"line":303},[152,164153,5732],{"class":476},[152,164155,164156],{"class":483}," balance ",[152,164158,2289],{"class":476},[152,164160,151512],{"class":483},[152,164162,164163],{"class":281,"line":310},[152,164164,307],{"emptyLinePlaceholder":306},[152,164166,164167],{"class":281,"line":324},[152,164168,307],{"emptyLinePlaceholder":306},[152,164170,164171,164173,164175],{"class":281,"line":329},[152,164172,163641],{"class":483},[152,164174,1864],{"class":476},[152,164176,163646],{"class":293},[152,164178,164179,164181,164183,164186,164188],{"class":281,"line":343},[152,164180,163641],{"class":483},[152,164182,1864],{"class":476},[152,164184,164185],{"class":483}," save_money(balance, ",[152,164187,3382],{"class":293},[152,164189,1825],{"class":483},[152,164191,164192,164194],{"class":281,"line":348},[152,164193,31752],{"class":293},[152,164195,164196],{"class":483},"(balance)\n",[1760,164198,164200],{"id":164199},"_515-本章练习","5.15 本章练习",[416,164202,164203,164210,164216,164222,164228],{},[419,164204,164205,164206,164209],{},"定义函数 ",[277,164207,164208],{},"print_student(name, age)","，输出学生信息。",[419,164211,164205,164212,164215],{},[277,164213,164214],{},"get_max(a, b, c)","，返回三个数中的最大值。",[419,164217,164205,164218,164221],{},[277,164219,164220],{},"is_even(num)","，判断一个数是否为偶数。",[419,164223,164205,164224,164227],{},[277,164225,164226],{},"calculate_bmi(weight, height)","，返回 BMI。",[419,164229,164230],{},"把第 4 章的菜单程序拆分成多个函数。",[1736,164232,164233],{},"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":275,"searchDepth":303,"depth":303,"links":164235},[164236,164237,164238,164239,164240,164241,164242,164243,164244,164248,164249,164250,164251,164252,164253],{"id":162256,"depth":303,"text":162257},{"id":162297,"depth":303,"text":162298},{"id":162387,"depth":303,"text":162388},{"id":162468,"depth":303,"text":162469},{"id":162601,"depth":303,"text":162602},{"id":162723,"depth":303,"text":162724},{"id":162845,"depth":303,"text":162846},{"id":162922,"depth":303,"text":162923},{"id":163044,"depth":303,"text":163045,"children":164245},[164246,164247],{"id":163048,"depth":310,"text":163049},{"id":163106,"depth":310,"text":163107},{"id":163235,"depth":303,"text":163236},{"id":163361,"depth":303,"text":163362},{"id":163474,"depth":303,"text":163475},{"id":163630,"depth":303,"text":163631},{"id":164101,"depth":303,"text":164102},{"id":164199,"depth":303,"text":164200},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162248,"description":24991},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164260,"title":164261,"body":164262,"description":24991,"extension":1744,"meta":167306,"navigation":306,"path":167307,"seo":167308,"stem":167309,"__hash__":167310},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164263,"toc":167287},[164264,164267,164271,164274,164277,164381,164384,164388,164391,164471,164474,164478,164481,164541,164544,164580,164583,164598,164602,164675,164678,164733,164736,164806,164809,164893,164903,164961,164965,165010,165013,165039,165042,165148,165152,165155,165197,165200,165264,165267,165271,165274,165335,165338,165368,165371,165409,165413,165416,165425,165428,165552,165555,165596,165600,165603,165614,165654,165657,165672,165677,165680,165747,165750,165840,165844,165847,165895,165898,165925,165927,165957,165960,165980,165983,166014,166017,166050,166054,166057,166081,166084,166108,166111,166135,166139,166142,166272,166275,166355,166358,166433,166437,166440,166490,166493,166535,166538,166562,166564,166588,166591,166646,166649,166715,166719,166722,166725,166763,166766,166819,166822,166868,166871,166904,166907,166911,167230,167234,167263,167267,167284],[10,164265,164261],{"id":164266},"_6-数据容器",[1760,164268,164270],{"id":164269},"_61-什么是数据容器","6.1 什么是数据容器",[19,164272,164273],{},"数据容器用于一次保存多个数据。",[19,164275,164276],{},"常见容器：",[23,164278,164279,164296],{},[26,164280,164281],{},[29,164282,164283,164285,164288,164291,164294],{},[32,164284,27382],{},[32,164286,164287],{},"是否有序",[32,164289,164290],{},"是否可变",[32,164292,164293],{},"是否允许重复",[32,164295,41],{},[43,164297,164298,164316,164332,164347,164364],{},[29,164299,164300,164303,164306,164309,164312],{},[48,164301,164302],{},"list列表",[48,164304,164305],{},"有序",[48,164307,164308],{},"可变",[48,164310,164311],{},"允许",[48,164313,164314],{},[277,164315,156594],{},[29,164317,164318,164321,164323,164326,164328],{},[48,164319,164320],{},"tuple元组",[48,164322,164305],{},[48,164324,164325],{},"不可变",[48,164327,164311],{},[48,164329,164330],{},[277,164331,156607],{},[29,164333,164334,164337,164339,164341,164343],{},[48,164335,164336],{},"str字符串",[48,164338,164305],{},[48,164340,164325],{},[48,164342,164311],{},[48,164344,164345],{},[277,164346,157217],{},[29,164348,164349,164352,164355,164357,164360],{},[48,164350,164351],{},"set集合",[48,164353,164354],{},"无序",[48,164356,164308],{},[48,164358,164359],{},"不允许",[48,164361,164362],{},[277,164363,156632],{},[29,164365,164366,164369,164371,164373,164376],{},[48,164367,164368],{},"dict字典",[48,164370,164305],{},[48,164372,164308],{},[48,164374,164375],{},"key不允许重复",[48,164377,164378],{},[277,164379,164380],{},"{\"name\": \"小明\"}",[19,164382,164383],{},"Python 3.7 之后，字典保持插入顺序。",[1760,164385,164387],{"id":164386},"_62-列表list","6.2 列表list",[19,164389,164390],{},"列表用于保存一组有顺序的数据。",[270,164392,164394],{"className":31715,"code":164393,"language":31717,"meta":275,"style":275},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[277,164395,164396,164416,164441,164462],{"__ignoreMap":275},[152,164397,164398,164400,164402,164404,164406,164408,164410,164412,164414],{"class":281,"line":282},[152,164399,161717],{"class":483},[152,164401,1864],{"class":476},[152,164403,53563],{"class":483},[152,164405,151225],{"class":289},[152,164407,14051],{"class":483},[152,164409,152273],{"class":289},[152,164411,14051],{"class":483},[152,164413,161068],{"class":289},[152,164415,34583],{"class":483},[152,164417,164418,164421,164423,164425,164427,164429,164431,164433,164435,164437,164439],{"class":281,"line":303},[152,164419,164420],{"class":483},"numbers ",[152,164422,1864],{"class":476},[152,164424,53563],{"class":483},[152,164426,2026],{"class":293},[152,164428,14051],{"class":483},[152,164430,1894],{"class":293},[152,164432,14051],{"class":483},[152,164434,1888],{"class":293},[152,164436,14051],{"class":483},[152,164438,2101],{"class":293},[152,164440,34583],{"class":483},[152,164442,164443,164446,164448,164450,164452,164454,164456,164458,164460],{"class":281,"line":310},[152,164444,164445],{"class":483},"mixed ",[152,164447,1864],{"class":476},[152,164449,53563],{"class":483},[152,164451,151225],{"class":289},[152,164453,14051],{"class":483},[152,164455,2458],{"class":293},[152,164457,14051],{"class":483},[152,164459,32813],{"class":293},[152,164461,34583],{"class":483},[152,164463,164464,164467,164469],{"class":281,"line":324},[152,164465,164466],{"class":483},"empty ",[152,164468,1864],{"class":476},[152,164470,53175],{"class":483},[19,164472,164473],{},"推荐一个列表中保存同类数据，代码更清晰。",[1760,164475,164477],{"id":164476},"_63-列表索引","6.3 列表索引",[19,164479,164480],{},"正向索引从 0 开始：",[270,164482,164484],{"className":31715,"code":164483,"language":31717,"meta":275,"style":275},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[277,164485,164486,164506,164510,164521,164531],{"__ignoreMap":275},[152,164487,164488,164490,164492,164494,164496,164498,164500,164502,164504],{"class":281,"line":282},[152,164489,161717],{"class":483},[152,164491,1864],{"class":476},[152,164493,53563],{"class":483},[152,164495,151225],{"class":289},[152,164497,14051],{"class":483},[152,164499,152273],{"class":289},[152,164501,14051],{"class":483},[152,164503,161068],{"class":289},[152,164505,34583],{"class":483},[152,164507,164508],{"class":281,"line":303},[152,164509,307],{"emptyLinePlaceholder":306},[152,164511,164512,164514,164517,164519],{"class":281,"line":310},[152,164513,31752],{"class":293},[152,164515,164516],{"class":483},"(names[",[152,164518,2000],{"class":293},[152,164520,6299],{"class":483},[152,164522,164523,164525,164527,164529],{"class":281,"line":324},[152,164524,31752],{"class":293},[152,164526,164516],{"class":483},[152,164528,2026],{"class":293},[152,164530,6299],{"class":483},[152,164532,164533,164535,164537,164539],{"class":281,"line":329},[152,164534,31752],{"class":293},[152,164536,164516],{"class":483},[152,164538,1894],{"class":293},[152,164540,6299],{"class":483},[19,164542,164543],{},"反向索引从 -1 开始：",[270,164545,164547],{"className":31715,"code":164546,"language":31717,"meta":275,"style":275},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[277,164548,164549,164565],{"__ignoreMap":275},[152,164550,164551,164553,164555,164557,164559,164562],{"class":281,"line":282},[152,164552,31752],{"class":293},[152,164554,164516],{"class":483},[152,164556,2340],{"class":476},[152,164558,2026],{"class":293},[152,164560,164561],{"class":483},"])  ",[152,164563,164564],{"class":866},"# 小刚\n",[152,164566,164567,164569,164571,164573,164575,164577],{"class":281,"line":303},[152,164568,31752],{"class":293},[152,164570,164516],{"class":483},[152,164572,2340],{"class":476},[152,164574,1894],{"class":293},[152,164576,164561],{"class":483},[152,164578,164579],{"class":866},"# 小红\n",[19,164581,164582],{},"索引越界会报错：",[270,164584,164586],{"className":31715,"code":164585,"language":31717,"meta":275,"style":275},"print(names[3])\n",[277,164587,164588],{"__ignoreMap":275},[152,164589,164590,164592,164594,164596],{"class":281,"line":282},[152,164591,31752],{"class":293},[152,164593,164516],{"class":483},[152,164595,1888],{"class":293},[152,164597,6299],{"class":483},[1760,164599,164601],{"id":164600},"_64-列表常用方法","6.4 列表常用方法",[270,164603,164605],{"className":31715,"code":164604,"language":31717,"meta":275,"style":275},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[277,164606,164607,164623,164627,164636,164650,164664,164668],{"__ignoreMap":275},[152,164608,164609,164611,164613,164615,164617,164619,164621],{"class":281,"line":282},[152,164610,161717],{"class":483},[152,164612,1864],{"class":476},[152,164614,53563],{"class":483},[152,164616,151225],{"class":289},[152,164618,14051],{"class":483},[152,164620,152273],{"class":289},[152,164622,34583],{"class":483},[152,164624,164625],{"class":281,"line":303},[152,164626,307],{"emptyLinePlaceholder":306},[152,164628,164629,164632,164634],{"class":281,"line":310},[152,164630,164631],{"class":483},"names.append(",[152,164633,161068],{"class":289},[152,164635,1825],{"class":483},[152,164637,164638,164641,164643,164645,164648],{"class":281,"line":324},[152,164639,164640],{"class":483},"names.insert(",[152,164642,2026],{"class":293},[152,164644,14051],{"class":483},[152,164646,164647],{"class":289},"\"小李\"",[152,164649,1825],{"class":483},[152,164651,164652,164655,164657,164659,164662],{"class":281,"line":329},[152,164653,164654],{"class":483},"names.extend([",[152,164656,10315],{"class":289},[152,164658,14051],{"class":483},[152,164660,164661],{"class":289},"\"小赵\"",[152,164663,6299],{"class":483},[152,164665,164666],{"class":281,"line":343},[152,164667,307],{"emptyLinePlaceholder":306},[152,164669,164670,164672],{"class":281,"line":348},[152,164671,31752],{"class":293},[152,164673,164674],{"class":483},"(names)\n",[19,164676,164677],{},"删除元素：",[270,164679,164681],{"className":31715,"code":164680,"language":31717,"meta":275,"style":275},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[277,164682,164683,164692,164702,164716,164728],{"__ignoreMap":275},[152,164684,164685,164688,164690],{"class":281,"line":282},[152,164686,164687],{"class":483},"names.remove(",[152,164689,152273],{"class":289},[152,164691,1825],{"class":483},[152,164693,164694,164697,164699],{"class":281,"line":303},[152,164695,164696],{"class":483},"last ",[152,164698,1864],{"class":476},[152,164700,164701],{"class":483}," names.pop()\n",[152,164703,164704,164707,164709,164712,164714],{"class":281,"line":310},[152,164705,164706],{"class":483},"first ",[152,164708,1864],{"class":476},[152,164710,164711],{"class":483}," names.pop(",[152,164713,2000],{"class":293},[152,164715,1825],{"class":483},[152,164717,164718,164721,164724,164726],{"class":281,"line":324},[152,164719,164720],{"class":476},"del",[152,164722,164723],{"class":483}," names[",[152,164725,2000],{"class":293},[152,164727,34583],{"class":483},[152,164729,164730],{"class":281,"line":329},[152,164731,164732],{"class":483},"names.clear()\n",[19,164734,164735],{},"查询和统计：",[270,164737,164739],{"className":31715,"code":164738,"language":31717,"meta":275,"style":275},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[277,164740,164741,164769,164773,164784,164795],{"__ignoreMap":275},[152,164742,164743,164745,164747,164749,164751,164753,164755,164757,164759,164761,164763,164765,164767],{"class":281,"line":282},[152,164744,164420],{"class":483},[152,164746,1864],{"class":476},[152,164748,53563],{"class":483},[152,164750,2026],{"class":293},[152,164752,14051],{"class":483},[152,164754,1894],{"class":293},[152,164756,14051],{"class":483},[152,164758,1888],{"class":293},[152,164760,14051],{"class":483},[152,164762,1894],{"class":293},[152,164764,14051],{"class":483},[152,164766,2101],{"class":293},[152,164768,34583],{"class":483},[152,164770,164771],{"class":281,"line":303},[152,164772,307],{"emptyLinePlaceholder":306},[152,164774,164775,164777,164780,164782],{"class":281,"line":310},[152,164776,31752],{"class":293},[152,164778,164779],{"class":483},"(numbers.index(",[152,164781,1888],{"class":293},[152,164783,31834],{"class":483},[152,164785,164786,164788,164791,164793],{"class":281,"line":324},[152,164787,31752],{"class":293},[152,164789,164790],{"class":483},"(numbers.count(",[152,164792,1894],{"class":293},[152,164794,31834],{"class":483},[152,164796,164797,164799,164801,164803],{"class":281,"line":329},[152,164798,31752],{"class":293},[152,164800,1819],{"class":483},[152,164802,9000],{"class":293},[152,164804,164805],{"class":483},"(numbers))\n",[19,164807,164808],{},"排序：",[270,164810,164812],{"className":31715,"code":164811,"language":31717,"meta":275,"style":275},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[277,164813,164814,164838,164842,164847,164854,164858,164872,164878,164882,164887],{"__ignoreMap":275},[152,164815,164816,164818,164820,164822,164824,164826,164828,164830,164832,164834,164836],{"class":281,"line":282},[152,164817,164420],{"class":483},[152,164819,1864],{"class":476},[152,164821,53563],{"class":483},[152,164823,1888],{"class":293},[152,164825,14051],{"class":483},[152,164827,2026],{"class":293},[152,164829,14051],{"class":483},[152,164831,2127],{"class":293},[152,164833,14051],{"class":483},[152,164835,1894],{"class":293},[152,164837,34583],{"class":483},[152,164839,164840],{"class":281,"line":303},[152,164841,307],{"emptyLinePlaceholder":306},[152,164843,164844],{"class":281,"line":310},[152,164845,164846],{"class":483},"numbers.sort()\n",[152,164848,164849,164851],{"class":281,"line":324},[152,164850,31752],{"class":293},[152,164852,164853],{"class":483},"(numbers)\n",[152,164855,164856],{"class":281,"line":329},[152,164857,307],{"emptyLinePlaceholder":306},[152,164859,164860,164863,164866,164868,164870],{"class":281,"line":343},[152,164861,164862],{"class":483},"numbers.sort(",[152,164864,164865],{"class":6858},"reverse",[152,164867,1864],{"class":476},[152,164869,32813],{"class":293},[152,164871,1825],{"class":483},[152,164873,164874,164876],{"class":281,"line":348},[152,164875,31752],{"class":293},[152,164877,164853],{"class":483},[152,164879,164880],{"class":281,"line":362},[152,164881,307],{"emptyLinePlaceholder":306},[152,164883,164884],{"class":281,"line":367},[152,164885,164886],{"class":483},"numbers.reverse()\n",[152,164888,164889,164891],{"class":281,"line":381},[152,164890,31752],{"class":293},[152,164892,164853],{"class":483},[19,164894,164895,164898,164899,164902],{},[277,164896,164897],{},"sort()"," 会修改原列表，",[277,164900,164901],{},"sorted()"," 返回新列表。",[270,164904,164906],{"className":31715,"code":164905,"language":31717,"meta":275,"style":275},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[277,164907,164908,164932,164944,164948,164954],{"__ignoreMap":275},[152,164909,164910,164912,164914,164916,164918,164920,164922,164924,164926,164928,164930],{"class":281,"line":282},[152,164911,164420],{"class":483},[152,164913,1864],{"class":476},[152,164915,53563],{"class":483},[152,164917,1888],{"class":293},[152,164919,14051],{"class":483},[152,164921,2026],{"class":293},[152,164923,14051],{"class":483},[152,164925,2127],{"class":293},[152,164927,14051],{"class":483},[152,164929,1894],{"class":293},[152,164931,34583],{"class":483},[152,164933,164934,164937,164939,164942],{"class":281,"line":303},[152,164935,164936],{"class":483},"new_numbers ",[152,164938,1864],{"class":476},[152,164940,164941],{"class":293}," sorted",[152,164943,164853],{"class":483},[152,164945,164946],{"class":281,"line":310},[152,164947,307],{"emptyLinePlaceholder":306},[152,164949,164950,164952],{"class":281,"line":324},[152,164951,31752],{"class":293},[152,164953,164853],{"class":483},[152,164955,164956,164958],{"class":281,"line":329},[152,164957,31752],{"class":293},[152,164959,164960],{"class":483},"(new_numbers)\n",[1760,164962,164964],{"id":164963},"_65-列表遍历","6.5 列表遍历",[270,164966,164968],{"className":31715,"code":164967,"language":31717,"meta":275,"style":275},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[277,164969,164970,164990,164994,165004],{"__ignoreMap":275},[152,164971,164972,164974,164976,164978,164980,164982,164984,164986,164988],{"class":281,"line":282},[152,164973,161717],{"class":483},[152,164975,1864],{"class":476},[152,164977,53563],{"class":483},[152,164979,151225],{"class":289},[152,164981,14051],{"class":483},[152,164983,152273],{"class":289},[152,164985,14051],{"class":483},[152,164987,161068],{"class":289},[152,164989,34583],{"class":483},[152,164991,164992],{"class":281,"line":303},[152,164993,307],{"emptyLinePlaceholder":306},[152,164995,164996,164998,165000,165002],{"class":281,"line":310},[152,164997,4668],{"class":476},[152,164999,161753],{"class":483},[152,165001,27653],{"class":476},[152,165003,161758],{"class":483},[152,165005,165006,165008],{"class":281,"line":324},[152,165007,32636],{"class":293},[152,165009,151997],{"class":483},[19,165011,165012],{},"需要索引时：",[270,165014,165016],{"className":31715,"code":165015,"language":31717,"meta":275,"style":275},"for index, name in enumerate(names):\n    print(index, name)\n",[277,165017,165018,165032],{"__ignoreMap":275},[152,165019,165020,165022,165025,165027,165029],{"class":281,"line":282},[152,165021,4668],{"class":476},[152,165023,165024],{"class":483}," index, name ",[152,165026,27653],{"class":476},[152,165028,32943],{"class":293},[152,165030,165031],{"class":483},"(names):\n",[152,165033,165034,165036],{"class":281,"line":303},[152,165035,32636],{"class":293},[152,165037,165038],{"class":483},"(index, name)\n",[19,165040,165041],{},"统计总分：",[270,165043,165045],{"className":31715,"code":165044,"language":31717,"meta":275,"style":275},"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",[277,165046,165047,165072,165080,165084,165095,165103,165107,165124],{"__ignoreMap":275},[152,165048,165049,165052,165054,165056,165058,165060,165062,165064,165066,165068,165070],{"class":281,"line":282},[152,165050,165051],{"class":483},"scores ",[152,165053,1864],{"class":476},[152,165055,53563],{"class":483},[152,165057,2669],{"class":293},[152,165059,14051],{"class":483},[152,165061,2544],{"class":293},[152,165063,14051],{"class":483},[152,165065,2062],{"class":293},[152,165067,14051],{"class":483},[152,165069,2369],{"class":293},[152,165071,34583],{"class":483},[152,165073,165074,165076,165078],{"class":281,"line":303},[152,165075,158597],{"class":483},[152,165077,1864],{"class":476},[152,165079,48670],{"class":293},[152,165081,165082],{"class":281,"line":310},[152,165083,307],{"emptyLinePlaceholder":306},[152,165085,165086,165088,165090,165092],{"class":281,"line":324},[152,165087,4668],{"class":476},[152,165089,159120],{"class":483},[152,165091,27653],{"class":476},[152,165093,165094],{"class":483}," scores:\n",[152,165096,165097,165099,165101],{"class":281,"line":329},[152,165098,160644],{"class":483},[152,165100,11109],{"class":476},[152,165102,3250],{"class":483},[152,165104,165105],{"class":281,"line":343},[152,165106,307],{"emptyLinePlaceholder":306},[152,165108,165109,165112,165114,165117,165119,165121],{"class":281,"line":348},[152,165110,165111],{"class":483},"avg ",[152,165113,1864],{"class":476},[152,165115,165116],{"class":483}," total ",[152,165118,2392],{"class":476},[152,165120,8973],{"class":293},[152,165122,165123],{"class":483},"(scores)\n",[152,165125,165126,165128,165130,165132,165135,165137,165140,165142,165144,165146],{"class":281,"line":362},[152,165127,31752],{"class":293},[152,165129,1819],{"class":483},[152,165131,1870],{"class":476},[152,165133,165134],{"class":289},"\"平均分:",[152,165136,2703],{"class":293},[152,165138,165139],{"class":483},"avg",[152,165141,158496],{"class":476},[152,165143,2752],{"class":293},[152,165145,2059],{"class":289},[152,165147,1825],{"class":483},[1760,165149,165151],{"id":165150},"_66-元组tuple","6.6 元组tuple",[19,165153,165154],{},"元组和列表类似，但不可修改。",[270,165156,165158],{"className":31715,"code":165157,"language":31717,"meta":275,"style":275},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[277,165159,165160,165177],{"__ignoreMap":275},[152,165161,165162,165165,165167,165169,165171,165173,165175],{"class":281,"line":282},[152,165163,165164],{"class":483},"point ",[152,165166,1864],{"class":476},[152,165168,3322],{"class":483},[152,165170,2254],{"class":293},[152,165172,14051],{"class":483},[152,165174,2508],{"class":293},[152,165176,1825],{"class":483},[152,165178,165179,165181,165183,165185,165187,165189,165191,165193,165195],{"class":281,"line":303},[152,165180,117651],{"class":483},[152,165182,1864],{"class":476},[152,165184,3322],{"class":483},[152,165186,151225],{"class":289},[152,165188,14051],{"class":483},[152,165190,2458],{"class":293},[152,165192,14051],{"class":483},[152,165194,70606],{"class":289},[152,165196,1825],{"class":483},[19,165198,165199],{},"单元素元组必须加逗号：",[270,165201,165203],{"className":31715,"code":165202,"language":31717,"meta":275,"style":275},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[277,165204,165205,165219,165232,165236,165250],{"__ignoreMap":275},[152,165206,165207,165210,165212,165214,165216],{"class":281,"line":282},[152,165208,165209],{"class":483},"t1 ",[152,165211,1864],{"class":476},[152,165213,3322],{"class":483},[152,165215,2254],{"class":293},[152,165217,165218],{"class":483},",)\n",[152,165220,165221,165224,165226,165228,165230],{"class":281,"line":303},[152,165222,165223],{"class":483},"t2 ",[152,165225,1864],{"class":476},[152,165227,3322],{"class":483},[152,165229,2254],{"class":293},[152,165231,1825],{"class":483},[152,165233,165234],{"class":281,"line":310},[152,165235,307],{"emptyLinePlaceholder":306},[152,165237,165238,165240,165242,165244,165247],{"class":281,"line":324},[152,165239,31752],{"class":293},[152,165241,1819],{"class":483},[152,165243,104444],{"class":293},[152,165245,165246],{"class":483},"(t1))  ",[152,165248,165249],{"class":866},"# tuple\n",[152,165251,165252,165254,165256,165258,165261],{"class":281,"line":329},[152,165253,31752],{"class":293},[152,165255,1819],{"class":483},[152,165257,104444],{"class":293},[152,165259,165260],{"class":483},"(t2))  ",[152,165262,165263],{"class":866},"# int\n",[19,165265,165266],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[1760,165268,165270],{"id":165269},"_67-字符串str","6.7 字符串str",[19,165272,165273],{},"字符串也是序列，可以索引、切片和遍历。",[270,165275,165277],{"className":31715,"code":165276,"language":31717,"meta":275,"style":275},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[277,165278,165279,165287,165291,165302,165314,165318,165329],{"__ignoreMap":275},[152,165280,165281,165283,165285],{"class":281,"line":282},[152,165282,157781],{"class":483},[152,165284,1864],{"class":476},[152,165286,161018],{"class":289},[152,165288,165289],{"class":281,"line":303},[152,165290,307],{"emptyLinePlaceholder":306},[152,165292,165293,165295,165298,165300],{"class":281,"line":310},[152,165294,31752],{"class":293},[152,165296,165297],{"class":483},"(text[",[152,165299,2000],{"class":293},[152,165301,6299],{"class":483},[152,165303,165304,165306,165308,165310,165312],{"class":281,"line":324},[152,165305,31752],{"class":293},[152,165307,165297],{"class":483},[152,165309,2340],{"class":476},[152,165311,2026],{"class":293},[152,165313,6299],{"class":483},[152,165315,165316],{"class":281,"line":329},[152,165317,307],{"emptyLinePlaceholder":306},[152,165319,165320,165322,165324,165326],{"class":281,"line":343},[152,165321,4668],{"class":476},[152,165323,161029],{"class":483},[152,165325,27653],{"class":476},[152,165327,165328],{"class":483}," text:\n",[152,165330,165331,165333],{"class":281,"line":348},[152,165332,32636],{"class":293},[152,165334,161040],{"class":483},[19,165336,165337],{},"字符串不可变：",[270,165339,165341],{"className":31715,"code":165340,"language":31717,"meta":275,"style":275},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[277,165342,165343,165351],{"__ignoreMap":275},[152,165344,165345,165347,165349],{"class":281,"line":282},[152,165346,157781],{"class":483},[152,165348,1864],{"class":476},[152,165350,161018],{"class":289},[152,165352,165353,165356,165358,165360,165362,165365],{"class":281,"line":303},[152,165354,165355],{"class":483},"text[",[152,165357,2000],{"class":293},[152,165359,6085],{"class":483},[152,165361,1864],{"class":476},[152,165363,165364],{"class":289}," \"P\"",[152,165366,165367],{"class":866},"  # 报错\n",[19,165369,165370],{},"如果要得到新字符串：",[270,165372,165374],{"className":31715,"code":165373,"language":31717,"meta":275,"style":275},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[277,165375,165376,165384,165402],{"__ignoreMap":275},[152,165377,165378,165380,165382],{"class":281,"line":282},[152,165379,157781],{"class":483},[152,165381,1864],{"class":476},[152,165383,161018],{"class":289},[152,165385,165386,165388,165390,165392,165394,165397,165399],{"class":281,"line":303},[152,165387,157781],{"class":483},[152,165389,1864],{"class":476},[152,165391,165364],{"class":289},[152,165393,46903],{"class":476},[152,165395,165396],{"class":483}," text[",[152,165398,2026],{"class":293},[152,165400,165401],{"class":483},":]\n",[152,165403,165404,165406],{"class":281,"line":310},[152,165405,31752],{"class":293},[152,165407,165408],{"class":483},"(text)\n",[1760,165410,165412],{"id":165411},"_68-切片","6.8 切片",[19,165414,165415],{},"切片用于从序列中取一部分。",[270,165417,165419],{"className":31715,"code":165418,"language":31717,"meta":275,"style":275},"序列[开始:结束:步长]\n",[277,165420,165421],{"__ignoreMap":275},[152,165422,165423],{"class":281,"line":282},[152,165424,165418],{"class":483},[19,165426,165427],{},"结束位置不包含。",[270,165429,165431],{"className":31715,"code":165430,"language":31717,"meta":275,"style":275},"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",[277,165432,165433,165470,165474,165493,165508,165522,165536],{"__ignoreMap":275},[152,165434,165435,165438,165440,165442,165444,165446,165448,165450,165452,165454,165456,165458,165460,165462,165464,165466,165468],{"class":281,"line":282},[152,165436,165437],{"class":483},"nums ",[152,165439,1864],{"class":476},[152,165441,53563],{"class":483},[152,165443,2000],{"class":293},[152,165445,14051],{"class":483},[152,165447,2026],{"class":293},[152,165449,14051],{"class":483},[152,165451,1894],{"class":293},[152,165453,14051],{"class":483},[152,165455,1888],{"class":293},[152,165457,14051],{"class":483},[152,165459,2101],{"class":293},[152,165461,14051],{"class":483},[152,165463,2127],{"class":293},[152,165465,14051],{"class":483},[152,165467,2152],{"class":293},[152,165469,34583],{"class":483},[152,165471,165472],{"class":281,"line":303},[152,165473,307],{"emptyLinePlaceholder":306},[152,165475,165476,165478,165481,165483,165485,165487,165490],{"class":281,"line":310},[152,165477,31752],{"class":293},[152,165479,165480],{"class":483},"(nums[",[152,165482,2026],{"class":293},[152,165484,841],{"class":483},[152,165486,2101],{"class":293},[152,165488,165489],{"class":483},"])    ",[152,165491,165492],{"class":866},"# [1, 2, 3]\n",[152,165494,165495,165497,165500,165502,165505],{"class":281,"line":324},[152,165496,31752],{"class":293},[152,165498,165499],{"class":483},"(nums[:",[152,165501,1888],{"class":293},[152,165503,165504],{"class":483},"])     ",[152,165506,165507],{"class":866},"# [0, 1, 2]\n",[152,165509,165510,165512,165514,165516,165519],{"class":281,"line":329},[152,165511,31752],{"class":293},[152,165513,165480],{"class":483},[152,165515,1888],{"class":293},[152,165517,165518],{"class":483},":])     ",[152,165520,165521],{"class":866},"# [3, 4, 5, 6]\n",[152,165523,165524,165526,165529,165531,165533],{"class":281,"line":343},[152,165525,31752],{"class":293},[152,165527,165528],{"class":483},"(nums[::",[152,165530,1894],{"class":293},[152,165532,165489],{"class":483},[152,165534,165535],{"class":866},"# [0, 2, 4, 6]\n",[152,165537,165538,165540,165542,165544,165546,165549],{"class":281,"line":348},[152,165539,31752],{"class":293},[152,165541,165528],{"class":483},[152,165543,2340],{"class":476},[152,165545,2026],{"class":293},[152,165547,165548],{"class":483},"])   ",[152,165550,165551],{"class":866},"# 反转\n",[19,165553,165554],{},"字符串切片：",[270,165556,165558],{"className":31715,"code":165557,"language":31717,"meta":275,"style":275},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[277,165559,165560,165569,165583],{"__ignoreMap":275},[152,165561,165562,165564,165566],{"class":281,"line":282},[152,165563,157781],{"class":483},[152,165565,1864],{"class":476},[152,165567,165568],{"class":289}," \"abcdef\"\n",[152,165570,165571,165573,165575,165577,165579,165581],{"class":281,"line":303},[152,165572,31752],{"class":293},[152,165574,165297],{"class":483},[152,165576,2026],{"class":293},[152,165578,841],{"class":483},[152,165580,2101],{"class":293},[152,165582,6299],{"class":483},[152,165584,165585,165587,165590,165592,165594],{"class":281,"line":310},[152,165586,31752],{"class":293},[152,165588,165589],{"class":483},"(text[::",[152,165591,2340],{"class":476},[152,165593,2026],{"class":293},[152,165595,6299],{"class":483},[1760,165597,165599],{"id":165598},"_69-集合set","6.9 集合set",[19,165601,165602],{},"集合特点：",[416,165604,165605,165608,165611],{},[419,165606,165607],{},"无序。",[419,165609,165610],{},"元素不重复。",[419,165612,165613],{},"可以做交集、并集、差集。",[270,165615,165617],{"className":31715,"code":165616,"language":31717,"meta":275,"style":275},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[277,165618,165619,165647],{"__ignoreMap":275},[152,165620,165621,165623,165625,165627,165629,165631,165633,165635,165637,165639,165641,165643,165645],{"class":281,"line":282},[152,165622,165437],{"class":483},[152,165624,1864],{"class":476},[152,165626,6090],{"class":483},[152,165628,2026],{"class":293},[152,165630,14051],{"class":483},[152,165632,1894],{"class":293},[152,165634,14051],{"class":483},[152,165636,1888],{"class":293},[152,165638,14051],{"class":483},[152,165640,1888],{"class":293},[152,165642,14051],{"class":483},[152,165644,2101],{"class":293},[152,165646,3236],{"class":483},[152,165648,165649,165651],{"class":281,"line":303},[152,165650,31752],{"class":293},[152,165652,165653],{"class":483},"(nums)\n",[19,165655,165656],{},"创建空集合：",[270,165658,165660],{"className":31715,"code":165659,"language":31717,"meta":275,"style":275},"s = set()\n",[277,165661,165662],{"__ignoreMap":275},[152,165663,165664,165666,165668,165670],{"class":281,"line":282},[152,165665,12195],{"class":483},[152,165667,1864],{"class":476},[152,165669,121059],{"class":293},[152,165671,3627],{"class":483},[19,165673,10657,165674,165676],{},[277,165675,33796],{}," 是空字典，不是空集合。",[19,165678,165679],{},"集合常用操作：",[270,165681,165683],{"className":31715,"code":165682,"language":31717,"meta":275,"style":275},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[277,165684,165685,165705,165709,165718,165727,165736],{"__ignoreMap":275},[152,165686,165687,165689,165691,165693,165695,165697,165699,165701,165703],{"class":281,"line":282},[152,165688,12195],{"class":483},[152,165690,1864],{"class":476},[152,165692,6090],{"class":483},[152,165694,2026],{"class":293},[152,165696,14051],{"class":483},[152,165698,1894],{"class":293},[152,165700,14051],{"class":483},[152,165702,1888],{"class":293},[152,165704,3236],{"class":483},[152,165706,165707],{"class":281,"line":303},[152,165708,307],{"emptyLinePlaceholder":306},[152,165710,165711,165714,165716],{"class":281,"line":310},[152,165712,165713],{"class":483},"s.add(",[152,165715,2101],{"class":293},[152,165717,1825],{"class":483},[152,165719,165720,165723,165725],{"class":281,"line":324},[152,165721,165722],{"class":483},"s.remove(",[152,165724,1894],{"class":293},[152,165726,1825],{"class":483},[152,165728,165729,165732,165734],{"class":281,"line":329},[152,165730,165731],{"class":483},"s.discard(",[152,165733,2254],{"class":293},[152,165735,1825],{"class":483},[152,165737,165738,165740,165742,165744],{"class":281,"line":343},[152,165739,31752],{"class":293},[152,165741,1819],{"class":483},[152,165743,9000],{"class":293},[152,165745,165746],{"class":483},"(s))\n",[19,165748,165749],{},"交并差：",[270,165751,165753],{"className":31715,"code":165752,"language":31717,"meta":275,"style":275},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[277,165754,165755,165775,165795,165799,165814,165827],{"__ignoreMap":275},[152,165756,165757,165759,165761,165763,165765,165767,165769,165771,165773],{"class":281,"line":282},[152,165758,12535],{"class":483},[152,165760,1864],{"class":476},[152,165762,6090],{"class":483},[152,165764,2026],{"class":293},[152,165766,14051],{"class":483},[152,165768,1894],{"class":293},[152,165770,14051],{"class":483},[152,165772,1888],{"class":293},[152,165774,3236],{"class":483},[152,165776,165777,165779,165781,165783,165785,165787,165789,165791,165793],{"class":281,"line":303},[152,165778,12561],{"class":483},[152,165780,1864],{"class":476},[152,165782,6090],{"class":483},[152,165784,1888],{"class":293},[152,165786,14051],{"class":483},[152,165788,2101],{"class":293},[152,165790,14051],{"class":483},[152,165792,2127],{"class":293},[152,165794,3236],{"class":483},[152,165796,165797],{"class":281,"line":310},[152,165798,307],{"emptyLinePlaceholder":306},[152,165800,165801,165803,165806,165808,165811],{"class":281,"line":324},[152,165802,31752],{"class":293},[152,165804,165805],{"class":483},"(a ",[152,165807,2161],{"class":476},[152,165809,165810],{"class":483}," b)  ",[152,165812,165813],{"class":866},"# 交集\n",[152,165815,165816,165818,165820,165822,165824],{"class":281,"line":329},[152,165817,31752],{"class":293},[152,165819,165805],{"class":483},[152,165821,2727],{"class":476},[152,165823,165810],{"class":483},[152,165825,165826],{"class":866},"# 并集\n",[152,165828,165829,165831,165833,165835,165837],{"class":281,"line":343},[152,165830,31752],{"class":293},[152,165832,165805],{"class":483},[152,165834,2340],{"class":476},[152,165836,165810],{"class":483},[152,165838,165839],{"class":866},"# 差集\n",[1760,165841,165843],{"id":165842},"_610-字典dict","6.10 字典dict",[19,165845,165846],{},"字典通过 key-value 保存数据。",[270,165848,165850],{"className":31715,"code":165849,"language":31717,"meta":275,"style":275},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[277,165851,165852,165860,165870,165881,165891],{"__ignoreMap":275},[152,165853,165854,165856,165858],{"class":281,"line":282},[152,165855,150818],{"class":483},[152,165857,1864],{"class":476},[152,165859,17187],{"class":483},[152,165861,165862,165864,165866,165868],{"class":281,"line":303},[152,165863,148357],{"class":289},[152,165865,52774],{"class":483},[152,165867,151225],{"class":289},[152,165869,32803],{"class":483},[152,165871,165872,165875,165877,165879],{"class":281,"line":310},[152,165873,165874],{"class":289},"    \"age\"",[152,165876,52774],{"class":483},[152,165878,2458],{"class":293},[152,165880,32803],{"class":483},[152,165882,165883,165886,165888],{"class":281,"line":324},[152,165884,165885],{"class":289},"    \"score\"",[152,165887,52774],{"class":483},[152,165889,165890],{"class":293},"95\n",[152,165892,165893],{"class":281,"line":329},[152,165894,3236],{"class":483},[19,165896,165897],{},"获取值：",[270,165899,165901],{"className":31715,"code":165900,"language":31717,"meta":275,"style":275},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[277,165902,165903,165914],{"__ignoreMap":275},[152,165904,165905,165907,165910,165912],{"class":281,"line":282},[152,165906,31752],{"class":293},[152,165908,165909],{"class":483},"(student[",[152,165911,64016],{"class":289},[152,165913,6299],{"class":483},[152,165915,165916,165918,165921,165923],{"class":281,"line":303},[152,165917,31752],{"class":293},[152,165919,165920],{"class":483},"(student.get(",[152,165922,64016],{"class":289},[152,165924,31834],{"class":483},[19,165926,17003],{},[270,165928,165930],{"className":31715,"code":165929,"language":31717,"meta":275,"style":275},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[277,165931,165932,165945],{"__ignoreMap":275},[152,165933,165934,165936,165939,165942],{"class":281,"line":282},[152,165935,154196],{"class":483},[152,165937,165938],{"class":289},"\"address\"",[152,165940,165941],{"class":483},"]     ",[152,165943,165944],{"class":866},"# key不存在会报错\n",[152,165946,165947,165950,165952,165954],{"class":281,"line":303},[152,165948,165949],{"class":483},"student.get(",[152,165951,165938],{"class":289},[152,165953,15330],{"class":483},[152,165955,165956],{"class":866},"# key不存在返回None\n",[19,165958,165959],{},"设置默认值：",[270,165961,165963],{"className":31715,"code":165962,"language":31717,"meta":275,"style":275},"print(student.get(\"address\", \"未知\"))\n",[277,165964,165965],{"__ignoreMap":275},[152,165966,165967,165969,165971,165973,165975,165978],{"class":281,"line":282},[152,165968,31752],{"class":293},[152,165970,165920],{"class":483},[152,165972,165938],{"class":289},[152,165974,14051],{"class":483},[152,165976,165977],{"class":289},"\"未知\"",[152,165979,31834],{"class":483},[19,165981,165982],{},"新增和修改：",[270,165984,165986],{"className":31715,"code":165985,"language":31717,"meta":275,"style":275},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[277,165987,165988,166001],{"__ignoreMap":275},[152,165989,165990,165992,165994,165996,165998],{"class":281,"line":282},[152,165991,154196],{"class":483},[152,165993,70461],{"class":289},[152,165995,6085],{"class":483},[152,165997,1864],{"class":476},[152,165999,166000],{"class":293}," 19\n",[152,166002,166003,166005,166007,166009,166011],{"class":281,"line":303},[152,166004,154196],{"class":483},[152,166006,165938],{"class":289},[152,166008,6085],{"class":483},[152,166010,1864],{"class":476},[152,166012,166013],{"class":289}," \"北京\"\n",[19,166015,166016],{},"删除：",[270,166018,166020],{"className":31715,"code":166019,"language":31717,"meta":275,"style":275},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[277,166021,166022,166035,166045],{"__ignoreMap":275},[152,166023,166024,166026,166028,166031,166033],{"class":281,"line":282},[152,166025,156695],{"class":483},[152,166027,1864],{"class":476},[152,166029,166030],{"class":483}," student.pop(",[152,166032,152809],{"class":289},[152,166034,1825],{"class":483},[152,166036,166037,166039,166041,166043],{"class":281,"line":303},[152,166038,164720],{"class":476},[152,166040,153486],{"class":483},[152,166042,70461],{"class":289},[152,166044,34583],{"class":483},[152,166046,166047],{"class":281,"line":310},[152,166048,166049],{"class":483},"student.clear()\n",[1760,166051,166053],{"id":166052},"_611-字典遍历","6.11 字典遍历",[19,166055,166056],{},"遍历 key：",[270,166058,166060],{"className":31715,"code":166059,"language":31717,"meta":275,"style":275},"for key in student:\n    print(key, student[key])\n",[277,166061,166062,166074],{"__ignoreMap":275},[152,166063,166064,166066,166069,166071],{"class":281,"line":282},[152,166065,4668],{"class":476},[152,166067,166068],{"class":483}," key ",[152,166070,27653],{"class":476},[152,166072,166073],{"class":483}," student:\n",[152,166075,166076,166078],{"class":281,"line":303},[152,166077,32636],{"class":293},[152,166079,166080],{"class":483},"(key, student[key])\n",[19,166082,166083],{},"遍历 value：",[270,166085,166087],{"className":31715,"code":166086,"language":31717,"meta":275,"style":275},"for value in student.values():\n    print(value)\n",[277,166088,166089,166101],{"__ignoreMap":275},[152,166090,166091,166093,166096,166098],{"class":281,"line":282},[152,166092,4668],{"class":476},[152,166094,166095],{"class":483}," value ",[152,166097,27653],{"class":476},[152,166099,166100],{"class":483}," student.values():\n",[152,166102,166103,166105],{"class":281,"line":303},[152,166104,32636],{"class":293},[152,166106,166107],{"class":483},"(value)\n",[19,166109,166110],{},"遍历 key 和 value：",[270,166112,166114],{"className":31715,"code":166113,"language":31717,"meta":275,"style":275},"for key, value in student.items():\n    print(key, value)\n",[277,166115,166116,166128],{"__ignoreMap":275},[152,166117,166118,166120,166123,166125],{"class":281,"line":282},[152,166119,4668],{"class":476},[152,166121,166122],{"class":483}," key, value ",[152,166124,27653],{"class":476},[152,166126,166127],{"class":483}," student.items():\n",[152,166129,166130,166132],{"class":281,"line":303},[152,166131,32636],{"class":293},[152,166133,166134],{"class":483},"(key, value)\n",[1760,166136,166138],{"id":166137},"_612-嵌套容器","6.12 嵌套容器",[19,166140,166141],{},"列表中保存字典，是项目中最常见的结构之一。",[270,166143,166145],{"className":31715,"code":166144,"language":31717,"meta":275,"style":275},"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",[277,166146,166147,166155,166183,166211,166239,166243,166247,166257],{"__ignoreMap":275},[152,166148,166149,166151,166153],{"class":281,"line":282},[152,166150,161053],{"class":483},[152,166152,1864],{"class":476},[152,166154,56784],{"class":483},[152,166156,166157,166159,166161,166163,166165,166167,166169,166171,166173,166175,166177,166179,166181],{"class":281,"line":303},[152,166158,149722],{"class":483},[152,166160,64016],{"class":289},[152,166162,52774],{"class":483},[152,166164,151225],{"class":289},[152,166166,14051],{"class":483},[152,166168,70461],{"class":289},[152,166170,52774],{"class":483},[152,166172,2458],{"class":293},[152,166174,14051],{"class":483},[152,166176,152809],{"class":289},[152,166178,52774],{"class":483},[152,166180,2794],{"class":293},[152,166182,6572],{"class":483},[152,166184,166185,166187,166189,166191,166193,166195,166197,166199,166201,166203,166205,166207,166209],{"class":281,"line":310},[152,166186,149722],{"class":483},[152,166188,64016],{"class":289},[152,166190,52774],{"class":483},[152,166192,152273],{"class":289},[152,166194,14051],{"class":483},[152,166196,70461],{"class":289},[152,166198,52774],{"class":483},[152,166200,2433],{"class":293},[152,166202,14051],{"class":483},[152,166204,152809],{"class":289},[152,166206,52774],{"class":483},[152,166208,2619],{"class":293},[152,166210,6572],{"class":483},[152,166212,166213,166215,166217,166219,166221,166223,166225,166227,166229,166231,166233,166235,166237],{"class":281,"line":324},[152,166214,149722],{"class":483},[152,166216,64016],{"class":289},[152,166218,52774],{"class":483},[152,166220,161068],{"class":289},[152,166222,14051],{"class":483},[152,166224,70461],{"class":289},[152,166226,52774],{"class":483},[152,166228,2483],{"class":293},[152,166230,14051],{"class":483},[152,166232,152809],{"class":289},[152,166234,52774],{"class":483},[152,166236,2214],{"class":293},[152,166238,6572],{"class":483},[152,166240,166241],{"class":281,"line":329},[152,166242,34583],{"class":483},[152,166244,166245],{"class":281,"line":343},[152,166246,307],{"emptyLinePlaceholder":306},[152,166248,166249,166251,166253,166255],{"class":281,"line":348},[152,166250,4668],{"class":476},[152,166252,153474],{"class":483},[152,166254,27653],{"class":476},[152,166256,153479],{"class":483},[152,166258,166259,166261,166263,166265,166268,166270],{"class":281,"line":362},[152,166260,32636],{"class":293},[152,166262,165909],{"class":483},[152,166264,64016],{"class":289},[152,166266,166267],{"class":483},"], student[",[152,166269,152809],{"class":289},[152,166271,6299],{"class":483},[19,166273,166274],{},"统计平均分：",[270,166276,166278],{"className":31715,"code":166277,"language":31717,"meta":275,"style":275},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[277,166279,166280,166288,166292,166302,166314,166318,166333],{"__ignoreMap":275},[152,166281,166282,166284,166286],{"class":281,"line":282},[152,166283,158597],{"class":483},[152,166285,1864],{"class":476},[152,166287,48670],{"class":293},[152,166289,166290],{"class":281,"line":303},[152,166291,307],{"emptyLinePlaceholder":306},[152,166293,166294,166296,166298,166300],{"class":281,"line":310},[152,166295,4668],{"class":476},[152,166297,153474],{"class":483},[152,166299,27653],{"class":476},[152,166301,153479],{"class":483},[152,166303,166304,166306,166308,166310,166312],{"class":281,"line":324},[152,166305,160644],{"class":483},[152,166307,11109],{"class":476},[152,166309,153486],{"class":483},[152,166311,152809],{"class":289},[152,166313,34583],{"class":483},[152,166315,166316],{"class":281,"line":329},[152,166317,307],{"emptyLinePlaceholder":306},[152,166319,166320,166322,166324,166326,166328,166330],{"class":281,"line":343},[152,166321,165111],{"class":483},[152,166323,1864],{"class":476},[152,166325,165116],{"class":483},[152,166327,2392],{"class":476},[152,166329,8973],{"class":293},[152,166331,166332],{"class":483},"(students)\n",[152,166334,166335,166337,166339,166341,166343,166345,166347,166349,166351,166353],{"class":281,"line":348},[152,166336,31752],{"class":293},[152,166338,1819],{"class":483},[152,166340,1870],{"class":476},[152,166342,165134],{"class":289},[152,166344,2703],{"class":293},[152,166346,165139],{"class":483},[152,166348,158496],{"class":476},[152,166350,2752],{"class":293},[152,166352,2059],{"class":289},[152,166354,1825],{"class":483},[19,166356,166357],{},"查找学生：",[270,166359,166361],{"className":31715,"code":166360,"language":31717,"meta":275,"style":275},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[277,166362,166363,166378,166382,166392,166406,166412,166416,166422],{"__ignoreMap":275},[152,166364,166365,166367,166369,166371,166373,166376],{"class":281,"line":282},[152,166366,112915],{"class":483},[152,166368,1864],{"class":476},[152,166370,61942],{"class":293},[152,166372,1819],{"class":483},[152,166374,166375],{"class":289},"\"请输入学生姓名:\"",[152,166377,1825],{"class":483},[152,166379,166380],{"class":281,"line":303},[152,166381,307],{"emptyLinePlaceholder":306},[152,166383,166384,166386,166388,166390],{"class":281,"line":310},[152,166385,4668],{"class":476},[152,166387,153474],{"class":483},[152,166389,27653],{"class":476},[152,166391,153479],{"class":483},[152,166393,166394,166396,166398,166400,166402,166404],{"class":281,"line":324},[152,166395,4744],{"class":476},[152,166397,153486],{"class":483},[152,166399,64016],{"class":289},[152,166401,6085],{"class":483},[152,166403,4592],{"class":476},[152,166405,161769],{"class":483},[152,166407,166408,166410],{"class":281,"line":329},[152,166409,33788],{"class":293},[152,166411,151379],{"class":483},[152,166413,166414],{"class":281,"line":343},[152,166415,32964],{"class":476},[152,166417,166418,166420],{"class":281,"line":348},[152,166419,3361],{"class":476},[152,166421,5382],{"class":483},[152,166423,166424,166426,166428,166431],{"class":281,"line":362},[152,166425,32636],{"class":293},[152,166427,1819],{"class":483},[152,166429,166430],{"class":289},"\"没有找到\"",[152,166432,1825],{"class":483},[1760,166434,166436],{"id":166435},"_613-容器通用操作","6.13 容器通用操作",[19,166438,166439],{},"长度：",[270,166441,166443],{"className":31715,"code":166442,"language":31717,"meta":275,"style":275},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[277,166444,166445,166464,166474],{"__ignoreMap":275},[152,166446,166447,166449,166452,166454,166456,166458,166460,166462],{"class":281,"line":282},[152,166448,9000],{"class":293},[152,166450,166451],{"class":483},"([",[152,166453,2026],{"class":293},[152,166455,14051],{"class":483},[152,166457,1894],{"class":293},[152,166459,14051],{"class":483},[152,166461,1888],{"class":293},[152,166463,6299],{"class":483},[152,166465,166466,166468,166470,166472],{"class":281,"line":303},[152,166467,9000],{"class":293},[152,166469,1819],{"class":483},[152,166471,157217],{"class":289},[152,166473,1825],{"class":483},[152,166475,166476,166478,166481,166483,166485,166487],{"class":281,"line":310},[152,166477,9000],{"class":293},[152,166479,166480],{"class":483},"({",[152,166482,64016],{"class":289},[152,166484,52774],{"class":483},[152,166486,151225],{"class":289},[152,166488,166489],{"class":483},"})\n",[19,166491,166492],{},"最大最小：",[270,166494,166496],{"className":31715,"code":166495,"language":31717,"meta":275,"style":275},"max([1, 2, 3])\nmin([1, 2, 3])\n",[277,166497,166498,166516],{"__ignoreMap":275},[152,166499,166500,166502,166504,166506,166508,166510,166512,166514],{"class":281,"line":282},[152,166501,7657],{"class":293},[152,166503,166451],{"class":483},[152,166505,2026],{"class":293},[152,166507,14051],{"class":483},[152,166509,1894],{"class":293},[152,166511,14051],{"class":483},[152,166513,1888],{"class":293},[152,166515,6299],{"class":483},[152,166517,166518,166521,166523,166525,166527,166529,166531,166533],{"class":281,"line":303},[152,166519,166520],{"class":293},"min",[152,166522,166451],{"class":483},[152,166524,2026],{"class":293},[152,166526,14051],{"class":483},[152,166528,1894],{"class":293},[152,166530,14051],{"class":483},[152,166532,1888],{"class":293},[152,166534,6299],{"class":483},[19,166536,166537],{},"求和：",[270,166539,166541],{"className":31715,"code":166540,"language":31717,"meta":275,"style":275},"sum([1, 2, 3])\n",[277,166542,166543],{"__ignoreMap":275},[152,166544,166545,166548,166550,166552,166554,166556,166558,166560],{"class":281,"line":282},[152,166546,166547],{"class":293},"sum",[152,166549,166451],{"class":483},[152,166551,2026],{"class":293},[152,166553,14051],{"class":483},[152,166555,1894],{"class":293},[152,166557,14051],{"class":483},[152,166559,1888],{"class":293},[152,166561,6299],{"class":483},[19,166563,164808],{},[270,166565,166567],{"className":31715,"code":166566,"language":31717,"meta":275,"style":275},"sorted([3, 1, 2])\n",[277,166568,166569],{"__ignoreMap":275},[152,166570,166571,166574,166576,166578,166580,166582,166584,166586],{"class":281,"line":282},[152,166572,166573],{"class":293},"sorted",[152,166575,166451],{"class":483},[152,166577,1888],{"class":293},[152,166579,14051],{"class":483},[152,166581,2026],{"class":293},[152,166583,14051],{"class":483},[152,166585,1894],{"class":293},[152,166587,6299],{"class":483},[19,166589,166590],{},"类型转换：",[270,166592,166594],{"className":31715,"code":166593,"language":31717,"meta":275,"style":275},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[277,166595,166596,166606,166624],{"__ignoreMap":275},[152,166597,166598,166600,166602,166604],{"class":281,"line":282},[152,166599,155407],{"class":293},[152,166601,1819],{"class":483},[152,166603,157217],{"class":289},[152,166605,1825],{"class":483},[152,166607,166608,166610,166612,166614,166616,166618,166620,166622],{"class":281,"line":303},[152,166609,156602],{"class":293},[152,166611,166451],{"class":483},[152,166613,2026],{"class":293},[152,166615,14051],{"class":483},[152,166617,1894],{"class":293},[152,166619,14051],{"class":483},[152,166621,1888],{"class":293},[152,166623,6299],{"class":483},[152,166625,166626,166628,166630,166632,166634,166636,166638,166640,166642,166644],{"class":281,"line":310},[152,166627,156627],{"class":293},[152,166629,166451],{"class":483},[152,166631,2026],{"class":293},[152,166633,14051],{"class":483},[152,166635,2026],{"class":293},[152,166637,14051],{"class":483},[152,166639,1894],{"class":293},[152,166641,14051],{"class":483},[152,166643,1888],{"class":293},[152,166645,6299],{"class":483},[19,166647,166648],{},"成员判断：",[270,166650,166652],{"className":31715,"code":166651,"language":31717,"meta":275,"style":275},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[277,166653,166654,166671,166695],{"__ignoreMap":275},[152,166655,166656,166658,166660,166663,166666,166669],{"class":281,"line":282},[152,166657,31752],{"class":293},[152,166659,1819],{"class":483},[152,166661,166662],{"class":289},"\"a\"",[152,166664,166665],{"class":476}," in",[152,166667,166668],{"class":289}," \"abc\"",[152,166670,1825],{"class":483},[152,166672,166673,166675,166677,166679,166681,166683,166685,166687,166689,166691,166693],{"class":281,"line":303},[152,166674,31752],{"class":293},[152,166676,1819],{"class":483},[152,166678,2026],{"class":293},[152,166680,166665],{"class":476},[152,166682,53563],{"class":483},[152,166684,2026],{"class":293},[152,166686,14051],{"class":483},[152,166688,1894],{"class":293},[152,166690,14051],{"class":483},[152,166692,1888],{"class":293},[152,166694,6299],{"class":483},[152,166696,166697,166699,166701,166703,166705,166707,166709,166711,166713],{"class":281,"line":310},[152,166698,31752],{"class":293},[152,166700,1819],{"class":483},[152,166702,64016],{"class":289},[152,166704,166665],{"class":476},[152,166706,6090],{"class":483},[152,166708,64016],{"class":289},[152,166710,52774],{"class":483},[152,166712,151225],{"class":289},[152,166714,166489],{"class":483},[1760,166716,166718],{"id":166717},"_614-推导式","6.14 推导式",[19,166720,166721],{},"推导式用于快速生成容器。",[19,166723,166724],{},"列表推导式：",[270,166726,166728],{"className":31715,"code":166727,"language":31717,"meta":275,"style":275},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[277,166729,166730,166757],{"__ignoreMap":275},[152,166731,166732,166734,166736,166739,166741,166743,166745,166747,166749,166751,166753,166755],{"class":281,"line":282},[152,166733,165437],{"class":483},[152,166735,1864],{"class":476},[152,166737,166738],{"class":483}," [i ",[152,166740,4668],{"class":476},[152,166742,11070],{"class":483},[152,166744,27653],{"class":476},[152,166746,33780],{"class":293},[152,166748,1819],{"class":483},[152,166750,2026],{"class":293},[152,166752,14051],{"class":483},[152,166754,2152],{"class":293},[152,166756,98637],{"class":483},[152,166758,166759,166761],{"class":281,"line":303},[152,166760,31752],{"class":293},[152,166762,165653],{"class":483},[19,166764,166765],{},"带条件：",[270,166767,166769],{"className":31715,"code":166768,"language":31717,"meta":275,"style":275},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[277,166770,166771,166812],{"__ignoreMap":275},[152,166772,166773,166776,166778,166780,166782,166784,166786,166788,166790,166792,166794,166796,166798,166800,166802,166804,166806,166808,166810],{"class":281,"line":282},[152,166774,166775],{"class":483},"even_nums ",[152,166777,1864],{"class":476},[152,166779,166738],{"class":483},[152,166781,4668],{"class":476},[152,166783,11070],{"class":483},[152,166785,27653],{"class":476},[152,166787,33780],{"class":293},[152,166789,1819],{"class":483},[152,166791,2026],{"class":293},[152,166793,14051],{"class":483},[152,166795,2145],{"class":293},[152,166797,15330],{"class":483},[152,166799,3202],{"class":476},[152,166801,11070],{"class":483},[152,166803,2136],{"class":476},[152,166805,16370],{"class":293},[152,166807,102896],{"class":476},[152,166809,5735],{"class":293},[152,166811,34583],{"class":483},[152,166813,166814,166816],{"class":281,"line":303},[152,166815,31752],{"class":293},[152,166817,166818],{"class":483},"(even_nums)\n",[19,166820,166821],{},"字典推导式：",[270,166823,166825],{"className":31715,"code":166824,"language":31717,"meta":275,"style":275},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[277,166826,166827,166861],{"__ignoreMap":275},[152,166828,166829,166832,166834,166837,166839,166841,166844,166846,166848,166850,166852,166854,166856,166858],{"class":281,"line":282},[152,166830,166831],{"class":483},"squares ",[152,166833,1864],{"class":476},[152,166835,166836],{"class":483}," {i: i ",[152,166838,12277],{"class":476},[152,166840,16370],{"class":293},[152,166842,166843],{"class":476}," for",[152,166845,11070],{"class":483},[152,166847,27653],{"class":476},[152,166849,33780],{"class":293},[152,166851,1819],{"class":483},[152,166853,2026],{"class":293},[152,166855,14051],{"class":483},[152,166857,2152],{"class":293},[152,166859,166860],{"class":483},")}\n",[152,166862,166863,166865],{"class":281,"line":303},[152,166864,31752],{"class":293},[152,166866,166867],{"class":483},"(squares)\n",[19,166869,166870],{},"集合推导式：",[270,166872,166874],{"className":31715,"code":166873,"language":31717,"meta":275,"style":275},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[277,166875,166876,166897],{"__ignoreMap":275},[152,166877,166878,166881,166883,166886,166888,166890,166892,166895],{"class":281,"line":282},[152,166879,166880],{"class":483},"chars ",[152,166882,1864],{"class":476},[152,166884,166885],{"class":483}," {ch ",[152,166887,4668],{"class":476},[152,166889,161029],{"class":483},[152,166891,27653],{"class":476},[152,166893,166894],{"class":289}," \"hello\"",[152,166896,3236],{"class":483},[152,166898,166899,166901],{"class":281,"line":303},[152,166900,31752],{"class":293},[152,166902,166903],{"class":483},"(chars)\n",[19,166905,166906],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[1760,166908,166910],{"id":166909},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[270,166912,166914],{"className":31715,"code":166913,"language":31717,"meta":275,"style":275},"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",[277,166915,166916,166924,166944,166964,166984,167004,167008,167012,167020,167034,167043,167047,167057,167069,167073,167093,167102,167106,167122,167127,167131,167145,167149,167171,167207],{"__ignoreMap":275},[152,166917,166918,166920,166922],{"class":281,"line":282},[152,166919,161053],{"class":483},[152,166921,1864],{"class":476},[152,166923,56784],{"class":483},[152,166925,166926,166928,166930,166932,166934,166936,166938,166940,166942],{"class":281,"line":303},[152,166927,149722],{"class":483},[152,166929,64016],{"class":289},[152,166931,52774],{"class":483},[152,166933,151225],{"class":289},[152,166935,14051],{"class":483},[152,166937,152809],{"class":289},[152,166939,52774],{"class":483},[152,166941,2794],{"class":293},[152,166943,6572],{"class":483},[152,166945,166946,166948,166950,166952,166954,166956,166958,166960,166962],{"class":281,"line":310},[152,166947,149722],{"class":483},[152,166949,64016],{"class":289},[152,166951,52774],{"class":483},[152,166953,152273],{"class":289},[152,166955,14051],{"class":483},[152,166957,152809],{"class":289},[152,166959,52774],{"class":483},[152,166961,2619],{"class":293},[152,166963,6572],{"class":483},[152,166965,166966,166968,166970,166972,166974,166976,166978,166980,166982],{"class":281,"line":324},[152,166967,149722],{"class":483},[152,166969,64016],{"class":289},[152,166971,52774],{"class":483},[152,166973,161068],{"class":289},[152,166975,14051],{"class":483},[152,166977,152809],{"class":289},[152,166979,52774],{"class":483},[152,166981,2214],{"class":293},[152,166983,6572],{"class":483},[152,166985,166986,166988,166990,166992,166994,166996,166998,167000,167002],{"class":281,"line":329},[152,166987,149722],{"class":483},[152,166989,64016],{"class":289},[152,166991,52774],{"class":483},[152,166993,164647],{"class":289},[152,166995,14051],{"class":483},[152,166997,152809],{"class":289},[152,166999,52774],{"class":483},[152,167001,2689],{"class":293},[152,167003,6572],{"class":483},[152,167005,167006],{"class":281,"line":343},[152,167007,34583],{"class":483},[152,167009,167010],{"class":281,"line":348},[152,167011,307],{"emptyLinePlaceholder":306},[152,167013,167014,167016,167018],{"class":281,"line":362},[152,167015,158597],{"class":483},[152,167017,1864],{"class":476},[152,167019,48670],{"class":293},[152,167021,167022,167025,167027,167030,167032],{"class":281,"line":367},[152,167023,167024],{"class":483},"max_student ",[152,167026,1864],{"class":476},[152,167028,167029],{"class":483}," students[",[152,167031,2000],{"class":293},[152,167033,34583],{"class":483},[152,167035,167036,167039,167041],{"class":281,"line":381},[152,167037,167038],{"class":483},"passed ",[152,167040,1864],{"class":476},[152,167042,53175],{"class":483},[152,167044,167045],{"class":281,"line":386},[152,167046,307],{"emptyLinePlaceholder":306},[152,167048,167049,167051,167053,167055],{"class":281,"line":932},[152,167050,4668],{"class":476},[152,167052,153474],{"class":483},[152,167054,27653],{"class":476},[152,167056,153479],{"class":483},[152,167058,167059,167061,167063,167065,167067],{"class":281,"line":942},[152,167060,160644],{"class":483},[152,167062,11109],{"class":476},[152,167064,153486],{"class":483},[152,167066,152809],{"class":289},[152,167068,34583],{"class":483},[152,167070,167071],{"class":281,"line":949},[152,167072,307],{"emptyLinePlaceholder":306},[152,167074,167075,167077,167079,167081,167083,167085,167088,167090],{"class":281,"line":954},[152,167076,4744],{"class":476},[152,167078,153486],{"class":483},[152,167080,152809],{"class":289},[152,167082,6085],{"class":483},[152,167084,487],{"class":476},[152,167086,167087],{"class":483}," max_student[",[152,167089,152809],{"class":289},[152,167091,167092],{"class":483},"]:\n",[152,167094,167095,167098,167100],{"class":281,"line":959},[152,167096,167097],{"class":483},"        max_student ",[152,167099,1864],{"class":476},[152,167101,153502],{"class":483},[152,167103,167104],{"class":281,"line":970},[152,167105,307],{"emptyLinePlaceholder":306},[152,167107,167108,167110,167112,167114,167116,167118,167120],{"class":281,"line":979},[152,167109,4744],{"class":476},[152,167111,153486],{"class":483},[152,167113,152809],{"class":289},[152,167115,6085],{"class":483},[152,167117,3370],{"class":476},[152,167119,159174],{"class":293},[152,167121,5382],{"class":483},[152,167123,167124],{"class":281,"line":989},[152,167125,167126],{"class":483},"        passed.append(student)\n",[152,167128,167129],{"class":281,"line":996},[152,167130,307],{"emptyLinePlaceholder":306},[152,167132,167133,167135,167137,167139,167141,167143],{"class":281,"line":1001},[152,167134,165111],{"class":483},[152,167136,1864],{"class":476},[152,167138,165116],{"class":483},[152,167140,2392],{"class":476},[152,167142,8973],{"class":293},[152,167144,166332],{"class":483},[152,167146,167147],{"class":281,"line":1006},[152,167148,307],{"emptyLinePlaceholder":306},[152,167150,167151,167153,167155,167157,167159,167161,167163,167165,167167,167169],{"class":281,"line":1018},[152,167152,31752],{"class":293},[152,167154,1819],{"class":483},[152,167156,1870],{"class":476},[152,167158,165134],{"class":289},[152,167160,2703],{"class":293},[152,167162,165139],{"class":483},[152,167164,158496],{"class":476},[152,167166,2752],{"class":293},[152,167168,2059],{"class":289},[152,167170,1825],{"class":483},[152,167172,167173,167175,167177,167179,167182,167184,167187,167189,167191,167193,167195,167197,167199,167201,167203,167205],{"class":281,"line":1027},[152,167174,31752],{"class":293},[152,167176,1819],{"class":483},[152,167178,1870],{"class":476},[152,167180,167181],{"class":289},"\"最高分学生:",[152,167183,2703],{"class":293},[152,167185,167186],{"class":483},"max_student[",[152,167188,154219],{"class":289},[152,167190,2746],{"class":483},[152,167192,2752],{"class":293},[152,167194,6090],{"class":293},[152,167196,167186],{"class":483},[152,167198,154257],{"class":289},[152,167200,2746],{"class":483},[152,167202,2752],{"class":293},[152,167204,2059],{"class":289},[152,167206,1825],{"class":483},[152,167208,167209,167211,167213,167215,167218,167221,167224,167226,167228],{"class":281,"line":1037},[152,167210,31752],{"class":293},[152,167212,1819],{"class":483},[152,167214,1870],{"class":476},[152,167216,167217],{"class":289},"\"及格人数:",[152,167219,167220],{"class":293},"{len",[152,167222,167223],{"class":483},"(passed)",[152,167225,2752],{"class":293},[152,167227,2059],{"class":289},[152,167229,1825],{"class":483},[1760,167231,167233],{"id":167232},"_616-易错点","6.16 易错点",[416,167235,167236,167239,167242,167245,167251,167260],{},[419,167237,167238],{},"列表可变，元组和字符串不可变。",[419,167240,167241],{},"切片结束位置不包含。",[419,167243,167244],{},"字典通过 key 取值，不是通过索引。",[419,167246,167247,167248,29984],{},"空集合要用 ",[277,167249,167250],{},"set()",[419,167252,105703,167253,167256,167257,29984],{},[277,167254,167255],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[277,167258,167259],{},"get()",[419,167261,167262],{},"嵌套容器要先看清楚每一层是什么类型。",[1760,167264,167266],{"id":167265},"_617-本章练习","6.17 本章练习",[416,167268,167269,167272,167275,167278,167281],{},[419,167270,167271],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[419,167273,167274],{},"输入一句话，统计每个字符出现次数。",[419,167276,167277],{},"使用集合去除列表中的重复元素。",[419,167279,167280],{},"使用字典保存一个学生的信息，并实现修改成绩。",[419,167282,167283],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1736,167285,167286],{},"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":275,"searchDepth":303,"depth":303,"links":167288},[167289,167290,167291,167292,167293,167294,167295,167296,167297,167298,167299,167300,167301,167302,167303,167304,167305],{"id":164269,"depth":303,"text":164270},{"id":164386,"depth":303,"text":164387},{"id":164476,"depth":303,"text":164477},{"id":164600,"depth":303,"text":164601},{"id":164963,"depth":303,"text":164964},{"id":165150,"depth":303,"text":165151},{"id":165269,"depth":303,"text":165270},{"id":165411,"depth":303,"text":165412},{"id":165598,"depth":303,"text":165599},{"id":165842,"depth":303,"text":165843},{"id":166052,"depth":303,"text":166053},{"id":166137,"depth":303,"text":166138},{"id":166435,"depth":303,"text":166436},{"id":166717,"depth":303,"text":166718},{"id":166909,"depth":303,"text":166910},{"id":167232,"depth":303,"text":167233},{"id":167265,"depth":303,"text":167266},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164261,"description":24991},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167312,"title":167313,"body":167314,"description":24991,"extension":1744,"meta":169486,"navigation":306,"path":169487,"seo":169488,"stem":169489,"__hash__":169490},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167315,"toc":169461},[167316,167319,167323,167326,167406,167409,167430,167433,167437,167440,167502,167505,167522,167526,167529,167574,167576,167584,167588,167591,167673,167676,167679,167704,167707,167730,167734,167737,167739,167801,167804,167806,167857,167861,167865,167871,167976,167980,167986,168057,168061,168064,168132,168135,168215,168219,168225,168261,168264,168267,168377,168383,168387,168390,168462,168465,168469,168473,168478,168540,168544,168549,168617,168621,168626,168742,168746,168749,168829,168832,168836,168839,168943,168945,168960,168963,168967,169105,169113,169117,169119,169130,169132,169390,169394,169426,169430,169458],[10,167317,167313],{"id":167318},"_7-函数进阶",[1760,167320,167322],{"id":167321},"_71-多返回值","7.1 多返回值",[19,167324,167325],{},"Python 函数可以返回多个值，本质上返回的是元组。",[270,167327,167329],{"className":31715,"code":167328,"language":31717,"meta":275,"style":275},"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",[277,167330,167331,167340,167348,167356,167365,167372,167376,167380,167389,167395],{"__ignoreMap":275},[152,167332,167333,167335,167338],{"class":281,"line":282},[152,167334,33284],{"class":476},[152,167336,167337],{"class":285}," get_info",[152,167339,33290],{"class":483},[152,167341,167342,167344,167346],{"class":281,"line":303},[152,167343,153707],{"class":483},[152,167345,1864],{"class":476},[152,167347,150690],{"class":289},[152,167349,167350,167352,167354],{"class":281,"line":310},[152,167351,153723],{"class":483},[152,167353,1864],{"class":476},[152,167355,147888],{"class":293},[152,167357,167358,167360,167362],{"class":281,"line":324},[152,167359,153738],{"class":483},[152,167361,1864],{"class":476},[152,167363,167364],{"class":293}," 95\n",[152,167366,167367,167369],{"class":281,"line":329},[152,167368,5732],{"class":476},[152,167370,167371],{"class":483}," name, age, score\n",[152,167373,167374],{"class":281,"line":343},[152,167375,307],{"emptyLinePlaceholder":306},[152,167377,167378],{"class":281,"line":348},[152,167379,307],{"emptyLinePlaceholder":306},[152,167381,167382,167384,167386],{"class":281,"line":362},[152,167383,162643],{"class":483},[152,167385,1864],{"class":476},[152,167387,167388],{"class":483}," get_info()\n",[152,167390,167391,167393],{"class":281,"line":367},[152,167392,31752],{"class":293},[152,167394,77922],{"class":483},[152,167396,167397,167399,167401,167403],{"class":281,"line":381},[152,167398,31752],{"class":293},[152,167400,1819],{"class":483},[152,167402,104444],{"class":293},[152,167404,167405],{"class":483},"(result))\n",[19,167407,167408],{},"可以直接解包：",[270,167410,167412],{"className":31715,"code":167411,"language":31717,"meta":275,"style":275},"name, age, score = get_info()\nprint(name, age, score)\n",[277,167413,167414,167423],{"__ignoreMap":275},[152,167415,167416,167419,167421],{"class":281,"line":282},[152,167417,167418],{"class":483},"name, age, score ",[152,167420,1864],{"class":476},[152,167422,167388],{"class":483},[152,167424,167425,167427],{"class":281,"line":303},[152,167426,31752],{"class":293},[152,167428,167429],{"class":483},"(name, age, score)\n",[19,167431,167432],{},"返回多个值适合函数需要同时给出多个结果时使用。",[1760,167434,167436],{"id":167435},"_72-位置参数","7.2 位置参数",[19,167438,167439],{},"位置参数按顺序传递。",[270,167441,167443],{"className":31715,"code":167442,"language":31717,"meta":275,"style":275},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[277,167444,167445,167453,167481,167485,167489],{"__ignoreMap":275},[152,167446,167447,167449,167451],{"class":281,"line":282},[152,167448,33284],{"class":476},[152,167450,150709],{"class":285},[152,167452,150712],{"class":483},[152,167454,167455,167457,167459,167461,167463,167465,167467,167469,167471,167473,167475,167477,167479],{"class":281,"line":303},[152,167456,32636],{"class":293},[152,167458,1819],{"class":483},[152,167460,1870],{"class":476},[152,167462,150723],{"class":289},[152,167464,2703],{"class":293},[152,167466,81147],{"class":483},[152,167468,2752],{"class":293},[152,167470,150732],{"class":289},[152,167472,2703],{"class":293},[152,167474,71558],{"class":483},[152,167476,2752],{"class":293},[152,167478,150741],{"class":289},[152,167480,1825],{"class":483},[152,167482,167483],{"class":281,"line":310},[152,167484,307],{"emptyLinePlaceholder":306},[152,167486,167487],{"class":281,"line":324},[152,167488,307],{"emptyLinePlaceholder":306},[152,167490,167491,167494,167496,167498,167500],{"class":281,"line":329},[152,167492,167493],{"class":483},"introduce(",[152,167495,151225],{"class":289},[152,167497,14051],{"class":483},[152,167499,2458],{"class":293},[152,167501,1825],{"class":483},[19,167503,167504],{},"顺序错了就会得到错误含义：",[270,167506,167508],{"className":31715,"code":167507,"language":31717,"meta":275,"style":275},"introduce(18, \"小明\")\n",[277,167509,167510],{"__ignoreMap":275},[152,167511,167512,167514,167516,167518,167520],{"class":281,"line":282},[152,167513,167493],{"class":483},[152,167515,2458],{"class":293},[152,167517,14051],{"class":483},[152,167519,151225],{"class":289},[152,167521,1825],{"class":483},[1760,167523,167525],{"id":167524},"_73-关键字参数","7.3 关键字参数",[19,167527,167528],{},"关键字参数按参数名传递。",[270,167530,167532],{"className":31715,"code":167531,"language":31717,"meta":275,"style":275},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[277,167533,167534,167554],{"__ignoreMap":275},[152,167535,167536,167538,167540,167542,167544,167546,167548,167550,167552],{"class":281,"line":282},[152,167537,167493],{"class":483},[152,167539,81147],{"class":6858},[152,167541,1864],{"class":476},[152,167543,151225],{"class":289},[152,167545,14051],{"class":483},[152,167547,71558],{"class":6858},[152,167549,1864],{"class":476},[152,167551,2458],{"class":293},[152,167553,1825],{"class":483},[152,167555,167556,167558,167560,167562,167564,167566,167568,167570,167572],{"class":281,"line":303},[152,167557,167493],{"class":483},[152,167559,71558],{"class":6858},[152,167561,1864],{"class":476},[152,167563,2458],{"class":293},[152,167565,14051],{"class":483},[152,167567,81147],{"class":6858},[152,167569,1864],{"class":476},[152,167571,151225],{"class":289},[152,167573,1825],{"class":483},[19,167575,119271],{},[416,167577,167578,167581],{},[419,167579,167580],{},"顺序不容易错。",[419,167582,167583],{},"调用时可读性更强。",[1760,167585,167587],{"id":167586},"_74-默认参数","7.4 默认参数",[19,167589,167590],{},"默认参数给参数设置默认值。",[270,167592,167594],{"className":31715,"code":167593,"language":31717,"meta":275,"style":275},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[277,167595,167596,167612,167642,167646,167650,167660],{"__ignoreMap":275},[152,167597,167598,167600,167602,167605,167607,167610],{"class":281,"line":282},[152,167599,33284],{"class":476},[152,167601,123430],{"class":285},[152,167603,167604],{"class":483},"(host, port",[152,167606,1864],{"class":476},[152,167608,167609],{"class":293},"3306",[152,167611,32123],{"class":483},[152,167613,167614,167616,167618,167620,167623,167625,167627,167629,167631,167633,167636,167638,167640],{"class":281,"line":303},[152,167615,32636],{"class":293},[152,167617,1819],{"class":483},[152,167619,1870],{"class":476},[152,167621,167622],{"class":289},"\"连接",[152,167624,2703],{"class":293},[152,167626,28996],{"class":483},[152,167628,2752],{"class":293},[152,167630,841],{"class":289},[152,167632,2703],{"class":293},[152,167634,167635],{"class":483},"port",[152,167637,2752],{"class":293},[152,167639,2059],{"class":289},[152,167641,1825],{"class":483},[152,167643,167644],{"class":281,"line":310},[152,167645,307],{"emptyLinePlaceholder":306},[152,167647,167648],{"class":281,"line":324},[152,167649,307],{"emptyLinePlaceholder":306},[152,167651,167652,167655,167658],{"class":281,"line":329},[152,167653,167654],{"class":483},"connect(",[152,167656,167657],{"class":289},"\"localhost\"",[152,167659,1825],{"class":483},[152,167661,167662,167664,167666,167668,167671],{"class":281,"line":343},[152,167663,167654],{"class":483},[152,167665,167657],{"class":289},[152,167667,14051],{"class":483},[152,167669,167670],{"class":293},"6379",[152,167672,1825],{"class":483},[19,167674,167675],{},"注意：默认参数必须放在非默认参数后面。",[19,167677,167678],{},"错误：",[270,167680,167682],{"className":31715,"code":167681,"language":31717,"meta":275,"style":275},"def connect(port=3306, host):\n    pass\n",[277,167683,167684,167700],{"__ignoreMap":275},[152,167685,167686,167688,167690,167693,167695,167697],{"class":281,"line":282},[152,167687,33284],{"class":476},[152,167689,123430],{"class":285},[152,167691,167692],{"class":483},"(port",[152,167694,1864],{"class":476},[152,167696,167609],{"class":293},[152,167698,167699],{"class":483},", host):\n",[152,167701,167702],{"class":281,"line":303},[152,167703,150874],{"class":476},[19,167705,167706],{},"正确：",[270,167708,167710],{"className":31715,"code":167709,"language":31717,"meta":275,"style":275},"def connect(host, port=3306):\n    pass\n",[277,167711,167712,167726],{"__ignoreMap":275},[152,167713,167714,167716,167718,167720,167722,167724],{"class":281,"line":282},[152,167715,33284],{"class":476},[152,167717,123430],{"class":285},[152,167719,167604],{"class":483},[152,167721,1864],{"class":476},[152,167723,167609],{"class":293},[152,167725,32123],{"class":483},[152,167727,167728],{"class":281,"line":303},[152,167729,150874],{"class":476},[1760,167731,167733],{"id":167732},"_75-默认参数的坑","7.5 默认参数的坑",[19,167735,167736],{},"不要使用可变对象作为默认参数。",[19,167738,158960],{},[270,167740,167742],{"className":31715,"code":167741,"language":31717,"meta":275,"style":275},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[277,167743,167744,167759,167764,167771,167775,167779,167790],{"__ignoreMap":275},[152,167745,167746,167748,167751,167754,167756],{"class":281,"line":282},[152,167747,33284],{"class":476},[152,167749,167750],{"class":285}," add_item",[152,167752,167753],{"class":483},"(item, items",[152,167755,1864],{"class":476},[152,167757,167758],{"class":483},"[]):\n",[152,167760,167761],{"class":281,"line":303},[152,167762,167763],{"class":483},"    items.append(item)\n",[152,167765,167766,167768],{"class":281,"line":310},[152,167767,5732],{"class":476},[152,167769,167770],{"class":483}," items\n",[152,167772,167773],{"class":281,"line":324},[152,167774,307],{"emptyLinePlaceholder":306},[152,167776,167777],{"class":281,"line":329},[152,167778,307],{"emptyLinePlaceholder":306},[152,167780,167781,167783,167786,167788],{"class":281,"line":343},[152,167782,31752],{"class":293},[152,167784,167785],{"class":483},"(add_item(",[152,167787,166662],{"class":289},[152,167789,31834],{"class":483},[152,167791,167792,167794,167796,167799],{"class":281,"line":348},[152,167793,31752],{"class":293},[152,167795,167785],{"class":483},[152,167797,167798],{"class":289},"\"b\"",[152,167800,31834],{"class":483},[19,167802,167803],{},"第二次调用会复用第一次的列表。",[19,167805,157225],{},[270,167807,167809],{"className":31715,"code":167808,"language":31717,"meta":275,"style":275},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[277,167810,167811,167825,167838,167847,167851],{"__ignoreMap":275},[152,167812,167813,167815,167817,167819,167821,167823],{"class":281,"line":282},[152,167814,33284],{"class":476},[152,167816,167750],{"class":285},[152,167818,167753],{"class":483},[152,167820,1864],{"class":476},[152,167822,97023],{"class":293},[152,167824,32123],{"class":483},[152,167826,167827,167829,167832,167834,167836],{"class":281,"line":303},[152,167828,4744],{"class":476},[152,167830,167831],{"class":483}," items ",[152,167833,40264],{"class":476},[152,167835,40270],{"class":293},[152,167837,5382],{"class":483},[152,167839,167840,167843,167845],{"class":281,"line":310},[152,167841,167842],{"class":483},"        items ",[152,167844,1864],{"class":476},[152,167846,53175],{"class":483},[152,167848,167849],{"class":281,"line":324},[152,167850,167763],{"class":483},[152,167852,167853,167855],{"class":281,"line":329},[152,167854,5732],{"class":476},[152,167856,167770],{"class":483},[1760,167858,167860],{"id":167859},"_76-不定长参数","7.6 不定长参数",[14,167862,167864],{"id":167863},"_761-args","7.6.1 *args",[19,167866,167867,167870],{},[277,167868,167869],{},"*args"," 接收任意数量的位置参数，得到元组。",[270,167872,167874],{"className":31715,"code":167873,"language":31717,"meta":275,"style":275},"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",[277,167875,167876,167889,167897,167908,167917,167923,167927,167931,167950],{"__ignoreMap":275},[152,167877,167878,167880,167882,167884,167886],{"class":281,"line":282},[152,167879,33284],{"class":476},[152,167881,6851],{"class":285},[152,167883,1819],{"class":483},[152,167885,2263],{"class":476},[152,167887,167888],{"class":483},"args):\n",[152,167890,167891,167893,167895],{"class":281,"line":303},[152,167892,160644],{"class":483},[152,167894,1864],{"class":476},[152,167896,48670],{"class":293},[152,167898,167899,167901,167903,167905],{"class":281,"line":310},[152,167900,4844],{"class":476},[152,167902,157517],{"class":483},[152,167904,27653],{"class":476},[152,167906,167907],{"class":483}," args:\n",[152,167909,167910,167912,167914],{"class":281,"line":324},[152,167911,161319],{"class":483},[152,167913,11109],{"class":476},[152,167915,167916],{"class":483}," num\n",[152,167918,167919,167921],{"class":281,"line":329},[152,167920,5732],{"class":476},[152,167922,163624],{"class":483},[152,167924,167925],{"class":281,"line":343},[152,167926,307],{"emptyLinePlaceholder":306},[152,167928,167929],{"class":281,"line":348},[152,167930,307],{"emptyLinePlaceholder":306},[152,167932,167933,167935,167938,167940,167942,167944,167946,167948],{"class":281,"line":362},[152,167934,31752],{"class":293},[152,167936,167937],{"class":483},"(add(",[152,167939,2026],{"class":293},[152,167941,14051],{"class":483},[152,167943,1894],{"class":293},[152,167945,14051],{"class":483},[152,167947,1888],{"class":293},[152,167949,31834],{"class":483},[152,167951,167952,167954,167956,167958,167960,167962,167964,167966,167968,167970,167972,167974],{"class":281,"line":367},[152,167953,31752],{"class":293},[152,167955,167937],{"class":483},[152,167957,2026],{"class":293},[152,167959,14051],{"class":483},[152,167961,1894],{"class":293},[152,167963,14051],{"class":483},[152,167965,1888],{"class":293},[152,167967,14051],{"class":483},[152,167969,2101],{"class":293},[152,167971,14051],{"class":483},[152,167973,2127],{"class":293},[152,167975,31834],{"class":483},[14,167977,167979],{"id":167978},"_762-kwargs","7.6.2 **kwargs",[19,167981,167982,167985],{},[277,167983,167984],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[270,167987,167989],{"className":31715,"code":167988,"language":31717,"meta":275,"style":275},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[277,167990,167991,168004,168015,168021,168025,168029],{"__ignoreMap":275},[152,167992,167993,167995,167997,167999,168001],{"class":281,"line":282},[152,167994,33284],{"class":476},[152,167996,163282],{"class":285},[152,167998,1819],{"class":483},[152,168000,12277],{"class":476},[152,168002,168003],{"class":483},"kwargs):\n",[152,168005,168006,168008,168010,168012],{"class":281,"line":303},[152,168007,4844],{"class":476},[152,168009,166122],{"class":483},[152,168011,27653],{"class":476},[152,168013,168014],{"class":483}," kwargs.items():\n",[152,168016,168017,168019],{"class":281,"line":310},[152,168018,33788],{"class":293},[152,168020,166134],{"class":483},[152,168022,168023],{"class":281,"line":324},[152,168024,307],{"emptyLinePlaceholder":306},[152,168026,168027],{"class":281,"line":329},[152,168028,307],{"emptyLinePlaceholder":306},[152,168030,168031,168033,168035,168037,168039,168041,168043,168045,168047,168049,168051,168053,168055],{"class":281,"line":343},[152,168032,163347],{"class":483},[152,168034,81147],{"class":6858},[152,168036,1864],{"class":476},[152,168038,151225],{"class":289},[152,168040,14051],{"class":483},[152,168042,71558],{"class":6858},[152,168044,1864],{"class":476},[152,168046,2458],{"class":293},[152,168048,14051],{"class":483},[152,168050,71609],{"class":6858},[152,168052,1864],{"class":476},[152,168054,70606],{"class":289},[152,168056,1825],{"class":483},[1760,168058,168060],{"id":168059},"_77-参数解包","7.7 参数解包",[19,168062,168063],{},"列表或元组解包为位置参数：",[270,168065,168067],{"className":31715,"code":168066,"language":31717,"meta":275,"style":275},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[277,168068,168069,168078,168093,168097,168101,168121],{"__ignoreMap":275},[152,168070,168071,168073,168075],{"class":281,"line":282},[152,168072,33284],{"class":476},[152,168074,6851],{"class":285},[152,168076,168077],{"class":483},"(a, b, c):\n",[152,168079,168080,168082,168084,168086,168088,168090],{"class":281,"line":303},[152,168081,5732],{"class":476},[152,168083,12485],{"class":483},[152,168085,2289],{"class":476},[152,168087,12498],{"class":483},[152,168089,2289],{"class":476},[152,168091,168092],{"class":483}," c\n",[152,168094,168095],{"class":281,"line":310},[152,168096,307],{"emptyLinePlaceholder":306},[152,168098,168099],{"class":281,"line":324},[152,168100,307],{"emptyLinePlaceholder":306},[152,168102,168103,168105,168107,168109,168111,168113,168115,168117,168119],{"class":281,"line":329},[152,168104,165437],{"class":483},[152,168106,1864],{"class":476},[152,168108,53563],{"class":483},[152,168110,2026],{"class":293},[152,168112,14051],{"class":483},[152,168114,1894],{"class":293},[152,168116,14051],{"class":483},[152,168118,1888],{"class":293},[152,168120,34583],{"class":483},[152,168122,168123,168125,168127,168129],{"class":281,"line":343},[152,168124,31752],{"class":293},[152,168126,167937],{"class":483},[152,168128,2263],{"class":476},[152,168130,168131],{"class":483},"nums))\n",[19,168133,168134],{},"字典解包为关键字参数：",[270,168136,168138],{"className":31715,"code":168137,"language":31717,"meta":275,"style":275},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[277,168139,168140,168148,168174,168178,168182,168206],{"__ignoreMap":275},[152,168141,168142,168144,168146],{"class":281,"line":282},[152,168143,33284],{"class":476},[152,168145,150709],{"class":285},[152,168147,150712],{"class":483},[152,168149,168150,168152,168154,168156,168158,168160,168162,168164,168166,168168,168170,168172],{"class":281,"line":303},[152,168151,32636],{"class":293},[152,168153,1819],{"class":483},[152,168155,1870],{"class":476},[152,168157,2059],{"class":289},[152,168159,2703],{"class":293},[152,168161,81147],{"class":483},[152,168163,2752],{"class":293},[152,168165,6090],{"class":293},[152,168167,71558],{"class":483},[152,168169,2752],{"class":293},[152,168171,2059],{"class":289},[152,168173,1825],{"class":483},[152,168175,168176],{"class":281,"line":310},[152,168177,307],{"emptyLinePlaceholder":306},[152,168179,168180],{"class":281,"line":324},[152,168181,307],{"emptyLinePlaceholder":306},[152,168183,168184,168186,168188,168190,168192,168194,168196,168198,168200,168202,168204],{"class":281,"line":329},[152,168185,117651],{"class":483},[152,168187,1864],{"class":476},[152,168189,6090],{"class":483},[152,168191,64016],{"class":289},[152,168193,52774],{"class":483},[152,168195,151225],{"class":289},[152,168197,14051],{"class":483},[152,168199,70461],{"class":289},[152,168201,52774],{"class":483},[152,168203,2458],{"class":293},[152,168205,3236],{"class":483},[152,168207,168208,168210,168212],{"class":281,"line":343},[152,168209,167493],{"class":483},[152,168211,12277],{"class":476},[152,168213,168214],{"class":483},"info)\n",[1760,168216,168218],{"id":168217},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168220,168221,168224],{},[277,168222,168223],{},"lambda"," 用于定义简单匿名函数。",[270,168226,168228],{"className":31715,"code":168227,"language":31717,"meta":275,"style":275},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[277,168229,168230,168247],{"__ignoreMap":275},[152,168231,168232,168235,168237,168240,168243,168245],{"class":281,"line":282},[152,168233,168234],{"class":483},"add ",[152,168236,1864],{"class":476},[152,168238,168239],{"class":476}," lambda",[152,168241,168242],{"class":483}," a, b: a ",[152,168244,2289],{"class":476},[152,168246,152441],{"class":483},[152,168248,168249,168251,168253,168255,168257,168259],{"class":281,"line":303},[152,168250,31752],{"class":293},[152,168252,167937],{"class":483},[152,168254,2026],{"class":293},[152,168256,14051],{"class":483},[152,168258,1894],{"class":293},[152,168260,31834],{"class":483},[19,168262,168263],{},"常和排序、过滤等函数一起使用。",[19,168265,168266],{},"按分数排序：",[270,168268,168270],{"className":31715,"code":168269,"language":31717,"meta":275,"style":275},"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",[277,168271,168272,168280,168300,168320,168340,168344,168348,168371],{"__ignoreMap":275},[152,168273,168274,168276,168278],{"class":281,"line":282},[152,168275,161053],{"class":483},[152,168277,1864],{"class":476},[152,168279,56784],{"class":483},[152,168281,168282,168284,168286,168288,168290,168292,168294,168296,168298],{"class":281,"line":303},[152,168283,149722],{"class":483},[152,168285,64016],{"class":289},[152,168287,52774],{"class":483},[152,168289,151225],{"class":289},[152,168291,14051],{"class":483},[152,168293,152809],{"class":289},[152,168295,52774],{"class":483},[152,168297,2794],{"class":293},[152,168299,6572],{"class":483},[152,168301,168302,168304,168306,168308,168310,168312,168314,168316,168318],{"class":281,"line":310},[152,168303,149722],{"class":483},[152,168305,64016],{"class":289},[152,168307,52774],{"class":483},[152,168309,152273],{"class":289},[152,168311,14051],{"class":483},[152,168313,152809],{"class":289},[152,168315,52774],{"class":483},[152,168317,2619],{"class":293},[152,168319,6572],{"class":483},[152,168321,168322,168324,168326,168328,168330,168332,168334,168336,168338],{"class":281,"line":324},[152,168323,149722],{"class":483},[152,168325,64016],{"class":289},[152,168327,52774],{"class":483},[152,168329,161068],{"class":289},[152,168331,14051],{"class":483},[152,168333,152809],{"class":289},[152,168335,52774],{"class":483},[152,168337,2214],{"class":293},[152,168339,6572],{"class":483},[152,168341,168342],{"class":281,"line":329},[152,168343,34583],{"class":483},[152,168345,168346],{"class":281,"line":343},[152,168347,307],{"emptyLinePlaceholder":306},[152,168349,168350,168353,168355,168357,168359,168361,168363,168365,168367,168369],{"class":281,"line":348},[152,168351,168352],{"class":483},"students.sort(",[152,168354,155283],{"class":6858},[152,168356,155286],{"class":476},[152,168358,155289],{"class":483},[152,168360,152809],{"class":289},[152,168362,113539],{"class":483},[152,168364,164865],{"class":6858},[152,168366,1864],{"class":476},[152,168368,32813],{"class":293},[152,168370,1825],{"class":483},[152,168372,168373,168375],{"class":281,"line":362},[152,168374,31752],{"class":293},[152,168376,166332],{"class":483},[19,168378,168379,168380,168382],{},"如果逻辑复杂，不要硬写 ",[277,168381,168223],{},"，定义普通函数更清晰。",[1760,168384,168386],{"id":168385},"_79-函数作为参数","7.9 函数作为参数",[19,168388,168389],{},"函数可以作为参数传给另一个函数。",[270,168391,168393],{"className":31715,"code":168392,"language":31717,"meta":275,"style":275},"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",[277,168394,168395,168403,168413,168417,168421,168431,168438,168442,168446],{"__ignoreMap":275},[152,168396,168397,168399,168401],{"class":281,"line":282},[152,168398,33284],{"class":476},[152,168400,6851],{"class":285},[152,168402,152430],{"class":483},[152,168404,168405,168407,168409,168411],{"class":281,"line":303},[152,168406,5732],{"class":476},[152,168408,12485],{"class":483},[152,168410,2289],{"class":476},[152,168412,152441],{"class":483},[152,168414,168415],{"class":281,"line":310},[152,168416,307],{"emptyLinePlaceholder":306},[152,168418,168419],{"class":281,"line":324},[152,168420,307],{"emptyLinePlaceholder":306},[152,168422,168423,168425,168428],{"class":281,"line":329},[152,168424,33284],{"class":476},[152,168426,168427],{"class":285}," calculate",[152,168429,168430],{"class":483},"(a, b, func):\n",[152,168432,168433,168435],{"class":281,"line":343},[152,168434,5732],{"class":476},[152,168436,168437],{"class":483}," func(a, b)\n",[152,168439,168440],{"class":281,"line":348},[152,168441,307],{"emptyLinePlaceholder":306},[152,168443,168444],{"class":281,"line":362},[152,168445,307],{"emptyLinePlaceholder":306},[152,168447,168448,168450,168453,168455,168457,168459],{"class":281,"line":367},[152,168449,31752],{"class":293},[152,168451,168452],{"class":483},"(calculate(",[152,168454,2254],{"class":293},[152,168456,14051],{"class":483},[152,168458,2508],{"class":293},[152,168460,168461],{"class":483},", add))\n",[19,168463,168464],{},"这种思想在排序、回调、框架中经常出现。",[1760,168466,168468],{"id":168467},"_710-mapfiltersorted","7.10 map、filter、sorted",[14,168470,168472],{"id":168471},"_7101-map","7.10.1 map",[19,168474,168475,168477],{},[277,168476,75381],{}," 对每个元素执行函数。",[270,168479,168481],{"className":31715,"code":168480,"language":31717,"meta":275,"style":275},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[277,168482,168483,168507,168530],{"__ignoreMap":275},[152,168484,168485,168487,168489,168491,168493,168495,168497,168499,168501,168503,168505],{"class":281,"line":282},[152,168486,165437],{"class":483},[152,168488,1864],{"class":476},[152,168490,53563],{"class":483},[152,168492,2026],{"class":293},[152,168494,14051],{"class":483},[152,168496,1894],{"class":293},[152,168498,14051],{"class":483},[152,168500,1888],{"class":293},[152,168502,14051],{"class":483},[152,168504,2101],{"class":293},[152,168506,34583],{"class":483},[152,168508,168509,168511,168513,168516,168518,168520,168523,168525,168527],{"class":281,"line":303},[152,168510,162643],{"class":483},[152,168512,1864],{"class":476},[152,168514,168515],{"class":293}," map",[152,168517,1819],{"class":483},[152,168519,168223],{"class":476},[152,168521,168522],{"class":483}," x: x ",[152,168524,2263],{"class":476},[152,168526,16370],{"class":293},[152,168528,168529],{"class":483},", nums)\n",[152,168531,168532,168534,168536,168538],{"class":281,"line":310},[152,168533,31752],{"class":293},[152,168535,1819],{"class":483},[152,168537,155407],{"class":293},[152,168539,167405],{"class":483},[14,168541,168543],{"id":168542},"_7102-filter","7.10.2 filter",[19,168545,168546,168548],{},[277,168547,81388],{}," 保留满足条件的元素。",[270,168550,168552],{"className":31715,"code":168551,"language":31717,"meta":275,"style":275},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[277,168553,168554,168582,168607],{"__ignoreMap":275},[152,168555,168556,168558,168560,168562,168564,168566,168568,168570,168572,168574,168576,168578,168580],{"class":281,"line":282},[152,168557,165437],{"class":483},[152,168559,1864],{"class":476},[152,168561,53563],{"class":483},[152,168563,2026],{"class":293},[152,168565,14051],{"class":483},[152,168567,1894],{"class":293},[152,168569,14051],{"class":483},[152,168571,1888],{"class":293},[152,168573,14051],{"class":483},[152,168575,2101],{"class":293},[152,168577,14051],{"class":483},[152,168579,2127],{"class":293},[152,168581,34583],{"class":483},[152,168583,168584,168586,168588,168591,168593,168595,168597,168599,168601,168603,168605],{"class":281,"line":303},[152,168585,162643],{"class":483},[152,168587,1864],{"class":476},[152,168589,168590],{"class":293}," filter",[152,168592,1819],{"class":483},[152,168594,168223],{"class":476},[152,168596,168522],{"class":483},[152,168598,2136],{"class":476},[152,168600,16370],{"class":293},[152,168602,102896],{"class":476},[152,168604,5735],{"class":293},[152,168606,168529],{"class":483},[152,168608,168609,168611,168613,168615],{"class":281,"line":310},[152,168610,31752],{"class":293},[152,168612,1819],{"class":483},[152,168614,155407],{"class":293},[152,168616,167405],{"class":483},[14,168618,168620],{"id":168619},"_7103-sorted","7.10.3 sorted",[19,168622,168623,168625],{},[277,168624,166573],{}," 返回排序后的新列表。",[270,168627,168629],{"className":31715,"code":168628,"language":31717,"meta":275,"style":275},"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",[277,168630,168631,168639,168659,168679,168699,168703,168707,168736],{"__ignoreMap":275},[152,168632,168633,168635,168637],{"class":281,"line":282},[152,168634,161053],{"class":483},[152,168636,1864],{"class":476},[152,168638,56784],{"class":483},[152,168640,168641,168643,168645,168647,168649,168651,168653,168655,168657],{"class":281,"line":303},[152,168642,149722],{"class":483},[152,168644,64016],{"class":289},[152,168646,52774],{"class":483},[152,168648,151225],{"class":289},[152,168650,14051],{"class":483},[152,168652,152809],{"class":289},[152,168654,52774],{"class":483},[152,168656,2794],{"class":293},[152,168658,6572],{"class":483},[152,168660,168661,168663,168665,168667,168669,168671,168673,168675,168677],{"class":281,"line":310},[152,168662,149722],{"class":483},[152,168664,64016],{"class":289},[152,168666,52774],{"class":483},[152,168668,152273],{"class":289},[152,168670,14051],{"class":483},[152,168672,152809],{"class":289},[152,168674,52774],{"class":483},[152,168676,2619],{"class":293},[152,168678,6572],{"class":483},[152,168680,168681,168683,168685,168687,168689,168691,168693,168695,168697],{"class":281,"line":324},[152,168682,149722],{"class":483},[152,168684,64016],{"class":289},[152,168686,52774],{"class":483},[152,168688,161068],{"class":289},[152,168690,14051],{"class":483},[152,168692,152809],{"class":289},[152,168694,52774],{"class":483},[152,168696,2214],{"class":293},[152,168698,6572],{"class":483},[152,168700,168701],{"class":281,"line":329},[152,168702,34583],{"class":483},[152,168704,168705],{"class":281,"line":343},[152,168706,307],{"emptyLinePlaceholder":306},[152,168708,168709,168711,168713,168715,168718,168720,168722,168724,168726,168728,168730,168732,168734],{"class":281,"line":348},[152,168710,162643],{"class":483},[152,168712,1864],{"class":476},[152,168714,164941],{"class":293},[152,168716,168717],{"class":483},"(students, ",[152,168719,155283],{"class":6858},[152,168721,155286],{"class":476},[152,168723,155289],{"class":483},[152,168725,152809],{"class":289},[152,168727,113539],{"class":483},[152,168729,164865],{"class":6858},[152,168731,1864],{"class":476},[152,168733,32813],{"class":293},[152,168735,1825],{"class":483},[152,168737,168738,168740],{"class":281,"line":362},[152,168739,31752],{"class":293},[152,168741,77922],{"class":483},[1760,168743,168745],{"id":168744},"_711-闭包入门","7.11 闭包入门",[19,168747,168748],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[270,168750,168752],{"className":31715,"code":168751,"language":31717,"meta":275,"style":275},"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",[277,168753,168754,168764,168774,168785,168789,168796,168800,168804,168818],{"__ignoreMap":275},[152,168755,168756,168758,168761],{"class":281,"line":282},[152,168757,33284],{"class":476},[152,168759,168760],{"class":285}," outer",[152,168762,168763],{"class":483},"(base):\n",[152,168765,168766,168768,168771],{"class":281,"line":303},[152,168767,32138],{"class":476},[152,168769,168770],{"class":285}," inner",[152,168772,168773],{"class":483},"(num):\n",[152,168775,168776,168778,168781,168783],{"class":281,"line":310},[152,168777,16367],{"class":476},[152,168779,168780],{"class":483}," base ",[152,168782,2289],{"class":476},[152,168784,167916],{"class":483},[152,168786,168787],{"class":281,"line":324},[152,168788,307],{"emptyLinePlaceholder":306},[152,168790,168791,168793],{"class":281,"line":329},[152,168792,5732],{"class":476},[152,168794,168795],{"class":483}," inner\n",[152,168797,168798],{"class":281,"line":343},[152,168799,307],{"emptyLinePlaceholder":306},[152,168801,168802],{"class":281,"line":348},[152,168803,307],{"emptyLinePlaceholder":306},[152,168805,168806,168809,168811,168814,168816],{"class":281,"line":362},[152,168807,168808],{"class":483},"add_10 ",[152,168810,1864],{"class":476},[152,168812,168813],{"class":483}," outer(",[152,168815,2254],{"class":293},[152,168817,1825],{"class":483},[152,168819,168820,168822,168825,168827],{"class":281,"line":367},[152,168821,31752],{"class":293},[152,168823,168824],{"class":483},"(add_10(",[152,168826,2127],{"class":293},[152,168828,31834],{"class":483},[19,168830,168831],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[1760,168833,168835],{"id":168834},"_712-装饰器入门","7.12 装饰器入门",[19,168837,168838],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[270,168840,168842],{"className":31715,"code":168841,"language":31717,"meta":275,"style":275},"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",[277,168843,168844,168853,168862,168873,168878,168889,168893,168900,168904,168908,168913,168921,168931,168935,168939],{"__ignoreMap":275},[152,168845,168846,168848,168850],{"class":281,"line":282},[152,168847,33284],{"class":476},[152,168849,88528],{"class":285},[152,168851,168852],{"class":483},"(func):\n",[152,168854,168855,168857,168860],{"class":281,"line":303},[152,168856,32138],{"class":476},[152,168858,168859],{"class":285}," wrapper",[152,168861,33290],{"class":483},[152,168863,168864,168866,168868,168871],{"class":281,"line":310},[152,168865,33788],{"class":293},[152,168867,1819],{"class":483},[152,168869,168870],{"class":289},"\"函数开始执行\"",[152,168872,1825],{"class":483},[152,168874,168875],{"class":281,"line":324},[152,168876,168877],{"class":483},"        func()\n",[152,168879,168880,168882,168884,168887],{"class":281,"line":329},[152,168881,33788],{"class":293},[152,168883,1819],{"class":483},[152,168885,168886],{"class":289},"\"函数执行结束\"",[152,168888,1825],{"class":483},[152,168890,168891],{"class":281,"line":343},[152,168892,307],{"emptyLinePlaceholder":306},[152,168894,168895,168897],{"class":281,"line":348},[152,168896,5732],{"class":476},[152,168898,168899],{"class":483}," wrapper\n",[152,168901,168902],{"class":281,"line":362},[152,168903,307],{"emptyLinePlaceholder":306},[152,168905,168906],{"class":281,"line":367},[152,168907,307],{"emptyLinePlaceholder":306},[152,168909,168910],{"class":281,"line":381},[152,168911,168912],{"class":285},"@log\n",[152,168914,168915,168917,168919],{"class":281,"line":386},[152,168916,33284],{"class":476},[152,168918,162333],{"class":285},[152,168920,33290],{"class":483},[152,168922,168923,168925,168927,168929],{"class":281,"line":932},[152,168924,32636],{"class":293},[152,168926,1819],{"class":483},[152,168928,7486],{"class":289},[152,168930,1825],{"class":483},[152,168932,168933],{"class":281,"line":942},[152,168934,307],{"emptyLinePlaceholder":306},[152,168936,168937],{"class":281,"line":949},[152,168938,307],{"emptyLinePlaceholder":306},[152,168940,168941],{"class":281,"line":954},[152,168942,162368],{"class":483},[19,168944,159611],{},[270,168946,168948],{"className":31715,"code":168947,"language":31717,"meta":275,"style":275},"say_hello = log(say_hello)\n",[277,168949,168950],{"__ignoreMap":275},[152,168951,168952,168955,168957],{"class":281,"line":282},[152,168953,168954],{"class":483},"say_hello ",[152,168956,1864],{"class":476},[152,168958,168959],{"class":483}," log(say_hello)\n",[19,168961,168962],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[1760,168964,168966],{"id":168965},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[270,168968,168970],{"className":31715,"code":168969,"language":31717,"meta":275,"style":275},"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",[277,168971,168972,168980,168997,169007,169026,169036,169043,169047,169053,169057,169061,169065,169073,169083,169087,169091],{"__ignoreMap":275},[152,168973,168974,168976,168978],{"class":281,"line":282},[152,168975,33284],{"class":476},[152,168977,88528],{"class":285},[152,168979,168852],{"class":483},[152,168981,168982,168984,168986,168988,168990,168993,168995],{"class":281,"line":303},[152,168983,32138],{"class":476},[152,168985,168859],{"class":285},[152,168987,1819],{"class":483},[152,168989,2263],{"class":476},[152,168991,168992],{"class":483},"args, ",[152,168994,12277],{"class":476},[152,168996,168003],{"class":483},[152,168998,168999,169001,169003,169005],{"class":281,"line":310},[152,169000,33788],{"class":293},[152,169002,1819],{"class":483},[152,169004,168870],{"class":289},[152,169006,1825],{"class":483},[152,169008,169009,169012,169014,169017,169019,169021,169023],{"class":281,"line":324},[152,169010,169011],{"class":483},"        result ",[152,169013,1864],{"class":476},[152,169015,169016],{"class":483}," func(",[152,169018,2263],{"class":476},[152,169020,168992],{"class":483},[152,169022,12277],{"class":476},[152,169024,169025],{"class":483},"kwargs)\n",[152,169027,169028,169030,169032,169034],{"class":281,"line":329},[152,169029,33788],{"class":293},[152,169031,1819],{"class":483},[152,169033,168886],{"class":289},[152,169035,1825],{"class":483},[152,169037,169038,169040],{"class":281,"line":343},[152,169039,16367],{"class":476},[152,169041,169042],{"class":483}," result\n",[152,169044,169045],{"class":281,"line":348},[152,169046,307],{"emptyLinePlaceholder":306},[152,169048,169049,169051],{"class":281,"line":362},[152,169050,5732],{"class":476},[152,169052,168899],{"class":483},[152,169054,169055],{"class":281,"line":367},[152,169056,307],{"emptyLinePlaceholder":306},[152,169058,169059],{"class":281,"line":381},[152,169060,307],{"emptyLinePlaceholder":306},[152,169062,169063],{"class":281,"line":386},[152,169064,168912],{"class":285},[152,169066,169067,169069,169071],{"class":281,"line":932},[152,169068,33284],{"class":476},[152,169070,6851],{"class":285},[152,169072,152430],{"class":483},[152,169074,169075,169077,169079,169081],{"class":281,"line":942},[152,169076,5732],{"class":476},[152,169078,12485],{"class":483},[152,169080,2289],{"class":476},[152,169082,152441],{"class":483},[152,169084,169085],{"class":281,"line":949},[152,169086,307],{"emptyLinePlaceholder":306},[152,169088,169089],{"class":281,"line":954},[152,169090,307],{"emptyLinePlaceholder":306},[152,169092,169093,169095,169097,169099,169101,169103],{"class":281,"line":959},[152,169094,31752],{"class":293},[152,169096,167937],{"class":483},[152,169098,2254],{"class":293},[152,169100,14051],{"class":483},[152,169102,2508],{"class":293},[152,169104,31834],{"class":483},[19,169106,169107,169108,102355,169110,169112],{},"这个写法使用 ",[277,169109,167869],{},[277,169111,167984],{}," 接收原函数的所有参数。",[1760,169114,169116],{"id":169115},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169118,124629],{},[416,169120,169121,169124,169127],{},[419,169122,169123],{},"给定一组学生数据。",[419,169125,169126],{},"封装函数，根据传入规则筛选学生。",[419,169128,169129],{},"筛选及格、优秀、未成年学生。",[19,169131,11651],{},[270,169133,169135],{"className":31715,"code":169134,"language":31717,"meta":275,"style":275},"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",[277,169136,169137,169145,169173,169201,169229,169233,169237,169241,169251,169259,169269,169276,169281,169287,169291,169295,169319,169342,169365,169369,169376,169383],{"__ignoreMap":275},[152,169138,169139,169141,169143],{"class":281,"line":282},[152,169140,161053],{"class":483},[152,169142,1864],{"class":476},[152,169144,56784],{"class":483},[152,169146,169147,169149,169151,169153,169155,169157,169159,169161,169163,169165,169167,169169,169171],{"class":281,"line":303},[152,169148,149722],{"class":483},[152,169150,64016],{"class":289},[152,169152,52774],{"class":483},[152,169154,151225],{"class":289},[152,169156,14051],{"class":483},[152,169158,70461],{"class":289},[152,169160,52774],{"class":483},[152,169162,2458],{"class":293},[152,169164,14051],{"class":483},[152,169166,152809],{"class":289},[152,169168,52774],{"class":483},[152,169170,2794],{"class":293},[152,169172,6572],{"class":483},[152,169174,169175,169177,169179,169181,169183,169185,169187,169189,169191,169193,169195,169197,169199],{"class":281,"line":310},[152,169176,149722],{"class":483},[152,169178,64016],{"class":289},[152,169180,52774],{"class":483},[152,169182,152273],{"class":289},[152,169184,14051],{"class":483},[152,169186,70461],{"class":289},[152,169188,52774],{"class":483},[152,169190,2433],{"class":293},[152,169192,14051],{"class":483},[152,169194,152809],{"class":289},[152,169196,52774],{"class":483},[152,169198,2619],{"class":293},[152,169200,6572],{"class":483},[152,169202,169203,169205,169207,169209,169211,169213,169215,169217,169219,169221,169223,169225,169227],{"class":281,"line":324},[152,169204,149722],{"class":483},[152,169206,64016],{"class":289},[152,169208,52774],{"class":483},[152,169210,161068],{"class":289},[152,169212,14051],{"class":483},[152,169214,70461],{"class":289},[152,169216,52774],{"class":483},[152,169218,2483],{"class":293},[152,169220,14051],{"class":483},[152,169222,152809],{"class":289},[152,169224,52774],{"class":483},[152,169226,2689],{"class":293},[152,169228,6572],{"class":483},[152,169230,169231],{"class":281,"line":329},[152,169232,34583],{"class":483},[152,169234,169235],{"class":281,"line":343},[152,169236,307],{"emptyLinePlaceholder":306},[152,169238,169239],{"class":281,"line":348},[152,169240,307],{"emptyLinePlaceholder":306},[152,169242,169243,169245,169248],{"class":281,"line":362},[152,169244,33284],{"class":476},[152,169246,169247],{"class":285}," filter_students",[152,169249,169250],{"class":483},"(students, condition):\n",[152,169252,169253,169255,169257],{"class":281,"line":367},[152,169254,162560],{"class":483},[152,169256,1864],{"class":476},[152,169258,53175],{"class":483},[152,169260,169261,169263,169265,169267],{"class":281,"line":381},[152,169262,4844],{"class":476},[152,169264,153474],{"class":483},[152,169266,27653],{"class":476},[152,169268,153479],{"class":483},[152,169270,169271,169273],{"class":281,"line":386},[152,169272,4147],{"class":476},[152,169274,169275],{"class":483}," condition(student):\n",[152,169277,169278],{"class":281,"line":932},[152,169279,169280],{"class":483},"            result.append(student)\n",[152,169282,169283,169285],{"class":281,"line":942},[152,169284,5732],{"class":476},[152,169286,169042],{"class":483},[152,169288,169289],{"class":281,"line":949},[152,169290,307],{"emptyLinePlaceholder":306},[152,169292,169293],{"class":281,"line":954},[152,169294,307],{"emptyLinePlaceholder":306},[152,169296,169297,169299,169301,169304,169306,169309,169311,169313,169315,169317],{"class":281,"line":959},[152,169298,167038],{"class":483},[152,169300,1864],{"class":476},[152,169302,169303],{"class":483}," filter_students(students, ",[152,169305,168223],{"class":476},[152,169307,169308],{"class":483}," s: s[",[152,169310,152809],{"class":289},[152,169312,6085],{"class":483},[152,169314,3370],{"class":476},[152,169316,159174],{"class":293},[152,169318,1825],{"class":483},[152,169320,169321,169324,169326,169328,169330,169332,169334,169336,169338,169340],{"class":281,"line":970},[152,169322,169323],{"class":483},"excellent ",[152,169325,1864],{"class":476},[152,169327,169303],{"class":483},[152,169329,168223],{"class":476},[152,169331,169308],{"class":483},[152,169333,152809],{"class":289},[152,169335,6085],{"class":483},[152,169337,3370],{"class":476},[152,169339,159125],{"class":293},[152,169341,1825],{"class":483},[152,169343,169344,169347,169349,169351,169353,169355,169357,169359,169361,169363],{"class":281,"line":979},[152,169345,169346],{"class":483},"under_age ",[152,169348,1864],{"class":476},[152,169350,169303],{"class":483},[152,169352,168223],{"class":476},[152,169354,169308],{"class":483},[152,169356,70461],{"class":289},[152,169358,6085],{"class":483},[152,169360,844],{"class":476},[152,169362,157622],{"class":293},[152,169364,1825],{"class":483},[152,169366,169367],{"class":281,"line":989},[152,169368,307],{"emptyLinePlaceholder":306},[152,169370,169371,169373],{"class":281,"line":996},[152,169372,31752],{"class":293},[152,169374,169375],{"class":483},"(passed)\n",[152,169377,169378,169380],{"class":281,"line":1001},[152,169379,31752],{"class":293},[152,169381,169382],{"class":483},"(excellent)\n",[152,169384,169385,169387],{"class":281,"line":1006},[152,169386,31752],{"class":293},[152,169388,169389],{"class":483},"(under_age)\n",[1760,169391,169393],{"id":169392},"_715-易错点","7.15 易错点",[416,169395,169396,169399,169407,169412,169423],{},[419,169397,169398],{},"默认参数不要写可变对象。",[419,169400,169401,169403,169404,169406],{},[277,169402,167869],{}," 是元组，",[277,169405,167984],{}," 是字典。",[419,169408,169409,169411],{},[277,169410,168223],{}," 只适合简单表达式。",[419,169413,169414,102355,169416,169418,169419,169422],{},[277,169415,75381],{},[277,169417,81388],{}," 的结果是迭代器，常用 ",[277,169420,169421],{},"list()"," 转换查看。",[419,169424,169425],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[1760,169427,169429],{"id":169428},"_716-本章练习","7.16 本章练习",[416,169431,169432,169439,169445,169450,169455],{},[419,169433,169434,169435,169438],{},"写函数 ",[277,169436,169437],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[419,169440,169434,169441,169444],{},[277,169442,169443],{},"print_user(**kwargs)","，输出用户所有字段。",[419,169446,105703,169447,169449],{},[277,169448,168223],{}," 对学生列表按年龄排序。",[419,169451,105703,169452,169454],{},[277,169453,81388],{}," 找出成绩不及格的学生。",[419,169456,169457],{},"写一个装饰器，统计函数执行前后的提示信息。",[1736,169459,169460],{},"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":275,"searchDepth":303,"depth":303,"links":169462},[169463,169464,169465,169466,169467,169468,169472,169473,169474,169475,169480,169481,169482,169483,169484,169485],{"id":167321,"depth":303,"text":167322},{"id":167435,"depth":303,"text":167436},{"id":167524,"depth":303,"text":167525},{"id":167586,"depth":303,"text":167587},{"id":167732,"depth":303,"text":167733},{"id":167859,"depth":303,"text":167860,"children":169469},[169470,169471],{"id":167863,"depth":310,"text":167864},{"id":167978,"depth":310,"text":167979},{"id":168059,"depth":303,"text":168060},{"id":168217,"depth":303,"text":168218},{"id":168385,"depth":303,"text":168386},{"id":168467,"depth":303,"text":168468,"children":169476},[169477,169478,169479],{"id":168471,"depth":310,"text":168472},{"id":168542,"depth":310,"text":168543},{"id":168619,"depth":310,"text":168620},{"id":168744,"depth":303,"text":168745},{"id":168834,"depth":303,"text":168835},{"id":168965,"depth":303,"text":168966},{"id":169115,"depth":303,"text":169116},{"id":169392,"depth":303,"text":169393},{"id":169428,"depth":303,"text":169429},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167313,"description":24991},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169492,"title":169493,"body":169494,"description":24991,"extension":1744,"meta":172013,"navigation":306,"path":172014,"seo":172015,"stem":172016,"__hash__":172017},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169495,"toc":171988},[169496,169499,169503,169506,169509,169540,169544,169548,169551,169578,169582,169585,169636,169639,169654,169657,169692,169696,169698,169722,169725,169785,169789,169793,169796,169853,169856,169876,169880,169883,169946,169950,169953,170009,170016,170040,170044,170047,170110,170114,170119,170170,170173,170177,170182,170249,170252,170334,170338,170343,170394,170397,170401,170404,170407,170415,170418,170464,170467,170513,170517,170523,170567,170570,170616,170619,170659,170662,170723,170727,170730,170820,170823,170965,170968,171035,171039,171042,171045,171186,171189,171267,171270,171446,171450,171452,171463,171465,171664,171668,171912,171916,171950,171954,171985],[10,169497,169493],{"id":169498},"_8-文件操作",[1760,169500,169502],{"id":169501},"_81-文件操作的意义","8.1 文件操作的意义",[19,169504,169505],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169507,169508],{},"常见文件类型：",[416,169510,169511,169517,169523,169529,169535],{},[419,169512,169513,169516],{},[277,169514,169515],{},".txt","：普通文本。",[419,169518,169519,169522],{},[277,169520,169521],{},".csv","：表格文本。",[419,169524,169525,169528],{},[277,169526,169527],{},".json","：结构化数据。",[419,169530,169531,169534],{},[277,169532,169533],{},".log","：日志文件。",[419,169536,169537,169539],{},[277,169538,147689],{},"：Python 源代码。",[1760,169541,169543],{"id":169542},"_82-路径","8.2 路径",[14,169545,169547],{"id":169546},"_821-相对路径","8.2.1 相对路径",[19,169549,169550],{},"相对当前运行目录：",[270,169552,169554],{"className":31715,"code":169553,"language":31717,"meta":275,"style":275},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[277,169555,169556],{"__ignoreMap":275},[152,169557,169558,169560,169562,169564,169566,169568,169570,169572,169574,169576],{"class":281,"line":282},[152,169559,88252],{"class":293},[152,169561,1819],{"class":483},[152,169563,148133],{"class":289},[152,169565,14051],{"class":483},[152,169567,148138],{"class":289},[152,169569,14051],{"class":483},[152,169571,148143],{"class":6858},[152,169573,1864],{"class":476},[152,169575,148148],{"class":289},[152,169577,1825],{"class":483},[14,169579,169581],{"id":169580},"_822-绝对路径","8.2.2 绝对路径",[19,169583,169584],{},"从根目录或盘符开始：",[270,169586,169588],{"className":31715,"code":169587,"language":31717,"meta":275,"style":275},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[277,169589,169590,169613],{"__ignoreMap":275},[152,169591,169592,169594,169596,169599,169601,169603,169605,169607,169609,169611],{"class":281,"line":282},[152,169593,88252],{"class":293},[152,169595,1819],{"class":483},[152,169597,169598],{"class":289},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[152,169600,14051],{"class":483},[152,169602,148138],{"class":289},[152,169604,14051],{"class":483},[152,169606,148143],{"class":6858},[152,169608,1864],{"class":476},[152,169610,148148],{"class":289},[152,169612,1825],{"class":483},[152,169614,169615,169617,169619,169622,169624,169626,169628,169630,169632,169634],{"class":281,"line":303},[152,169616,88252],{"class":293},[152,169618,1819],{"class":483},[152,169620,169621],{"class":289},"\"D:\u002Fdata\u002Fdata.txt\"",[152,169623,14051],{"class":483},[152,169625,148138],{"class":289},[152,169627,14051],{"class":483},[152,169629,148143],{"class":6858},[152,169631,1864],{"class":476},[152,169633,148148],{"class":289},[152,169635,1825],{"class":483},[19,169637,169638],{},"Windows 路径建议写成：",[270,169640,169642],{"className":31715,"code":169641,"language":31717,"meta":275,"style":275},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[277,169643,169644],{"__ignoreMap":275},[152,169645,169646,169649,169651],{"class":281,"line":282},[152,169647,169648],{"class":483},"path ",[152,169650,1864],{"class":476},[152,169652,169653],{"class":289}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169655,169656],{},"或原始字符串：",[270,169658,169660],{"className":31715,"code":169659,"language":31717,"meta":275,"style":275},"path = r\"D:\\data\\data.txt\"\n",[277,169661,169662],{"__ignoreMap":275},[152,169663,169664,169666,169668,169670,169672,169675,169678,169681,169683,169685,169687,169690],{"class":281,"line":282},[152,169665,169648],{"class":483},[152,169667,1864],{"class":476},[152,169669,18736],{"class":476},[152,169671,2059],{"class":289},[152,169673,169674],{"class":49314},"D:",[152,169676,169677],{"class":293},"\\d",[152,169679,169680],{"class":49314},"ata",[152,169682,169677],{"class":293},[152,169684,169680],{"class":49314},[152,169686,2366],{"class":293},[152,169688,169689],{"class":49314},"txt",[152,169691,26744],{"class":289},[1760,169693,169695],{"id":169694},"_83-open函数","8.3 open函数",[19,169697,6823],{},[270,169699,169701],{"className":31715,"code":169700,"language":31717,"meta":275,"style":275},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[277,169702,169703],{"__ignoreMap":275},[152,169704,169705,169707,169709,169711,169714,169716,169718,169720],{"class":281,"line":282},[152,169706,46691],{"class":6858},[152,169708,15180],{"class":476},[152,169710,148128],{"class":293},[152,169712,169713],{"class":483},"(文件路径, 打开模式, ",[152,169715,148143],{"class":6858},[152,169717,1864],{"class":476},[152,169719,148148],{"class":289},[152,169721,1825],{"class":483},[19,169723,169724],{},"常见模式：",[23,169726,169727,169736],{},[26,169728,169729],{},[29,169730,169731,169734],{},[32,169732,169733],{},"模式",[32,169735,38],{},[43,169737,169738,169747,169756,169765,169775],{},[29,169739,169740,169744],{},[48,169741,169742],{},[277,169743,2478],{},[48,169745,169746],{},"只读，文件不存在会报错",[29,169748,169749,169753],{},[48,169750,169751],{},[277,169752,2603],{},[48,169754,169755],{},"只写，文件不存在会创建，存在会清空",[29,169757,169758,169762],{},[48,169759,169760],{},[277,169761,69],{},[48,169763,169764],{},"追加，文件不存在会创建",[29,169766,169767,169772],{},[48,169768,169769],{},[277,169770,169771],{},"rb",[48,169773,169774],{},"二进制只读",[29,169776,169777,169782],{},[48,169778,169779],{},[277,169780,169781],{},"wb",[48,169783,169784],{},"二进制只写",[1760,169786,169788],{"id":169787},"_84-读取文件","8.4 读取文件",[14,169790,169792],{"id":169791},"_841-read","8.4.1 read",[19,169794,169795],{},"一次读取全部内容：",[270,169797,169799],{"className":31715,"code":169798,"language":31717,"meta":275,"style":275},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[277,169800,169801,169827,169839,169846],{"__ignoreMap":275},[152,169802,169803,169805,169807,169809,169811,169813,169815,169817,169819,169821,169823,169825],{"class":281,"line":282},[152,169804,46691],{"class":6858},[152,169806,15180],{"class":476},[152,169808,148128],{"class":293},[152,169810,1819],{"class":483},[152,169812,148133],{"class":289},[152,169814,14051],{"class":483},[152,169816,148138],{"class":289},[152,169818,14051],{"class":483},[152,169820,148143],{"class":6858},[152,169822,1864],{"class":476},[152,169824,148148],{"class":289},[152,169826,1825],{"class":483},[152,169828,169829,169832,169834,169836],{"class":281,"line":303},[152,169830,169831],{"class":483},"content ",[152,169833,1864],{"class":476},[152,169835,149490],{"class":6858},[152,169837,169838],{"class":483},".read()\n",[152,169840,169841,169843],{"class":281,"line":310},[152,169842,31752],{"class":293},[152,169844,169845],{"class":483},"(content)\n",[152,169847,169848,169850],{"class":281,"line":324},[152,169849,46691],{"class":6858},[152,169851,169852],{"class":483},".close()\n",[19,169854,169855],{},"可以指定读取字符数：",[270,169857,169859],{"className":31715,"code":169858,"language":31717,"meta":275,"style":275},"content = file.read(10)\n",[277,169860,169861],{"__ignoreMap":275},[152,169862,169863,169865,169867,169869,169872,169874],{"class":281,"line":282},[152,169864,169831],{"class":483},[152,169866,1864],{"class":476},[152,169868,149490],{"class":6858},[152,169870,169871],{"class":483},".read(",[152,169873,2254],{"class":293},[152,169875,1825],{"class":483},[14,169877,169879],{"id":169878},"_842-readline","8.4.2 readline",[19,169881,169882],{},"一次读取一行：",[270,169884,169886],{"className":31715,"code":169885,"language":31717,"meta":275,"style":275},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[277,169887,169888,169914,169918,169929,169936,169940],{"__ignoreMap":275},[152,169889,169890,169892,169894,169896,169898,169900,169902,169904,169906,169908,169910,169912],{"class":281,"line":282},[152,169891,46691],{"class":6858},[152,169893,15180],{"class":476},[152,169895,148128],{"class":293},[152,169897,1819],{"class":483},[152,169899,148133],{"class":289},[152,169901,14051],{"class":483},[152,169903,148138],{"class":289},[152,169905,14051],{"class":483},[152,169907,148143],{"class":6858},[152,169909,1864],{"class":476},[152,169911,148148],{"class":289},[152,169913,1825],{"class":483},[152,169915,169916],{"class":281,"line":303},[152,169917,307],{"emptyLinePlaceholder":306},[152,169919,169920,169922,169924,169926],{"class":281,"line":310},[152,169921,148589],{"class":483},[152,169923,1864],{"class":476},[152,169925,149490],{"class":6858},[152,169927,169928],{"class":483},".readline()\n",[152,169930,169931,169933],{"class":281,"line":324},[152,169932,31752],{"class":293},[152,169934,169935],{"class":483},"(line)\n",[152,169937,169938],{"class":281,"line":329},[152,169939,307],{"emptyLinePlaceholder":306},[152,169941,169942,169944],{"class":281,"line":343},[152,169943,46691],{"class":6858},[152,169945,169852],{"class":483},[14,169947,169949],{"id":169948},"_843-readlines","8.4.3 readlines",[19,169951,169952],{},"读取所有行，返回列表：",[270,169954,169956],{"className":31715,"code":169955,"language":31717,"meta":275,"style":275},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[277,169957,169958,169984,169996,170003],{"__ignoreMap":275},[152,169959,169960,169962,169964,169966,169968,169970,169972,169974,169976,169978,169980,169982],{"class":281,"line":282},[152,169961,46691],{"class":6858},[152,169963,15180],{"class":476},[152,169965,148128],{"class":293},[152,169967,1819],{"class":483},[152,169969,148133],{"class":289},[152,169971,14051],{"class":483},[152,169973,148138],{"class":289},[152,169975,14051],{"class":483},[152,169977,148143],{"class":6858},[152,169979,1864],{"class":476},[152,169981,148148],{"class":289},[152,169983,1825],{"class":483},[152,169985,169986,169989,169991,169993],{"class":281,"line":303},[152,169987,169988],{"class":483},"lines ",[152,169990,1864],{"class":476},[152,169992,149490],{"class":6858},[152,169994,169995],{"class":483},".readlines()\n",[152,169997,169998,170000],{"class":281,"line":310},[152,169999,31752],{"class":293},[152,170001,170002],{"class":483},"(lines)\n",[152,170004,170005,170007],{"class":281,"line":324},[152,170006,46691],{"class":6858},[152,170008,169852],{"class":483},[19,170010,170011,170012,170015],{},"每一行通常带有换行符，可以用 ",[277,170013,170014],{},"strip()"," 去掉：",[270,170017,170019],{"className":31715,"code":170018,"language":31717,"meta":275,"style":275},"for line in lines:\n    print(line.strip())\n",[277,170020,170021,170033],{"__ignoreMap":275},[152,170022,170023,170025,170028,170030],{"class":281,"line":282},[152,170024,4668],{"class":476},[152,170026,170027],{"class":483}," line ",[152,170029,27653],{"class":476},[152,170031,170032],{"class":483}," lines:\n",[152,170034,170035,170037],{"class":281,"line":303},[152,170036,32636],{"class":293},[152,170038,170039],{"class":483},"(line.strip())\n",[14,170041,170043],{"id":170042},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170045,170046],{},"推荐读取大文件时使用：",[270,170048,170050],{"className":31715,"code":170049,"language":31717,"meta":275,"style":275},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[277,170051,170052,170078,170082,170094,170100,170104],{"__ignoreMap":275},[152,170053,170054,170056,170058,170060,170062,170064,170066,170068,170070,170072,170074,170076],{"class":281,"line":282},[152,170055,46691],{"class":6858},[152,170057,15180],{"class":476},[152,170059,148128],{"class":293},[152,170061,1819],{"class":483},[152,170063,148133],{"class":289},[152,170065,14051],{"class":483},[152,170067,148138],{"class":289},[152,170069,14051],{"class":483},[152,170071,148143],{"class":6858},[152,170073,1864],{"class":476},[152,170075,148148],{"class":289},[152,170077,1825],{"class":483},[152,170079,170080],{"class":281,"line":303},[152,170081,307],{"emptyLinePlaceholder":306},[152,170083,170084,170086,170088,170090,170092],{"class":281,"line":310},[152,170085,4668],{"class":476},[152,170087,170027],{"class":483},[152,170089,27653],{"class":476},[152,170091,149490],{"class":6858},[152,170093,5382],{"class":483},[152,170095,170096,170098],{"class":281,"line":324},[152,170097,32636],{"class":293},[152,170099,170039],{"class":483},[152,170101,170102],{"class":281,"line":329},[152,170103,307],{"emptyLinePlaceholder":306},[152,170105,170106,170108],{"class":281,"line":343},[152,170107,46691],{"class":6858},[152,170109,169852],{"class":483},[1760,170111,170113],{"id":170112},"_85-with语句","8.5 with语句",[19,170115,170116,170118],{},[277,170117,109170],{}," 会自动关闭文件，推荐使用。",[270,170120,170122],{"className":31715,"code":170121,"language":31717,"meta":275,"style":275},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[277,170123,170124,170154,170164],{"__ignoreMap":275},[152,170125,170126,170128,170130,170132,170134,170136,170138,170140,170142,170144,170146,170148,170150,170152],{"class":281,"line":282},[152,170127,109170],{"class":476},[152,170129,148128],{"class":293},[152,170131,1819],{"class":483},[152,170133,148133],{"class":289},[152,170135,14051],{"class":483},[152,170137,148138],{"class":289},[152,170139,14051],{"class":483},[152,170141,148143],{"class":6858},[152,170143,1864],{"class":476},[152,170145,148148],{"class":289},[152,170147,15330],{"class":483},[152,170149,32720],{"class":476},[152,170151,149490],{"class":6858},[152,170153,5382],{"class":483},[152,170155,170156,170158,170160,170162],{"class":281,"line":303},[152,170157,148160],{"class":483},[152,170159,1864],{"class":476},[152,170161,149490],{"class":6858},[152,170163,169838],{"class":483},[152,170165,170166,170168],{"class":281,"line":310},[152,170167,32636],{"class":293},[152,170169,169845],{"class":483},[19,170171,170172],{},"等价于打开文件、读取、最后关闭，但更安全。",[1760,170174,170176],{"id":170175},"_86-写入文件","8.6 写入文件",[19,170178,170179,170181],{},[277,170180,2603],{}," 模式会清空原文件。",[270,170183,170185],{"className":31715,"code":170184,"language":31717,"meta":275,"style":275},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[277,170186,170187,170217,170234],{"__ignoreMap":275},[152,170188,170189,170191,170193,170195,170197,170199,170201,170203,170205,170207,170209,170211,170213,170215],{"class":281,"line":282},[152,170190,109170],{"class":476},[152,170192,148128],{"class":293},[152,170194,1819],{"class":483},[152,170196,148133],{"class":289},[152,170198,14051],{"class":483},[152,170200,153313],{"class":289},[152,170202,14051],{"class":483},[152,170204,148143],{"class":6858},[152,170206,1864],{"class":476},[152,170208,148148],{"class":289},[152,170210,15330],{"class":483},[152,170212,32720],{"class":476},[152,170214,149490],{"class":6858},[152,170216,5382],{"class":483},[152,170218,170219,170222,170225,170228,170230,170232],{"class":281,"line":303},[152,170220,170221],{"class":6858},"    file",[152,170223,170224],{"class":483},".write(",[152,170226,170227],{"class":289},"\"hello",[152,170229,157862],{"class":293},[152,170231,2059],{"class":289},[152,170233,1825],{"class":483},[152,170235,170236,170238,170240,170243,170245,170247],{"class":281,"line":310},[152,170237,170221],{"class":6858},[152,170239,170224],{"class":483},[152,170241,170242],{"class":289},"\"python",[152,170244,157862],{"class":293},[152,170246,2059],{"class":289},[152,170248,1825],{"class":483},[19,170250,170251],{},"写入多行：",[270,170253,170255],{"className":31715,"code":170254,"language":31717,"meta":275,"style":275},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[277,170256,170257,170292,170296,170327],{"__ignoreMap":275},[152,170258,170259,170261,170263,170265,170268,170270,170272,170274,170277,170279,170281,170283,170286,170288,170290],{"class":281,"line":282},[152,170260,169988],{"class":483},[152,170262,1864],{"class":476},[152,170264,53563],{"class":483},[152,170266,170267],{"class":289},"\"小明,18",[152,170269,157862],{"class":293},[152,170271,2059],{"class":289},[152,170273,14051],{"class":483},[152,170275,170276],{"class":289},"\"小红,17",[152,170278,157862],{"class":293},[152,170280,2059],{"class":289},[152,170282,14051],{"class":483},[152,170284,170285],{"class":289},"\"小刚,19",[152,170287,157862],{"class":293},[152,170289,2059],{"class":289},[152,170291,34583],{"class":483},[152,170293,170294],{"class":281,"line":303},[152,170295,307],{"emptyLinePlaceholder":306},[152,170297,170298,170300,170302,170304,170307,170309,170311,170313,170315,170317,170319,170321,170323,170325],{"class":281,"line":310},[152,170299,109170],{"class":476},[152,170301,148128],{"class":293},[152,170303,1819],{"class":483},[152,170305,170306],{"class":289},"\"students.txt\"",[152,170308,14051],{"class":483},[152,170310,153313],{"class":289},[152,170312,14051],{"class":483},[152,170314,148143],{"class":6858},[152,170316,1864],{"class":476},[152,170318,148148],{"class":289},[152,170320,15330],{"class":483},[152,170322,32720],{"class":476},[152,170324,149490],{"class":6858},[152,170326,5382],{"class":483},[152,170328,170329,170331],{"class":281,"line":324},[152,170330,170221],{"class":6858},[152,170332,170333],{"class":483},".writelines(lines)\n",[1760,170335,170337],{"id":170336},"_87-追加文件","8.7 追加文件",[19,170339,170340,170342],{},[277,170341,69],{}," 模式不会清空原内容，而是在末尾追加。",[270,170344,170346],{"className":31715,"code":170345,"language":31717,"meta":275,"style":275},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[277,170347,170348,170379],{"__ignoreMap":275},[152,170349,170350,170352,170354,170356,170359,170361,170363,170365,170367,170369,170371,170373,170375,170377],{"class":281,"line":282},[152,170351,109170],{"class":476},[152,170353,148128],{"class":293},[152,170355,1819],{"class":483},[152,170357,170358],{"class":289},"\"log.txt\"",[152,170360,14051],{"class":483},[152,170362,166662],{"class":289},[152,170364,14051],{"class":483},[152,170366,148143],{"class":6858},[152,170368,1864],{"class":476},[152,170370,148148],{"class":289},[152,170372,15330],{"class":483},[152,170374,32720],{"class":476},[152,170376,149490],{"class":6858},[152,170378,5382],{"class":483},[152,170380,170381,170383,170385,170388,170390,170392],{"class":281,"line":303},[152,170382,170221],{"class":6858},[152,170384,170224],{"class":483},[152,170386,170387],{"class":289},"\"程序启动",[152,170389,157862],{"class":293},[152,170391,2059],{"class":289},[152,170393,1825],{"class":483},[19,170395,170396],{},"日志类文件常用追加模式。",[1760,170398,170400],{"id":170399},"_88-文件编码","8.8 文件编码",[19,170402,170403],{},"编码决定文字如何保存为字节。",[19,170405,170406],{},"常见编码：",[416,170408,170409,170412],{},[419,170410,170411],{},"UTF-8：推荐。",[419,170413,170414],{},"GBK：部分 Windows 中文文件常见。",[19,170416,170417],{},"读取文件乱码时，可以尝试：",[270,170419,170421],{"className":31715,"code":170420,"language":31717,"meta":275,"style":275},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[277,170422,170423,170454],{"__ignoreMap":275},[152,170424,170425,170427,170429,170431,170433,170435,170437,170439,170441,170443,170446,170448,170450,170452],{"class":281,"line":282},[152,170426,109170],{"class":476},[152,170428,148128],{"class":293},[152,170430,1819],{"class":483},[152,170432,148133],{"class":289},[152,170434,14051],{"class":483},[152,170436,148138],{"class":289},[152,170438,14051],{"class":483},[152,170440,148143],{"class":6858},[152,170442,1864],{"class":476},[152,170444,170445],{"class":289},"\"gbk\"",[152,170447,15330],{"class":483},[152,170449,32720],{"class":476},[152,170451,149490],{"class":6858},[152,170453,5382],{"class":483},[152,170455,170456,170458,170460,170462],{"class":281,"line":303},[152,170457,148160],{"class":483},[152,170459,1864],{"class":476},[152,170461,149490],{"class":6858},[152,170463,169838],{"class":483},[19,170465,170466],{},"写文件时建议统一 UTF-8：",[270,170468,170470],{"className":31715,"code":170469,"language":31717,"meta":275,"style":275},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[277,170471,170472,170502],{"__ignoreMap":275},[152,170473,170474,170476,170478,170480,170482,170484,170486,170488,170490,170492,170494,170496,170498,170500],{"class":281,"line":282},[152,170475,109170],{"class":476},[152,170477,148128],{"class":293},[152,170479,1819],{"class":483},[152,170481,148133],{"class":289},[152,170483,14051],{"class":483},[152,170485,153313],{"class":289},[152,170487,14051],{"class":483},[152,170489,148143],{"class":6858},[152,170491,1864],{"class":476},[152,170493,148148],{"class":289},[152,170495,15330],{"class":483},[152,170497,32720],{"class":476},[152,170499,149490],{"class":6858},[152,170501,5382],{"class":483},[152,170503,170504,170506,170508,170511],{"class":281,"line":303},[152,170505,170221],{"class":6858},[152,170507,170224],{"class":483},[152,170509,170510],{"class":289},"\"中文内容\"",[152,170512,1825],{"class":483},[1760,170514,170516],{"id":170515},"_89-pathlib","8.9 pathlib",[19,170518,170519,170522],{},[277,170520,170521],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[270,170524,170526],{"className":31715,"code":170525,"language":31717,"meta":275,"style":275},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[277,170527,170528,170538,170542,170560],{"__ignoreMap":275},[152,170529,170530,170532,170534,170536],{"class":281,"line":282},[152,170531,32074],{"class":476},[152,170533,109648],{"class":483},[152,170535,31729],{"class":476},[152,170537,109653],{"class":483},[152,170539,170540],{"class":281,"line":303},[152,170541,307],{"emptyLinePlaceholder":306},[152,170543,170544,170546,170548,170550,170553,170555,170557],{"class":281,"line":310},[152,170545,169648],{"class":483},[152,170547,1864],{"class":476},[152,170549,109882],{"class":483},[152,170551,170552],{"class":289},"\"data\"",[152,170554,15330],{"class":483},[152,170556,2392],{"class":476},[152,170558,170559],{"class":289}," \"students.txt\"\n",[152,170561,170562,170564],{"class":281,"line":324},[152,170563,31752],{"class":293},[152,170565,170566],{"class":483},"(path)\n",[19,170568,170569],{},"创建目录：",[270,170571,170573],{"className":31715,"code":170572,"language":31717,"meta":275,"style":275},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[277,170574,170575,170585,170589,170602],{"__ignoreMap":275},[152,170576,170577,170579,170581,170583],{"class":281,"line":282},[152,170578,32074],{"class":476},[152,170580,109648],{"class":483},[152,170582,31729],{"class":476},[152,170584,109653],{"class":483},[152,170586,170587],{"class":281,"line":303},[152,170588,307],{"emptyLinePlaceholder":306},[152,170590,170591,170594,170596,170598,170600],{"class":281,"line":310},[152,170592,170593],{"class":483},"data_dir ",[152,170595,1864],{"class":476},[152,170597,109882],{"class":483},[152,170599,170552],{"class":289},[152,170601,1825],{"class":483},[152,170603,170604,170607,170610,170612,170614],{"class":281,"line":324},[152,170605,170606],{"class":483},"data_dir.mkdir(",[152,170608,170609],{"class":6858},"exist_ok",[152,170611,1864],{"class":476},[152,170613,32813],{"class":293},[152,170615,1825],{"class":483},[19,170617,170618],{},"判断文件是否存在：",[270,170620,170622],{"className":31715,"code":170621,"language":31717,"meta":275,"style":275},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[277,170623,170624,170637,170641,170648],{"__ignoreMap":275},[152,170625,170626,170628,170630,170632,170635],{"class":281,"line":282},[152,170627,169648],{"class":483},[152,170629,1864],{"class":476},[152,170631,109882],{"class":483},[152,170633,170634],{"class":289},"\"data\u002Fstudents.txt\"",[152,170636,1825],{"class":483},[152,170638,170639],{"class":281,"line":303},[152,170640,307],{"emptyLinePlaceholder":306},[152,170642,170643,170645],{"class":281,"line":310},[152,170644,3202],{"class":476},[152,170646,170647],{"class":483}," path.exists():\n",[152,170649,170650,170652,170654,170657],{"class":281,"line":324},[152,170651,32636],{"class":293},[152,170653,1819],{"class":483},[152,170655,170656],{"class":289},"\"文件存在\"",[152,170658,1825],{"class":483},[19,170660,170661],{},"读写文本：",[270,170663,170665],{"className":31715,"code":170664,"language":31717,"meta":275,"style":275},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[277,170666,170667,170679,170683,170700,170717],{"__ignoreMap":275},[152,170668,170669,170671,170673,170675,170677],{"class":281,"line":282},[152,170670,169648],{"class":483},[152,170672,1864],{"class":476},[152,170674,109882],{"class":483},[152,170676,148133],{"class":289},[152,170678,1825],{"class":483},[152,170680,170681],{"class":281,"line":303},[152,170682,307],{"emptyLinePlaceholder":306},[152,170684,170685,170688,170690,170692,170694,170696,170698],{"class":281,"line":310},[152,170686,170687],{"class":483},"path.write_text(",[152,170689,147213],{"class":289},[152,170691,14051],{"class":483},[152,170693,148143],{"class":6858},[152,170695,1864],{"class":476},[152,170697,148148],{"class":289},[152,170699,1825],{"class":483},[152,170701,170702,170704,170706,170709,170711,170713,170715],{"class":281,"line":324},[152,170703,169831],{"class":483},[152,170705,1864],{"class":476},[152,170707,170708],{"class":483}," path.read_text(",[152,170710,148143],{"class":6858},[152,170712,1864],{"class":476},[152,170714,148148],{"class":289},[152,170716,1825],{"class":483},[152,170718,170719,170721],{"class":281,"line":329},[152,170720,31752],{"class":293},[152,170722,169845],{"class":483},[1760,170724,170726],{"id":170725},"_810-json文件","8.10 JSON文件",[19,170728,170729],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[270,170731,170733],{"className":31715,"code":170732,"language":31717,"meta":275,"style":275},"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",[277,170734,170735,170741,170745,170753,170763,170773,170781,170785,170789,170814],{"__ignoreMap":275},[152,170736,170737,170739],{"class":281,"line":282},[152,170738,31729],{"class":476},[152,170740,148428],{"class":483},[152,170742,170743],{"class":281,"line":303},[152,170744,307],{"emptyLinePlaceholder":306},[152,170746,170747,170749,170751],{"class":281,"line":310},[152,170748,150818],{"class":483},[152,170750,1864],{"class":476},[152,170752,17187],{"class":483},[152,170754,170755,170757,170759,170761],{"class":281,"line":324},[152,170756,148357],{"class":289},[152,170758,52774],{"class":483},[152,170760,151225],{"class":289},[152,170762,32803],{"class":483},[152,170764,170765,170767,170769,170771],{"class":281,"line":329},[152,170766,165874],{"class":289},[152,170768,52774],{"class":483},[152,170770,2458],{"class":293},[152,170772,32803],{"class":483},[152,170774,170775,170777,170779],{"class":281,"line":343},[152,170776,165885],{"class":289},[152,170778,52774],{"class":483},[152,170780,165890],{"class":293},[152,170782,170783],{"class":281,"line":348},[152,170784,3236],{"class":483},[152,170786,170787],{"class":281,"line":362},[152,170788,307],{"emptyLinePlaceholder":306},[152,170790,170791,170793,170795,170798,170800,170802,170804,170806,170808,170810,170812],{"class":281,"line":367},[152,170792,157781],{"class":483},[152,170794,1864],{"class":476},[152,170796,170797],{"class":483}," json.dumps(student, ",[152,170799,148474],{"class":6858},[152,170801,1864],{"class":476},[152,170803,35324],{"class":293},[152,170805,14051],{"class":483},[152,170807,153349],{"class":6858},[152,170809,1864],{"class":476},[152,170811,1894],{"class":293},[152,170813,1825],{"class":483},[152,170815,170816,170818],{"class":281,"line":381},[152,170817,31752],{"class":293},[152,170819,165408],{"class":483},[19,170821,170822],{},"写入 JSON 文件：",[270,170824,170826],{"className":31715,"code":170825,"language":31717,"meta":275,"style":275},"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",[277,170827,170828,170834,170838,170846,170874,170902,170906,170910,170940],{"__ignoreMap":275},[152,170829,170830,170832],{"class":281,"line":282},[152,170831,31729],{"class":476},[152,170833,148428],{"class":483},[152,170835,170836],{"class":281,"line":303},[152,170837,307],{"emptyLinePlaceholder":306},[152,170839,170840,170842,170844],{"class":281,"line":310},[152,170841,161053],{"class":483},[152,170843,1864],{"class":476},[152,170845,56784],{"class":483},[152,170847,170848,170850,170852,170854,170856,170858,170860,170862,170864,170866,170868,170870,170872],{"class":281,"line":324},[152,170849,149722],{"class":483},[152,170851,64016],{"class":289},[152,170853,52774],{"class":483},[152,170855,151225],{"class":289},[152,170857,14051],{"class":483},[152,170859,70461],{"class":289},[152,170861,52774],{"class":483},[152,170863,2458],{"class":293},[152,170865,14051],{"class":483},[152,170867,152809],{"class":289},[152,170869,52774],{"class":483},[152,170871,2794],{"class":293},[152,170873,6572],{"class":483},[152,170875,170876,170878,170880,170882,170884,170886,170888,170890,170892,170894,170896,170898,170900],{"class":281,"line":329},[152,170877,149722],{"class":483},[152,170879,64016],{"class":289},[152,170881,52774],{"class":483},[152,170883,152273],{"class":289},[152,170885,14051],{"class":483},[152,170887,70461],{"class":289},[152,170889,52774],{"class":483},[152,170891,2433],{"class":293},[152,170893,14051],{"class":483},[152,170895,152809],{"class":289},[152,170897,52774],{"class":483},[152,170899,2619],{"class":293},[152,170901,6572],{"class":483},[152,170903,170904],{"class":281,"line":343},[152,170905,34583],{"class":483},[152,170907,170908],{"class":281,"line":348},[152,170909,307],{"emptyLinePlaceholder":306},[152,170911,170912,170914,170916,170918,170920,170922,170924,170926,170928,170930,170932,170934,170936,170938],{"class":281,"line":362},[152,170913,109170],{"class":476},[152,170915,148128],{"class":293},[152,170917,1819],{"class":483},[152,170919,153168],{"class":289},[152,170921,14051],{"class":483},[152,170923,153313],{"class":289},[152,170925,14051],{"class":483},[152,170927,148143],{"class":6858},[152,170929,1864],{"class":476},[152,170931,148148],{"class":289},[152,170933,15330],{"class":483},[152,170935,32720],{"class":476},[152,170937,149490],{"class":6858},[152,170939,5382],{"class":483},[152,170941,170942,170945,170947,170949,170951,170953,170955,170957,170959,170961,170963],{"class":281,"line":367},[152,170943,170944],{"class":483},"    json.dump(students, ",[152,170946,46691],{"class":6858},[152,170948,14051],{"class":483},[152,170950,148474],{"class":6858},[152,170952,1864],{"class":476},[152,170954,35324],{"class":293},[152,170956,14051],{"class":483},[152,170958,153349],{"class":6858},[152,170960,1864],{"class":476},[152,170962,1894],{"class":293},[152,170964,1825],{"class":483},[19,170966,170967],{},"读取 JSON 文件：",[270,170969,170971],{"className":31715,"code":170970,"language":31717,"meta":275,"style":275},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[277,170972,170973,170979,170983,171013,171025,171029],{"__ignoreMap":275},[152,170974,170975,170977],{"class":281,"line":282},[152,170976,31729],{"class":476},[152,170978,148428],{"class":483},[152,170980,170981],{"class":281,"line":303},[152,170982,307],{"emptyLinePlaceholder":306},[152,170984,170985,170987,170989,170991,170993,170995,170997,170999,171001,171003,171005,171007,171009,171011],{"class":281,"line":310},[152,170986,109170],{"class":476},[152,170988,148128],{"class":293},[152,170990,1819],{"class":483},[152,170992,153168],{"class":289},[152,170994,14051],{"class":483},[152,170996,148138],{"class":289},[152,170998,14051],{"class":483},[152,171000,148143],{"class":6858},[152,171002,1864],{"class":476},[152,171004,148148],{"class":289},[152,171006,15330],{"class":483},[152,171008,32720],{"class":476},[152,171010,149490],{"class":6858},[152,171012,5382],{"class":483},[152,171014,171015,171017,171019,171021,171023],{"class":281,"line":324},[152,171016,154374],{"class":483},[152,171018,1864],{"class":476},[152,171020,149501],{"class":483},[152,171022,46691],{"class":6858},[152,171024,1825],{"class":483},[152,171026,171027],{"class":281,"line":329},[152,171028,307],{"emptyLinePlaceholder":306},[152,171030,171031,171033],{"class":281,"line":343},[152,171032,31752],{"class":293},[152,171034,166332],{"class":483},[1760,171036,171038],{"id":171037},"_811-csv文件","8.11 CSV文件",[19,171040,171041],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171043,171044],{},"写入 CSV：",[270,171046,171048],{"className":31715,"code":171047,"language":31717,"meta":275,"style":275},"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",[277,171049,171050,171057,171061,171069,171087,171103,171119,171123,171127,171167,171181],{"__ignoreMap":275},[152,171051,171052,171054],{"class":281,"line":282},[152,171053,31729],{"class":476},[152,171055,171056],{"class":483}," csv\n",[152,171058,171059],{"class":281,"line":303},[152,171060,307],{"emptyLinePlaceholder":306},[152,171062,171063,171065,171067],{"class":281,"line":310},[152,171064,161053],{"class":483},[152,171066,1864],{"class":476},[152,171068,56784],{"class":483},[152,171070,171071,171074,171076,171078,171080,171082,171085],{"class":281,"line":324},[152,171072,171073],{"class":483},"    [",[152,171075,74436],{"class":289},[152,171077,14051],{"class":483},[152,171079,74469],{"class":289},[152,171081,14051],{"class":483},[152,171083,171084],{"class":289},"\"成绩\"",[152,171086,89173],{"class":483},[152,171088,171089,171091,171093,171095,171097,171099,171101],{"class":281,"line":329},[152,171090,171073],{"class":483},[152,171092,151225],{"class":289},[152,171094,14051],{"class":483},[152,171096,2458],{"class":293},[152,171098,14051],{"class":483},[152,171100,2794],{"class":293},[152,171102,89173],{"class":483},[152,171104,171105,171107,171109,171111,171113,171115,171117],{"class":281,"line":343},[152,171106,171073],{"class":483},[152,171108,152273],{"class":289},[152,171110,14051],{"class":483},[152,171112,2433],{"class":293},[152,171114,14051],{"class":483},[152,171116,2619],{"class":293},[152,171118,89173],{"class":483},[152,171120,171121],{"class":281,"line":348},[152,171122,34583],{"class":483},[152,171124,171125],{"class":281,"line":362},[152,171126,307],{"emptyLinePlaceholder":306},[152,171128,171129,171131,171133,171135,171138,171140,171142,171144,171146,171148,171150,171152,171155,171157,171159,171161,171163,171165],{"class":281,"line":367},[152,171130,109170],{"class":476},[152,171132,148128],{"class":293},[152,171134,1819],{"class":483},[152,171136,171137],{"class":289},"\"students.csv\"",[152,171139,14051],{"class":483},[152,171141,153313],{"class":289},[152,171143,14051],{"class":483},[152,171145,148143],{"class":6858},[152,171147,1864],{"class":476},[152,171149,148148],{"class":289},[152,171151,14051],{"class":483},[152,171153,171154],{"class":6858},"newline",[152,171156,1864],{"class":476},[152,171158,9294],{"class":289},[152,171160,15330],{"class":483},[152,171162,32720],{"class":476},[152,171164,149490],{"class":6858},[152,171166,5382],{"class":483},[152,171168,171169,171172,171174,171177,171179],{"class":281,"line":381},[152,171170,171171],{"class":483},"    writer ",[152,171173,1864],{"class":476},[152,171175,171176],{"class":483}," csv.writer(",[152,171178,46691],{"class":6858},[152,171180,1825],{"class":483},[152,171182,171183],{"class":281,"line":386},[152,171184,171185],{"class":483},"    writer.writerows(students)\n",[19,171187,171188],{},"读取 CSV：",[270,171190,171192],{"className":31715,"code":171191,"language":31717,"meta":275,"style":275},"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",[277,171193,171194,171200,171204,171234,171248,171260],{"__ignoreMap":275},[152,171195,171196,171198],{"class":281,"line":282},[152,171197,31729],{"class":476},[152,171199,171056],{"class":483},[152,171201,171202],{"class":281,"line":303},[152,171203,307],{"emptyLinePlaceholder":306},[152,171205,171206,171208,171210,171212,171214,171216,171218,171220,171222,171224,171226,171228,171230,171232],{"class":281,"line":310},[152,171207,109170],{"class":476},[152,171209,148128],{"class":293},[152,171211,1819],{"class":483},[152,171213,171137],{"class":289},[152,171215,14051],{"class":483},[152,171217,148138],{"class":289},[152,171219,14051],{"class":483},[152,171221,148143],{"class":6858},[152,171223,1864],{"class":476},[152,171225,148148],{"class":289},[152,171227,15330],{"class":483},[152,171229,32720],{"class":476},[152,171231,149490],{"class":6858},[152,171233,5382],{"class":483},[152,171235,171236,171239,171241,171244,171246],{"class":281,"line":324},[152,171237,171238],{"class":483},"    reader ",[152,171240,1864],{"class":476},[152,171242,171243],{"class":483}," csv.reader(",[152,171245,46691],{"class":6858},[152,171247,1825],{"class":483},[152,171249,171250,171252,171255,171257],{"class":281,"line":329},[152,171251,4844],{"class":476},[152,171253,171254],{"class":483}," row ",[152,171256,27653],{"class":476},[152,171258,171259],{"class":483}," reader:\n",[152,171261,171262,171264],{"class":281,"line":343},[152,171263,33788],{"class":293},[152,171265,171266],{"class":483},"(row)\n",[19,171268,171269],{},"使用字典写入：",[270,171271,171273],{"className":31715,"code":171272,"language":31717,"meta":275,"style":275},"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",[277,171274,171275,171281,171285,171293,171321,171349,171353,171357,171395,171416,171437,171442],{"__ignoreMap":275},[152,171276,171277,171279],{"class":281,"line":282},[152,171278,31729],{"class":476},[152,171280,171056],{"class":483},[152,171282,171283],{"class":281,"line":303},[152,171284,307],{"emptyLinePlaceholder":306},[152,171286,171287,171289,171291],{"class":281,"line":310},[152,171288,161053],{"class":483},[152,171290,1864],{"class":476},[152,171292,56784],{"class":483},[152,171294,171295,171297,171299,171301,171303,171305,171307,171309,171311,171313,171315,171317,171319],{"class":281,"line":324},[152,171296,149722],{"class":483},[152,171298,64016],{"class":289},[152,171300,52774],{"class":483},[152,171302,151225],{"class":289},[152,171304,14051],{"class":483},[152,171306,70461],{"class":289},[152,171308,52774],{"class":483},[152,171310,2458],{"class":293},[152,171312,14051],{"class":483},[152,171314,152809],{"class":289},[152,171316,52774],{"class":483},[152,171318,2794],{"class":293},[152,171320,6572],{"class":483},[152,171322,171323,171325,171327,171329,171331,171333,171335,171337,171339,171341,171343,171345,171347],{"class":281,"line":329},[152,171324,149722],{"class":483},[152,171326,64016],{"class":289},[152,171328,52774],{"class":483},[152,171330,152273],{"class":289},[152,171332,14051],{"class":483},[152,171334,70461],{"class":289},[152,171336,52774],{"class":483},[152,171338,2433],{"class":293},[152,171340,14051],{"class":483},[152,171342,152809],{"class":289},[152,171344,52774],{"class":483},[152,171346,2619],{"class":293},[152,171348,6572],{"class":483},[152,171350,171351],{"class":281,"line":343},[152,171352,34583],{"class":483},[152,171354,171355],{"class":281,"line":348},[152,171356,307],{"emptyLinePlaceholder":306},[152,171358,171359,171361,171363,171365,171367,171369,171371,171373,171375,171377,171379,171381,171383,171385,171387,171389,171391,171393],{"class":281,"line":362},[152,171360,109170],{"class":476},[152,171362,148128],{"class":293},[152,171364,1819],{"class":483},[152,171366,171137],{"class":289},[152,171368,14051],{"class":483},[152,171370,153313],{"class":289},[152,171372,14051],{"class":483},[152,171374,148143],{"class":6858},[152,171376,1864],{"class":476},[152,171378,148148],{"class":289},[152,171380,14051],{"class":483},[152,171382,171154],{"class":6858},[152,171384,1864],{"class":476},[152,171386,9294],{"class":289},[152,171388,15330],{"class":483},[152,171390,32720],{"class":476},[152,171392,149490],{"class":6858},[152,171394,5382],{"class":483},[152,171396,171397,171400,171402,171404,171406,171408,171410,171412,171414],{"class":281,"line":367},[152,171398,171399],{"class":483},"    fieldnames ",[152,171401,1864],{"class":476},[152,171403,53563],{"class":483},[152,171405,64016],{"class":289},[152,171407,14051],{"class":483},[152,171409,70461],{"class":289},[152,171411,14051],{"class":483},[152,171413,152809],{"class":289},[152,171415,34583],{"class":483},[152,171417,171418,171420,171422,171425,171427,171429,171432,171434],{"class":281,"line":381},[152,171419,171171],{"class":483},[152,171421,1864],{"class":476},[152,171423,171424],{"class":483}," csv.DictWriter(",[152,171426,46691],{"class":6858},[152,171428,14051],{"class":483},[152,171430,171431],{"class":6858},"fieldnames",[152,171433,1864],{"class":476},[152,171435,171436],{"class":483},"fieldnames)\n",[152,171438,171439],{"class":281,"line":386},[152,171440,171441],{"class":483},"    writer.writeheader()\n",[152,171443,171444],{"class":281,"line":932},[152,171445,171185],{"class":483},[1760,171447,171449],{"id":171448},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171451,124629],{},[416,171453,171454,171457,171460],{},[419,171455,171456],{},"读取文本文件。",[419,171458,171459],{},"统计每个单词出现次数。",[419,171461,171462],{},"输出出现次数最多的前 10 个单词。",[19,171464,11651],{},[270,171466,171468],{"className":31715,"code":171467,"language":31717,"meta":275,"style":275},"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",[277,171469,171470,171480,171484,171497,171513,171517,171527,171536,171540,171552,171572,171581,171585,171603,171607,171637,171641,171657],{"__ignoreMap":275},[152,171471,171472,171474,171476,171478],{"class":281,"line":282},[152,171473,32074],{"class":476},[152,171475,109648],{"class":483},[152,171477,31729],{"class":476},[152,171479,109653],{"class":483},[152,171481,171482],{"class":281,"line":303},[152,171483,307],{"emptyLinePlaceholder":306},[152,171485,171486,171488,171490,171492,171495],{"class":281,"line":310},[152,171487,169648],{"class":483},[152,171489,1864],{"class":476},[152,171491,109882],{"class":483},[152,171493,171494],{"class":289},"\"article.txt\"",[152,171496,1825],{"class":483},[152,171498,171499,171501,171503,171505,171507,171509,171511],{"class":281,"line":324},[152,171500,169831],{"class":483},[152,171502,1864],{"class":476},[152,171504,170708],{"class":483},[152,171506,148143],{"class":6858},[152,171508,1864],{"class":476},[152,171510,148148],{"class":289},[152,171512,1825],{"class":483},[152,171514,171515],{"class":281,"line":329},[152,171516,307],{"emptyLinePlaceholder":306},[152,171518,171519,171522,171524],{"class":281,"line":343},[152,171520,171521],{"class":483},"words ",[152,171523,1864],{"class":476},[152,171525,171526],{"class":483}," content.lower().split()\n",[152,171528,171529,171532,171534],{"class":281,"line":348},[152,171530,171531],{"class":483},"counter ",[152,171533,1864],{"class":476},[152,171535,89205],{"class":483},[152,171537,171538],{"class":281,"line":362},[152,171539,307],{"emptyLinePlaceholder":306},[152,171541,171542,171544,171547,171549],{"class":281,"line":367},[152,171543,4668],{"class":476},[152,171545,171546],{"class":483}," word ",[152,171548,27653],{"class":476},[152,171550,171551],{"class":483}," words:\n",[152,171553,171554,171557,171559,171562,171565,171567,171570],{"class":281,"line":381},[152,171555,171556],{"class":483},"    word ",[152,171558,1864],{"class":476},[152,171560,171561],{"class":483}," word.strip(",[152,171563,171564],{"class":289},"\".,!?;:",[152,171566,157832],{"class":293},[152,171568,171569],{"class":289},"'()[]\"",[152,171571,1825],{"class":483},[152,171573,171574,171576,171578],{"class":281,"line":386},[152,171575,4744],{"class":476},[152,171577,40267],{"class":476},[152,171579,171580],{"class":483}," word:\n",[152,171582,171583],{"class":281,"line":932},[152,171584,149849],{"class":476},[152,171586,171587,171590,171592,171595,171597,171599,171601],{"class":281,"line":942},[152,171588,171589],{"class":483},"    counter[word] ",[152,171591,1864],{"class":476},[152,171593,171594],{"class":483}," counter.get(word, ",[152,171596,2000],{"class":293},[152,171598,15330],{"class":483},[152,171600,2289],{"class":476},[152,171602,57036],{"class":293},[152,171604,171605],{"class":281,"line":949},[152,171606,307],{"emptyLinePlaceholder":306},[152,171608,171609,171612,171614,171616,171619,171621,171623,171625,171627,171629,171631,171633,171635],{"class":281,"line":954},[152,171610,171611],{"class":483},"items ",[152,171613,1864],{"class":476},[152,171615,164941],{"class":293},[152,171617,171618],{"class":483},"(counter.items(), ",[152,171620,155283],{"class":6858},[152,171622,155286],{"class":476},[152,171624,155289],{"class":483},[152,171626,2026],{"class":293},[152,171628,113539],{"class":483},[152,171630,164865],{"class":6858},[152,171632,1864],{"class":476},[152,171634,32813],{"class":293},[152,171636,1825],{"class":483},[152,171638,171639],{"class":281,"line":959},[152,171640,307],{"emptyLinePlaceholder":306},[152,171642,171643,171645,171648,171650,171653,171655],{"class":281,"line":970},[152,171644,4668],{"class":476},[152,171646,171647],{"class":483}," word, count ",[152,171649,27653],{"class":476},[152,171651,171652],{"class":483}," items[:",[152,171654,2254],{"class":293},[152,171656,167092],{"class":483},[152,171658,171659,171661],{"class":281,"line":979},[152,171660,32636],{"class":293},[152,171662,171663],{"class":483},"(word, count)\n",[1760,171665,171667],{"id":171666},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[270,171669,171671],{"className":31715,"code":171670,"language":31717,"meta":275,"style":275},"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",[277,171672,171673,171679,171689,171693,171705,171709,171713,171721,171731,171737,171741,171771,171781,171785,171789,171797,171827,171851,171855,171859,171867,171896,171901],{"__ignoreMap":275},[152,171674,171675,171677],{"class":281,"line":282},[152,171676,31729],{"class":476},[152,171678,148428],{"class":483},[152,171680,171681,171683,171685,171687],{"class":281,"line":303},[152,171682,32074],{"class":476},[152,171684,109648],{"class":483},[152,171686,31729],{"class":476},[152,171688,109653],{"class":483},[152,171690,171691],{"class":281,"line":310},[152,171692,307],{"emptyLinePlaceholder":306},[152,171694,171695,171697,171699,171701,171703],{"class":281,"line":324},[152,171696,153161],{"class":293},[152,171698,15180],{"class":476},[152,171700,109882],{"class":483},[152,171702,153168],{"class":289},[152,171704,1825],{"class":483},[152,171706,171707],{"class":281,"line":329},[152,171708,307],{"emptyLinePlaceholder":306},[152,171710,171711],{"class":281,"line":343},[152,171712,307],{"emptyLinePlaceholder":306},[152,171714,171715,171717,171719],{"class":281,"line":348},[152,171716,33284],{"class":476},[152,171718,153185],{"class":285},[152,171720,33290],{"class":483},[152,171722,171723,171725,171727,171729],{"class":281,"line":362},[152,171724,4744],{"class":476},[152,171726,40267],{"class":476},[152,171728,153196],{"class":293},[152,171730,153199],{"class":483},[152,171732,171733,171735],{"class":281,"line":367},[152,171734,16367],{"class":476},[152,171736,53175],{"class":483},[152,171738,171739],{"class":281,"line":381},[152,171740,307],{"emptyLinePlaceholder":306},[152,171742,171743,171745,171747,171749,171751,171753,171755,171757,171759,171761,171763,171765,171767,171769],{"class":281,"line":386},[152,171744,35515],{"class":476},[152,171746,148128],{"class":293},[152,171748,1819],{"class":483},[152,171750,153161],{"class":293},[152,171752,14051],{"class":483},[152,171754,148138],{"class":289},[152,171756,14051],{"class":483},[152,171758,148143],{"class":6858},[152,171760,1864],{"class":476},[152,171762,148148],{"class":289},[152,171764,15330],{"class":483},[152,171766,32720],{"class":476},[152,171768,149490],{"class":6858},[152,171770,5382],{"class":483},[152,171772,171773,171775,171777,171779],{"class":281,"line":932},[152,171774,16367],{"class":476},[152,171776,149501],{"class":483},[152,171778,46691],{"class":6858},[152,171780,1825],{"class":483},[152,171782,171783],{"class":281,"line":942},[152,171784,307],{"emptyLinePlaceholder":306},[152,171786,171787],{"class":281,"line":949},[152,171788,307],{"emptyLinePlaceholder":306},[152,171790,171791,171793,171795],{"class":281,"line":954},[152,171792,33284],{"class":476},[152,171794,153295],{"class":285},[152,171796,153298],{"class":483},[152,171798,171799,171801,171803,171805,171807,171809,171811,171813,171815,171817,171819,171821,171823,171825],{"class":281,"line":959},[152,171800,35515],{"class":476},[152,171802,148128],{"class":293},[152,171804,1819],{"class":483},[152,171806,153161],{"class":293},[152,171808,14051],{"class":483},[152,171810,153313],{"class":289},[152,171812,14051],{"class":483},[152,171814,148143],{"class":6858},[152,171816,1864],{"class":476},[152,171818,148148],{"class":289},[152,171820,15330],{"class":483},[152,171822,32720],{"class":476},[152,171824,149490],{"class":6858},[152,171826,5382],{"class":483},[152,171828,171829,171831,171833,171835,171837,171839,171841,171843,171845,171847,171849],{"class":281,"line":970},[152,171830,153334],{"class":483},[152,171832,46691],{"class":6858},[152,171834,14051],{"class":483},[152,171836,148474],{"class":6858},[152,171838,1864],{"class":476},[152,171840,35324],{"class":293},[152,171842,14051],{"class":483},[152,171844,153349],{"class":6858},[152,171846,1864],{"class":476},[152,171848,1894],{"class":293},[152,171850,1825],{"class":483},[152,171852,171853],{"class":281,"line":979},[152,171854,307],{"emptyLinePlaceholder":306},[152,171856,171857],{"class":281,"line":989},[152,171858,307],{"emptyLinePlaceholder":306},[152,171860,171861,171863,171865],{"class":281,"line":996},[152,171862,161053],{"class":483},[152,171864,1864],{"class":476},[152,171866,154379],{"class":483},[152,171868,171869,171872,171874,171876,171878,171880,171882,171884,171886,171888,171890,171892,171894],{"class":281,"line":1001},[152,171870,171871],{"class":483},"students.append({",[152,171873,64016],{"class":289},[152,171875,52774],{"class":483},[152,171877,151225],{"class":289},[152,171879,14051],{"class":483},[152,171881,70461],{"class":289},[152,171883,52774],{"class":483},[152,171885,2458],{"class":293},[152,171887,14051],{"class":483},[152,171889,152809],{"class":289},[152,171891,52774],{"class":483},[152,171893,2794],{"class":293},[152,171895,166489],{"class":483},[152,171897,171898],{"class":281,"line":1006},[152,171899,171900],{"class":483},"save_students(students)\n",[152,171902,171903,171905,171907,171910],{"class":281,"line":1018},[152,171904,31752],{"class":293},[152,171906,1819],{"class":483},[152,171908,171909],{"class":289},"\"保存成功\"",[152,171911,1825],{"class":483},[1760,171913,171915],{"id":171914},"_814-易错点","8.14 易错点",[416,171917,171918,171922,171928,171933,171940,171947],{},[419,171919,171920,170181],{},[277,171921,2603],{},[419,171923,171924,171925,29984],{},"读写中文要指定 ",[277,171926,171927],{},"encoding=\"utf-8\"",[419,171929,171930,171931,29984],{},"打开文件后要关闭，推荐使用 ",[277,171932,109170],{},[419,171934,171935,171936,171939],{},"读取大文件不要直接 ",[277,171937,171938],{},"read()"," 全部内容。",[419,171941,171942,171943,171946],{},"Windows 写 CSV 时建议加 ",[277,171944,171945],{},"newline=\"\"","，避免空行。",[419,171948,171949],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[1760,171951,171953],{"id":171952},"_815-本章练习","8.15 本章练习",[416,171955,171956,171963,171968,171971,171974],{},[419,171957,171958,171959,171962],{},"写入一个 ",[277,171960,171961],{},"students.txt","，每行保存一个学生姓名。",[419,171964,105692,171965,171967],{},[277,171966,171961],{}," 并输出所有学生。",[419,171969,171970],{},"把学生列表保存为 JSON 文件。",[419,171972,171973],{},"从 JSON 文件读取学生数据，计算平均分。",[419,171975,171976,171977,171980,171981,171984],{},"写一个日志函数 ",[277,171978,171979],{},"write_log(message)","，每次调用向 ",[277,171982,171983],{},"app.log"," 追加一行。",[1736,171986,171987],{},"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":275,"searchDepth":303,"depth":303,"links":171989},[171990,171991,171995,171996,172002,172003,172004,172005,172006,172007,172008,172009,172010,172011,172012],{"id":169501,"depth":303,"text":169502},{"id":169542,"depth":303,"text":169543,"children":171992},[171993,171994],{"id":169546,"depth":310,"text":169547},{"id":169580,"depth":310,"text":169581},{"id":169694,"depth":303,"text":169695},{"id":169787,"depth":303,"text":169788,"children":171997},[171998,171999,172000,172001],{"id":169791,"depth":310,"text":169792},{"id":169878,"depth":310,"text":169879},{"id":169948,"depth":310,"text":169949},{"id":170042,"depth":310,"text":170043},{"id":170112,"depth":303,"text":170113},{"id":170175,"depth":303,"text":170176},{"id":170336,"depth":303,"text":170337},{"id":170399,"depth":303,"text":170400},{"id":170515,"depth":303,"text":170516},{"id":170725,"depth":303,"text":170726},{"id":171037,"depth":303,"text":171038},{"id":171448,"depth":303,"text":171449},{"id":171666,"depth":303,"text":171667},{"id":171914,"depth":303,"text":171915},{"id":171952,"depth":303,"text":171953},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169493,"description":24991},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172019,"title":172020,"body":172021,"description":24991,"extension":1744,"meta":174207,"navigation":306,"path":174208,"seo":174209,"stem":174210,"__hash__":174211},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172022,"toc":174174},[172023,172026,172030,172033,172036,172128,172130,172149,172154,172158,172161,172164,172193,172200,172203,172207,172210,172239,172241,172293,172299,172352,172356,172454,172457,172524,172528,172585,172587,172593,172597,172602,172608,172699,172704,172708,172711,172789,172792,172830,172834,172952,172955,172959,172962,173007,173010,173014,173019,173025,173075,173078,173109,173113,173117,173147,173151,173186,173190,173225,173265,173269,173285,173288,173292,173296,173375,173379,173420,173424,173479,173483,173517,173521,173551,173560,173567,173573,173630,173633,173641,173644,173648,173655,173658,173664,173667,173684,173689,173693,173699,173712,173715,173752,173755,173766,173769,173783,173786,173800,173804,173811,173844,173847,173849,173855,173858,173862,173864,173870,173875,174048,174052,174115,174119,174143,174147,174171],[10,172024,172020],{"id":172025},"_9-异常模块与包",[1760,172027,172029],{"id":172028},"_91-什么是异常","9.1 什么是异常",[19,172031,172032],{},"异常是程序运行过程中出现的错误。",[19,172034,172035],{},"常见异常：",[23,172037,172038,172047],{},[26,172039,172040],{},[29,172041,172042,172045],{},[32,172043,172044],{},"异常",[32,172046,38],{},[43,172048,172049,172059,172069,172078,172088,172098,172108,172118],{},[29,172050,172051,172056],{},[48,172052,172053],{},[277,172054,172055],{},"NameError",[48,172057,172058],{},"使用了未定义变量",[29,172060,172061,172066],{},[48,172062,172063],{},[277,172064,172065],{},"TypeError",[48,172067,172068],{},"类型不匹配",[29,172070,172071,172075],{},[48,172072,172073],{},[277,172074,156171],{},[48,172076,172077],{},"值不合法",[29,172079,172080,172085],{},[48,172081,172082],{},[277,172083,172084],{},"IndexError",[48,172086,172087],{},"列表索引越界",[29,172089,172090,172095],{},[48,172091,172092],{},[277,172093,172094],{},"KeyError",[48,172096,172097],{},"字典 key 不存在",[29,172099,172100,172105],{},[48,172101,172102],{},[277,172103,172104],{},"FileNotFoundError",[48,172106,172107],{},"文件不存在",[29,172109,172110,172115],{},[48,172111,172112],{},[277,172113,172114],{},"ZeroDivisionError",[48,172116,172117],{},"除数为 0",[29,172119,172120,172125],{},[48,172121,172122],{},[277,172123,172124],{},"ImportError",[48,172126,172127],{},"导入失败",[19,172129,16750],{},[270,172131,172133],{"className":31715,"code":172132,"language":31717,"meta":275,"style":275},"num = int(\"abc\")\n",[277,172134,172135],{"__ignoreMap":275},[152,172136,172137,172139,172141,172143,172145,172147],{"class":281,"line":282},[152,172138,157124],{"class":483},[152,172140,1864],{"class":476},[152,172142,4033],{"class":293},[152,172144,1819],{"class":483},[152,172146,157217],{"class":289},[152,172148,1825],{"class":483},[19,172150,172151,172152,29984],{},"会触发 ",[277,172153,156171],{},[1760,172155,172157],{"id":172156},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172159,172160],{},"如果不处理异常，程序会直接终止。",[19,172162,172163],{},"例如用户输入年龄：",[270,172165,172167],{"className":31715,"code":172166,"language":31717,"meta":275,"style":275},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[277,172168,172169,172187],{"__ignoreMap":275},[152,172170,172171,172173,172175,172177,172179,172181,172183,172185],{"class":281,"line":282},[152,172172,147883],{"class":483},[152,172174,1864],{"class":476},[152,172176,4033],{"class":293},[152,172178,1819],{"class":483},[152,172180,55158],{"class":293},[152,172182,1819],{"class":483},[152,172184,153731],{"class":289},[152,172186,31834],{"class":483},[152,172188,172189,172191],{"class":281,"line":303},[152,172190,31752],{"class":293},[152,172192,157098],{"class":483},[19,172194,172195,172196,172199],{},"用户输入 ",[277,172197,172198],{},"abc","，程序就会报错退出。",[19,172201,172202],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[1760,172204,172206],{"id":172205},"_93-try-except","9.3 try except",[19,172208,172209],{},"基础语法：",[270,172211,172213],{"className":31715,"code":172212,"language":31717,"meta":275,"style":275},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[277,172214,172215,172222,172227,172234],{"__ignoreMap":275},[152,172216,172217,172220],{"class":281,"line":282},[152,172218,172219],{"class":476},"try",[152,172221,5382],{"class":483},[152,172223,172224],{"class":281,"line":303},[152,172225,172226],{"class":483},"    可能出错的代码\n",[152,172228,172229,172232],{"class":281,"line":310},[152,172230,172231],{"class":476},"except",[152,172233,5382],{"class":483},[152,172235,172236],{"class":281,"line":324},[152,172237,172238],{"class":483},"    出错后的处理代码\n",[19,172240,16750],{},[270,172242,172244],{"className":31715,"code":172243,"language":31717,"meta":275,"style":275},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[277,172245,172246,172252,172270,172276,172282],{"__ignoreMap":275},[152,172247,172248,172250],{"class":281,"line":282},[152,172249,172219],{"class":476},[152,172251,5382],{"class":483},[152,172253,172254,172256,172258,172260,172262,172264,172266,172268],{"class":281,"line":303},[152,172255,153723],{"class":483},[152,172257,1864],{"class":476},[152,172259,4033],{"class":293},[152,172261,1819],{"class":483},[152,172263,55158],{"class":293},[152,172265,1819],{"class":483},[152,172267,153731],{"class":289},[152,172269,31834],{"class":483},[152,172271,172272,172274],{"class":281,"line":310},[152,172273,32636],{"class":293},[152,172275,157098],{"class":483},[152,172277,172278,172280],{"class":281,"line":324},[152,172279,172231],{"class":476},[152,172281,5382],{"class":483},[152,172283,172284,172286,172288,172291],{"class":281,"line":329},[152,172285,32636],{"class":293},[152,172287,1819],{"class":483},[152,172289,172290],{"class":289},"\"年龄必须是数字\"",[152,172292,1825],{"class":483},[19,172294,172295,172296,172298],{},"不建议裸写 ",[277,172297,172231],{},"，最好指定异常类型。",[270,172300,172302],{"className":31715,"code":172301,"language":31717,"meta":275,"style":275},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[277,172303,172304,172310,172328,172334,172342],{"__ignoreMap":275},[152,172305,172306,172308],{"class":281,"line":282},[152,172307,172219],{"class":476},[152,172309,5382],{"class":483},[152,172311,172312,172314,172316,172318,172320,172322,172324,172326],{"class":281,"line":303},[152,172313,153723],{"class":483},[152,172315,1864],{"class":476},[152,172317,4033],{"class":293},[152,172319,1819],{"class":483},[152,172321,55158],{"class":293},[152,172323,1819],{"class":483},[152,172325,153731],{"class":289},[152,172327,31834],{"class":483},[152,172329,172330,172332],{"class":281,"line":310},[152,172331,32636],{"class":293},[152,172333,157098],{"class":483},[152,172335,172336,172338,172340],{"class":281,"line":324},[152,172337,172231],{"class":476},[152,172339,153563],{"class":293},[152,172341,5382],{"class":483},[152,172343,172344,172346,172348,172350],{"class":281,"line":329},[152,172345,32636],{"class":293},[152,172347,1819],{"class":483},[152,172349,172290],{"class":289},[152,172351,1825],{"class":483},[1760,172353,172355],{"id":172354},"_94-捕获多个异常","9.4 捕获多个异常",[270,172357,172359],{"className":31715,"code":172358,"language":31717,"meta":275,"style":275},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[277,172360,172361,172367,172388,172408,172415,172423,172434,172443],{"__ignoreMap":275},[152,172362,172363,172365],{"class":281,"line":282},[152,172364,172219],{"class":476},[152,172366,5382],{"class":483},[152,172368,172369,172372,172374,172376,172378,172380,172382,172384,172386],{"class":281,"line":303},[152,172370,172371],{"class":483},"    nums ",[152,172373,1864],{"class":476},[152,172375,53563],{"class":483},[152,172377,2026],{"class":293},[152,172379,14051],{"class":483},[152,172381,1894],{"class":293},[152,172383,14051],{"class":483},[152,172385,1888],{"class":293},[152,172387,34583],{"class":483},[152,172389,172390,172393,172395,172397,172399,172401,172403,172406],{"class":281,"line":310},[152,172391,172392],{"class":483},"    index ",[152,172394,1864],{"class":476},[152,172396,4033],{"class":293},[152,172398,1819],{"class":483},[152,172400,55158],{"class":293},[152,172402,1819],{"class":483},[152,172404,172405],{"class":289},"\"请输入索引:\"",[152,172407,31834],{"class":483},[152,172409,172410,172412],{"class":281,"line":324},[152,172411,32636],{"class":293},[152,172413,172414],{"class":483},"(nums[index])\n",[152,172416,172417,172419,172421],{"class":281,"line":329},[152,172418,172231],{"class":476},[152,172420,153563],{"class":293},[152,172422,5382],{"class":483},[152,172424,172425,172427,172429,172432],{"class":281,"line":343},[152,172426,32636],{"class":293},[152,172428,1819],{"class":483},[152,172430,172431],{"class":289},"\"索引必须是整数\"",[152,172433,1825],{"class":483},[152,172435,172436,172438,172441],{"class":281,"line":348},[152,172437,172231],{"class":476},[152,172439,172440],{"class":293}," IndexError",[152,172442,5382],{"class":483},[152,172444,172445,172447,172449,172452],{"class":281,"line":362},[152,172446,32636],{"class":293},[152,172448,1819],{"class":483},[152,172450,172451],{"class":289},"\"索引越界\"",[152,172453,1825],{"class":483},[19,172455,172456],{},"多个异常使用相同处理逻辑：",[270,172458,172460],{"className":31715,"code":172459,"language":31717,"meta":275,"style":275},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[277,172461,172462,172468,172486,172499,172513],{"__ignoreMap":275},[152,172463,172464,172466],{"class":281,"line":282},[152,172465,172219],{"class":476},[152,172467,5382],{"class":483},[152,172469,172470,172472,172474,172476,172478,172480,172482,172484],{"class":281,"line":303},[152,172471,46930],{"class":483},[152,172473,1864],{"class":476},[152,172475,4033],{"class":293},[152,172477,1819],{"class":483},[152,172479,55158],{"class":293},[152,172481,1819],{"class":483},[152,172483,157133],{"class":289},[152,172485,31834],{"class":483},[152,172487,172488,172490,172492,172494,172496],{"class":281,"line":310},[152,172489,32636],{"class":293},[152,172491,1819],{"class":483},[152,172493,2254],{"class":293},[152,172495,157383],{"class":476},[152,172497,172498],{"class":483}," num)\n",[152,172500,172501,172503,172505,172507,172509,172511],{"class":281,"line":324},[152,172502,172231],{"class":476},[152,172504,3322],{"class":483},[152,172506,156171],{"class":293},[152,172508,14051],{"class":483},[152,172510,172114],{"class":293},[152,172512,32123],{"class":483},[152,172514,172515,172517,172519,172522],{"class":281,"line":329},[152,172516,32636],{"class":293},[152,172518,1819],{"class":483},[152,172520,172521],{"class":289},"\"输入不合法\"",[152,172523,1825],{"class":483},[1760,172525,172527],{"id":172526},"_95-获取异常信息","9.5 获取异常信息",[270,172529,172531],{"className":31715,"code":172530,"language":31717,"meta":275,"style":275},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[277,172532,172533,172539,172553,172564],{"__ignoreMap":275},[152,172534,172535,172537],{"class":281,"line":282},[152,172536,172219],{"class":476},[152,172538,5382],{"class":483},[152,172540,172541,172543,172545,172547,172549,172551],{"class":281,"line":303},[152,172542,46930],{"class":483},[152,172544,1864],{"class":476},[152,172546,4033],{"class":293},[152,172548,1819],{"class":483},[152,172550,157217],{"class":289},[152,172552,1825],{"class":483},[152,172554,172555,172557,172559,172561],{"class":281,"line":310},[152,172556,172231],{"class":476},[152,172558,153563],{"class":293},[152,172560,65941],{"class":476},[152,172562,172563],{"class":483}," e:\n",[152,172565,172566,172568,172570,172572,172575,172577,172579,172581,172583],{"class":281,"line":324},[152,172567,32636],{"class":293},[152,172569,1819],{"class":483},[152,172571,1870],{"class":476},[152,172573,172574],{"class":289},"\"出错了:",[152,172576,2703],{"class":293},[152,172578,1891],{"class":483},[152,172580,2752],{"class":293},[152,172582,2059],{"class":289},[152,172584,1825],{"class":483},[19,172586,147794],{},[270,172588,172591],{"className":172589,"code":172590,"language":6829,"meta":275},[6827],"出错了:invalid literal for int() with base 10: 'abc'\n",[277,172592,172590],{"__ignoreMap":275},[1760,172594,172596],{"id":172595},"_96-else和finally","9.6 else和finally",[19,172598,172599,172601],{},[277,172600,3361],{},"：没有异常时执行。",[19,172603,172604,172607],{},[277,172605,172606],{},"finally","：无论是否异常都会执行。",[270,172609,172611],{"className":31715,"code":172610,"language":31717,"meta":275,"style":275},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[277,172612,172613,172619,172637,172645,172655,172661,172682,172688],{"__ignoreMap":275},[152,172614,172615,172617],{"class":281,"line":282},[152,172616,172219],{"class":476},[152,172618,5382],{"class":483},[152,172620,172621,172623,172625,172627,172629,172631,172633,172635],{"class":281,"line":303},[152,172622,46930],{"class":483},[152,172624,1864],{"class":476},[152,172626,4033],{"class":293},[152,172628,1819],{"class":483},[152,172630,55158],{"class":293},[152,172632,1819],{"class":483},[152,172634,157133],{"class":289},[152,172636,31834],{"class":483},[152,172638,172639,172641,172643],{"class":281,"line":310},[152,172640,172231],{"class":476},[152,172642,153563],{"class":293},[152,172644,5382],{"class":483},[152,172646,172647,172649,172651,172653],{"class":281,"line":324},[152,172648,32636],{"class":293},[152,172650,1819],{"class":483},[152,172652,154551],{"class":289},[152,172654,1825],{"class":483},[152,172656,172657,172659],{"class":281,"line":329},[152,172658,3361],{"class":476},[152,172660,5382],{"class":483},[152,172662,172663,172665,172667,172669,172672,172674,172676,172678,172680],{"class":281,"line":343},[152,172664,32636],{"class":293},[152,172666,1819],{"class":483},[152,172668,1870],{"class":476},[152,172670,172671],{"class":289},"\"输入正确:",[152,172673,2703],{"class":293},[152,172675,3329],{"class":483},[152,172677,2752],{"class":293},[152,172679,2059],{"class":289},[152,172681,1825],{"class":483},[152,172683,172684,172686],{"class":281,"line":348},[152,172685,172606],{"class":476},[152,172687,5382],{"class":483},[152,172689,172690,172692,172694,172697],{"class":281,"line":362},[152,172691,32636],{"class":293},[152,172693,1819],{"class":483},[152,172695,172696],{"class":289},"\"程序结束\"",[152,172698,1825],{"class":483},[19,172700,172701,172703],{},[277,172702,172606],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[1760,172705,172707],{"id":172706},"_97-抛出异常","9.7 抛出异常",[19,172709,172710],{},"程序可以主动抛出异常。",[270,172712,172714],{"className":31715,"code":172713,"language":31717,"meta":275,"style":275},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[277,172715,172716,172725,172737,172750,172770,172774,172778],{"__ignoreMap":275},[152,172717,172718,172720,172723],{"class":281,"line":282},[152,172719,33284],{"class":476},[152,172721,172722],{"class":285}," set_age",[152,172724,162752],{"class":483},[152,172726,172727,172729,172731,172733,172735],{"class":281,"line":303},[152,172728,4744],{"class":476},[152,172730,17322],{"class":483},[152,172732,844],{"class":476},[152,172734,5735],{"class":293},[152,172736,5382],{"class":483},[152,172738,172739,172741,172743,172745,172748],{"class":281,"line":310},[152,172740,104769],{"class":476},[152,172742,153563],{"class":293},[152,172744,1819],{"class":483},[152,172746,172747],{"class":289},"\"年龄不能为负数\"",[152,172749,1825],{"class":483},[152,172751,172752,172754,172756,172758,172760,172762,172764,172766,172768],{"class":281,"line":324},[152,172753,32636],{"class":293},[152,172755,1819],{"class":483},[152,172757,1870],{"class":476},[152,172759,163320],{"class":289},[152,172761,2703],{"class":293},[152,172763,71558],{"class":483},[152,172765,2752],{"class":293},[152,172767,2059],{"class":289},[152,172769,1825],{"class":483},[152,172771,172772],{"class":281,"line":329},[152,172773,307],{"emptyLinePlaceholder":306},[152,172775,172776],{"class":281,"line":343},[152,172777,307],{"emptyLinePlaceholder":306},[152,172779,172780,172783,172785,172787],{"class":281,"line":348},[152,172781,172782],{"class":483},"set_age(",[152,172784,2340],{"class":476},[152,172786,2026],{"class":293},[152,172788,1825],{"class":483},[19,172790,172791],{},"调用者可以捕获：",[270,172793,172795],{"className":31715,"code":172794,"language":31717,"meta":275,"style":275},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[277,172796,172797,172803,172814,172824],{"__ignoreMap":275},[152,172798,172799,172801],{"class":281,"line":282},[152,172800,172219],{"class":476},[152,172802,5382],{"class":483},[152,172804,172805,172808,172810,172812],{"class":281,"line":303},[152,172806,172807],{"class":483},"    set_age(",[152,172809,2340],{"class":476},[152,172811,2026],{"class":293},[152,172813,1825],{"class":483},[152,172815,172816,172818,172820,172822],{"class":281,"line":310},[152,172817,172231],{"class":476},[152,172819,153563],{"class":293},[152,172821,65941],{"class":476},[152,172823,172563],{"class":483},[152,172825,172826,172828],{"class":281,"line":324},[152,172827,32636],{"class":293},[152,172829,68336],{"class":483},[1760,172831,172833],{"id":172832},"_98-自定义异常","9.8 自定义异常",[270,172835,172837],{"className":31715,"code":172836,"language":31717,"meta":275,"style":275},"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",[277,172838,172839,172853,172857,172861,172865,172873,172883,172894,172904,172908,172912,172918,172935,172946],{"__ignoreMap":275},[152,172840,172841,172843,172846,172848,172851],{"class":281,"line":282},[152,172842,16309],{"class":476},[152,172844,172845],{"class":285}," BalanceNotEnoughError",[152,172847,1819],{"class":483},[152,172849,172850],{"class":293},"Exception",[152,172852,32123],{"class":483},[152,172854,172855],{"class":281,"line":303},[152,172856,150874],{"class":476},[152,172858,172859],{"class":281,"line":310},[152,172860,307],{"emptyLinePlaceholder":306},[152,172862,172863],{"class":281,"line":324},[152,172864,307],{"emptyLinePlaceholder":306},[152,172866,172867,172869,172871],{"class":281,"line":329},[152,172868,33284],{"class":476},[152,172870,151523],{"class":285},[152,172872,164149],{"class":483},[152,172874,172875,172877,172879,172881],{"class":281,"line":343},[152,172876,4744],{"class":476},[152,172878,151479],{"class":483},[152,172880,487],{"class":476},[152,172882,163926],{"class":483},[152,172884,172885,172887,172890,172892],{"class":281,"line":348},[152,172886,104769],{"class":476},[152,172888,172889],{"class":483}," BalanceNotEnoughError(",[152,172891,151574],{"class":289},[152,172893,1825],{"class":483},[152,172895,172896,172898,172900,172902],{"class":281,"line":362},[152,172897,5732],{"class":476},[152,172899,164156],{"class":483},[152,172901,2340],{"class":476},[152,172903,151512],{"class":483},[152,172905,172906],{"class":281,"line":367},[152,172907,307],{"emptyLinePlaceholder":306},[152,172909,172910],{"class":281,"line":381},[152,172911,307],{"emptyLinePlaceholder":306},[152,172913,172914,172916],{"class":281,"line":386},[152,172915,172219],{"class":476},[152,172917,5382],{"class":483},[152,172919,172920,172922,172924,172927,172929,172931,172933],{"class":281,"line":932},[152,172921,163827],{"class":483},[152,172923,1864],{"class":476},[152,172925,172926],{"class":483}," withdraw(",[152,172928,2119],{"class":293},[152,172930,14051],{"class":483},[152,172932,3382],{"class":293},[152,172934,1825],{"class":483},[152,172936,172937,172939,172942,172944],{"class":281,"line":942},[152,172938,172231],{"class":476},[152,172940,172941],{"class":483}," BalanceNotEnoughError ",[152,172943,32720],{"class":476},[152,172945,172563],{"class":483},[152,172947,172948,172950],{"class":281,"line":949},[152,172949,32636],{"class":293},[152,172951,68336],{"class":483},[19,172953,172954],{},"入门阶段大多数情况使用内置异常即可。",[1760,172956,172958],{"id":172957},"_99-traceback","9.9 traceback",[19,172960,172961],{},"调试时可以输出完整异常堆栈。",[270,172963,172965],{"className":31715,"code":172964,"language":31717,"meta":275,"style":275},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[277,172966,172967,172974,172978,172984,172994,173002],{"__ignoreMap":275},[152,172968,172969,172971],{"class":281,"line":282},[152,172970,31729],{"class":476},[152,172972,172973],{"class":483}," traceback\n",[152,172975,172976],{"class":281,"line":303},[152,172977,307],{"emptyLinePlaceholder":306},[152,172979,172980,172982],{"class":281,"line":310},[152,172981,172219],{"class":476},[152,172983,5382],{"class":483},[152,172985,172986,172988,172990,172992],{"class":281,"line":324},[152,172987,3636],{"class":293},[152,172989,1819],{"class":483},[152,172991,157217],{"class":289},[152,172993,1825],{"class":483},[152,172995,172996,172998,173000],{"class":281,"line":329},[152,172997,172231],{"class":476},[152,172999,153563],{"class":293},[152,173001,5382],{"class":483},[152,173003,173004],{"class":281,"line":343},[152,173005,173006],{"class":483},"    traceback.print_exc()\n",[19,173008,173009],{},"日志系统中常把异常堆栈记录到文件。",[1760,173011,173013],{"id":173012},"_910-什么是模块","9.10 什么是模块",[19,173015,173016,173017,127320],{},"模块就是一个 ",[277,173018,147689],{},[19,173020,173021,173022,26230],{},"例如创建 ",[277,173023,173024],{},"my_math.py",[270,173026,173028],{"className":31715,"code":173027,"language":31717,"meta":275,"style":275},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[277,173029,173030,173038,173048,173052,173056,173065],{"__ignoreMap":275},[152,173031,173032,173034,173036],{"class":281,"line":282},[152,173033,33284],{"class":476},[152,173035,6851],{"class":285},[152,173037,152430],{"class":483},[152,173039,173040,173042,173044,173046],{"class":281,"line":303},[152,173041,5732],{"class":476},[152,173043,12485],{"class":483},[152,173045,2289],{"class":476},[152,173047,152441],{"class":483},[152,173049,173050],{"class":281,"line":310},[152,173051,307],{"emptyLinePlaceholder":306},[152,173053,173054],{"class":281,"line":324},[152,173055,307],{"emptyLinePlaceholder":306},[152,173057,173058,173060,173063],{"class":281,"line":329},[152,173059,33284],{"class":476},[152,173061,173062],{"class":285}," sub",[152,173064,152430],{"class":483},[152,173066,173067,173069,173071,173073],{"class":281,"line":343},[152,173068,5732],{"class":476},[152,173070,12485],{"class":483},[152,173072,2340],{"class":476},[152,173074,152441],{"class":483},[19,173076,173077],{},"在另一个文件中导入：",[270,173079,173081],{"className":31715,"code":173080,"language":31717,"meta":275,"style":275},"import my_math\n\nprint(my_math.add(1, 2))\n",[277,173082,173083,173090,173094],{"__ignoreMap":275},[152,173084,173085,173087],{"class":281,"line":282},[152,173086,31729],{"class":476},[152,173088,173089],{"class":483}," my_math\n",[152,173091,173092],{"class":281,"line":303},[152,173093,307],{"emptyLinePlaceholder":306},[152,173095,173096,173098,173101,173103,173105,173107],{"class":281,"line":310},[152,173097,31752],{"class":293},[152,173099,173100],{"class":483},"(my_math.add(",[152,173102,2026],{"class":293},[152,173104,14051],{"class":483},[152,173106,1894],{"class":293},[152,173108,31834],{"class":483},[1760,173110,173112],{"id":173111},"_911-import导入","9.11 import导入",[14,173114,173116],{"id":173115},"_9111-导入模块","9.11.1 导入模块",[270,173118,173120],{"className":31715,"code":173119,"language":31717,"meta":275,"style":275},"import random\n\nprint(random.randint(1, 10))\n",[277,173121,173122,173128,173132],{"__ignoreMap":275},[152,173123,173124,173126],{"class":281,"line":282},[152,173125,31729],{"class":476},[152,173127,46665],{"class":483},[152,173129,173130],{"class":281,"line":303},[152,173131,307],{"emptyLinePlaceholder":306},[152,173133,173134,173136,173139,173141,173143,173145],{"class":281,"line":310},[152,173135,31752],{"class":293},[152,173137,173138],{"class":483},"(random.randint(",[152,173140,2026],{"class":293},[152,173142,14051],{"class":483},[152,173144,2254],{"class":293},[152,173146,31834],{"class":483},[14,173148,173150],{"id":173149},"_9112-导入指定内容","9.11.2 导入指定内容",[270,173152,173154],{"className":31715,"code":173153,"language":31717,"meta":275,"style":275},"from random import randint\n\nprint(randint(1, 10))\n",[277,173155,173156,173167,173171],{"__ignoreMap":275},[152,173157,173158,173160,173162,173164],{"class":281,"line":282},[152,173159,32074],{"class":476},[152,173161,59133],{"class":483},[152,173163,31729],{"class":476},[152,173165,173166],{"class":483}," randint\n",[152,173168,173169],{"class":281,"line":303},[152,173170,307],{"emptyLinePlaceholder":306},[152,173172,173173,173175,173178,173180,173182,173184],{"class":281,"line":310},[152,173174,31752],{"class":293},[152,173176,173177],{"class":483},"(randint(",[152,173179,2026],{"class":293},[152,173181,14051],{"class":483},[152,173183,2254],{"class":293},[152,173185,31834],{"class":483},[14,173187,173189],{"id":173188},"_9113-起别名","9.11.3 起别名",[270,173191,173193],{"className":31715,"code":173192,"language":31717,"meta":275,"style":275},"import random as rd\n\nprint(rd.randint(1, 10))\n",[277,173194,173195,173206,173210],{"__ignoreMap":275},[152,173196,173197,173199,173201,173203],{"class":281,"line":282},[152,173198,31729],{"class":476},[152,173200,59133],{"class":483},[152,173202,32720],{"class":476},[152,173204,173205],{"class":483}," rd\n",[152,173207,173208],{"class":281,"line":303},[152,173209,307],{"emptyLinePlaceholder":306},[152,173211,173212,173214,173217,173219,173221,173223],{"class":281,"line":310},[152,173213,31752],{"class":293},[152,173215,173216],{"class":483},"(rd.randint(",[152,173218,2026],{"class":293},[152,173220,14051],{"class":483},[152,173222,2254],{"class":293},[152,173224,31834],{"class":483},[270,173226,173228],{"className":31715,"code":173227,"language":31717,"meta":275,"style":275},"from random import randint as rint\n\nprint(rint(1, 10))\n",[277,173229,173230,173246,173250],{"__ignoreMap":275},[152,173231,173232,173234,173236,173238,173241,173243],{"class":281,"line":282},[152,173233,32074],{"class":476},[152,173235,59133],{"class":483},[152,173237,31729],{"class":476},[152,173239,173240],{"class":483}," randint ",[152,173242,32720],{"class":476},[152,173244,173245],{"class":483}," rint\n",[152,173247,173248],{"class":281,"line":303},[152,173249,307],{"emptyLinePlaceholder":306},[152,173251,173252,173254,173257,173259,173261,173263],{"class":281,"line":310},[152,173253,31752],{"class":293},[152,173255,173256],{"class":483},"(rint(",[152,173258,2026],{"class":293},[152,173260,14051],{"class":483},[152,173262,2254],{"class":293},[152,173264,31834],{"class":483},[14,173266,173268],{"id":173267},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[270,173270,173272],{"className":31715,"code":173271,"language":31717,"meta":275,"style":275},"from random import *\n",[277,173273,173274],{"__ignoreMap":275},[152,173275,173276,173278,173280,173282],{"class":281,"line":282},[152,173277,32074],{"class":476},[152,173279,59133],{"class":483},[152,173281,31729],{"class":476},[152,173283,173284],{"class":476}," *\n",[19,173286,173287],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[1760,173289,173291],{"id":173290},"_912-常用内置模块","9.12 常用内置模块",[14,173293,173295],{"id":173294},"_9121-random","9.12.1 random",[270,173297,173299],{"className":31715,"code":173298,"language":31717,"meta":275,"style":275},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[277,173300,173301,173307,173311,173325,173344],{"__ignoreMap":275},[152,173302,173303,173305],{"class":281,"line":282},[152,173304,31729],{"class":476},[152,173306,46665],{"class":483},[152,173308,173309],{"class":281,"line":303},[152,173310,307],{"emptyLinePlaceholder":306},[152,173312,173313,173315,173317,173319,173321,173323],{"class":281,"line":310},[152,173314,31752],{"class":293},[152,173316,173138],{"class":483},[152,173318,2026],{"class":293},[152,173320,14051],{"class":483},[152,173322,2254],{"class":293},[152,173324,31834],{"class":483},[152,173326,173327,173329,173332,173334,173336,173338,173340,173342],{"class":281,"line":324},[152,173328,31752],{"class":293},[152,173330,173331],{"class":483},"(random.choice([",[152,173333,151225],{"class":289},[152,173335,14051],{"class":483},[152,173337,152273],{"class":289},[152,173339,14051],{"class":483},[152,173341,161068],{"class":289},[152,173343,34480],{"class":483},[152,173345,173346,173348,173351,173353,173355,173357,173359,173361,173363,173365,173367,173369,173371,173373],{"class":281,"line":329},[152,173347,31752],{"class":293},[152,173349,173350],{"class":483},"(random.sample([",[152,173352,2026],{"class":293},[152,173354,14051],{"class":483},[152,173356,1894],{"class":293},[152,173358,14051],{"class":483},[152,173360,1888],{"class":293},[152,173362,14051],{"class":483},[152,173364,2101],{"class":293},[152,173366,14051],{"class":483},[152,173368,2127],{"class":293},[152,173370,113539],{"class":483},[152,173372,1894],{"class":293},[152,173374,31834],{"class":483},[14,173376,173378],{"id":173377},"_9122-time","9.12.2 time",[270,173380,173382],{"className":31715,"code":173381,"language":31717,"meta":275,"style":275},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[277,173383,173384,173390,173394,173401,173409],{"__ignoreMap":275},[152,173385,173386,173388],{"class":281,"line":282},[152,173387,31729],{"class":476},[152,173389,33166],{"class":483},[152,173391,173392],{"class":281,"line":303},[152,173393,307],{"emptyLinePlaceholder":306},[152,173395,173396,173398],{"class":281,"line":310},[152,173397,31752],{"class":293},[152,173399,173400],{"class":483},"(time.time())\n",[152,173402,173403,173405,173407],{"class":281,"line":324},[152,173404,96408],{"class":483},[152,173406,2026],{"class":293},[152,173408,1825],{"class":483},[152,173410,173411,173413,173415,173418],{"class":281,"line":329},[152,173412,31752],{"class":293},[152,173414,1819],{"class":483},[152,173416,173417],{"class":289},"\"1秒后执行\"",[152,173419,1825],{"class":483},[14,173421,173423],{"id":173422},"_9123-datetime","9.12.3 datetime",[270,173425,173427],{"className":31715,"code":173426,"language":31717,"meta":275,"style":275},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[277,173428,173429,173441,173445,173455,173462],{"__ignoreMap":275},[152,173430,173431,173433,173436,173438],{"class":281,"line":282},[152,173432,32074],{"class":476},[152,173434,173435],{"class":483}," datetime ",[152,173437,31729],{"class":476},[152,173439,173440],{"class":483}," datetime\n",[152,173442,173443],{"class":281,"line":303},[152,173444,307],{"emptyLinePlaceholder":306},[152,173446,173447,173450,173452],{"class":281,"line":310},[152,173448,173449],{"class":483},"now ",[152,173451,1864],{"class":476},[152,173453,173454],{"class":483}," datetime.now()\n",[152,173456,173457,173459],{"class":281,"line":324},[152,173458,31752],{"class":293},[152,173460,173461],{"class":483},"(now)\n",[152,173463,173464,173466,173469,173472,173474,173477],{"class":281,"line":329},[152,173465,31752],{"class":293},[152,173467,173468],{"class":483},"(now.strftime(",[152,173470,173471],{"class":289},"\"%Y-%m-",[152,173473,158028],{"class":293},[152,173475,173476],{"class":289}," %H:%M:%S\"",[152,173478,31834],{"class":483},[14,173480,173482],{"id":173481},"_9124-os","9.12.4 os",[270,173484,173486],{"className":31715,"code":173485,"language":31717,"meta":275,"style":275},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[277,173487,173488,173494,173498,173505],{"__ignoreMap":275},[152,173489,173490,173492],{"class":281,"line":282},[152,173491,31729],{"class":476},[152,173493,46642],{"class":483},[152,173495,173496],{"class":281,"line":303},[152,173497,307],{"emptyLinePlaceholder":306},[152,173499,173500,173502],{"class":281,"line":310},[152,173501,31752],{"class":293},[152,173503,173504],{"class":483},"(os.getcwd())\n",[152,173506,173507,173509,173512,173515],{"class":281,"line":324},[152,173508,31752],{"class":293},[152,173510,173511],{"class":483},"(os.listdir(",[152,173513,173514],{"class":289},"\".\"",[152,173516,31834],{"class":483},[14,173518,173520],{"id":173519},"_9125-sys","9.12.5 sys",[270,173522,173524],{"className":31715,"code":173523,"language":31717,"meta":275,"style":275},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[277,173525,173526,173533,173537,173544],{"__ignoreMap":275},[152,173527,173528,173530],{"class":281,"line":282},[152,173529,31729],{"class":476},[152,173531,173532],{"class":483}," sys\n",[152,173534,173535],{"class":281,"line":303},[152,173536,307],{"emptyLinePlaceholder":306},[152,173538,173539,173541],{"class":281,"line":310},[152,173540,31752],{"class":293},[152,173542,173543],{"class":483},"(sys.version)\n",[152,173545,173546,173548],{"class":281,"line":324},[152,173547,31752],{"class":293},[152,173549,173550],{"class":483},"(sys.path)\n",[1760,173552,173554,173555,173557,173558,2059],{"id":173553},"_913-if-name-main","9.13 if ",[694,173556,81147],{}," == \"",[694,173559,103395],{},[19,173561,173562,173563,173566],{},"模块被直接运行和被导入时，",[277,173564,173565],{},"__name__"," 的值不同。",[19,173568,173569,173570,26230],{},"创建 ",[277,173571,173572],{},"my_module.py",[270,173574,173576],{"className":31715,"code":173575,"language":31717,"meta":275,"style":275},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[277,173577,173578,173586,173596,173600,173604,173616],{"__ignoreMap":275},[152,173579,173580,173582,173584],{"class":281,"line":282},[152,173581,33284],{"class":476},[152,173583,6851],{"class":285},[152,173585,152430],{"class":483},[152,173587,173588,173590,173592,173594],{"class":281,"line":303},[152,173589,5732],{"class":476},[152,173591,12485],{"class":483},[152,173593,2289],{"class":476},[152,173595,152441],{"class":483},[152,173597,173598],{"class":281,"line":310},[152,173599,307],{"emptyLinePlaceholder":306},[152,173601,173602],{"class":281,"line":324},[152,173603,307],{"emptyLinePlaceholder":306},[152,173605,173606,173608,173610,173612,173614],{"class":281,"line":329},[152,173607,3202],{"class":476},[152,173609,32557],{"class":293},[152,173611,102896],{"class":476},[152,173613,102899],{"class":289},[152,173615,5382],{"class":483},[152,173617,173618,173620,173622,173624,173626,173628],{"class":281,"line":343},[152,173619,32636],{"class":293},[152,173621,167937],{"class":483},[152,173623,2026],{"class":293},[152,173625,14051],{"class":483},[152,173627,1894],{"class":293},[152,173629,31834],{"class":483},[19,173631,173632],{},"作用：",[416,173634,173635,173638],{},[419,173636,173637],{},"直接运行该文件时，执行测试代码。",[419,173639,173640],{},"被其他文件导入时，不执行测试代码。",[19,173642,173643],{},"这是写模块时很常用的习惯。",[1760,173645,173647],{"id":173646},"_914-包","9.14 包",[19,173649,173650,173651,173654],{},"包是包含 ",[277,173652,173653],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173656,173657],{},"目录结构：",[270,173659,173662],{"className":173660,"code":173661,"language":6829,"meta":275},[6827],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[277,173663,173661],{"__ignoreMap":275},[19,173665,173666],{},"导入：",[270,173668,173670],{"className":31715,"code":173669,"language":31717,"meta":275,"style":275},"from utils.file_utils import read_file\n",[277,173671,173672],{"__ignoreMap":275},[152,173673,173674,173676,173679,173681],{"class":281,"line":282},[152,173675,32074],{"class":476},[152,173677,173678],{"class":483}," utils.file_utils ",[152,173680,31729],{"class":476},[152,173682,173683],{"class":483}," read_file\n",[19,173685,173686,173688],{},[277,173687,173653],{}," 可以为空，也可以写包初始化逻辑。",[1760,173690,173692],{"id":173691},"_915-第三方包","9.15 第三方包",[19,173694,173695,173696,173698],{},"第三方包通过 ",[277,173697,25443],{}," 安装。",[270,173700,173702],{"className":272,"code":173701,"language":274,"meta":275,"style":275},"pip install requests\n",[277,173703,173704],{"__ignoreMap":275},[152,173705,173706,173708,173710],{"class":281,"line":282},[152,173707,25443],{"class":285},[152,173709,25446],{"class":289},[152,173711,147435],{"class":289},[19,173713,173714],{},"使用：",[270,173716,173718],{"className":31715,"code":173717,"language":31717,"meta":275,"style":275},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[277,173719,173720,173726,173730,173745],{"__ignoreMap":275},[152,173721,173722,173724],{"class":281,"line":282},[152,173723,31729],{"class":476},[152,173725,147435],{"class":483},[152,173727,173728],{"class":281,"line":303},[152,173729,307],{"emptyLinePlaceholder":306},[152,173731,173732,173735,173737,173740,173743],{"class":281,"line":310},[152,173733,173734],{"class":483},"response ",[152,173736,1864],{"class":476},[152,173738,173739],{"class":483}," requests.get(",[152,173741,173742],{"class":289},"\"https:\u002F\u002Fwww.example.com\"",[152,173744,1825],{"class":483},[152,173746,173747,173749],{"class":281,"line":324},[152,173748,31752],{"class":293},[152,173750,173751],{"class":483},"(response.status_code)\n",[19,173753,173754],{},"查看已安装包：",[270,173756,173758],{"className":272,"code":173757,"language":274,"meta":275,"style":275},"pip list\n",[277,173759,173760],{"__ignoreMap":275},[152,173761,173762,173764],{"class":281,"line":282},[152,173763,25443],{"class":285},[152,173765,120292],{"class":289},[19,173767,173768],{},"导出项目依赖：",[270,173770,173771],{"className":272,"code":147630,"language":274,"meta":275,"style":275},[277,173772,173773],{"__ignoreMap":275},[152,173774,173775,173777,173779,173781],{"class":281,"line":282},[152,173776,25443],{"class":285},[152,173778,147639],{"class":289},[152,173780,1416],{"class":476},[152,173782,147644],{"class":289},[19,173784,173785],{},"安装项目依赖：",[270,173787,173788],{"className":272,"code":147650,"language":274,"meta":275,"style":275},[277,173789,173790],{"__ignoreMap":275},[152,173791,173792,173794,173796,173798],{"class":281,"line":282},[152,173793,25443],{"class":285},[152,173795,25446],{"class":289},[152,173797,120976],{"class":293},[152,173799,147644],{"class":289},[1760,173801,173803],{"id":173802},"_916-模块搜索路径","9.16 模块搜索路径",[19,173805,173806,173807,173810],{},"Python 导入模块时会在 ",[277,173808,173809],{},"sys.path"," 中查找。",[270,173812,173814],{"className":31715,"code":173813,"language":31717,"meta":275,"style":275},"import sys\n\nfor path in sys.path:\n    print(path)\n",[277,173815,173816,173822,173826,173838],{"__ignoreMap":275},[152,173817,173818,173820],{"class":281,"line":282},[152,173819,31729],{"class":476},[152,173821,173532],{"class":483},[152,173823,173824],{"class":281,"line":303},[152,173825,307],{"emptyLinePlaceholder":306},[152,173827,173828,173830,173833,173835],{"class":281,"line":310},[152,173829,4668],{"class":476},[152,173831,173832],{"class":483}," path ",[152,173834,27653],{"class":476},[152,173836,173837],{"class":483}," sys.path:\n",[152,173839,173840,173842],{"class":281,"line":324},[152,173841,32636],{"class":293},[152,173843,170566],{"class":483},[19,173845,173846],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173848,158960],{},[270,173850,173853],{"className":173851,"code":173852,"language":6829,"meta":275},[6827],"random.py\njson.py\ntime.py\n",[277,173854,173852],{"__ignoreMap":275},[19,173856,173857],{},"这些文件名可能导致导入异常。",[1760,173859,173861],{"id":173860},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173863,173657],{},[270,173865,173868],{"className":173866,"code":173867,"language":6829,"meta":275},[6827],"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",[277,173869,173867],{"__ignoreMap":275},[19,173871,173872,26230],{},[277,173873,173874],{},"utils\u002Ffile_utils.py",[270,173876,173878],{"className":31715,"code":173877,"language":31717,"meta":275,"style":275},"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",[277,173879,173880,173886,173896,173900,173904,173914,173924,173932,173938,173942,173969,173979,173983,173987,173997,174023],{"__ignoreMap":275},[152,173881,173882,173884],{"class":281,"line":282},[152,173883,31729],{"class":476},[152,173885,148428],{"class":483},[152,173887,173888,173890,173892,173894],{"class":281,"line":303},[152,173889,32074],{"class":476},[152,173891,109648],{"class":483},[152,173893,31729],{"class":476},[152,173895,109653],{"class":483},[152,173897,173898],{"class":281,"line":310},[152,173899,307],{"emptyLinePlaceholder":306},[152,173901,173902],{"class":281,"line":324},[152,173903,307],{"emptyLinePlaceholder":306},[152,173905,173906,173908,173911],{"class":281,"line":329},[152,173907,33284],{"class":476},[152,173909,173910],{"class":285}," read_json",[152,173912,173913],{"class":483},"(path):\n",[152,173915,173916,173919,173921],{"class":281,"line":343},[152,173917,173918],{"class":483},"    path ",[152,173920,1864],{"class":476},[152,173922,173923],{"class":483}," Path(path)\n",[152,173925,173926,173928,173930],{"class":281,"line":348},[152,173927,4744],{"class":476},[152,173929,40267],{"class":476},[152,173931,170647],{"class":483},[152,173933,173934,173936],{"class":281,"line":362},[152,173935,16367],{"class":476},[152,173937,53175],{"class":483},[152,173939,173940],{"class":281,"line":367},[152,173941,307],{"emptyLinePlaceholder":306},[152,173943,173944,173946,173948,173951,173953,173955,173957,173959,173961,173963,173965,173967],{"class":281,"line":381},[152,173945,35515],{"class":476},[152,173947,148128],{"class":293},[152,173949,173950],{"class":483},"(path, ",[152,173952,148138],{"class":289},[152,173954,14051],{"class":483},[152,173956,148143],{"class":6858},[152,173958,1864],{"class":476},[152,173960,148148],{"class":289},[152,173962,15330],{"class":483},[152,173964,32720],{"class":476},[152,173966,149490],{"class":6858},[152,173968,5382],{"class":483},[152,173970,173971,173973,173975,173977],{"class":281,"line":386},[152,173972,16367],{"class":476},[152,173974,149501],{"class":483},[152,173976,46691],{"class":6858},[152,173978,1825],{"class":483},[152,173980,173981],{"class":281,"line":932},[152,173982,307],{"emptyLinePlaceholder":306},[152,173984,173985],{"class":281,"line":942},[152,173986,307],{"emptyLinePlaceholder":306},[152,173988,173989,173991,173994],{"class":281,"line":949},[152,173990,33284],{"class":476},[152,173992,173993],{"class":285}," write_json",[152,173995,173996],{"class":483},"(path, data):\n",[152,173998,173999,174001,174003,174005,174007,174009,174011,174013,174015,174017,174019,174021],{"class":281,"line":954},[152,174000,35515],{"class":476},[152,174002,148128],{"class":293},[152,174004,173950],{"class":483},[152,174006,153313],{"class":289},[152,174008,14051],{"class":483},[152,174010,148143],{"class":6858},[152,174012,1864],{"class":476},[152,174014,148148],{"class":289},[152,174016,15330],{"class":483},[152,174018,32720],{"class":476},[152,174020,149490],{"class":6858},[152,174022,5382],{"class":483},[152,174024,174025,174028,174030,174032,174034,174036,174038,174040,174042,174044,174046],{"class":281,"line":959},[152,174026,174027],{"class":483},"        json.dump(data, ",[152,174029,46691],{"class":6858},[152,174031,14051],{"class":483},[152,174033,148474],{"class":6858},[152,174035,1864],{"class":476},[152,174037,35324],{"class":293},[152,174039,14051],{"class":483},[152,174041,153349],{"class":6858},[152,174043,1864],{"class":476},[152,174045,1894],{"class":293},[152,174047,1825],{"class":483},[19,174049,174050,26230],{},[277,174051,155944],{},[270,174053,174055],{"className":31715,"code":174054,"language":31717,"meta":275,"style":275},"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",[277,174056,174057,174068,174072,174085,174105],{"__ignoreMap":275},[152,174058,174059,174061,174063,174065],{"class":281,"line":282},[152,174060,32074],{"class":476},[152,174062,173678],{"class":483},[152,174064,31729],{"class":476},[152,174066,174067],{"class":483}," read_json, write_json\n",[152,174069,174070],{"class":281,"line":303},[152,174071,307],{"emptyLinePlaceholder":306},[152,174073,174074,174076,174078,174081,174083],{"class":281,"line":310},[152,174075,161053],{"class":483},[152,174077,1864],{"class":476},[152,174079,174080],{"class":483}," read_json(",[152,174082,153168],{"class":289},[152,174084,1825],{"class":483},[152,174086,174087,174089,174091,174093,174095,174097,174099,174101,174103],{"class":281,"line":324},[152,174088,171871],{"class":483},[152,174090,64016],{"class":289},[152,174092,52774],{"class":483},[152,174094,151225],{"class":289},[152,174096,14051],{"class":483},[152,174098,152809],{"class":289},[152,174100,52774],{"class":483},[152,174102,2794],{"class":293},[152,174104,166489],{"class":483},[152,174106,174107,174110,174112],{"class":281,"line":329},[152,174108,174109],{"class":483},"write_json(",[152,174111,153168],{"class":289},[152,174113,174114],{"class":483},", students)\n",[1760,174116,174118],{"id":174117},"_918-易错点","9.18 易错点",[416,174120,174121,174124,174129,174134,174137,174140],{},[419,174122,174123],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[419,174125,174126,174127,29984],{},"能指定异常类型就不要裸写 ",[277,174128,172231],{},[419,174130,174131,174133],{},[277,174132,172606],{}," 无论是否出错都会执行。",[419,174135,174136],{},"模块文件名不要和标准库重名。",[419,174138,174139],{},"导入自己写的模块时，要注意运行目录。",[419,174141,174142],{},"第三方包要安装到当前解释器或虚拟环境中。",[1760,174144,174146],{"id":174145},"_919-本章练习","9.19 本章练习",[416,174148,174149,174152,174155,174161,174168],{},[419,174150,174151],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[419,174153,174154],{},"写函数读取文件，如果文件不存在则返回空字符串。",[419,174156,173569,174157,174160],{},[277,174158,174159],{},"math_utils.py","，实现加减乘除函数并导入使用。",[419,174162,174163,174164,174167],{},"创建一个 ",[277,174165,174166],{},"utils"," 包，把 JSON 读写函数放进去。",[419,174169,174170],{},"写一个程序，捕获除零异常和输入格式异常。",[1736,174172,174173],{},"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":275,"searchDepth":303,"depth":303,"links":174175},[174176,174177,174178,174179,174180,174181,174182,174183,174184,174185,174186,174192,174199,174201,174202,174203,174204,174205,174206],{"id":172028,"depth":303,"text":172029},{"id":172156,"depth":303,"text":172157},{"id":172205,"depth":303,"text":172206},{"id":172354,"depth":303,"text":172355},{"id":172526,"depth":303,"text":172527},{"id":172595,"depth":303,"text":172596},{"id":172706,"depth":303,"text":172707},{"id":172832,"depth":303,"text":172833},{"id":172957,"depth":303,"text":172958},{"id":173012,"depth":303,"text":173013},{"id":173111,"depth":303,"text":173112,"children":174187},[174188,174189,174190,174191],{"id":173115,"depth":310,"text":173116},{"id":173149,"depth":310,"text":173150},{"id":173188,"depth":310,"text":173189},{"id":173267,"depth":310,"text":173268},{"id":173290,"depth":303,"text":173291,"children":174193},[174194,174195,174196,174197,174198],{"id":173294,"depth":310,"text":173295},{"id":173377,"depth":310,"text":173378},{"id":173422,"depth":310,"text":173423},{"id":173481,"depth":310,"text":173482},{"id":173519,"depth":310,"text":173520},{"id":173553,"depth":303,"text":174200},"9.13 if name == \"main\"",{"id":173646,"depth":303,"text":173647},{"id":173691,"depth":303,"text":173692},{"id":173802,"depth":303,"text":173803},{"id":173860,"depth":303,"text":173861},{"id":174117,"depth":303,"text":174118},{"id":174145,"depth":303,"text":174146},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172020,"description":24991},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174213,"title":174214,"body":174215,"description":174378,"extension":1744,"meta":174379,"navigation":306,"path":174380,"seo":174381,"stem":174382,"__hash__":174383},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174216,"toc":174373},[174217,174220,174223,174226,174237,174239,174313,174316,174319,174322,174325,174328,174331,174334,174337,174340,174343],[10,174218,174214],{"id":174219},"python教程",[19,174221,174222],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174224,174225],{},"建议学习环境：",[416,174227,174228,174231,174234],{},[419,174229,174230],{},"Python 版本：Python 3.10 及以上。",[419,174232,174233],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[419,174235,174236],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[1760,174238,118415],{"id":118415},[416,174240,174241,174247,174253,174259,174265,174271,174277,174283,174289,174295,174301,174307],{},[419,174242,174243],{},[69,174244,174246],{"href":174245},".\u002Fch1-Python","Python环境与第一个程序",[419,174248,174249],{},[69,174250,174252],{"href":174251},".\u002Fch2","基础语法、变量与字符串",[419,174254,174255],{},[69,174256,174258],{"href":174257},".\u002Fch3","判断语句",[419,174260,174261],{},[69,174262,174264],{"href":174263},".\u002Fch4","循环语句",[419,174266,174267],{},[69,174268,174270],{"href":174269},".\u002Fch5","函数基础",[419,174272,174273],{},[69,174274,174276],{"href":174275},".\u002Fch6","数据容器",[419,174278,174279],{},[69,174280,174282],{"href":174281},".\u002Fch7","函数进阶",[419,174284,174285],{},[69,174286,174288],{"href":174287},".\u002Fch8","文件操作",[419,174290,174291],{},[69,174292,174294],{"href":174293},".\u002Fch9","异常、模块与包",[419,174296,174297],{},[69,174298,174300],{"href":174299},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[419,174302,174303],{},[69,174304,174306],{"href":174305},".\u002Fch11","面向对象基础",[419,174308,174309],{},[69,174310,174312],{"href":174311},".\u002Fch12","综合案例与复习路线",[1760,174314,174315],{"id":174315},"学习路线",[19,174317,174318],{},"第一阶段：能运行程序。",[19,174320,174321],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174323,174324],{},"第二阶段：能组织数据。",[19,174326,174327],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174329,174330],{},"第三阶段：能封装逻辑。",[19,174332,174333],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174335,174336],{},"第四阶段：能做小项目。",[19,174338,174339],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[1760,174341,174342],{"id":174342},"参考资料",[416,174344,174345,174352,174359,174366],{},[419,174346,174347,174348],{},"黑马程序员 Python 入门教程推荐：",[69,174349,174350],{"href":174350,"rel":174351},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[245],[419,174353,174354,174355],{},"Python 官方中文教程：",[69,174356,174357],{"href":174357,"rel":174358},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[245],[419,174360,174361,174362],{},"Python 标准库文档：",[69,174363,174364],{"href":174364,"rel":174365},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[245],[419,174367,174368,174369],{},"pyecharts 文档：",[69,174370,174371],{"href":174371,"rel":174372},"https:\u002F\u002Fpyecharts.org\u002F",[245],{"title":275,"searchDepth":303,"depth":303,"links":174374},[174375,174376,174377],{"id":118415,"depth":303,"text":118415},{"id":174315,"depth":303,"text":174315},{"id":174342,"depth":303,"text":174342},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24993},"\u002Fwiki\u002F2024-10-10-python",{"title":174214,"description":174378},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379007]